coding-agents
vectorize-io/hindsightHindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
给 DSH agent 的项目记忆:历史相似编辑作为先例出现、越界修改被 scope 锁拦下、认知跨会话持续积累(47 次上游验收修复、去 gold 化 20/20)。
DSNLE 让你的 DeepSeek Harness agent 记住你的项目。
新任务自动带上你修过的历史:相似任务的历史编辑作为先例出现,越界修改被 scope 锁拦下, 认知跨会话持续积累——全部由 DSH 原生机制执行(全工具闸门、内核级版本守卫、skills 知识层、 会话事件溯源),不是提示词技巧。
诚实状态:研究原型,但实现可用——47 次真实仓库修复通过上游测试验收、去 gold 化连续 20 任务 20/20、245 项确定性回归;边界公开(docs/research/)。
需要:Node.js ≥ 22 + DeepSeek Harness(运行中)。
git clone https://github.com/scd13150/dsh-cognition.git && cd dsnle
node install-dsnle.mjs --set-default # 创建 dsnle 预设并设为 DSH 默认(自动备份原配置)
然后重新打开 DSH(或新建一个会话),新会话应看到:
nle_suggest / nle_focus / nle_mutate / nle_select / nle_guard 等nle-learned-* 与 nle-reflections验证:新会话里跑一次 nle_check(无参数),返回 ok: true 即安装成功。
--set-default,装完在 DSH 设置页把默认预设(agent-presets → default)手动改为 dsnle;或仅对特定会话选择该预设node install-dsnle.mjs --into router-standard(自动备份 agent.cordis.yml)--dry-run~/.dsh/.agent-presets/dsnle/;若改过默认预设,恢复 ~/.dsh/settings.yaml.bak-*~/.dsh/.agent-presets/<预设>/agent.cordis.yml.bak-*| 现象 | 处理 |
|---|---|
| 新会话没有 nle_* 工具 | 确认会话用的是 dsnle 预设(设置页查看);已运行会话不会自动获得新预设,必须新开会话 |
| 新会话起不来(挂载失败) | 恢复上述备份,然后到本仓库开 issue(附上 agent.cordis.yml 与报错) |
| 有工具但技能目录空 | 不影响核心链路;检查 .dsh/skills/nle-reflections/SKILL.md 是否在持续更新 |
记忆(社区呼声最高的能力):
.dsh/skills/nle-reflections/SKILL.md 与状态文件,跨会话、跨进程存续约束(防止乱改):
nle_suggest → nle_focus →(nle_impact)→ 编辑 → nle_select → nle_guard,
未定向的源码编辑被 WORKFLOW_MISSING_SUGGEST 等 deny 拦截nle_reorient,测试失败/先例可重定向)观测:内容哈希 cell、CON 码(CON200/404/405/422)、写前版本守卫(stale 拒绝)、 工具层 + 文件层双真相交叉对账(编辑说谎会被 guard 抓出)。
可靠:变更文件契约门(声明 vs 真相)、guard 总闸(PATCH_GAP/时序/预算)、 状态防篡改、闭合反射(五信号熔合成 observations,修正 learned)。
语义检索是可选增强,不启用自动降级 BM25 + 符号/先例/共改检索,主链路不受影响:
node nle-semantic/server.mjs --spool <工作区>/.nle-semantic
node nle-semantic/server.mjs --selfcheck 生成缓存再迁移;或不用语义通道node nle-semantic/server.mjs --selfcheck → {"ok":true,"dim":384}40 卡实验逐卡数据(P6/P7_DATA)、四角度审计裁定(AUDIT_ADJUDICATION)、机制规格 (DSH_NLE_SPEC / NLE_DSH_FIT)、价值评估与实验纪律(NLE_VALUE_ASSESSMENT / HANDOFF)——全部保留,可核查。
nle-rules-core.mjs 规则唯一源(仓库根,插件经 import 引入)
nle-plugin/
dsnle-plugin.mjs [生成] 持久插件(preset 挂载入口,勿手改)
frag-apply-*.mjs ×4 apply 函数体碎片(改插件逻辑改这里)
build-dsnle.mjs 纯拼接构建器
nle-semantic/server.mjs 语义/git 信号 helper(可选)
install-dsnle.mjs 安装脚本(standalone / --into 两模式)
改代码 → node nle-plugin/build-dsnle.mjs → 重跑安装脚本 → 新会话生效。
回归:node smoke-test.mjs(无文件依赖纯函数断言,32 项)。