前言¶
在 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,请先移除再装本包——两者会注册同名工具,同时启用属于未测组合。
典型用法思路¶
文档未给出固定「复制即用」的业务脚本,但组合方式很直接:
- 用
session_list拿到目标sessionId(或limit缩小范围)。 - 主会话 Agent 调用
session_create开一条独立对接会话,记下返回的sessionId。 - 用
session_inject把任务或结论queue到对方下一轮,或steer打断当前方向。 - 若某会话长时间卡在工具调用上,对该
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。