DSH Conversation Tree
为 DSH Web 增加不可变的对话分支和整棵树浏览:
- 重新生成:在 AI 回复自己的操作栏中,从所选轮次之前创建子会话,并重新运行原问题。
- 编辑提问:入口位于真实的用户消息下方;从所选轮次之前创建子会话,保留该消息的非文本附件,用新文本继续生成。
- 编辑回答:入口位于 AI 回复自己的操作栏;复制到所选轮次,把子会话中的最后一条 AI 回复替换为新文本,不调用模型。
- 内联切换:在发生分叉的提问或回答旁显示
‹ 2 / 5 ›,可直接切换同一消息的上一个/下一个分支;在 AI 操作栏里位于原生“创建分支”按钮右侧。
- 树:在一个页面里显示当前对话所属的全部普通会话分支;点击节点即可打开对应会话。
所有动作只创建新会话,源会话不会被修改。子会话会记录 parentSession,并继承源会话的工作目录、preset 与目标轮次的模型配置。
要求
- DSH
0.1.1-rc.2
- Web profile(下面以
web 为例)
安装
dsh plugin --profile web add github:Unintendedz/conversation-tree#v0.2.0
随后重启正在运行的 DSH Web 服务。进入任意已完成的对话后,编辑提问会出现在用户消息下方,重新生成和编辑回答会出现在 AI 回复下方;有多个版本的消息会在创建分支按钮右侧显示内联分支计数器。顶部的 树 页签继续用于浏览整棵树。
更新
安装新版本 tag 后重启服务:
dsh plugin --profile web add github:Unintendedz/conversation-tree#v0.2.0
卸载
dsh plugin --profile web remove conversation-tree
开发
npm install
npm run build
npm test
宿主入口为 lib/index.js,浏览器源码为 src/client.jsx 和 src/tree.js。npm run build 使用锁定版本的 esbuild 生成 lib/client.js。
当前树视图只纳入普通顶层会话,主动排除 DSH 内部的 subagent 会话。损坏的父子引用与循环关系会被安全截断,不会阻塞页面。