dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
把 DSH 自己的运行错误和每个编程任务的复盘,沉淀成一张可以被人看见、也可以被模型读到的记忆图谱。
*面板实拍:顶部是统计与操作,左侧是颜色图例,中间是 GPU 渲染的错误星系,底部是「记忆」开关、教训有效性榜单与最近事件表。标题旁的 V## 是客户端 build 号,用来确认页面跑的是哪一代代码(截图拍的是 V33,当前是 V51)。*
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 查询全部教训;atlas_impact,回答「这套机制到底管不管用」:多少条教训可以被判定、其中多少条的失败在写完后又回来了,以及教训覆盖了多少种错误签名。当前库的实测(59 条复盘 / 102 个签名):30 条可判定,其中 6 条复发(20%),24 条成立(80%);61% 的签名已经有过教训。
生态里已经有做「记忆」和「复盘」的插件,先把边界说清楚,省得装完发现不是想要的:
已有的方向 · 代表 · 我们和它的分工 经验库:任务后整理候选经验、审阅采纳、按项目召回、冲突处理、到期复核 · dsh-dream · 它管「经验文本的采纳流程」,我们管「失败证据的采集与度量」。它更成熟,可以一起装 云端失败案例检索:带证据评级的历史案例 · misakanet · 它查别人的案例库(走公共 MCP 服务),我们只记你这台机器上真实发生的事,不联网、不上传 单仓库修复经验:只从测试验证过的修复里积累 · dsh-reforge · 它要求「先修好、有测试证明」,覆盖 Python 单仓;我们记录任意工具/命令的失败,不要求已经修好 错误提醒 / 自动重试 / 诊断 · dsh-pharos、bark-notify、dsh-client-auto-continue、dsh-plugin-debugging · 那些是「处理与提示」,错误过去就过去了;我们做「沉淀」 服务端错误跟踪 · Sentry、GlitchTip 一类 · 那类要靠 instrumentation 上报到服务器、跨机器聚合;这里没有服务端、没有传输,数据只落在 $DSH_HOME/error-atlas/records.json
一句话区别:给每个失败一个身份(去重签名)、一个位置(会话岛 / 程序卫星)、一个判决(写完教训之后又犯了吗)。前者是采集,中间是可视化,后者是唯一能证明「教训有用」的东西——这也是它和上面几个不重叠的部分。
原始记录里最没用的部分是「同一条命令换个目录再失败一次」,最有用的是「一句话说清下次怎么做」。所以入库和注入两头都做了收窄:
可执行 + 脚本/子命令。cd A; node build.mjs 与 cd B; node build.mjs 是同一条 node build.mjs;node -e "…" 记成 node -e;@' … '@ 这类脚本片段记成 shell,不会碎成 node const 这种垃圾签名。stderr 的最后一行留下来做「详情」,所以第二次看到它时还认得出是什么错。stats.noise 会告诉你静音了几条)。想看就打开 showNoise,GET|POST /error-atlas/prefs 或者面板里的过滤都能改。如果 → → 下次 。模型写复盘时可以自己给 essence,没给就由宿主从教训里压一行出来。essence,不再把整段教训塞进每次请求。version < 3)在 load() 时把 exit 记录重算成指纹、合并重复签名、把复盘的 errorIds 重映射到新 id(连边不会断),并补写 essence;迁移和派生都只落盘一次。图谱只是这些数据的一个视图——它不是装饰,但也不是产品本身:价值在于「教训能被下次会话读到」。
左侧栏点击 错误图谱(图标是一颗星)。第一次打开是空的——它只记录安装之后发生的事。
不需要做任何事。之后你在 DSH 里跑命令、改文件、插件加载失败、工具非零退出,都会自动入库并按签名聚合;重复犯同一个错,那颗点会变大变亮,次数 +1。
一段全局提示词会让模型在每个编程任务收尾前调用 atlas_retro,写入四条信息:做了什么、根因、怎么修、教训(那条「下次别再犯」的规则)。如果模型忘了写,宿主会留一条自动骨架,保证「这一轮干过什么」不丢。
面板上紫色的 RETRO 节点就是复盘,一条紫色的「教训」线把它连向它要治的那个错误;线上会有光点从错误流向复盘,表示这条教训正在被应用。同一错误在复盘之后又出现,管线会反过来倒灌并变红,面板顶部统计格里的「教训失效」计数 +1。
atlas_lessons(按程序 / 关键词 / 条数),面板上的「导出」则给人看。中心是 DSH 本体,往外每一圈是一个会话窗口:这个窗口里出过的错误围着它转,程序卫星再挂在整张图的外层轨道上。所以一眼能回答「哪个窗口在出错」「这个错误属于哪个程序」,而不是所有节点挤在一个球里。
同一签名在多个窗口出现时仍然只画一个节点(这是签名图,不是回合日志),它挂在最先出事的那个窗口上——sessions 里记录的其余窗口仍会在详情卡里列出来。
3/4 这种数字就是还有四个里有三个在显示。点一下关掉那一类,再点一下开回来,选择会被记住。区域 · 说明 顶部统计 · 累计错误 / 去重条目 / 图谱节点 / 会话 / 工具 / 程序 / 开发错误 / 任务复盘 / 教训失效 顶部操作 · 刷新、搜索、暂停、外观(自转速度 / 节点大小 / 间距 / 光点大小 / 光晕)、过滤 ≥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.25"。
本地目录安装(开发用):
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-digestatlas-retro 优先通过宿主路由写入(POST /error-atlas/retro,仅回环可访问);宿主不在时退化为直接改库文件并给出警告。
$DSH_HOME/error-atlas/records.json(日志、聚合错误、复盘、偏好设置);$DSH_HOME/error-atlas/exports/;/error-atlas/data|prefs|retro|clear|export)都只接受回环地址;npm test # 157 项断言:宿主事件/路由/存储 + 客户端渲染(借用本机 DSH 的 React)
npm run smoke # 干净 DSH_HOME 下的冷启动冒烟:空库 → 写复盘 → 读回 → CLI 可读客户端为零依赖手写 bundle(window.__ModuleLoader__),宿主为纯 ESM。面板标题旁的 V51 就是 BUILD 号,用来确认页面加载的是哪一代客户端代码。
files + cwd 推导,错误记录本身不存路径,所以没写过复盘的目录不会出现在图里;stats.truncated 会如实标记,且被复盘引用的错误不会被裁掉;MIT