dsh-codeisland-bridge:把 DSH 會話與工具狀態轉發到 CodeIsland 劉海

前言

用 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
羽毛球分组比赛记分
小程序二维码

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

小夜