Repository navigation
Releases: 3likofj/dsh-anagenesis
Release list
v0.4.0 — 先量,再改
0.4.0 — 先量,再改
不加工具、不加依赖,改的是检索与写入的质量。存储 v7 → v8(自动迁移,只加 confirmedAt)。
亮点
- 离线检索基准(
bench/,npm run bench):211 条记忆 × 41 条查询,nDCG@10 0.903 → 0.974,污染率 0.908 → 0.193,平均注入 11.6 → 1.6 条 - 相关性门槛:无关查询不再为了填满预算而注入;
ana_recall.excluded报告排除了谁、为什么 - 图检索:
links参与召回(1 跳扩展),被取代的旧信念默认不再注入 - 写入智能:近重复 top-3 建议、
supersedes: [ids]一事务收编、write.admissionThreshold接线 - 调参闭环:奖励来自变更后的反馈窗口;一次只允许一个在飞变更
- 仪表盘:新增「召回质量」分区;窗口 UI 改为分组两栏,设施视图增加楼层健康徽标
- 日志完整性:
status().journal.health报告坏行与 seq 空洞
完整变更见 CHANGELOG.md。
v0.3.2 — 修好 0.3.1 的更新提示(接线缺陷)
0.3.2
0.3.1 的建议升级版。 0.3.1 的版本检查本身没问题,但结果到不了界面。
修了什么
- 窗口里的「版本更新」块永远是「没检查过」。
window/src/host/viz.js的readUpdate()写在模块作用域,却引用了createRenderer闭包里的updateProvider—— 引用不存在,它自己的try/catch把ReferenceError吞成null,于是无论服务报什么,设施视图与仪表盘都显示check disabled / never。核心层的检查是好的(service.updateStatus()/ana_audit view=status能读到),坏的是最后一公里。
修法:readUpdate(provider)显式收参数,四个调用点各自传入。 - 补上接线测试:
createRenderer({ update })→ 模型必须出现available/latest,且文本帧不带这个分区。0.3.1 的单测全绿,因为它们测的是投影(模型 → 渲染),没测 provider → 模型 那一段 —— 测函数 ≠ 测接线。 dsh-anagenesis@0.3.1已在 npm 上deprecate,指向本版。
真机实测(本机,0.2.1-rc.3 宿主)
GET /anagenesis/api?method=dashboard
current version=0.3.1 | latest version=0.3.1 | update=up to date | last checked=8s ago
GET /anagenesis/api?method=facility
{"enabled":true,"mode":"npm","current":"0.3.1","latest":"0.3.1","available":false,"error":""}
即:核心行真的发了一次 GET 到 registry.npmjs.org、读回 latest、与自己比过、两个界面都拿到了这个状态。
闸门(本轮实测)
npm test 118/118 npm run preflight 35/35
npm run test:window 91/91 npm run gate:pack 14/14
npm run verify:boot 98/98 preview.mjs 11/11
npm run gate:window 91/91 + 19 项探针
完整变更见 CHANGELOG.md。
v0.3.1 — 仪表盘里的新版本提示
0.3.1
一块牌子:有新版本了。非破坏性变更 —— 存储仍是 v7,行 id / 工具 / 路由都没动。
新增
- 新版本提示:插件会检查自己是不是最新版,并把结果画在仪表盘上。
- 设施视图(窗口默认面)顶条出现信号黄牌子
v0.4.0 可更新(悬停写着升级方式),告警台里同时有一条「有新版本 vX.Y.Z」。
只有真的查到新版本时才出现 —— 检查关闭 / 没查过 / 查失败都不占顶条。 - 仪表盘面新增「版本更新」分区:当前版本 / 最新版本 / 更新状态(有新版本 · 已是最新 · 检查已关闭 · 检查失败:原因)/ 上次检查。
ana_audit view="status"与service.updateStatus()里同样能读到,Agent 不必靠猜。- 它只提示:不下载、不安装、不重启、不改任何文件。
- 设施视图(窗口默认面)顶条出现信号黄牌子
默认值与那个开关
| 配置 | 默认 | 说明 |
|---|---|---|
updateCheck |
代码里 off,bundle 里 npm |
off = 完全离线;npm = 每 6 小时读一次 npm 上的 latest |
updateCheckIntervalMs |
21600000 |
检查间隔,同时是缓存寿命 |
updateRegistry |
https://registry.npmjs.org |
换镜像改这里 |
updateCheckTimeoutMs |
5000 |
单次超时;超时按「检查失败」显示 |
只发一次 GET、不带实例 id / 项目指纹 / 记忆内容,下载零字节、安装零动作。
想要完全离线:updateCheck: off,一行就够。
实现要点
- 版本比较是自己写的纯函数(
src/update/check.js),不引 semver —— 零运行时依赖是硬约束;
已覆盖预发布优先级(0.3.1-rc.1 < 0.3.1,0.3.2-rc.1 > 0.3.1)。 - 窗口不自己上网:它问核心服务的
updateStatus(),是否联网由核心行的配置决定。 - 文本帧(
ana_dashboard/ 窗口/frame)不加这个分区:那一份必须逐字节相同(有探针守着),
更新状态会随时间变化,所以只在结构化模型里出现。 disclosure.network从空数组改为如实声明registry.npmjs.org。
闸门(本轮实测)
npm test 118/118 npm run preflight 35/35
npm run test:window 90/90 npm run gate:pack 14/14
npm run verify:boot 98/98 preview.mjs 11/11
npm run gate:window 90/90 + 19 项探针
完整变更见 CHANGELOG.md。
v0.3.0 — 一个包 + 设施仪表盘
0.3.0
一个包
dsh-anagenesis-window 并入 dsh-anagenesis:一个包、六行 Loader 行、一份 dsh.client 半。
dsh plugin add dsh-anagenesis窗口现在是同一个包的第六行(name: dsh-anagenesis/window),安装只有一条命令。
从 0.2.x 升级是破坏性的:先卸掉旧的窗口包(已
npm deprecate),再装/升级本包并重启桌面端。
窗口路由从/anagenesis-window/api改为/anagenesis/api,ModuleLoader id 改为包名。
存储格式没有变(仍是 v7),不需要迁移。
为什么六行能同住一个包:@deepseek-ai/dsh-client-modules 的真实约束是「同一个包名只能有一个活跃 client source」,而子路径 specifier(dsh-anagenesis/tools)根本不算 source —— 所以「裸包名只出现一次」才是硬约束。anagenesis 预设的 core 行因此改为 dsh-anagenesis/core。
设施仪表盘(窗口默认面)
记忆库被画成一栋可运维的楼:楼层 = 命名空间(当前项目 / 全局 / 每个会话)、分区 = 记忆类型、
传感器 = 一条活跃记忆、读数 = 显著度 / 置信度 / 新鲜度、能耗对比 = 本分区单条能量 vs 全楼实测均值,
再加大告警台(矛盾链接 / 即将过期 / 高显著但陈旧 / 悬空链接 / 锁定 / 安全模式 / 脱敏关闭 / 只读档位)
与底部实时电文(日志尾部事件流)。
模型里没有的数字不会出现在屏幕上 —— 这是这一屏的验收口径。新 RPC 方法 method=facility;
ana_window view="facility" 打开的就是它。点分区是纯本地重绘,不产生请求。
适配宿主 0.2.1-rc.2
开工前用真 Cordis + 真 defineTool + 真预设注册表复跑 98 项启动契约;peerDependencies 抬到 ^0.2.1-rc.2
(预发布版本的比较器只在三段完全相同时才接受,^0.2.0-rc.2 不会接受 0.2.1-rc.2)。
闸门(本轮实测)
npm test 108/108
npm run test:window 89/89
npm run verify:boot 98/98 ALL CHECKS PASSED
npm run gate:window 89/89 + 19 项探针 ALL PROBE CHECKS PASSED
npm run preflight 33/33
npm run gate:pack 14/14(真打包 + 真安装)
node window/tools/preview.mjs 11 项检查全 ok(含设施屏)
完整变更见 CHANGELOG.md。
v0.2.1 — 修复升级存储上的审计视图
修复:升级后的存储上,ana_audit 的日志与状态视图会被宿主拒绝
0.2.0 在任何从 0.1.x 升级上来的存储上会踩到这个缺陷:ana_audit view="journal" 返回
value is not lossless JSON(view="status" 在其中最后五条事件都是旧事件时同样)。
根因:ns(事件落在哪个命名空间段)是存储结构 v7 才有的字段,升级前写下的每一条事件都没有它。
工具把 event.ns 直接透传时会得到 { ns: undefined } —— JSON.stringify 丢掉这个键,宿主因此看到与
工具返回值不同的对象,从而拒绝整次调用。本机真实存储里 201 条事件有 189 条属于这种情况。
修法(两层 + 一条回归测试)
- replay 时把内存读模型里的
ns归一化为global(一处修好所有消费者); ana_audit view="journal"与status().lastEvents再兜一层?? null;- 新增回归测试:构造真存储(写一批事件 → 删掉日志每行的
ns→ 删快照 → 强制重放旧形状日志),
断言两个视图都能无损往返 JSON。该用例在修复前会红。
验证
npm test 96/96 · npm run test:window 87/87 · npm run verify:boot 98/98(真 Cordis + 真 defineTool +
真预设注册表)· npm run gate:pack 15/15 · npm run preflight 23/23
升级
dsh plugin add dsh-anagenesis@0.2.1
dsh plugin add dsh-anagenesis-window@0.2.1两个包请一起升级(窗口包的 peer 依赖是 dsh-anagenesis@^0.2.0,0.2.1 满足它)。
v0.2.0 — 记忆按项目隔离 + 预设成为权限开关
这一版解决两件真事
- A 项目的经验不再在 B 项目里被召回(张冠李戴)—— 记忆现在有作用域。
- 不启用预设时,模型连写入工具都看不到(无意识污染)—— 预设从"建议层"升级为"权限层"。
新增
| 新增 | 一句话 |
|---|---|
| 记忆作用域 | 每条记忆带 global / project(默认)/ session;检索默认只召回当前项目 + 全局 + 当前会话 |
| 项目指纹 | p1_<hash> 由 git remote(优先)或工作目录算出,纯函数、跨重启稳定;同一份代码的多个检出是同一个项目 |
| 跨项目要授权 | crossProject: true 才纳入,命中降权并逐条标注「⚠ 其他项目经验,请勿盲从」 |
| 冲突自动降权 | 语义相似但内容相反时,跨项目那条的有效置信度当场减半并提示以当前环境为准;只改投影,不回写 |
| 物理隔离 | 日志按命名空间分文件;全局记忆保留原有命名,升级前写的存储一个字节都不用改 |
| 预设 = 权限层 | 写入工具只在预设内注册;档位 passive(只读)/ assisted(默认)/ autonomous(可自动调度) |
| 执行期检查 | ctx.tools.guard() + 每个写入工具自带的授权校验;授权撤销后连缓存的定义也拒绝执行 |
| 状态脉冲 | 每一步都有 <anagenesis-pulse>:当前项目指纹、档位、可用工具集 |
| 新工具 | ana_list、ana_scope(status / list / namespaces / retag / adopt / drop-session);retag 可回滚 |
| 可视化 | 仪表盘新增「作用域」分区:当前项目青色、其它项目黄色、全局与迁移遗留一目了然 |
破坏性变更(升级须知)
- 存储结构 v6 → v7 自动迁移,不丢数据:带
workspace的旧记录归入正确项目,其余标为
migrated-global(继续可召回,但被降权)。用ana_scope action="adopt"可把它们收回到当前项目。 ana_remember的默认作用域从「全局」改为「当前项目」。- 写入类工具改为只在启用
anagenesis预设时注册;只读工具不受影响。 - 建议重启桌面端以加载新的工具分层。
验证
npm test 95/95 · npm run test:window 87/87 · npm run verify:boot 98/98(真 Cordis + 真 defineTool +
真预设注册表 + 沙箱三条 witness 逐字节不变)· npm run gate:pack 15/15 · npm run preflight 23/23
安装
dsh plugin add dsh-anagenesis # 内核:记忆 + 作用域隔离 + 权限层 + 策略 + 护栏 + 可视化工具
dsh plugin add dsh-anagenesis-window # 桌面窗口(可选,推荐)窗口包 0.2.0 的 peer 依赖是
dsh-anagenesis@^0.2.0,请两个包一起升级。
v0.1.0 — anagenesis 首个公开版本
anagenesis 0.1.0 —— DeepSeek Harness 上的可编程记忆编排层 + 自我进化引擎。
已在 npm 发布:dsh-anagenesis@0.1.0(内核)与 dsh-anagenesis-window@0.1.0(桌面窗口,可选)。
安装
dsh plugin add dsh-anagenesis # 内核:记忆 + 策略 + 护栏 + 可视化工具
dsh plugin add dsh-anagenesis-window # 桌面窗口(可选,但推荐一起装)装完重启 profile,新会话里选择 anagenesis 预设。
这一版包含
- 闭环记忆存储:
journal/*.jsonl追加式日志 + 原子快照 + 检查点,不调用、不桥接任何外部记忆服务。 - 17 个面向 Agent 的语义记忆工具:按意图召回、生命周期管理、结构化(关联 / 拆分 / 反事实重思)、治理(策略 / 调参 / 审计)、可视化。
- 可切换的注入策略:运行时可换栈(6 个具名栈),按作用域存栈,互不干扰。
- 元策略自调节:参数包络约束 + UCB1 选臂 + 审计 + 评估 + 回滚。
- 全程可逆:每笔事务返回逆函数,逆操作与正向 patch 同写日志,重启后仍可回滚。
- 护栏:8 条单调不变量 + 策略熔断 +
safeMode冻结;自我修改只限 tier-1,外环冻结。 - 可视化:TUI 仪表盘、mermaid / d2 / ascii 文本图表、以及可选的桌面原生窗口(中文卡片 + 自研内联 SVG 关系图)。
- 零运行时依赖、离线、无子进程、无网络;工具与窗口输出默认脱敏。
已知限制
- 错误消息与 journal 审计词汇保持英文(它们是持久化词汇,改动需由 store 层统一完成)。
- 桌面窗口需要声明
dsh.client,而这样的包只能有一个活跃 Loader 行,因此它是单行兄弟包,不在内核的五行之内。 - 桌面窗口的 GUI 内点击验收尚未纳入自动化闸门。