Rivumi 架構地圖:一次 coding-agent 任務如何穿過 workspace、runtime、tools 與 events
Rivumi 把 coding-agent 任務拆成可追蹤的邊界:native runtime 的副作用經過 Rivumi tools、permission 與 sandbox;external runtime 保留自己的 loop 與工具,再把 patch 交回 Rivumi 稽核。這篇是規劃中 20 篇系列的入口地圖。
沿著一次 coding-agent 任務的實際路徑拆解 Rivumi:從 TUI、disposable workspace、prompt 與兩條 runtime lane,走到工具權限、state/event lifecycle、MCP、subagents、SDK/IDE,最後把同一套邊界延伸到 Cloudflare 遠端執行。每篇只追一條 data flow、failure boundary 與測試證據。
Rivumi 把 coding-agent 任務拆成可追蹤的邊界:native runtime 的副作用經過 Rivumi tools、permission 與 sandbox;external runtime 保留自己的 loop 與工具,再把 patch 交回 Rivumi 稽核。這篇是規劃中 20 篇系列的入口地圖。
Rivumi 的 TUI 與 plain CLI 是同一套 runtime 的兩種使用者介面。CLI 先依 TTY 與旗標選擇呈現方式,runner 再送出事件;TUI 把事件投影成 thinking、tool、approval、verification 與終態。使用者能從畫面分辨 native 與 external runtime,但 UI 不替底層能力背書。
Rivumi 先把指定的完整 Git commit 複製到 run directory 裡的 detached-HEAD workspace,再讓 runtime 修改與驗證。原始 repo、執行 workspace 與 run artifacts 因此有清楚邊界;這能提供 source isolation 與 audit bundle,但不等於 OS sandbox。
Rivumi 先在應用程式層解析 user 與 root-to-leaf 專案 instructions,再把 runtime、skills、workspace 與最近 20 筆 explicit memory 放進具名 prompt sections。這套流程可追蹤、可 reload,但不是 semantic memory,也不會把 repo 文字升格成 system authority。
Rivumi 的 native lane 由 AgentRunner 掌握狀態轉移:準備 workspace、送出 model request、執行 tool calls、寫回 observations,模型沒有再呼叫工具時才進入 verification。step、wall time、重複動作、token 與取消條件都能先於模型宣告終止 run;provider adapter 的協定翻譯留給下一篇。
Rivumi 把 OpenAI-compatible、Responses、Anthropic、Gemini、Workers AI、scripted 與 experimental Codex OAuth adapter 收斂成同一個 `ModelProvider` contract。Codex OAuth transport 讀 SSE,但仍在 adapter 內累積成一次性的 canonical `ModelTurn`;AgentRunner 不直接消費 token delta。
Rivumi 用靜態 model role catalog 提供候選順序,只對 retryable provider error 重試與 fallback;cache 是 provider hint 加 trace,cost 是靜態價表估算。三者都留下訊號,但都不是即時營運路由或帳單。
`ExternalCodingRunner` 是 Rivumi 的第二條 runtime lane:外部 coding CLI 擁有自己的 model loop 與 credential,Rivumi 只交付任務與 disposable clone,再把回傳 patch 當成不受信任輸入,重跑 path audit、verification 與 source invariant。它是有明確 capability boundary 的 handoff,不是另一種 `ModelProvider`。
這篇只拆 Rivumi 的 tool executor 如何把一次呼叫安全落地:`SafePathPolicy` 限制 path 並阻擋 symlink escape,`VerificationCommand` 固定 argv 且使用 `shell=False`,subprocess 只拿清理過的 env,寫入走 read-version hash 與 atomic replace,timeout 會終止整個 process group。權限決策、OS sandbox 與 tool program 各留給後續專篇。
Rivumi 先套不可繞過的 critical floor,再評估 user/org/project deny,最後才看 allow。dangerous mode 只自動放行 read/modify,execute 仍經過命令分類與 approval;這是 authority policy,不是 OS sandbox。
Rivumi 可把指定的 local command/verification 包進 macOS sandbox-exec、Linux bubblewrap 或 Landlock/seccomp。需要的 backend 不存在時以 exit 126 停止,不直接裸跑;但這個範圍不涵蓋 external CLI、MCP/LSP 或整個 Rivumi process。
Rivumi 只平行執行同時標成 read-only、concurrency-safe 與 READ effect 的 tool call;tool_program 提供有界的 read-only repeat/branch,tool_transaction 則對可能碰到的 workspace files 做 snapshot 與失敗 rollback。它不是外部副作用的通用交易系統。
Rivumi 同時維護 append-only 的 `events.jsonl` 與原子替換的 `session.json`,用 sequence reconciliation 判斷 crash 後能否安全續跑。這份 event contract 現在也支援 deterministic replay、JSON replay、從指定 sequence 建立 fork seed,以及在不重放副作用的前提下建立新 workspace;遇到停在 `tool.started` 或 `verification.started` 的不確定狀態仍然 hard fail。
Rivumi 在 85% context pressure 附近啟動兩種不同流程:native loop 可做一次 bounded deterministic summary fallback;支援原生 compaction 的 conversation runtime 則在完成 turn 後壓縮並回報 lifecycle。兩條路徑都會在下一次請求重新注入 workspace snapshot。
Rivumi 只有在明確 allowlist 後才載入專案 MCP server,將 stdio 或 Streamable HTTP 能力投影到既有 ToolExecutor,再沿用 hook、approval、timeout 與 cleanup 邊界。
Rivumi 把 skills 當成有界的 repository-local guidance、把 hooks 當成 opt-in 且只能否決的 host commands,再用 local plugin manifest 封裝 skill 與 hook;三者的權限完全不同。
Rivumi 把每次 subagent dispatch 正規化成最多四個節點的 dependency waves,讓同 wave 的唯讀 child 在隔離 workspace 平行分析,再由 parent 重新走 hook、approval 與 transaction 執行修改。
Rivumi 用 0.x typed SDK facade 暴露 bounded run 與 conversation contracts;WebSocket attach 只包住一個預先建立、由 controller 擁有的 runtime session,沒有 conversation-ID resume 或多 client routing。
Rivumi 將最多 200 筆 diagnostics 與 32 個 visible files 正規化成有界、repository-local、且不受信任的 context;VS Code 與 managed LSP 目前只提供訊號,沒有 completion、rename、code action 或完整 IDE RPC。
Rivumi 的舊同步 M6 路徑曾完成一次真實 deployed coding run;目前已擴成帶 RunSession、SSE、approval、cancel 與 artifact 的 async control plane,但新增路徑尚未 live revalidate。Sandbox 只拿分 audience 的短效 HMAC capability,provider credential 留在 Worker;現有證據不等於 production traffic 或 SLO。