# 執行期分層

Agenvoy 的執行期分層：session 儲存、儀表板、pending 路由、記憶、排程、IPC 與 TUI，以及實作各層的 package。

| 層 | 套件 | 職責 |
|---|---|---|
| Session | `internal/session` | history.json / summary / action.log / pending metadata / fsnotify observer；session 設定存於 SQLite `session` 表，存活狀態改由 ToriiDB online marker 判定，不再持久化 `state` |
| Dashboard | `page/` + `internal/runtime/routes` | Web UI 內嵌進執行檔並於 `/` 提供；`AGENVOY_PAGE_DIR` 改為從磁碟提供。daemon 啟動時另會安裝一個指向該 URL 的 Chrome app 啟動器 —— macOS 為 `~/Applications` 下的 bundle、Linux 為 `.desktop` 項目、WSL 下為 Windows 捷徑 —— 讓儀表板以獨立視窗開啟。只寫入一次，之後略過；找不到 Chrome 僅記錄警告。自 v1.0.1 起亦可離線運作：`/sw.js` 以 service worker 預快取內嵌資產，`/vendor/*` 則從 `~/.config/agenvoy/vendor/` 提供第三方函式庫，該目錄由 daemon 啟動時的 `internal/runtime/webapp.SyncAsset` 填入，執行檔版本變動時更新 |
| Pending | `internal/runtime/pending.go` | prefix-routed 的 confirm/ask listener registry；各前端 listener 透過 `RegisterListener(prefix)` 或 `RegisterListenerMatch(prefix, match)`，透過 `PickNextMatch(prefix, accept)` 認領 |
| Memory | go-sqlkit（SQLite：`session`、`message_meta`、`messages` + FTS5、`action_history`、`file_history`、`usage`）+ ToriiDB（`db_0` 工具與供應商額度快取、`db_1` 對話向量、`db_2` 錯誤記憶、`db_3` online marker） | 全文封存（trigram tokenizer）、各模型用量（v1.0.26 起含每次回覆的 tool call id）、檔案快照、語意搜尋、90 天錯誤記憶。`state` 表於 v0.35.3 移除，存活狀態改由 ToriiDB online marker 承載；同版起改走 ToriiDB 自有 socket（目前 ToriiDB v0.7.0），`/v1/toriidb` HTTP 入口已不存在 |
| Scheduler | `internal/runtime` scheduler 與 fsnotify watcher | 綁定 scheduler skill 的 cron / one-shot 任務；`{tasks,crons}.json` 變更時 hot-reload |
| IPC | `internal/runtime/ipc` | v1.2.0 起 daemon 的 Unix socket `~/.config/agenvoy/daemon.sock`（權限 0600、以換行分隔的 JSON）。client 送往 daemon 的 frame：`run`、`pending`、`cancel`（可帶 `pause`）、`steer`、`reply`、`mcp`；daemon 送往 client：`event`、`ask`、`done`、`verify`、`workdir`、`mcp`。執行綁定發起它的連線：該連線關閉即取消執行，pending 任務保留。確認與 `ask_user` 問題只送往發起該執行的 TUI 視窗（window hash）；受限路徑的核准會附上使用者在 TUI 輸入的密碼，由 daemon 以 `sudo -S -v` 驗證 |
| TUI | `internal/runtime/tui` | bubbletea inline-chat 前端；設計上為單一 package。透過 `internal/runtime/ipc` 作為 daemon 的 client：每 5 秒重連，離線時顯示 `Connecting`，一般輸入、skill 與 `/pending` 暫不送出，本地 `/` 指令仍可執行。移除於 v1.2.0：TUI 行程內執行 agent 的方式已移除；改由 daemon 執行，TUI 經 socket 連線 |
