altair823 71aafa2337 feat(app): wire NotificationService, IntentService, ContinuityService into main
Task 30 of the slice plan. Replaces the Task 2 placeholder main
entry with the final whenReady wiring:
- profile path resolution + better-sqlite3 open + migrations.
- repo / store / continuity / intent / health constructed
  against the open db.
- LocalOllamaProvider reads INKLING_OLLAMA_ENDPOINT for LAN
  dogfood, falls back to localhost:11434 otherwise.
- AiWorker registers an onUpdate that fans note:updated through
  pushNoteUpdated(getInboxWindow, note).
- NotificationService is plumbed to electron.Notification with
  isSupported gating; CaptureService gets the worker.enqueue +
  notify.celebrate hooks.
- IPC bindings for both capture and inbox surfaces.
- HotkeyService registers Ctrl/Cmd+Shift+J -> showQuickCapture;
  failure logged but not fatal.
- Tray menu '구출한 메모 보기' / '기억 구출하기' / '종료'
  with click-to-show-inbox.
- worker.loadFromDb() resumes pending jobs at startup.
- MediaGc runs once and logs the count of removed orphan dirs.
- Two logger.info(..., {...obj} as Record<string, unknown>)
  casts at the health and gc result sites to satisfy the
  index-signature requirement on logger meta — the result
  objects (HealthResult, {removed: number}) are assignment-
  compatible with Record<string, unknown> at runtime but TS
  refuses without the spread + cast.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 12:19:53 +09:00
2026-04-24 19:15:52 +00:00
Description
No description provided
7.3 MiB
2026-05-15 06:35:49 +00:00
Languages
TypeScript 99.6%
HTML 0.3%
JavaScript 0.1%