Skip to content

Commit 3a5fc29

Browse files
committed
merge origin/main into feat/275-capacity-warning
2 parents f990dab + 5f6266e commit 3a5fc29

16 files changed

Lines changed: 1468 additions & 193 deletions

‎AGENTS.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dsh-mneme 是 DSH 宿主的记忆插件(蒸馏 / 注入 / 检索 / 巩固 / sc
5959
| 绕行与候选 | `src/candidates.js`(+ `<memoryDir>/candidates/<项目键>/`) | M.O. 的出口与草稿层:绕行的分档判定(R0/R1 记账先走、R2/R3 停下问人 + 机械兜底清单 + 闸门保护)、候选的归并/归档/升格(进仓库要人批) |
6060
| 冷启动 | `src/bootstrap.js` | 从仓库文件反向构建初始记忆(POST /bootstrap) |
6161
| 配置 | `src/config.js`(schema + lightMode)、`src/settings.js`(feature flags 白名单) | 一切行为开关的家 |
62+
| 目录归属 | `dsh-mneme/docs/DIRECTORIES.md` | 「哪个目录是什么」总账:`~/.dsh/memory`(数据)/ `~/.dsh/mneme`(模型与运行时缓存)/ `~/.dsh-mneme`(CLI 配置)三根互不相干,谁拥有、删了会怎样(#278) |
6263
| API 面 | `src/api.js`(宿主内 /api/dsh-mneme/*)、`src/api-standalone.js`(Bearer 数据面)、`bin/dsh-mneme-mcp.mjs`(MCP stdio)、`src/serve.js` + `bin/dsh-mneme-serve.mjs`(独立服务 daemon,无 LLM 数据面) | 对外四张脸 |
6364
| 面板 | `lib/client.js` | 面板侧产物,无 src 对应物 |
6465
| 手机面板 | `src/dsh-go/**` + `package.json` 的 `dshGo` | dsh-go 原生面板:进程内派发同一批路由,只有宿主提供 `dshGo` 服务时才加载([docs/DSH-GO.md](dsh-mneme/docs/DSH-GO.md)) |

‎README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ dsh-mneme-serve # 默认 ~/.dsh/memory + 127.0.0.1:8790
241241
| stdio MCP server——Claude Code / Cursor 等任意 MCP 客户端接入记忆六件套 | [dsh-mneme/README.md · MCP Server](dsh-mneme/README.md#mcp-server任意-mcp-客户端接入) |
242242
| 独立服务 daemon(不开 DSH 常驻数据面) | [dsh-mneme/docs/DAEMON.md](dsh-mneme/docs/DAEMON.md) |
243243
| 配置说明(全键参考) | [dsh-mneme/docs/CONFIGURATION.md](dsh-mneme/docs/CONFIGURATION.md) |
244+
| 目录归属:哪个目录是什么(`~/.dsh/memory` ≠ `~/.dsh/mneme` ≠ `~/.dsh-mneme`) | [dsh-mneme/docs/DIRECTORIES.md](dsh-mneme/docs/DIRECTORIES.md) |
244245
| 蒸馏原文留存与记忆级溯源(#399) | [dsh-mneme/docs/DISTILL.md](dsh-mneme/docs/DISTILL.md) |
245246
| 记忆分享包:出包与收包(`dsh-mneme share` / `receive` / `undo-share`) | [dsh-mneme/docs/SHARE.md](dsh-mneme/docs/SHARE.md) |
246247
| 实体结构化设计 | [dsh-mneme/docs/ENTITIES.md](dsh-mneme/docs/ENTITIES.md) |
@@ -527,6 +528,7 @@ Community projects that wire mneme into more platforms — not part of this repo
527528
| stdio MCP server — plug the six memory tools into any MCP client (Claude Code / Cursor / …) | [dsh-mneme/README.md · MCP Server](dsh-mneme/README.md#mcp-server任意-mcp-客户端接入)(中文) |
528529
| Standalone daemon (serve memories without DSH) | [dsh-mneme/docs/DAEMON.md](dsh-mneme/docs/DAEMON.md)(中文) |
529530
| Configuration reference (all keys) | [dsh-mneme/docs/CONFIGURATION.md](dsh-mneme/docs/CONFIGURATION.md)(中文) |
531+
| Directory ownership: which directory is what (`~/.dsh/memory` ≠ `~/.dsh/mneme` ≠ `~/.dsh-mneme`) | [dsh-mneme/docs/DIRECTORIES.md](dsh-mneme/docs/DIRECTORIES.md)(中文) |
530532
| Distill record retention & memory-level provenance (#399) | [dsh-mneme/docs/DISTILL.md](dsh-mneme/docs/DISTILL.md)(中文) |
531533
| Memory share pack: export and import (`dsh-mneme share` / `receive` / `undo-share`) | [dsh-mneme/docs/SHARE.md](dsh-mneme/docs/SHARE.md)(中文) |
532534
| Entity structure design | [dsh-mneme/docs/ENTITIES.md](dsh-mneme/docs/ENTITIES.md) |

‎dsh-mneme/CHANGELOG.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- **面板「库体积」卡(`lib/client.js`)**:进「库内一览」组,大数字是磁盘足迹,行给活跃 / 归档(含占比)/ 可回收空闲页;过线的检查逐条列出并走 `--mneme-warn` 预警色(新增 `.mneme-statrow--warn` / `.mneme-statusnum--warn` 两层,`StatusCard` 加了 `numWarn` 与逐行 `warn` 两个可选参数,不传的卡渲染逐字节不变)。三种拿不到数据的情况(fetch 失败 / 老宿主没这个块 / 后端 unknown)全部 fail-closed 渲染「未知」。增速刻意不算:归档净增速率是 recall-stats `archive` 块的第五指标,同一个数字长两处就会分叉。
1212
- **键的三件套成对登记**:`settings.js` 白名单(两个 int 走 `FEATURE_FLAG_INT_RANGES`、占比浮点走 `FEATURE_FLAG_NUMBER_RANGES`)+ `api.js` 的 `NESTED_FLAG_PATHS` 三个点号键 + 计数锁 121 → 124。阈值改动是启动快照(与 `panel_mode` 同节奏),面板显示「待重启」。
1313
- **文档与验证**:`docs/CONFIGURATION.md` 新增「容量预警」一节、`docs/STORAGE.md` 补「容量预警(#275 空间维度)」节(含三道阈值的过线含义与读法边界)、README 键表补 `capacityWarning` 行(docs-config-keys 的全键闸与键名断言都要过)。`test/capacity-warning.test.js` 新增 9 条(行数口径、schema 边界、三道检查各自的过线与关闭、fail-safe、`/health` 挂载与不泄露路径、没接线时显式 null);`test/client.test.js` 新增面板卡形状锁(fail-closed 表达式、warn class、i18n 双语键各出现两次);`test/api.test.js` 往返测试补三个点号键。全量 3164 用例 / 3163 通过 / 0 失败 / 1 跳过;check-sync 通过。
14+
- **目录归属文档(#278 第 3 子项)**:新增 [docs/DIRECTORIES.md](docs/DIRECTORIES.md),把散在注释里的「哪个目录是什么」收成一处总账。开篇钉死三个相似名:`~/.dsh/memory` 是记忆库(SQLite 正本 + 镜像 md + 候选 / 提议 / 观察 / 日记 / 文档目录),`~/.dsh/mneme` 是模型与运行时缓存(**不是记忆库**,可整目录删掉重来),`~/.dsh-mneme` 是 CLI 连接配置——把模型缓存当成记忆库是这个项目真实踩过的坑。每个落点标了拥有者(人改 / 机器写 / 外部只读)与出处文件,另附「删了会怎样」速查、七张路径配置键的展开规则差异(`memoryDir` 一族做 `~` 展开、模型 / 运行时一族不做)、与已知坑(`documents.md` ≠ `documents/`、镜像手改窗口、两个 CLI 的默认落点各站一边)。README 中英文档表与 AGENTS.md 模块地图同步加了索引行。#278 的另两个子项(`~/.dsh` 迁出、统一导出)是大活,按 issue 建议拆批另行落地。
1415

1516
- **会话头顶那个日记入口撤了;「写今天 / 存到这个项目」补进面板**。两处入口同时存在时,用户点哪一个都像「又开了一本」,而右栏那套是旧版遗留下来的:会话头一个按钮 → 右栏页签 → 里面才是写与导出。现在只留一个入口:记忆面板的「日记」标签页。
1617

@@ -110,6 +111,10 @@
110111
- **下架期间设置只能走配置文件**:面板上没有入口,`actionPipelineEnabled` 等仍可从 `config.yml` / `feature_flags` 改。`docs/CONFIGURATION.md` 在三个键后加了引用块说明。
111112
- 线上库已先行关旗标(`actionPipelineEnabled` / `actionRunEnabled` / `actionNudgeEnabled` 全 false,`diaryEnabled` 保持 true),写入前 50 键 JSON 备份留档;`actionRunEnabled` 原本不在 kv,本次显式写入 false,故键数 50→51。
112113

114+
## 🐛 修复
115+
116+
- **高峰时段串里的全角等价符号不再让错峰闸门静默失效(#424)**。中文输入法下写 `summarizePeakHours` / `dreamPeakHours`,逗号、冒号、数字常被输入法带成全角(`00:00-03:00,04:00-06:00`)——而 `parsePeakSpec` 只认半角,整串解析成 null,null 的语义是「未配置 = 不限制」,于是巩固/蒸馏静默回到全天候,没有任何提示(用户报的正是「明明写了高峰时段却在高峰期巩固」)。现在解析前先做等价归一:U+FF01–FF5E 折回 ASCII(恒差 0xFEE0,覆盖全角逗号/冒号/数字/连字符/字母,星期前缀一起受益),其中全角~不走折叠(折回是 `~`,而半角 `~` 是契约里故意非法的写法)、与〜(U+301C)一样直接映成 `-`。只做等价映射、不救错:`24:00` 越界这类值写错的串仍按非法处理(跨零点的正写是 `04:00-00:00`),合法写法的解析结果逐字节不变。`test/summarize.test.js` 新增 1 例锁「归一后照常解析 + 越界不放宽」两面。
117+
113118
## [0.12.0] - 2026-11-07
114119

115120
## 🆕 新增

‎dsh-mneme/docs/CONFIGURATION.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
那里还会单独列出「白名单登记了、但 schema 没给默认值」的键——这类键在面板上有输入框,
1919
留空时却不会进「当前生效值」。
2020

21+
路径键改完落点,见 [DIRECTORIES.md](DIRECTORIES.md)(注意各路径键的 `~` 展开规则不一致)。
22+
2123
## 全局与存储
2224

2325
| 键 | 默认 | 作用 | 开启后果 / 冲突 |
@@ -126,7 +128,7 @@
126128
| `summarizeMinWindowChars` | `0` | 窗口可蒸馏文本下限(字符),不足直接跳过 LLM(#239) | 被挡窗口照常消费游标并留 skip 审计 |
127129
| `summarizeMaxRunsPerSession` | `0` | 每会话蒸馏次数预算,只计真实发起的调用(≤1000) | 0 = 不限;进程内计数,重启清零 |
128130
| `summarizeParseFailureMaxRetries` | `0` | 连续解析失败几次后放弃当前窗口(0–10,0 = 关,#493) | 达到阈值强制消费游标跳过该窗口;失败行 metadata 恒带 `raw_head`/`raw_has_bracket`/`streak` |
129-
| `summarizePeakHours` | `""` | 高峰时段串(`"09:00-18:00"` / `"mon-fri 08:00-12:00,14:00-18:00"`,支持跨零点) | 命中高峰不调 LLM、顺延补跑;任一写法非法整串按未配置处理 |
131+
| `summarizePeakHours` | `""` | 高峰时段串(`"09:00-18:00"` / `"mon-fri 08:00-12:00,14:00-18:00"`,支持跨零点;全角逗号/冒号/数字自动归一,#424) | 命中高峰不调 LLM、顺延补跑;任一写法非法整串按未配置处理 |
130132
| `summarizePeakMaxDeferMinutes` | `120` | 高峰顺延上限(分钟,≤1440) | 0 = 不设上限;到点仍处高峰照跑(bypassPeak) |
131133
| `summarizeDedupeMode` | `off` | 落库前去重档位:`off` / `title`(拦完全同名)/ `vector`(同会话语义近邻) | `vector` 复用已有 embedding 列,无 LLM 调用 |
132134
| `summarizeDedupeMinSim` | `0.92` | `vector` 档并入阈值(0.5–0.99) | 仅 `vector` 档生效 |
@@ -191,7 +193,7 @@
191193
| `dreamDelayMs` | `2000` | 触发后的延迟(毫秒) | — |
192194
| `dreamMinIntervalMinutes` | `0` | 两次开跑最小间隔(分钟,≤10080,#89) | 失败/degraded run 也占用;0 = 不限 |
193195
| `autoDreamFailureBackoff` | `false` | 连续失败指数退避:有效间隔 = 基数 × 2^连败,封顶 30 分钟(#292) | opt-in;基数取 `dreamMinIntervalMinutes`(0 = 无闸可翻倍);成功一次清零;重启归零 |
194-
| `dreamPeakHours` | `""` | 巩固错峰,与 `summarizePeakHours` 同一份时段语法(#239) | 命中高峰不做梦、阈值继续累积、留 skip 审计;非法写法按未配置 |
196+
| `dreamPeakHours` | `""` | 巩固错峰,与 `summarizePeakHours` 同一份时段语法(#239,全角等价符号同样归一) | 命中高峰不做梦、阈值继续累积、留 skip 审计;非法写法按未配置 |
195197
| `dreamPeakMaxDeferMinutes` | `120` | 巩固顺延上限(分钟) | 0 = 不设上限;到点仍处高峰照跑 |
196198
| `dreamProvider` / `dreamModel` | 空 | 巩固专用路由(settings「巩固模型」) | 建议非思考模型——思考模型易烧光预算返回空体(#135) |
197199
| `dreamMaxTokens` | `131072` | 巩固输出预算(256–131072) | 流式计费按实际用量,调大不增加成本;**调小则相反**——撞顶 → 无完整 JSON → 整轮失败 → baseline 不刷新 → 同输入重跑(#135 实测 cap=16384 净成本 +54%) |

0 commit comments

Comments
 (0)