- ホーム
- プラグイン
- セッションとメッセージ
- dsh-desktop-session-toolbox
Y
dsh-desktop-session-toolbox
yy549159265/dsh-desktop-session-toolbox
给dsh增加下问题跳转与会话删除的功能
インストール
dsh plugin --profile web add github:yy549159265/dsh-desktop-session-toolboxREADME
会话工具箱 · Session Toolbox
一个可插拔的 DSH 插件,把「会话问题导航」和「会话管理(删除会话)」装进一个工具里。
适用于 DSH Desktop 桌面版(deepseek-harness-desktop)与普通 dsh web profile。
✨ 功能一览
| 功能 | 说明 |
|---|---|
| 问题导航 | 会话头部按钮带问题数量角标;点击弹出浮动面板,列出本会话所有用户问题,点击可平滑跳转并高亮定位,滚动时自动高亮当前问题。 |
| 会话管理 / 删除会话 | 工具箱面板第二个 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.json 和 lib/ 复制到共享 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 组合在启动时定型,必须重启。重启后:
- 会话头部出现带角标的「工具箱」按钮(角标 = 本会话问题数);
- 点开面板 → 两个 Tab:问题导航(点击问题跳转)与 会话管理(按工作区分组、可折叠,点「删除 → 确认删除」永久删除)。
✅ 验证
- Host 路由存在:浏览器访问
http://127.0.0.1:<端口>/session-toolbox/api/delete-session(GET 返回 405,说明路由已注册); - 删除动作:会话管理 Tab → 展开某工作区 → 选一个非当前会话 → 删除 → 确认删除 → 提示「已删除,正在刷新…」→ 页面自动刷新,侧边栏该会话消失;
- 重启后该会话不再出现(日志文件已被移除)。
🗑️ 卸载
- 删掉 active profile
cordis.patch.yml里的- id: session-toolbox行(恢复为[]); - 删除
node_modules\session-toolbox\目录; - 重启 DSH Desktop。
🔧 故障排查
| 现象 | 原因 / 处理 |
|---|---|
| 头部没有工具箱按钮 | 插件没挂到 active profile;确认 profile-selection\state.json 的 active 并改对 cordis.patch.yml,重启。 |
| 点「删除」提示「该会话正在运行中」 | 目标会话 live(当前打开 / agent 在跑)。先切到其他会话再删。 |
| 点「确认删除」后一直转圈 | 网络 / 路由问题。看 %APPDATA%\DSH Desktop\logs\dsh-*.log 中 session-toolbox 日志;确认 /session-toolbox/api/delete-session 路由存在。 |
| 删完列表还在 | 删除成功但页面未刷新;手动刷新(F5 / Ctrl+R)。正常流程会自动刷新。 |
浏览器 console 报 client bundle not found | lib/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.js | client bundle:头部按钮 + 工具箱面板(问题导航 / 会话管理),通过官方 slot conversation.session.header.actions 与 shell.overlay 注入 |
lib/index.js | node half:/session-toolbox/api/delete-session 路由(sessionPersistence.locate() 定位日志 → rm 整个会话目录 → 清理工作区记账),通过官方 webServer 服务注册 |
📄 参考
- 官方插件开发文档:docs/plugin-development.md