diff --git a/README.md b/README.md index 0a902e1..a9e8c3f 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ license CI node - tests + tests coverage Awesome

@@ -39,6 +39,7 @@ | 2026-10-18 | **v0.9.1** | **M.O. 从「看得见」跑到「跑得出账」** — 工作流不再只有一张图:`/mo-run start ` 与 `/mo-run stop` 由人划出执行窗口,一次 run 落到 `<项目>/.mneme/pipelines/.runs.jsonl`;归属只出候选(单条命令唯一归属实测 14.2%,所以「认不出来」是合法答案);P1 回执列业务动作、P2 人确认才写账、P3 把「人说做了」与「观察里一次都没出现」的矛盾摆出来让人判。**机器从不替你下结论。** | | 2026-10-18 | **v0.9.1** | **人格定义页 v1.2**(beta,默认关)— 从一张卡变成按 agent 寻址的多张卡:设置键是 `{default, byAgent}`,v1 的单对象读作 `default`、零迁移;注入按会话身份寻址对应 agent 的卡,身份缺失落 `default`。 | | 2026-10-19 | **v0.9.2** | **让「看不见的失败」显形** — 这一版修的大多不是「缺功能」,是「坏了却不报」:功能开关一直是启动期生效,面板「已改」只说明值进了库,于是新增第三态「待重启」([#481](https://github.com/slow-stack/mneme/pull/481));巩固的 `dreamMaxTokens` 默认值被原样当 `max_tokens` 发出去,撞上服务商上限后 180 次巩固 0 次成功,现在面板能改、超上限还会按服务商自己声明的上限自动降级([#478](https://github.com/slow-stack/mneme/issues/478));自动蒸馏写入的行 100% 拿不到向量,注释承诺的「提交后补跑」从未存在([#477](https://github.com/slow-stack/mneme/pull/477));CLI 把 `--` 开头的值当成新旗标——这个缺陷只在 token 前两位恰好掷中 `-`(约 1/4096)时现形,潜伏了整整一个发布周期。另新增作用域级可逆闸门([#471](https://github.com/slow-stack/mneme/issues/471),默认关):让一路记忆能被单独按下与松开,不改配置、不重启。 | +| 2026-10-20 | **v0.9.3** | **M.O. 从「挖得出来」跑到「会被叫去挖」** — 沉淀链的算法自 v0.9.1 起就写完了(多帧 zstd → 重复序列 → 缺席对照 → draft 草稿),可它在运行时**没有任何调用点**:全仓引用只出现在测试里。机器挖得出来、却永远不会被叫去挖——缺的从来不是算法,是**归属**与**触发**。这一版把三处接上:按会话头里的 `cwd` 反查项目桶(桶名是路径的**有损**变形,规则不在本仓,查不到就整跑跳过,而不是降级成全局普查——后者会把 A 项目的动作算到 B 头上,且结果看起来完全正常);新增 `nudgeForProject` 把「归属 → 挖掘 → 落盘」收成一个入口;挂 `turn/end` 按项目跑,冷却 10 分钟、单次预算 4 秒、延到宏任务、一次一个项目、抛错只 `warn`。**它只产提议,不产草稿**([#489](https://github.com/slow-stack/mneme/pull/489)):升格仍然要人批,面板也多了「现在沉淀一次」,与自动跑同一条入口、区别只有不改仓库。同版修掉三处「坏了却不报」:作用域反查自 v0.8.0 起每次都抛错走降级、canonical 归一与成员校验静默失效([#487](https://github.com/slow-stack/mneme/issues/487));`/nudge` 的写盘口只拦 `PUT`/`POST`,带 token 的 `PATCH`/`DELETE` 会静默写盘、归属解析不看预算、桶名边收边截把「没看全」报成「确实没有」;多帧 zstd 的反证断言绑了 Node 的整块解语义,24.22.0 起过期([#490](https://github.com/slow-stack/mneme/pull/490))。 | > 只记大改动,逐条细节见 [CHANGELOG](dsh-mneme/CHANGELOG.md)。 @@ -264,7 +265,7 @@ dsh-mneme-serve # 默认 ~/.dsh/memory + 127.0.0.1:8790 | **v0.6** | 会话生命周期:删对话 ≠ 删记忆 | ✅ | | **v0.7** | 自进化记忆:热度衰减 + 睡眠双保护 + 桌面端工作台/功能开关 | ✅ | | **v0.8** | 作用域隔离(agent/workspace 双维隔离 + 检索加权 + opt-in 硬过滤)+ 冲突队列人工裁决 + 归属显式声明 + 生态化(stdio MCP server / 图召回轴 / 冷启动 / 注入截断与状态条 / 蒸馏可靠性 / 注入形态与 agent 主动整理接口 / 配置说明与 issue 模板) | ✅ 已发布(至 v0.8.16) | -| **v0.9** | M.O.(Modus Operandi)beta:项目级工作流本体 + 候选分层与升格判据 + 面板清单/图同屏;设置面板按「新手之外」重划折叠线(#427);安全审计与供应链加固(声明式路由鉴权、OSV 阻断、发布签名);**v0.9.1 补上写侧**:执行窗口、运行账、归属候选、观察旁挂与脱节检出、步骤 `assert`/`optional`、沉淀链草稿挖掘、人格定义页(按 agent 多卡);**v0.9.2 让看不见的失败显形**:功能开关第三态「待重启」、作用域级可逆闸门(#471)、巩固 `max_tokens` 超上限自动降级(#478) | ✅ 已发布(v0.9.2) | +| **v0.9** | M.O.(Modus Operandi)beta:项目级工作流本体 + 候选分层与升格判据 + 面板清单/图同屏;设置面板按「新手之外」重划折叠线(#427);安全审计与供应链加固(声明式路由鉴权、OSV 阻断、发布签名);**v0.9.1 补上写侧**:执行窗口、运行账、归属候选、观察旁挂与脱节检出、步骤 `assert`/`optional`、沉淀链草稿挖掘、人格定义页(按 agent 多卡);**v0.9.2 让看不见的失败显形**:功能开关第三态「待重启」、作用域级可逆闸门(#471)、巩固 `max_tokens` 超上限自动降级(#478);**v0.9.3 接通自动沉淀**:按会话头 `cwd` 反查项目桶、挂 `turn/end`、冷却 10 分钟、单次预算 4 秒,只产提议不产草稿(#489),并修作用域反查自 v0.8.0 起静默降级(#487)、`/nudge` 写盘口漏拦 `PATCH`/`DELETE`、多帧 zstd 反证断言绑 Node 整块解语义(#490) | ✅ 已发布(v0.9.3) | > 完整逐小版本说明见 [CHANGELOG](dsh-mneme/CHANGELOG.md)。 @@ -272,7 +273,7 @@ dsh-mneme-serve # 默认 ~/.dsh/memory + 127.0.0.1:8790 ```bash cd dsh-mneme && npm install -npm test # 2230 个测试 +npm test # 2257 个测试 npm run stress # 三轴线压测 npm run sync # src → lib 同步 ``` @@ -321,6 +322,7 @@ dsh-mneme 的机制设计与下列公开研究相互印证(以下引用均逐 | 2026-10-18 | **v0.9.1** | **M.O. goes from “visible” to “accounted for”** — workflows are more than a diagram now: `/mo-run start ` and `/mo-run stop` let a person draw the execution window, and a run is journaled to `/.mneme/pipelines/.runs.jsonl`. Attribution only produces candidates (exact single-command attribution measured at 14.2%, so “no idea” is a legitimate answer); P1 reports the business actions seen, P2 writes the ledger only after a human confirms, and P3 puts “the human said it ran” against “the observation never saw it” for the human to settle. **The machine never concludes for you.** | | 2026-10-18 | **v0.9.1** | **Persona page v1.2** (beta, off by default) — one card becomes per-agent cards: the setting is `{default, byAgent}`, a v1 single object reads as `default` with zero migration, and injection resolves the card by session identity, falling back to `default`. | | 2026-10-19 | **v0.9.2** | **Making silent failures visible** — most of what this release fixes isn't a missing feature, it's something broken that never said so. Feature flags have always taken effect at startup, so a lit "changed" badge only meant the value reached the database; there's now a third state, **pending restart** ([#481](https://github.com/slow-stack/mneme/pull/481)). The default `dreamMaxTokens` was sent verbatim as `max_tokens` and blew past provider caps: **180 consolidations, 0 successes** over eight days — the panel can now edit it, and an over-cap request retries once at the limit the provider itself declares ([#478](https://github.com/slow-stack/mneme/issues/478)). Rows written by auto-distillation got no vector at all; the "deferred to commit" the comment promised never existed ([#477](https://github.com/slow-stack/mneme/pull/477)). And the CLI treated values starting with `--` as new flags — a defect that only surfaces when a random token happens to begin with `-` (about 1/4096), which is why it hid for a whole release cycle. Also new: a **scope-level reversible gate** ([#471](https://github.com/slow-stack/mneme/issues/471), off by default) that pauses one scope without editing config or restarting. | +| 2026-10-20 | **v0.9.3** | **M.O. goes from “diggable” to “actually summoned to dig”** — the distillation chain has been fully implemented since v0.9.1 (multi-frame zstd → repeated sequences → absence contrast → draft workflows), yet it had **no call site at runtime**: every reference in the repo lived in tests. The machine could dig, but nothing ever called it. What was missing was never the algorithm — it was **attribution** and **triggering**. This release wires up three things: resolving a project's session bucket from the `cwd` in the session header (bucket names are a **lossy** transform of paths whose rule lives outside this repo; when the lookup fails the whole run is skipped rather than degraded into a global sweep — the latter attributes project A's actions to project B, and the result looks perfectly normal); a new `nudgeForProject` that folds “attribute → mine → persist” into one entry point; and a `turn/end` hook that runs per project with a 10-minute cooldown, a 4-second budget, deferred to a macrotask, one project at a time, errors only warned. **It produces proposals, never drafts** ([#489](https://github.com/slow-stack/mneme/pull/489)): promotion still needs a human, and the panel gained a "distill now" button on the same entry point, differing only in that it does not touch the repo. The same version fixes three “broken but silent” defects: the scope reverse-lookup that had been throwing and silently degrading on every call since v0.8.0, disabling canonical normalization and membership checks ([#487](https://github.com/slow-stack/mneme/issues/487)); `/nudge`'s write gate, which only intercepted `PUT`/`POST` so a token-bearing `PATCH`/`DELETE` persisted proposals silently, plus attribution resolution ignoring the budget and bucket names being truncated while being collected — reporting “did not look at everything” as “there is genuinely nothing”; and a multi-frame zstd counter-assertion bound to Node's whole-buffer decode semantics, expired from 24.22.0 ([#490](https://github.com/slow-stack/mneme/pull/490)). | > Headlines only; see the [CHANGELOG](dsh-mneme/CHANGELOG.md) for the full list. @@ -546,7 +548,7 @@ Community projects that wire mneme into more platforms — not part of this repo | **v0.6** | Session lifecycle: delete session ≠ delete memory | ✅ | | **v0.7** | Self-evolving memory: heat decay + sleep dual-protection + desktop workbench/feature toggles | ✅ | | **v0.8** | Scope isolation (agent/workspace stamping + retrieval weighting + opt-in hard filter) + conflict review queue + explicit attribution + ecosystem (stdio MCP server / graph recall axis / cold-start bootstrap / injection truncation & status bar / distill reliability / injection shaping & agent-driven organize / configuration reference & issue templates) | ✅ Released (up to v0.8.16) | -| **v0.9** | M.O. (Modus Operandi) beta: project-level workflows + candidate tiering & promotion criteria + panel list-and-graph view; settings panel re-folded at "beyond the newcomer" (#427); security & supply-chain hardening (declarative route auth, OSV gate, signed releases); **v0.9.1 adds the write side**: execution windows, run ledger, attribution candidates, observation sidecar with drift detection, step `assert`/`optional`, draft mining from session logs, persona page (per-agent cards); **v0.9.2 makes silent failures visible**: feature-flag third state "pending restart", scope-level reversible gate (#471), automatic max_tokens downgrade for consolidation (#478) | ✅ Released (v0.9.2) | +| **v0.9** | M.O. (Modus Operandi) beta: project-level workflows + candidate tiering & promotion criteria + panel list-and-graph view; settings panel re-folded at "beyond the newcomer" (#427); security & supply-chain hardening (declarative route auth, OSV gate, signed releases); **v0.9.1 adds the write side**: execution windows, run ledger, attribution candidates, observation sidecar with drift detection, step `assert`/`optional`, draft mining from session logs, persona page (per-agent cards); **v0.9.2 makes silent failures visible**: feature-flag third state "pending restart", scope-level reversible gate (#471), automatic max_tokens downgrade for consolidation (#478); **v0.9.3 wires up auto-distillation**: resolves the project bucket from the session header's `cwd`, hooks `turn/end`, 10-minute cooldown, 4-second budget, proposals only and never drafts (#489), and fixes the scope reverse-lookup that had been silently degrading since v0.8.0 (#487), the `/nudge` write gate missing `PATCH`/`DELETE`, and a multi-frame zstd counter-assertion bound to Node's whole-buffer decode semantics (#490) | ✅ Released (v0.9.3) | > Full per-minor-version changelog in [CHANGELOG](dsh-mneme/CHANGELOG.md). @@ -554,7 +556,7 @@ Community projects that wire mneme into more platforms — not part of this repo ```bash cd dsh-mneme && npm install -npm test # 2230 tests +npm test # 2257 tests npm run stress # three-axis stress test npm run sync # src → lib sync ``` diff --git a/dsh-mneme/CHANGELOG.md b/dsh-mneme/CHANGELOG.md index 4d48855..2719dcc 100644 --- a/dsh-mneme/CHANGELOG.md +++ b/dsh-mneme/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [0.9.3] - 2026-10-20 + ## 🆕 新增 - **沉淀链接线:把「会自动沉淀工作流」从一句话变成一条能跑的路(`actionNudgeEnabled`,beta,默认关)**:`src/pipeline-nudge.js` 从 v0.9.1 起就完整实现了「多帧 zstd → 重复序列 → 缺席对照 → draft 草稿」,可它在运行时**没有任何调用点**——全仓引用只出现在 `test/pipeline-nudge.test.js` 里,也就是说机器挖得出来、却永远不会被叫去挖。缺的从来不是算法,是**归属**与**触发**:`nudgeFromSessions` 要的是一个项目的会话桶目录,而桶名是路径的**有损**变形(规则不在本仓),唯一可信来源是会话头里的 `cwd`。这一版把三处接上:①`resolveProjectSessionDir` 用 `cwd` 反查桶,查不到就**整跑跳过**(`skipped:true`)而不是降级成全局普查——后者会把 A 项目的动作算到 B 头上,而结果看起来完全正常;②新增 `nudgeForProject` 把「归属 → 挖掘 → 落盘」收成一个入口,调用方没有机会漏掉归属解析;③新增 `src/pipeline-nudge-auto.js` 挂在 `turn/end` 上按项目跑,冷却 10 分钟(**观测新鲜度**参数,不是性能参数)、单次预算 4 秒、延到 `setTimeout(0)` 的宏任务里跑(解压会话日志是同步 I/O,压在回合收尾那一帧上等于让每轮都卡一下)、一次只跑一个项目、抛错只 `warn` 不冒泡(`session/event` 那条链上还挂着摘要与续期)。**它只产提议,不产草稿**:自动跑恒 `materialize:false`,落进 `/proposals/<项目键>/`;升格仍然要人批,`boundaries` 里那句 `autoActivate:false` 与跳过分支共用同一个常量(`NUDGE_BOUNDARIES`)——两条出口说两句不同的话,读的人就会以为其中一条忘了做。旗标与看图(`actionPipelineEnabled`)、记账(`actionRunEnabled`)**三件互相独立**,开任何一个都不会顺带打开另一个;它进 `LIGHT_MODE_OFF`,是三个 M.O. 键里最重的一个。 @@ -17,6 +19,12 @@ ## 🐛 修复 - **术语漂移:整个 M.O. 的「手法」改回「工作流」**:M.O.(Modus Operandi)从 v0.9.0 起在正文里一直写作「手法」,而它与同一个功能在其余位置的叫法(`工作流`、`workflow`、`pipelines`)并不是同一个词——一个功能两个名字,读者得先猜它们是不是一回事。改法覆盖 `src/` 24 处、面板 3 处、文档 11 处,**已发版的 CHANGELOG 条目与测试里作为夹具主题词的「手法」不改**(历史不追溯,夹具词锁的是路线图插入逻辑、不是产品术语)。`git grep 手法 -- src` 现为零命中。 +- **作用域反查自 v0.8.0 起每次都抛错走降级,canonical 归一与成员校验静默失效(#487)**:`scope.js` 曾裸读 `ctx?.workspaceRegistry`,而 `workspaceRegistry` 不在 `inject` 声明里(`index.js:45`)。cordis 4 的 `ctx` 是 Proxy,**裸读未注入属性会抛 `cannot get property ... without inject`,而不是返回 `undefined`**——于是 registry 反查自 v0.8.0 起必然抛错走降级:canonical path 归一与成员资格校验静默失效,`workspace_scope` 只剩会话原始 cwd。改为与 `webServer` 同一形状的免 inject 读取(`api.js:205` / `index.js:583`):有 `ctx.reflect.get` 时走它,旧宿主的普通对象才裸读;**不加进 `inject`**——`index.js:39-44` 记着 v0.7.23 移出 `inject` 想支持 headless,结果 apply 阶段宿主未就绪直接崩。服务缺失(headless / 旧宿主 / 未激活)是合法状态,静默按「未提供」处理、不告警;真故障(`list()` 抛错)仍 `warnOnce` 一次并降级 `header.cwd`。回归锁用「读未声明属性即抛」的 Proxy 复刻真实宿主形状——既有三处 registry 测试都用普通对象伪造 ctx,而普通对象裸读不抛错,所以这条路径此前在测试里看着是通的。 +- **`/nudge` 的三处「没看全」被报成「确实没有」(#489 评审)**:① **写盘口**——方法分流只拦 `PUT`/`POST`,其余直落 `run(null)`,而 `persistProposals` 按「不是 `GET`/`HEAD` 就算写」算,于是带 token 的 `PATCH`/`DELETE` 会走进写入分支、把提议落进 `memoryDir`:一个不需要 body 的静默写盘口,与这个端点「`GET` 只预览、写动作一律要 `POST`」的卖点正好相反;改为入口白名单(`GET, HEAD, POST, PUT`),其余 405 + `Allow` 头,在 `readBody` 之前拦,测试同时锁状态码、`Allow` 头与「`memoryDir` 下一个文件都不许出现」(只看状态码会漏掉「先写再报错」)。② **预算外路径**——归属解析最多同步扫 500 个桶 × 3 个文件,原先完全不看 `budgetMs`,于是「真卡就调 `budgetMs`」这句话对这一段是空话;现在桶循环与文件循环里各查一次 `deadline`,超时回新 `reason: budget-exceeded`,在 `/nudge` 上按环境问题报 503(扫描没跑完不是「这个项目很干净」的答案),`nudgeForProject` 自己按同一条截止线转交,避免「解析用 A 截止、挖掘用 B 截止」的双预算。③ **截断谎报**——收集桶名时边收边截:数到 `maxBuckets` 就 `break`、之后才 `sort()`,于是留下哪 500 个由文件系统遍历顺序决定;目标项目的桶一旦落在被截掉的那部分,函数返回 `no-bucket`,而 `no-bucket` 的语义是「扫完了,确实没有」,一次截断就此被报成「这个项目没跑过会话」;改为先收全、排序、最后截断,新增 `reason: bucket-limit` 与 `bucketsTotal` / `bucketsTruncated` 两个读数。另修正 `config.js` 里「30 分钟/项目」的注释(实际 `NUDGE_AUTO_MIN_INTERVAL_MS` 是 10 分钟)。**一处如实说明**:把 `sort()` 去掉(先截断)这个变异**没有被测试咬住**——测试用临时目录的 `readdirSync` 顺序恰好是字母序,两种写法结果相同;要真正覆盖得有能控制 `readdir` 顺序的注入点,记为已知覆盖缺口,不假装它被锁住了。 + +## 内部与测试 + +- **多帧 zstd 的反证断言绑了 Node 的整块解语义,legacy 腿下一次 runner 升级就红(#490)**:`session-usage.test.js` 原反证断言 `zstdDecompressSync(buf)` 只能拿到第一帧,依赖的是「整块解只吐第一帧」这一 Node 旧行为;**24.22.0 起解码跨 chunk 边界也能解出所有帧**(nodejs/node#65865),断言在 `test-host-legacy`(装 latest 24.x)上过期——同一分支上 24.22.0 两条 legacy 腿全红、main 上 24.21.0 全绿,也就是说 main 那次「全绿」并不证明这个版本问题已经消失,runner 下次升到 24.22.0 就会红。改成数 zstd magic 帧头,既与产品代码 `forEachFrame` 的切帧判据同源、又不绑定解码器语义;第二行断言用 `stat.frames + stat.failed`——「帧头数 = 成功数 + 失败数」是实现契约,而「帧头数 = 成功数」只在 `failed` 恒为 0 时成立,是巧合不是规矩。**已知局限写进注释**:这条锁的是「切帧判据仍是 magic」,不是碰撞免疫——payload 里撞上 magic 时计数器与解码器会一起错(半片也解得出来),实测 `frames` 同样变成 4,这条测不出来。 ## [0.9.2] - 2026-10-19 diff --git a/dsh-mneme/README.md b/dsh-mneme/README.md index ee49ac7..da00eca 100644 --- a/dsh-mneme/README.md +++ b/dsh-mneme/README.md @@ -5,7 +5,7 @@ [![npm version](https://img.shields.io/npm/v/@modusensus/dsh-mneme?color=blue&label=npm)](https://www.npmjs.com/package/@modusensus/dsh-mneme) [![license](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Awesome](https://awesome-dsh-plugin.com/badge.svg)](https://github.com/awesome-dsh-plugin/awesome-dsh-plugin) -[![tests](https://img.shields.io/badge/tests-2230%20passed-success)](https://github.com/slow-stack/mneme) +[![tests](https://img.shields.io/badge/tests-2257%20passed-success)](https://github.com/slow-stack/mneme) [![CI](https://img.shields.io/github/actions/workflow/status/slow-stack/mneme/ci.yml)](https://github.com/slow-stack/mneme/actions) [![node](https://img.shields.io/badge/node-22%2B-blue)](https://nodejs.org) [![npm downloads](https://img.shields.io/npm/d18m/@modusensus/dsh-mneme.svg?color=blue&label=downloads)](https://www.npmjs.com/package/@modusensus/dsh-mneme) @@ -274,6 +274,7 @@ v0.3.0 起新增**记忆基因**层:从记忆里抽取**命名实体**、**带 | **v0.9.0**(2026-10-17) | M.O.(Modus Operandi)beta:工作流本体住 `<项目>/.mneme/pipelines/`、候选分层与升格判据、面板清单与图同屏(`actionPipelineEnabled` 默认关);设置面板折叠线挪到「新手之外」并按人话重写 22 个条目名(#427);安全与供应链加固(39 条路由声明式鉴权、OSV 有漏洞即失败、发布带 provenance) | | **v0.9.1**(2026-10-18) | M.O. 从「看得见」跑到「跑得出账」:执行窗口由 `/mo-run start` / `/mo-run stop` 显式划开、运行账落 `<项目>/.mneme/pipelines/.runs.jsonl`(账本坏了与从没跑过严格分开)、归属只出候选、观察旁挂与脱节检出、步骤 `assert` / `optional`、R1/R2 提议;沉淀链从真实会话日志挖 draft 工作流(判据恒 `null`,答案只能由人补);人格定义页 v1 → v1.2(按 agent 寻址多卡,默认关);面板、向量与检查更新的一圈修复(#448 / #450 / #460);Release 正文改分层渲染 | | **v0.9.2**(2026-10-19) | 让「看不见的失败」显形:功能开关的第三态「待重启」把「面板显示已改 ≠ 运行时已改」摆到界面上(#481);作用域级可逆闸门让一路记忆能被单独按下与松开、不必改配置重启(#471,默认关);巩固用的 `dreamMaxTokens` 默认值撞服务商上限、八天 180 次全失败,面板现在能改、超上限还会自动降级重试(#478);CLI 把 `--` 开头的值当新旗标的真实缺陷(一次 1/4096 概率的 CI 红揪出来的)、人格卡删除 × 永远不可见、自动蒸馏写入的行 100% 拿不到向量(#477) | +| **v0.9.3**(2026-10-20) | M.O. 从「挖得出来」到「会被叫去挖」:沉淀链算法自 v0.9.1 起就完整实现(多帧 zstd → 重复序列 → 缺席对照 → draft 草稿),运行时却没有任何调用点——机器挖得出来、却永远不会被叫去挖。这一版把归属与触发接上:按会话头 `cwd` 反查项目桶(桶名是路径的有损变形,查不到整跑跳过而不是降级成全局普查)、挂 `turn/end`、冷却 10 分钟、单次预算 4 秒、延到宏任务、一次一个项目、抛错只 `warn`,**只产提议不产草稿**(`actionNudgeEnabled`,beta,默认关);面板加「现在沉淀一次」,与自动跑同一条入口,区别只有它不改仓库;另修作用域反查自 v0.8.0 起每次都抛错走降级(#487)、`/nudge` 三处「没看全」被报成「确实没有」(#489 评审)、多帧 zstd 反证断言绑了 Node 整块解语义(#490),并把整个 M.O. 的「手法」改回「工作流」 | | **v0.8.x** | 作用域隔离(agent / workspace 双维 + opt-in 硬过滤)、冲突队列人工裁决、生态化(stdio MCP server / 图召回轴 / 冷启动 / 注入截断) | ## 📦 安装 @@ -675,7 +676,7 @@ src/ ├── api.js # HTTP 路由(Web 面板数据通道,含 /conflicts 冲突队列) └── index.js # 插件接线 lib/ # src 的同步分发产物(npm run sync,prepack 钩子在发布时自动跑;一致性由 scripts/check-sync.js 在 CI 与 release.yml 校验——它只查不同步;唯一手写例外 lib/client.js——Web 面板 bundle,sync 不覆盖) -test/ # 2230 个 node:test 测试(审计与三轴线压测不变量;src↔lib 一致性由 scripts/check-sync.js 发布闸门校验) +test/ # 2257 个 node:test 测试(审计与三轴线压测不变量;src↔lib 一致性由 scripts/check-sync.js 发布闸门校验) scripts/ # e2e-dsh.js 端到端演示 · stress-dsh.js 三轴线压测 · sync-lib.js 同步 · check-sync.js 发布闸门 · benchmark-recall.js / benchmark-embed.js / benchmark-rerank.js 基准 · sync-test-badge.mjs 测试徽章 · build-runtime-manifest.mjs 运行时清单 ``` @@ -684,7 +685,7 @@ scripts/ # e2e-dsh.js 端到端演示 · stress-dsh.js 三轴线压 ```bash cd dsh-mneme npm install # 安装 peer 依赖(以 devDependencies 形式,用于本地测试) -npm test # 运行 2230 个测试 +npm test # 运行 2257 个测试 npm run stress # 三轴线压测:长会话检索 / 冲突仲裁 / 多 Agent 并发(离线 mock LLM) npm run sync # 把 src/ 同步到 lib/(发布时由 prepack 钩子自动执行) ``` diff --git a/dsh-mneme/package-lock.json b/dsh-mneme/package-lock.json index 2eb4e1c..4f7d8ad 100644 --- a/dsh-mneme/package-lock.json +++ b/dsh-mneme/package-lock.json @@ -1,12 +1,12 @@ { "name": "@modusensus/dsh-mneme", - "version": "0.9.2", + "version": "0.9.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@modusensus/dsh-mneme", - "version": "0.9.2", + "version": "0.9.3", "license": "MIT", "dependencies": { "morphicons": "^1.7.1" diff --git a/dsh-mneme/package.json b/dsh-mneme/package.json index 1d99451..8cf72d4 100644 --- a/dsh-mneme/package.json +++ b/dsh-mneme/package.json @@ -1,7 +1,7 @@ { "name": "@modusensus/dsh-mneme", "description": "Cross-session memory plugin for DeepSeek Harness with autoDream consolidation: SQLite store, Markdown mirrors, 10 model tools, automatic injection, session summarization, user profile/rules, custom slash commands, vector (semantic) search, and a Web GUI panel", - "version": "0.9.2", + "version": "0.9.3", "license": "MIT", "repository": { "type": "git",