dsh-session-dispatch:把子任务派进独立工作区会话

前言

DeepSeek Harness(DSH)里,Session Controller 本来就能新建会话、往会话里发消息——Web 界面走的就是这套能力。但这些能力没有暴露成模型可调用的工具。模型若只能用 subagent 一类「一次性任务」代理,就难以把活丢进独立、持久、用户可见可接管的工作区会话,也难以在任务跑着的时候先干别的,事后再回来读结果,或用 steer 给正在跑的回合追加指令。

dsh-session-dispatch 由维护者 919703505hackiv-boop 发布,把工作区会话的创建、发消息、等待、读回复和列举,收成同进程内五个模型面向的工具调用。创建的会话是真正的顶层 Session,会出现在工作区会话列表里,用户可以直接打开继续聊。

这是什么

npm 包名 dsh-session-dispatch,当前版本 0.1.0,许可证 MIT。兼容 DSH >=0.2.0 <0.3.0、Node.js >=22。

插件定位:给模型用的「会话派发」——新开工作区会话、发指令、等回合结束、读回复,把子任务放进独立上下文里跑,而不是塞进 subagent 的一次性上下文。

社区目录页:https://www.skillhub.cn/plugins/919703505hackiv-boop/dsh-session-dispatch
源码与说明:https://github.com/919703505hackiv-boop/dsh-session-dispatch

核心功能:五个 conversation_* 工具

下面介绍五个工具各自做什么,以及典型串联方式。

工具 作用 关键点
conversation_create 新建顶层会话,返回 sessionId cwd 默认继承调用方;可传 agentPreset
conversation_send 往会话里发文本 默认排队起新一轮;mode: "steer" 注入当前轮
conversation_wait 等当前/下一轮 assistant 回合结束 返回 state: "idle" \| "timeout"、lastReason(永远是字符串)、running
conversation_read 读最近回复和回合状态 返回 live、running、turns、lastTurnReason、text、truncated
conversation_list 列出本进程内存活会话 可按绝对路径 cwd 过滤

典型流程如下。先做创建,再发任务,等待回合结束,最后读回复:

conversation_create({ cwd })
  → conversation_send({ sessionId, text: "把 xxx 做完" })
  → conversation_wait({ sessionId })
  → conversation_read({ sessionId })

插件不写自己的数据库,不改会话日志格式;可选调试日志是唯一落盘行为。

安装与启用

npm 发布之后,在 Web profile 下安装:

dsh plugin --profile web add dsh-session-dispatch

安装后重启 DSH,五个工具才会出现在模型工具表里。安装会把包加进 profile 的 dsh.profile.bundles,并应用包内的 cordis.patch.yml 层。

本地目录调试(包未发布时):

dsh plugin --profile web add ./plugins/dsh-session-dispatch

检查层是否生效:

dsh --profile web --dump-config   # 应出现 "# == dsh-session-dispatch" 层

若 profile 里仍留着旧版 dsh-session-dispatch3(row id tool-session-dispatch3),应先删掉再装本包。两个插件注册同名工具,同时启用会因工具名重复而失败。

cordis.patch.yml 只做一件事:把插件行插进 profile,name 必须与 npm 包名完全一致:

- insert:
    - id: tool-session-dispatch
      name: dsh-session-dispatch

没有其它必填配置。可选环境变量:

变量 默认 说明
DSH_DISPATCH_LOG os.tmpdir()/dsh-session-dispatch.log 调试日志路径;off / 0 / none 关闭
DSH_DISPATCH_TZ 系统时区 写进用户消息 source 的 clientTimeZone
DSH_DISPATCH_START_GRACE_MS 8000(最小 5) conversation_wait 发现会话已空闲时,等待新回合的宽限时间

自测与源码结构

不依赖 DSH 运行时,可在插件目录用纯 Node 自测:

node plugins/dsh-session-dispatch/test.mjs
# 18/18 通过

node --check plugins/dsh-session-dispatch/index.js

主要文件:index.js(五个工具实现)、cordis.patch.yml(bundle 层)、test.mjs(18 项自测)。

适用场景与注意

适合谁: 需要在 DSH Web/Desktop 宿主里,让主会话模型把子任务派到独立工作区会话、异步等待结果、必要时 steer 正在跑的回合的开发者与高级用户。

权限与 profile: 插件以当前 DSH 进程权限运行;conversation_create 默认继承调用方工作区,跨工作区需显式传绝对 cwd,仍受 DSH 审批与权限策略约束。安装前应阅读源码与 MIT 许可证,确认符合你的环境策略。

依赖宿主服务: 插件 inject 了 tools、sessionController、sessions、agents;没有这些服务的 headless profile 会加载失败。

进程内会话: conversation_read 返回 live: false 表示该会话不在当前进程(可能在别的 DSH 实例里),只能读到空结果。五个 conversation_list 列出的也是本 host 进程内存活的会话。

开发与升级坑: 改完 index.js 必须重启 DSH,HMR 不会重载 host 插件。同名同版本不会因原地改文件而重新生效;可靠做法是换包名或先 remove 再 add,并重启。conversation_wait 默认 timeoutMs 120000、上限 600000,不宜用超大 timeout 占住工具调用。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-dispatch 把 Session Controller 的能力暴露成模型工具,让派发子任务、独立上下文、用户可见会话成为可编排的一步流程。目录页见 https://www.skillhub.cn/plugins/919703505hackiv-boop/dsh-session-dispatch,细节与发布说明见 https://github.com/919703505hackiv-boop/dsh-session-dispatch。

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

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

小夜