@modusensus/dsh-mneme 0.6.8 → 0.6.9

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.
Files changed (138) hide show
  1. package/.github/workflows/test.yml +32 -0
  2. package/.release-notes-v0.6.9.md +13 -0
  3. package/CHANGELOG.md +89 -0
  4. package/README.md +148 -392
  5. package/SECURITY.md +544 -0
  6. package/docs/devlog/2026-08-14-dsh-mneme-dev-log.md +247 -0
  7. package/docs/devlog/2026-08-15-dsh-mneme-audit-stress-dev-log.md +145 -0
  8. package/docs/devlog/2026-08-15-dsh-mneme-pipeline-dev-log.md +56 -0
  9. package/docs/devlog/2026-08-15-dsh-mneme-reflection-dev-log.md +77 -0
  10. package/docs/devlog/2026-08-15-dsh-mneme-review-fixes-dev-log.md +64 -0
  11. package/docs/devlog/2026-08-15-dsh-mneme-semantic-dev-log.md +90 -0
  12. package/dsh-mneme/CHANGELOG.md +248 -0
  13. package/dsh-mneme/LICENSE +21 -0
  14. package/dsh-mneme/README.md +465 -0
  15. package/dsh-mneme/docs/AGENT_MEMORY_RESEARCH.md +183 -0
  16. package/dsh-mneme/docs/ENTITIES.md +245 -0
  17. package/dsh-mneme/docs/LOCAL_MODEL.md +141 -0
  18. package/dsh-mneme/docs/MIGRATION.md +127 -0
  19. package/dsh-mneme/docs/SEMANTIC.md +256 -0
  20. package/dsh-mneme/docs/SLEEP.md +163 -0
  21. package/{lib → dsh-mneme/lib}/config.js +10 -0
  22. package/{src → dsh-mneme/lib}/dream/decisions.js +143 -94
  23. package/{lib → dsh-mneme/lib}/dream.js +32 -9
  24. package/dsh-mneme/package-lock.json +1936 -0
  25. package/dsh-mneme/package.json +80 -0
  26. package/{src → dsh-mneme/src}/config.js +10 -0
  27. package/{lib → dsh-mneme/src}/dream/decisions.js +143 -94
  28. package/{src → dsh-mneme/src}/dream.js +32 -9
  29. package/{test → dsh-mneme/test}/dream.test.js +157 -0
  30. package/package.json +58 -80
  31. package//346/250/252/345/271/205.png +0 -0
  32. /package/{cordis.patch.yml → dsh-mneme/cordis.patch.yml} +0 -0
  33. /package/{lib → dsh-mneme/lib}/api.js +0 -0
  34. /package/{lib → dsh-mneme/lib}/client.js +0 -0
  35. /package/{lib → dsh-mneme/lib}/commands.js +0 -0
  36. /package/{lib → dsh-mneme/lib}/dream/clustering.js +0 -0
  37. /package/{lib → dsh-mneme/lib}/dream/sleep.js +0 -0
  38. /package/{lib → dsh-mneme/lib}/dream/tag-extractor.js +0 -0
  39. /package/{lib → dsh-mneme/lib}/embedding.js +0 -0
  40. /package/{lib → dsh-mneme/lib}/entities/extractor.js +0 -0
  41. /package/{lib → dsh-mneme/lib}/hot-memory.js +0 -0
  42. /package/{lib → dsh-mneme/lib}/index.js +0 -0
  43. /package/{lib → dsh-mneme/lib}/inject.js +0 -0
  44. /package/{lib → dsh-mneme/lib}/local-embedder.js +0 -0
  45. /package/{lib → dsh-mneme/lib}/mirror.js +0 -0
  46. /package/{lib → dsh-mneme/lib}/parser/tag.js +0 -0
  47. /package/{lib → dsh-mneme/lib}/parser/wiki-link.js +0 -0
  48. /package/{lib → dsh-mneme/lib}/quality-filter.js +0 -0
  49. /package/{lib → dsh-mneme/lib}/reranker.js +0 -0
  50. /package/{lib → dsh-mneme/lib}/search/adaptive.js +0 -0
  51. /package/{lib → dsh-mneme/lib}/search/bm25.js +0 -0
  52. /package/{lib → dsh-mneme/lib}/search/tag-boost.js +0 -0
  53. /package/{lib → dsh-mneme/lib}/service.js +0 -0
  54. /package/{lib → dsh-mneme/lib}/settings.js +0 -0
  55. /package/{lib → dsh-mneme/lib}/store.js +0 -0
  56. /package/{lib → dsh-mneme/lib}/summarize.js +0 -0
  57. /package/{lib → dsh-mneme/lib}/tools.js +0 -0
  58. /package/{lib → dsh-mneme/lib}/vector-index.js +0 -0
  59. /package/{scripts → dsh-mneme/scripts}/benchmark-embed.js +0 -0
  60. /package/{scripts → dsh-mneme/scripts}/benchmark-recall.js +0 -0
  61. /package/{scripts → dsh-mneme/scripts}/benchmark-rerank.js +0 -0
  62. /package/{scripts → dsh-mneme/scripts}/e2e-dsh.js +0 -0
  63. /package/{scripts → dsh-mneme/scripts}/stress-dsh.js +0 -0
  64. /package/{scripts → dsh-mneme/scripts}/sync-lib.js +0 -0
  65. /package/{src → dsh-mneme/src}/api.js +0 -0
  66. /package/{src → dsh-mneme/src}/commands.js +0 -0
  67. /package/{src → dsh-mneme/src}/dream/clustering.js +0 -0
  68. /package/{src → dsh-mneme/src}/dream/sleep.js +0 -0
  69. /package/{src → dsh-mneme/src}/dream/tag-extractor.js +0 -0
  70. /package/{src → dsh-mneme/src}/embedding.js +0 -0
  71. /package/{src → dsh-mneme/src}/entities/extractor.js +0 -0
  72. /package/{src → dsh-mneme/src}/hot-memory.js +0 -0
  73. /package/{src → dsh-mneme/src}/index.js +0 -0
  74. /package/{src → dsh-mneme/src}/inject.js +0 -0
  75. /package/{src → dsh-mneme/src}/local-embedder.js +0 -0
  76. /package/{src → dsh-mneme/src}/mirror.js +0 -0
  77. /package/{src → dsh-mneme/src}/parser/tag.js +0 -0
  78. /package/{src → dsh-mneme/src}/parser/wiki-link.js +0 -0
  79. /package/{src → dsh-mneme/src}/quality-filter.js +0 -0
  80. /package/{src → dsh-mneme/src}/reranker.js +0 -0
  81. /package/{src → dsh-mneme/src}/search/adaptive.js +0 -0
  82. /package/{src → dsh-mneme/src}/search/bm25.js +0 -0
  83. /package/{src → dsh-mneme/src}/search/tag-boost.js +0 -0
  84. /package/{src → dsh-mneme/src}/service.js +0 -0
  85. /package/{src → dsh-mneme/src}/settings.js +0 -0
  86. /package/{src → dsh-mneme/src}/store.js +0 -0
  87. /package/{src → dsh-mneme/src}/summarize.js +0 -0
  88. /package/{src → dsh-mneme/src}/tools.js +0 -0
  89. /package/{src → dsh-mneme/src}/vector-index.js +0 -0
  90. /package/{test → dsh-mneme/test}/api.test.js +0 -0
  91. /package/{test → dsh-mneme/test}/audit.test.js +0 -0
  92. /package/{test → dsh-mneme/test}/benchmark.test.js +0 -0
  93. /package/{test → dsh-mneme/test}/boundary-v0625.test.js +0 -0
  94. /package/{test → dsh-mneme/test}/client.test.js +0 -0
  95. /package/{test → dsh-mneme/test}/clustering.test.js +0 -0
  96. /package/{test → dsh-mneme/test}/commands.test.js +0 -0
  97. /package/{test → dsh-mneme/test}/config.test.js +0 -0
  98. /package/{test → dsh-mneme/test}/conflict-freeze.test.js +0 -0
  99. /package/{test → dsh-mneme/test}/directory.test.js +0 -0
  100. /package/{test → dsh-mneme/test}/entities.test.js +0 -0
  101. /package/{test → dsh-mneme/test}/epistemic.test.js +0 -0
  102. /package/{test → dsh-mneme/test}/fnew-0112.test.js +0 -0
  103. /package/{test → dsh-mneme/test}/fnew-03.test.js +0 -0
  104. /package/{test → dsh-mneme/test}/graph-api.test.js +0 -0
  105. /package/{test → dsh-mneme/test}/helpers/dream-mock.js +0 -0
  106. /package/{test → dsh-mneme/test}/hot-memory.test.js +0 -0
  107. /package/{test → dsh-mneme/test}/inject.test.js +0 -0
  108. /package/{test → dsh-mneme/test}/llm-audit.test.js +0 -0
  109. /package/{test → dsh-mneme/test}/local-embedder.test.js +0 -0
  110. /package/{test → dsh-mneme/test}/mirror-dirty.test.js +0 -0
  111. /package/{test → dsh-mneme/test}/mirror-edit-digest.test.js +0 -0
  112. /package/{test → dsh-mneme/test}/mirror-generation.test.js +0 -0
  113. /package/{test → dsh-mneme/test}/mirror.test.js +0 -0
  114. /package/{test → dsh-mneme/test}/normalize-decisions.test.js +0 -0
  115. /package/{test → dsh-mneme/test}/peer-blockers.test.js +0 -0
  116. /package/{test → dsh-mneme/test}/policy-epoch.test.js +0 -0
  117. /package/{test → dsh-mneme/test}/provenance.test.js +0 -0
  118. /package/{test → dsh-mneme/test}/quality-filter.test.js +0 -0
  119. /package/{test → dsh-mneme/test}/reasoning-effort.test.js +0 -0
  120. /package/{test → dsh-mneme/test}/recall-evals.test.js +0 -0
  121. /package/{test → dsh-mneme/test}/recall-layer.test.js +0 -0
  122. /package/{test → dsh-mneme/test}/receipt-chain.test.js +0 -0
  123. /package/{test → dsh-mneme/test}/reflection.test.js +0 -0
  124. /package/{test → dsh-mneme/test}/reranker.test.js +0 -0
  125. /package/{test → dsh-mneme/test}/search-fusion.test.js +0 -0
  126. /package/{test → dsh-mneme/test}/semantic.test.js +0 -0
  127. /package/{test → dsh-mneme/test}/service-search.test.js +0 -0
  128. /package/{test → dsh-mneme/test}/service.test.js +0 -0
  129. /package/{test → dsh-mneme/test}/settings.test.js +0 -0
  130. /package/{test → dsh-mneme/test}/sleep.test.js +0 -0
  131. /package/{test → dsh-mneme/test}/store.test.js +0 -0
  132. /package/{test → dsh-mneme/test}/stress.test.js +0 -0
  133. /package/{test → dsh-mneme/test}/summarize.test.js +0 -0
  134. /package/{test → dsh-mneme/test}/tag-boost.test.js +0 -0
  135. /package/{test → dsh-mneme/test}/tag.test.js +0 -0
  136. /package/{test → dsh-mneme/test}/tools.test.js +0 -0
  137. /package/{test → dsh-mneme/test}/vector-index.test.js +0 -0
  138. /package/{test → dsh-mneme/test}/wiki-link.test.js +0 -0
@@ -0,0 +1,32 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [master, main]
6
+ pull_request:
7
+ branches: [master, main]
8
+ workflow_dispatch:
9
+
10
+ jobs:
11
+ test:
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ matrix:
15
+ node-version: [24]
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: ${{ matrix.node-version }}
21
+ - name: Install dependencies
22
+ working-directory: dsh-mneme
23
+ run: npm ci
24
+ - name: Run tests
25
+ working-directory: dsh-mneme
26
+ run: npm run test:coverage
27
+ - name: Upload coverage to Codecov
28
+ uses: codecov/codecov-action@v4
29
+ with:
30
+ token: ${{ secrets.CODECOV_TOKEN }}
31
+ files: dsh-mneme/coverage/lcov.info
32
+ fail_ci_if_error: false
@@ -0,0 +1,13 @@
1
+ ## What's Changed
2
+
3
+ ### 修复
4
+ - **autoDream 恒失败(Issue #26,P0)**:模型几乎必然为语义相关性产出跨类型 merge,而 `validateDecisions` 硬性禁止跨类型合并,此前「任意非法即整单拒绝」导致整批 consolidation 完全不应用(`applied=0`、空转一次 LLM 调用),并连带阻塞依赖 dream 成功的 `autoTag`。`dreamSkipInvalid` 默认开启后,逐条非法决策被跳过、合法子集照常应用,run 状态记为 `degraded`;审计行 `outcome.skipped` 记录被跳过的决策,`error` 注明跳过数。防洗白语义不变:显式覆盖率不足、update/create 超量等全局错误仍整单拒绝。`dreamSkipInvalid: false` 可恢复旧的整单拒绝行为。
5
+
6
+ ### 新增
7
+ - **`allowCrossTypeMerge`(Issue #26,P1)**:默认 `false` 保持现有类型边界(`preference` 注入权重更高、`decision`/`project` 注入上下文不同,合并会丢失类型信息);显式开启后跨类型 merge 被视为合法、可被应用,类型边界由用户自行承担。
8
+
9
+ ### 测试
10
+ - 新增 7 条 skipInvalid / allowCrossTypeMerge / opt-out 用例。
11
+ - 核心测试 114/114 通过;全量测试仅 `reranker.test.js` 因环境缺失 `@huggingface/transformers` 失败 1 例,与本次修复无关。
12
+
13
+ **Full Changelog**: https://github.com/modusensus/dsh-mneme/compare/v0.6.8...v0.6.9
package/CHANGELOG.md ADDED
@@ -0,0 +1,89 @@
1
+ # Changelog
2
+
3
+ All notable changes to dsh-mneme are documented here.
4
+
5
+ ## [Unreleased]
6
+
7
+ - **诚实审计修复(v0.2.7,F-03)**
8
+ - autoDream 决策无变更且 summary 为空时,不再误报 ok:true——新增 `noop` 状态(ok:false,baseline 不刷新),避免空跑循环
9
+ - 有变更但 summary 缺失 → `degraded`(ok:true 但如实标记 summary 缺失)
10
+ - parseReceipt 支持 ok/noop/degraded/reconcile/failed
11
+ - 测试 259 → **263**
12
+
13
+ - **社区贡献 · 嵌入式面板 UI 改进(PR #2,@Liuxin4950)**
14
+ - 记忆面板与设置面板的嵌入模式(settings.section 插槽)不再复用弹窗面板样式(去掉 boxShadow / background / borderRadius / padding),改为全宽平铺渲染,消除 DSH 设置页内多余的悬浮卡片与阴影
15
+ - 弹窗(portal)模式保持原有面板样式不变;新增回归测试锁定 embedded 分支不携带 modal chrome
16
+
17
+ - **安全审计修复(v0.2.5)**
18
+ - 并发安全:CAS 冲突守卫——过期快照不再覆盖并发写入(防丢更新)
19
+ - 事务化决策应用:merge/archive 原子提交,receipt 反映已提交子步骤,部分提交 = reconcile(绝不虚报 ok)
20
+ - 压测硬断言:lost-update 与多步原子性失败即非零退出(`npm run stress`)
21
+ - 运行时人工编辑三方合并(three-way),不再静默覆盖
22
+ - 新增 `memory_archive` 工具(第 7 个模型工具)+ `memory_list include_archived`,归档可恢复
23
+ - reranker 改为 opt-in:`rerankEnabled=false`、`rerankProvider=none` 默认(裸装不加载 onnxruntime)
24
+ - npm `files` 纳入 scripts/test,tarball 内可直接跑压测
25
+ - 测试 236 → **258**(+22)
26
+
27
+ - **安全加固(v0.2.4)**:API 鉴权 `apiToken`(写操作与密钥端点要求 Bearer 校验)+ `apiKey` 掩码回传 + timing-safe token 比对
28
+
29
+ - **审查修复补丁(v0.2.3)**
30
+ - failure 记录增加 `before` JSON 快照(title/content/importance 变更可追溯,不只 content)
31
+ - vector-index `rebuildIndex` guard 改为检查 `embedSingle`(修复 embed/embedSingle 不一致导致的静默跳过)
32
+
33
+ - **流水线补全(v0.2.2)**
34
+ - reflection 修复:failure 记录检查 title/importance 变化(不只 content);支持 query 上下文(memory_update 加 `reason` 参数);update 校验失败不污染 claimed;`failure_memories` 清理(`deleteOldFailures` + 启动自动清理 90 天前)
35
+ - 专项测试补全:`vector-index.test.js`(modelHash 漂移/重建/增量)+ `service-search.test.js`(hybrid/auto/rerank 端到端)
36
+ - api.js `/search` 的 mode 参数文档化
37
+ - 测试 212 → **233**
38
+
39
+ - **反思更新(v0.2.1)**:`update` 决策 + 失败追踪
40
+ - autoDream 新增 `update` 决策类型:修正单条记忆的过时/错误内容(单 id、必须实际变化、非 summary、24h 保护、每次 ≤2)
41
+ - 审计记录 update 的 `_before` 快照;update 后向量索引同步
42
+ - `failure_memories` 表:记录用户纠正(user_correction)+ 查询/统计接口
43
+ - 配置:`reflectionUpdateEnabled` / `reflectionFailureTracking` / `reflectionUpdateMaxPerRun` / `reflectionUpdateMinAgeHours`
44
+
45
+ - **Semantic 升级(v0.2.0-semantic)**:完全离线语义记忆引擎
46
+ - 本地 Embedding:`embedProvider: local`(ONNX bge-small-zh-v1.5,transformers.js/onnxruntime)或 `ollama`;原 `openai` 外部 API 保留为默认,向后兼容
47
+ - 向量索引层:`vector_meta` 模型指纹追踪 + 索引统计(`/api/dsh-mneme/semantic`)
48
+ - Rerank 精排:`rerankEnabled`(bge-reranker-base cross-encoder),召回后精排 Top-K,失败自动跳过
49
+ - 混合搜索:`memory_search` 新增 `mode: hybrid`(向量优先 + 关键词补位);`auto` 保持关键词优先 + 向量补位
50
+ - autoDream 语义增强:K-Means 聚类预分组(k-means++)、`[潜在冲突]` 向量相似度标记、整理后向量索引重建
51
+ - 模型下载:断点续传 + 缓存(transformers.js 内置);`.npmrc` 跳过 onnxruntime CUDA 下载避免安装失败
52
+ - 文档:`docs/SEMANTIC.md` / `docs/LOCAL_MODEL.md` / `docs/MIGRATION.md` + 基准脚本 `benchmark-embed` / `benchmark-rerank`
53
+ - autoDream 裁决审计:每次运行写入 `dream_runs`(输入快照 sha256 digest + 完整输入快照 + LLM 决策清单 + 逐 id 去向 + receipt `dsh-mneme:run:<id>:<status>:<hash>:<count>:<applied>`),可离线回放、定位静默错误
54
+ - 幂等决策应用:merge / conflict 重复应用无累积副作用(来源注释不重复追加),防并发/重放下的重复合并
55
+ - 三轴线压测 `npm run stress`:长会话检索(Recall@k、陈旧残留率)/ 冲突裁决(可重放仲裁集)/ 多 Agent 并发(丢更新、重复合并、事务/崩溃恢复)
56
+
57
+ ## [0.1.6] - 2026-08-14
58
+
59
+ - Vector (semantic) search via OpenAI-compatible embeddings endpoint, with automatic fallback to LIKE keyword search on failure
60
+ - Web GUI memory panel: browse by type, full-text + semantic search
61
+
62
+ ## [0.1.5] - 2026-08-14
63
+
64
+ - autoDream consolidation refinements: conflict resolution with source tracking, fail-safe decision validation
65
+
66
+ ## [0.1.4] - 2026-08-14
67
+
68
+ - User settings: profile + behavior rules injected every turn
69
+ - Custom slash commands (register, route to agent)
70
+
71
+ ## [0.1.3] - 2026-08-14
72
+
73
+ - autoDream background consolidation: dedup / merge / archive / conflict resolution
74
+
75
+ ## [0.1.2] - 2026-08-14
76
+
77
+ - Session summarization: auto-distill preferences / decisions / lessons at session end
78
+ - Web panel improvements
79
+
80
+ ## [0.1.1] - 2026-08-13
81
+
82
+ - Memory tools: memory_save / memory_search / memory_list / memory_update / memory_delete / memory_forget
83
+ - Markdown mirror sync (human-editable, manual edits take priority)
84
+
85
+ ## [0.1.0] - 2026-08-13
86
+
87
+ - Initial release: cross-session memory for DeepSeek Harness
88
+ - SQLite store (node:sqlite, zero native deps) + human-editable Markdown mirror
89
+ - Auto-injection of relevant memories at session start