@remnic/core 9.54.5 → 9.54.7

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 (548) hide show
  1. package/dist/access-admin-ops-surface.d.ts +24 -24
  2. package/dist/access-admin-ops-surface.js +32 -29
  3. package/dist/access-authorization-probe.d.ts +25 -23
  4. package/dist/access-authorization-probe.js +35 -30
  5. package/dist/access-boundary.d.ts +26 -24
  6. package/dist/access-boundary.js +36 -31
  7. package/dist/access-cli.js +86 -80
  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 -19
  11. package/dist/access-extraction-force-flush.js +32 -29
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +22 -22
  14. package/dist/access-http-lifecycle-flush.d.ts +22 -22
  15. package/dist/access-http-offline-stream.d.ts +18 -18
  16. package/dist/access-http-query.js +32 -29
  17. package/dist/access-http.d.ts +55 -37
  18. package/dist/access-http.js +52 -43
  19. package/dist/access-identity-continuity-surface.d.ts +9 -9
  20. package/dist/access-identity-continuity-surface.js +32 -29
  21. package/dist/access-lcm-surface.d.ts +21 -21
  22. package/dist/access-lcm-surface.js +32 -29
  23. package/dist/access-mcp.d.ts +22 -22
  24. package/dist/access-mcp.js +40 -36
  25. package/dist/access-memory-search-fanout.d.ts +2 -2
  26. package/dist/{access-namespace-preflight-BdHlGd_T.d.ts → access-namespace-preflight-CCNn_6NE.d.ts} +1 -1
  27. package/dist/access-namespace-preflight.d.ts +3 -3
  28. package/dist/access-namespace-preflight.js +32 -29
  29. package/dist/access-observe-write-surface.d.ts +22 -22
  30. package/dist/access-observe-write-surface.js +32 -29
  31. package/dist/access-offline-manifest.d.ts +9 -9
  32. package/dist/access-offline-manifest.js +2 -2
  33. package/dist/access-operations-batch.js +34 -31
  34. package/dist/access-operations.d.ts +23 -23
  35. package/dist/access-operations.js +38 -34
  36. package/dist/access-recall-concurrency.d.ts +21 -21
  37. package/dist/access-recall-concurrency.js +32 -29
  38. package/dist/access-recall-response.d.ts +19 -19
  39. package/dist/access-recall-response.js +32 -29
  40. package/dist/access-recall-surface.d.ts +19 -19
  41. package/dist/access-recall-surface.js +32 -29
  42. package/dist/access-schema.js +3 -3
  43. package/dist/{access-service-DL7X9hrg.d.ts → access-service-DK82xdNi.d.ts} +1314 -83
  44. package/dist/access-service-helpers.d.ts +22 -22
  45. package/dist/access-service.d.ts +31 -31
  46. package/dist/access-service.js +32 -29
  47. package/dist/access-surface-catalog.d.ts +22 -22
  48. package/dist/access-surface-catalog.js +209 -2
  49. package/dist/access-surface-catalog.js.map +1 -1
  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 +6 -5
  53. package/dist/active-memory-bridge.js +2 -2
  54. package/dist/active-recall.d.ts +1 -1
  55. package/dist/active-recall.js +2 -1
  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/admin-console/public/what-helps-me/app.js +1594 -0
  60. package/dist/admin-console/public/what-helps-me/index.html +339 -0
  61. package/dist/admin-console/public/what-helps-me/model.js +685 -0
  62. package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
  63. package/dist/ambient-provenance.d.ts +1 -1
  64. package/dist/artifact-search.d.ts +1 -1
  65. package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
  66. package/dist/behavior-learner.d.ts +1 -1
  67. package/dist/behavior-signals.d.ts +1 -1
  68. package/dist/bootstrap.d.ts +9 -9
  69. package/dist/briefing.d.ts +2 -2
  70. package/dist/briefing.js +14 -14
  71. package/dist/buffer-surprise-report.d.ts +1 -1
  72. package/dist/buffer-turn-helpers.d.ts +1 -1
  73. package/dist/buffer.d.ts +2 -2
  74. package/dist/buffer.js +2 -2
  75. package/dist/bulk-import/index.d.ts +3 -3
  76. package/dist/calibration.d.ts +1 -1
  77. package/dist/calibration.js +1 -1
  78. package/dist/capabilities.d.ts +1 -1
  79. package/dist/{catalog-B90is4d8.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
  80. package/dist/causal-behavior.d.ts +1 -1
  81. package/dist/causal-consolidation.d.ts +1 -1
  82. package/dist/causal-consolidation.js +15 -15
  83. package/dist/causal-trajectory-graph.d.ts +1 -1
  84. package/dist/{chunk-CSY44OKU.js → chunk-26ZXBTYN.js} +4 -4
  85. package/dist/chunk-26ZXBTYN.js.map +1 -0
  86. package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
  87. package/dist/{chunk-AU7Q3LSC.js → chunk-2QSZNTDO.js} +4 -4
  88. package/dist/chunk-37DZZFFM.js +502 -0
  89. package/dist/chunk-37DZZFFM.js.map +1 -0
  90. package/dist/chunk-3HSRWJTC.js +9 -0
  91. package/dist/chunk-3HSRWJTC.js.map +1 -0
  92. package/dist/{chunk-TKFGFDPJ.js → chunk-3TIZPSJC.js} +4 -4
  93. package/dist/{chunk-B4T3FQMT.js → chunk-43SEBY2M.js} +1 -1
  94. package/dist/{chunk-LVKYLMSM.js → chunk-46SZBVDS.js} +2 -2
  95. package/dist/{chunk-YKZLOPTC.js → chunk-5FD7JMTX.js} +2 -2
  96. package/dist/{chunk-2PNXOQ4P.js → chunk-5NB726GV.js} +3 -7
  97. package/dist/chunk-5NB726GV.js.map +1 -0
  98. package/dist/chunk-62OKGIJA.js +39 -0
  99. package/dist/chunk-62OKGIJA.js.map +1 -0
  100. package/dist/{chunk-WM5LD6AT.js → chunk-6CYHUWCO.js} +2 -2
  101. package/dist/{chunk-BIF4SHMD.js → chunk-76JJSXK7.js} +1 -1
  102. package/dist/chunk-76JJSXK7.js.map +1 -0
  103. package/dist/{chunk-3SXLD5T3.js → chunk-7BD6O7ZV.js} +189 -4
  104. package/dist/chunk-7BD6O7ZV.js.map +1 -0
  105. package/dist/chunk-7TBXNYLO.js +346 -0
  106. package/dist/chunk-7TBXNYLO.js.map +1 -0
  107. package/dist/{chunk-YR65W7BV.js → chunk-BRR5EUTF.js} +3 -3
  108. package/dist/{chunk-JKW663ZN.js → chunk-CIAI24TQ.js} +2 -2
  109. package/dist/{chunk-3WGI7F4V.js → chunk-D3LBIUWV.js} +9219 -5233
  110. package/dist/chunk-D3LBIUWV.js.map +1 -0
  111. package/dist/{chunk-YDWPYDML.js → chunk-EKTP7MNS.js} +4 -4
  112. package/dist/{chunk-6LEIWWAF.js → chunk-F2JRDPON.js} +2 -2
  113. package/dist/{chunk-VYQ4URQB.js → chunk-FFRTNF3L.js} +2 -2
  114. package/dist/{chunk-TY6MKIWP.js → chunk-FONWBCVY.js} +3 -3
  115. package/dist/{chunk-XSV2YDCJ.js → chunk-FPLM2TKD.js} +2 -2
  116. package/dist/{chunk-VTU5IEKY.js → chunk-FTPONF6B.js} +2 -2
  117. package/dist/{chunk-6PZGKGAO.js → chunk-FWX7W5PM.js} +2 -2
  118. package/dist/{chunk-QPW3PAIH.js → chunk-G6DFSS6A.js} +2 -2
  119. package/dist/{chunk-2DD6ZHOM.js → chunk-GJ776BC2.js} +3 -3
  120. package/dist/{chunk-XKAR4RF6.js → chunk-GN3WRFJY.js} +6 -6
  121. package/dist/{chunk-RG426DJO.js → chunk-H7NAZ3UB.js} +2 -2
  122. package/dist/{chunk-BSXGTDVJ.js → chunk-HBUFQRIM.js} +2 -2
  123. package/dist/{chunk-FFEBSFVT.js → chunk-HGJ6NJ4E.js} +2 -2
  124. package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
  125. package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
  126. package/dist/{chunk-QTO6BMQZ.js → chunk-I3MSGFGD.js} +17 -6
  127. package/dist/chunk-I3MSGFGD.js.map +1 -0
  128. package/dist/{chunk-5JKUSBMX.js → chunk-IKP5OYQQ.js} +2 -2
  129. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  130. package/dist/{chunk-DBY26JJJ.js → chunk-IQ4NVWEF.js} +2 -2
  131. package/dist/{chunk-7Q7JWLQ4.js → chunk-JYG4OLWH.js} +2 -2
  132. package/dist/{chunk-3OTSVCPK.js → chunk-K26NWEOC.js} +4 -4
  133. package/dist/{chunk-WZWZRZ2V.js → chunk-K2UGPTYY.js} +484 -43
  134. package/dist/chunk-K2UGPTYY.js.map +1 -0
  135. package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
  136. package/dist/chunk-KFBOPMF6.js.map +1 -0
  137. package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
  138. package/dist/{chunk-7RZJWZ46.js → chunk-LEPOP46W.js} +5 -5
  139. package/dist/{chunk-QQXWFDRD.js → chunk-M4YHAODQ.js} +270 -684
  140. package/dist/chunk-M4YHAODQ.js.map +1 -0
  141. package/dist/{chunk-NGT35IGQ.js → chunk-MIH3CJPN.js} +3 -3
  142. package/dist/{chunk-QPAQSG3F.js → chunk-MK5VEWCR.js} +2 -2
  143. package/dist/chunk-NISZQW72.js +140 -0
  144. package/dist/chunk-NISZQW72.js.map +1 -0
  145. package/dist/{chunk-L7RTUEDG.js → chunk-OCIP6YMD.js} +2 -2
  146. package/dist/{chunk-2INWPC6E.js → chunk-PG4QBPVG.js} +20 -10
  147. package/dist/chunk-PG4QBPVG.js.map +1 -0
  148. package/dist/{chunk-DDA55IVB.js → chunk-PT54WISF.js} +189 -55
  149. package/dist/chunk-PT54WISF.js.map +1 -0
  150. package/dist/{chunk-UWJNKGBA.js → chunk-QZLDRQ4I.js} +5 -5
  151. package/dist/{chunk-UYOXFFEY.js → chunk-RUNORG2P.js} +3 -3
  152. package/dist/{chunk-LC3FD4BV.js → chunk-RZQ6W2W4.js} +39 -39
  153. package/dist/{chunk-MRGJZ75M.js → chunk-SMNYAMJD.js} +3 -3
  154. package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
  155. package/dist/chunk-TB6CBZ5V.js.map +1 -0
  156. package/dist/{chunk-DN2IDKI5.js → chunk-TO7ZTWJW.js} +2 -2
  157. package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
  158. package/dist/{chunk-CUTFSLSD.js → chunk-UCTS3DDH.js} +2 -2
  159. package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
  160. package/dist/{chunk-QOQQMVR2.js → chunk-UKYS3NU5.js} +2 -2
  161. package/dist/{chunk-VZRFGJCH.js → chunk-UPLZNJKN.js} +2 -2
  162. package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
  163. package/dist/chunk-UW5NPZJ2.js.map +1 -0
  164. package/dist/{chunk-DOOWFDWN.js → chunk-V6ERBR7U.js} +2 -2
  165. package/dist/{chunk-7HG7MGAP.js → chunk-W5ZKPI34.js} +462 -2673
  166. package/dist/chunk-W5ZKPI34.js.map +1 -0
  167. package/dist/{chunk-HNDIND7P.js → chunk-XX4HPFFM.js} +54 -15
  168. package/dist/chunk-XX4HPFFM.js.map +1 -0
  169. package/dist/{chunk-N7CXQ5TA.js → chunk-XZHE2DEN.js} +1 -1
  170. package/dist/chunk-YXQEKCZM.js +223 -0
  171. package/dist/chunk-YXQEKCZM.js.map +1 -0
  172. package/dist/{chunk-6NNNURLK.js → chunk-Z54EM5YZ.js} +4 -4
  173. package/dist/{chunk-F2Y6I74C.js → chunk-ZRZVLB7O.js} +2 -2
  174. package/dist/{chunk-CLKBV3Z3.js → chunk-ZUKIUXHQ.js} +9 -9
  175. package/dist/{cli-jfuZXixq.d.ts → cli-BPDUXnAl.d.ts} +5 -5
  176. package/dist/cli.d.ts +22 -22
  177. package/dist/cli.js +66 -58
  178. package/dist/coding/pre-action-gate.d.ts +1 -1
  179. package/dist/compounding/engine.d.ts +2 -2
  180. package/dist/compounding/engine.js +14 -14
  181. package/dist/compounding/preference-consolidator.d.ts +1 -1
  182. package/dist/compression-optimizer.d.ts +1 -1
  183. package/dist/config.d.ts +1 -1
  184. package/dist/config.js +2 -1
  185. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  186. package/dist/connectors/codex-materialize-runner.js +14 -14
  187. package/dist/connectors/codex-materialize.d.ts +1 -1
  188. package/dist/connectors/index.d.ts +1 -1
  189. package/dist/connectors/index.js +14 -14
  190. package/dist/consolidation-provenance-check.d.ts +2 -2
  191. package/dist/consolidation-undo.d.ts +2 -2
  192. package/dist/contradiction/index.d.ts +2 -2
  193. package/dist/contradiction/index.js +2 -2
  194. package/dist/{contradiction-scan-KCADHXPE.js → contradiction-scan-JDTBXRGW.js} +3 -3
  195. package/dist/converge-config.d.ts +1 -1
  196. package/dist/convergence-refresh.d.ts +2 -2
  197. package/dist/convergence-refresh.js +16 -16
  198. package/dist/conversation-index/backend.d.ts +1 -1
  199. package/dist/conversation-index/backend.js +2 -2
  200. package/dist/conversation-index/chunker.d.ts +1 -1
  201. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  202. package/dist/conversation-index/indexer.d.ts +1 -1
  203. package/dist/conversation-index/search.d.ts +1 -1
  204. package/dist/corpus-watermark.d.ts +1 -1
  205. package/dist/corpus-watermark.js +16 -16
  206. package/dist/day-summary.d.ts +1 -1
  207. package/dist/delinearize.d.ts +1 -1
  208. package/dist/dependency-propagation-config.d.ts +1 -1
  209. package/dist/{dependency-propagation-delivery-CTDuAVJc.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
  210. package/dist/direct-answer-wiring.d.ts +1 -1
  211. package/dist/direct-answer.d.ts +1 -1
  212. package/dist/embedding-fallback.d.ts +1 -1
  213. package/dist/enrichment/index.d.ts +1 -1
  214. package/dist/entity-retrieval.d.ts +2 -2
  215. package/dist/entity-retrieval.js +14 -14
  216. package/dist/entity-schema.d.ts +1 -1
  217. package/dist/explicit-capture.d.ts +9 -9
  218. package/dist/explicit-capture.js +4 -3
  219. package/dist/external-wiki-access.d.ts +22 -22
  220. package/dist/external-wiki-access.js +33 -30
  221. package/dist/external-wiki-collection-registration.d.ts +1 -1
  222. package/dist/external-wiki-collection.d.ts +1 -1
  223. package/dist/external-wiki-mcp-tools.d.ts +22 -22
  224. package/dist/extraction-error-classification.d.ts +1 -1
  225. package/dist/extraction-faithfulness.d.ts +1 -1
  226. package/dist/extraction-faithfulness.js +2 -2
  227. package/dist/extraction-judge-telemetry.d.ts +1 -1
  228. package/dist/extraction-judge-training.d.ts +1 -1
  229. package/dist/extraction-judge.d.ts +1 -1
  230. package/dist/extraction-judge.js +2 -2
  231. package/dist/extraction-liveness.d.ts +1 -1
  232. package/dist/extraction-normalization.d.ts +1 -1
  233. package/dist/extraction-prompt.d.ts +1 -1
  234. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  235. package/dist/extraction-source-grounding.d.ts +1 -1
  236. package/dist/extraction.d.ts +1 -1
  237. package/dist/extraction.js +20 -20
  238. package/dist/fallback-llm.d.ts +14 -1
  239. package/dist/fallback-llm.js +1 -1
  240. package/dist/{first-start-migration-LMMZFLKK.js → first-start-migration-CRZCZAJN.js} +5 -5
  241. package/dist/graph-dashboard-diff.d.ts +1 -1
  242. package/dist/graph-dashboard-key.d.ts +1 -1
  243. package/dist/graph-dashboard-parser.d.ts +1 -1
  244. package/dist/graph-edge-reinforcement.d.ts +1 -1
  245. package/dist/graph-path-reconstruction.d.ts +1 -1
  246. package/dist/graph-path-scoring.d.ts +1 -1
  247. package/dist/graph-snapshot.d.ts +1 -1
  248. package/dist/graph.d.ts +1 -1
  249. package/dist/harmonic-retrieval.js +1 -1
  250. package/dist/importance.d.ts +1 -1
  251. package/dist/importers/index.d.ts +1 -1
  252. package/dist/in-flight-reads.d.ts +1 -1
  253. package/dist/index.d.ts +30 -747
  254. package/dist/index.js +203 -118
  255. package/dist/inline-script.d.ts +3 -0
  256. package/dist/inline-script.js +8 -0
  257. package/dist/inline-script.js.map +1 -0
  258. package/dist/intent.d.ts +1 -1
  259. package/dist/lcm/engine.d.ts +1 -1
  260. package/dist/lcm/engine.js +2 -2
  261. package/dist/lcm/index.d.ts +1 -1
  262. package/dist/lcm/index.js +2 -2
  263. package/dist/lcm/tools.d.ts +1 -1
  264. package/dist/lifecycle.d.ts +1 -1
  265. package/dist/live-connectors-runner.d.ts +1 -1
  266. package/dist/local-llm.d.ts +2 -1
  267. package/dist/local-llm.js +2 -2
  268. package/dist/local-model-endpoint.d.ts +1 -1
  269. package/dist/maintenance/memory-governance.d.ts +1 -1
  270. package/dist/maintenance/memory-governance.js +14 -14
  271. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  272. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
  273. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  274. package/dist/maintenance/rebuild-memory-projection.js +15 -15
  275. package/dist/{maintenance-heMZSq7G.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
  276. package/dist/mcp-memory-inspector-app.d.ts +22 -22
  277. package/dist/mcp-read-only-tools.js +1 -1
  278. package/dist/memory-action-policy.d.ts +1 -1
  279. package/dist/memory-cache.d.ts +1 -1
  280. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  281. package/dist/memory-projection-store.d.ts +1 -1
  282. package/dist/memory-provenance.d.ts +1 -1
  283. package/dist/memory-snapshot.d.ts +1 -1
  284. package/dist/memory-worth-outcomes.d.ts +2 -2
  285. package/dist/models-json.d.ts +1 -1
  286. package/dist/namespaces/migrate.d.ts +3 -3
  287. package/dist/namespaces/migrate.js +15 -15
  288. package/dist/namespaces/principal.d.ts +1 -1
  289. package/dist/namespaces/search.d.ts +1 -1
  290. package/dist/namespaces/search.js +6 -6
  291. package/dist/namespaces/storage.d.ts +3 -3
  292. package/dist/namespaces/storage.js +14 -14
  293. package/dist/native-knowledge.d.ts +1 -1
  294. package/dist/offline-sync-impression-drain.d.ts +1 -1
  295. package/dist/operator-doctor-corpus.d.ts +1 -1
  296. package/dist/operator-doctor-corpus.js +17 -17
  297. package/dist/operator-doctor-replica.d.ts +1 -1
  298. package/dist/operator-toolkit.d.ts +3 -3
  299. package/dist/operator-toolkit.js +23 -22
  300. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  301. package/dist/orchestration/maintenance.d.ts +4 -4
  302. package/dist/orchestration/maintenance.js +19 -19
  303. package/dist/{orchestrator-BQQPsSjs.d.ts → orchestrator-D85CzDDY.d.ts} +8 -8
  304. package/dist/orchestrator.d.ts +9 -9
  305. package/dist/orchestrator.js +86 -80
  306. package/dist/patterns-cli.d.ts +1 -1
  307. package/dist/{pipeline-DFfmsnGk.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
  308. package/dist/policy-runtime.d.ts +1 -1
  309. package/dist/proactive-contention.d.ts +1 -1
  310. package/dist/provenance.d.ts +1 -1
  311. package/dist/public-http-D3GBeII4.d.ts +25 -0
  312. package/dist/{qmd-BF5bcVRs.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
  313. package/dist/qmd-preflight.d.ts +2 -2
  314. package/dist/qmd-recall-cache.d.ts +1 -1
  315. package/dist/qmd.d.ts +2 -2
  316. package/dist/recall-concurrency-config.d.ts +1 -1
  317. package/dist/recall-disclosure-escalation.d.ts +1 -1
  318. package/dist/recall-explain-renderer.d.ts +1 -1
  319. package/dist/recall-explain-renderer.js +3 -3
  320. package/dist/recall-memory-map.d.ts +1 -1
  321. package/dist/recall-planner-llm.d.ts +1 -1
  322. package/dist/recall-planner-llm.js +1 -1
  323. package/dist/recall-state.d.ts +1 -1
  324. package/dist/recall-tag-filter.d.ts +1 -1
  325. package/dist/recall-timings.d.ts +1 -1
  326. package/dist/recall-xray-cli.d.ts +1 -1
  327. package/dist/recall-xray-cli.js +4 -4
  328. package/dist/recall-xray-renderer.d.ts +1 -1
  329. package/dist/recall-xray-renderer.js +3 -3
  330. package/dist/recall-xray.d.ts +1 -1
  331. package/dist/recall-xray.js +2 -2
  332. package/dist/reconcile/cursor.d.ts +1 -1
  333. package/dist/reconcile/manifest.d.ts +1 -1
  334. package/dist/reconcile/plan.d.ts +1 -1
  335. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  336. package/dist/replay/normalizers/claude.d.ts +1 -1
  337. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  338. package/dist/replay/normalizers/shared.d.ts +1 -1
  339. package/dist/replay/runner.d.ts +1 -1
  340. package/dist/replay/types.d.ts +1 -1
  341. package/dist/replica-divergence.d.ts +1 -1
  342. package/dist/replica-peers-config.d.ts +1 -1
  343. package/dist/resolve-auth-token.d.ts +1 -1
  344. package/dist/resume-bundles.js +3 -2
  345. package/dist/retrieval-agents.d.ts +2 -2
  346. package/dist/retrieval-tiers.d.ts +1 -1
  347. package/dist/routing/engine.d.ts +1 -1
  348. package/dist/routing/store.d.ts +1 -1
  349. package/dist/salvage-envelope.d.ts +1 -1
  350. package/dist/{scope-profiles-CbUOsE_E.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
  351. package/dist/search/embed-helper.d.ts +1 -1
  352. package/dist/search/factory.d.ts +1 -1
  353. package/dist/search/factory.js +5 -5
  354. package/dist/search/index.d.ts +1 -1
  355. package/dist/search/index.js +9 -9
  356. package/dist/search/lancedb-backend.d.ts +1 -1
  357. package/dist/search/meilisearch-backend.d.ts +1 -1
  358. package/dist/search/noop-backend.d.ts +1 -1
  359. package/dist/search/orama-backend.d.ts +1 -1
  360. package/dist/search/port.d.ts +1 -1
  361. package/dist/search/remote-backend.d.ts +1 -1
  362. package/dist/{semantic-consolidation-DAB3xdKM.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
  363. package/dist/semantic-consolidation.d.ts +2 -2
  364. package/dist/semantic-consolidation.js +15 -15
  365. package/dist/semantic-rule-promotion.js +14 -14
  366. package/dist/semantic-rule-verifier.d.ts +1 -1
  367. package/dist/semantic-rule-verifier.js +14 -14
  368. package/dist/{service-DGKg2O6r.d.ts → service-DT-pJyda.d.ts} +660 -660
  369. package/dist/session-observer-bands.d.ts +1 -1
  370. package/dist/session-observer-state.d.ts +1 -1
  371. package/dist/shared-context/manager.d.ts +1 -1
  372. package/dist/signal.d.ts +1 -1
  373. package/dist/source-agent-qualifier.d.ts +1 -1
  374. package/dist/source-agent-qualifier.js +16 -16
  375. package/dist/{storage-CC1jKcWg.d.ts → storage-qOnaJ1Lw.d.ts} +4 -1
  376. package/dist/storage.d.ts +2 -2
  377. package/dist/storage.js +13 -13
  378. package/dist/summarizer.d.ts +1 -1
  379. package/dist/summarizer.js +5 -5
  380. package/dist/summary-snapshot.d.ts +1 -1
  381. package/dist/support-passport/index.d.ts +518 -0
  382. package/dist/support-passport/index.js +357 -0
  383. package/dist/support-passport/index.js.map +1 -0
  384. package/dist/temporal-supersession.d.ts +2 -2
  385. package/dist/temporal-timeline-recall.d.ts +1 -1
  386. package/dist/temporal-validity.d.ts +1 -1
  387. package/dist/threading.d.ts +1 -1
  388. package/dist/tier-migration.d.ts +2 -2
  389. package/dist/tier-routing.d.ts +1 -1
  390. package/dist/tier-routing.js +2 -2
  391. package/dist/{tier-stats-JDN6HRNT.js → tier-stats-EXYSKSVN.js} +3 -3
  392. package/dist/topics.d.ts +1 -1
  393. package/dist/transcript.d.ts +1 -1
  394. package/dist/transfer/autodetect.js +1 -1
  395. package/dist/transfer/backup.js +1 -1
  396. package/dist/transfer/capsule-export.js +2 -2
  397. package/dist/transfer/types.d.ts +24 -24
  398. package/dist/trust-score-stage.d.ts +1 -1
  399. package/dist/trust-score.d.ts +1 -1
  400. package/dist/{types-BnQza1y8.d.ts → types-ed-SvS2t.d.ts} +7 -1
  401. package/dist/types.d.ts +1 -1
  402. package/dist/types.js +1 -1
  403. package/dist/utility-runtime.d.ts +1 -1
  404. package/dist/verified-recall.js +14 -14
  405. package/dist/write-envelope.d.ts +1 -1
  406. package/dist/write-rate-limiter.d.ts +11 -5
  407. package/dist/write-rate-limiter.js +1 -1
  408. package/package.json +12 -2
  409. package/scripts/build-with-heap.mjs +11 -1
  410. package/src/access-authorization-probe.ts +20 -2
  411. package/src/access-boundary.ts +32 -0
  412. package/src/access-http.test.ts +1940 -643
  413. package/src/access-http.ts +81 -74
  414. package/src/access-mcp.ts +3 -1
  415. package/src/access-operations.ts +2 -0
  416. package/src/access-service.ts +612 -845
  417. package/src/access-surface-catalog.test.ts +40 -10
  418. package/src/access-surface-catalog.ts +15 -0
  419. package/src/active-memory-bridge.ts +17 -19
  420. package/src/config.ts +18 -9
  421. package/src/fallback-llm.test.ts +54 -0
  422. package/src/fallback-llm.ts +54 -9
  423. package/src/inline-script.ts +6 -0
  424. package/src/local-llm-headers-timeout.test.ts +42 -0
  425. package/src/local-llm.ts +8 -8
  426. package/src/mcp-read-only-tools.ts +3 -0
  427. package/src/relay/mission-access.test.ts +11 -11
  428. package/src/relay/mission-ui.test.ts +3 -1
  429. package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
  430. package/src/storage-contract/failure-semantics.test.ts +102 -0
  431. package/src/support-passport/access-http-base.ts +143 -0
  432. package/src/support-passport/access-http.ts +172 -0
  433. package/src/support-passport/access-operations.ts +272 -0
  434. package/src/support-passport/access-service-base.test.ts +193 -0
  435. package/src/support-passport/access-service-base.ts +176 -0
  436. package/src/support-passport/access-surface.test.ts +283 -0
  437. package/src/support-passport/access-surface.ts +286 -0
  438. package/src/support-passport/card-projection.test.ts +8 -0
  439. package/src/support-passport/card-projection.ts +77 -16
  440. package/src/support-passport/card-replacement.ts +126 -0
  441. package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
  442. package/src/support-passport/card-service.test.ts +533 -31
  443. package/src/support-passport/card-service.ts +506 -364
  444. package/src/support-passport/card-state.ts +158 -0
  445. package/src/support-passport/config-model-routing.test.ts +37 -0
  446. package/src/support-passport/config.test.ts +34 -0
  447. package/src/support-passport/config.ts +41 -0
  448. package/src/support-passport/contracts.test.ts +15 -2
  449. package/src/support-passport/contracts.ts +13 -0
  450. package/src/support-passport/errors.ts +6 -0
  451. package/src/support-passport/generated-batch.test.ts +185 -0
  452. package/src/support-passport/generated-batch.ts +338 -0
  453. package/src/support-passport/grant-contracts.ts +45 -1
  454. package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
  455. package/src/support-passport/grant-service-cache.test.ts +2 -2
  456. package/src/support-passport/grant-service-cancellation.test.ts +2 -0
  457. package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
  458. package/src/support-passport/grant-service.test.ts +853 -239
  459. package/src/support-passport/grant-service.ts +206 -57
  460. package/src/support-passport/grant-store.ts +7 -3
  461. package/src/support-passport/index.ts +10 -0
  462. package/src/support-passport/mcp-tools.test.ts +222 -0
  463. package/src/support-passport/mcp-tools.ts +187 -0
  464. package/src/support-passport/model-adapter.test.ts +840 -0
  465. package/src/support-passport/model-adapter.ts +602 -0
  466. package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
  467. package/src/support-passport/model-audit.ts +152 -0
  468. package/src/support-passport/model-bridge.test.ts +456 -0
  469. package/src/support-passport/model-bridge.ts +439 -0
  470. package/src/support-passport/model-contracts.ts +124 -0
  471. package/src/support-passport/model-service.test.ts +1731 -0
  472. package/src/support-passport/model-service.ts +399 -0
  473. package/src/support-passport/owner-http.test.ts +671 -0
  474. package/src/support-passport/owner-lock.ts +26 -9
  475. package/src/support-passport/private-file.test.ts +99 -0
  476. package/src/support-passport/private-file.ts +139 -12
  477. package/src/support-passport/public-http.test.ts +476 -0
  478. package/src/support-passport/public-http.ts +601 -0
  479. package/src/support-passport/ui.test.ts +181 -0
  480. package/src/types.ts +7 -0
  481. package/src/write-rate-limiter.test.ts +30 -6
  482. package/src/write-rate-limiter.ts +29 -18
  483. package/dist/chunk-2INWPC6E.js.map +0 -1
  484. package/dist/chunk-2PNXOQ4P.js.map +0 -1
  485. package/dist/chunk-3SXLD5T3.js.map +0 -1
  486. package/dist/chunk-3WGI7F4V.js.map +0 -1
  487. package/dist/chunk-7HG7MGAP.js.map +0 -1
  488. package/dist/chunk-BIF4SHMD.js.map +0 -1
  489. package/dist/chunk-C23BYTJV.js.map +0 -1
  490. package/dist/chunk-CSY44OKU.js.map +0 -1
  491. package/dist/chunk-DDA55IVB.js.map +0 -1
  492. package/dist/chunk-HNDIND7P.js.map +0 -1
  493. package/dist/chunk-L6CQ7WIW.js.map +0 -1
  494. package/dist/chunk-MKQBXQKU.js.map +0 -1
  495. package/dist/chunk-QQXWFDRD.js.map +0 -1
  496. package/dist/chunk-QTO6BMQZ.js.map +0 -1
  497. package/dist/chunk-WZWZRZ2V.js.map +0 -1
  498. /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
  499. /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
  500. /package/dist/{chunk-AU7Q3LSC.js.map → chunk-2QSZNTDO.js.map} +0 -0
  501. /package/dist/{chunk-TKFGFDPJ.js.map → chunk-3TIZPSJC.js.map} +0 -0
  502. /package/dist/{chunk-B4T3FQMT.js.map → chunk-43SEBY2M.js.map} +0 -0
  503. /package/dist/{chunk-LVKYLMSM.js.map → chunk-46SZBVDS.js.map} +0 -0
  504. /package/dist/{chunk-YKZLOPTC.js.map → chunk-5FD7JMTX.js.map} +0 -0
  505. /package/dist/{chunk-WM5LD6AT.js.map → chunk-6CYHUWCO.js.map} +0 -0
  506. /package/dist/{chunk-YR65W7BV.js.map → chunk-BRR5EUTF.js.map} +0 -0
  507. /package/dist/{chunk-JKW663ZN.js.map → chunk-CIAI24TQ.js.map} +0 -0
  508. /package/dist/{chunk-YDWPYDML.js.map → chunk-EKTP7MNS.js.map} +0 -0
  509. /package/dist/{chunk-6LEIWWAF.js.map → chunk-F2JRDPON.js.map} +0 -0
  510. /package/dist/{chunk-VYQ4URQB.js.map → chunk-FFRTNF3L.js.map} +0 -0
  511. /package/dist/{chunk-TY6MKIWP.js.map → chunk-FONWBCVY.js.map} +0 -0
  512. /package/dist/{chunk-XSV2YDCJ.js.map → chunk-FPLM2TKD.js.map} +0 -0
  513. /package/dist/{chunk-VTU5IEKY.js.map → chunk-FTPONF6B.js.map} +0 -0
  514. /package/dist/{chunk-6PZGKGAO.js.map → chunk-FWX7W5PM.js.map} +0 -0
  515. /package/dist/{chunk-QPW3PAIH.js.map → chunk-G6DFSS6A.js.map} +0 -0
  516. /package/dist/{chunk-2DD6ZHOM.js.map → chunk-GJ776BC2.js.map} +0 -0
  517. /package/dist/{chunk-XKAR4RF6.js.map → chunk-GN3WRFJY.js.map} +0 -0
  518. /package/dist/{chunk-RG426DJO.js.map → chunk-H7NAZ3UB.js.map} +0 -0
  519. /package/dist/{chunk-BSXGTDVJ.js.map → chunk-HBUFQRIM.js.map} +0 -0
  520. /package/dist/{chunk-FFEBSFVT.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
  521. /package/dist/{chunk-5JKUSBMX.js.map → chunk-IKP5OYQQ.js.map} +0 -0
  522. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  523. /package/dist/{chunk-DBY26JJJ.js.map → chunk-IQ4NVWEF.js.map} +0 -0
  524. /package/dist/{chunk-7Q7JWLQ4.js.map → chunk-JYG4OLWH.js.map} +0 -0
  525. /package/dist/{chunk-3OTSVCPK.js.map → chunk-K26NWEOC.js.map} +0 -0
  526. /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
  527. /package/dist/{chunk-7RZJWZ46.js.map → chunk-LEPOP46W.js.map} +0 -0
  528. /package/dist/{chunk-NGT35IGQ.js.map → chunk-MIH3CJPN.js.map} +0 -0
  529. /package/dist/{chunk-QPAQSG3F.js.map → chunk-MK5VEWCR.js.map} +0 -0
  530. /package/dist/{chunk-L7RTUEDG.js.map → chunk-OCIP6YMD.js.map} +0 -0
  531. /package/dist/{chunk-UWJNKGBA.js.map → chunk-QZLDRQ4I.js.map} +0 -0
  532. /package/dist/{chunk-UYOXFFEY.js.map → chunk-RUNORG2P.js.map} +0 -0
  533. /package/dist/{chunk-LC3FD4BV.js.map → chunk-RZQ6W2W4.js.map} +0 -0
  534. /package/dist/{chunk-MRGJZ75M.js.map → chunk-SMNYAMJD.js.map} +0 -0
  535. /package/dist/{chunk-DN2IDKI5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
  536. /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
  537. /package/dist/{chunk-CUTFSLSD.js.map → chunk-UCTS3DDH.js.map} +0 -0
  538. /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
  539. /package/dist/{chunk-QOQQMVR2.js.map → chunk-UKYS3NU5.js.map} +0 -0
  540. /package/dist/{chunk-VZRFGJCH.js.map → chunk-UPLZNJKN.js.map} +0 -0
  541. /package/dist/{chunk-DOOWFDWN.js.map → chunk-V6ERBR7U.js.map} +0 -0
  542. /package/dist/{chunk-N7CXQ5TA.js.map → chunk-XZHE2DEN.js.map} +0 -0
  543. /package/dist/{chunk-6NNNURLK.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  544. /package/dist/{chunk-F2Y6I74C.js.map → chunk-ZRZVLB7O.js.map} +0 -0
  545. /package/dist/{chunk-CLKBV3Z3.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
  546. /package/dist/{contradiction-scan-KCADHXPE.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
  547. /package/dist/{first-start-migration-LMMZFLKK.js.map → first-start-migration-CRZCZAJN.js.map} +0 -0
  548. /package/dist/{tier-stats-JDN6HRNT.js.map → tier-stats-EXYSKSVN.js.map} +0 -0
@@ -11,6 +11,7 @@ import {
11
11
  SupportPassportCardStatusSchema,
12
12
  SupportPassportMemoryIdSchema,
13
13
  SupportPassportNamespaceSchema,
14
+ SupportPassportSourceMemoryIdSchema,
14
15
  computeSupportPassportCardRevision,
15
16
  } from "./contracts.js";
16
17
 
@@ -81,6 +82,8 @@ export const SUPPORT_PASSPORT_ATTRIBUTE_KEYS = Object.freeze({
81
82
  replacedRevision: "support-passport-replaced-revision",
82
83
  draftReplacementPrepared: "support-passport-draft-replacement-prepared",
83
84
  replacementComplete: "support-passport-replacement-complete",
85
+ generatedBatchId: "support-passport-generated-batch-id",
86
+ generatedBatchSize: "support-passport-generated-batch-size",
84
87
  });
85
88
 
86
89
  const SUPPORT_PASSPORT_NAMESPACE_ENCODING = "base64url-v1";
@@ -156,20 +159,33 @@ export interface StoredSupportPassportCard {
156
159
  replacesDraftId?: string;
157
160
  replacedRevision?: string;
158
161
  draftReplacementPrepared: boolean;
162
+ generatedBatchId?: string;
163
+ generatedBatchSize?: number;
159
164
  }
160
165
 
161
166
  export function computeSupportPassportOwnerKey(principal: string): string {
162
167
  return createHash("sha256").update(principal).digest("hex");
163
168
  }
164
169
 
165
- function parseSourceMemoryIds(value: string | undefined): string[] | null {
166
- if (value === undefined) return null;
167
- if (value === "") return [];
168
- const rawIds = value.split(",");
170
+ export function activeSupportPassportReplacementPredecessorIds(
171
+ cards: readonly StoredSupportPassportCard[],
172
+ ): Set<string> {
173
+ return new Set(
174
+ cards
175
+ .filter((item) => item.card.status === "active")
176
+ .map((item) => item.memory.frontmatter.supersedes)
177
+ .filter((cardId): cardId is string => typeof cardId === "string"),
178
+ );
179
+ }
180
+
181
+ function parseSourceMemoryIds(frontmatter: MemoryFile["frontmatter"]): string[] | null {
182
+ const lineage = frontmatter.lineage;
183
+ const legacyValue = frontmatter.structuredAttributes?.[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.sourceMemoryIds];
184
+ const rawIds = lineage ?? (legacyValue === undefined || legacyValue === "" ? [] : legacyValue.split(","));
169
185
  if (rawIds.length > 5) return null;
170
186
  const normalized: string[] = [];
171
187
  for (const rawId of rawIds) {
172
- const parsed = SupportPassportMemoryIdSchema.safeParse(rawId);
188
+ const parsed = SupportPassportSourceMemoryIdSchema.safeParse(rawId);
173
189
  if (!parsed.success) return null;
174
190
  normalized.push(parsed.data);
175
191
  }
@@ -186,35 +202,67 @@ interface SupportPassportCardMetadata {
186
202
  replacesDraftId?: string;
187
203
  replacedRevision?: string;
188
204
  draftReplacementPrepared: boolean;
205
+ generatedBatchId?: string;
206
+ generatedBatchSize?: number;
189
207
  }
190
208
 
191
- function parseSupportPassportCardMetadata(memory: Pick<MemoryFile, "frontmatter">): SupportPassportCardMetadata | null {
209
+ function parseSupportPassportCardMetadata(
210
+ memory: Pick<MemoryFile, "frontmatter">,
211
+ ): SupportPassportCardMetadata | null {
192
212
  const frontmatter = memory.frontmatter;
193
213
  const attributes = frontmatter.structuredAttributes;
194
214
  if (frontmatter.category !== "preference") return null;
195
215
  if (!frontmatter.tags?.includes(SUPPORT_PASSPORT_CARD_TAG)) return null;
196
- if (!attributes || frontmatter.blockedBy || frontmatter.archivedAt || frontmatter.supersededBy) return null;
216
+ if (
217
+ !attributes ||
218
+ frontmatter.blockedBy ||
219
+ frontmatter.archivedAt ||
220
+ frontmatter.supersededBy
221
+ )
222
+ return null;
197
223
 
198
- const category = SupportPassportCardCategorySchema.safeParse(attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category]);
224
+ const category = SupportPassportCardCategorySchema.safeParse(
225
+ attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category],
226
+ );
199
227
  const status = SupportPassportCardStatusSchema.safeParse(frontmatter.status);
200
228
  const rawOrder = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.order];
201
229
  const order = Number(rawOrder);
202
- const sourceMemoryIds = parseSourceMemoryIds(attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.sourceMemoryIds]);
230
+ const sourceMemoryIds = parseSourceMemoryIds(frontmatter);
203
231
  const namespace = decodeSupportPassportNamespaceAttributes(attributes);
204
232
  const owner = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner];
205
233
  let replacesDraftId: string | undefined;
206
- const rawReplacesDraftId = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId];
234
+ const rawReplacesDraftId =
235
+ attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId];
207
236
  if (rawReplacesDraftId !== undefined) {
208
- const parsedReplacesDraftId = SupportPassportMemoryIdSchema.safeParse(rawReplacesDraftId);
237
+ const parsedReplacesDraftId =
238
+ SupportPassportMemoryIdSchema.safeParse(rawReplacesDraftId);
209
239
  if (!parsedReplacesDraftId.success) return null;
210
240
  replacesDraftId = parsedReplacesDraftId.data;
211
241
  }
212
242
  let replacedRevision: string | undefined;
213
- const rawReplacedRevision = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacedRevision];
243
+ const rawReplacedRevision =
244
+ attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacedRevision];
214
245
  if (rawReplacedRevision !== undefined) {
215
246
  if (!/^[a-f0-9]{64}$/.test(rawReplacedRevision)) return null;
216
247
  replacedRevision = rawReplacedRevision;
217
248
  }
249
+ const generatedBatchId = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchId];
250
+ const rawGeneratedBatchSize = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchSize];
251
+ let generatedBatchSize: number | undefined;
252
+ if (generatedBatchId !== undefined) {
253
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(generatedBatchId)) {
254
+ return null;
255
+ }
256
+ if (
257
+ typeof rawGeneratedBatchSize !== "string" ||
258
+ !/^[1-8]$/.test(rawGeneratedBatchSize)
259
+ ) {
260
+ return null;
261
+ }
262
+ generatedBatchSize = Number(rawGeneratedBatchSize);
263
+ } else if (rawGeneratedBatchSize !== undefined) {
264
+ return null;
265
+ }
218
266
  if (
219
267
  !category.success ||
220
268
  !status.success ||
@@ -228,7 +276,10 @@ function parseSupportPassportCardMetadata(memory: Pick<MemoryFile, "frontmatter"
228
276
  !sourceMemoryIds
229
277
  )
230
278
  return null;
231
- const fields = SupportPassportCardSchema.omit({ revision: true, statement: true }).safeParse({
279
+ const fields = SupportPassportCardSchema.omit({
280
+ revision: true,
281
+ statement: true,
282
+ }).safeParse({
232
283
  cardId: frontmatter.id,
233
284
  title: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.title],
234
285
  category: category.data,
@@ -245,7 +296,11 @@ function parseSupportPassportCardMetadata(memory: Pick<MemoryFile, "frontmatter"
245
296
  owner,
246
297
  replacesDraftId,
247
298
  replacedRevision,
248
- draftReplacementPrepared: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared] === "true",
299
+ draftReplacementPrepared:
300
+ attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared] ===
301
+ "true",
302
+ generatedBatchId,
303
+ generatedBatchSize,
249
304
  };
250
305
  }
251
306
 
@@ -258,7 +313,9 @@ export function hasLiveSupportPassportCard(memory: Pick<MemoryFile, "frontmatter
258
313
  }).success;
259
314
  }
260
315
 
261
- export function projectSupportPassportCard(memory: MemoryFile): StoredSupportPassportCard | null {
316
+ export function projectSupportPassportCard(
317
+ memory: MemoryFile,
318
+ ): StoredSupportPassportCard | null {
262
319
  const metadata = parseSupportPassportCardMetadata(memory);
263
320
  if (!metadata) return null;
264
321
 
@@ -266,7 +323,9 @@ export function projectSupportPassportCard(memory: MemoryFile): StoredSupportPas
266
323
  ...metadata.fields,
267
324
  statement: stripAttributesSuffix(memory.content),
268
325
  };
269
- const normalized = SupportPassportCardSchema.omit({ revision: true }).safeParse(fields);
326
+ const normalized = SupportPassportCardSchema.omit({
327
+ revision: true,
328
+ }).safeParse(fields);
270
329
  if (!normalized.success) return null;
271
330
  const parsed = SupportPassportCardSchema.safeParse({
272
331
  ...normalized.data,
@@ -283,5 +342,7 @@ export function projectSupportPassportCard(memory: MemoryFile): StoredSupportPas
283
342
  replacesDraftId: metadata.replacesDraftId,
284
343
  replacedRevision: metadata.replacedRevision,
285
344
  draftReplacementPrepared: metadata.draftReplacementPrepared,
345
+ generatedBatchId: metadata.generatedBatchId,
346
+ generatedBatchSize: metadata.generatedBatchSize,
286
347
  };
287
348
  }
@@ -0,0 +1,126 @@
1
+ import type { StorageManager } from "../index.js";
2
+ import { log } from "../logger.js";
3
+ import { stripAttributesSuffix } from "../structured-attributes.js";
4
+ import {
5
+ SUPPORT_PASSPORT_ATTRIBUTE_KEYS,
6
+ type StoredSupportPassportCard,
7
+ computeSupportPassportOwnerKey,
8
+ encodeSupportPassportNamespaceAttributes,
9
+ projectSupportPassportCard,
10
+ } from "./card-projection.js";
11
+ import { ownsMemory } from "./card-state.js";
12
+ import { SupportPassportError } from "./errors.js";
13
+
14
+ export async function validateSupportPassportReplacementPrior(
15
+ storage: StorageManager,
16
+ replacement: StoredSupportPassportCard,
17
+ namespace: string,
18
+ principal: string
19
+ ): Promise<void> {
20
+ const priorId = replacement.memory.frontmatter.supersedes;
21
+ if (!priorId) return;
22
+ const priorMemory = await storage.getMemoryById(priorId);
23
+ const priorIsOwned = priorMemory ? ownsMemory(priorMemory, namespace, principal) : false;
24
+ const alreadyRetired =
25
+ priorIsOwned &&
26
+ priorMemory?.frontmatter.status === "superseded" &&
27
+ priorMemory.frontmatter.supersededBy === replacement.card.cardId;
28
+ const prior = priorMemory && priorIsOwned && !alreadyRetired ? projectSupportPassportCard(priorMemory) : null;
29
+ if (prior?.card.status === "rejected" || alreadyRetired) return;
30
+ if (!priorMemory || prior?.card.status !== "active") {
31
+ throw new SupportPassportError("storage_conflict", "The prior support card changed before replacement.", 409);
32
+ }
33
+ }
34
+
35
+ export async function prepareSupportPassportReplacementPrior(input: {
36
+ storage: StorageManager;
37
+ replacement: StoredSupportPassportCard;
38
+ principal: string;
39
+ namespace: string;
40
+ now: () => Date;
41
+ requireOwnerLock: () => Promise<void>;
42
+ onCommitted?: () => void;
43
+ }): Promise<string | null> {
44
+ const { storage, replacement, principal, namespace } = input;
45
+ const priorId = replacement.memory.frontmatter.supersedes;
46
+ if (!priorId) return null;
47
+ const priorMemory = await storage.getMemoryById(priorId);
48
+ const priorIsOwned = priorMemory ? ownsMemory(priorMemory, namespace, principal) : false;
49
+ const alreadyRetired =
50
+ priorIsOwned &&
51
+ priorMemory?.frontmatter.status === "superseded" &&
52
+ priorMemory.frontmatter.supersededBy === replacement.card.cardId;
53
+ const prior = priorMemory && priorIsOwned && !alreadyRetired ? projectSupportPassportCard(priorMemory) : null;
54
+ if (prior?.card.status === "rejected") return null;
55
+ if (!priorMemory || (!alreadyRetired && prior?.card.status !== "active")) {
56
+ throw new SupportPassportError("storage_conflict", "The prior support card changed before replacement.", 409);
57
+ }
58
+ if (alreadyRetired) return priorId;
59
+ const retiredAt = input.now().toISOString();
60
+ await input.requireOwnerLock();
61
+ const retired = await storage.writeMemoryFrontmatterIfUnchanged(
62
+ priorMemory,
63
+ {
64
+ status: "superseded",
65
+ supersededBy: replacement.card.cardId,
66
+ supersededAt: retiredAt,
67
+ supersessionCause: "direct",
68
+ updated: retiredAt,
69
+ },
70
+ {
71
+ actor: principal,
72
+ reasonCode: "support-passport-replacement-pending",
73
+ relatedMemoryIds: [replacement.card.cardId],
74
+ }
75
+ );
76
+ if (!retired) {
77
+ throw new SupportPassportError("storage_conflict", "The prior support card changed before replacement.", 409);
78
+ }
79
+ input.onCommitted?.();
80
+ return priorId;
81
+ }
82
+
83
+ export async function completeSupportPassportReplacementPrior(input: {
84
+ storage: StorageManager;
85
+ priorId: string;
86
+ replacement: StoredSupportPassportCard;
87
+ principal: string;
88
+ namespace: string;
89
+ requireOwnerLock: () => Promise<void>;
90
+ }): Promise<boolean> {
91
+ const { storage, priorId, replacement, principal, namespace } = input;
92
+ const replacementId = replacement.card.cardId;
93
+ const prior = await storage.getMemoryById(priorId);
94
+ if (
95
+ !prior ||
96
+ !ownsMemory(prior, namespace, principal) ||
97
+ prior.frontmatter.status !== "superseded" ||
98
+ prior.frontmatter.supersededBy !== replacementId
99
+ ) {
100
+ return false;
101
+ }
102
+ await input.requireOwnerLock();
103
+ const completed = await storage.supersedeMemory(
104
+ priorId,
105
+ replacementId,
106
+ "support-passport-replacement",
107
+ { supersessionCause: "direct" },
108
+ {
109
+ actor: principal,
110
+ requireActive: true,
111
+ acceptExactReplay: true,
112
+ expectedSnapshot: prior,
113
+ audit: {
114
+ content: stripAttributesSuffix(prior.content),
115
+ tags: ["supersession", "auto-resolved", "support-passport-audit"],
116
+ structuredAttributes: {
117
+ ...encodeSupportPassportNamespaceAttributes(namespace),
118
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner]: computeSupportPassportOwnerKey(principal),
119
+ },
120
+ source: "support-passport",
121
+ },
122
+ }
123
+ );
124
+ if (!completed) log.warn("support passport could not complete replacement retirement side effects");
125
+ return completed;
126
+ }
@@ -0,0 +1,160 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import type { StorageManager } from "../index.js";
5
+ import type { MemoryFile } from "../types.js";
6
+ import type { HeldFileLockController } from "../utils/serialize-mutations.js";
7
+ import {
8
+ SUPPORT_PASSPORT_ATTRIBUTE_KEYS,
9
+ SUPPORT_PASSPORT_CARD_TAG,
10
+ type StoredSupportPassportCard,
11
+ computeSupportPassportOwnerKey,
12
+ projectSupportPassportCard,
13
+ } from "./card-projection.js";
14
+ import type { SupportPassportCard } from "./contracts.js";
15
+ import { SupportPassportCardService } from "./card-service.js";
16
+
17
+ const PRINCIPAL = "owner:alice";
18
+ const NAMESPACE = "alice";
19
+
20
+ function memory(id: string, status: "pending_review" | "rejected", replacesDraftId?: string): MemoryFile {
21
+ return {
22
+ path: `/memory/preferences/${id}.md`,
23
+ content: "Offer me a quiet place and time.",
24
+ frontmatter: {
25
+ id,
26
+ category: "preference",
27
+ source: "support-passport",
28
+ confidence: 1,
29
+ confidenceTier: "explicit",
30
+ created: "2026-08-11T12:00:00.000Z",
31
+ updated: "2026-08-11T12:00:00.000Z",
32
+ status,
33
+ tags: [SUPPORT_PASSPORT_CARD_TAG],
34
+ structuredAttributes: {
35
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace]: NAMESPACE,
36
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner]: computeSupportPassportOwnerKey(PRINCIPAL),
37
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.title]: "Quiet space",
38
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category]: "environment",
39
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.order]: "0",
40
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.reviewBy]: "2026-09-01T12:00:00.000Z",
41
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.sourceMemoryIds]: "",
42
+ ...(replacesDraftId
43
+ ? {
44
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId]: replacesDraftId,
45
+ [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared]: "true",
46
+ }
47
+ : {}),
48
+ },
49
+ },
50
+ } as MemoryFile;
51
+ }
52
+
53
+ test("rejected-draft recovery forwards the commit notification", async () => {
54
+ const replaced = memory("draft-one", "rejected");
55
+ const replacement = projectSupportPassportCard(memory("draft-two", "pending_review", "draft-one"));
56
+ assert.ok(replacement);
57
+ const storage = {
58
+ getMemoryById: async (id: string) => (id === "draft-one" ? replaced : null),
59
+ } as unknown as StorageManager;
60
+ const service = new SupportPassportCardService({
61
+ resolveOwner: async () => ({ principal: PRINCIPAL, namespace: NAMESPACE, storage }),
62
+ });
63
+ let commitNotifications = 0;
64
+ const inspected = service as unknown as {
65
+ recoverReplacedDraft(
66
+ target: StorageManager,
67
+ card: StoredSupportPassportCard,
68
+ lock: HeldFileLockController,
69
+ principal: string,
70
+ namespace: string,
71
+ onCommitted?: () => void
72
+ ): Promise<void>;
73
+ finishPreparedDraftReplacement(
74
+ target: StorageManager,
75
+ replacementId: string,
76
+ lock: HeldFileLockController,
77
+ principal: string,
78
+ namespace: string,
79
+ onCommitted?: () => void
80
+ ): Promise<SupportPassportCard>;
81
+ };
82
+ inspected.finishPreparedDraftReplacement = async (
83
+ _target,
84
+ _replacementId,
85
+ _lock,
86
+ _principal,
87
+ _namespace,
88
+ onCommitted
89
+ ) => {
90
+ onCommitted?.();
91
+ return replacement.card;
92
+ };
93
+
94
+ await inspected.recoverReplacedDraft(
95
+ storage,
96
+ replacement,
97
+ {} as HeldFileLockController,
98
+ PRINCIPAL,
99
+ NAMESPACE,
100
+ () => {
101
+ commitNotifications += 1;
102
+ }
103
+ );
104
+
105
+ assert.equal(commitNotifications, 1);
106
+ });
107
+
108
+ test("pre-write card recovery forwards the commit notification", async () => {
109
+ const replacementMemory = memory("draft-two", "pending_review", "draft-one");
110
+ const storage = {
111
+ getCorpusScanVersion: () => "1:0",
112
+ readAllMemories: async () => [replacementMemory],
113
+ } as unknown as StorageManager;
114
+ const service = new SupportPassportCardService({
115
+ resolveOwner: async () => ({ principal: PRINCIPAL, namespace: NAMESPACE, storage }),
116
+ });
117
+ let commitNotifications = 0;
118
+ const inspected = service as unknown as {
119
+ readStoredCards(
120
+ target: StorageManager,
121
+ lock: HeldFileLockController,
122
+ principal: string,
123
+ namespace: string,
124
+ onCommitted?: () => void
125
+ ): Promise<StoredSupportPassportCard[]>;
126
+ recoverReplacementTransition(
127
+ target: StorageManager,
128
+ candidate: MemoryFile,
129
+ lock: HeldFileLockController,
130
+ principal: string,
131
+ namespace: string,
132
+ options?: { rollbackConflictedApproval?: boolean },
133
+ onCommitted?: () => void
134
+ ): Promise<MemoryFile>;
135
+ };
136
+ inspected.recoverReplacementTransition = async (
137
+ _target,
138
+ candidate,
139
+ _lock,
140
+ _principal,
141
+ _namespace,
142
+ _options,
143
+ onCommitted
144
+ ) => {
145
+ onCommitted?.();
146
+ return candidate;
147
+ };
148
+
149
+ await inspected.readStoredCards(
150
+ storage,
151
+ {} as HeldFileLockController,
152
+ PRINCIPAL,
153
+ NAMESPACE,
154
+ () => {
155
+ commitNotifications += 1;
156
+ }
157
+ );
158
+
159
+ assert.equal(commitNotifications, 1);
160
+ });