跳到主內容

Theme / v5.1.61

Oh My OpenAgent

AI 代理編排系統

基礎觀念

v5.1.8–v5.1.21:Code Mode 隔離與套件、權限 fail-closed 與任務可靠性

🔴 進階|v5.1.7 → v5.1.21 的升級重點:Code Mode 沙箱 cell 與 per-session 套件安裝、權限系統改為 fail-closed、MCP 共用事故修復與 /mcp 管理器、Windows memory reflection 修復。含互動測驗與升級檢查清單。

概述

涵蓋 v5.1.8 ~ v5.1.21(2026-10 月上旬,13 個已發布版本;v5.1.20 因發布管線失敗從未問世,變更全併入 v5.1.21)。這條支線的主軸不是新架構,而是把 OmO Native 的三根柱子——Code Mode、權限系統、任務生命週期——各自推到可依賴的程度:

版本 引擎(senpi) 一句話
v5.1.8 2026.10.1-2 Hotfix:bun 不再啟動幻影 agent;模型路由改版;中日文記憶召回
v5.1.9 2026.10.1-3 Desktop 受限模式不對內部工具請求批准;Windows 冷啟 Python 修復
v5.1.10 2026.10.1-3 Hotfix:omo -p 在任務結束後能退出(不再掛住 CI/cron)
v5.1.11 2026.10.1-3 與 host 失聯的任務重連或限時結束並釋放 lane
v5.1.12 2026.10.2 omo.computer.permission_required 事件;平台包「smoke 通過才發布」
v5.1.13 2026.10.3 MCP 共用事故修復:session 各自綁定共用 servers
v5.1.14 2026.10.5 安全修復:權限啟動失敗改為 fail-closed
v5.1.15 2026.10.6 auto permission preset;TUI 呈現打磨
v5.1.16 2026.10.7 host handoff;visual-qa skill 加入 Apple HIG 檢查清單
v5.1.17 2026.10.8 閒置 host 會退出;Windows memory reflection 修復
v5.1.18 2026.10.9 one-shot engine 指令修復;Bun 下限 1.4;%load、%pip install
v5.1.19 2026.10.10 Code Mode per-session 套件;沙箱 cell;閒置 worker 回收
v5.1.21 2026.10.10-3 isolation.js: "process";/mcp 管理器;v5.1.20 併入此版

Code Mode:沙箱、獨立 kernel 與 per-session 套件

Per-session 套件安裝(v5.1.19)

Code Mode 的 eval cell 現在能自己裝套件。整格 cell 只寫 %bun add 或 %npm add 時,套件會裝進這個 session 自帶的 managed environment(受控環境):

%bun add zod

下一格 cell 直接 import 使用。三個關鍵保證:

  • 不重啟 kernel——裝完接著跑
  • 不碰專案——專案的 package.json 與 node_modules 原封不動
  • 不執行套件 scripts——安裝階段的 postinstall 等腳本一律不跑,供應鏈攻擊面收窄

v5.1.18 同期補上 %load <path>(載入檔案進 cell)與免重啟 kernel 的 %pip install,Python 側也有 agent(prompt, tools=[...]) 與 workpool 的 cell 定義工具。

隔離的三個層級

層級 設定 隔離什麼 適用
無(預設) — — 日常 cell,最快
沙箱 cell isolate: true(搭配 sandbox.enabled,v5.1.19) cell 跑在 senpi 沙箱的 QuickJS runtime,沒有 ambient process 與 fetch 不信任的探索性程式碼
獨立 kernel 程序 isolation.js: "process"(v5.1.21) 每個 JavaScript kernel 各自一個程序;segfault、OOM、process.exit 只死那個 kernel 長 session 防崩潰

isolation.js: "process" 的行為細節:kernel 崩潰後下一格 cell 自動在新 kernel 上繼續,並出一則指名崩潰原因的 notice——session 不會被拖下水。官方明確定位它是防崩潰,不是防惡意程式碼(那是沙箱 cell 的工作)。

工具面的小補強

  • Python cell 的 @tool 函式現在能像 JavaScript 的 tool(fn) 一樣授予任務子程序(v5.1.19)
  • Code mode 的 wait() 與 handle() 擴及 omo 自己的 task children 與 workpools(v5.1.18)
  • kernelTools.enabled: false、languages.pyInterpreter、prompt.advertiseHelpers: true 等「設了卻被忽略」的設定在 v5.1.21 全部生效

權限系統:從靜默降級到 fail-closed

v5.1.14 安全修復

v5.1.13(含)之前,權限系統啟動失敗時——permissionPreset 拼錯、某條規則是 null、approvals 檔不可讀——後果是:所有工具呼叫在完全沒有權限檢查的情況下繼續執行,而且沒有任何提示。

v5.1.14 起,權限系統起不來就關門:每次工具呼叫被拒絕,錯誤訊息是 Permission setup failed: <reason>,直到你把設定修好。這是教科書級的 fail-closed(失敗即關閉)。

auto permission preset(v5.1.15)

新的 auto preset 只在能證明動作停留在專案內時才免問批准——判定依據是每個工具實際將開啟的那個檔案,而不是籠統的路徑前綴。無法釘死的動作一律照問;你自訂的 deny / ask 規則永遠優先於 auto 的判斷。

MCP:一次共用事故與 /mcp 管理器

v5.1.13:MCP server <name> is disabled

v5.1.10 起,一個 memory child 或被委派任務(delegated task)結束時,會把整個 process 共用的 MCP servers 一併關掉——之後所有 MCP 呼叫都失敗。根因是資源釋放以 process 為單位,而使用者是以 session 為單位在用。

