@remnic/core 9.54.4 → 9.54.6

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 (648) hide show
  1. package/dist/access-admin-ops-surface.d.ts +24 -23
  2. package/dist/access-admin-ops-surface.js +55 -50
  3. package/dist/access-authorization-probe.d.ts +25 -22
  4. package/dist/access-authorization-probe.js +58 -51
  5. package/dist/access-boundary.d.ts +26 -23
  6. package/dist/access-boundary.js +59 -52
  7. package/dist/access-cli.js +115 -107
  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 +19 -18
  11. package/dist/access-extraction-force-flush.js +55 -50
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +22 -21
  14. package/dist/access-http-lifecycle-flush.d.ts +22 -21
  15. package/dist/access-http-offline-stream.d.ts +19 -18
  16. package/dist/access-http-query.js +55 -50
  17. package/dist/access-http.d.ts +55 -36
  18. package/dist/access-http.js +76 -65
  19. package/dist/access-identity-continuity-surface.d.ts +9 -9
  20. package/dist/access-identity-continuity-surface.js +55 -50
  21. package/dist/access-lcm-surface.d.ts +21 -20
  22. package/dist/access-lcm-surface.js +55 -50
  23. package/dist/access-mcp.d.ts +22 -21
  24. package/dist/access-mcp.js +63 -57
  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-CCNn_6NE.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +55 -50
  30. package/dist/access-observe-write-surface.d.ts +22 -21
  31. package/dist/access-observe-write-surface.js +55 -50
  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 +57 -52
  35. package/dist/access-operations.d.ts +23 -22
  36. package/dist/access-operations.js +61 -55
  37. package/dist/access-recall-concurrency.d.ts +21 -20
  38. package/dist/access-recall-concurrency.js +55 -50
  39. package/dist/access-recall-response.d.ts +19 -18
  40. package/dist/access-recall-response.js +55 -50
  41. package/dist/access-recall-surface.d.ts +19 -18
  42. package/dist/access-recall-surface.js +55 -50
  43. package/dist/access-schema.d.ts +2 -2
  44. package/dist/access-schema.js +5 -4
  45. package/dist/{access-service-CXvbxLK-.d.ts → access-service-DkSdXK4S.d.ts} +1314 -83
  46. package/dist/access-service-helpers.d.ts +22 -21
  47. package/dist/access-service.d.ts +31 -30
  48. package/dist/access-service.js +55 -50
  49. package/dist/access-surface-catalog.d.ts +22 -21
  50. package/dist/access-surface-catalog.js +209 -2
  51. package/dist/access-surface-catalog.js.map +1 -1
  52. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  53. package/dist/action-confidence.d.ts +1 -1
  54. package/dist/active-memory-bridge.d.ts +14 -1
  55. package/dist/active-memory-bridge.js +6 -1
  56. package/dist/active-recall.d.ts +1 -1
  57. package/dist/active-recall.js +4 -2
  58. package/dist/active-recall.js.map +1 -1
  59. package/dist/adapters/index.js +7 -7
  60. package/dist/adapters/registry.js +3 -3
  61. package/dist/admin-console/public/what-helps-me/app.js +1594 -0
  62. package/dist/admin-console/public/what-helps-me/index.html +339 -0
  63. package/dist/admin-console/public/what-helps-me/model.js +685 -0
  64. package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
  65. package/dist/ambient-provenance.d.ts +1 -1
  66. package/dist/artifact-search.d.ts +1 -1
  67. package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
  68. package/dist/behavior-learner.d.ts +1 -1
  69. package/dist/behavior-signals.d.ts +1 -1
  70. package/dist/bootstrap.d.ts +9 -9
  71. package/dist/briefing.d.ts +2 -2
  72. package/dist/briefing.js +33 -12
  73. package/dist/buffer-surprise-report.d.ts +1 -1
  74. package/dist/buffer-turn-helpers.d.ts +1 -1
  75. package/dist/buffer.d.ts +2 -2
  76. package/dist/buffer.js +3 -3
  77. package/dist/bulk-import/index.d.ts +3 -3
  78. package/dist/calibration.d.ts +1 -1
  79. package/dist/calibration.js +1 -1
  80. package/dist/capabilities.d.ts +1 -1
  81. package/dist/{catalog-BOOxl-I2.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
  82. package/dist/causal-behavior.d.ts +1 -1
  83. package/dist/causal-consolidation.d.ts +1 -1
  84. package/dist/causal-consolidation.js +34 -13
  85. package/dist/causal-consolidation.js.map +1 -1
  86. package/dist/causal-trajectory-graph.d.ts +1 -1
  87. package/dist/{chunk-ZYLC7NFO.js → chunk-26ZXBTYN.js} +4 -4
  88. package/dist/chunk-26ZXBTYN.js.map +1 -0
  89. package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
  90. package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
  91. package/dist/chunk-2LWQSV6A.js.map +1 -0
  92. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  93. package/dist/chunk-37DZZFFM.js +502 -0
  94. package/dist/chunk-37DZZFFM.js.map +1 -0
  95. package/dist/chunk-3HSRWJTC.js +9 -0
  96. package/dist/chunk-3HSRWJTC.js.map +1 -0
  97. package/dist/{chunk-XUAMCLY4.js → chunk-3TIZPSJC.js} +17 -13
  98. package/dist/chunk-3TIZPSJC.js.map +1 -0
  99. package/dist/{chunk-PDDTI7IC.js → chunk-43SEBY2M.js} +1 -1
  100. package/dist/{chunk-HWRD23DW.js → chunk-46SZBVDS.js} +3 -3
  101. package/dist/{chunk-6HPHEFXT.js → chunk-5FD7JMTX.js} +2 -2
  102. package/dist/{chunk-7BZOBA5J.js → chunk-5NB726GV.js} +70 -16
  103. package/dist/chunk-5NB726GV.js.map +1 -0
  104. package/dist/chunk-62OKGIJA.js +39 -0
  105. package/dist/chunk-62OKGIJA.js.map +1 -0
  106. package/dist/{chunk-IBKR2TFR.js → chunk-6CYHUWCO.js} +2 -2
  107. package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
  108. package/dist/{chunk-UU3G6GUP.js → chunk-76JJSXK7.js} +1 -1
  109. package/dist/chunk-76JJSXK7.js.map +1 -0
  110. package/dist/{chunk-PX2LSHYM.js → chunk-7BD6O7ZV.js} +189 -4
  111. package/dist/chunk-7BD6O7ZV.js.map +1 -0
  112. package/dist/chunk-7TBXNYLO.js +346 -0
  113. package/dist/chunk-7TBXNYLO.js.map +1 -0
  114. package/dist/{chunk-NH5IR2WM.js → chunk-BRR5EUTF.js} +6 -2
  115. package/dist/chunk-BRR5EUTF.js.map +1 -0
  116. package/dist/{chunk-NIS256NW.js → chunk-CIAI24TQ.js} +3 -3
  117. package/dist/{chunk-T2JHZWH6.js → chunk-D3LBIUWV.js} +11703 -7573
  118. package/dist/chunk-D3LBIUWV.js.map +1 -0
  119. package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
  120. package/dist/{chunk-G7Z6EENO.js → chunk-EKTP7MNS.js} +4 -4
  121. package/dist/{chunk-S75M5ZRK.js → chunk-F2JRDPON.js} +16 -1
  122. package/dist/chunk-F2JRDPON.js.map +1 -0
  123. package/dist/{chunk-RZ4XGKOJ.js → chunk-FFRTNF3L.js} +8 -8
  124. package/dist/{chunk-VKXWK44Q.js → chunk-FONWBCVY.js} +3 -3
  125. package/dist/{chunk-DZD576ZU.js → chunk-FPLM2TKD.js} +2 -2
  126. package/dist/{chunk-ZPJ4QSGP.js → chunk-FTPONF6B.js} +2 -2
  127. package/dist/{chunk-LJS7KUPV.js → chunk-FWX7W5PM.js} +2 -2
  128. package/dist/{chunk-UTRO5UJU.js → chunk-G6DFSS6A.js} +5 -1
  129. package/dist/chunk-G6DFSS6A.js.map +1 -0
  130. package/dist/{chunk-6LAPLZOS.js → chunk-GJ776BC2.js} +8 -3
  131. package/dist/chunk-GJ776BC2.js.map +1 -0
  132. package/dist/{chunk-G4T7L557.js → chunk-GN3WRFJY.js} +6 -6
  133. package/dist/{chunk-QT2FRYI4.js → chunk-H7NAZ3UB.js} +2 -2
  134. package/dist/{chunk-APPFNGX6.js → chunk-HBUFQRIM.js} +2 -2
  135. package/dist/{chunk-UU7TRFNE.js → chunk-HGJ6NJ4E.js} +2 -2
  136. package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
  137. package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
  138. package/dist/{chunk-UES4BHA2.js → chunk-I3MSGFGD.js} +17 -6
  139. package/dist/chunk-I3MSGFGD.js.map +1 -0
  140. package/dist/{chunk-C4ZNGVK3.js → chunk-IKP5OYQQ.js} +2 -2
  141. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  142. package/dist/{chunk-RDJRFDJY.js → chunk-IQ4NVWEF.js} +2 -2
  143. package/dist/{chunk-CGVHPCP2.js → chunk-JYG4OLWH.js} +2 -2
  144. package/dist/{chunk-WOPA3SGI.js → chunk-K26NWEOC.js} +8 -8
  145. package/dist/{chunk-K4QS7LXU.js → chunk-K2UGPTYY.js} +485 -44
  146. package/dist/chunk-K2UGPTYY.js.map +1 -0
  147. package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
  148. package/dist/chunk-KFBOPMF6.js.map +1 -0
  149. package/dist/{chunk-G7A5HLUS.js → chunk-KJH6W2I7.js} +2 -2
  150. package/dist/{chunk-IXEBUYO4.js → chunk-KM55SMLG.js} +11 -2
  151. package/dist/{chunk-IXEBUYO4.js.map → chunk-KM55SMLG.js.map} +1 -1
  152. package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
  153. package/dist/chunk-LC2BDILZ.js +57 -0
  154. package/dist/chunk-LC2BDILZ.js.map +1 -0
  155. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  156. package/dist/{chunk-6R4G7N4S.js → chunk-M4YHAODQ.js} +388 -748
  157. package/dist/chunk-M4YHAODQ.js.map +1 -0
  158. package/dist/{chunk-3JLPGJ43.js → chunk-MIH3CJPN.js} +5 -5
  159. package/dist/{chunk-QHFV6VNU.js → chunk-MK5VEWCR.js} +2 -2
  160. package/dist/chunk-NISZQW72.js +140 -0
  161. package/dist/chunk-NISZQW72.js.map +1 -0
  162. package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
  163. package/dist/{chunk-G2LUMAUF.js → chunk-OCIP6YMD.js} +12 -5
  164. package/dist/chunk-OCIP6YMD.js.map +1 -0
  165. package/dist/{chunk-47P3RYZP.js → chunk-PG4QBPVG.js} +21 -11
  166. package/dist/chunk-PG4QBPVG.js.map +1 -0
  167. package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
  168. package/dist/{chunk-QWGE2PUH.js → chunk-PT54WISF.js} +190 -56
  169. package/dist/chunk-PT54WISF.js.map +1 -0
  170. package/dist/{chunk-AZM4CCAC.js → chunk-QZLDRQ4I.js} +8 -8
  171. package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
  172. package/dist/{chunk-JDZPNCMA.js → chunk-RUNORG2P.js} +6 -3
  173. package/dist/chunk-RUNORG2P.js.map +1 -0
  174. package/dist/{chunk-JV5YUBIZ.js → chunk-RZQ6W2W4.js} +50 -44
  175. package/dist/chunk-RZQ6W2W4.js.map +1 -0
  176. package/dist/{chunk-RUMNY5DT.js → chunk-SMNYAMJD.js} +6 -2
  177. package/dist/chunk-SMNYAMJD.js.map +1 -0
  178. package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
  179. package/dist/chunk-TB6CBZ5V.js.map +1 -0
  180. package/dist/{chunk-VMMQDEN5.js → chunk-TO7ZTWJW.js} +2 -2
  181. package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
  182. package/dist/{chunk-HLYR2TQL.js → chunk-UCTS3DDH.js} +2 -2
  183. package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
  184. package/dist/{chunk-WM65LU67.js → chunk-UKYS3NU5.js} +2 -2
  185. package/dist/{chunk-WDBX6VER.js → chunk-UPLZNJKN.js} +5 -5
  186. package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
  187. package/dist/chunk-UW5NPZJ2.js.map +1 -0
  188. package/dist/{chunk-2GFK22OZ.js → chunk-V6ERBR7U.js} +2 -2
  189. package/dist/{chunk-CYF6WVE7.js → chunk-W5ZKPI34.js} +139 -158
  190. package/dist/chunk-W5ZKPI34.js.map +1 -0
  191. package/dist/chunk-XX4HPFFM.js +370 -0
  192. package/dist/chunk-XX4HPFFM.js.map +1 -0
  193. package/dist/{chunk-ZMYDYNI4.js → chunk-XZHE2DEN.js} +4 -4
  194. package/dist/chunk-YXQEKCZM.js +223 -0
  195. package/dist/chunk-YXQEKCZM.js.map +1 -0
  196. package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
  197. package/dist/chunk-Z4N7SVVF.js.map +1 -0
  198. package/dist/{chunk-MAXVH44E.js → chunk-Z54EM5YZ.js} +7 -7
  199. package/dist/{chunk-YGLY6QFV.js → chunk-ZRZVLB7O.js} +2 -2
  200. package/dist/{chunk-4IIFL7GC.js → chunk-ZUKIUXHQ.js} +10 -10
  201. package/dist/{cli-DVUFIa5E.d.ts → cli-Bze8S0Qs.d.ts} +5 -5
  202. package/dist/cli.d.ts +22 -21
  203. package/dist/cli.js +90 -80
  204. package/dist/coding/pre-action-gate.d.ts +1 -1
  205. package/dist/compounding/engine.d.ts +2 -2
  206. package/dist/compounding/engine.js +33 -12
  207. package/dist/compounding/preference-consolidator.d.ts +1 -1
  208. package/dist/compression-optimizer.d.ts +1 -1
  209. package/dist/config.d.ts +1 -1
  210. package/dist/config.js +4 -2
  211. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  212. package/dist/connectors/codex-materialize-runner.js +33 -12
  213. package/dist/connectors/codex-materialize.d.ts +1 -1
  214. package/dist/connectors/index.d.ts +1 -1
  215. package/dist/connectors/index.js +32 -12
  216. package/dist/consolidation-provenance-check.d.ts +2 -2
  217. package/dist/consolidation-undo.d.ts +2 -2
  218. package/dist/contradiction/index.d.ts +2 -2
  219. package/dist/contradiction/index.js +3 -1
  220. package/dist/contradiction-scan-JDTBXRGW.js +20 -0
  221. package/dist/converge-config.d.ts +1 -1
  222. package/dist/convergence-refresh.d.ts +2 -2
  223. package/dist/convergence-refresh.js +35 -14
  224. package/dist/conversation-index/backend.d.ts +1 -1
  225. package/dist/conversation-index/backend.js +2 -2
  226. package/dist/conversation-index/chunker.d.ts +1 -1
  227. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  228. package/dist/conversation-index/indexer.d.ts +1 -1
  229. package/dist/conversation-index/search.d.ts +1 -1
  230. package/dist/corpus-watermark.d.ts +1 -1
  231. package/dist/corpus-watermark.js +25 -24
  232. package/dist/day-summary.d.ts +1 -1
  233. package/dist/delinearize.d.ts +1 -1
  234. package/dist/dependency-propagation-config.d.ts +1 -1
  235. package/dist/{dependency-propagation-delivery-XzF76C9n.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
  236. package/dist/direct-answer-wiring.d.ts +1 -1
  237. package/dist/direct-answer.d.ts +1 -1
  238. package/dist/embedding-fallback.d.ts +1 -1
  239. package/dist/enrichment/index.d.ts +1 -1
  240. package/dist/entity-retrieval.d.ts +2 -2
  241. package/dist/entity-retrieval.js +33 -12
  242. package/dist/entity-schema.d.ts +1 -1
  243. package/dist/explicit-capture.d.ts +9 -9
  244. package/dist/explicit-capture.js +7 -4
  245. package/dist/external-wiki-access.d.ts +22 -21
  246. package/dist/external-wiki-access.js +56 -51
  247. package/dist/external-wiki-collection-registration.d.ts +1 -1
  248. package/dist/external-wiki-collection.d.ts +1 -1
  249. package/dist/external-wiki-mcp-tools.d.ts +22 -21
  250. package/dist/extraction-error-classification.d.ts +1 -1
  251. package/dist/extraction-faithfulness.d.ts +1 -1
  252. package/dist/extraction-faithfulness.js +2 -2
  253. package/dist/extraction-judge-telemetry.d.ts +1 -1
  254. package/dist/extraction-judge-training.d.ts +1 -1
  255. package/dist/extraction-judge.d.ts +1 -1
  256. package/dist/extraction-judge.js +2 -2
  257. package/dist/extraction-liveness.d.ts +1 -1
  258. package/dist/extraction-normalization.d.ts +1 -1
  259. package/dist/extraction-prompt.d.ts +1 -1
  260. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  261. package/dist/extraction-source-grounding.d.ts +1 -1
  262. package/dist/extraction.d.ts +1 -1
  263. package/dist/extraction.js +35 -19
  264. package/dist/fallback-llm.d.ts +14 -1
  265. package/dist/fallback-llm.js +1 -1
  266. package/dist/{first-start-migration-626C5554.js → first-start-migration-CRZCZAJN.js} +11 -3
  267. package/dist/first-start-migration-CRZCZAJN.js.map +1 -0
  268. package/dist/graph-dashboard-diff.d.ts +1 -1
  269. package/dist/graph-dashboard-key.d.ts +1 -1
  270. package/dist/graph-dashboard-parser.d.ts +1 -1
  271. package/dist/graph-edge-reinforcement.d.ts +1 -1
  272. package/dist/graph-path-reconstruction.d.ts +1 -1
  273. package/dist/graph-path-scoring.d.ts +1 -1
  274. package/dist/graph-snapshot.d.ts +1 -1
  275. package/dist/graph.d.ts +1 -1
  276. package/dist/harmonic-retrieval.js +1 -1
  277. package/dist/importance.d.ts +1 -1
  278. package/dist/importers/index.d.ts +1 -1
  279. package/dist/in-flight-reads.d.ts +1 -1
  280. package/dist/index.d.ts +314 -308
  281. package/dist/index.js +304 -133
  282. package/dist/inline-script.d.ts +3 -0
  283. package/dist/inline-script.js +8 -0
  284. package/dist/inline-script.js.map +1 -0
  285. package/dist/intent.d.ts +1 -1
  286. package/dist/lcm/engine.d.ts +1 -1
  287. package/dist/lcm/engine.js +3 -3
  288. package/dist/lcm/index.d.ts +1 -1
  289. package/dist/lcm/index.js +6 -6
  290. package/dist/lcm/tools.d.ts +1 -1
  291. package/dist/lifecycle.d.ts +1 -1
  292. package/dist/live-connectors-runner.d.ts +1 -1
  293. package/dist/local-llm.d.ts +2 -1
  294. package/dist/local-llm.js +2 -2
  295. package/dist/local-model-endpoint.d.ts +1 -1
  296. package/dist/maintenance/memory-governance.d.ts +1 -1
  297. package/dist/maintenance/memory-governance.js +33 -12
  298. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  299. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -12
  300. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  301. package/dist/maintenance/rebuild-memory-projection.js +34 -13
  302. package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
  303. package/dist/mcp-memory-inspector-app.d.ts +22 -21
  304. package/dist/mcp-read-only-tools.js +1 -1
  305. package/dist/memory-action-policy.d.ts +1 -1
  306. package/dist/memory-cache.d.ts +1 -1
  307. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  308. package/dist/memory-projection-mutations.js +2 -2
  309. package/dist/memory-projection-store.d.ts +6 -2
  310. package/dist/memory-projection-store.js +1 -1
  311. package/dist/memory-provenance.d.ts +1 -1
  312. package/dist/memory-snapshot.d.ts +1 -1
  313. package/dist/memory-worth-outcomes.d.ts +2 -2
  314. package/dist/models-json.d.ts +1 -1
  315. package/dist/namespaces/migrate.d.ts +3 -3
  316. package/dist/namespaces/migrate.js +24 -23
  317. package/dist/namespaces/principal.d.ts +1 -1
  318. package/dist/namespaces/search.d.ts +1 -1
  319. package/dist/namespaces/search.js +8 -8
  320. package/dist/namespaces/storage.d.ts +3 -3
  321. package/dist/namespaces/storage.js +33 -12
  322. package/dist/native-knowledge.d.ts +1 -1
  323. package/dist/offline-sync-file-io.d.ts +20 -0
  324. package/dist/offline-sync-file-io.js +18 -0
  325. package/dist/offline-sync-file-io.js.map +1 -0
  326. package/dist/offline-sync-impression-drain.d.ts +1 -1
  327. package/dist/offline-sync-impression-drain.js +5 -5
  328. package/dist/offline-sync.d.ts +8 -6
  329. package/dist/offline-sync.js +2 -1
  330. package/dist/operator-doctor-corpus.d.ts +1 -1
  331. package/dist/operator-doctor-corpus.js +26 -25
  332. package/dist/operator-doctor-replica.d.ts +1 -1
  333. package/dist/operator-toolkit.d.ts +3 -3
  334. package/dist/operator-toolkit.js +39 -36
  335. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  336. package/dist/orchestration/maintenance.d.ts +4 -4
  337. package/dist/orchestration/maintenance.js +38 -18
  338. package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-D85CzDDY.d.ts} +11 -8
  339. package/dist/orchestrator.d.ts +9 -9
  340. package/dist/orchestrator.js +117 -109
  341. package/dist/patterns-cli.d.ts +1 -1
  342. package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
  343. package/dist/policy-runtime.d.ts +1 -1
  344. package/dist/proactive-contention.d.ts +1 -1
  345. package/dist/provenance.d.ts +1 -1
  346. package/dist/public-http-D-SyWNj6.d.ts +25 -0
  347. package/dist/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
  348. package/dist/{qmd-eAWObK4M.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
  349. package/dist/qmd-preflight.d.ts +2 -2
  350. package/dist/qmd-recall-cache.d.ts +1 -1
  351. package/dist/qmd.d.ts +2 -2
  352. package/dist/recall-concurrency-config.d.ts +1 -1
  353. package/dist/recall-disclosure-escalation.d.ts +1 -1
  354. package/dist/recall-explain-renderer.d.ts +1 -1
  355. package/dist/recall-explain-renderer.js +3 -3
  356. package/dist/recall-memory-map.d.ts +1 -1
  357. package/dist/recall-planner-llm.d.ts +1 -1
  358. package/dist/recall-planner-llm.js +1 -1
  359. package/dist/recall-state.d.ts +1 -1
  360. package/dist/recall-tag-filter.d.ts +1 -1
  361. package/dist/recall-timings.d.ts +1 -1
  362. package/dist/recall-xray-cli.d.ts +1 -1
  363. package/dist/recall-xray-cli.js +4 -4
  364. package/dist/recall-xray-renderer.d.ts +1 -1
  365. package/dist/recall-xray-renderer.js +3 -3
  366. package/dist/recall-xray.d.ts +1 -1
  367. package/dist/recall-xray.js +2 -2
  368. package/dist/reconcile/cursor.d.ts +2 -1
  369. package/dist/reconcile/manifest.d.ts +2 -1
  370. package/dist/reconcile/manifest.js +6 -5
  371. package/dist/reconcile/plan.d.ts +2 -1
  372. package/dist/reconcile/plan.js +3 -2
  373. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  374. package/dist/replay/normalizers/claude.d.ts +1 -1
  375. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  376. package/dist/replay/normalizers/shared.d.ts +1 -1
  377. package/dist/replay/runner.d.ts +1 -1
  378. package/dist/replay/types.d.ts +1 -1
  379. package/dist/replica-divergence.d.ts +1 -1
  380. package/dist/replica-peers-config.d.ts +1 -1
  381. package/dist/resolve-auth-token.d.ts +1 -1
  382. package/dist/resume-bundles.js +5 -3
  383. package/dist/retrieval-agents.d.ts +2 -2
  384. package/dist/retrieval-tiers.d.ts +1 -1
  385. package/dist/routing/engine.d.ts +1 -1
  386. package/dist/routing/store.d.ts +1 -1
  387. package/dist/salvage-envelope.d.ts +1 -1
  388. package/dist/schemas.d.ts +38 -38
  389. package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
  390. package/dist/search/embed-helper.d.ts +1 -1
  391. package/dist/search/factory.d.ts +1 -1
  392. package/dist/search/factory.js +6 -6
  393. package/dist/search/index.d.ts +1 -1
  394. package/dist/search/index.js +12 -12
  395. package/dist/search/lancedb-backend.d.ts +1 -1
  396. package/dist/search/meilisearch-backend.d.ts +1 -1
  397. package/dist/search/noop-backend.d.ts +1 -1
  398. package/dist/search/orama-backend.d.ts +1 -1
  399. package/dist/search/port.d.ts +1 -1
  400. package/dist/search/remote-backend.d.ts +1 -1
  401. package/dist/{semantic-consolidation-HD8RkzVA.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
  402. package/dist/semantic-consolidation.d.ts +2 -2
  403. package/dist/semantic-consolidation.js +34 -13
  404. package/dist/semantic-rule-promotion.js +33 -12
  405. package/dist/semantic-rule-verifier.d.ts +1 -1
  406. package/dist/semantic-rule-verifier.js +33 -12
  407. package/dist/{service-DIrtHHEg.d.ts → service-DT-pJyda.d.ts} +660 -660
  408. package/dist/session-observer-bands.d.ts +1 -1
  409. package/dist/session-observer-state.d.ts +1 -1
  410. package/dist/shared-context/manager.d.ts +1 -1
  411. package/dist/signal.d.ts +1 -1
  412. package/dist/source-agent-qualifier.d.ts +1 -1
  413. package/dist/source-agent-qualifier.js +31 -15
  414. package/dist/{storage-DqCzXi56.d.ts → storage-qOnaJ1Lw.d.ts} +49 -13
  415. package/dist/storage.d.ts +2 -2
  416. package/dist/storage.js +33 -12
  417. package/dist/summarizer.d.ts +1 -1
  418. package/dist/summarizer.js +5 -5
  419. package/dist/summary-snapshot.d.ts +1 -1
  420. package/dist/support-passport/index.d.ts +518 -0
  421. package/dist/support-passport/index.js +357 -0
  422. package/dist/support-passport/index.js.map +1 -0
  423. package/dist/temporal-supersession.d.ts +2 -2
  424. package/dist/temporal-timeline-recall.d.ts +1 -1
  425. package/dist/temporal-validity.d.ts +1 -1
  426. package/dist/threading.d.ts +1 -1
  427. package/dist/tier-migration.d.ts +2 -2
  428. package/dist/tier-routing.d.ts +2 -2
  429. package/dist/tier-routing.js +7 -1
  430. package/dist/{tier-stats-2JCZYEF7.js → tier-stats-EXYSKSVN.js} +8 -2
  431. package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-EXYSKSVN.js.map} +1 -1
  432. package/dist/topics.d.ts +1 -1
  433. package/dist/transcript.d.ts +1 -1
  434. package/dist/transfer/autodetect.js +1 -1
  435. package/dist/transfer/backup.js +1 -1
  436. package/dist/transfer/capsule-export.js +2 -2
  437. package/dist/transfer/types.d.ts +36 -36
  438. package/dist/trust-score-stage.d.ts +1 -1
  439. package/dist/trust-score.d.ts +1 -1
  440. package/dist/{types-d_j4vC6N.d.ts → types-ed-SvS2t.d.ts} +8 -1
  441. package/dist/types.d.ts +1 -1
  442. package/dist/types.js +1 -1
  443. package/dist/utility-runtime.d.ts +2 -2
  444. package/dist/verified-recall.js +33 -12
  445. package/dist/write-envelope.d.ts +1 -1
  446. package/dist/write-rate-limiter.d.ts +11 -5
  447. package/dist/write-rate-limiter.js +1 -1
  448. package/package.json +12 -2
  449. package/scripts/build-with-heap.mjs +11 -1
  450. package/src/access-authorization-probe.ts +20 -2
  451. package/src/access-boundary.ts +32 -0
  452. package/src/access-http.test.ts +1971 -643
  453. package/src/access-http.ts +81 -74
  454. package/src/access-mcp.ts +3 -1
  455. package/src/access-memory-search-fanout.ts +24 -1
  456. package/src/access-offline-manifest.ts +5 -0
  457. package/src/access-operations.ts +2 -0
  458. package/src/access-service-namespace.test.ts +14 -0
  459. package/src/access-service-observe-scope.test.ts +2 -0
  460. package/src/access-service-offline-file-content.test.ts +211 -0
  461. package/src/access-service.ts +628 -884
  462. package/src/access-surface-catalog.test.ts +40 -10
  463. package/src/access-surface-catalog.ts +15 -0
  464. package/src/active-memory-bridge.test.ts +151 -0
  465. package/src/active-memory-bridge.ts +95 -21
  466. package/src/briefing.test.ts +38 -0
  467. package/src/briefing.ts +3 -3
  468. package/src/cli.ts +6 -1
  469. package/src/config.ts +18 -9
  470. package/src/connectors/codex-materialize-runner.ts +2 -0
  471. package/src/contradiction/contradiction-scan.ts +2 -0
  472. package/src/contradiction/contradiction.test.ts +42 -0
  473. package/src/correction/correction-access-wiring.ts +8 -2
  474. package/src/correction/correction-storage-integration.test.ts +7 -0
  475. package/src/explicit-capture.test.ts +24 -0
  476. package/src/explicit-capture.ts +2 -0
  477. package/src/fallback-llm.test.ts +54 -0
  478. package/src/fallback-llm.ts +54 -9
  479. package/src/index.ts +3 -0
  480. package/src/inline-script.ts +6 -0
  481. package/src/local-llm-headers-timeout.test.ts +42 -0
  482. package/src/local-llm.ts +8 -8
  483. package/src/maintenance/first-start-migration.ts +2 -1
  484. package/src/maintenance/memory-governance.test.ts +25 -0
  485. package/src/maintenance/memory-governance.ts +4 -1
  486. package/src/maintenance/pattern-reinforcement.test.ts +20 -0
  487. package/src/maintenance/pattern-reinforcement.ts +2 -1
  488. package/src/maintenance/rebuild-memory-projection.ts +8 -8
  489. package/src/mcp-read-only-tools.ts +3 -0
  490. package/src/memory-projection-store.ts +25 -27
  491. package/src/offline-sync-file-io.ts +68 -0
  492. package/src/offline-sync.ts +43 -57
  493. package/src/orchestration/consolidation-run.ts +5 -4
  494. package/src/orchestration/contradiction-linking-coordinator.ts +7 -0
  495. package/src/orchestration/contradiction-localization.integration.test.ts +115 -0
  496. package/src/orchestration/lifecycle-policy-coordinator.ts +2 -1
  497. package/src/orchestration/qmd-result-resolver.test.ts +215 -14
  498. package/src/orchestration/qmd-result-resolver.ts +142 -82
  499. package/src/orchestration/recall-search-pipeline.test.ts +41 -0
  500. package/src/orchestration/recall-search-pipeline.ts +12 -0
  501. package/src/orchestration/semantic-consolidation-coordinator.ts +2 -1
  502. package/src/orchestration/tier-migration-coordinator.ts +23 -56
  503. package/src/orchestration/workspace-ops.test.ts +37 -0
  504. package/src/orchestration/workspace-ops.ts +5 -29
  505. package/src/orchestrator.ts +7 -8
  506. package/src/relay/mission-access.test.ts +11 -11
  507. package/src/relay/mission-ui.test.ts +3 -1
  508. package/src/storage/supersession-audit.ts +7 -1
  509. package/src/storage/supersession-side-effects.ts +17 -5
  510. package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
  511. package/src/storage-contract/failure-semantics.test.ts +102 -0
  512. package/src/storage.ts +18 -19
  513. package/src/support-passport/access-http-base.ts +143 -0
  514. package/src/support-passport/access-http.ts +172 -0
  515. package/src/support-passport/access-operations.ts +272 -0
  516. package/src/support-passport/access-service-base.test.ts +193 -0
  517. package/src/support-passport/access-service-base.ts +176 -0
  518. package/src/support-passport/access-surface.test.ts +283 -0
  519. package/src/support-passport/access-surface.ts +286 -0
  520. package/src/support-passport/card-projection.test.ts +137 -0
  521. package/src/support-passport/card-projection.ts +348 -0
  522. package/src/support-passport/card-replacement.ts +126 -0
  523. package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
  524. package/src/support-passport/card-service.test.ts +2964 -0
  525. package/src/support-passport/card-service.ts +1184 -0
  526. package/src/support-passport/card-state.ts +158 -0
  527. package/src/support-passport/config-model-routing.test.ts +37 -0
  528. package/src/support-passport/config.test.ts +34 -0
  529. package/src/support-passport/config.ts +41 -0
  530. package/src/support-passport/contracts.test.ts +156 -0
  531. package/src/support-passport/contracts.ts +149 -0
  532. package/src/support-passport/errors.ts +30 -0
  533. package/src/support-passport/generated-batch.test.ts +185 -0
  534. package/src/support-passport/generated-batch.ts +338 -0
  535. package/src/support-passport/grant-contracts.ts +183 -0
  536. package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
  537. package/src/support-passport/grant-service-cache.test.ts +148 -0
  538. package/src/support-passport/grant-service-cancellation.test.ts +83 -0
  539. package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
  540. package/src/support-passport/grant-service.test.ts +3496 -0
  541. package/src/support-passport/grant-service.ts +513 -0
  542. package/src/support-passport/grant-store-commit-hook.test.ts +123 -0
  543. package/src/support-passport/grant-store-order.test.ts +60 -0
  544. package/src/support-passport/grant-store-path-safety.test.ts +30 -0
  545. package/src/support-passport/grant-store-recovery.test.ts +448 -0
  546. package/src/support-passport/grant-store.ts +906 -0
  547. package/src/support-passport/index.ts +17 -0
  548. package/src/support-passport/mcp-tools.test.ts +222 -0
  549. package/src/support-passport/mcp-tools.ts +187 -0
  550. package/src/support-passport/model-adapter.test.ts +840 -0
  551. package/src/support-passport/model-adapter.ts +602 -0
  552. package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
  553. package/src/support-passport/model-audit.ts +152 -0
  554. package/src/support-passport/model-bridge.test.ts +456 -0
  555. package/src/support-passport/model-bridge.ts +439 -0
  556. package/src/support-passport/model-contracts.ts +124 -0
  557. package/src/support-passport/model-service.test.ts +1731 -0
  558. package/src/support-passport/model-service.ts +399 -0
  559. package/src/support-passport/offline-sync-guard.ts +230 -0
  560. package/src/support-passport/owner-http.test.ts +671 -0
  561. package/src/support-passport/owner-lock.ts +70 -0
  562. package/src/support-passport/private-file.test.ts +99 -0
  563. package/src/support-passport/private-file.ts +498 -0
  564. package/src/support-passport/public-http.test.ts +476 -0
  565. package/src/support-passport/public-http.ts +601 -0
  566. package/src/support-passport/ui.test.ts +181 -0
  567. package/src/tier-routing.ts +28 -17
  568. package/src/training-export/converter.test.ts +24 -0
  569. package/src/training-export/converter.ts +2 -0
  570. package/src/types.ts +8 -1
  571. package/src/wearables/service.test.ts +13 -0
  572. package/src/wearables/service.ts +2 -0
  573. package/src/write-rate-limiter.test.ts +30 -6
  574. package/src/write-rate-limiter.ts +29 -18
  575. package/dist/chunk-3CSX3ETE.js.map +0 -1
  576. package/dist/chunk-47P3RYZP.js.map +0 -1
  577. package/dist/chunk-6LAPLZOS.js.map +0 -1
  578. package/dist/chunk-6R4G7N4S.js.map +0 -1
  579. package/dist/chunk-7BZOBA5J.js.map +0 -1
  580. package/dist/chunk-C23BYTJV.js.map +0 -1
  581. package/dist/chunk-CYF6WVE7.js.map +0 -1
  582. package/dist/chunk-G2LUMAUF.js.map +0 -1
  583. package/dist/chunk-GYPQL6XN.js.map +0 -1
  584. package/dist/chunk-JDZPNCMA.js.map +0 -1
  585. package/dist/chunk-JV5YUBIZ.js.map +0 -1
  586. package/dist/chunk-K4QS7LXU.js.map +0 -1
  587. package/dist/chunk-L6CQ7WIW.js.map +0 -1
  588. package/dist/chunk-MKQBXQKU.js.map +0 -1
  589. package/dist/chunk-NH5IR2WM.js.map +0 -1
  590. package/dist/chunk-PX2LSHYM.js.map +0 -1
  591. package/dist/chunk-QWGE2PUH.js.map +0 -1
  592. package/dist/chunk-RUMNY5DT.js.map +0 -1
  593. package/dist/chunk-S75M5ZRK.js.map +0 -1
  594. package/dist/chunk-T2JHZWH6.js.map +0 -1
  595. package/dist/chunk-UES4BHA2.js.map +0 -1
  596. package/dist/chunk-UTRO5UJU.js.map +0 -1
  597. package/dist/chunk-UU3G6GUP.js.map +0 -1
  598. package/dist/chunk-XUAMCLY4.js.map +0 -1
  599. package/dist/chunk-ZYLC7NFO.js.map +0 -1
  600. package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
  601. package/dist/first-start-migration-626C5554.js.map +0 -1
  602. /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
  603. /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
  604. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  605. /package/dist/{chunk-PDDTI7IC.js.map → chunk-43SEBY2M.js.map} +0 -0
  606. /package/dist/{chunk-HWRD23DW.js.map → chunk-46SZBVDS.js.map} +0 -0
  607. /package/dist/{chunk-6HPHEFXT.js.map → chunk-5FD7JMTX.js.map} +0 -0
  608. /package/dist/{chunk-IBKR2TFR.js.map → chunk-6CYHUWCO.js.map} +0 -0
  609. /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
  610. /package/dist/{chunk-NIS256NW.js.map → chunk-CIAI24TQ.js.map} +0 -0
  611. /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
  612. /package/dist/{chunk-G7Z6EENO.js.map → chunk-EKTP7MNS.js.map} +0 -0
  613. /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-FFRTNF3L.js.map} +0 -0
  614. /package/dist/{chunk-VKXWK44Q.js.map → chunk-FONWBCVY.js.map} +0 -0
  615. /package/dist/{chunk-DZD576ZU.js.map → chunk-FPLM2TKD.js.map} +0 -0
  616. /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-FTPONF6B.js.map} +0 -0
  617. /package/dist/{chunk-LJS7KUPV.js.map → chunk-FWX7W5PM.js.map} +0 -0
  618. /package/dist/{chunk-G4T7L557.js.map → chunk-GN3WRFJY.js.map} +0 -0
  619. /package/dist/{chunk-QT2FRYI4.js.map → chunk-H7NAZ3UB.js.map} +0 -0
  620. /package/dist/{chunk-APPFNGX6.js.map → chunk-HBUFQRIM.js.map} +0 -0
  621. /package/dist/{chunk-UU7TRFNE.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
  622. /package/dist/{chunk-C4ZNGVK3.js.map → chunk-IKP5OYQQ.js.map} +0 -0
  623. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  624. /package/dist/{chunk-RDJRFDJY.js.map → chunk-IQ4NVWEF.js.map} +0 -0
  625. /package/dist/{chunk-CGVHPCP2.js.map → chunk-JYG4OLWH.js.map} +0 -0
  626. /package/dist/{chunk-WOPA3SGI.js.map → chunk-K26NWEOC.js.map} +0 -0
  627. /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
  628. /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
  629. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  630. /package/dist/{chunk-3JLPGJ43.js.map → chunk-MIH3CJPN.js.map} +0 -0
  631. /package/dist/{chunk-QHFV6VNU.js.map → chunk-MK5VEWCR.js.map} +0 -0
  632. /package/dist/{chunk-GUKBW4HL.js.map → chunk-NQMSEB5D.js.map} +0 -0
  633. /package/dist/{chunk-WRJVB3C2.js.map → chunk-PO7NXBG2.js.map} +0 -0
  634. /package/dist/{chunk-AZM4CCAC.js.map → chunk-QZLDRQ4I.js.map} +0 -0
  635. /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
  636. /package/dist/{chunk-VMMQDEN5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
  637. /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
  638. /package/dist/{chunk-HLYR2TQL.js.map → chunk-UCTS3DDH.js.map} +0 -0
  639. /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
  640. /package/dist/{chunk-WM65LU67.js.map → chunk-UKYS3NU5.js.map} +0 -0
  641. /package/dist/{chunk-WDBX6VER.js.map → chunk-UPLZNJKN.js.map} +0 -0
  642. /package/dist/{chunk-2GFK22OZ.js.map → chunk-V6ERBR7U.js.map} +0 -0
  643. /package/dist/{chunk-ZMYDYNI4.js.map → chunk-XZHE2DEN.js.map} +0 -0
  644. /package/dist/{chunk-MAXVH44E.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  645. /package/dist/{chunk-YGLY6QFV.js.map → chunk-ZRZVLB7O.js.map} +0 -0
  646. /package/dist/{chunk-4IIFL7GC.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
  647. /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
  648. /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
@@ -7,6 +7,7 @@ import { RECALL_FALLBACK_DIRS } from "../utils/category-dir.js";
7
7
  import { bumpMemoryCorpusVersionForDir } from "../memory-corpus-version.js";
8
8
  import { assertPathInsideRoot } from "../utils/path-containment.js";
9
9
  import { requestEntityCanonicalIdReconcile } from "../storage/entity-canonical-id-references.js";
10
+ import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
10
11
 
11
12
  export type MemoryGovernanceMode = "shadow" | "apply";
12
13
  export type MemoryGovernanceReasonCode =
@@ -830,7 +831,9 @@ export async function runMemoryGovernance(
830
831
  updatedAfter,
831
832
  })
832
833
  : undefined;
833
- const memories = memoryWindow?.memories ?? await storage.readAllMemories();
834
+ const memories = excludeSupportPassportPrivateMemories(
835
+ memoryWindow?.memories ?? await storage.readAllMemories(),
836
+ );
834
837
  const reviewQueue = await buildReviewQueue(options.memoryDir, storage, memories, now, {
835
838
  malformedCandidateFiles: memoryWindow?.filePaths,
836
839
  });
@@ -328,6 +328,26 @@ test("runPatternReinforcement: skips out-of-scope categories", async () => {
328
328
  assert.equal(writes.length, 0);
329
329
  });
330
330
 
331
+ test("runPatternReinforcement: excludes support-passport private records", async () => {
332
+ const content = "Give me advance notice before plans change.";
333
+ const passport = makeMemory({
334
+ id: "passport-card",
335
+ content,
336
+ tags: ["support-passport-card"],
337
+ });
338
+ const publicPreference = makeMemory({ id: "public-preference", content });
339
+ const { stub, writes } = makeStorageStub([passport, publicPreference]);
340
+
341
+ const result = await runPatternReinforcement(stub, {
342
+ categories: ["preference"],
343
+ minCount: 2,
344
+ now: frozenNow,
345
+ });
346
+
347
+ assert.equal(result.clustersFound, 0);
348
+ assert.deepEqual(writes, []);
349
+ });
350
+
331
351
  test("runPatternReinforcement: counts both active and already-superseded members; only writes to active duplicates", async () => {
332
352
  const dupContent = "mixed status cluster";
333
353
  const memories = [
@@ -35,6 +35,7 @@
35
35
  import { clusterByKey } from "../procedural/reinforcement-core.js";
36
36
  import { buildRetiredFactTombstoneInputs, type TombstoneReason, type TombstoneCreatedBy } from "../lifecycle/tombstones.js";
37
37
  import { supersessionKeysForFact } from "../temporal-supersession.js";
38
+ import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
38
39
  import type {
39
40
  MemoryFile,
40
41
  MemoryFrontmatter,
@@ -225,7 +226,7 @@ export async function runPatternReinforcement(
225
226
  return emptyResult();
226
227
  }
227
228
 
228
- const memories = await storage.readAllMemories();
229
+ const memories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
229
230
 
230
231
  // Cluster across BOTH active and already-superseded memories so a
231
232
  // canonical that has previously absorbed duplicates still gets
@@ -44,6 +44,7 @@ import {
44
44
  } from "../memory-projection-format.js";
45
45
  import { openBetterSqlite3 } from "../runtime/better-sqlite.js";
46
46
  import { commitPreparedFileAtomically } from "./atomic-file.js";
47
+ import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
47
48
 
48
49
  export interface RebuildMemoryProjectionOptions {
49
50
  memoryDir: string;
@@ -204,6 +205,7 @@ function toCurrentStateRow(memoryDir: string, memory: MemoryFile): MemoryProject
204
205
  lastAccessed: memory.frontmatter.lastAccessed,
205
206
  tags: normalizeProjectionTags(memory.frontmatter.tags),
206
207
  preview: normalizeProjectionPreview(memory.content),
208
+ privateRecord: isSupportPassportPrivateMemory(memory),
207
209
  };
208
210
  }
209
211
 
@@ -406,6 +408,7 @@ function serializeCurrentStateRow(row: MemoryProjectionCurrentState): string {
406
408
  lastAccessed: row.lastAccessed ?? null,
407
409
  tags: row.tags ?? [],
408
410
  preview: row.preview ?? "",
411
+ privateRecord: row.privateRecord === true,
409
412
  });
410
413
  }
411
414
 
@@ -691,8 +694,7 @@ function readProjectedCurrentRows(
691
694
  memory_kind,
692
695
  access_count,
693
696
  last_accessed,
694
- ${selectExpressions.tagsJson},
695
- ${selectExpressions.previewText}
697
+ ${selectExpressions.tagsJson}, ${selectExpressions.previewText}, ${selectExpressions.privateRecord}
696
698
  FROM memory_current
697
699
  `).all() as Array<Record<string, unknown>>;
698
700
 
@@ -788,9 +790,8 @@ function writeProjectionDb(
788
790
  memory_kind,
789
791
  access_count,
790
792
  last_accessed,
791
- tags_json,
792
- preview_text
793
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
793
+ tags_json, preview_text, private_record
794
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
794
795
  `);
795
796
 
796
797
  const insertTimeline = db.prepare(`
@@ -899,9 +900,8 @@ function writeProjectionDb(
899
900
  row.confidenceTier,
900
901
  row.memoryKind ?? null,
901
902
  row.accessCount ?? null,
902
- row.lastAccessed ?? null,
903
- JSON.stringify(row.tags ?? []),
904
- row.preview ?? "",
903
+ row.lastAccessed ?? null, JSON.stringify(row.tags ?? []), row.preview ?? "",
904
+ row.privateRecord === true ? 1 : 0,
905
905
  );
906
906
  }
907
907
 
@@ -61,4 +61,7 @@ export const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {
61
61
  codegraph_get_snippet: true,
62
62
  codegraph_get_architecture: true,
63
63
  codegraph_search_code: true,
64
+ support_passport_memory_preview: true,
65
+ support_passport_cards_list: true,
66
+ support_passport_grants_list: true,
64
67
  };
@@ -20,12 +20,11 @@ import {
20
20
  type BetterSqlite3Database,
21
21
  } from "./runtime/better-sqlite.js";
22
22
 
23
- export const MEMORY_PROJECTION_SCHEMA_VERSION = 3;
23
+ export const MEMORY_PROJECTION_SCHEMA_VERSION = 4;
24
24
 
25
25
  export interface ProjectedMemoryBrowseOptions {
26
- query?: string;
27
- status?: string;
28
- category?: string;
26
+ query?: string; status?: string; category?: string;
27
+ excludeTags?: readonly string[]; excludePrivateRecords?: boolean;
29
28
  sort?: "updated_desc" | "updated_asc" | "created_desc" | "created_asc";
30
29
  limit: number;
31
30
  offset: number;
@@ -154,15 +153,15 @@ function migrateProjectionSchemaIfNeeded(memoryDir: string): void {
154
153
  }
155
154
 
156
155
  export function memoryCurrentSelectExpressions(db: BetterSqlite3Database): {
157
- tagsJson: string;
158
- previewText: string;
159
- hasPathValid: boolean;
156
+ tagsJson: string; previewText: string; hasPathValid: boolean;
157
+ privateRecord: string; hasPrivateRecord: boolean;
160
158
  } {
161
159
  const columns = listTableColumns(db, "memory_current");
162
160
  return {
163
161
  tagsJson: columns.has("tags_json") ? "tags_json" : `'[]' AS tags_json`,
164
- previewText: columns.has("preview_text") ? "preview_text" : `'' AS preview_text`,
165
- hasPathValid: columns.has("path_valid"),
162
+ previewText: columns.has("preview_text") ? "preview_text" : `'' AS preview_text`, hasPathValid: columns.has("path_valid"),
163
+ privateRecord: columns.has("private_record") ? "private_record" : "0 AS private_record",
164
+ hasPrivateRecord: columns.has("private_record"),
166
165
  };
167
166
  }
168
167
 
@@ -192,7 +191,8 @@ export function initializeMemoryProjectionDb(db: BetterSqlite3Database): void {
192
191
  access_count INTEGER,
193
192
  last_accessed TEXT,
194
193
  tags_json TEXT NOT NULL DEFAULT '[]',
195
- preview_text TEXT NOT NULL DEFAULT ''
194
+ preview_text TEXT NOT NULL DEFAULT '',
195
+ private_record INTEGER NOT NULL DEFAULT 0 CHECK (private_record IN (0, 1))
196
196
  );
197
197
 
198
198
  CREATE INDEX IF NOT EXISTS idx_memory_current_status
@@ -428,6 +428,7 @@ const REQUIRED_MEMORY_CURRENT_COLUMNS = [
428
428
  "created_at",
429
429
  "updated_at",
430
430
  "entity_ref",
431
+ "private_record",
431
432
  ] as const;
432
433
 
433
434
  function assertProjectionSchemaReadable(db: BetterSqlite3Database): void {
@@ -698,6 +699,7 @@ export function parseCurrentRow(
698
699
  lastAccessed: typeof row.last_accessed === "string" ? row.last_accessed : undefined,
699
700
  tags: parseStringArray(row.tags_json),
700
701
  preview: typeof row.preview_text === "string" ? row.preview_text : "",
702
+ privateRecord: row.private_record === 1,
701
703
  };
702
704
  }
703
705
 
@@ -760,7 +762,8 @@ export function readProjectedMemoryState(
760
762
  access_count,
761
763
  last_accessed,
762
764
  ${currentSelect.tagsJson},
763
- ${currentSelect.previewText}
765
+ ${currentSelect.previewText},
766
+ ${currentSelect.privateRecord}
764
767
  FROM memory_current
765
768
  WHERE memory_id = ?
766
769
  `,
@@ -820,38 +823,33 @@ export function readProjectedMemoryBrowse(
820
823
  ): ProjectedMemoryBrowsePage | null {
821
824
  return withProjectionReadonly(memoryDir, (db) => {
822
825
  const normalizedQuery = options.query?.trim().toLowerCase() ?? "";
823
-
824
826
  const currentSelect = memoryCurrentSelectExpressions(db);
827
+ if ((options.excludeTags?.length ?? 0) > 0 && currentSelect.tagsJson.startsWith("'[]'"))
828
+ throw new Error("tag exclusions require tags_json");
829
+ if (options.excludePrivateRecords && !currentSelect.hasPrivateRecord)
830
+ throw new Error("private-record exclusions require private_record");
825
831
  const whereClauses: string[] = [];
826
832
  const params: unknown[] = [];
827
-
828
- if (options.status) {
829
- whereClauses.push("status = ?");
830
- params.push(options.status);
833
+ if (options.status) { whereClauses.push("status = ?"); params.push(options.status); }
834
+ if (options.category) { whereClauses.push("category = ?"); params.push(options.category); }
835
+ for (const tag of options.excludeTags ?? []) {
836
+ whereClauses.push("NOT EXISTS (SELECT 1 FROM json_each(memory_current.tags_json) WHERE value = ?)");
837
+ params.push(tag);
831
838
  }
832
- if (options.category) {
833
- whereClauses.push("category = ?");
834
- params.push(options.category);
835
- }
836
- const sort = options.sort ?? "updated_desc";
839
+ if (options.excludePrivateRecords) whereClauses.push("private_record = 0");
837
840
  const orderBySql = (() => {
838
- switch (sort) {
841
+ switch (options.sort ?? "updated_desc") {
839
842
  case "updated_asc":
840
843
  return "updated_at ASC, created_at ASC, memory_id ASC";
841
844
  case "created_desc":
842
845
  return "created_at DESC, updated_at DESC, memory_id ASC";
843
846
  case "created_asc":
844
847
  return "created_at ASC, updated_at ASC, memory_id ASC";
845
- case "updated_desc":
846
848
  default:
847
849
  return "updated_at DESC, created_at DESC, memory_id ASC";
848
850
  }
849
851
  })();
850
- const whereSql = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
851
-
852
852
  if (normalizedQuery) {
853
- // Full-content search still examines every eligible row so totals and
854
- // matches stay exact, but iteration keeps memory use proportional to the page.
855
853
  const queryWhereClauses = currentSelect.hasPathValid
856
854
  ? [...whereClauses, ...projectedBrowsePathSqlClauses(), "path_valid = 1"]
857
855
  : whereClauses;
@@ -0,0 +1,68 @@
1
+ import { createHash } from "node:crypto";
2
+ import { createReadStream } from "node:fs";
3
+ import { open } from "node:fs/promises";
4
+ import { MAGIC_HEADER_SIZE, isEncryptedFile } from "./secure-store/secure-fs.js";
5
+
6
+ export interface OfflineSyncFileTarget {
7
+ root: string;
8
+ path: string;
9
+ filePath: string;
10
+ }
11
+
12
+ export type OfflineSyncExcludeFile = (target: OfflineSyncFileTarget) => boolean | Promise<boolean>;
13
+
14
+ function throwIfAborted(signal: AbortSignal | undefined): void {
15
+ if (signal?.aborted) throw new Error("offline sync request aborted");
16
+ }
17
+
18
+ export async function shouldExcludeOfflineSyncFile(
19
+ excludeFile: OfflineSyncExcludeFile | undefined,
20
+ target: OfflineSyncFileTarget
21
+ ): Promise<boolean> {
22
+ return excludeFile ? await excludeFile(target) : false;
23
+ }
24
+
25
+ export async function sha256OfflineSyncFile(
26
+ filePath: string,
27
+ signal?: AbortSignal
28
+ ): Promise<{ sha256: string; bytes: number }> {
29
+ const hash = createHash("sha256");
30
+ let bytes = 0;
31
+ for await (const chunk of createReadStream(filePath)) {
32
+ throwIfAborted(signal);
33
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
34
+ hash.update(buffer);
35
+ bytes += buffer.length;
36
+ }
37
+ throwIfAborted(signal);
38
+ return { sha256: hash.digest("hex"), bytes };
39
+ }
40
+
41
+ export async function isEncryptedOfflineSyncFile(filePath: string): Promise<boolean> {
42
+ const handle = await open(filePath, "r");
43
+ try {
44
+ const header = Buffer.alloc(MAGIC_HEADER_SIZE);
45
+ const { bytesRead } = await handle.read(header, 0, header.length, 0);
46
+ return bytesRead >= MAGIC_HEADER_SIZE && isEncryptedFile(header);
47
+ } finally {
48
+ await handle.close();
49
+ }
50
+ }
51
+
52
+ export async function readPlainOfflineSyncFileChunk(options: {
53
+ filePath: string;
54
+ offset: number;
55
+ length: number;
56
+ bytes: number;
57
+ }): Promise<Buffer> {
58
+ const chunkBytes = Math.min(options.length, options.bytes - options.offset);
59
+ const chunk = Buffer.alloc(chunkBytes);
60
+ if (chunkBytes === 0) return chunk;
61
+ const handle = await open(options.filePath, "r");
62
+ try {
63
+ const { bytesRead } = await handle.read(chunk, 0, chunk.length, options.offset);
64
+ return bytesRead === chunk.length ? chunk : chunk.subarray(0, bytesRead);
65
+ } finally {
66
+ await handle.close();
67
+ }
68
+ }
@@ -1,5 +1,4 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
2
  import {
4
3
  lstat,
5
4
  mkdir,
@@ -17,7 +16,6 @@ import path from "node:path";
17
16
  import {
18
17
  DEFAULT_TRANSFER_EXCLUDE_DIRS,
19
18
  } from "./transfer/exclusions.js";
20
- import { isEncryptedFile, MAGIC_HEADER_SIZE } from "./secure-store/secure-fs.js";
21
19
  import {
22
20
  prepareSafeArchiveRoot,
23
21
  resolveSafeArchiveTarget,
@@ -27,6 +25,16 @@ import {
27
25
  } from "./transfer/fs-utils.js";
28
26
  import { parseFlexibleIsoTimestamp } from "./utils/iso-timestamp.js";
29
27
  import { DEFAULT_OFFLINE_SYNC_EXCLUDE_GLOBS } from "./offline-sync-exclude-globs.js";
28
+ import {
29
+ isEncryptedOfflineSyncFile,
30
+ readPlainOfflineSyncFileChunk,
31
+ sha256OfflineSyncFile,
32
+ shouldExcludeOfflineSyncFile,
33
+ type OfflineSyncExcludeFile,
34
+ type OfflineSyncFileTarget,
35
+ } from "./offline-sync-file-io.js";
36
+
37
+ export type { OfflineSyncExcludeFile, OfflineSyncFileTarget } from "./offline-sync-file-io.js";
30
38
 
31
39
  export const OFFLINE_SYNC_SNAPSHOT_FORMAT = "remnic.offline-sync.snapshot.v1";
32
40
  export const OFFLINE_SYNC_CHANGESET_FORMAT = "remnic.offline-sync.changeset.v1";
@@ -141,12 +149,6 @@ export interface OfflineSyncChangesetSummary {
141
149
  total: number;
142
150
  }
143
151
 
144
- export interface OfflineSyncFileTarget {
145
- root: string;
146
- path: string;
147
- filePath: string;
148
- }
149
-
150
152
  export interface OfflineSyncFileDeleteTarget extends OfflineSyncFileTarget {
151
153
  mtimeMs?: number;
152
154
  }
@@ -826,7 +828,7 @@ async function readOfflineSyncFileRecord(
826
828
  digest = sha256Buffer(content);
827
829
  content = null;
828
830
  } else {
829
- digest = await sha256File(options.filePath, options.signal);
831
+ digest = await sha256OfflineSyncFile(options.filePath, options.signal);
830
832
  }
831
833
  throwIfOfflineSyncAborted(options.signal);
832
834
  const st = await stat(options.filePath);
@@ -839,57 +841,13 @@ async function readOfflineSyncFileRecord(
839
841
  };
840
842
  }
841
843
 
842
- async function sha256File(filePath: string, signal?: AbortSignal): Promise<OfflineSyncFileDigest> {
843
- const hash = createHash("sha256");
844
- let bytes = 0;
845
- for await (const chunk of createReadStream(filePath)) {
846
- throwIfOfflineSyncAborted(signal);
847
- const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
848
- hash.update(buffer);
849
- bytes += buffer.length;
850
- }
851
- throwIfOfflineSyncAborted(signal);
852
- return {
853
- sha256: hash.digest("hex"),
854
- bytes,
855
- };
856
- }
857
-
858
- async function fileIsSecureStoreEncrypted(filePath: string): Promise<boolean> {
859
- const handle = await open(filePath, "r");
860
- try {
861
- const header = Buffer.alloc(MAGIC_HEADER_SIZE);
862
- const { bytesRead } = await handle.read(header, 0, header.length, 0);
863
- return bytesRead >= MAGIC_HEADER_SIZE && isEncryptedFile(header);
864
- } finally {
865
- await handle.close();
866
- }
867
- }
868
-
869
- async function readPlainFileContentChunk(options: {
870
- filePath: string;
871
- offset: number;
872
- length: number;
873
- bytes: number;
874
- }): Promise<Buffer> {
875
- const chunkBytes = Math.min(options.length, options.bytes - options.offset);
876
- const chunk = Buffer.alloc(chunkBytes);
877
- if (chunkBytes === 0) return chunk;
878
- const handle = await open(options.filePath, "r");
879
- try {
880
- const { bytesRead } = await handle.read(chunk, 0, chunk.length, options.offset);
881
- return bytesRead === chunk.length ? chunk : chunk.subarray(0, bytesRead);
882
- } finally {
883
- await handle.close();
884
- }
885
- }
886
-
887
844
  export async function* iterateOfflineSyncSnapshotFileRecords(options: {
888
845
  root: string;
889
846
  includeContent?: boolean;
890
847
  includeTranscripts?: boolean;
891
848
  readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
892
849
  readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
850
+ excludeFile?: OfflineSyncExcludeFile;
893
851
  userExcludeRegexps?: readonly RegExp[];
894
852
  /**
895
853
  * When false, enumeration uses only the legacy structural excludes —
@@ -924,6 +882,11 @@ export async function* iterateOfflineSyncSnapshotFileRecords(options: {
924
882
  continue;
925
883
  }
926
884
  if (!entry.isFile()) continue;
885
+ if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
886
+ root: root.abs,
887
+ path: relPosix,
888
+ filePath: abs,
889
+ })) continue;
927
890
  yield await readOfflineSyncFileRecord({
928
891
  root,
929
892
  relPath: relPosix,
@@ -948,6 +911,7 @@ export async function buildOfflineSyncSnapshot(options: {
948
911
  now?: Date;
949
912
  readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
950
913
  readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
914
+ excludeFile?: OfflineSyncExcludeFile;
951
915
  userExcludeRegexps?: readonly RegExp[];
952
916
  /**
953
917
  * When false, enumeration uses only the legacy structural excludes —
@@ -995,6 +959,7 @@ export async function buildOfflineSyncSnapshotFromBase(options: {
995
959
  now?: Date;
996
960
  readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
997
961
  readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
962
+ excludeFile?: OfflineSyncExcludeFile;
998
963
  userExcludeRegexps?: readonly RegExp[];
999
964
  /**
1000
965
  * When false, enumeration uses only the legacy structural excludes —
@@ -1039,6 +1004,11 @@ export async function buildOfflineSyncSnapshotFromBase(options: {
1039
1004
  continue;
1040
1005
  }
1041
1006
  if (!entry.isFile()) continue;
1007
+ if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
1008
+ root: root.abs,
1009
+ path: relPosix,
1010
+ filePath: abs,
1011
+ })) continue;
1042
1012
  const st = await stat(abs);
1043
1013
  const baseEntry = base.get(relPosix);
1044
1014
  if (
@@ -1094,6 +1064,7 @@ export async function buildOfflineSyncSnapshotForPaths(options: {
1094
1064
  now?: Date;
1095
1065
  readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
1096
1066
  readFileDigest?: (target: OfflineSyncFileTarget) => Promise<OfflineSyncFileDigest>;
1067
+ excludeFile?: OfflineSyncExcludeFile;
1097
1068
  userExcludeRegexps?: readonly RegExp[];
1098
1069
  /**
1099
1070
  * When false, enumeration uses only the legacy structural excludes —
@@ -1130,6 +1101,13 @@ export async function buildOfflineSyncSnapshotForPaths(options: {
1130
1101
  throw error;
1131
1102
  });
1132
1103
  if (!st || st.isSymbolicLink() || !st.isFile()) continue;
1104
+ if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
1105
+ root: root.abs,
1106
+ path: relPath,
1107
+ filePath,
1108
+ })) {
1109
+ throw new Error(`offline sync snapshot path is excluded: ${relPath}`);
1110
+ }
1133
1111
  files.push(await readOfflineSyncFileRecord({
1134
1112
  root,
1135
1113
  relPath,
@@ -1169,6 +1147,7 @@ export async function readOfflineSyncFileContentChunk(options: {
1169
1147
  length?: number;
1170
1148
  includeTranscripts?: boolean;
1171
1149
  readFile?: (target: OfflineSyncFileTarget) => Promise<Buffer>;
1150
+ excludeFile?: OfflineSyncExcludeFile;
1172
1151
  userExcludeRegexps?: readonly RegExp[];
1173
1152
  /**
1174
1153
  * When false, enumeration uses only the legacy structural excludes —
@@ -1209,12 +1188,19 @@ export async function readOfflineSyncFileContentChunk(options: {
1209
1188
  if (!st || st.isSymbolicLink() || !st.isFile()) {
1210
1189
  throw new Error(`offline sync file content path not found: ${relPath}`);
1211
1190
  }
1212
- const encrypted = await fileIsSecureStoreEncrypted(filePath);
1191
+ if (await shouldExcludeOfflineSyncFile(options.excludeFile, {
1192
+ root: root.abs,
1193
+ path: relPath,
1194
+ filePath,
1195
+ })) {
1196
+ throw new Error(`offline sync file content path is excluded: ${relPath}`);
1197
+ }
1198
+ const encrypted = await isEncryptedOfflineSyncFile(filePath);
1213
1199
  if (!encrypted) {
1214
1200
  if (offset > st.size) {
1215
1201
  throw new Error(`offset must be <= file size for ${relPath}`);
1216
1202
  }
1217
- const chunk = await readPlainFileContentChunk({
1203
+ const chunk = await readPlainOfflineSyncFileChunk({
1218
1204
  filePath,
1219
1205
  offset,
1220
1206
  length: requestedLength,
@@ -2017,7 +2003,7 @@ async function readLocalFileState(options: {
2017
2003
  const content = await options.readFile({ root: options.rootAbs, path: options.relPath, filePath });
2018
2004
  digest = sha256Buffer(content);
2019
2005
  } else {
2020
- digest = await sha256File(filePath, options.signal);
2006
+ digest = await sha256OfflineSyncFile(filePath, options.signal);
2021
2007
  }
2022
2008
  throwIfOfflineSyncAborted(options.signal);
2023
2009
  return {
@@ -67,6 +67,7 @@ import type {
67
67
  PluginConfig,
68
68
  RecallSectionConfig,
69
69
  } from "../types.js";
70
+ import { excludeSupportPassportPrivateMemories } from "../support-passport/card-projection.js";
70
71
 
71
72
  /** Dependencies injected by the orchestrator. Stable references or live
72
73
  * accessors — lazy getters for mutable fields tests reassign
@@ -449,7 +450,7 @@ export class ConsolidationRunCoordinator {
449
450
  }
450
451
  await this.pruneHarmonicStores(storage);
451
452
 
452
- let allMemories = await storage.readAllMemories();
453
+ let allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
453
454
  if (allMemories.length < 5) {
454
455
  return { memoriesProcessed: allMemories.length, merged, invalidated };
455
456
  }
@@ -801,7 +802,7 @@ export class ConsolidationRunCoordinator {
801
802
  // mutations for the catalog touch below (codex NThSW).
802
803
  const tierMigration = await this.deps.tierMigrationCoordinator.runCycle(storage, "maintenance");
803
804
  if (tierMigration.migrated > 0) memoryItemMutated = true;
804
- allMemories = await storage.readAllMemories();
805
+ allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
805
806
 
806
807
  // Fact archival pass (v6.0) — move old, low-importance, rarely-accessed facts to archive/
807
808
  if (resolveRecallEnhancementCapabilities(config).factArchival) {
@@ -823,7 +824,7 @@ export class ConsolidationRunCoordinator {
823
824
  } catch (err) {
824
825
  log.warn(`deep-sleep maintenance pass failed (ignored): ${err}`);
825
826
  try {
826
- allMemories = await storage.readAllMemories();
827
+ allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
827
828
  } catch (readErr) {
828
829
  log.warn(`deep-sleep maintenance recovery read failed: ${readErr}`);
829
830
  throw err;
@@ -862,7 +863,7 @@ export class ConsolidationRunCoordinator {
862
863
  const semResult = await this.deps.semanticConsolidationCoordinator.runSemanticConsolidation();
863
864
  let remItemsProcessed = allMemories.length;
864
865
  try {
865
- allMemories = await storage.readAllMemories();
866
+ allMemories = excludeSupportPassportPrivateMemories(await storage.readAllMemories());
866
867
  remItemsProcessed = allMemories.length;
867
868
  } catch (err) {
868
869
  log.warn(
@@ -43,6 +43,7 @@ import type {
43
43
  DependencyPropagationDeliveryPort,
44
44
  DependencyPropagationPreparationToken,
45
45
  } from "./dependency-propagation-delivery.js";
46
+ import { isSupportPassportPrivateMemory } from "../support-passport/card-projection.js";
46
47
 
47
48
  /** Result type of {@link ContradictionLinkingCoordinator.checkForContradiction}. */
48
49
  export interface ContradictionResult {
@@ -170,6 +171,7 @@ export class ContradictionLinkingCoordinator {
170
171
  const resultStorage = await this.storageForNamespace(resultNamespace);
171
172
  const existingMemory = await resultStorage.getMemoryById(memoryId);
172
173
  if (!existingMemory) continue;
174
+ if (isSupportPassportPrivateMemory(existingMemory)) continue;
173
175
  if (inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active") continue;
174
176
  const verification = await this.getExtraction().verifyContradiction(
175
177
  { content, category },
@@ -231,6 +233,9 @@ export class ContradictionLinkingCoordinator {
231
233
  ]);
232
234
  anchorSnapshot = mergeMemorySnapshots(hot, cold, resultStorage.dir);
233
235
  }
236
+ anchorSnapshot = anchorSnapshot?.filter(
237
+ (memory) => !isSupportPassportPrivateMemory(memory),
238
+ );
234
239
  const anchorMemoryById = anchorSnapshot
235
240
  ? new Map(anchorSnapshot.map((memory) => [memory.frontmatter.id, memory]))
236
241
  : undefined;
@@ -264,6 +269,7 @@ export class ContradictionLinkingCoordinator {
264
269
  anchorMemoryById?.get(memoryId) ?? (await resultStorage.getMemoryById(memoryId));
265
270
  if (
266
271
  !existingMemory ||
272
+ isSupportPassportPrivateMemory(existingMemory) ||
267
273
  inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active"
268
274
  ) continue;
269
275
  hits.push({
@@ -290,6 +296,7 @@ export class ContradictionLinkingCoordinator {
290
296
  anchorMemoryById?.get(candidate.id) ?? (await resultStorage.getMemoryById(candidate.id));
291
297
  if (
292
298
  !existingMemory ||
299
+ isSupportPassportPrivateMemory(existingMemory) ||
293
300
  inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active"
294
301
  ) continue;
295
302
  const verification = await this.getExtraction().verifyContradiction(