dsh-opencode-live: Delegate OpenCode in DSH and View ACP Traces in Real-time

前言

在 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。

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

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

Xiaoye