Back to home@Gcd1949

dsh-tools

DeepSeek Harness (dsh) utilities: session-manager plugin & Windows control panel

Stars
0
Language
C#
Created
Aug 21, 2026
Updated
Aug 21, 2026
GitHub repo

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/):

  1. session-manager.mjs 复制到该 preset 目录下,与 agent.cordis.yml 同级;

  2. 在该 preset 的 agent.cordis.yml 中追加注册项:

    - id: session-manager
      name: ./session-manager.mjs
    
  3. 重启 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 webnode bin.js web,监听 3080),输出重定向到 ~/.dsh/logs/
  • 关闭:通过 taskkill /T /F 结束监听 3080 的进程树
  • 状态:每秒自动刷新,显示运行中 / 未运行 / 正在启动 / 启动失败

状态机

打开 -> 正在启动... -> 运行中 (PID xxx) 启动于 HH:mm:ss
                    -> 启动失败(进程已退出 | 30 秒未就绪)
关闭 -> 正在停止... -> 未运行
  • 已运行时再次点击"打开":显示"已在运行",不会重复拉起进程
  • 单实例:重复双击不会打开多个面板窗口
  • 已提权(manifest requireAdministrator):双击即请求管理员权限, 保证有权限 taskkill 以管理员身份启动的 node 进程

路径探测(兼容多种安装方式)

面板不再写死 node / dsh 的安装路径,启动时自动探测:

  • node.exeDSH_NODE 环境变量 -> where node -> 回退 C:\Program Files\nodejs\node.exe
  • dsh bin.jsDSH_DSH_BIN 环境变量 -> 基于 node 目录的常见布局 (node_modules\@deepseek-ai\dshnode_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\

许可

个人工具,仅供学习参考。