**版本**:dsh-mneme 0.12.0(DSH desktop profile,Windows) **库规模**:全库 4,618 条(活跃 349 / 归档 4,268),`memory.db` ≈ 500 MB **相关配置**:`autoDream=true`、`dreamThresholdCount=10`、`dreamThresholdChars=5000`、`dreamPeakHours` 未设 ## 现象 1. **2026-10-27T08:15Z 之后 autoDream 停摆 13 天**(0 轮),面板「最近巩固」停在 10-27,总览(`dream_summarize`)一起冻结在 11-02。 2. 同期 `sleep` 轮正常(每 8–24 小时一轮成功),因此可排除模型通道与插件整体故障。 3. 2026-11-09 手工把基线清空后当天恢复、连跑 6 轮(07:45 → 12:09),**随后再次停摆,至今 22 小时 0 轮**。 ## 根因 阈值基线**只在成功轮向前刷新,归档/删除/合并不会把它拉回来**: - `lib/dream.js:998` — `overBase = count >= baseline.count + thresholdCount || chars >= baseline.chars + thresholdChars` - `lib/dream.js:1076-1091`、`1197-1204` — 只有 `result.ok` 才刷新基线(写 `dream_runs.store_count/store_chars`) - `lib/store.js:2873 lastDreamBaseline()` — 只读 `run_type='auto'` 且两列非空的最近一行 - `lib/dream.js:66 activeStoreSize()` — 口径是 `archived=0` 且 `type ∉ {summary, document}` 于是**活跃量一旦被归档压到基线以下,`overBase` 恒为假,从此再也不会巩固**。又因为这是「静默跳过」(`dream.js:1008` 注释:没有调用发生,也就没有可审计的对象),面板上只能看到「最近巩固:很久以前」,用户无法分辨「没跑」还是「跑了没效果」。 实测两次停摆: | 停摆 | 末轮基线 | 归档后活跃 | 放行门槛 | 结果 | |---|---|---|---|---| | 10-27 → 11-09(13 天) | 1,475 条 / 299,392 字符 | 798 条 / 261,893 字符 | ≥1,485 条 或 ≥304,392 字符 | 永不触发 | | 11-09 12:09 → 至今(22 h) | 585 条 / 232,636 字符 | 349 条 / 183,535 字符 | ≥595 条 或 ≥237,636 字符 | 永不触发 | 一句话:**归档是对巩固的负增长,而阈值永远拿归档前的峰值当起点,越整理越不可能触发。** ## 复现 1. 让活跃量超过阈值跑成一轮(基线 = 该轮结束时的 `activeStoreSize()`)。 2. 归档足够多记忆,使 `活跃条数 < 基线+10` 且 `活跃字符 < 基线+5000`。 3. 之后任意写入都不再触发巩固;`dream_runs` 与 `llm_audit_logs` 均无新行,也没有任何 skip 记录。 ## 期望 归档后巩固仍能在活跃量重新增长时被触发;或者至少在「阈值不满足导致不触发」时对用户可见。 ## 建议(按优先级) 1. **归档/删除时把基线夹回**:在 `setArchived`/`delete` 路径维护 `baseline = min(baseline, activeStoreSize())`,或在 `maybeSchedule` 里以 `min(baseline, 当前活跃)` 参与比较。最小改动、可根除。 2. **让静默跳过可观测**:阈值不满足而不触发时,低频(如 24h 一次)写一条审计,记录当前 count/chars 与门槛。 3. **面板补一行状态**:「当前活跃 X 条 / 门槛 Y 条」,而不是只显示上次运行时间。 4. **提供手动「立即巩固」入口**(走 `service.enqueue` 串行)。目前 `runDream` 全仓只有调度器一个调用点,排障时无路可走。 5. **阈值改成净增长口径**:`净增 = 现活跃 − 上次巩固后活跃 − 期间归档/删除数`。 ## 附(独立问题,不在本 issue 范围) 同一台机器上还遇到两个向量侧问题,均已自行规避,仅作线索:填 chat 模型时 `/embeddings` 返回 404 但面板仍只显示「已索引 0 条」(`client.js:4958` 只读 `data.indexed`,丢了后端 `error`);`embedding.js:68` 只发 `{model, input}`,对需要 `input_type` 的非对称模型(`nvidia/nemotron-3.5-embed-*`)必然 400。
Activity
fix(dream): 基线夹回——归档压破阈值基线后 autoDream 不再永久静默停摆