dsh-lite-memory 0.3.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -17
- package/TRIGGERS.md +18 -14
- package/anchor.js +518 -0
- package/bench/bench.mjs +145 -0
- package/bench/evolution.mjs +123 -0
- package/client.js +1519 -33
- package/docs/BENCH.md +74 -0
- package/docs/RELEASE-0.11.0.md +27 -0
- package/docs/RELEASE-0.11.1.md +11 -0
- package/docs/RELEASE-0.12.0.md +15 -0
- package/docs/RELEASE-0.12.1.md +17 -0
- package/docs/RELEASE-0.12.2.md +17 -0
- package/docs/RELEASE-0.13.0.md +7 -0
- package/docs/RELEASE-0.14.0.md +7 -0
- package/docs/RELEASE-0.15.0.md +8 -0
- package/index.js +2080 -76
- package/learning.js +585 -0
- package/package.json +10 -2
- package/state.js +1476 -0
- package/store.js +2967 -244
- package/test/anchor.test.mjs +436 -0
- package/test/client.test.mjs +114 -0
- package/test/contract.test.mjs +880 -0
- package/test/control.test.mjs +278 -0
- package/test/crossing.test.mjs +372 -0
- package/test/evolution-read.test.mjs +448 -0
- package/test/fixtures/legacy-v1/archive/mem_444444444444.json +18 -0
- package/test/fixtures/legacy-v1/entries/mem_111111111111.md +2 -0
- package/test/fixtures/legacy-v1/entries/mem_222222222222.md +1 -0
- package/test/fixtures/legacy-v1/entries/mem_333333333333.md +1 -0
- package/test/fixtures/legacy-v1/index.json +63 -0
- package/test/learning.test.mjs +772 -0
- package/test/lexical.test.mjs +33 -0
- package/test/recall.test.mjs +449 -0
- package/test/scenario.test.mjs +184 -0
- package/test/state.test.mjs +485 -0
- package/test/store.test.mjs +816 -115
- package/test/view.test.mjs +257 -0
- package/view.js +616 -0
package/docs/BENCH.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# 证据 / Evidence
|
|
2
|
+
|
|
3
|
+
本地、可重跑。测试命令与数字都来自这台机器,不是估算。
|
|
4
|
+
|
|
5
|
+
## 跑法
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm test # 存储、状态、投影、召回、跨层、客户端投影、接口契约
|
|
9
|
+
npm run bench # 固定数据集上的准备时延与长期序列
|
|
10
|
+
npm run bench:evolution # 实验规则/样例/检查点/回执的存储与投影成本
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 本轮门禁(U01–U06)
|
|
14
|
+
|
|
15
|
+
| 编号 | 场景 | 现状 | 证据 |
|
|
16
|
+
| --- | --- | --- | --- |
|
|
17
|
+
| U01 | 两轮读同一 ID,组件折叠/重挂载 | 引用按每轮自己的工具结果重建,不读全局面板状态 | `client.test.mjs`:`citationsOfTurn` 只从节点取;同一轮去重 |
|
|
18
|
+
| U02 | PTC 子结果与普通结果 | 子调用与主结果同一套元数据解析;canonical 值不带维护字段 | `client.test.mjs` 子调用断言;`contract.test.mjs` 元数据键集合 |
|
|
19
|
+
| U03 | 旧行、noop、needs_resolution | 没有元数据只读;`changed !== true` 不出现撤销;旧版本撤销返回 409 | `client.test.mjs`;`contract.test.mjs` 过期撤销 |
|
|
20
|
+
| U04 | keep/undo 网络失败后重试 | keep 的 `operationId` 存在组件 ref 里,重试复用;undo 按 id + 版本重试 | 代码路径;未做真实断网点击 |
|
|
21
|
+
| U05 | 收起/切轮后旧正文迟到 | 每次请求带代次,切换、收起、卸载都作废旧响应 | 代码路径;未做真实页面点击 |
|
|
22
|
+
| U06 | 引用已更新/删除/移动 | 正文按 id 现查当前层:版本、标题、归档状态现取;找不到显示已删除 | `contract.test.mjs`(当前版本、`scopeLabel`、`gone`);`memory_read` 归档可读已实测 |
|
|
23
|
+
|
|
24
|
+
真实页面点击需要已登录的 Web 视图;本次环境拿不到该视图的登录态,所以 U04/U05 只到代码路径与逻辑单测,没有冒充成页面验收。
|
|
25
|
+
|
|
26
|
+
## 固定数据集性能
|
|
27
|
+
|
|
28
|
+
2026-10-25,macOS arm64,Node v24.16.0,本地 SSD。数据:项目 200 条 + 全局 200 条,全部带标题、摘要、`when`、正文。
|
|
29
|
+
|
|
30
|
+
| 指标 | 数值 |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| 准备时延 P50 | 16.3 ms |
|
|
33
|
+
| 准备时延 P95 | 22.2 ms |
|
|
34
|
+
| 冷启动首次准备 | 23.4 ms |
|
|
35
|
+
| 最慢一次 | 43.8 ms |
|
|
36
|
+
| 每次准备上下文 | 402 B |
|
|
37
|
+
| 每次准备文件读取 | 0 |
|
|
38
|
+
| 120 次运行总字节 | 48 KB |
|
|
39
|
+
|
|
40
|
+
本地目标(热准备 P95 ≤ 30 ms、deadline 150 ms)达标。模型 provider 在准备阶段无 I/O、无网络。
|
|
41
|
+
|
|
42
|
+
## 长期序列
|
|
43
|
+
|
|
44
|
+
150 轮保存 / 读取 / 检索 / 遗忘交错后:
|
|
45
|
+
|
|
46
|
+
| 指标 | 数值 |
|
|
47
|
+
| --- | --- |
|
|
48
|
+
| 项目活跃条目 | 350 |
|
|
49
|
+
| 全局活跃条目 | 200 |
|
|
50
|
+
| `state.json` | 338 KB(上限 2 MiB) |
|
|
51
|
+
| 层内文件 | `state.json`、`state.prev.json` 两个,不随轮数增长 |
|
|
52
|
+
| RSS | 90.2 MB → 165.3 MB(含进程内缓存与测试数据) |
|
|
53
|
+
| 序列耗时 | 5.2 s |
|
|
54
|
+
|
|
55
|
+
## 实验整理成本(0.11.0)
|
|
56
|
+
|
|
57
|
+
固定 32 条实验规则、64 条回执,全部带 4 个样例、3 个检查点、3 条来源。macOS arm64,Node v24.16.0,本地 SSD:
|
|
58
|
+
|
|
59
|
+
| 指标 | 数值 |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| 规则数 / 整理输入规则数 | 32 / 6 |
|
|
62
|
+
| 整理输入字节 | 2,719 B(上限 8,192 B) |
|
|
63
|
+
| `state.json` | 123 KB(上限 256 KiB) |
|
|
64
|
+
| 样例 / 检查点 / 来源深度 | 4 / 3 / 3 |
|
|
65
|
+
| 效果回执窗口 | 64(已知 usage 16 次) |
|
|
66
|
+
| 单条 `memory_read` 投影 | 256 B |
|
|
67
|
+
| 冷启动快照 | 1.9 ms |
|
|
68
|
+
| 热快照 P50 / P95 | 1.1 / 1.3 ms |
|
|
69
|
+
|
|
70
|
+
`npm run bench:evolution` 会在达到任一上限时以非零码退出,可当门禁用。
|
|
71
|
+
|
|
72
|
+
## 效果评测
|
|
73
|
+
|
|
74
|
+
§17.4 的 2×2 防污染实验要跑真实模型、固定评分,不在 CI 里,也没有预填改善百分比。`test/scenario.test.mjs` 与 `bench/evolution.mjs` 只证明场景边界、读取条件和成本上限;不声称模型更聪明。GitHub 上的功能主张只对应这些确定性测试和本地性能数字,模型侧效果等实跑后再写。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 0.11.0 · 项目自进化〔实验〕
|
|
2
|
+
|
|
3
|
+
这是一版实验功能,默认关闭。它不改变普通记忆的写入、检索和引用条。
|
|
4
|
+
|
|
5
|
+
## 能用什么
|
|
6
|
+
|
|
7
|
+
- 在会话头打开「项目自进化〔实验〕」,只对当前项目生效。
|
|
8
|
+
- 纠正会整理成少量带适用范围的项目规范;明确说「以后都这样」才直接生效,否则先试用。
|
|
9
|
+
- 认可作品只给已有规范附一条样例(版本 + 维度,未验证);执行漏掉只补一条检查点,不会变成同义禁令。
|
|
10
|
+
- 「再做一期」在唯一可信的延续关系下读取当前正文;没有锚点先给不超过三个栏目。
|
|
11
|
+
- 面板显示试用/生效、来源、最近变更、检查点与样例数,可撤回、固定、暂停、恢复、删除。
|
|
12
|
+
- 关闭后停止学习、读取和晚到写入;已固定为普通项目规范的内容继续生效。
|
|
13
|
+
|
|
14
|
+
## 边界
|
|
15
|
+
|
|
16
|
+
- 一次整理最多 2 处改动、768 输出 token、15 秒,输入 ≤ 8 KiB;同一作品 ≤ 2 次,同一项目 24 小时 ≤ 6 次。
|
|
17
|
+
- 规则 32、待定 12、每规则样例 4/检查点 3/来源 3/旧版本 2;到顶暂停新学习,不静默丢已生效规则。
|
|
18
|
+
- 关闭、切作品、换状态、超时或版本变化都会让晚到的整理整批作废。
|
|
19
|
+
- 整理用的模型调用不含工具、子代理和完整历史;输出不是合法 JSON 就整批拒绝,不做第二次修复。
|
|
20
|
+
- 用量缺失显示「未知」,不补零;整理调用与单请求记忆载荷分开显示。
|
|
21
|
+
|
|
22
|
+
## 证据
|
|
23
|
+
|
|
24
|
+
- `npm test`:含 `learning.test.mjs` 36 项、`scenario.test.mjs` 4 项(口播/剪辑/字幕 + 新会话对照)、`contract.test.mjs` 真实宿主整理流程。
|
|
25
|
+
- `npm run bench:evolution`:32 条规则、64 条回执下整理输入 2.7 KB、状态 123 KB、热快照 P50/P95 1.1/1.3 ms,超限非零退出。
|
|
26
|
+
- 真实页面点击仍受本机 Web 登录态限制;UI 验收只到 Node 渲染与接口契约,不冒充页面验收。
|
|
27
|
+
- 模型侧质量、重复纠正率、首版认可率没有预填数字,等真实模型样本后再报告。
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 0.11.1 · 会话头与引用条
|
|
2
|
+
|
|
3
|
+
- 会话头的「自进化」文字按钮换成 14 px 大脑图标;开关状态仍由面板文字、图标透明度与 `aria-pressed` 表达。
|
|
4
|
+
- 移除「准备续聊摘要」。它只是把本轮更新列成可复制的 id、名字和版本,和「本轮更新」引用条重复;复制清单不带来新的读取或写入能力。
|
|
5
|
+
- 没有新增配色、圆角或阴影,图标使用 `currentColor`。
|
|
6
|
+
|
|
7
|
+
## 证据
|
|
8
|
+
|
|
9
|
+
- `npm test` 全绿;`ui-copy-lint` 无报错;`git diff --check` 干净。
|
|
10
|
+
- 图标是内联 SVG,不增加请求或依赖。
|
|
11
|
+
- 真实页面点击仍受本机 Web 登录态限制,UI 验收只到 Node 渲染与接口契约。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 0.12.0 · 记忆面板
|
|
2
|
+
|
|
3
|
+
- 会话头的大脑图标不再开小浮层,改为居中的记忆面板:默认看当前项目,也能切到其他项目和全局层;切过去只读,不回写、不迁移旧格式。
|
|
4
|
+
- 面板只用真实记忆数据:每条有效记忆一个图谱节点,共享标签和主题做枢纽,显式关联画实线;位置由 id 决定,同一批数据每次一样。旁边的计数、类型分布、规则和归档都来自当前层。
|
|
5
|
+
- 右侧按「记忆 / 规则 / 归档」列出条目,点开读当前正文;规则可撤回、固定、暂停、恢复、删除。
|
|
6
|
+
- 项目自进化的开关和用量收进左栏;只对当前项目可改,其他项目显示只读状态。
|
|
7
|
+
- `/lite-memory/overview` 与 `/lite-memory/body` 的读取路径改为只读:不迁移旧格式、不创建目录,避免打开面板就改磁盘。
|
|
8
|
+
- 没有新增依赖、配色、圆角或阴影;图谱是内联 SVG,沿用宿主 token。
|
|
9
|
+
|
|
10
|
+
## 证据
|
|
11
|
+
|
|
12
|
+
- `npm test` 全绿;`client.test.mjs` 11 项,含面板注册和图谱去重/确定性。
|
|
13
|
+
- `node --check` 覆盖 `index.js store.js client.js`;`ui-copy-lint` 无报错;`git diff --check` 干净;impeccable 检测 `client.js DESIGN.md` 无发现。
|
|
14
|
+
- 本地用 Chrome 无头渲染了当前项目、其他项目、规则、归档四个视图;真实页面点击仍受本机 Web 登录态限制,UI 验收只到 Node 渲染与接口契约。
|
|
15
|
+
- 没有预填性能或效果数字。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 0.12.1 · 学习闭环与总开关
|
|
2
|
+
|
|
3
|
+
- 修掉三处会要求用户先选栏目的出口:没有已登记范围时不注入、不追问;有范围但问题对不上时整段跳过,按当前任务继续;工具绑定零命中或命中多条时只回一句读取状态,不再点名栏目。
|
|
4
|
+
- 未绑定索引只列和本轮问题有字面交集的记忆范围,最多三条;没有交集就什么也不给。
|
|
5
|
+
- 「本轮问题没有对上」等回执改成中性描述,不再把栏目选择当成用户义务。
|
|
6
|
+
- 项目记忆总开关接通:关掉后这个项目不再读写任何记忆,包括全局层;自动注入、检索、读取、引用、保存和建议全部停,面板只能查看,保留/拒绝/搬移/撤销返回 409。
|
|
7
|
+
- 关闭期间不能打开自进化,但可以把自进化关掉;重新打开项目记忆后,原来的自进化设置恢复。关一个项目不影响其他项目。
|
|
8
|
+
- 切换总开关立即作废旧请求上下文、进行中的整理和读取凭据;旧 `contextId` 不能继续带出关闭前的内容。
|
|
9
|
+
- 检索只靠「这个」「怎么」这类高频词重合不算命中;纯英文查询按整词匹配,`git` 不再命中 `digital`。
|
|
10
|
+
- 版本号升到 0.12.1;没有新增依赖、配色、圆角或阴影。
|
|
11
|
+
|
|
12
|
+
## 证据
|
|
13
|
+
|
|
14
|
+
- `npm test` 全绿:新增 `control.test.mjs`(总开关、全局层、写入入口、项目隔离、旧上下文失效)与 `lexical.test.mjs`(高频词、英文整词),`evolution-read.test.mjs` 增加零命中/多命中回执与「视频项目做代码任务零注入」。
|
|
15
|
+
- 空项目 + 自进化开启 + 代码任务:注入文本为空,`injectedIds` 为 0;视频规则存在但代码任务不注入正文。
|
|
16
|
+
- 同一会话从视频任务改为排查 PostgreSQL:不再带出旧视频规则,也没有选栏目提示。
|
|
17
|
+
- `node --check index.js store.js state.js view.js client.js anchor.js learning.js`;`ui-copy-lint`、`git diff --check`、impeccable 检测均无报错。
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 0.12.2 · 收口读取与任务边界
|
|
2
|
+
|
|
3
|
+
- 新任务优先:用户明确换到无关任务时,旧栏目绑定立即撤销,旧规则不再自动注入;「继续改」「接着做」仍继承同一任务。
|
|
4
|
+
- 自由文本条件没有可信上下文时(如「发版当天」),自动注入、检索、读取都拿不到正文,只回状态。
|
|
5
|
+
- `memory_search` 只列当前任务真能用的条目,条件未知或不适用不出现在索引里,命中数与正文一致。
|
|
6
|
+
- `memory_read` 的条件门槛覆盖普通记忆,不再只拦学习产物;关联读取遇到失效源也不带出正文。
|
|
7
|
+
- 记忆范围没有候选或对不上时什么都不注入,不追问栏目;工具读取只回一句状态。
|
|
8
|
+
- 项目记忆关闭后,五个记忆工具对该会话不可见,执行入口也会拒绝;重新打开即恢复。
|
|
9
|
+
- 配置的项目根只覆盖自己的子树,不会把同级或上级目录并成同一个项目。
|
|
10
|
+
- 版本号升到 0.12.2;没有新增依赖、配色、圆角或阴影。
|
|
11
|
+
|
|
12
|
+
## 证据
|
|
13
|
+
|
|
14
|
+
- `npm test` 全绿:新增配置根子树隔离(S03)、新任务后 `decideRead` 只给索引不给规则。
|
|
15
|
+
- 新任务回归:口播任务后发送「帮我排查 PostgreSQL 连接超时」,锚点转为未绑定,旧规则不注入。
|
|
16
|
+
- 条件未知条目:搜索不命中,`memory_read` 返回 `needs_context` 且正文为空。
|
|
17
|
+
- `node --check index.js store.js state.js view.js client.js anchor.js learning.js bench/evolution.mjs test/scenario.test.mjs`;`ui-copy-lint`、`git diff --check`、impeccable 检测均无报错。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 0.13.0
|
|
2
|
+
|
|
3
|
+
- 记忆的展示行标明归属:全局条目用 `[global]`,项目条目用项目目录名(如 `[DSH]`)。自动召回、检索、读取、保存和归档回执统一这个前缀;面板里的项目切换到全局仍显示「全局」。
|
|
4
|
+
- 项目名取当前工作目录的 basename,超过 16 字截断;项目条目不再和全局条目混在一列里分不出来。
|
|
5
|
+
- 记忆不再把版次当用户概念:面板、召回卡、检索/读取/保存回执和撤销冲突提示都只显示当前内容、归属与日期;内部修订号只用于并发校验和撤销,不展示。
|
|
6
|
+
- 保存口径收紧:单条正文上限 4096 → 1200 字节,并拒绝满是像素、字号、层级等实现参数的正文;工具说明要求先蒸馏,只写原则、判断规则和触发条件。
|
|
7
|
+
- 同一轮的引用行按条目去重;条目在轮内被读过又更新,也只占一行,内容取最新。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 0.14.0
|
|
2
|
+
|
|
3
|
+
- 记忆页恢复关系图:搜索行右侧「列表 / 图谱」切换,图谱只替换列表区,右侧详情保留;点记忆节点看详情,点标签/主题节点转搜索。
|
|
4
|
+
- 面板说明收短:只留开关用途、状态和后果;「自进化」在记忆关闭时强制关闭并禁用,重开后仍保持关闭。
|
|
5
|
+
- 自进化 tab 只作用于当前项目,不提供范围选择;候选、试用、生效、暂停的计数缺失时显示未知,不补 0。
|
|
6
|
+
- 关闭项目记忆后,该项目的会话里记忆工具直接不可用;残留调用返回 `memory_disabled`,不落盘、不假装成功。管理面的采纳、修改、放弃、暂停、恢复、删除、撤销同样拒绝,面板只读,状态文件不变。
|
|
7
|
+
- 续接判断先认新对象:带「继续 / 这个」但换了对象时撤销旧范围;「继续改刚才那版脚本」这类明确续作仍保留范围。
|