Error Atlas · 错误星图
把 DSH 自己的运行错误和每个编程任务的复盘,沉淀成一张可以被人看见、也可以被模型读到的记忆图谱。

面板实拍:顶部是统计与操作,左侧是颜色图例,中间是 GPU 渲染的错误星系,底部是「记忆」开关、教训有效性榜单与最近事件表。标题旁的 V33 是 build 号,用来确认页面跑的是哪一代客户端代码。
A local-first memory plugin for DeepSeek Harness: it records runtime failures and coding-task retrospectives, injects the reusable lessons back into the prompt, and renders the whole atlas as an interactive WebGL knowledge graph.
它解决什么
DSH 报过的错、踩过的坑,默认会随会话结束消失。这个插件做两件事:
写侧:把错误和复盘结构化地存下来。
- 运行期错误自动入库:
agent/error(步/轮失败)、api-session/error、agent-loop/config-start-failed、tools/result里的工具失败与非零退出码; - 同一签名(类型 + 工具 + 消息)自动去重聚合,记次数、首末时间、涉及会话;
- 每次编程任务收尾由模型调用
atlas_retro写一条复盘:做了什么 / 根因 / 怎么修 / 教训;模型没写的,宿主用工具与文件留一条自动骨架(不会抢模型手写的份额)。
读侧:让教训在下次真的被用上。
- 一段全局提示词要求「编程任务收尾前写复盘」;
- 每次请求动态注入简报:失效教训优先(写完又复发的),再加几条最近的规则;没有教训时整段不出现,不产生固定开销;
- 只读工具
atlas_lessons,可按query/program/limit查询全部教训。
图谱只是这些数据的一个视图——它不是装饰,但也不是产品本身:价值在于「教训能被下次会话读到」。
使用方式
1. 打开面板
左侧栏点击 错误图谱(图标是一颗星)。第一次打开是空的——它只记录安装之后发生的事。
2. 正常干活
不需要做任何事。之后你在 DSH 里跑命令、改文件、插件加载失败、工具非零退出,都会自动入库并按签名聚合;重复犯同一个错,那颗点会变大变亮,次数 +1。
3. 收尾写复盘
一段全局提示词会让模型在每个编程任务收尾前调用 atlas_retro,写入四条信息:做了什么、根因、怎么修、教训(那条「下次别再犯」的规则)。如果模型忘了写,宿主会留一条自动骨架,保证「这一轮干过什么」不丢。
面板上紫色的 RETRO 节点就是复盘,一条紫色的「教训」线把它连向它要治的那个错误;线上会有光点从错误流向复盘,表示这条教训正在被应用。同一错误在复盘之后又出现,管线会反过来倒灌并变红,面板顶部统计格里的「教训失效」计数 +1。
4. 让教训回到下一次
- 新会话开始后,宿主会自动把「失效教训 + 最近几条规则」注入上下文,模型不用查就知道;
- 你也可以让它主动查:模型可以调用
atlas_lessons(按程序 / 关键词 / 条数),面板上的「导出」则给人看。
5. 会话分岛
中心是 DSH 本体,往外每一圈是一个会话窗口:这个窗口里出过的错误围着它转,程序卫星再挂在整张图的外层轨道上。所以一眼能回答「哪个窗口在出错」「这个错误属于哪个程序」,而不是所有节点挤在一个球里。
同一签名在多个窗口出现时仍然只画一个节点(这是签名图,不是回合日志),它挂在最先出事的那个窗口上——sessions 里记录的其余窗口仍会在详情卡里列出来。
6. 维护
- 噪声太多:卡片上点「忽略」,把这条签名加入前缀规则,永久静音;顶部「过滤 ≥N」按命中次数裁剪视图;
- 程序卫星:程序枢纽被摆到外层轨道而不是云团中心——同一程序的所有复盘文件落在同一目录,它就悬在云外,连线像缆绳一样从错误节点拉出去,一眼能看出「是哪一团错误属于这个程序」,而不是所有东西挤成一个球;
- 找东西:搜索框输入标签、程序名、错误文本,命中高亮、其余压暗;点教训有效性榜单里的任意一行,图谱会过滤到那一类;
- 太久之前:点「清空」删除运行时错误记录(青色开发错误与紫色复盘是保留的);点「导出」把整份数据写成 Markdown。
3.5 看得清
- 一个「外观」放四个滑条:点顶部「外观」弹出面板,里面有自转速度、节点大小、光点大小、光晕四个滑条,调节即时生效并各自记住上次的值。
- 节点大小:「大小」滑条缩放整张图的节点(10%–300%),与相机距离解耦——缩放只改变位置,不改变点的直径。
- 光点大小:「光点」滑条(20%–400%)只调沿教训线流动的那批小球,与节点的粗细互不影响。
- 间距:「间距」滑条(35%–240%)缩放整张图的位置,连线的长短、岛屿之间的距离一起变;节点与光点自身的直径不变,所以「拉开看清楚」和「点变大」是两件事。
- 光晕大小:「光晕」滑条(0%–400%)控制每个节点外层的辉光,走的是电灯式两层叠加——紧致的一圈亮边加一圈更宽更淡的散射光;0% 是完全清晰的点阵,100% 是默认的星云感。
- 贴着线走:光点严格画在连线上(不做弧线抬升),不会浮在线旁边。
- 点击 = 对准:点任意节点,相机会把它转到屏幕中心并拉近;点空白或「重排」回退到全景。
- 节点是实的:每个节点是带抗锯齿边缘的亮球(中心亮、边缘暗),外面只留一层很淡的光晕——密集区不再糊成一片白。
面板上都有什么
| 区域 | 说明 |
|---|---|
| 顶部统计 | 累计错误 / 去重条目 / 图谱节点 / 会话 / 工具 / 程序 / 开发错误 / 任务复盘 / 教训失效 |
| 顶部操作 | 刷新、搜索、暂停、外观(自转速度 / 节点大小 / 间距 / 光点大小 / 光晕)、过滤 ≥N、重排、导出、清空、标题开关 |
| 左侧图例 | 见下表 |
| 中央星图 | 拖拽旋转、滚轮缩放、点节点看详情卡,视野拉近到该节点并以它为中心旋转(点空白处回到整体)、双击带会话的节点跳回该会话 |
| 底部「记忆」 | 两枚开关:收尾提示 / 注入教训 |
| 教训有效性 | 按标签与程序统计复盘数、失效数、失效率;可收起;行可点击过滤 |
| 最近事件 | 最新 400 条事件的表格视图(次数、类型、工具、消息、首次/最近) |
图例与配色:
| 节点 | 颜色 | 含义 |
|---|---|---|
AGENT |
亮红 #ff4453 |
模型自身在某一轮/步失败 |
TOOL |
橙 #ffb570 |
工具调用返回了错误 |
EXIT |
杏黄 #ffd68f |
命令非零退出码 |
SESSION |
粉 #ff859d |
会话枢纽(出过错的那个窗口):每个窗口是一座岛,自己的错误围在它周围 |
CONFIG |
紫 #d89eff |
会话/插件配置启动失败 |
DEV |
青 #7ff3e0 |
插件自己的开发错误(内置 12 条,随版本更新) |
RETRO |
紫 #c7a4ff |
一条任务复盘 |
PROJECT |
浅蓝 #7fd4ff |
程序卫星:停在错误云外层轨道,缆绳般的连线拉到它犯过的错误上 |
STALE |
红 #ff5b4d |
教训失效(复盘之后同一错误又出现) |
安装
市场安装:在 DSH 插件市场搜索 error-atlas / 错误星图。
从 npm 安装(推荐,装最新版):
plugin_manager install_bundle target="dsh-error-atlas"
指定版本:target="dsh-error-atlas@0.11.4"。
本地目录安装(开发用):
plugin_manager install_bundle target="<本包绝对路径>"
安装后重启 DSH(宿主半边要注册路由、工具和提示词段),再刷新页面。
两个记忆开关
面板底部有一条「记忆」栏,两枚开关都是即时生效、重启后保留:
| 开关 | 关闭后 |
|---|---|
| 收尾提示 | 不再注册「编程任务收尾前写复盘」的提示词段(省掉每轮固定字符) |
| 注入教训 | 不再每轮注入历史教训简报(图谱与复盘照常记录) |
只想安静记录、不想被提示词影响的人,两个都关掉即可;复盘与图谱不受影响。
命令行
包内自带两个 CLI,也可被直接调用:
node bin/atlas-digest.mjs # 终端摘要:概览、Top 失败、失效教训、最近复盘
node bin/atlas-digest.mjs --json # 机器可读
node bin/atlas-retro.mjs --list # 列出复盘
node bin/atlas-retro.mjs --upgrade <id> --lesson "…" # 升级/改写某条复盘
node bin/atlas-retro.mjs --new --title "…" --lesson "…" # 手写一条复盘
不想先装包也能跑(npx 直接从 npm 拉):
npx -y -p dsh-error-atlas atlas-digest
atlas-retro 优先通过宿主路由写入(POST /error-atlas/retro,仅回环可访问);宿主不在时退化为直接改库文件并给出警告。
数据与隐私
- 数据只落在本机:
$DSH_HOME/error-atlas/records.json(日志、聚合错误、复盘、偏好设置); - 导出的 Markdown 写到
$DSH_HOME/error-atlas/exports/; - 所有 HTTP 路由(
/error-atlas/data|prefs|retro|clear|export)都只接受回环地址; - 不联网、不上报、不采集对话内容;错误消息里可能含命令与路径,介意的话用面板的「清空」一键删除运行时记录(开发错误、任务复盘是内置/用户自己的数据,不会被清空)。
开发与测试
npm test # 157 项断言:宿主事件/路由/存储 + 客户端渲染(借用本机 DSH 的 React)
npm run smoke # 干净 DSH_HOME 下的冷启动冒烟:空库 → 写复盘 → 读回 → CLI 可读
客户端为零依赖手写 bundle(window.__ModuleLoader__),宿主为纯 ESM。面板标题旁的 V30/V35… 是 BUILD 号,用来确认页面加载的是哪一代客户端代码。
已知边界
- 只看得见工具层失败与非零退出,模型在「成功路径」上的逻辑错误不会自动入库——那部分要靠复盘自己写;
- 教训注入是全局的(每轮一次),不按工作区精确匹配;
- 程序枢纽只从复盘的
files+cwd推导,错误记录本身不存路径,所以没写过复盘的目录不会出现在图里; - 图谱上限 2400 个节点(约 2400 条去重签名):超出时
stats.truncated会如实标记,且被复盘引用的错误不会被裁掉; - 规模变大后布局换成网格斥力(只算近邻)+ 岛屿锚定,2400 节点首次落位约几十毫秒、稳态每帧十几毫秒;240 节点以下仍是精确力模型;
- 会话岛采用「唯一归属」:同一签名只挂在最先出事的窗口上,其余窗口在详情卡里列出,避免一个节点被复制成多份;
- 需要 Node ≥ 20;客户端需要 WebGL2(不可用时面板退化为提示)。
相关链接
License
MIT
No comments yet. Be the first to write one.