前言¶
用 DeepSeek Harness(DSH)跑智能体时,终端或 Web 里能看到会话与工具调用,但 macOS 上若已用 CodeIsland 做「刘海」式状态条,默认只会给各 CLI 读本地日志;DSH 的会话日志是 zstd 压缩格式,CodeIsland 没有对应的 reader。CodeIsland 对 DSH 只内置了来源标签 source: dsh,不会主动拉取 DSH 状态;事件唯一入口是 Unix socket 上的 hook JSON。维护者 LeLiu 的 dsh-codeisland-bridge 插件充当发射器:不拉起面板、不读会话日志,只把 DSH 的会话、工具、审批事件实时推到 CodeIsland。
这是什么¶
dsh-codeisland-bridge 是 DSH 工作流类插件(Cordis patch),版本 0.1.0,MIT 许可,要求 Node >= 20。它把 Harness 里的 session、tool、approval 等生命周期事件,映射成 CodeIsland notch 协议,经 /tmp/codeisland-<uid>.sock(或环境变量 CODEISLAND_SOCKET_PATH)发出。插件以当前 DSH 进程权限运行;安装前建议自行查看 GitHub 仓库 源码与许可证。
社区目录页:SkillHub - dsh-codeisland-bridge。目录为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本包即其中一条桥接链路。
核心功能¶
下面介绍插件已文档化的映射关系(冲突时以仓库 README 为准)。
| CodeIsland 卡片上的内容 | DSH 侧事件 |
|---|---|
| 会话出现 / 结束 | session/created → SessionStart,session/disposed → SessionEnd |
| 最近一次提问(标题区) | agent/pre-step → UserPromptSubmit(含 prompt 文本) |
| 运行中 / 当前工具 | tools/pre-execute / tools/post-execute → PreToolUse / PostToolUse(Failure) |
| 最近回复 | session/event(assistant/message)→ Stop.last_assistant_message |
| 等待授权,刘海上允许/拒绝 | approval/request → PermissionRequest;决策回写 allowed-once / rejected |
| 子代理 | subagent/start|end → SubagentStart / SubagentStop |
拿不到的:token 用量、完整 transcript、点击跳转到终端——这些 CodeIsland 仍只从各 CLI 本地日志读,本插件不补这类能力。
行为约定(摘自 README):
- 非审批监听器一律
return next(),发送为 fire-and-forget;CodeIsland 未开时静默跳过,永不阻塞 agent。 - 审批:刘海返回
allow/always映射为allowed-once,deny为rejected;超时、断线或未运行则next()交给其它 answerer,不在此 fail-closed。 - 默认不发送
tool_input;last_assistant_message仅本会话最后一条助手文本,长度受maxReplyChars限制。
安装与启用¶
插件必须装进你实际在跑的 profile;装完需重启对应 DSH 进程或应用。
未发布 npm 前,从 GitHub 源码安装:
dsh plugin --profile web add github:LeLiu/dsh-codeisland-bridge
CLI profile(web / headless / 自建;npm 发布后可用包名):
dsh plugin --profile web add dsh-codeisland-bridge
DSH Desktop 的 profile 由应用独占,CLI 无法写入;在菜单栏「桌面插件…」填写 dsh-codeisland-bridge,或通过桌面插件市场安装。
本地开发可链目录:
dsh plugin --profile headless add /absolute/path/to/dsh-codeisland-bridge
卸载:
dsh plugin --profile <name> remove dsh-codeisland-bridge
配置¶
所有字段有默认值,可在你自己的 profile patch 层按插件 id 覆盖(不是包内 cordis.patch.yml):
- id: codeisland-bridge
config:
socketPath: /tmp/codeisland-501.sock # 默认 $CODEISLAND_SOCKET_PATH 或 /tmp/codeisland-<uid>.sock
source: dsh # CodeIsland 来源标识,卡片显示为 DeepSeek Harness
approvals: true # 把 approval/request 转发到刘海
approvalTimeoutMs: 300000 # 等太久交还给其他 answerer
connectTimeoutMs: 1500 # 普通事件的连接/回执预算
subagents: true # 上报子代理启停
toolInput: false # 是否把工具参数(命令/文件内容)也发过去
maxReplyChars: 4000 # Stop 携带的回复文本上限
payload 字段遵循 CodeIsland hook 协议:hook_event_name、session_id、cwd、tool_name、tool_use_id、_source 等,以仓库实现为准。
验证与典型用法¶
跑完一轮 DSH 会话后,可检查 CodeIsland 侧是否出现 source: dsh 的记录:
python3 -c "import json;print(json.load(open('$HOME/.codeisland/sessions.json'))[-1])"
插件自带测试(映射、审批决策、超时、无 island 降级等 18 个用例):
node --test test/*.test.mjs
适用场景与注意¶
适合已在 macOS 使用 CodeIsland、同时用 DSH(web / headless / Desktop)跑 agent,希望在刘海上看到会话起止、当前工具、最近提问与回复、以及(可选)在刘海上点允许/拒绝权限请求的场景。
注意:CodeIsland 未运行时插件会静默跳过普通事件;审批超时同样交还其它 answerer。若需要把完整工具参数发到刘海,需显式将 toolInput 设为 true,会涉及命令与文件内容,请自行评估隐私需求。
结尾¶
dsh-codeisland-bridge 用一条 Unix socket 转发链路,补上了 CodeIsland 无法直接读 DSH 压缩日志的缺口,且刻意保持轻量、不阻塞 agent。目录与源码:
- https://www.skillhub.cn/plugins/LeLiu/dsh-codeisland-bridge
- https://github.com/LeLiu/dsh-codeisland-bridge