Skip to content

Releases: 3likofj/dsh-anagenesis

v0.4.0 — 先量,再改

Choose a tag to compare

@3likofj 3likofj released this 25 Oct 14:36

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 的更新提示(接线缺陷)

Choose a tag to compare

@3likofj 3likofj released this 24 Oct 18:02

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 — 仪表盘里的新版本提示

Choose a tag to compare

@3likofj 3likofj released this 24 Oct 17:55

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 — 一个包 + 设施仪表盘

Choose a tag to compare

@3likofj 3likofj released this 23 Oct 19:34

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 — 修复升级存储上的审计视图

Choose a tag to compare

@3likofj 3likofj released this 10 Oct 10:46

修复:升级后的存储上,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 — 记忆按项目隔离 + 预设成为权限开关

Choose a tag to compare

@3likofj 3likofj released this 10 Oct 10:31

这一版解决两件真事

  1. A 项目的经验不再在 B 项目里被召回(张冠李戴)—— 记忆现在有作用域。
  2. 不启用预设时,模型连写入工具都看不到(无意识污染)—— 预设从"建议层"升级为"权限层"。

新增

新增 一句话
记忆作用域 每条记忆带 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 首个公开版本

Choose a tag to compare

@3likofj 3likofj released this 07 Oct 13:29

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 内点击验收尚未纳入自动化闸门。

完整说明见 README,变更细节见 CHANGELOG。