Saltar al contenido principal
Y

dsh-desktop-session-toolbox

yy549159265/dsh-desktop-session-toolbox

给dsh增加下问题跳转与会话删除的功能

Instalar

dsh plugin --profile web add github:yy549159265/dsh-desktop-session-toolbox

README

会话工具箱 · Session Toolbox

一个可插拔的 DSH 插件,把「会话问题导航」和「会话管理(删除会话)」装进一个工具里。

适用于 DSH Desktop 桌面版deepseek-harness-desktop)与普通 dsh web profile。

License Version Platform

✨ 功能一览

功能说明
问题导航会话头部按钮带问题数量角标;点击弹出浮动面板,列出本会话所有用户问题,点击可平滑跳转并高亮定位,滚动时自动高亮当前问题。
会话管理 / 删除会话工具箱面板第二个 Tab:按工作区分组(组可折叠展开)列出所有非运行中的会话,组头显示工作区标题 + 路径 + 会话数,组内按最近更新排序;每个会话带时间与「运行中/已归档」徽标,一键「删除 → 确认删除」两步确认,永久移除该会话及其日志文件。

🤖 由 DSH 生成:本插件的代码与本文档均由 DeepSeek Harness(DSH) 自动生成。整个 session-toolbox/ 目录是自包含的插件包,可以直接放入 DSH(如 profiles/node_modules/),或把本仓库交给 DSH 代理——它会依据本 README 自动完成安装、挂载与验证。

🎬 演示

会话工具箱演示

🚀 安装

前置:确认 active profile

DSH Desktop 默认运行 desktop profile,patch 必须写到 active profile 上。

判断 active profile:%APPDATA%\DSH Desktop\profile-selection\state.json"active" 字段(本项目为 desktop)。

1. 放置插件包

package.jsonlib/ 复制到共享 node_modules(两个 profile 共用):

C:\Users\YS\.dsh\profiles\node_modules\session-toolbox\
├── package.json
└── lib\
    ├── index.js
    └── client.js

2. 挂载到 active profile

编辑 C:\Users\YS\.dsh\profiles\desktop\cordis.patch.yml

- insert:
    - id: session-toolbox
      name: 'session-toolbox'

如果 active profile 是 web,把同样内容写进 profiles\web\cordis.patch.yml

3. 重启 DSH Desktop

Cordis 组合在启动时定型,必须重启。重启后:

  1. 会话头部出现带角标的「工具箱」按钮(角标 = 本会话问题数);
  2. 点开面板 → 两个 Tab:问题导航(点击问题跳转)与 会话管理(按工作区分组、可折叠,点「删除 → 确认删除」永久删除)。

✅ 验证

  • Host 路由存在:浏览器访问 http://127.0.0.1:<端口>/session-toolbox/api/delete-session(GET 返回 405,说明路由已注册);
  • 删除动作:会话管理 Tab → 展开某工作区 → 选一个非当前会话 → 删除 → 确认删除 → 提示「已删除,正在刷新…」→ 页面自动刷新,侧边栏该会话消失;
  • 重启后该会话不再出现(日志文件已被移除)。

🗑️ 卸载

  1. 删掉 active profile cordis.patch.yml 里的 - id: session-toolbox 行(恢复为 []);
  2. 删除 node_modules\session-toolbox\ 目录;
  3. 重启 DSH Desktop。

🔧 故障排查

现象原因 / 处理
头部没有工具箱按钮插件没挂到 active profile;确认 profile-selection\state.jsonactive 并改对 cordis.patch.yml,重启。
点「删除」提示「该会话正在运行中」目标会话 live(当前打开 / agent 在跑)。先切到其他会话再删。
点「确认删除」后一直转圈网络 / 路由问题。看 %APPDATA%\DSH Desktop\logs\dsh-*.logsession-toolbox 日志;确认 /session-toolbox/api/delete-session 路由存在。
删完列表还在删除成功但页面未刷新;手动刷新(F5 / Ctrl+R)。正常流程会自动刷新。
浏览器 console 报 client bundle not foundlib/client.js 缺失或 exports["./client"] 指错路径。
在 profile 目录跑过 pnpm install 后按钮消失hoisted node_modules 里手工放置的包被清理;重新复制 3 个文件再重启。

📌 说明与限制

  • 运行中 / 当前会话不可删除:官方没有销毁 live agent 的公共接口,强行删日志会被 flush 重建;界面把「当前会话 / 运行中」的删除按钮置灰。
  • 删除会移除整个会话目录$DSH_HOME\sessions\<编码路径>\<会话id>\ 及其 session.jsonl.zstd 日志),路径由 sessionPersistence.locate() 定位、不硬编码;删除前校验目录名 === 会话 id,防止布局漂移误删。
  • 为什么需要删除功能:DSH 官方只提供 重命名 / 分叉 / 归档,没有「删除会话」API;本插件在 Host 侧直接操作存储层实现真正的删除,并顺手清理工作区记账。
  • 安全护栏:两步确认(「删除」→ 红色「确认删除」,4 秒后复原);删除接口校验 Content-Type: application/json(与官方 /api 相同的跨站防护)。
  • 工作区状态文件(storages\workspace.json)可能残留不可见的会话 id 空槽;界面两层过滤都会忽略它,不影响使用。
  • 子代理会话(subagent)不在管理列表里出现,避免误删。

🛠️ 技术实现

文件职责
lib/client.jsclient bundle:头部按钮 + 工具箱面板(问题导航 / 会话管理),通过官方 slot conversation.session.header.actionsshell.overlay 注入
lib/index.jsnode half:/session-toolbox/api/delete-session 路由(sessionPersistence.locate() 定位日志 → rm 整个会话目录 → 清理工作区记账),通过官方 webServer 服务注册

📄 参考

📃 License

MIT

Plugins relacionados