dsh-opencode-live:在 DSH 裏委派 OpenCode,並實時看 ACP trace

前言

在 DSH 裏把 OpenCode 當作子智能體委派出去,常見做法是等子進程跑完再看最終文本。OpenCode 內部還會切換 agent、調用工具,並自行派生 fixer、explorer 等子 agent;這些過程若只在終端或 OpenCode 自己的界面裏看,和 DSH 主會話是割裂的。下面介紹社區插件 dsh-opencode-live(維護者 lof6yo):把 OpenCode 接到 DSH 的 opencode 工具上,並把 ACP 事件鏡像成 trace,在 Web UI 面板裏按會話實時展示。

這是什麼

dsh-opencode-live 的定位是:OpenCode as a DSH subagent, with a live ACP trace panel for its agents and self-spawned subagents(OpenCode 作爲 DSH 子智能體,併爲其 agent、工具調用與自派生子 agent 提供實時 trace 面板)。分類屬於 DSH 社區目錄中的「工作流」類插件;源碼與說明見 GitHub 倉庫,目錄頁爲 skillhub.cn/plugins/lof6yo/dsh-opencode-live。DSH 社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。

耦合刻意保持很薄:OpenCode 仍用自身的配置、模型與認證;DSH 側主要傳遞工作目錄(cwd)與任務文本。

核心功能

委派方式

DSH 中的 opencode 工具每次任務會啓動一個獨立的 opencode acp 子進程。Host 端把 ACP 事件鏡像成 trace,Client 插件負責渲染。

實時面板與數據通道

面板只消費 /opencode-live/events(SSE:連接時先發一份 snapshot,之後逐事件推送)。/opencode-live/state 保留爲只讀 API(返回同一份快照),面板本身不使用它;不再提供單獨的 HTML 頁面。

裝好並重啓 DSH 後:

  1. 右側邊欄「+」引導頁裏會出現 OpenCode Live,點開是常駐標籤頁,只顯示當前會話的委派。
  2. 左側欄出現 OpenCode Live 圖標,點開是全局頁,按會話分組彙總所有會話的委派(running / error 優先),頁面右側標註「所有 session」,並可一鍵「返回對話」。

兩個視圖共用同一條 SSE 全局流和同一套卡片渲染。打開全局頁會替換中央對話區,右欄標籤頁內容此時隱藏;返回對話即恢復。

面板裏能看到什麼

事件 來源
主會話的 agent(mode)和 model session/new 的 configOptions,以及 config_option_update
每次工具調用(標題 / kind / 狀態) session/update → tool_call / tool_call_update
OpenCode 派給子 agent 的任務(含 agent 名) tool_call_update.rawInput.agent
子會話的生命週期(created / running / completed) opencode/session/child_update(需要客戶端聲明 _meta["opencode/child-session-updates"])
子會話裏的工具調用和消息 同上的 child_update.update
思考片段、token 用量、結束原因 agent_thought_chunk、usage_update、prompt 結果

子 agent 的模型不在 ACP 流裏。面板能確認主會話的 model,以及每個子 agent 的名字和動作;子 agent 自己用的模型需查看 OpenCode 的會話存儲。

安裝與啓用

在 DSH profile 裏用 plugin_manager 的 install_bundle 安裝本插件目錄。bundle 的 cordis.patch.yml 會插入兩行:provider(opencode-live)和工具(opencode,maxDepth: provider-managed)。

ACP 客戶端僅使用 Node 內置模塊;@deepseek-ai/schemastery 聲明爲 peerDependency,由 DSH 安裝提供,link 方式安裝時也會被正確解析,不需要本地 node_modules。

bundle 同時聲明瞭 dsh.client,因此安裝後需要重啓一次 DSH(新的 Client 模塊在啓動時掃描);之後每次委派都會出現在面板裏。卸載或禁用時,Host 側通過 ctx.effect 釋放路由與 provider。

當前 package.json 中 engines 要求 DSH 版本 >=0.2.1-rc.2 <0.2.3,插件版本 0.15.1,許可證 MIT。

