dsh-task-dispatch:用 HTTP 向真實 DSH 會話派發任務

前言

在 DeepSeek Harness(DSH)裏跑多個智能體時,常見做法是:一個會話產出結論,人再複製粘貼到另一個會話或外部腳本里繼續。Codex、CI 或獨立進程若只想要「把一句話丟進正在跑的 Harness 會話、必要時讀回助手回覆」,往往仍要繞過人肉中轉。

社區裏也有更寬的橋接方案,但在 DSH 0.2.x 上與宿主依賴版本衝突時,可能出現宿主加載錯誤包、插件無法啓動等問題。dsh-task-dispatch 走另一條路:不聲明任何 @deepseek-ai/* 或第三方包,只靠 Node 內置模塊和宿主已有的 sessionController / agents / sessions 服務,對外只提供 HTTP 發送與等待能力,並帶持久任務臺賬與只讀結果查詢。

這是什麼

dsh-task-dispatch 是維護者 vinson1101 發佈的工作流類 DSH 插件(社區目錄分類:工作流)。它通過本機 HTTP 接口,向指定 session id 的真實 DSH 會話投遞消息,可立即返回(異步)或阻塞等待本輪助手文本;任務狀態可查詢、可等待,適合去掉「兩個智能體之間的人工複製粘貼」。

與功能更全的橋接插件相比,本插件刻意不做文件工具、審批橋接或 preset 管理,換取零依賴、降低與宿主包版本打架的風險。

核心功能

已覈實能力如下(均以 README 與 package.json 爲準,當前文檔版本 0.6.0,許可證 MIT,要求 DSH >= 0.2.2-rc.1、Node >= 18):

  1. HTTP 門面:默認監聽 127.0.0.1:7391;健康檢查、列出現場會話、發送任務、同步詢問、查任務、等待完成。
  2. 按會話投遞:POST /send、POST /ask 需要 sessionId;冷會話可按 id 自動恢復。可選 mode: "steer" 打斷而非排隊。
  3. 同步等待:POST /ask 在同一請求內等待一輪結束,返回助手文本及 reason(idle / input-required / timeout),默認 timeoutMs 爲 120000。
  4. 任務臺賬:發送後可用 GET /tasks/<taskId> 或 POST /wait 只讀查詢結果;不支持把結果主動推回調用方(無 MCP server→client 通知實現)。
  5. Codex 側 MCP:倉庫自帶 mcp/ 適配器,可將接口暴露爲 dsh_send、dsh_ask、dsh_result、dsh_wait、dsh_tasks、dsh_sessions、dsh_workspaces 等工具。
  6. 安全邊界:僅允許迴環地址 host;未配置 token 時,本機任意進程均可調用,且被驅動的真實智能體具備本地 shell 級能力(可執行命令、改文件)。

快速自檢裏還帶按 workspace 路徑發消息的示例(與按 sessionId 的正式 API 字段並列出現在文檔中);列會話接口 GET /sessions 只反映當前存活的會話,但已知 id 的冷會話仍可通過 /send 投遞。

安裝與啓用

插件尚未發佈到 npm。按 README,任選一種方式安裝(需使用 --profile desktop,安裝後重啓 DSH):

# 方式 1:Release 打包產物(推薦)
dsh plugin --profile desktop add https://github.com/vinson1101/dsh-task-dispatch/releases/download/v0.6.0/dsh-task-dispatch-0.6.0.tgz

# 方式 2:直接從 GitHub 安裝(會拉取 mcp/、test/ 等)
dsh plugin --profile desktop add github:vinson1101/dsh-task-dispatch

# 方式 3:本地目錄(開發;符號鏈接,改代碼即生效)
dsh plugin --profile desktop add /absolute/path/dsh-task-dispatch

重啓後日志中應出現類似:

[dsh-task-dispatch] ready http://127.0.0.1:7391

配置項(可選):

字段 默認值 含義
host 127.0.0.1 僅迴環;非此值會導致激活失敗
port 7391 監聽端口
token 無 設置後請求需 Authorization: Bearer <token>

安裝前建議自行查看倉庫源碼與 MIT 許可證;插件以當前 DSH 進程權限運行,等同於信任其驅動本地智能體執行能力。

典型用法

30 秒連通性檢查

下面用 curl 確認服務、發一條簡單任務並查任務 id(將路徑與 taskId 換成實際值):

curl -s http://127.0.0.1:7391/health
# {"ok":true,"name":"dsh-task-dispatch","version":"0.6.0",...}

curl -s -X POST http://127.0.0.1:7391/send \
  -H 'content-type: application/json' \
  -d '{"workspace":"/your/project","text":"reply with the single word: ok"}'

curl -s http://127.0.0.1:7391/tasks/<taskId-from-the-previous-call>

按 session id 異步發送

已知會話 id 時,發送後不阻塞,由調用方輪詢或 POST /wait:

curl -s -X POST http://127.0.0.1:7391/send \
  -H 'content-type: application/json' \
  -d '{"sessionId":"session-23af063e-...","text":"run the tests", "mode": "steer"}'

返回形如 { ok, sessionId, requestId, afterSeq }。

同步詢問一輪

適合短問答;長任務宜 /send 加輪詢或增大 timeoutMs:

{
  "sessionId": "session-23af063e-...",
  "text": "done yet?",
  "timeoutMs": 120000
}

對 POST /ask 使用上述 JSON body;響應含 ok、reason、text、truncated。

從 Codex 註冊 MCP

只需 HTTP 的場景可直接 curl;若要讓 Codex 以工具調用,使用 bundled 適配器(路徑改爲本機絕對路徑):

codex mcp add dsh -- node /absolute/path/dsh-task-dispatch/mcp/index.mjs
codex mcp list

適用場景與注意

更適合:本地已運行 DSH 桌面配置、希望 Codex/腳本/CI 僅用 HTTP 把任務交給指定真實會話、並讀回結果或查臺賬;需要避免與宿主 @deepseek-ai/* 依賴重複安裝的場景。

需要知情:

  • 無流式輸出;/ask 只返回該輪最終文本。
  • /ask 只等一輪;長作業請 /send + GET /tasks/:id 或 /wait。
  • notify 字段表示投遞賬本狀態,不是對端「已讀」證明;Webhook 返回 200 僅表示 HTTP 端點應答。
  • 對外暴露或非純本機使用時務必配置 token;默認任意本機進程可調用。
  • 社區插件目錄(SkillHub)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;星標、版本以倉庫與 Release 爲準。

結尾

dsh-task-dispatch 把「向真實 DSH 會話發任務、查結果、可選同步等待」收成零依賴的本機 HTTP 服務,用持久任務臺賬替代人肉複製粘貼,並可選 MCP 接到 Codex。進一步說明與 issue 見 GitHub;社區目錄頁便於檢索同類工作流插件。

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

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

小夜