feat(ollama): tray 'Ollama 재확인' 메뉴 + 8th callback (#1 v0.2.3)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
altair823
2026-05-02 01:44:11 +09:00
parent c78f3af3a6
commit 557960ff5a
2 changed files with 26 additions and 5 deletions

View File

@@ -17,12 +17,12 @@ import { HealthChecker } from './services/HealthChecker.js';
import { LocalOllamaProvider } from './ai/LocalOllamaProvider.js';
import { AiWorker } from './ai/AiWorker.js';
import { registerCaptureApi } from './ipc/captureApi.js';
import { registerInboxApi, pushNoteUpdated } from './ipc/inboxApi.js';
import { registerInboxApi, pushNoteUpdated, pushOllamaStatus } from './ipc/inboxApi.js';
import { createInboxWindow, getInboxWindow } from './windows/inboxWindow.js';
import {
createQuickCaptureWindow, showQuickCapture, getQuickCaptureWindow
} from './windows/quickCaptureWindow.js';
import { createTray, refreshTray } from './tray.js';
import { createTray, refreshTray, refreshTrayOllama } from './tray.js';
import { MediaGc } from './services/MediaGc.js';
import { BackupService } from './services/BackupService.js';
import { ExportService } from './services/ExportService.js';
@@ -72,7 +72,8 @@ app.whenReady().then(async () => {
const health = new HealthChecker(provider, {
onUpdate: (status) => {
logger.info('ai.health', { ...status } as Record<string, unknown>);
// pushOllamaStatus 추가는 Task 4 에서 — helper 부재 시점.
pushOllamaStatus(getInboxWindow, status);
refreshTrayOllama(status.ok);
},
onTelemetry: (ev) => {
if (ev.kind === 'ollama_unreachable') {
@@ -335,7 +336,8 @@ app.whenReady().then(async () => {
silent: true
}).show();
}
}
},
/* runOllamaRecheck */ () => { void health.runOnce({ manual: true }); }
);
// F4-C 환경 앵커 — tray tooltip + 메뉴 첫 항목을 오늘 KST 캡처 수로 갱신.

View File

@@ -10,6 +10,8 @@ let _runExport: () => void = () => {};
let _runImport: () => void = () => {};
let _runSync: () => void = () => {};
let _runExportTelemetry: () => void = () => {};
let _runOllamaRecheck: () => void = () => {};
let _ollamaOk = true;
let _todayCount = 0;
function buildMenu() {
@@ -27,6 +29,11 @@ function buildMenu() {
items.push({ label: '백업에서 복원...', click: _runImport });
items.push({ label: '지금 동기화', click: _runSync });
items.push({ label: '사용 로그 내보내기...', click: _runExportTelemetry });
items.push({
label: 'Ollama 재확인',
enabled: !_ollamaOk,
click: _runOllamaRecheck
});
if (app.isPackaged) {
const { openAtLogin } = app.getLoginItemSettings();
items.push({
@@ -55,7 +62,8 @@ export function createTray(
runExport: () => void,
runImport: () => void,
runSync: () => void,
runExportTelemetry: () => void
runExportTelemetry: () => void,
runOllamaRecheck: () => void
): TrayType {
_showInbox = showInbox;
_showCapture = showCapture;
@@ -64,6 +72,7 @@ export function createTray(
_runImport = runImport;
_runSync = runSync;
_runExportTelemetry = runExportTelemetry;
_runOllamaRecheck = runOllamaRecheck;
const icon = nativeImage.createEmpty();
tray = new Tray(icon);
tray.setToolTip(`Inkling — 오늘 ${_todayCount}`);
@@ -82,3 +91,13 @@ export function refreshTray(todayCount: number): void {
tray.setToolTip(`Inkling — 오늘 ${todayCount}`);
tray.setContextMenu(buildMenu());
}
/**
* v0.2.3 #1 — Ollama 상태가 변할 때 main 의 health.onUpdate 가 호출.
* 메뉴의 "Ollama 재확인" 활성/비활성 상태 갱신.
*/
export function refreshTrayOllama(ok: boolean): void {
_ollamaOk = ok;
if (tray === null) return;
tray.setContextMenu(buildMenu());
}