src/main.c(2,418 行)main.c 是整個二進位的入口。它根據第一個參數決定進入哪個模式:無參數 → MCP stdio server;cli → 單次指令;install/update/uninstall/config → 安裝與設定子指令。設計哲學是單一靜態二進位:不另外帶 companion executable。
開頭先做基礎初始化(記憶體、log、平台抽象),然後分派:
stdio → MCP server(mcp/mcp.c)cli → 單次 CLI 指令(不啟動 daemon)install / update / uninstall / config → cli/cli.c--ui=true → 啟動 3D UI(ui/)MCP 模式不是自己包辦一切:它透過 daemon(daemon/)共享 watcher、索引 job、UI。第一個 daemon-backed session 啟動 daemon,最後一個 session 關閉它。CLI 模式刻意分離——單次指令不啟動 daemon、不留常駐 process。
MCP 是 stdio 協議:stdout 只能有 JSON-RPC,混入任何日誌都會讓 client 解析失敗。所以日誌被導到 stderr(session 層)或 ${CBM_CACHE_DIR}/logs/cbm-daemon.log(daemon 層)。--progress 只寫 stderr,讓 pipe/script 保持機器可讀。