deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:RyanZeeee/dsh-chattree
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
把线性的聊天记录,变成一张可以看、可以点的对话地图。
Chat Tree 是 DeepSeek Harness(DSH)的一个插件。它在 DSH 里加一个 Chat Tree 视图:每一轮问答变成画布上的一个节点,问题从哪来、往下长出了什么,一眼就能看清。
圆点模式 —— 只有节点和连线,节点上不显示文字,鼠标移上去才浮出你当时提的问题。整个结构一眼看完。

卡片模式 —— 每个节点是一张卡片,直接读到问答内容。选中一个节点,从它一路回到最开始的那条路径会整条高亮。

右侧面板显示选中那一轮的完整问答,也可以直接在那里继续提问 —— 会从那一轮分叉出新的一条线。
在 DSH 里聊久了,记录会变成很长的一条:想回头找"当时那个方案是在哪一轮聊的",只能一直往上翻;想从某一轮换个方向重新问,又怕把原来的上下文搞乱。
Chat Tree 把这两件事变成看得见的操作:每一轮是一个节点,每一次提问都是一条新分支 —— 原来的那条线永远保留,新想法从分叉处长出去。
左栏是两级:上面按 工作区(DSH 里的目录)分组,每个工作区下面是它的画布。
右侧面板底部的输入框旁边有一排:
| 按钮 | 作用 |
|---|---|
| 附件 | 给这条提问带上文件 |
| 权限 | 切换 DSH 的权限预设;解除沙箱 / 不再逐次征询这类预设会先要你确认一次 |
| 模型 | 选这个会话用哪个模型和推理等级(按 provider 分组) |
| 上下文 | 圆环是上下文占用比例;点开看百分比,以及 系统提示 / 工具 / 对话 各占多少 token |
| 发送 | Enter 发送,Shift+Enter 换行 |
拿不到对应接口时(比如这个 DSH 没提供模型目录),那个按钮就不出现、菜单里会写明原因。
上下文菜单里的 压缩上下文 调用 DSH 的 /compact:会话历史被替换成一段摘要,后续对话在摘要之上继续。
这件事会在画布上留下一个绿色节点 —— 卡片模式是绿框,圆点模式是绿点,标题「上下文已压缩」,内容就是那段摘要。这个节点可以继续对话:从它提问,新分支的历史从摘要开始。
DSH Desktop:打开 DSH Desktop 的终端,那里的 profile 默认就是 desktop:
dsh plugin add "github:RyanZeeee/dsh-chattree"
普通命令行(dsh web 等 profile):--profile 是必填的:
dsh plugin --profile <name> add "github:RyanZeeee/dsh-chattree"
装好后重启该 profile,顶部的视图切换条里会出现 Chat Tree。
git clone https://github.com/RyanZeeee/dsh-chattree.git
cd dsh-chattree
dsh plugin --profile <name> add "$PWD"
git clone https://github.com/RyanZeeee/dsh-chattree.git
cd dsh-chattree
dsh plugin --profile <name> add "$PWD"
pnpm install # 无第三方依赖,仅用于跑脚本
pnpm test # 排列规则 + 行为锁定的测试
pnpm run build # 三个 JS 文件的语法检查
改了 app.js 或 styles.css:刷新 DSH 页面即可。
改了 index.js 或 client.js:需要重启 DSH。
/chattree/api/*),没有任何外部请求依赖:零运行时依赖。宿主侧只用 Node 内置模块(node:fs/promises、node:crypto、node:path、node:url),不 import 任何 @deepseek-ai/* 包;与 DSH 的交互靠服务名(webServer、sessions)和 remote.* 命名空间。前端半体(client.js)注入 @deepseek-ai/dsh-client-runtime(dsh.client.inject,由 DSH 的客户端模块加载器提供,不是 npm 依赖)。
权限 —— 下面就是全部:
| 面 | 实际做了什么 |
|---|---|
| 文件 | 只写一个文件:$DSH_HOME/chattree/workspaces.json(路径可由 profile 的 dataFile 覆盖,见 cordis.patch.yml);同目录一个 workspaces.json.lock(PID 锁,进程退出即释放,过期锁自动回收);读取自己安装目录下的 app.js / styles.css 用于提供服务。不读 DSH 的会话文件,不碰任何其他路径 |
| 网络 | 不发起任何对外请求。宿主侧在 DSH 自己的 web server 上注册同源路由(/chattree/…),画布页面用相对路径访问它们;Host 不在白名单(localhost、127.0.0.1,加上 profile 里 trustedHosts 的附加项)一律返回 403 |
| 命令 | 不启动子进程,不执行 shell |
| 凭据 | 不读环境变量里的密钥,不持有任何令牌 |
外部服务:无。没有第三方主机、没有遥测、没有自己的模型调用——所有模型调用都发生在你正在用的那个 DSH 会话里。
失败边界:
workspaces.json 保留(想彻底清掉就删掉那个文件)想自己验一遍(用一次性 profile,不碰你日常那份):
dsh --profile chattree-check --from-default-profile web # 造一个一次性 profile
dsh plugin --profile chattree-check add github:RyanZeeee/dsh-chattree # 装
dsh --profile chattree-check # 启:顶部应出现 Chat Tree
dsh plugin --profile chattree-check remove dsh-chattree # 卸
rm -rf ~/.dsh/profiles/chattree-check # 删干净
DSH Desktop 和普通 dsh web profile 都能用:插件只依赖官方 DSH contract,不使用 Desktop 专有的 desktopProfiles / desktopPnpm。
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。