修復方向:每個 session 對共用 servers 各自持有 binding,child 結束只釋放自己的。還沒升級時的官方暫時解法是關閉 memory(~/.omo/omo.json 設 "memory": { "enabled": false },或啟動加 --omo-senpi-memory-disabled=true)。

v5.1.21:/mcp 互動式管理器

/mcp 打開終端機內的 server 管理介面,每列 server 依當前狀態提供動作:啟用/停用、變更暴露等級(exposure)、測試、重連、登入/登出,旁邊還有工具、詳細資訊與日誌檢視。

邊界設計值得注意:只有受信任的 global 與專案 servers 可編輯,且編輯會保留設定檔其餘內容;imported、extension、skill 與未受信任的專案 servers 一律唯讀。非 TUI 客戶端收到的是狀態文字。

隨堂測驗

團隊在 v5.1.11 上開著 memory 跑了一陣子,發現所有 MCP 呼叫都報「MCP server github is disabled」。在升級到 v5.1.13+ 之前,官方提供的暫時解法是?

💡 想先看個提示?

事故的觸發者是 memory 的 child session——先讓觸發者不出場。

Memory:多語召回與 Windows reflection 修復

中文/日文逐字召回(v5.1.8)

Memory recall 過去對 CJK 文字採整體比對,換個措辭就找不到筆記。v5.1.8 起中文與日文漢字逐字比對——問題的用字與筆記不同仍能命中。同版新增 memory.recall.query_expansion: true:recall 可自動用同義詞、你其他語言的關鍵字與相關詞擴充查詢;擴充詞的權重低於原查詢的實際命中,全查詢命中的筆記仍排最前。

Windows:reflection 停擺與 /facts retry(v5.1.17)

Windows 上 reflection 失敗曾被誤記為「provider 拒絕」,自動 reflection 連續失敗幾次後自我停用(parked)——記憶系統看似正常,實際上不再保存任何事實。

v5.1.17 修復後,帶修復的版本會在下一次成功的 reflection 自動解除 parked。官方建議升級後手動跑:

/reflect        # 觸發一次 reflection,立即解除 parked
/facts retry    # 把 parked 期間卡住的事實補存

任務可靠性與 host 生命週期

這批修復圍繞一個主題:被委派的任務(delegated task)與它賴以執行的 host,何時結束、誰來收尾。

問題 版本 修復
omo -p 印完答案不退出,CI/cron 掛住 v5.1.10 in-process child 的 teardown 先跑 session_shutdown handlers,釋放 loopback bridge
與 host 失聯的任務永久占用 lane,新任務排不到 v5.1.11 重連,或限時以 transport lost 結束並釋放 lane;host 重啟後回收死任務的 lane
取消任務在 Windows 被記成 crash v5.1.12 以 runner 自身的請求判定 killed,不靠 child stderr 猜
任務子程序自帶的 fallback chain 被忽略 v5.1.18 共用 task host 上依 child 的 chain 降級;host 不支援時警告一次而非靜默丟失
升級後首個 turn 報 No provider available(舊 host 還在) v5.1.16 host handoff 可替換沒有 session 的舊 host;有 session 的仍會被擋並給出退役指令
閒置 host 永不退出(重試/續跑後 busy 狀態卡死) v5.1.17 host 以 run 為單位追蹤忙碌,session 關閉即釋放,閒置窗口後退出
閒置 gateway store worker 占記憶體 v5.1.19 60 秒無呼叫即退役 worker,下次呼叫重建;每個 terminal control endpoint 省約 2.9 MB

另外 v5.1.18 修好 launcher 的命令轉發:omo models discover、omo schedule 這類 one-shot engine 指令過去會被吞掉參數、直接打開互動 TUI——現在原封不動交給引擎執行。

模型與搜尋路由

  • 模型檔案重整(v5.1.8):Geeky · Heavy 與 deep-high 改跑 GPT-6 Astra(high,原 xhigh);Geeky · Normal 起跑 GPT-6.1 Sol Fast(medium,無 Fast 層級退回 GPT-6.1 Sol);Copilot / OpenCode 使用者維持 GPT-5.6 Sol。任務撞用量上限時,結果會說明原因與恢復方式,不再吐 provider 原始錯誤
  • web_search 路由(v5.1.8/v5.1.21):ChatGPT 訂閱 session 可用訂閱自帶的 web search;Google Search grounding 以 websearch.json 選項開啟;v5.1.21 再加入 keenable provider(有 apiKey 走 keyed API,否則共用公共額度)
  • picker 整潔(v5.1.21):provider 區塊設 hideFreeModels: true 可把免費模型收出選單,付費模型好找

發布工程:管線如何擋下壞版本

v5.1.12 起,平台包只在該平台的 release-binary smoke test 通過後才發布——v5.1.8 曾把 smoke 失敗的兩個 Windows x64 包照推上 npm。v5.1.20 的中止正是這道閘門的成效:Windows smoke 對一個被檔案掃描器短暫占用的 checkout 重新命名失敗(EPERM),發布停止;v5.1.21 讓 smoke 對這種占用重試約 12 秒並指名占用者,問題不再重演。

隨堂總結測驗

隨堂測驗

開了 <code>isolation.js: "process"</code> 的 session 中,一格 cell 讓 JavaScript kernel OOM 崩潰。接下來會發生什麼?

💡 想先看個提示?

隔離的對象是 kernel 程序,不是 session。

隨堂測驗

權限系統因為設定檔裡一條 <code>null</code> 規則而起不來。v5.1.14 之後的行為是?

💡 想先看個提示?

「檢查器壞了」的系統裡,你想要哪種預設:放行還是擋下?

動手升級檢查清單

升級 v5.1.21:動手檢查清單

逐項勾選,確認你已完成升級必要的步驟(進度會保存在此瀏覽器)

0 / 7

延伸閱讀