@modusensus/dsh-mneme 0.6.9 → 0.6.10

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 (139) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +468 -219
  3. package/{dsh-mneme/cordis.patch.yml → cordis.patch.yml} +15 -15
  4. package/{dsh-mneme/src → lib}/api.js +783 -783
  5. package/{dsh-mneme/lib → lib}/client.js +1754 -1757
  6. package/{dsh-mneme/src → lib}/commands.js +64 -64
  7. package/{dsh-mneme/lib → lib}/config.js +298 -298
  8. package/{dsh-mneme/lib → lib}/dream/clustering.js +118 -118
  9. package/{dsh-mneme/lib → lib}/dream/decisions.js +488 -488
  10. package/{dsh-mneme/lib → lib}/dream/sleep.js +561 -561
  11. package/{dsh-mneme/src → lib}/dream/tag-extractor.js +156 -156
  12. package/{dsh-mneme/lib → lib}/dream.js +958 -958
  13. package/{dsh-mneme/src → lib}/embedding.js +154 -154
  14. package/{dsh-mneme/src → lib}/entities/extractor.js +242 -242
  15. package/{dsh-mneme/lib → lib}/hot-memory.js +53 -53
  16. package/{dsh-mneme/lib → lib}/index.js +361 -361
  17. package/{dsh-mneme/src → lib}/inject.js +208 -208
  18. package/{dsh-mneme/lib → lib}/local-embedder.js +282 -282
  19. package/{dsh-mneme/lib → lib}/mirror.js +170 -170
  20. package/{dsh-mneme/lib → lib}/parser/tag.js +59 -59
  21. package/{dsh-mneme/lib → lib}/parser/wiki-link.js +38 -38
  22. package/{dsh-mneme/src → lib}/quality-filter.js +123 -123
  23. package/{dsh-mneme/lib → lib}/reranker.js +218 -218
  24. package/{dsh-mneme/src → lib}/search/adaptive.js +22 -22
  25. package/{dsh-mneme/src → lib}/search/bm25.js +96 -96
  26. package/{dsh-mneme/src → lib}/search/tag-boost.js +61 -61
  27. package/{dsh-mneme/src → lib}/service.js +1726 -1726
  28. package/{dsh-mneme/lib → lib}/settings.js +172 -172
  29. package/{dsh-mneme/src → lib}/store.js +2238 -2238
  30. package/{dsh-mneme/src → lib}/summarize.js +236 -236
  31. package/{dsh-mneme/lib → lib}/tools.js +290 -290
  32. package/{dsh-mneme/lib → lib}/vector-index.js +116 -116
  33. package/package.json +40 -18
  34. package/{dsh-mneme/scripts → scripts}/benchmark-embed.js +201 -201
  35. package/{dsh-mneme/scripts → scripts}/benchmark-recall.js +133 -133
  36. package/{dsh-mneme/scripts → scripts}/benchmark-rerank.js +166 -166
  37. package/{dsh-mneme/scripts → scripts}/e2e-dsh.js +218 -218
  38. package/{dsh-mneme/scripts → scripts}/stress-dsh.js +255 -255
  39. package/{dsh-mneme/scripts → scripts}/sync-lib.js +52 -52
  40. package/{dsh-mneme/lib → src}/api.js +783 -783
  41. package/{dsh-mneme/lib → src}/commands.js +64 -64
  42. package/{dsh-mneme/src → src}/config.js +298 -298
  43. package/{dsh-mneme/src → src}/dream/clustering.js +118 -118
  44. package/{dsh-mneme/src → src}/dream/decisions.js +488 -488
  45. package/{dsh-mneme/src → src}/dream/sleep.js +561 -561
  46. package/{dsh-mneme/lib → src}/dream/tag-extractor.js +156 -156
  47. package/{dsh-mneme/src → src}/dream.js +958 -958
  48. package/{dsh-mneme/lib → src}/embedding.js +154 -154
  49. package/{dsh-mneme/lib → src}/entities/extractor.js +242 -242
  50. package/{dsh-mneme/src → src}/hot-memory.js +53 -53
  51. package/{dsh-mneme/src → src}/index.js +361 -361
  52. package/{dsh-mneme/lib → src}/inject.js +208 -208
  53. package/{dsh-mneme/src → src}/local-embedder.js +282 -282
  54. package/{dsh-mneme/src → src}/mirror.js +170 -170
  55. package/{dsh-mneme/src → src}/parser/tag.js +59 -59
  56. package/{dsh-mneme/src → src}/parser/wiki-link.js +38 -38
  57. package/{dsh-mneme/lib → src}/quality-filter.js +123 -123
  58. package/{dsh-mneme/src → src}/reranker.js +218 -218
  59. package/{dsh-mneme/lib → src}/search/adaptive.js +22 -22
  60. package/{dsh-mneme/lib → src}/search/bm25.js +96 -96
  61. package/{dsh-mneme/lib → src}/search/tag-boost.js +61 -61
  62. package/{dsh-mneme/lib → src}/service.js +1726 -1726
  63. package/{dsh-mneme/src → src}/settings.js +172 -172
  64. package/{dsh-mneme/lib → src}/store.js +2238 -2238
  65. package/{dsh-mneme/lib → src}/summarize.js +236 -236
  66. package/{dsh-mneme/src → src}/tools.js +290 -290
  67. package/{dsh-mneme/src → src}/vector-index.js +116 -116
  68. package/{dsh-mneme/test → test}/api.test.js +594 -594
  69. package/{dsh-mneme/test → test}/audit.test.js +448 -448
  70. package/{dsh-mneme/test → test}/benchmark.test.js +35 -35
  71. package/{dsh-mneme/test → test}/boundary-v0625.test.js +82 -82
  72. package/{dsh-mneme/test → test}/client.test.js +368 -368
  73. package/{dsh-mneme/test → test}/clustering.test.js +100 -100
  74. package/{dsh-mneme/test → test}/commands.test.js +69 -69
  75. package/{dsh-mneme/test → test}/config.test.js +50 -50
  76. package/{dsh-mneme/test → test}/conflict-freeze.test.js +290 -290
  77. package/{dsh-mneme/test → test}/directory.test.js +134 -134
  78. package/{dsh-mneme/test → test}/dream.test.js +1060 -1060
  79. package/{dsh-mneme/test → test}/entities.test.js +522 -522
  80. package/{dsh-mneme/test → test}/epistemic.test.js +298 -298
  81. package/{dsh-mneme/test → test}/fnew-0112.test.js +311 -311
  82. package/{dsh-mneme/test → test}/fnew-03.test.js +422 -422
  83. package/{dsh-mneme/test → test}/graph-api.test.js +175 -175
  84. package/{dsh-mneme/test → test}/helpers/dream-mock.js +82 -82
  85. package/{dsh-mneme/test → test}/hot-memory.test.js +174 -174
  86. package/{dsh-mneme/test → test}/inject.test.js +103 -103
  87. package/{dsh-mneme/test → test}/llm-audit.test.js +279 -279
  88. package/{dsh-mneme/test → test}/local-embedder.test.js +227 -227
  89. package/{dsh-mneme/test → test}/mirror-dirty.test.js +424 -424
  90. package/{dsh-mneme/test → test}/mirror-edit-digest.test.js +187 -187
  91. package/{dsh-mneme/test → test}/mirror-generation.test.js +499 -499
  92. package/{dsh-mneme/test → test}/mirror.test.js +249 -249
  93. package/{dsh-mneme/test → test}/normalize-decisions.test.js +120 -120
  94. package/{dsh-mneme/test → test}/peer-blockers.test.js +190 -190
  95. package/{dsh-mneme/test → test}/policy-epoch.test.js +259 -259
  96. package/{dsh-mneme/test → test}/provenance.test.js +103 -103
  97. package/{dsh-mneme/test → test}/quality-filter.test.js +118 -118
  98. package/{dsh-mneme/test → test}/reasoning-effort.test.js +199 -199
  99. package/{dsh-mneme/test → test}/recall-evals.test.js +235 -235
  100. package/{dsh-mneme/test → test}/recall-layer.test.js +315 -315
  101. package/{dsh-mneme/test → test}/receipt-chain.test.js +451 -451
  102. package/{dsh-mneme/test → test}/reflection.test.js +226 -226
  103. package/{dsh-mneme/test → test}/reranker.test.js +240 -240
  104. package/{dsh-mneme/test → test}/search-fusion.test.js +90 -90
  105. package/{dsh-mneme/test → test}/semantic.test.js +124 -124
  106. package/{dsh-mneme/test → test}/service-search.test.js +199 -199
  107. package/{dsh-mneme/test → test}/service.test.js +435 -435
  108. package/{dsh-mneme/test → test}/settings.test.js +118 -118
  109. package/{dsh-mneme/test → test}/sleep.test.js +365 -365
  110. package/{dsh-mneme/test → test}/store.test.js +436 -436
  111. package/{dsh-mneme/test → test}/stress.test.js +209 -209
  112. package/{dsh-mneme/test → test}/summarize.test.js +191 -191
  113. package/{dsh-mneme/test → test}/tag-boost.test.js +125 -125
  114. package/{dsh-mneme/test → test}/tag.test.js +312 -312
  115. package/{dsh-mneme/test → test}/tools.test.js +285 -285
  116. package/{dsh-mneme/test → test}/vector-index.test.js +221 -221
  117. package/{dsh-mneme/test → test}/wiki-link.test.js +332 -332
  118. package/.github/workflows/test.yml +0 -32
  119. package/.release-notes-v0.6.9.md +0 -13
  120. package/CHANGELOG.md +0 -89
  121. package/SECURITY.md +0 -544
  122. package/docs/devlog/2026-08-14-dsh-mneme-dev-log.md +0 -247
  123. package/docs/devlog/2026-08-15-dsh-mneme-audit-stress-dev-log.md +0 -145
  124. package/docs/devlog/2026-08-15-dsh-mneme-pipeline-dev-log.md +0 -56
  125. package/docs/devlog/2026-08-15-dsh-mneme-reflection-dev-log.md +0 -77
  126. package/docs/devlog/2026-08-15-dsh-mneme-review-fixes-dev-log.md +0 -64
  127. package/docs/devlog/2026-08-15-dsh-mneme-semantic-dev-log.md +0 -90
  128. package/dsh-mneme/CHANGELOG.md +0 -248
  129. package/dsh-mneme/LICENSE +0 -21
  130. package/dsh-mneme/README.md +0 -465
  131. package/dsh-mneme/docs/AGENT_MEMORY_RESEARCH.md +0 -183
  132. package/dsh-mneme/docs/ENTITIES.md +0 -245
  133. package/dsh-mneme/docs/LOCAL_MODEL.md +0 -141
  134. package/dsh-mneme/docs/MIGRATION.md +0 -127
  135. package/dsh-mneme/docs/SEMANTIC.md +0 -256
  136. package/dsh-mneme/docs/SLEEP.md +0 -163
  137. package/dsh-mneme/package-lock.json +0 -1936
  138. package/dsh-mneme/package.json +0 -80
  139. package//346/250/252/345/271/205.png +0 -0
@@ -1,32 +0,0 @@
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
@@ -1,13 +0,0 @@
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 DELETED
@@ -1,89 +0,0 @@
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
package/SECURITY.md DELETED
@@ -1,544 +0,0 @@
1
- # Security Policy
2
-
3
- > **English** | [中文](#安全策略)
4
-
5
- ---
6
-
7
- ## Supported Versions
8
-
9
- We actively maintain the latest minor version. Security fixes are backported to the latest patch release, and critical fixes may be backported to the previous minor version.
10
-
11
- | Version | Supported | Status |
12
- |---|---|---|
13
- | 0.3.x | ✅ Yes | Active development |
14
- | 0.2.x | ⚠️ Best-effort | Critical fixes only |
15
- | < 0.2.0 | ❌ No | Please upgrade to 0.3.x |
16
-
17
- **End-of-life notice**: 0.2.x is in best-effort maintenance (critical fixes only). Its end-of-life date will be announced in advance; after that date no security fixes will be provided for 0.2.x.
18
-
19
- ---
20
-
21
- ## Known Security Features
22
-
23
- The following security features are implemented and maintained in the project:
24
-
25
- | Feature | Description | Status |
26
- |---|---|---|
27
- | `apiToken` Authentication | All remote endpoints require `Authorization: Bearer <apiToken>` when a token is configured; comparison uses `crypto.timingSafeEqual` | ✅ Implemented |
28
- | `policyEpoch` Memory Governance | Bumping `policyEpoch` downgrades all prior `dream_runs` to historical evidence; their receipts no longer drive real-time memory decisions | ✅ Implemented |
29
- | `conflictFreezeEnabled` Conflict Freeze | Conflicting memories are not auto-merged; they are flagged as pending human review, preserving data integrity | ✅ Implemented |
30
- | CAS (Compare-and-Swap) Guard | Prevents concurrent write conflicts; ensures atomic write operations | ✅ Implemented |
31
- | Digest Baseline Audit | Memory updates are compared against digest baselines to detect unauthorized changes | ✅ Implemented |
32
- | `failure_memories` Audit Trail | Every failed write operation is logged for forensic analysis | ✅ Implemented |
33
- | `recall_run` Search Audit | Every search operation is recorded with timestamp and query metadata | ✅ Implemented |
34
- | Local-First Data Processing | All embeddings, reranking, and memory consolidation run locally; no data leaves the device | ✅ Implemented |
35
- | No Telemetry | No analytics, no remote logging, no network requests by design | ✅ Implemented |
36
- | Query Sanitization | LIKE-query escaping, bounded paging, and Markdown mirror escaping prevent injection and malformed input | ✅ Implemented |
37
- | `entityExtractionEnabled` Opt-In Entity Extraction | Entity extraction is opt-in via configuration (default: off), minimizing data processing by default | ✅ Implemented |
38
- | Graceful Degradation | System falls back to keyword search on component failure; no crash | ✅ Implemented |
39
- | Human-Editable Mirrors | All memories mirrored to Markdown files; users can verify and reconstruct data | ✅ Implemented |
40
-
41
- ---
42
-
43
- ## Reporting a Vulnerability
44
-
45
- ### Please DO NOT
46
-
47
- - Open a public issue for security vulnerabilities
48
- - Post exploit details in discussions or comments
49
- - Submit PRs that expose security flaws without prior coordination
50
-
51
- ### Please DO
52
-
53
- 1. **Email** `guanqishi26@gmail.com` (or open a **private security advisory** via [GitHub Security Advisories](https://github.com/modusensus/dsh-mneme/security/advisories))
54
- 2. Include:
55
- - A clear description of the vulnerability
56
- - Steps to reproduce (minimal test case preferred)
57
- - Impact assessment (data exposure? local-only? remote?)
58
- - Affected versions
59
- - Your proposed fix (if any)
60
- - Whether you are requesting credit / disclosure preferences
61
-
62
- ### Response Timeline
63
-
64
- | Phase | Time | Action |
65
- |---|---|---|
66
- | Acknowledgment | Within 48 hours | We confirm receipt and assign a tracking ID |
67
- | Initial Assessment | Within 7 days | We validate severity and scope; we may request additional information |
68
- | Fix Development | Severity-dependent | Critical: ≤ 14 days; High: ≤ 30 days; Medium/Low: next release |
69
- | Validation & Testing | 1–3 days after fix | We run regression and security tests on the patch |
70
- | Coordinated Disclosure | At fix release | We publish a security advisory and release patch simultaneously |
71
-
72
- **Note**: For Critical vulnerabilities, if a full fix cannot be developed within 14 days, we will provide a temporary mitigation or workaround within that timeframe.
73
-
74
- ### Severity Classification
75
-
76
- We follow the [CVSS v3.1](https://www.first.org/cvss/v3.1/specification-document) standard:
77
-
78
- - **Critical** (9.0–10.0): Remote code execution, unauthorized data exfiltration, bypass of core security controls
79
- - **High** (7.0–8.9): Local privilege escalation, significant data integrity compromise, DoS with high impact
80
- - **Medium** (4.0–6.9): Information disclosure under specific conditions, partial bypass of controls
81
- - **Low** (0.1–3.9): Minor information leakage, defense-in-depth improvements
82
-
83
- ---
84
-
85
- ## Security Design Principles
86
-
87
- ### 1. Local-First, Zero-Network
88
-
89
- - All embeddings, reranking, and memory consolidation run locally
90
- - Memory text **never** leaves the device
91
- - No telemetry, no analytics, no remote logging
92
-
93
- ### 2. Fail-Safe by Default
94
-
95
- - Any component failure (LLM, embedder, reranker) degrades gracefully to keyword search
96
- - Malformed input never crashes the plugin or corrupts the database
97
- - Concurrent write conflicts are resolved via CAS (compare-and-swap) guards
98
-
99
- ### 3. Audit Everything
100
-
101
- - Every `autoDream` run generates a cryptographically verifiable receipt
102
- - Every memory update creates a `failure_memories` audit trail
103
- - Every search records a `recall_run` for later inspection
104
-
105
- ### 4. Human Sovereignty
106
-
107
- - All memories are mirrored to human-editable Markdown files
108
- - Machine writes vs. human edits are distinguished via digest baselines
109
- - Users can fully reconstruct the database from Markdown mirrors alone
110
-
111
- ### 5. Minimal Remote Surface
112
-
113
- - Remote API endpoints are opt-in: they require a configured `apiToken`
114
- - When a token is set, every remote request is checked with a timing-safe comparison
115
- - When no token is set, remote endpoints are effectively disabled; all processing stays local
116
-
117
- ---
118
-
119
- ## Dependency Vulnerability Handling
120
-
121
- ### Process
122
-
123
- We follow a 5-step process for handling third-party dependency vulnerabilities:
124
-
125
- | Step | Action | Timeframe | Tooling |
126
- |---|---|---|---|
127
- | 1. Scan | Continuous automated scanning of all runtime and development dependencies | Automated (daily) | OrbisAI Security, npm audit |
128
- | 2. Assess | For each detected vulnerability, assess severity, exploitability, and impact on dsh-mneme | Within 48 hours of detection | CVSS v3.1, manual code analysis |
129
- | 3. Report | Document findings in the security tracker; report to maintainers | Immediately after assessment | Security tracker, maintainer channel |
130
- | 4. Fix | Upgrade dependency to a patched version or apply mitigation | Critical: ≤ 14 days; High: ≤ 30 days; Medium/Low: next release | npm/pnpm update, manual patching |
131
- | 5. Disclose | Publish security advisory with details and fixed version | At release of fixed version | GitHub Security Advisories + npm release notes |
132
-
133
- ### Third-Party Dependency Policy
134
-
135
- - All new runtime dependencies must pass a security review before inclusion
136
- - Dependencies with known critical vulnerabilities that cannot be fixed within the timeline will be replaced with alternatives
137
- - Dependency lockfiles (`package-lock.json`) are committed and reviewed in PRs
138
-
139
- ### Recent Dependency Fixes
140
-
141
- | CVE | Package | Version (Before) | Version (After) | Severity | Fixed In |
142
- |---|---|---|---|---|---|
143
- | CVE-2026-39244 | `adm-zip` | 0.5.18 | 0.6.0 | High | v0.3.4 |
144
-
145
- ---
146
-
147
- ## Security Audit History
148
-
149
- ### v0.2.10 — Security Hardening
150
-
151
- | ID | Finding | Severity | Status |
152
- |---|---|---|---|
153
- | F-NEW-01 | Concurrent write race on `store.js` | **Critical** | ✅ Fixed (CAS guard + atomic write) |
154
- | F-NEW-02 | Transactional inconsistency during mirror sync | **High** | ✅ Fixed (transactional mirror + rollback) |
155
- | F-NEW-03 | Mirror health state not validated before overwrite | **High** | ✅ Fixed (digest baseline + FSM validation) |
156
-
157
- ### v0.3.4 — Dependency Security
158
-
159
- | CVE | Package | Severity | Status |
160
- |---|---|---|---|
161
- | CVE-2026-39244 | `adm-zip` 0.5.18 | **High** | ✅ Fixed (upgraded to 0.6.0) |
162
-
163
- ### Ongoing
164
-
165
- - Automated dependency scanning via **OrbisAI Security**
166
- - Community security reviews welcome via private advisory
167
-
168
- ---
169
-
170
- ## Security Advisory Channels
171
-
172
- Security advisories are published through the following channels simultaneously:
173
-
174
- 1. **[GitHub Security Advisories](https://github.com/modusensus/dsh-mneme/security/advisories)** — primary channel with detailed technical information
175
- 2. **[npm Releases](https://www.npmjs.com/package/@modusensus/dsh-mneme)** — release notes include security advisories and fix summaries
176
-
177
- To receive security notifications:
178
- - **GitHub**: Watch the repository and enable "Security alerts" in repository settings
179
- - **npm**: Subscribe to package release notifications for `@modusensus/dsh-mneme`
180
-
181
- ---
182
-
183
- ## Disclosure Policy
184
-
185
- We practice **coordinated disclosure**:
186
-
187
- 1. Reporter submits vulnerability privately
188
- 2. We investigate and acknowledge within 48 hours
189
- 3. We develop fix and prepare advisory (timeline based on severity)
190
- 4. We notify reporter of fix timeline and planned disclosure date
191
- 5. We release patch + publish advisory simultaneously
192
- 6. We credit the reporter (with their consent) in the advisory
193
-
194
- We do **not** pursue legal action against security researchers who:
195
- - Act in good faith
196
- - Do not exploit vulnerabilities beyond proof-of-concept
197
- - Do not access data belonging to others
198
- - Allow reasonable time for us to respond before public disclosure
199
-
200
- **Bug Bounty Policy**: This project does not currently offer monetary rewards. We provide public credit in the advisory (with the reporter's consent).
201
-
202
- ---
203
-
204
- ## Security Logs & Data Retention
205
-
206
- All audit data is stored **locally** in the plugin database and never leaves the device:
207
-
208
- | Data Type | Storage Location | Notes |
209
- |---|---|---|
210
- | `failure_memories` audit logs | Local database | Every failed write is recorded; used for forensic analysis |
211
- | `recall_run` search logs | Local database | Every search is recorded with timestamp and query metadata |
212
- | AutoDream receipts | Local database + Markdown mirror | Cryptographically verifiable; persist until user deletes them |
213
- | Dependency scan reports | OrbisAI Security dashboard | Not stored on device |
214
-
215
- Retention is user-controlled: audit records live only as long as the local database does. There is no remote logging and no telemetry.
216
-
217
- ---
218
-
219
- ## Security-Related Configuration
220
-
221
- ```yaml
222
- # Hardened configuration example (all keys below match src/config.js where applicable)
223
- dsh-mneme:
224
- # Disable autoDream if you want full manual control
225
- autoDream: false
226
-
227
- # Enable conflict freeze for sensitive environments
228
- conflictFreezeEnabled: true
229
-
230
- # Use local-only embedding (no network)
231
- embedProvider: local
232
-
233
- # Require Authorization: Bearer <apiToken> on remote endpoints (timing-safe)
234
- apiToken: "set-a-strong-unique-token"
235
-
236
- # Bump to downgrade all prior dream_runs to historical evidence
237
- policyEpoch: 1
238
-
239
- # Keep entity extraction off by default (data minimization)
240
- entityExtractionEnabled: false
241
- ```
242
-
243
- ---
244
-
245
- ## Contributor Security Guidelines
246
-
247
- All contributors must comply with the following security requirements:
248
-
249
- 1. **Dependency Audit**: Run `npm audit` before submitting a PR; newly introduced dependencies must pass security review
250
- 2. **Secret Scanning**: Never commit API keys, tokens, or credentials to the repository
251
- 3. **Input Validation**: All user inputs must be validated and sanitized (including LLM-derived content)
252
- 4. **Secure Code Review**: PRs with security-relevant changes require approval from a maintainer with security expertise
253
- 5. **Documentation**: New features must include a security impact analysis in the PR description
254
- 6. **Responsible Disclosure**: Security vulnerabilities found during development must be reported via the appropriate channel, not in public PRs
255
-
256
- ---
257
-
258
- ## Contact
259
-
260
- - **Security Team**: `guanqishi26@gmail.com`
261
- - **Private Advisory**: [GitHub Security Advisories](https://github.com/modusensus/dsh-mneme/security/advisories)
262
- - **GPG Key**: Available upon request for encrypted communication
263
-
264
- ---
265
-
266
- ## License
267
-
268
- This project is licensed under the **MIT License**. See [LICENSE](https://github.com/modusensus/dsh-mneme/blob/main/LICENSE) for details.
269
-
270
- ---
271
-
272
- # 安全策略
273
-
274
- > **中文** | [English](#security-policy)
275
-
276
- ---
277
-
278
- ## 支持版本
279
-
280
- 我们积极维护最新的 minor 版本。安全修复会 backport 到最新的 patch 版本,关键修复可能 backport 到前一个 minor 版本。
281
-
282
- | 版本 | 支持状态 | 说明 |
283
- |---|---|---|
284
- | 0.3.x | ✅ 支持 | 活跃开发中 |
285
- | 0.2.x | ⚠️ 尽力维护 | 仅关键修复 |
286
- | < 0.2.0 | ❌ 不支持 | 请升级至 0.3.x |
287
-
288
- **停止维护通知**:0.2.x 处于尽力维护阶段(仅关键修复)。停止维护的具体日期将提前公布;该日期之后将不再提供 0.2.x 的安全修复。
289
-
290
- ---
291
-
292
- ## 已知安全特性
293
-
294
- 项目已实现并维护以下安全特性:
295
-
296
- | 特性 | 描述 | 状态 |
297
- |---|---|---|
298
- | `apiToken` 鉴权 | 配置 token 后,所有远程端点需 `Authorization: Bearer <apiToken>`,比较使用 `crypto.timingSafeEqual` | ✅ 已实现 |
299
- | `policyEpoch` 记忆治理 | 提升 `policyEpoch` 后,所有先前的 `dream_runs` 降级为历史证据,其 receipt 不再驱动实时记忆决策 | ✅ 已实现 |
300
- | `conflictFreezeEnabled` 冲突冻结 | 冲突记忆不自动合并,标记为待人工复核,保护数据完整性 | ✅ 已实现 |
301
- | CAS(比较并交换)守卫 | 防止并发写入冲突,确保原子写操作 | ✅ 已实现 |
302
- | Digest 基线审计 | 记忆更新与 digest 基线比对,检测未授权修改 | ✅ 已实现 |
303
- | `failure_memories` 审计轨迹 | 每次写入失败均记录,供取证分析 | ✅ 已实现 |
304
- | `recall_run` 搜索审计 | 每次搜索操作均记录时间戳和查询元数据 | ✅ 已实现 |
305
- | 本地优先数据处理 | embedding、rerank、记忆整理均在本地完成,数据不离开设备 | ✅ 已实现 |
306
- | 无遥测 | 无分析、无远程日志,设计上无网络请求 | ✅ 已实现 |
307
- | 查询净化 | LIKE 查询转义、分页边界限制、Markdown 镜像转义,防止注入和畸形输入 | ✅ 已实现 |
308
- | `entityExtractionEnabled` 实体抽取 Opt-In | 实体抽取为配置项、默认关闭(数据最小化原则) | ✅ 已实现 |
309
- | 优雅降级 | 组件故障时自动回退至关键词搜索,不崩溃 | ✅ 已实现 |
310
- | 人工可编辑镜像 | 所有记忆镜像至 Markdown 文件,用户可验证和重建数据 | ✅ 已实现 |
311
-
312
- ---
313
-
314
- ## 报告漏洞
315
-
316
- ### 请不要
317
-
318
- - 在公开 issue 中披露安全漏洞
319
- - 在讨论区或评论中发布漏洞利用细节
320
- - 未经事先协调就提交暴露安全缺陷的 PR
321
-
322
- ### 请这样做
323
-
324
- 1. **发送邮件**至 `guanqishi26@gmail.com`(或通过 [GitHub 私有安全公告](https://github.com/modusensus/dsh-mneme/security/advisories) 提交)
325
- 2. 邮件内容请包含:
326
- - 漏洞的清晰描述
327
- - 复现步骤(优先提供最小测试用例)
328
- - 影响评估(数据泄露?仅本地?远程?)
329
- - 受影响的版本
330
- - 你建议的修复方案(如有)
331
- - 是否要求在公告中署名 / 披露偏好
332
-
333
- ### 响应时间线
334
-
335
- | 阶段 | 时间 | 行动 |
336
- |---|---|---|
337
- | 确认收到 | 48 小时内 | 我们确认收到并分配追踪 ID |
338
- | 初步评估 | 7 天内 | 我们验证严重程度和影响范围;可能需要更多信息 |
339
- | 修复开发 | 按严重程度 | 严重:≤ 14 天;高:≤ 30 天;中/低:下个版本 |
340
- | 验证与测试 | 修复完成后 1–3 天 | 对补丁进行回归测试和安全测试 |
341
- | 协调披露 | 修复发布时 | 同时发布安全公告和补丁版本 |
342
-
343
- **备注**:对于严重漏洞,如果 14 天内无法提供完整修复,我们将在该时间内提供临时缓解措施或替代方案。
344
-
345
- ### 严重程度分级
346
-
347
- 我们遵循 [CVSS v3.1](https://www.first.org/cvss/v3.1/specification-document) 标准:
348
-
349
- - **严重** (9.0–10.0):远程代码执行、未授权数据外泄、核心安全控制绕过
350
- - **高** (7.0–8.9):本地权限提升、重大数据完整性破坏、高影响 DoS
351
- - **中** (4.0–6.9):特定条件下的信息泄露、部分控制绕过
352
- - **低** (0.1–3.9):轻微信息泄露、纵深防御改进
353
-
354
- ---
355
-
356
- ## 安全设计原则
357
-
358
- ### 1. 本地优先,零网络
359
-
360
- - 所有 embedding、rerank、记忆整理均在本地运行
361
- - 记忆文本**永不**离开设备
362
- - 无遥测、无分析、无远程日志
363
-
364
- ### 2. 默认 Fail-Safe
365
-
366
- - 任何组件故障(LLM、embedder、reranker)均优雅降级到关键词搜索
367
- - 畸形输入不会导致插件崩溃或数据库损坏
368
- - 并发写入冲突通过 CAS(比较并交换)守卫解决
369
-
370
- ### 3. 全面审计
371
-
372
- - 每次 `autoDream` 运行生成密码学可验证的 receipt
373
- - 每次记忆更新创建 `failure_memories` 审计轨迹
374
- - 每次搜索记录 `recall_run` 供后续检查
375
-
376
- ### 4. 人类主权
377
-
378
- - 所有记忆镜像到人类可编辑的 Markdown 文件
379
- - 机器写入 vs 人工编辑通过 digest 基线区分
380
- - 用户可仅凭 Markdown 镜像完整重建数据库
381
-
382
- ### 5. 最小远程暴露面
383
-
384
- - 远程 API 端点为可选:需配置 `apiToken` 才生效
385
- - 配置 token 后,每个远程请求均经过 timing-safe 比较
386
- - 未配置 token 时,远程端点实际处于禁用状态,所有处理均在本地
387
-
388
- ---
389
-
390
- ## 依赖漏洞处理
391
-
392
- ### 处理流程
393
-
394
- 我们采用 5 步流程处理第三方依赖漏洞:
395
-
396
- | 步骤 | 行动 | 时间要求 | 工具 |
397
- |---|---|---|---|
398
- | 1. 扫描 | 对所有运行时和开发依赖进行持续自动扫描 | 自动(每日) | OrbisAI Security、npm audit |
399
- | 2. 评估 | 对每个检测到的漏洞评估严重程度、可利用性和对 dsh-mneme 的影响 | 检测后 48 小时内 | CVSS v3.1、人工代码分析 |
400
- | 3. 上报 | 将发现记录到安全追踪器,并上报给维护者 | 评估后立即 | 安全追踪器、维护者通道 |
401
- | 4. 修复 | 升级依赖至已修复版本或应用缓解措施 | 严重:≤ 14 天;高:≤ 30 天;中/低:下个版本 | npm/pnpm 更新、手动补丁 |
402
- | 5. 披露 | 发布包含详情和已修复版本的安全公告 | 修复版本发布时 | GitHub Security Advisories + npm 发布说明 |
403
-
404
- ### 第三方依赖政策
405
-
406
- - 所有新增运行时依赖需通过安全审查后方可引入
407
- - 存在已知严重漏洞且在期限内无法修复的依赖将被替换为替代方案
408
- - 依赖锁文件(`package-lock.json`)已提交并在 PR 中审查
409
-
410
- ### 近期依赖修复
411
-
412
- | CVE | 包 | 修复前版本 | 修复后版本 | 严重程度 | 修复版本 |
413
- |---|---|---|---|---|---|
414
- | CVE-2026-39244 | `adm-zip` | 0.5.18 | 0.6.0 | 高 | v0.3.4 |
415
-
416
- ---
417
-
418
- ## 安全审计历史
419
-
420
- ### v0.2.10 — 安全加固
421
-
422
- | ID | 发现 | 严重程度 | 状态 |
423
- |---|---|---|---|
424
- | F-NEW-01 | `store.js` 并发写入竞态 | **严重** | ✅ 已修复(CAS 守卫 + 原子写入) |
425
- | F-NEW-02 | 镜像同步期间事务不一致 | **高** | ✅ 已修复(事务化镜像 + 回滚) |
426
- | F-NEW-03 | 覆盖前未验证镜像健康状态 | **高** | ✅ 已修复(digest 基线 + FSM 验证) |
427
-
428
- ### v0.3.4 — 依赖安全
429
-
430
- | CVE | 包 | 严重程度 | 状态 |
431
- |---|---|---|---|
432
- | CVE-2026-39244 | `adm-zip` 0.5.18 | **高** | ✅ 已修复(升级至 0.6.0) |
433
-
434
- ### 持续进行
435
-
436
- - 通过 **OrbisAI Security** 进行自动化依赖扫描
437
- - 欢迎社区通过私有公告提交安全审查
438
-
439
- ---
440
-
441
- ## 安全公告渠道
442
-
443
- 安全公告通过以下渠道同时发布:
444
-
445
- 1. **[GitHub Security Advisories](https://github.com/modusensus/dsh-mneme/security/advisories)** — 主要渠道,包含详细技术信息
446
- 2. **[npm Releases](https://www.npmjs.com/package/@modusensus/dsh-mneme)** — 发布说明中包含安全公告和修复摘要
447
-
448
- 接收安全通知方式:
449
- - **GitHub**:Watch 仓库并在仓库设置中启用“安全警报”
450
- - **npm**:订阅 `@modusensus/dsh-mneme` 的发布通知
451
-
452
- ---
453
-
454
- ## 披露政策
455
-
456
- 我们实行**协调披露**:
457
-
458
- 1. 报告者私下提交漏洞
459
- 2. 我们在 48 小时内确认收到
460
- 3. 我们开发修复并准备公告(时间取决于严重程度)
461
- 4. 我们通知报告者修复时间线和计划披露日期
462
- 5. 我们同时发布补丁和安全公告
463
- 6. 我们在公告中致谢报告者(经其同意)
464
-
465
- 我们**不会**对以下安全研究人员采取法律行动:
466
- - 出于善意行事
467
- - 不将漏洞利用超出概念验证范围
468
- - 不访问属于他人的数据
469
- - 在公开披露前给予我们合理的响应时间
470
-
471
- **漏洞赏金政策**:本项目目前不提供经济奖励。我们会在公告中公开致谢报告者(经其同意)。
472
-
473
- ---
474
-
475
- ## 安全日志与数据保留
476
-
477
- 所有审计数据**本地**存储于插件数据库,不离开设备:
478
-
479
- | 数据类型 | 存储位置 | 说明 |
480
- |---|---|---|
481
- | `failure_memories` 审计日志 | 本地数据库 | 每次写入失败均记录,供取证分析 |
482
- | `recall_run` 搜索日志 | 本地数据库 | 每次搜索均记录时间戳和查询元数据 |
483
- | AutoDream receipts | 本地数据库 + Markdown 镜像 | 密码学可验证;保留至用户删除 |
484
- | 依赖扫描报告 | OrbisAI Security 控制台 | 不存储于设备 |
485
-
486
- 保留期由用户控制:审计记录仅随本地数据库存续。无远程日志、无遥测。
487
-
488
- ---
489
-
490
- ## 安全相关配置
491
-
492
- ```yaml
493
- # 加固配置示例(键均对应 src/config.js 实际配置,除注明外)
494
- dsh-mneme:
495
- # 如需完全手动控制,可禁用 autoDream
496
- autoDream: false
497
-
498
- # 敏感环境启用冲突冻结
499
- conflictFreezeEnabled: true
500
-
501
- # 仅使用本地 embedding(无网络)
502
- embedProvider: local
503
-
504
- # 远程端点需 Authorization: Bearer <apiToken>(timing-safe)
505
- apiToken: "set-a-strong-unique-token"
506
-
507
- # 提升以将先前的 dream_runs 降级为历史证据
508
- policyEpoch: 1
509
-
510
- # 实体抽取默认关闭(数据最小化)
511
- entityExtractionEnabled: false
512
- ```
513
-
514
- ---
515
-
516
- ## 贡献者安全指南
517
-
518
- 所有贡献者必须遵守以下安全要求:
519
-
520
- 1. **依赖审计**:提交 PR 前运行 `npm audit`;新增依赖必须通过安全审查
521
- 2. **密钥扫描**:禁止向仓库提交 API 密钥、令牌或凭据
522
- 3. **输入验证**:所有用户输入必须验证和净化(包括 LLM 相关内容)
523
- 4. **安全代码审查**:涉及安全相关变更的 PR 需获得具有安全专业知识维护者的批准
524
- 5. **文档记录**:新功能必须在 PR 描述中包含安全影响分析
525
- 6. **负责任的披露**:开发过程中发现的安全漏洞必须通过适当渠道报告,而非在公开 PR 中提交
526
-
527
- ---
528
-
529
- ## 联系方式
530
-
531
- - **安全团队**:`guanqishi26@gmail.com`
532
- - **私有公告**:[GitHub Security Advisories](https://github.com/modusensus/dsh-mneme/security/advisories)
533
- - **GPG 密钥**:如需加密通信,可应请求提供
534
-
535
- ---
536
-
537
- ## 许可协议
538
-
539
- 本项目基于 **MIT License** 开源。详见 [LICENSE](https://github.com/modusensus/dsh-mneme/blob/main/LICENSE)。
540
-
541
- ---
542
-
543
- *Last updated: 2026-08-16*
544
- *Policy version: 2.1*