dsh-tools
DeepSeek Harness (dsh) utilities: session-manager plugin & Windows control panel
- Stars
- 0
- Language
- C#
- Created
- Aug 21, 2026
- Updated
- Aug 21, 2026
Introduction
dsh-tools
为 DeepSeek Harness 定制的实用工具集。
仓库内容
| 目录 | 说明 |
|---|---|
session-manager-plugin/ | dsh 会话管理插件(/sessions 命令:列出 / 删除聊天记录) |
dsh-control-panel/ | Windows 图形控制面板(一键启动 / 停止 dsh web 服务) |
项目背景
本机使用免费的 Qwen3.5-4B 作为主模型、glm-4-flash 兜底的 dsh 环境。日常使用中发现 两个需求:控制 dsh web 服务的开关、管理积累的聊天会话记录。因此开发了这两个小工具。
环境前提
以下为本工具集正常工作所需的共同前提:
| 项 | 要求 |
|---|---|
| 操作系统 | Windows(控制面板为 WinForms,需 .NET Framework 4.x,系统自带) |
| Node.js | 已安装并加入 PATH(node --version 可执行) |
| dsh | 通过 npm 全局安装:npm i -g @deepseek-ai/dsh |
| dsh 数据目录 | 默认 ~/.dsh(可用环境变量 DSH_HOME 覆盖) |
兼容性说明:两个工具均不写死安装位置。控制面板会按
环境变量 -> where node -> 常见目录 -> 回退默认自动探测 node 与 dsh 的路径; 插件通过import.meta.url自动识别自己所挂载的 preset,并在加载时输出自检日志, dsh 升级导致存储结构变化时会打印明确提示(而非静默失败)。
session-manager-plugin
dsh 会话管理命令插件。提供 /sessions 命令,支持列出全部会话和批量删除(软删除)。
功能
/sessions列出全部会话:标题、工作区、创建时间、大小、归档 / 当前状态/sessions delete <编号或id> [<编号或id> ...]删除一个或多个会话
特性
- 软删除:会话目录移动到
<DSH_HOME>/.session-trash/,可随时找回;彻底清除需手动删除该目录 - 命名兼容:同时兼容
session-<uuid>与裸<uuid>两种会话目录 / 索引键命名,不产生幽灵会话 - 三处联动清理:删除时会话目录 +
workspace.json+session_projcache.json同步更新 - 当前会话保护:正在使用的会话禁止删除
安装
以默认 preset anchored-standard 为例(~/.dsh/.agent-presets/anchored-standard/):
-
将
session-manager.mjs复制到该 preset 目录下,与agent.cordis.yml同级; -
在该 preset 的
agent.cordis.yml中追加注册项:- id: session-manager name: ./session-manager.mjs -
重启 dsh 后,日志会输出
session-manager: loaded from preset "anchored-standard"即安装成功;若出现 WARNING,按提示修正插件位置或注册。
插件会自动识别被挂载到哪个 preset,无需修改代码;若 dsh 升级导致存储结构变化, 会在日志中给出明确告警。
存储结构(插件直接操作的文件)
<DSH_HOME>/sessions/<工作区编码>/session-<uuid>/session.jsonl.zstd # 会话正文
<DSH_HOME>/storages/workspace.json # 工作区/归档归属
<DSH_HOME>/storages/session_projcache.json # 会话标题/统计缓存
dsh-control-panel
Windows 图形控制面板,一键启动 / 停止 dsh web 服务。C# WinForms 单文件程序。
功能
- 打开:启动
dsh web(node bin.js web,监听 3080),输出重定向到~/.dsh/logs/ - 关闭:通过
taskkill /T /F结束监听 3080 的进程树 - 状态:每秒自动刷新,显示运行中 / 未运行 / 正在启动 / 启动失败
状态机
打开 -> 正在启动... -> 运行中 (PID xxx) 启动于 HH:mm:ss
-> 启动失败(进程已退出 | 30 秒未就绪)
关闭 -> 正在停止... -> 未运行
- 已运行时再次点击"打开":显示"已在运行",不会重复拉起进程
- 单实例:重复双击不会打开多个面板窗口
- 已提权(manifest
requireAdministrator):双击即请求管理员权限, 保证有权限taskkill以管理员身份启动的 node 进程
路径探测(兼容多种安装方式)
面板不再写死 node / dsh 的安装路径,启动时自动探测:
- node.exe:
DSH_NODE环境变量 ->where node-> 回退C:\Program Files\nodejs\node.exe - dsh bin.js:
DSH_DSH_BIN环境变量 -> 基于 node 目录的常见布局 (node_modules\@deepseek-ai\dsh或node_global\node_modules\@deepseek-ai\dsh)->npm root -g-> 回退默认
因此以下环境均可直接使用:默认 npm 全局安装、自定义 npm prefix(如 node_global)、
nvm / nvm-windows 多版本、或通过环境变量显式指定(适合 dsh 装在非标准位置的场景)。
找不到时会明确提示"可设置环境变量 DSH_NODE / DSH_DSH_BIN"。
编译
使用 .NET Framework 4.x 自带编译器(无需 SDK):
csc /nologo /target:winexe /codepage:65001 /win32manifest:app.manifest ^
/out:dshf-fixed.exe /r:System.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll ^
MainForm.cs Program.cs
(csc.exe 位于 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\)
许可
个人工具,仅供学习参考。