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;社区目录页便于检索同类工作流插件。

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

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

Xiaoye