daemon/ — 會話協調

一帳號一 daemon、IPC、admission barrier
目錄:src/daemon/(daemon.c 847 行 + application.c + ipc.c + runtime.c…)

大方向

daemon/ 是「每帳號一個協調者」的實作。它管:daemon 的啟動/bootstrap(bootstrap.c)、前台 session 的 IPC(ipc.c)、應用程式 job 排程(application.c)、與 runtime 生命週期(runtime.c)。


1. Daemon 啟動

bootstrap.c · daemon.c daemon/daemon 的啟動、鎖、與生命周期。

第一個 daemon-backed session 啟動 daemon(bootstrap);最後一個 session 關閉它。daemon 持有共享的 watcher/索引 jobs/UI。

2. IPC

ipc.c(cbm_daemon_ipc_*) daemon/前台 session ↔ daemon 的通訊。

IPCS 層封裝 session 與 daemon 之間的通訊:endpoint 位址、frame 收送、lifetime reservation、startup gate。平台差異(POSIX socket vs Windows)在 ipc_* 相關檔案中抽象。

3. Application 排程

application.c(cbm_daemon_application_*) daemon/索引 job 的排程、執行、取消。

daemon 收到「幫我索引 X」就排一個 application job。job 有物理上限、busy queue、可被 activation 取消。測試透過 _for_test() 鉤子注入失敗/延遲。

4. Runtime & admission

runtime.c · project_lock.c daemon/runtime worker 與 per-project 鎖。

runtime 管理 daemon 的 worker/process 生命週期;project_lock 提供 per-project 的 OS-backed 鎖,序列化同專案的並行寫入(CLI 與 MCP session 共用)。

看完這頁你應該能說出:daemon 的 bootstrap/lifecycle、IPC 封裝了平台差異、索引是 daemon 的 application job、以及 per-project lock 讓 CLI/MCP 並行寫入不會衝突。