dsh-plugin-mindmap:把会话沉淀为可交互的故事线地图

前言

用智能体开发时,会话往往是最重要的记录:一个话题拖上几个小时,中间有分叉、有折返、有推翻重来。想回头看「这个问题当时讨论到哪、为什么这么定」,能依赖的只有原始日志,一条条往上翻;重启项目或换个代理之后,这些上下文基本就丢了。

dsh-plugin-mindmap 针对的就是这个场景:在对话进行的同时,把内容提炼成一条条独立的故事线(storyline),渲染成可交互的地图,并持久化到工作区里。

这是什么

dsh-plugin-mindmap 是一个 DeepSeek Harness(DSH)插件,由 ImCabbage 维护,许可证为 MIT。一句话定位:把会话提炼为持久化的故事线,并渲染成可交互的地图。

DSH 的理念是「一切皆插件」,会话视图、RPC、持久化机制都开放给插件扩展。这个插件正是建立在这些扩展点上:Host 侧负责分类与持久化,Client 侧在会话视图中注册标签页做渲染。

核心功能

故事线分类:规则优先,增量运行

插件自动组织对话逻辑并识别关键思维分叉。每个 storyline 对应一个独立主题;分类规则优先、LLM 兜底,以增量方式运行——每条新消息只判定一次是 append、fork 还是 new,不会整体重聚类。

点击节点回顾过往问答

点击节点会聚焦其 storyline,并打开详情卡片,内含问题、工具调用的一行摘要与答案。较长的 storyline 会在语义断点折叠为多行,用粗体标签标注回合。

持久化的开发记忆

分类结果存于工作区根目录的 DEV_LOG.json——这个文件本身就是提炼出的记忆。重启项目或切换代理后,地图即时重载,0 次 LLM 调用。

会话视图中的 MindMap 标签页

插件在会话视图中注册 MindMap 标签页:每行一个主题,以贝塞尔渐变缎带绘制,共六种节点形状(question / decision / feature / bugfix / refactor / research)。每个标题下有状态徽章——进行中(绿)、有阻塞(琥珀)、已完成(蓝)、讨论结束(灰),后跟一行描述。

即时打开与后台进度

DEV_LOG.json 存在且格式版本匹配时,打开无需重建、0 次 LLM 调用;新消息在后台同步,地图自动刷新。进度呈现上,完整重建显示进度条,增量同步显示小提示。

实现方式

  • Host 侧:MindMapGateway 服务(Typert remotes mindmap/graphmindmap/progress)负责读取会话日志、增量分类(规则 + LLM)、读写 DEV_LOG.json,并运行带进度的后台同步任务。
  • Client 侧:在 conversation.view 槽位注册 MindMap 标签页,通过 ctx.remote 拉取图形、从 DEV_LOG 即时渲染,并轮询后台进度自动刷新。
  • RPC:使用 Typert 协议,manifest 手写于 src/host/typert.host.js(host 端)与 src/host/typert.remote-client.js(client 挂载端),使用严格的 zod 编解码。

安装与启用

前提条件:已安装 DeepSeek Harness(dsh 命令可用)、正在使用 web profile,且 PATH 上有 pnpm(dsh plugin 会转发给 pnpm;缺失时用 npm install -g pnpm 安装)。

安装命令:

dsh plugin --profile web add github:ImCabbage/dsh-plugin-mindmap

1、该命令用 pnpm 把包安装进 profile,并自动加入 profile 的 bundle 列表(包内声明了 dsh.bundle)。Host 与浏览器 bundle 均为预构建产物,随仓库提供,无需额外构建。安装会写入 $DSH_HOME/profiles/<name> 目录,该目录必须可写。

2、重启 web 进程:停止正在运行的 dsh web 并重新启动。仅刷新浏览器页面不够——组合在启动时固定。

3、验证挂载:

dsh --profile web --dump-config | grep mindmap

应看到 - id: mindmap 位于 name: dsh-plugin-mindmap 旁。

4、打开任意会话,视图标签栏会出现 MindMap 标签页。

典型用法

1、正常聊天,MindMap 在后台分类,进度显示在标签页内。

2、打开 MindMap 标签页:
- 每条彩色缎带是一个独立主题,节点按时间从左到右排列;
- 点击节点,聚焦其 storyline 并打开详情卡片(问题 / 工具调用摘要 / 答案);
- 点击空白处,清除聚焦;
- 标题下的小字是当前状态(徽章 + 描述)。

3、首次打开(或 DEV_LOG 格式升级)会带进度条运行一次完整提炼,之后每次打开都是即时的。

本地开发使用独立测试 profile,不影响日常的 web profile:

dsh plugin --profile mindmap-test add .

修改源码后执行构建,esbuild 会生成主机端 lib/index.js 与浏览器端 lib/client.js

npm install
npm run build

构建后重启测试 profile 的 dsh web。注意构建产物 lib/ 已提交到仓库,git 安装直接使用它,因此修改源码后需将 lib/ 与源码改动一起提交。

适用场景与注意

适合的场景:会话周期长、话题多的开发工作;需要重启项目或切换代理后回顾过往决策过程;想以低成本复用会话结构作为开发记忆。

几点注意:

  • 插件会在每个使用它的项目工作区根目录创建 DEV_LOG.json,不想提交可加入项目 .gitignore
  • 首次完整提炼需要可用的模型凭据(LLM 调用);LLM 调用失败时标签页会显示警告行,请检查模型凭据与网络。
  • 出现权限 / EROFS / 只读错误,说明安装目标目录 $DSH_HOME/profiles/<name> 不可写,请换到可写环境再执行。
  • 该插件没有构建脚本(预构建 lib/ 随仓库提供),pnpm 失败后 dsh 打印的 allowBuilds 提示不适用、可忽略,应查看其上方的真实 pnpm 错误。
  • 插件以当前 dsh 进程的权限运行。安装前建议先查看仓库源码并确认许可证(MIT)符合预期。

结尾

dsh-plugin-mindmap 把会话内容提炼为持久化的故事线地图,回顾决策、恢复上下文不再依赖翻日志。对以会话为主要工作记录的 DSH 用户来说,值得一试。

社区目录页面(独立站点,与 DeepSeek / 幻方无官方从属关系):https://www.skillhub.cn/plugins/ImCabbage/dsh-plugin-mindmap

GitHub 仓库:https://github.com/ImCabbage/dsh-plugin-mindmap

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye