@remnic/core 9.54.4 → 9.54.5

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 (526) hide show
  1. package/dist/access-admin-ops-surface.d.ts +12 -11
  2. package/dist/access-admin-ops-surface.js +46 -44
  3. package/dist/access-authorization-probe.d.ts +12 -11
  4. package/dist/access-authorization-probe.js +47 -45
  5. package/dist/access-boundary.d.ts +12 -11
  6. package/dist/access-boundary.js +46 -44
  7. package/dist/access-cli.js +92 -90
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +12 -11
  11. package/dist/access-extraction-force-flush.js +46 -44
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +12 -11
  14. package/dist/access-http-lifecycle-flush.d.ts +12 -11
  15. package/dist/access-http-offline-stream.d.ts +12 -11
  16. package/dist/access-http-query.js +46 -44
  17. package/dist/access-http.d.ts +12 -11
  18. package/dist/access-http.js +56 -54
  19. package/dist/access-identity-continuity-surface.d.ts +9 -9
  20. package/dist/access-identity-continuity-surface.js +46 -44
  21. package/dist/access-lcm-surface.d.ts +12 -11
  22. package/dist/access-lcm-surface.js +46 -44
  23. package/dist/access-mcp.d.ts +12 -11
  24. package/dist/access-mcp.js +52 -50
  25. package/dist/access-memory-search-fanout.d.ts +22 -2
  26. package/dist/access-memory-search-fanout.js +1 -1
  27. package/dist/{access-namespace-preflight-C7n4tgWC.d.ts → access-namespace-preflight-BdHlGd_T.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +46 -44
  30. package/dist/access-observe-write-surface.d.ts +12 -11
  31. package/dist/access-observe-write-surface.js +46 -44
  32. package/dist/access-offline-manifest.d.ts +10 -9
  33. package/dist/access-offline-manifest.js +12 -10
  34. package/dist/access-operations-batch.js +48 -46
  35. package/dist/access-operations.d.ts +15 -14
  36. package/dist/access-operations.js +51 -49
  37. package/dist/access-recall-concurrency.d.ts +12 -11
  38. package/dist/access-recall-concurrency.js +46 -44
  39. package/dist/access-recall-response.d.ts +12 -11
  40. package/dist/access-recall-response.js +46 -44
  41. package/dist/access-recall-surface.d.ts +12 -11
  42. package/dist/access-recall-surface.js +46 -44
  43. package/dist/access-schema.d.ts +90 -90
  44. package/dist/access-schema.js +3 -2
  45. package/dist/{access-service-CXvbxLK-.d.ts → access-service-DL7X9hrg.d.ts} +7 -7
  46. package/dist/access-service-helpers.d.ts +12 -11
  47. package/dist/access-service.d.ts +12 -11
  48. package/dist/access-service.js +46 -44
  49. package/dist/access-surface-catalog.d.ts +12 -11
  50. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  51. package/dist/action-confidence.d.ts +1 -1
  52. package/dist/active-memory-bridge.d.ts +13 -1
  53. package/dist/active-memory-bridge.js +6 -1
  54. package/dist/active-recall.d.ts +1 -1
  55. package/dist/active-recall.js +3 -2
  56. package/dist/active-recall.js.map +1 -1
  57. package/dist/adapters/index.js +4 -4
  58. package/dist/adapters/registry.js +2 -2
  59. package/dist/ambient-provenance.d.ts +1 -1
  60. package/dist/artifact-search.d.ts +1 -1
  61. package/dist/behavior-learner.d.ts +1 -1
  62. package/dist/behavior-signals.d.ts +1 -1
  63. package/dist/bootstrap.d.ts +9 -9
  64. package/dist/briefing.d.ts +2 -2
  65. package/dist/briefing.js +30 -9
  66. package/dist/buffer-surprise-report.d.ts +1 -1
  67. package/dist/buffer-turn-helpers.d.ts +1 -1
  68. package/dist/buffer.d.ts +2 -2
  69. package/dist/buffer.js +3 -3
  70. package/dist/bulk-import/index.d.ts +3 -3
  71. package/dist/calibration.d.ts +1 -1
  72. package/dist/capabilities.d.ts +1 -1
  73. package/dist/{catalog-BOOxl-I2.d.ts → catalog-B90is4d8.d.ts} +1 -1
  74. package/dist/causal-behavior.d.ts +1 -1
  75. package/dist/causal-consolidation.d.ts +1 -1
  76. package/dist/causal-consolidation.js +31 -10
  77. package/dist/causal-consolidation.js.map +1 -1
  78. package/dist/causal-trajectory-graph.d.ts +1 -1
  79. package/dist/{chunk-6LAPLZOS.js → chunk-2DD6ZHOM.js} +8 -3
  80. package/dist/chunk-2DD6ZHOM.js.map +1 -0
  81. package/dist/{chunk-47P3RYZP.js → chunk-2INWPC6E.js} +2 -2
  82. package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
  83. package/dist/chunk-2LWQSV6A.js.map +1 -0
  84. package/dist/{chunk-7BZOBA5J.js → chunk-2PNXOQ4P.js} +69 -11
  85. package/dist/chunk-2PNXOQ4P.js.map +1 -0
  86. package/dist/{chunk-WOPA3SGI.js → chunk-3OTSVCPK.js} +8 -8
  87. package/dist/{chunk-PX2LSHYM.js → chunk-3SXLD5T3.js} +3 -3
  88. package/dist/{chunk-T2JHZWH6.js → chunk-3WGI7F4V.js} +237 -93
  89. package/dist/chunk-3WGI7F4V.js.map +1 -0
  90. package/dist/{chunk-C4ZNGVK3.js → chunk-5JKUSBMX.js} +2 -2
  91. package/dist/{chunk-S75M5ZRK.js → chunk-6LEIWWAF.js} +16 -1
  92. package/dist/chunk-6LEIWWAF.js.map +1 -0
  93. package/dist/{chunk-MAXVH44E.js → chunk-6NNNURLK.js} +4 -4
  94. package/dist/{chunk-LJS7KUPV.js → chunk-6PZGKGAO.js} +2 -2
  95. package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
  96. package/dist/{chunk-CYF6WVE7.js → chunk-7HG7MGAP.js} +2688 -496
  97. package/dist/chunk-7HG7MGAP.js.map +1 -0
  98. package/dist/{chunk-CGVHPCP2.js → chunk-7Q7JWLQ4.js} +2 -2
  99. package/dist/{chunk-227UFSEQ.js → chunk-7RZJWZ46.js} +5 -5
  100. package/dist/{chunk-JBPKEARU.js → chunk-AU7Q3LSC.js} +4 -4
  101. package/dist/{chunk-PDDTI7IC.js → chunk-B4T3FQMT.js} +1 -1
  102. package/dist/{chunk-UU3G6GUP.js → chunk-BIF4SHMD.js} +1 -1
  103. package/dist/{chunk-UU3G6GUP.js.map → chunk-BIF4SHMD.js.map} +1 -1
  104. package/dist/{chunk-APPFNGX6.js → chunk-BSXGTDVJ.js} +2 -2
  105. package/dist/{chunk-4IIFL7GC.js → chunk-CLKBV3Z3.js} +10 -10
  106. package/dist/{chunk-ZYLC7NFO.js → chunk-CSY44OKU.js} +4 -4
  107. package/dist/{chunk-HLYR2TQL.js → chunk-CUTFSLSD.js} +2 -2
  108. package/dist/{chunk-RDJRFDJY.js → chunk-DBY26JJJ.js} +2 -2
  109. package/dist/{chunk-QWGE2PUH.js → chunk-DDA55IVB.js} +10 -10
  110. package/dist/{chunk-VMMQDEN5.js → chunk-DN2IDKI5.js} +2 -2
  111. package/dist/{chunk-2GFK22OZ.js → chunk-DOOWFDWN.js} +2 -2
  112. package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
  113. package/dist/{chunk-YGLY6QFV.js → chunk-F2Y6I74C.js} +2 -2
  114. package/dist/{chunk-UU7TRFNE.js → chunk-FFEBSFVT.js} +2 -2
  115. package/dist/chunk-HNDIND7P.js +331 -0
  116. package/dist/chunk-HNDIND7P.js.map +1 -0
  117. package/dist/{chunk-NIS256NW.js → chunk-JKW663ZN.js} +2 -2
  118. package/dist/{chunk-G7A5HLUS.js → chunk-KJH6W2I7.js} +2 -2
  119. package/dist/{chunk-IXEBUYO4.js → chunk-KM55SMLG.js} +11 -2
  120. package/dist/{chunk-IXEBUYO4.js.map → chunk-KM55SMLG.js.map} +1 -1
  121. package/dist/{chunk-G2LUMAUF.js → chunk-L7RTUEDG.js} +12 -5
  122. package/dist/chunk-L7RTUEDG.js.map +1 -0
  123. package/dist/chunk-LC2BDILZ.js +57 -0
  124. package/dist/chunk-LC2BDILZ.js.map +1 -0
  125. package/dist/{chunk-JV5YUBIZ.js → chunk-LC3FD4BV.js} +52 -46
  126. package/dist/chunk-LC3FD4BV.js.map +1 -0
  127. package/dist/{chunk-HWRD23DW.js → chunk-LVKYLMSM.js} +3 -3
  128. package/dist/{chunk-RUMNY5DT.js → chunk-MRGJZ75M.js} +6 -2
  129. package/dist/chunk-MRGJZ75M.js.map +1 -0
  130. package/dist/{chunk-ZMYDYNI4.js → chunk-N7CXQ5TA.js} +4 -4
  131. package/dist/{chunk-3JLPGJ43.js → chunk-NGT35IGQ.js} +5 -5
  132. package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
  133. package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
  134. package/dist/{chunk-WM65LU67.js → chunk-QOQQMVR2.js} +2 -2
  135. package/dist/{chunk-QHFV6VNU.js → chunk-QPAQSG3F.js} +2 -2
  136. package/dist/{chunk-UTRO5UJU.js → chunk-QPW3PAIH.js} +5 -1
  137. package/dist/chunk-QPW3PAIH.js.map +1 -0
  138. package/dist/{chunk-6R4G7N4S.js → chunk-QQXWFDRD.js} +128 -74
  139. package/dist/chunk-QQXWFDRD.js.map +1 -0
  140. package/dist/{chunk-UES4BHA2.js → chunk-QTO6BMQZ.js} +2 -2
  141. package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
  142. package/dist/{chunk-QT2FRYI4.js → chunk-RG426DJO.js} +2 -2
  143. package/dist/{chunk-XUAMCLY4.js → chunk-TKFGFDPJ.js} +17 -13
  144. package/dist/chunk-TKFGFDPJ.js.map +1 -0
  145. package/dist/{chunk-VKXWK44Q.js → chunk-TY6MKIWP.js} +3 -3
  146. package/dist/{chunk-AZM4CCAC.js → chunk-UWJNKGBA.js} +5 -5
  147. package/dist/{chunk-JDZPNCMA.js → chunk-UYOXFFEY.js} +6 -3
  148. package/dist/chunk-UYOXFFEY.js.map +1 -0
  149. package/dist/{chunk-ZPJ4QSGP.js → chunk-VTU5IEKY.js} +2 -2
  150. package/dist/{chunk-RZ4XGKOJ.js → chunk-VYQ4URQB.js} +8 -8
  151. package/dist/{chunk-WDBX6VER.js → chunk-VZRFGJCH.js} +5 -5
  152. package/dist/{chunk-IBKR2TFR.js → chunk-WM5LD6AT.js} +2 -2
  153. package/dist/{chunk-K4QS7LXU.js → chunk-WZWZRZ2V.js} +2 -2
  154. package/dist/{chunk-G4T7L557.js → chunk-XKAR4RF6.js} +2 -2
  155. package/dist/{chunk-DZD576ZU.js → chunk-XSV2YDCJ.js} +2 -2
  156. package/dist/{chunk-G7Z6EENO.js → chunk-YDWPYDML.js} +4 -4
  157. package/dist/{chunk-6HPHEFXT.js → chunk-YKZLOPTC.js} +2 -2
  158. package/dist/{chunk-NH5IR2WM.js → chunk-YR65W7BV.js} +6 -2
  159. package/dist/chunk-YR65W7BV.js.map +1 -0
  160. package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
  161. package/dist/chunk-Z4N7SVVF.js.map +1 -0
  162. package/dist/{cli-DVUFIa5E.d.ts → cli-jfuZXixq.d.ts} +5 -5
  163. package/dist/cli.d.ts +14 -13
  164. package/dist/cli.js +74 -72
  165. package/dist/coding/pre-action-gate.d.ts +1 -1
  166. package/dist/compounding/engine.d.ts +2 -2
  167. package/dist/compounding/engine.js +30 -9
  168. package/dist/compounding/preference-consolidator.d.ts +1 -1
  169. package/dist/compression-optimizer.d.ts +1 -1
  170. package/dist/config.d.ts +1 -1
  171. package/dist/config.js +3 -2
  172. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  173. package/dist/connectors/codex-materialize-runner.js +30 -9
  174. package/dist/connectors/codex-materialize.d.ts +1 -1
  175. package/dist/connectors/index.d.ts +1 -1
  176. package/dist/connectors/index.js +29 -9
  177. package/dist/consolidation-provenance-check.d.ts +2 -2
  178. package/dist/consolidation-undo.d.ts +2 -2
  179. package/dist/contradiction/index.d.ts +2 -2
  180. package/dist/contradiction/index.js +3 -1
  181. package/dist/contradiction-scan-KCADHXPE.js +20 -0
  182. package/dist/converge-config.d.ts +1 -1
  183. package/dist/convergence-refresh.d.ts +2 -2
  184. package/dist/convergence-refresh.js +32 -11
  185. package/dist/conversation-index/backend.d.ts +1 -1
  186. package/dist/conversation-index/backend.js +2 -2
  187. package/dist/conversation-index/chunker.d.ts +1 -1
  188. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  189. package/dist/conversation-index/indexer.d.ts +1 -1
  190. package/dist/conversation-index/search.d.ts +1 -1
  191. package/dist/corpus-watermark.d.ts +1 -1
  192. package/dist/corpus-watermark.js +21 -20
  193. package/dist/day-summary.d.ts +1 -1
  194. package/dist/delinearize.d.ts +1 -1
  195. package/dist/dependency-propagation-config.d.ts +1 -1
  196. package/dist/{dependency-propagation-delivery-XzF76C9n.d.ts → dependency-propagation-delivery-CTDuAVJc.d.ts} +1 -1
  197. package/dist/direct-answer-wiring.d.ts +1 -1
  198. package/dist/direct-answer.d.ts +1 -1
  199. package/dist/embedding-fallback.d.ts +1 -1
  200. package/dist/enrichment/index.d.ts +1 -1
  201. package/dist/entity-retrieval.d.ts +2 -2
  202. package/dist/entity-retrieval.js +30 -9
  203. package/dist/entity-schema.d.ts +1 -1
  204. package/dist/explicit-capture.d.ts +9 -9
  205. package/dist/explicit-capture.js +6 -4
  206. package/dist/external-wiki-access.d.ts +12 -11
  207. package/dist/external-wiki-access.js +47 -45
  208. package/dist/external-wiki-collection-registration.d.ts +1 -1
  209. package/dist/external-wiki-collection.d.ts +1 -1
  210. package/dist/external-wiki-mcp-tools.d.ts +12 -11
  211. package/dist/extraction-error-classification.d.ts +1 -1
  212. package/dist/extraction-faithfulness.d.ts +1 -1
  213. package/dist/extraction-judge-telemetry.d.ts +1 -1
  214. package/dist/extraction-judge-training.d.ts +1 -1
  215. package/dist/extraction-judge.d.ts +1 -1
  216. package/dist/extraction-liveness.d.ts +1 -1
  217. package/dist/extraction-normalization.d.ts +1 -1
  218. package/dist/extraction-prompt.d.ts +1 -1
  219. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  220. package/dist/extraction-source-grounding.d.ts +1 -1
  221. package/dist/extraction.d.ts +1 -1
  222. package/dist/extraction.js +29 -13
  223. package/dist/fallback-llm.d.ts +1 -1
  224. package/dist/{first-start-migration-626C5554.js → first-start-migration-LMMZFLKK.js} +13 -5
  225. package/dist/first-start-migration-LMMZFLKK.js.map +1 -0
  226. package/dist/graph-dashboard-diff.d.ts +1 -1
  227. package/dist/graph-dashboard-key.d.ts +1 -1
  228. package/dist/graph-dashboard-parser.d.ts +1 -1
  229. package/dist/graph-edge-reinforcement.d.ts +1 -1
  230. package/dist/graph-path-reconstruction.d.ts +1 -1
  231. package/dist/graph-path-scoring.d.ts +1 -1
  232. package/dist/graph-snapshot.d.ts +1 -1
  233. package/dist/graph.d.ts +1 -1
  234. package/dist/harmonic-retrieval.js +1 -1
  235. package/dist/importance.d.ts +1 -1
  236. package/dist/importers/index.d.ts +1 -1
  237. package/dist/in-flight-reads.d.ts +1 -1
  238. package/dist/index.d.ts +1439 -716
  239. package/dist/index.js +207 -121
  240. package/dist/intent.d.ts +1 -1
  241. package/dist/lcm/engine.d.ts +1 -1
  242. package/dist/lcm/engine.js +2 -2
  243. package/dist/lcm/index.d.ts +1 -1
  244. package/dist/lcm/index.js +5 -5
  245. package/dist/lcm/tools.d.ts +1 -1
  246. package/dist/lifecycle.d.ts +1 -1
  247. package/dist/live-connectors-runner.d.ts +1 -1
  248. package/dist/local-llm.d.ts +1 -1
  249. package/dist/local-model-endpoint.d.ts +1 -1
  250. package/dist/maintenance/memory-governance.d.ts +1 -1
  251. package/dist/maintenance/memory-governance.js +30 -9
  252. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  253. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +30 -9
  254. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  255. package/dist/maintenance/rebuild-memory-projection.js +31 -10
  256. package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-heMZSq7G.d.ts} +3 -3
  257. package/dist/mcp-memory-inspector-app.d.ts +12 -11
  258. package/dist/memory-action-policy.d.ts +1 -1
  259. package/dist/memory-cache.d.ts +1 -1
  260. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  261. package/dist/memory-projection-mutations.js +2 -2
  262. package/dist/memory-projection-store.d.ts +6 -2
  263. package/dist/memory-projection-store.js +1 -1
  264. package/dist/memory-provenance.d.ts +1 -1
  265. package/dist/memory-snapshot.d.ts +1 -1
  266. package/dist/memory-worth-outcomes.d.ts +2 -2
  267. package/dist/models-json.d.ts +1 -1
  268. package/dist/namespaces/migrate.d.ts +3 -3
  269. package/dist/namespaces/migrate.js +20 -19
  270. package/dist/namespaces/principal.d.ts +1 -1
  271. package/dist/namespaces/search.d.ts +1 -1
  272. package/dist/namespaces/search.js +6 -6
  273. package/dist/namespaces/storage.d.ts +3 -3
  274. package/dist/namespaces/storage.js +30 -9
  275. package/dist/native-knowledge.d.ts +1 -1
  276. package/dist/offline-sync-file-io.d.ts +20 -0
  277. package/dist/offline-sync-file-io.js +18 -0
  278. package/dist/offline-sync-file-io.js.map +1 -0
  279. package/dist/offline-sync-impression-drain.d.ts +1 -1
  280. package/dist/offline-sync-impression-drain.js +5 -5
  281. package/dist/offline-sync.d.ts +8 -6
  282. package/dist/offline-sync.js +2 -1
  283. package/dist/operator-doctor-corpus.d.ts +1 -1
  284. package/dist/operator-doctor-corpus.js +22 -21
  285. package/dist/operator-doctor-replica.d.ts +1 -1
  286. package/dist/operator-toolkit.d.ts +3 -3
  287. package/dist/operator-toolkit.js +34 -32
  288. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  289. package/dist/orchestration/maintenance.d.ts +4 -4
  290. package/dist/orchestration/maintenance.js +35 -15
  291. package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-BQQPsSjs.d.ts} +11 -8
  292. package/dist/orchestrator.d.ts +9 -9
  293. package/dist/orchestrator.js +93 -91
  294. package/dist/patterns-cli.d.ts +1 -1
  295. package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DFfmsnGk.d.ts} +1 -1
  296. package/dist/policy-runtime.d.ts +1 -1
  297. package/dist/proactive-contention.d.ts +1 -1
  298. package/dist/provenance.d.ts +1 -1
  299. package/dist/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
  300. package/dist/{qmd-eAWObK4M.d.ts → qmd-BF5bcVRs.d.ts} +1 -1
  301. package/dist/qmd-preflight.d.ts +2 -2
  302. package/dist/qmd-recall-cache.d.ts +1 -1
  303. package/dist/qmd.d.ts +2 -2
  304. package/dist/recall-concurrency-config.d.ts +1 -1
  305. package/dist/recall-disclosure-escalation.d.ts +1 -1
  306. package/dist/recall-explain-renderer.d.ts +1 -1
  307. package/dist/recall-explain-renderer.js +3 -3
  308. package/dist/recall-memory-map.d.ts +1 -1
  309. package/dist/recall-planner-llm.d.ts +1 -1
  310. package/dist/recall-state.d.ts +1 -1
  311. package/dist/recall-tag-filter.d.ts +1 -1
  312. package/dist/recall-timings.d.ts +1 -1
  313. package/dist/recall-xray-cli.d.ts +1 -1
  314. package/dist/recall-xray-cli.js +4 -4
  315. package/dist/recall-xray-renderer.d.ts +1 -1
  316. package/dist/recall-xray-renderer.js +3 -3
  317. package/dist/recall-xray.d.ts +1 -1
  318. package/dist/recall-xray.js +2 -2
  319. package/dist/reconcile/cursor.d.ts +2 -1
  320. package/dist/reconcile/manifest.d.ts +2 -1
  321. package/dist/reconcile/manifest.js +6 -5
  322. package/dist/reconcile/plan.d.ts +2 -1
  323. package/dist/reconcile/plan.js +3 -2
  324. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  325. package/dist/replay/normalizers/claude.d.ts +1 -1
  326. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  327. package/dist/replay/normalizers/shared.d.ts +1 -1
  328. package/dist/replay/runner.d.ts +1 -1
  329. package/dist/replay/types.d.ts +1 -1
  330. package/dist/replica-divergence.d.ts +1 -1
  331. package/dist/replica-peers-config.d.ts +1 -1
  332. package/dist/resolve-auth-token.d.ts +1 -1
  333. package/dist/resume-bundles.js +4 -3
  334. package/dist/retrieval-agents.d.ts +2 -2
  335. package/dist/retrieval-tiers.d.ts +1 -1
  336. package/dist/routing/engine.d.ts +1 -1
  337. package/dist/routing/store.d.ts +1 -1
  338. package/dist/salvage-envelope.d.ts +1 -1
  339. package/dist/schemas.d.ts +138 -138
  340. package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-CbUOsE_E.d.ts} +1 -1
  341. package/dist/search/embed-helper.d.ts +1 -1
  342. package/dist/search/factory.d.ts +1 -1
  343. package/dist/search/factory.js +4 -4
  344. package/dist/search/index.d.ts +1 -1
  345. package/dist/search/index.js +6 -6
  346. package/dist/search/lancedb-backend.d.ts +1 -1
  347. package/dist/search/meilisearch-backend.d.ts +1 -1
  348. package/dist/search/noop-backend.d.ts +1 -1
  349. package/dist/search/orama-backend.d.ts +1 -1
  350. package/dist/search/port.d.ts +1 -1
  351. package/dist/search/remote-backend.d.ts +1 -1
  352. package/dist/{semantic-consolidation-HD8RkzVA.d.ts → semantic-consolidation-DAB3xdKM.d.ts} +1 -1
  353. package/dist/semantic-consolidation.d.ts +2 -2
  354. package/dist/semantic-consolidation.js +31 -10
  355. package/dist/semantic-rule-promotion.js +30 -9
  356. package/dist/semantic-rule-verifier.d.ts +1 -1
  357. package/dist/semantic-rule-verifier.js +30 -9
  358. package/dist/{service-DIrtHHEg.d.ts → service-DGKg2O6r.d.ts} +2 -2
  359. package/dist/session-observer-bands.d.ts +1 -1
  360. package/dist/session-observer-state.d.ts +1 -1
  361. package/dist/shared-context/manager.d.ts +9 -9
  362. package/dist/signal.d.ts +1 -1
  363. package/dist/source-agent-qualifier.d.ts +1 -1
  364. package/dist/source-agent-qualifier.js +28 -12
  365. package/dist/{storage-DqCzXi56.d.ts → storage-CC1jKcWg.d.ts} +46 -13
  366. package/dist/storage.d.ts +2 -2
  367. package/dist/storage.js +30 -9
  368. package/dist/summarizer.d.ts +1 -1
  369. package/dist/summary-snapshot.d.ts +1 -1
  370. package/dist/temporal-supersession.d.ts +2 -2
  371. package/dist/temporal-timeline-recall.d.ts +1 -1
  372. package/dist/temporal-validity.d.ts +1 -1
  373. package/dist/threading.d.ts +1 -1
  374. package/dist/tier-migration.d.ts +2 -2
  375. package/dist/tier-routing.d.ts +2 -2
  376. package/dist/tier-routing.js +7 -1
  377. package/dist/{tier-stats-2JCZYEF7.js → tier-stats-JDN6HRNT.js} +8 -2
  378. package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-JDN6HRNT.js.map} +1 -1
  379. package/dist/topics.d.ts +1 -1
  380. package/dist/transcript.d.ts +1 -1
  381. package/dist/transfer/types.d.ts +66 -66
  382. package/dist/trust-score-stage.d.ts +1 -1
  383. package/dist/trust-score.d.ts +1 -1
  384. package/dist/{types-d_j4vC6N.d.ts → types-BnQza1y8.d.ts} +2 -1
  385. package/dist/types.d.ts +1 -1
  386. package/dist/types.js +1 -1
  387. package/dist/utility-runtime.d.ts +2 -2
  388. package/dist/verified-recall.js +30 -9
  389. package/dist/write-envelope.d.ts +1 -1
  390. package/package.json +2 -2
  391. package/src/access-http.test.ts +31 -0
  392. package/src/access-memory-search-fanout.ts +24 -1
  393. package/src/access-offline-manifest.ts +5 -0
  394. package/src/access-service-namespace.test.ts +14 -0
  395. package/src/access-service-observe-scope.test.ts +2 -0
  396. package/src/access-service-offline-file-content.test.ts +211 -0
  397. package/src/access-service.ts +20 -43
  398. package/src/active-memory-bridge.test.ts +151 -0
  399. package/src/active-memory-bridge.ts +87 -11
  400. package/src/briefing.test.ts +38 -0
  401. package/src/briefing.ts +3 -3
  402. package/src/cli.ts +6 -1
  403. package/src/connectors/codex-materialize-runner.ts +2 -0
  404. package/src/contradiction/contradiction-scan.ts +2 -0
  405. package/src/contradiction/contradiction.test.ts +42 -0
  406. package/src/correction/correction-access-wiring.ts +8 -2
  407. package/src/correction/correction-storage-integration.test.ts +7 -0
  408. package/src/explicit-capture.test.ts +24 -0
  409. package/src/explicit-capture.ts +2 -0
  410. package/src/index.ts +3 -0
  411. package/src/maintenance/first-start-migration.ts +2 -1
  412. package/src/maintenance/memory-governance.test.ts +25 -0
  413. package/src/maintenance/memory-governance.ts +4 -1
  414. package/src/maintenance/pattern-reinforcement.test.ts +20 -0
  415. package/src/maintenance/pattern-reinforcement.ts +2 -1
  416. package/src/maintenance/rebuild-memory-projection.ts +8 -8
  417. package/src/memory-projection-store.ts +25 -27
  418. package/src/offline-sync-file-io.ts +68 -0
  419. package/src/offline-sync.ts +43 -57
  420. package/src/orchestration/consolidation-run.ts +5 -4
  421. package/src/orchestration/contradiction-linking-coordinator.ts +7 -0
  422. package/src/orchestration/contradiction-localization.integration.test.ts +115 -0
  423. package/src/orchestration/lifecycle-policy-coordinator.ts +2 -1
  424. package/src/orchestration/qmd-result-resolver.test.ts +215 -14
  425. package/src/orchestration/qmd-result-resolver.ts +142 -82
  426. package/src/orchestration/recall-search-pipeline.test.ts +41 -0
  427. package/src/orchestration/recall-search-pipeline.ts +12 -0
  428. package/src/orchestration/semantic-consolidation-coordinator.ts +2 -1
  429. package/src/orchestration/tier-migration-coordinator.ts +23 -56
  430. package/src/orchestration/workspace-ops.test.ts +37 -0
  431. package/src/orchestration/workspace-ops.ts +5 -29
  432. package/src/orchestrator.ts +7 -8
  433. package/src/storage/supersession-audit.ts +7 -1
  434. package/src/storage/supersession-side-effects.ts +17 -5
  435. package/src/storage.ts +18 -19
  436. package/src/support-passport/card-projection.test.ts +129 -0
  437. package/src/support-passport/card-projection.ts +287 -0
  438. package/src/support-passport/card-service.test.ts +2462 -0
  439. package/src/support-passport/card-service.ts +1042 -0
  440. package/src/support-passport/contracts.test.ts +143 -0
  441. package/src/support-passport/contracts.ts +136 -0
  442. package/src/support-passport/errors.ts +24 -0
  443. package/src/support-passport/grant-contracts.ts +139 -0
  444. package/src/support-passport/grant-service-cache.test.ts +148 -0
  445. package/src/support-passport/grant-service-cancellation.test.ts +81 -0
  446. package/src/support-passport/grant-service.test.ts +2882 -0
  447. package/src/support-passport/grant-service.ts +364 -0
  448. package/src/support-passport/grant-store-commit-hook.test.ts +123 -0
  449. package/src/support-passport/grant-store-order.test.ts +60 -0
  450. package/src/support-passport/grant-store-path-safety.test.ts +30 -0
  451. package/src/support-passport/grant-store-recovery.test.ts +448 -0
  452. package/src/support-passport/grant-store.ts +902 -0
  453. package/src/support-passport/index.ts +7 -0
  454. package/src/support-passport/offline-sync-guard.ts +230 -0
  455. package/src/support-passport/owner-lock.ts +53 -0
  456. package/src/support-passport/private-file.ts +371 -0
  457. package/src/tier-routing.ts +28 -17
  458. package/src/training-export/converter.test.ts +24 -0
  459. package/src/training-export/converter.ts +2 -0
  460. package/src/types.ts +1 -1
  461. package/src/wearables/service.test.ts +13 -0
  462. package/src/wearables/service.ts +2 -0
  463. package/dist/chunk-3CSX3ETE.js.map +0 -1
  464. package/dist/chunk-6LAPLZOS.js.map +0 -1
  465. package/dist/chunk-6R4G7N4S.js.map +0 -1
  466. package/dist/chunk-7BZOBA5J.js.map +0 -1
  467. package/dist/chunk-CYF6WVE7.js.map +0 -1
  468. package/dist/chunk-G2LUMAUF.js.map +0 -1
  469. package/dist/chunk-GYPQL6XN.js.map +0 -1
  470. package/dist/chunk-JDZPNCMA.js.map +0 -1
  471. package/dist/chunk-JV5YUBIZ.js.map +0 -1
  472. package/dist/chunk-NH5IR2WM.js.map +0 -1
  473. package/dist/chunk-RUMNY5DT.js.map +0 -1
  474. package/dist/chunk-S75M5ZRK.js.map +0 -1
  475. package/dist/chunk-T2JHZWH6.js.map +0 -1
  476. package/dist/chunk-UTRO5UJU.js.map +0 -1
  477. package/dist/chunk-XUAMCLY4.js.map +0 -1
  478. package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
  479. package/dist/first-start-migration-626C5554.js.map +0 -1
  480. /package/dist/{chunk-47P3RYZP.js.map → chunk-2INWPC6E.js.map} +0 -0
  481. /package/dist/{chunk-WOPA3SGI.js.map → chunk-3OTSVCPK.js.map} +0 -0
  482. /package/dist/{chunk-PX2LSHYM.js.map → chunk-3SXLD5T3.js.map} +0 -0
  483. /package/dist/{chunk-C4ZNGVK3.js.map → chunk-5JKUSBMX.js.map} +0 -0
  484. /package/dist/{chunk-MAXVH44E.js.map → chunk-6NNNURLK.js.map} +0 -0
  485. /package/dist/{chunk-LJS7KUPV.js.map → chunk-6PZGKGAO.js.map} +0 -0
  486. /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
  487. /package/dist/{chunk-CGVHPCP2.js.map → chunk-7Q7JWLQ4.js.map} +0 -0
  488. /package/dist/{chunk-227UFSEQ.js.map → chunk-7RZJWZ46.js.map} +0 -0
  489. /package/dist/{chunk-JBPKEARU.js.map → chunk-AU7Q3LSC.js.map} +0 -0
  490. /package/dist/{chunk-PDDTI7IC.js.map → chunk-B4T3FQMT.js.map} +0 -0
  491. /package/dist/{chunk-APPFNGX6.js.map → chunk-BSXGTDVJ.js.map} +0 -0
  492. /package/dist/{chunk-4IIFL7GC.js.map → chunk-CLKBV3Z3.js.map} +0 -0
  493. /package/dist/{chunk-ZYLC7NFO.js.map → chunk-CSY44OKU.js.map} +0 -0
  494. /package/dist/{chunk-HLYR2TQL.js.map → chunk-CUTFSLSD.js.map} +0 -0
  495. /package/dist/{chunk-RDJRFDJY.js.map → chunk-DBY26JJJ.js.map} +0 -0
  496. /package/dist/{chunk-QWGE2PUH.js.map → chunk-DDA55IVB.js.map} +0 -0
  497. /package/dist/{chunk-VMMQDEN5.js.map → chunk-DN2IDKI5.js.map} +0 -0
  498. /package/dist/{chunk-2GFK22OZ.js.map → chunk-DOOWFDWN.js.map} +0 -0
  499. /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
  500. /package/dist/{chunk-YGLY6QFV.js.map → chunk-F2Y6I74C.js.map} +0 -0
  501. /package/dist/{chunk-UU7TRFNE.js.map → chunk-FFEBSFVT.js.map} +0 -0
  502. /package/dist/{chunk-NIS256NW.js.map → chunk-JKW663ZN.js.map} +0 -0
  503. /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
  504. /package/dist/{chunk-HWRD23DW.js.map → chunk-LVKYLMSM.js.map} +0 -0
  505. /package/dist/{chunk-ZMYDYNI4.js.map → chunk-N7CXQ5TA.js.map} +0 -0
  506. /package/dist/{chunk-3JLPGJ43.js.map → chunk-NGT35IGQ.js.map} +0 -0
  507. /package/dist/{chunk-GUKBW4HL.js.map → chunk-NQMSEB5D.js.map} +0 -0
  508. /package/dist/{chunk-WRJVB3C2.js.map → chunk-PO7NXBG2.js.map} +0 -0
  509. /package/dist/{chunk-WM65LU67.js.map → chunk-QOQQMVR2.js.map} +0 -0
  510. /package/dist/{chunk-QHFV6VNU.js.map → chunk-QPAQSG3F.js.map} +0 -0
  511. /package/dist/{chunk-UES4BHA2.js.map → chunk-QTO6BMQZ.js.map} +0 -0
  512. /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
  513. /package/dist/{chunk-QT2FRYI4.js.map → chunk-RG426DJO.js.map} +0 -0
  514. /package/dist/{chunk-VKXWK44Q.js.map → chunk-TY6MKIWP.js.map} +0 -0
  515. /package/dist/{chunk-AZM4CCAC.js.map → chunk-UWJNKGBA.js.map} +0 -0
  516. /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-VTU5IEKY.js.map} +0 -0
  517. /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-VYQ4URQB.js.map} +0 -0
  518. /package/dist/{chunk-WDBX6VER.js.map → chunk-VZRFGJCH.js.map} +0 -0
  519. /package/dist/{chunk-IBKR2TFR.js.map → chunk-WM5LD6AT.js.map} +0 -0
  520. /package/dist/{chunk-K4QS7LXU.js.map → chunk-WZWZRZ2V.js.map} +0 -0
  521. /package/dist/{chunk-G4T7L557.js.map → chunk-XKAR4RF6.js.map} +0 -0
  522. /package/dist/{chunk-DZD576ZU.js.map → chunk-XSV2YDCJ.js.map} +0 -0
  523. /package/dist/{chunk-G7Z6EENO.js.map → chunk-YDWPYDML.js.map} +0 -0
  524. /package/dist/{chunk-6HPHEFXT.js.map → chunk-YKZLOPTC.js.map} +0 -0
  525. /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-KCADHXPE.js.map} +0 -0
  526. /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
@@ -110,6 +110,11 @@ import {
110
110
  memorySearchThroughScope,
111
111
  } from "./access-memory-search-fanout.js";
112
112
  import { isSearchExcludedPath } from "./orchestration/generic-recall-paths.js";
113
+ import { createSupportPassportPrivateFileExclusion, isSupportPassportPrivateMemory } from "./support-passport/card-projection.js";
114
+ import {
115
+ applySupportPassportOfflineSyncChangeset,
116
+ applySupportPassportOfflineSyncFileContent,
117
+ } from "./support-passport/offline-sync-guard.js";
113
118
  import {
114
119
  buildQualityScore,
115
120
  buildProposedActions,
@@ -281,9 +286,7 @@ import {
281
286
  type CapsuleListEntry,
282
287
  } from "./capsule-cli.js";
283
288
  import {
284
- applyOfflineSyncFileContentChunk,
285
289
  compileOfflineSyncExcludeGlobs,
286
- applyOfflineSyncChangeset,
287
290
  buildOfflineSyncSnapshot,
288
291
  buildOfflineSyncSnapshotFromBase,
289
292
  buildOfflineSyncSnapshotForPaths,
@@ -3000,9 +3003,7 @@ export class EngramAccessService {
3000
3003
  const resolvedNamespace = this.resolveReadableNamespace(namespace, principal);
3001
3004
  const storage = await this.orchestrator.getStorage(resolvedNamespace);
3002
3005
  const memory = await storage.getMemoryById(resolvedId);
3003
- if (!memory) {
3004
- return { found: false, namespace: resolvedNamespace };
3005
- }
3006
+ if (!memory || isSupportPassportPrivateMemory(memory)) return { found: false, namespace: resolvedNamespace };
3006
3007
  return {
3007
3008
  found: true,
3008
3009
  namespace: resolvedNamespace,
@@ -3371,6 +3372,7 @@ export class EngramAccessService {
3371
3372
  query,
3372
3373
  status: statusFilter,
3373
3374
  category: categoryFilter,
3375
+ excludePrivateRecords: true,
3374
3376
  sort,
3375
3377
  limit,
3376
3378
  offset,
@@ -3389,6 +3391,7 @@ export class EngramAccessService {
3389
3391
 
3390
3392
  let memories = [...await storage.readAllMemories(), ...await storage.readArchivedMemories()];
3391
3393
  memories = memories.filter((memory) => {
3394
+ if (isSupportPassportPrivateMemory(memory)) return false;
3392
3395
  const status = inferMemoryStatus(memory.frontmatter, toMemoryPathRel(storage.dir, memory.path)).toLowerCase();
3393
3396
  if (statusFilter && status !== statusFilter) return false;
3394
3397
  if (categoryFilter && memory.frontmatter.category.toLowerCase() !== categoryFilter) return false;
@@ -3427,6 +3430,8 @@ export class EngramAccessService {
3427
3430
  ): Promise<EngramAccessTimelineResponse> {
3428
3431
  const resolvedNamespace = this.resolveReadableNamespace(namespace, principal);
3429
3432
  const storage = await this.orchestrator.getStorage(resolvedNamespace);
3433
+ const memory = await storage.getMemoryByIdIncludingArchived(memoryId);
3434
+ if (!memory || isSupportPassportPrivateMemory(memory)) return { found: false, namespace: resolvedNamespace, count: 0, timeline: [] };
3430
3435
  const timeline = await storage.getMemoryTimeline(memoryId, limit);
3431
3436
  return {
3432
3437
  found: timeline.length > 0,
@@ -3918,7 +3923,7 @@ export class EngramAccessService {
3918
3923
  );
3919
3924
  const storage = await this.orchestrator.getStorage(resolvedNamespace);
3920
3925
  const memory = await storage.getMemoryById(memoryId);
3921
- if (!memory) {
3926
+ if (!memory || isSupportPassportPrivateMemory(memory)) {
3922
3927
  throw new EngramAccessInputError(`memory not found: ${memoryId}`);
3923
3928
  }
3924
3929
 
@@ -4546,8 +4551,6 @@ export class EngramAccessService {
4546
4551
  );
4547
4552
  }
4548
4553
 
4549
- // ── Shared Context / Compounding ────────────────────────────────────────
4550
-
4551
4554
  async sharedContextWriteOutput(request: {
4552
4555
  agentId: string;
4553
4556
  title: string;
@@ -4678,8 +4681,6 @@ export class EngramAccessService {
4678
4681
  });
4679
4682
  }
4680
4683
 
4681
- // ── Compression Guidelines ────────────────────────────────────────────
4682
-
4683
4684
  async compressionGuidelinesOptimize(request: {
4684
4685
  dryRun?: boolean;
4685
4686
  eventLimit?: number;
@@ -4705,7 +4706,6 @@ export class EngramAccessService {
4705
4706
  expectedGuidelineVersion: request.expectedGuidelineVersion,
4706
4707
  });
4707
4708
  }
4708
- // ── Memory search & debug ─────────────────────────────────────────────
4709
4709
 
4710
4710
  async memorySearch(request: {
4711
4711
  query: string;
@@ -4719,6 +4719,7 @@ export class EngramAccessService {
4719
4719
  return memorySearchThroughScope(
4720
4720
  {
4721
4721
  namespacesEnabled: resolveNamespaceCapabilities(config).namespaces,
4722
+ memoryCollections: [config.qmdCollection, config.qmdColdCollection ?? "openclaw-engram-cold"],
4722
4723
  // `0` is preserved, never coerced: a zero limit is a runtime
4723
4724
  // compatibility guarantee (AGENTS.md guardrail 4), and it means the
4724
4725
  // same thing here as an explicit `maxResults: 0` from the caller - an
@@ -4736,9 +4737,8 @@ export class EngramAccessService {
4736
4737
  { ...config, requestedCollection: request.collection?.trim() || undefined },
4737
4738
  "qmd",
4738
4739
  ),
4739
- authorizeFlatCorpus: (namespace, principal) => {
4740
- this.resolveReadableNamespace(namespace, principal);
4741
- },
4740
+ filterPrivate: this.orchestrator.filterPrivateSearchResults,
4741
+ authorizeFlatCorpus: (namespace, principal) => void this.resolveReadableNamespace(namespace, principal),
4742
4742
  authorizeNamespaces: async (namespace, principal, collection) =>
4743
4743
  this.resolveMemorySearchNamespacesForCollection(
4744
4744
  collection,
@@ -5483,6 +5483,7 @@ export class EngramAccessService {
5483
5483
  signal: options.signal,
5484
5484
  userExcludeRegexps: this.offlineSyncUserExcludes,
5485
5485
  deletions,
5486
+ excludeFile: createSupportPassportPrivateFileExclusion(storage),
5486
5487
  });
5487
5488
  return {
5488
5489
  namespace: resolvedNamespace,
@@ -5519,6 +5520,7 @@ export class EngramAccessService {
5519
5520
  readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
5520
5521
  signal: options.signal,
5521
5522
  userExcludeRegexps: this.offlineSyncUserExcludes,
5523
+ excludeFile: createSupportPassportPrivateFileExclusion(storage),
5522
5524
  }),
5523
5525
  };
5524
5526
  }
@@ -5551,6 +5553,7 @@ export class EngramAccessService {
5551
5553
  includeTranscripts: options.includeTranscripts !== false,
5552
5554
  readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
5553
5555
  userExcludeRegexps: this.offlineSyncUserExcludes,
5556
+ excludeFile: createSupportPassportPrivateFileExclusion(storage),
5554
5557
  });
5555
5558
  return {
5556
5559
  namespace: resolvedNamespace,
@@ -5583,6 +5586,7 @@ export class EngramAccessService {
5583
5586
  includeTranscripts: options.includeTranscripts !== false,
5584
5587
  readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
5585
5588
  userExcludeRegexps: this.offlineSyncUserExcludes,
5589
+ excludeFile: createSupportPassportPrivateFileExclusion(storage),
5586
5590
  });
5587
5591
  return {
5588
5592
  namespace: resolvedNamespace,
@@ -5613,23 +5617,7 @@ export class EngramAccessService {
5613
5617
  );
5614
5618
  const storage = await this.orchestrator.getStorage(resolvedNamespace);
5615
5619
  try {
5616
- const result = await applyOfflineSyncFileContentChunk({
5617
- root: storage.dir,
5618
- sourceId: options.sourceId,
5619
- path: options.path,
5620
- sha256: options.sha256,
5621
- bytes: options.bytes,
5622
- mtimeMs: options.mtimeMs,
5623
- offset: options.offset,
5624
- baseSha256: options.baseSha256,
5625
- content: options.content,
5626
- includeTranscripts: options.includeTranscripts !== false,
5627
- readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
5628
- readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
5629
- writeFile: async ({ filePath, content }) => storage.writeOfflineSyncFile(filePath, content),
5630
- writeStagingFile: async ({ filePath, content }) => storage.writeOfflineSyncStagingFile(filePath, content),
5631
- writeFileChunks: async ({ filePath, chunks }) => storage.writeOfflineSyncFileChunks(filePath, chunks),
5632
- });
5620
+ const result = await applySupportPassportOfflineSyncFileContent(storage, options);
5633
5621
  return {
5634
5622
  namespace: resolvedNamespace,
5635
5623
  ...result,
@@ -5687,18 +5675,7 @@ export class EngramAccessService {
5687
5675
  );
5688
5676
  const storage = await this.orchestrator.getStorage(resolvedNamespace);
5689
5677
  try {
5690
- const result = await applyOfflineSyncChangeset({
5691
- root: storage.dir,
5692
- changeset: options.changeset,
5693
- returnCurrentFiles: options.returnCurrentFiles,
5694
- readFile: async ({ filePath }) => storage.readOfflineSyncFile(filePath),
5695
- readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
5696
- writeFile: async ({ filePath, content }) => storage.writeOfflineSyncFile(filePath, content),
5697
- deleteFile: async ({ filePath, mtimeMs }) =>
5698
- storage.deleteOfflineSyncFile(filePath, mtimeMs ?? null),
5699
- recordDeletionRevision: async ({ filePath, mtimeMs }) =>
5700
- storage.recordReplicatedDeletionRevision(filePath, mtimeMs),
5701
- });
5678
+ const result = await applySupportPassportOfflineSyncChangeset(storage, options);
5702
5679
  return {
5703
5680
  namespace: resolvedNamespace,
5704
5681
  ...result,
@@ -6,9 +6,12 @@ import {
6
6
  recallForActiveMemory,
7
7
  } from "./active-memory-bridge.js";
8
8
 
9
+ const keepVisibleSearchResults = async <T>(results: T[]): Promise<T[]> => results;
10
+
9
11
  test("recallForActiveMemory caps limit, truncates snippets, and strips internal scoring fields", async () => {
10
12
  const orchestrator = {
11
13
  resolveSelfNamespace: (_sessionKey?: string) => "resolved-namespace",
14
+ filterPrivateSearchResults: keepVisibleSearchResults,
12
15
  searchAcrossNamespaces: async (_params: unknown) => [
13
16
  {
14
17
  id: "mem-1",
@@ -54,6 +57,9 @@ test("recallForActiveMemory caps limit, truncates snippets, and strips internal
54
57
  test("recallForActiveMemory truncates snippets without splitting surrogate pairs", async () => {
55
58
  const orchestrator = {
56
59
  resolveSelfNamespace: () => "resolved-namespace",
60
+ getStorageForNamespace: async () => ({
61
+ getMemoryById: async () => ({ content: "emoji memory", frontmatter: {} } as never),
62
+ }),
57
63
  searchAcrossNamespaces: async () => [
58
64
  {
59
65
  id: "mem-emoji",
@@ -95,6 +101,7 @@ test("recallForActiveMemory prioritizes an explicit namespace filter over the se
95
101
  let receivedNamespaces: string[] | undefined;
96
102
  const orchestrator = {
97
103
  resolveSelfNamespace: () => "session-namespace",
104
+ filterPrivateSearchResults: keepVisibleSearchResults,
98
105
  searchAcrossNamespaces: async (params: { namespaces?: string[] }) => {
99
106
  receivedNamespaces = params.namespaces;
100
107
  return [];
@@ -165,6 +172,7 @@ test("recallForActiveMemory denies blank session keys when namespaces are enable
165
172
  test("recallForActiveMemory marks results truncated when the underlying recall exceeds the requested limit", async () => {
166
173
  const orchestrator = {
167
174
  resolveSelfNamespace: () => "session-namespace",
175
+ filterPrivateSearchResults: keepVisibleSearchResults,
168
176
  searchAcrossNamespaces: async () =>
169
177
  Array.from({ length: 3 }, (_, index) => ({
170
178
  id: `mem-${index + 1}`,
@@ -187,6 +195,7 @@ test("recallForActiveMemory marks results truncated when the underlying recall e
187
195
  test("recallForActiveMemory excludes artifact-backed hits before applying the visible result cap", async () => {
188
196
  const orchestrator = {
189
197
  resolveSelfNamespace: () => "session-namespace",
198
+ filterPrivateSearchResults: keepVisibleSearchResults,
190
199
  searchAcrossNamespaces: async () => [
191
200
  {
192
201
  id: "artifact-1",
@@ -226,6 +235,128 @@ test("recallForActiveMemory excludes artifact-backed hits before applying the vi
226
235
  );
227
236
  });
228
237
 
238
+ test("recallForActiveMemory excludes support passport records before applying the visible result cap", async () => {
239
+ const memories = new Map([
240
+ ["/tmp/memory/preferences/card.md", {
241
+ content: "Give me time to answer.",
242
+ frontmatter: { tags: ["support-passport-card"] },
243
+ } as never],
244
+ ["/tmp/memory/corrections/audit.md", {
245
+ content: "Superseded: Give me time to answer.",
246
+ frontmatter: { tags: ["support-passport-audit"] },
247
+ } as never],
248
+ ["/tmp/memory/facts/safe.md", {
249
+ content: "Safe memory.",
250
+ frontmatter: { tags: [] },
251
+ } as never],
252
+ ]);
253
+ const orchestrator = {
254
+ resolveSelfNamespace: () => "session-namespace",
255
+ getStorageForNamespace: async () => ({
256
+ readMemoryByPath: async (memoryPath: string) => memories.get(memoryPath) ?? null,
257
+ }),
258
+ filterPrivateSearchResults: async (results: Array<{ path: string }>) =>
259
+ results.filter((result) => !result.path.includes("/preferences/card.md") && !result.path.includes("/corrections/audit.md")),
260
+ searchAcrossNamespaces: async () => [
261
+ { id: "card", score: 0.99, path: "/tmp/memory/preferences/card.md", snippet: "private card" },
262
+ { id: "audit", score: 0.98, path: "/tmp/memory/corrections/audit.md", snippet: "private audit" },
263
+ { id: "safe", score: 0.8, path: "/tmp/memory/facts/safe.md", snippet: "safe memory" },
264
+ ],
265
+ };
266
+
267
+ const result = await recallForActiveMemory(orchestrator as never, {
268
+ query: "support",
269
+ limit: 2,
270
+ sessionKey: "session-b",
271
+ });
272
+
273
+ assert.deepEqual(result.results.map((entry) => entry.id), ["safe"]);
274
+ assert.equal(result.truncated, false);
275
+ });
276
+
277
+ test("recallForActiveMemory pages past private passport records", async () => {
278
+ const corpus = [
279
+ ...Array.from({ length: 40 }, (_, index) => ({
280
+ id: `private-${index}`,
281
+ score: 1 - index / 100,
282
+ path: `/tmp/memory/preferences/private-${index}.md`,
283
+ snippet: "private support card",
284
+ })),
285
+ { id: "safe", score: 0.5, path: "/tmp/memory/facts/safe.md", snippet: "safe memory" },
286
+ ];
287
+ const limits: number[] = [];
288
+ const orchestrator = {
289
+ resolveSelfNamespace: () => "session-namespace",
290
+ filterPrivateSearchResults: async (results: Array<{ path: string }>) =>
291
+ results.filter((result) => result.path.endsWith("safe.md")),
292
+ searchAcrossNamespaces: async ({ maxResults }: { maxResults?: number }) => {
293
+ limits.push(maxResults ?? corpus.length);
294
+ return corpus.slice(0, maxResults);
295
+ },
296
+ };
297
+
298
+ const result = await recallForActiveMemory(orchestrator as never, {
299
+ query: "support",
300
+ limit: 1,
301
+ sessionKey: "session-b",
302
+ });
303
+
304
+ assert.deepEqual(result.results.map((entry) => entry.id), ["safe"]);
305
+ assert.ok(limits.length > 1);
306
+ assert.equal(result.truncated, false);
307
+ });
308
+
309
+ test("recallForActiveMemory resolves collection-prefixed paths through the private-result filter", async () => {
310
+ const calls: Array<{ paths: string[]; namespaces: readonly string[] | undefined }> = [];
311
+ const orchestrator = {
312
+ resolveSelfNamespace: () => "session-namespace",
313
+ getStorageForNamespace: async () => ({
314
+ readMemoryByPath: async () => {
315
+ throw new Error("direct path reads must not decide QMD visibility");
316
+ },
317
+ }),
318
+ filterPrivateSearchResults: async (
319
+ results: Array<{ path: string }>,
320
+ namespaces: readonly string[] | undefined,
321
+ ) => {
322
+ calls.push({ paths: results.map((result) => result.path), namespaces });
323
+ return results.filter((result) => result.path.endsWith("safe.md"));
324
+ },
325
+ searchAcrossNamespaces: async () => [
326
+ { id: "card", score: 0.99, path: "openclaw-engram/preferences/card.md", snippet: "private card" },
327
+ { id: "safe", score: 0.8, path: "openclaw-engram/facts/safe.md", snippet: "safe memory" },
328
+ ],
329
+ };
330
+
331
+ const result = await recallForActiveMemory(orchestrator as never, {
332
+ query: "support",
333
+ sessionKey: "session-b",
334
+ });
335
+
336
+ assert.deepEqual(result.results.map((entry) => entry.id), ["safe"]);
337
+ assert.deepEqual(calls, [{
338
+ paths: ["openclaw-engram/preferences/card.md", "openclaw-engram/facts/safe.md"],
339
+ namespaces: ["session-namespace"],
340
+ }]);
341
+ });
342
+
343
+ test("recallForActiveMemory fails closed when candidate storage cannot be resolved", async () => {
344
+ const orchestrator = {
345
+ resolveSelfNamespace: () => "session-namespace",
346
+ searchAcrossNamespaces: async () => [
347
+ { id: "unresolved-path", path: "openclaw-engram/preferences/card.md", snippet: "private path" },
348
+ { id: "unresolved-id", snippet: "private id" },
349
+ ],
350
+ };
351
+
352
+ const result = await recallForActiveMemory(orchestrator as never, {
353
+ query: "support",
354
+ sessionKey: "session-b",
355
+ });
356
+
357
+ assert.deepEqual(result, { results: [], truncated: false });
358
+ });
359
+
229
360
  test("getMemoryForActiveMemory returns not_found instead of throwing", async () => {
230
361
  const orchestrator = {
231
362
  resolveSelfNamespace: () => "readable-session",
@@ -238,6 +369,26 @@ test("getMemoryForActiveMemory returns not_found instead of throwing", async ()
238
369
  assert.deepEqual(result, { error: "not_found" });
239
370
  });
240
371
 
372
+ test("getMemoryForActiveMemory hides support passport records", async () => {
373
+ for (const tag of ["support-passport-card", "support-passport-audit"]) {
374
+ const orchestrator = {
375
+ resolveSelfNamespace: () => "readable-session",
376
+ getStorageForNamespace: async () => ({
377
+ getMemoryById: async () => ({
378
+ content: "owner-controlled content",
379
+ frontmatter: { tags: [tag] },
380
+ } as never),
381
+ }),
382
+ };
383
+
384
+ assert.deepEqual(
385
+ await getMemoryForActiveMemory(orchestrator as never, "private-record"),
386
+ { error: "not_found" },
387
+ tag,
388
+ );
389
+ }
390
+ });
391
+
241
392
  test("getMemoryForActiveMemory reads via the session-derived namespace storage", async () => {
242
393
  let readNamespace: string | undefined;
243
394
  const orchestrator = {
@@ -1,8 +1,9 @@
1
1
  import { resolveNamespaceCapabilities } from "./capabilities.js";
2
2
  import { canReadNamespace, defaultNamespaceForPrincipal, resolvePrincipal } from "./namespaces/principal.js";
3
- import type { MemoryFile, PluginConfig } from "./types.js";
3
+ import type { MemoryFile, PluginConfig, QmdSearchResult } from "./types.js";
4
4
  import { collapseWhitespace, truncateCodePointSafe } from "./whitespace.js";
5
5
  import { isHandleToken } from "./recall-handles.js";
6
+ import { isSupportPassportPrivateMemory } from "./support-passport/card-projection.js";
6
7
 
7
8
  export interface ActiveMemoryMetadata {
8
9
  type?: "fact" | "preference";
@@ -42,6 +43,16 @@ interface ActiveMemoryScopedOrchestrator {
42
43
  config?: PluginConfig;
43
44
  resolvePrincipal?: (sessionKey?: string) => string | undefined;
44
45
  resolveSelfNamespace?: (sessionKey?: string) => string;
46
+ getStorageForNamespace?: (namespace: string) => Promise<{
47
+ readMemoryByPath?: (path: string) => Promise<MemoryFile | null>;
48
+ getMemoryById?: (id: string) => Promise<MemoryFile | null>;
49
+ }>;
50
+ filterPrivateSearchResults?: (
51
+ results: QmdSearchResult[],
52
+ namespaces?: readonly string[],
53
+ preserveUnresolved?: boolean,
54
+ visibilityCache?: Map<string, boolean>,
55
+ ) => Promise<QmdSearchResult[]>;
45
56
  }
46
57
 
47
58
  type ActiveMemorySearchCandidate = {
@@ -57,6 +68,54 @@ function isArtifactPath(value: string | undefined): boolean {
57
68
  return typeof value === "string" && /(?:^|[\\/])artifacts(?:[\\/]|$)/i.test(value);
58
69
  }
59
70
 
71
+ async function filterVisibleActiveMemoryCandidates(
72
+ orchestrator: ActiveMemoryScopedOrchestrator,
73
+ namespace: string,
74
+ storage: Awaited<ReturnType<NonNullable<ActiveMemoryScopedOrchestrator["getStorageForNamespace"]>>> | undefined,
75
+ candidates: ActiveMemorySearchCandidate[],
76
+ visibilityCache?: Map<string, boolean>,
77
+ ): Promise<ActiveMemorySearchCandidate[]> {
78
+ const visible = new Set<ActiveMemorySearchCandidate>();
79
+ const pathCandidates = candidates.filter(
80
+ (candidate) => typeof candidate.path === "string" && !isArtifactPath(candidate.path),
81
+ );
82
+ if (pathCandidates.length > 0 && typeof orchestrator.filterPrivateSearchResults === "function") {
83
+ const qmdCandidates = pathCandidates.map((candidate): QmdSearchResult => ({
84
+ docid: candidate.id ?? candidate.path!,
85
+ path: candidate.path!,
86
+ snippet: candidate.snippet ?? candidate.text ?? "",
87
+ score: typeof candidate.score === "number" ? candidate.score : 0,
88
+ namespace,
89
+ }));
90
+ const filtered = await orchestrator.filterPrivateSearchResults(
91
+ qmdCandidates,
92
+ [namespace],
93
+ false,
94
+ visibilityCache,
95
+ );
96
+ const visibleKeys = new Set(filtered.map((candidate) => `${candidate.docid}\0${candidate.path}`));
97
+ qmdCandidates.forEach((candidate, index) => {
98
+ if (visibleKeys.has(`${candidate.docid}\0${candidate.path}`)) visible.add(pathCandidates[index]!);
99
+ });
100
+ }
101
+
102
+ const idCandidates = candidates.filter(
103
+ (candidate) => candidate.path === undefined && typeof candidate.id === "string",
104
+ );
105
+ if (storage) {
106
+ const idVisibility = await Promise.all(
107
+ idCandidates.map(async (candidate) => {
108
+ const memory = await storage.getMemoryById?.(candidate.id!);
109
+ return memory !== null && memory !== undefined && !isSupportPassportPrivateMemory(memory);
110
+ }),
111
+ );
112
+ idCandidates.forEach((candidate, index) => {
113
+ if (idVisibility[index]) visible.add(candidate);
114
+ });
115
+ }
116
+ return candidates.filter((candidate) => visible.has(candidate));
117
+ }
118
+
60
119
  function clampLimit(value: number | undefined): number {
61
120
  if (typeof value !== "number" || !Number.isFinite(value)) return 8;
62
121
  return Math.max(1, Math.min(50, Math.floor(value)));
@@ -127,6 +186,8 @@ export async function recallForActiveMemory(
127
186
  config?: PluginConfig;
128
187
  resolvePrincipal?: (sessionKey?: string) => string | undefined;
129
188
  resolveSelfNamespace?: (sessionKey?: string) => string;
189
+ getStorageForNamespace?: ActiveMemoryScopedOrchestrator["getStorageForNamespace"];
190
+ filterPrivateSearchResults?: ActiveMemoryScopedOrchestrator["filterPrivateSearchResults"];
130
191
  searchAcrossNamespaces: (params: {
131
192
  query: string;
132
193
  maxResults?: number;
@@ -137,7 +198,6 @@ export async function recallForActiveMemory(
137
198
  params: ActiveMemoryRecallParams,
138
199
  ): Promise<ActiveMemorySearchOutput> {
139
200
  const limit = clampLimit(params.limit);
140
- const requestedResults = Math.min(200, limit + 20);
141
201
  const snippetMaxChars =
142
202
  typeof params.snippetMaxChars === "number" && Number.isFinite(params.snippetMaxChars)
143
203
  ? Math.max(1, Math.min(4000, Math.floor(params.snippetMaxChars)))
@@ -148,13 +208,29 @@ export async function recallForActiveMemory(
148
208
  typeof params.filters?.namespace === "string" ? params.filters.namespace : undefined,
149
209
  );
150
210
 
151
- const raw = await orchestrator.searchAcrossNamespaces({
152
- query: params.query,
153
- maxResults: requestedResults,
154
- namespaces: [namespace],
155
- mode: "search",
156
- });
157
- const visible = raw.filter((candidate) => !isArtifactPath(candidate.path));
211
+ const storage = await orchestrator.getStorageForNamespace?.(namespace);
212
+ const candidateCap = 25_000;
213
+ let requestedResults = Math.min(candidateCap, limit + 20);
214
+ let raw: ActiveMemorySearchCandidate[] = [];
215
+ let visible: ActiveMemorySearchCandidate[] = [];
216
+ const privateVisibilityCache = new Map<string, boolean>();
217
+ for (;;) {
218
+ raw = await orchestrator.searchAcrossNamespaces({
219
+ query: params.query,
220
+ maxResults: requestedResults,
221
+ namespaces: [namespace],
222
+ mode: "search",
223
+ });
224
+ visible = await filterVisibleActiveMemoryCandidates(
225
+ orchestrator,
226
+ namespace,
227
+ storage,
228
+ raw,
229
+ privateVisibilityCache,
230
+ );
231
+ if (visible.length > limit || raw.length < requestedResults || requestedResults >= candidateCap) break;
232
+ requestedResults = Math.min(candidateCap, requestedResults * 2);
233
+ }
158
234
 
159
235
  return {
160
236
  results: visible.slice(0, limit).map((candidate, index) => ({
@@ -163,7 +239,7 @@ export async function recallForActiveMemory(
163
239
  text: truncateSnippet(candidate.snippet ?? candidate.text ?? "", snippetMaxChars),
164
240
  metadata: pickMetadata(candidate.metadata),
165
241
  })),
166
- truncated: visible.length > limit,
242
+ truncated: visible.length > limit || (raw.length === requestedResults && requestedResults >= candidateCap),
167
243
  };
168
244
  }
169
245
 
@@ -231,7 +307,7 @@ export async function getMemoryForActiveMemory(
231
307
  }
232
308
  }
233
309
  const memory = await storage?.getMemoryById?.(resolvedId);
234
- if (!memory) return { error: "not_found" };
310
+ if (!memory || isSupportPassportPrivateMemory(memory)) return { error: "not_found" };
235
311
  return {
236
312
  id: resolvedId,
237
313
  text: collapseWhitespace(memory.content),
@@ -914,6 +914,44 @@ function makeEmptyStorage(): StorageManager {
914
914
  } as unknown as StorageManager;
915
915
  }
916
916
 
917
+ test("buildBriefing excludes support passport records from generated context", async () => {
918
+ const generatedPrompts: unknown[] = [];
919
+ const privateMemory: MemoryFile = {
920
+ ...makeMemory("2026-04-10T12:00:00.000Z"),
921
+ frontmatter: {
922
+ ...makeMemory("2026-04-10T12:00:00.000Z").frontmatter,
923
+ tags: ["support-passport-card"],
924
+ },
925
+ content: "Private support statement",
926
+ };
927
+ const publicMemory: MemoryFile = {
928
+ ...makeMemory("2026-04-10T13:00:00.000Z"),
929
+ frontmatter: {
930
+ ...makeMemory("2026-04-10T13:00:00.000Z").frontmatter,
931
+ id: "public-memory",
932
+ },
933
+ content: "Public project update",
934
+ };
935
+ const storage = {
936
+ readAllMemories: async () => [privateMemory, publicMemory],
937
+ readAllEntityFiles: async () => [],
938
+ } as unknown as StorageManager;
939
+
940
+ const result = await buildBriefing({
941
+ storage,
942
+ window: makeWindow("2026-04-10T00:00:00.000Z", "2026-04-11T00:00:00.000Z"),
943
+ followupGenerator: async (prompt) => {
944
+ generatedPrompts.push(prompt);
945
+ return [];
946
+ },
947
+ now: new Date("2026-04-11T10:00:00.000Z"),
948
+ });
949
+
950
+ assert.equal(result.markdown.includes(privateMemory.content), false);
951
+ assert.equal(JSON.stringify(generatedPrompts).includes(privateMemory.content), false);
952
+ assert.equal(result.markdown.includes(publicMemory.content), true);
953
+ });
954
+
917
955
  test("buildBriefing: model-not-found 400 error produces user-friendly followupsUnavailableReason", async () => {
918
956
  // Inject a mock generator that throws an error resembling a Responses API
919
957
  // 400 "model does not exist" response.
package/src/briefing.ts CHANGED
@@ -21,6 +21,7 @@ import path from "node:path";
21
21
  import { log } from "./logger.js";
22
22
  import { extractJsonCandidates } from "./json-extract.js";
23
23
  import { drainPassiveCorrectionNotifications } from "./correction/passive-correction-notifications.js";
24
+ import { excludeSupportPassportPrivateMemories } from "./support-passport/card-projection.js";
24
25
  import { normalizeEntityName, StorageManager } from "./storage.js";
25
26
  import { readEnvVar, resolveHomeDir } from "./runtime/env.js";
26
27
  import type {
@@ -978,9 +979,8 @@ function defaultWindow(now: Date): ParsedBriefingWindow {
978
979
 
979
980
  async function safeReadMemories(storage: StorageManager): Promise<MemoryFile[]> {
980
981
  try {
981
- return await storage.readAllMemories();
982
- } catch (err) {
983
- log.warn(`briefing: readAllMemories failed: ${err}`);
982
+ return excludeSupportPassportPrivateMemories(await storage.readAllMemories());
983
+ } catch (err) { log.warn(`briefing: readAllMemories failed: ${err}`);
984
984
  return [];
985
985
  }
986
986
  }
package/src/cli.ts CHANGED
@@ -236,6 +236,9 @@ import {
236
236
  import { resolveHomeDir } from "./runtime/env.js";
237
237
  import { expandTildePath } from "./utils/path.js";
238
238
  import { RECALL_FALLBACK_DIRS } from "./utils/category-dir.js";
239
+ import {
240
+ isSupportPassportPrivateMemory,
241
+ } from "./support-passport/card-projection.js";
239
242
  import { assertPathInsideRoot } from "./utils/path-containment.js";
240
243
  import { convertMemoriesToRecords } from "./training-export/converter.js";
241
244
  import { parseStrictCliDate as parseStrictCliDateShared } from "./training-export/date-parse.js";
@@ -1066,6 +1069,8 @@ export async function runMemoryTimelineCliCommand(
1066
1069
  options: MemoryTimelineCliCommandOptions,
1067
1070
  ) {
1068
1071
  const storage = new (await import("./storage.js")).StorageManager(options.memoryDir);
1072
+ const memory = await storage.getMemoryByIdIncludingArchived(options.memoryId);
1073
+ if (!memory || isSupportPassportPrivateMemory(memory)) return [];
1069
1074
  return storage.getMemoryTimeline(options.memoryId, options.limit);
1070
1075
  }
1071
1076
 
@@ -1382,7 +1387,7 @@ export async function runVerifiedRecallSearchCliCommand(options: {
1382
1387
  }
1383
1388
 
1384
1389
  export function isNormalRetrievalVisibleMemory(memory: MemoryFile): boolean {
1385
- return memory.frontmatter.status !== "forgotten";
1390
+ return memory.frontmatter.status !== "forgotten" && !isSupportPassportPrivateMemory(memory);
1386
1391
  }
1387
1392
 
1388
1393
  export async function filterNormalMemorySearchResults(
@@ -15,6 +15,7 @@ import { log } from "../logger.js";
15
15
  import { resolveNamespaceChildRoot } from "../namespaces/path.js";
16
16
  import { isSafeRouteNamespace } from "../routing/engine.js";
17
17
  import { StorageManager } from "../storage.js";
18
+ import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
18
19
  import type { PluginConfig, MemoryFile } from "../types.js";
19
20
  import {
20
21
  hasCodexMaterializeSentinel,
@@ -106,6 +107,7 @@ export async function runCodexMaterialize(
106
107
  const storage = new StorageManager(nsDir);
107
108
  memories = await storage.readAllMemories();
108
109
  }
110
+ memories = excludeSupportPassportPrivateMemories(memories);
109
111
 
110
112
  // Intentionally NOT catching here: per the JSDoc contract above,
111
113
  // schema-validation and I/O errors from `materializeForNamespace` must
@@ -32,6 +32,7 @@ import {
32
32
  } from "./contradiction-review.js";
33
33
  import type { LocalLlmClient } from "../local-llm.js";
34
34
  import type { FallbackLlmClient } from "../fallback-llm.js";
35
+ import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
35
36
 
36
37
  // ── Types ──────────────────────────────────────────────────────────────────────
37
38
 
@@ -450,6 +451,7 @@ async function loadEligibleMemories(storage: StorageManager): Promise<MemoryFile
450
451
 
451
452
  return all.filter((mem) => {
452
453
  const fm = mem.frontmatter;
454
+ if (isSupportPassportPrivateMemory(mem)) return false;
453
455
  // Only active memories (rule 53: explicit ACTIVE_STATUSES set)
454
456
  const status = (fm.status as MemoryStatus) ?? "active";
455
457
  if (!ACTIVE_STATUSES.has(status)) return false;