ruby1304/dsh-session-pilot

dsh-session-kit

Manage DeepSeek Harness conversations from inside a conversation: new_conversation, rename_session, list_sessions, read_session, archive_session model tools plus official-slot UI actions

待分类deepseekdeepseek-harnessdsh

dsh-session-pilot

为 DeepSeek Harness 补上"在对话中管理会话"的能力——模型与人都能在对话途中新建、重命名、列出、查看、归档会话。

English

五个模型工具(模型在对话里即可整理会话):

工具作用
new_conversation把一个跑偏的话题、一个独立的子任务,带着完整的首条用户消息开成一个全新对话(出现在侧边栏,立即开跑)
rename_session重命名会话(默认当前会话)
list_sessions按最近活跃列出会话(标题、运行中、所在目录);带 query 时按内容搜索
read_session读取某会话的紧凑对话摘录(最近的用户/助手文本消息,有界)
archive_session归档会话:移出工作区会话列表(耐久日志保留)

两个官方插槽按钮(无 DOM 注入):

  • 会话头部「+ 新对话」——在当前工作区一键开空白新对话
  • 助手消息「⧉」——把这条回复的正文作为上下文摘录,开一个全新对话继续讨论

只走官方路径:Host 复用 Web UI 同款的 sessionController / sessionQuery / workspaceRegistry 接缝;UI 只用官方插槽(conversation.session.header.actions、conversation.chat.assistant-actions)。通过 dsh-client-locale 接入中英双语界面。

安装

dsh plugin add dsh-session-pilot

重启 dsh 后生效。模型会在工具列表里看到五个工具;会话头部出现「+ 新对话」按钮;每条已落定的助手消息的操作区出现「⧉」按钮。

使用

  • 新建对话:直接说"把这个任务开个新对话去做",模型调用 new_conversation 把任务简报作为首条消息。
  • 整理会话:说"把这个对话重命名为 XX"、"列出我最近的会话"、"看看 XX 会话里聊了什么"、"把 XX 会话归档"。
  • 头部按钮:点「+ 新对话」,在当前工作区开一个空白对话并自动跳转。
  • 消息操作:点助手消息上的「⧉」,插件把该消息正文(限 4000 字符)包成 <quoted-context> 摘录,作为新对话的首条用户消息。

为什么不是 subagent / fork

既有能力与本插件的差别
subagent子代理是临时的、向父会话汇报的上下文节省机制,不是用户可见的独立对话
消息 fork(官方 / dsh-turn-fork)fork 携带历史前缀分支;new_conversation 创建的是零历史的新对话,只携带你写下的首条消息
侧边栏「+」只能开空白对话;本插件让模型和消息级操作也能开对话,并可带种子内容
官方只读的 tool-session-query 包(opt-in)提供事件级只读查询;本插件提供写操作(新建/重命名/归档)与面向整理的紧凑视图

相近社区插件(截至 2026-09 的普查)

插件重叠点关键差别
ltxlong/dsh-session-kit会话日常管理、归档管理它是纯 UI 驱动(会话管理菜单、归档 list/restore/delete/preview、本地记忆、压缩配置、话题导航),没有模型工具;本插件的管理动作全部是模型可调用的工具,并多出新对话创建。两者可共存:它管界面,本插件让模型动手
lesterq/dsh-session-manager会话删除/归档/移动同样是 UI 操作面板(无模型工具);本插件是模型在对话中直接执行
yangYzc/dsh-plugin-quote-reply「新窗口回复」也会创建新会话并带入引用它是划词引用 + 预填输入框草稿(用户手动发送);本插件是整条消息摘录直接落为首条消息(新对话立即开跑)。且它无模型工具、纯 client 创建(不经 sessionController 的工作区挂载)
bpc-oss/dsh-fork-to-preset头部按钮创建新会话fork 语义:继承已完成回合并换 preset;本插件是零历史新对话
qwert702/dsh-context-compressor自动切到新会话目的是压缩上下文、自动触发;本插件是模型/用户主动按话题拆分
weibaohui/dsh-tasks、DSH Automation Center每次运行开新会话cron 定时驱动,非对话内即时创建

没有插件提供这一组模型工具——让模型自己创建、命名、整理用户可见的顶层对话;这是本插件的核心缺口定位。

设计说明

  • 单一事务:new_conversation 与 HTTP 路由共享 createSessionPilot——解析来源会话的工作区(直连挂载),调用 sessionController.create(Host 侧自动完成工作区挂载),再按需 rename 与 prompt(mode: 'queue',透传 exec.signal)。创建的会话就是普通的耐久 Session,重启后仍在。
  • 工作区与 preset 继承:新对话落在来源会话的工作区;未挂载时退化为继承 cwd;Agent preset 随来源会话的最近 agent-preset/selected 继承(工具路径)。
  • 只读走独立接缝:list_sessions 用 sessionController.list/search;read_session 用 sessionQuery.readSession(live 优先、冷读持久层)+ readTitle,消息级投影有界(每条 ≤600 字符、最多 100 条、总量 ≤12000 字符)。
  • HTTP 信任围栏:路由仅接受回环 Origin/Host(与 dsh-turn-fork 同一约定),application/json 且正文 ≤ 64 KiB。
  • 跨版本:面向 0.1.5-rc.1 的 API 编写(peer deps),并在 0.1.2-alpha.4 运行时验证通过;prompt 始终显式传 mode: 'queue' 以兼容两个版本的 SessionPromptRequest。

Known Limitations and Deferred Work

  • 摘录只携带文本——助手消息中的图片、工具调用块不进入新对话;需要文件上下文时请用 @ 重新引用。
  • 工具路径之外不传 preset——路由(UI 按钮)创建的会话使用部署的默认 Agent preset,不继承来源会话的 preset(需要在路由侧加 inspect 才能读到来源 preset,v1 未做)。
  • 归档不可在插件内撤销——归档只是移出工作区列表(日志保留),恢复需要在工作区界面操作;插件不提供 unarchive。
  • read_session 不含工具事件——只投影用户/助手文本消息,查看工具调用细节请用官方 tool-session-query 包。
  • 空白对话与「继续」不可撤销——新会话一旦创建即普通存在,请用 archive_session 或在会话列表中归档。

开发

pnpm install
pnpm run typecheck
pnpm test          # build + node --test

目录约定与 dsh-turn-fork 一致:src/index.ts(Host)、src/client/(Client)、src/shared.ts(共享值契约)、scripts/dsh-client-preset.ts(vendor 自 dsh 仓库的 client bundle preset,MIT)。