dsh-agent-session-tools:给 Agent 直接操作 Harness 会话的工具

前言

在 DeepSeek Harness(DSH)里做多会话协作时,Agent 往往只能把消息发给 teammate,或发给直接父会话、可续子会话。没有「对任意会话发一条话」的通用入口时,主会话派活给独立会话、把结论同步到另一条对话、叫停卡住的轮次,都会绕远路——靠提示词或人工切界面。

dsh-agent-session-tools(维护者 zgq0106)补的是宿主内工具层:四个 Agent 工具,直接走 Web 输入框同一条 ctx.sessionController 投递路径。下面介绍它解决什么问题、怎么装、四个工具各做什么,以及和相近插件的边界。

这是什么

一句话:给 DSH Agent 一组能新建会话、向指定会话注入消息、列出可见会话、取消当前轮次的工具;不绕提示词、不依赖前台页面。

分类上属于社区目录里的「工作流」类插件。实现上是单文件 index.js,零第三方依赖、无构建步骤;卸载只移除加载行与包目录,不写配置、不建数据目录。已注入的消息会留在目标会话日志里,卸载不会撤销——那是注入行为本身留下的痕迹。

内核里缺的那条入口

Harness 里原先较窄的两条路是:

  • agentTeams.sendMessage:只能发给自己的 teammate;
  • subagents.sendMessage:只能发给直接父会话或直接可续子会话。

本插件不另造投递机制,而是调用已组合的 sessionController.create()、prompt()、list()、cancel()。因此 session_inject 写入的是目标会话里真实的用户消息,不是旁路注入。

四个工具

工具 作用 底层
session_create 新建会话,返回 sessionId sessionController.create()
session_inject 向指定会话投递一条消息 sessionController.prompt()
session_list 列出可见会话,便于找 sessionId sessionController.list()
session_cancel 取消某会话当前正在跑的轮次 sessionController.cancel()

session_create

可选参数:

  • cwd:新会话工作目录的绝对路径;省略用 Harness 默认。相对路径会被拒绝。
  • agentPreset:预设 id;省略用默认预设。
  • title:创建后立即设置的标题。

返回 { sessionId, agentPreset?, title?, warning? }。标题设置失败不影响创建,原因在 warning 里。

session_inject

必填:sessionId、message(不能为空)。可选 mode:

  • queue(默认):消息进入收件箱,在下一轮开始处理;目标空闲时也会被唤醒。
  • steer:在最近一个步骤边界生效,用于中途改方向。

返回 { accepted, sessionId, mode, requestId }。服务端对重复 requestId 返回原接受结果,不会重复插入。

session_list

可选 limit:默认 20,范围 1–100。只读,不会唤醒冷会话。每条带 running / blank / origin / cwd 等字段,便于选目标。

session_cancel

必填 sessionId。只发取消请求,不丢弃已排队消息。会话卡在未结算的工具调用上时,取消后当前轮结束,队列才能继续。

安装与生效

推荐从 GitHub 安装(把 --profile 换成你的 profile 名;插件目录即 profile 目录):

dsh plugin --profile desktop add github:zgq0106/dsh-agent-session-tools

也可把仓库放到本机目录,用插件管理器填绝对路径安装,或手工链接到 <profile>/node_modules/dsh-agent-session-tools 并在该 profile 的 cordis.patch.yml 追加对应 insert 条目(详见仓库 README)。

装完后需要重启 DSH。Loader 按包名缓存已导入模块,禁用/启用、重装 bundle 都不会重读 index.js,只有重启才保证新代码生效。

若曾装过作者私有版 @local/dsh-session-control,请先移除再装本包——两者会注册同名工具,同时启用属于未测组合。

典型用法思路

文档未给出固定「复制即用」的业务脚本,但组合方式很直接:

  1. 用 session_list 拿到目标 sessionId(或 limit 缩小范围)。
  2. 主会话 Agent 调用 session_create 开一条独立对接会话,记下返回的 sessionId。
  3. 用 session_inject 把任务或结论 queue 到对方下一轮,或 steer 打断当前方向。
  4. 若某会话长时间卡在工具调用上,对该 sessionId 调用 session_cancel,再视情况重新 session_inject。

宿主未组合 @deepseek-ai/dsh-api-session-controller 时,插件仍会加载,但调用会返回说明缺服务的错误,而不是静默失败。

安全与边界

  • 注入等于真实写入目标会话日志,不可撤销;建议先用不重要的会话试一次。
  • 工具不做内容审查,Agent 对注入内容负责;空文本会在插件侧被拒绝。
  • 插件在宿主进程内调用、不带 Remote 主体,注入消息按 owner 归属,与手打消息同级。
  • 插件以当前 DSH 进程权限运行;安装前请自行查看 源码 与 MIT 许可证。

和相近插件怎么选

社区里功能更宽的有 dsh-session-bridge(提示词建顶层会话、等待回复、跨工作区按名查找等)和 dsh-session-hub(聚合多台远程 dsh web 上的会话)。本包刻意收窄:纯宿主内、四个工具、参数严格、错误明确。若你只需要「建个会话」「往那边说句话」,行为和边界更容易预期。

兼容性

项目 说明
实测 DSH 0.2.1-rc.5(Windows,Node 24.21.0)
Node ^22.19.0 \|\| >=24.0.0
包版本 0.1.0
构建 无;index.js 即发布产物

package.json 的 dsh.compatibility.dshReleases 只声明实测版本;其它版本可能可用,但请以本地实测为准。

结尾

dsh-agent-session-tools 把「任意会话」的创建、投递、列举、取消收成四个 Agent 工具,走与界面发送相同的 sessionController 路径。目录页:skillhub.cn/plugins/zgq0106/dsh-agent-session-tools;源码与完整参数说明:github.com/zgq0106/dsh-agent-session-tools。

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

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

Xiaoye