配置要點

在 profile 的插件配置中,id 爲 opencode-live,name 爲 dsh-opencode-live。常用字段如下(完整示例見倉庫 README):

- id: opencode-live
  name: dsh-opencode-live
  config:
    # 省略時依次嘗試 $OPENCODE_BIN、~/.opencode/bin/opencode、PATH
    command: opencode
    args: ['acp']
    permission: ask
    askFallback: reject
    askTimeoutMs: 600000
    path: /opencode-live
    historyRuns: 30
    historyDays: 7
    historyEvents: 200
    env: {}

說明幾步含義:

  • permission:ask 把 OpenCode 的權限請求轉成 DSH 問題卡片(允許一次 / 始終允許 / 拒絕);allow 自動同意;reject 爲只讀子智能體。
  • askFallback:問題送不到用戶(無應答者或超時)時的回退;運行被取消時直接回 cancelled。
  • path:面板與 Host 路由路徑,默認 /opencode-live。
  • historyRuns / historyDays / historyEvents:跨重啓保留 run 與事件的策略;historyRuns: 0 關閉持久化。

模型與 agent 也可在「設置 → 插件 → dsh-opencode-live」配置頁修改(寫回 profile patch)。留空則用 OpenCode 默認值;ACP 不會繼承 preset 裏 agent→model 的映射。

典型用法

經過上面的安裝與重啓,在 DSH 對話裏通過 opencode 工具委派任務即可;無需爲面板單獨再開頁面。右側 OpenCode Live 看當前會話,左側圖標進入全局頁查看所有 session 的 running / error 優先列表。

若需聯調 provider 層,倉庫說明 lib/provider.js 不依賴 DSH,可脫離宿主單獨驅動 opencode acp 子進程。開發時可做語法檢查:

node --check index.js client.js lib/provider.js lib/trace.js

歷史記錄、安全與限制

歷史記錄

運行記錄默認在內存中;也可鏡像到磁盤,重啓 DSH 後仍可見。位置爲 $DSH_HOME/opencode-live/history.json(未設置 $DSH_HOME 時爲 ~/.dsh/opencode-live/history.json),權限 0600。內容可能包含模型思考片段、工具描述、最終回答、token 用量與 OpenCode stderr 尾部;共享機器上應視爲敏感數據。單文件超過約 2 MB 時會繼續丟棄最老的 run。

安全邊界

  • 子進程不在 DSH 的文件沙箱之下。默認 permission: ask 爲 fail-closed 取向;askFallback 默認 reject。
  • 面板路由 /opencode-live/* 複用 DSH Web UI 鑑權(connection.requestRejection、 dsh-auth-* cookie);外來 Origin 或無效鑑權 fail-closed。
  • 發往瀏覽器的 trace 只帶目錄名 / 命令名(basename),不下發絕對路徑。子進程環境會過濾 *_API_KEY、*_TOKEN 等;確需傳遞時用 config.env 顯式補回。

限制(README 原文)

  • 外部子智能體是一次性的:只回最終文本,不能 send_message 追問。
  • 面板是本進程內存裏的環形記錄(最多 50 個 run、每個 600 條事件),進程重啓即清空。
  • 只爲 OpenCode 的 ACP 擴展做了適配;換成別的 ACP agent 時,child_update 相關行不會出現。

適用場景與注意

適合需要在 DSH 主工作流裏委派 OpenCode,又希望同屏看到 agent 切換、工具調用與子 agent 生命週期的開發者。安裝前建議閱讀 源碼與 LICENSE(MIT),確認子進程權限與歷史文件落盤策略符合你的環境。

插件以當前 DSH 進程權限啓動 opencode acp;權限卡片與 OpenCode 自身 deny 規則共同決定實際能力。

結尾

dsh-opencode-live 把 OpenCode 的 ACP 流接到 DSH 子智能體工具上,並用 SSE 驅動的 OpenCode Live 面板統一展示當前會話與全局委派狀態。進一步瞭解與安裝 bundle,見 社區目錄頁 與 GitHub README。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