前言¶
在 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):
- HTTP 門面:默認監聽
127.0.0.1:7391;健康檢查、列出現場會話、發送任務、同步詢問、查任務、等待完成。 - 按會話投遞:
POST /send、POST /ask需要sessionId;冷會話可按 id 自動恢復。可選mode: "steer"打斷而非排隊。 - 同步等待:
POST /ask在同一請求內等待一輪結束,返回助手文本及reason(idle/input-required/timeout),默認timeoutMs爲 120000。 - 任務臺賬:發送後可用
GET /tasks/<taskId>或POST /wait只讀查詢結果;不支持把結果主動推回調用方(無 MCP server→client 通知實現)。 - Codex 側 MCP:倉庫自帶
mcp/適配器,可將接口暴露爲dsh_send、dsh_ask、dsh_result、dsh_wait、dsh_tasks、dsh_sessions、dsh_workspaces等工具。 - 安全邊界:僅允許迴環地址
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;社區目錄頁便於檢索同類工作流插件。