@remnic/core 9.65.8 → 9.66.1

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 (702) hide show
  1. package/dist/access-admin-ops-surface.d.ts +11 -12
  2. package/dist/access-admin-ops-surface.js +54 -51
  3. package/dist/access-authorization-probe.d.ts +11 -12
  4. package/dist/access-authorization-probe.js +55 -52
  5. package/dist/access-boundary.d.ts +11 -12
  6. package/dist/access-boundary.js +54 -51
  7. package/dist/access-citation-namespace.js +3 -3
  8. package/dist/access-cli.js +132 -125
  9. package/dist/access-cli.js.map +1 -1
  10. package/dist/access-coding-context-resolution.d.ts +1 -2
  11. package/dist/access-coding-context-resolution.js +2 -2
  12. package/dist/access-extraction-force-flush.d.ts +11 -12
  13. package/dist/access-extraction-force-flush.js +54 -51
  14. package/dist/access-health-types.d.ts +1 -2
  15. package/dist/access-http-lcm-compaction.d.ts +11 -12
  16. package/dist/access-http-lifecycle-flush.d.ts +11 -12
  17. package/dist/access-http-offline-stream.d.ts +11 -12
  18. package/dist/access-http-query.d.ts +2 -3
  19. package/dist/access-http-query.js +56 -53
  20. package/dist/access-http.d.ts +12 -13
  21. package/dist/access-http.js +77 -74
  22. package/dist/access-identity-continuity-surface.d.ts +9 -10
  23. package/dist/access-identity-continuity-surface.js +54 -51
  24. package/dist/access-lcm-surface.d.ts +11 -12
  25. package/dist/access-lcm-surface.js +54 -51
  26. package/dist/access-mcp-output-schemas.js +1 -1
  27. package/dist/access-mcp.d.ts +11 -12
  28. package/dist/access-mcp.js +67 -64
  29. package/dist/access-memory-search-fanout.d.ts +2 -3
  30. package/dist/{access-namespace-preflight-CpAOrS-9.d.ts → access-namespace-preflight-50VIkPhB.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +3 -4
  32. package/dist/access-namespace-preflight.js +54 -51
  33. package/dist/access-observe-write-surface.d.ts +11 -12
  34. package/dist/access-observe-write-surface.js +54 -51
  35. package/dist/access-offline-manifest.d.ts +9 -10
  36. package/dist/access-offline-manifest.js +15 -15
  37. package/dist/access-operations-batch.js +59 -56
  38. package/dist/access-operations.d.ts +12 -13
  39. package/dist/access-operations.js +64 -61
  40. package/dist/access-recall-concurrency.d.ts +11 -12
  41. package/dist/access-recall-concurrency.js +54 -51
  42. package/dist/access-recall-response.d.ts +11 -12
  43. package/dist/access-recall-response.js +54 -51
  44. package/dist/access-recall-surface.d.ts +11 -12
  45. package/dist/access-recall-surface.js +54 -51
  46. package/dist/access-schema.d.ts +12 -12
  47. package/dist/access-schema.js +5 -5
  48. package/dist/{access-service-Diu61Cfv.d.ts → access-service-C2tV2-uL.d.ts} +8 -8
  49. package/dist/access-service-helpers.d.ts +11 -12
  50. package/dist/access-service.d.ts +11 -12
  51. package/dist/access-service.js +54 -51
  52. package/dist/access-surface-catalog.d.ts +11 -12
  53. package/dist/access-surface-catalog.js +58 -53
  54. package/dist/access-surface-catalog.js.map +1 -1
  55. package/dist/access-wearables-meetings-surface.d.ts +3 -4
  56. package/dist/action-confidence.d.ts +1 -2
  57. package/dist/active-memory-bridge.d.ts +1 -2
  58. package/dist/active-memory-bridge.js +2 -2
  59. package/dist/active-recall.d.ts +1 -2
  60. package/dist/active-recall.js +11 -11
  61. package/dist/adapters/index.js +7 -7
  62. package/dist/adapters/registry.js +3 -3
  63. package/dist/ambient-provenance.d.ts +1 -2
  64. package/dist/artifact-search.d.ts +1 -2
  65. package/dist/{auto-sync-2YPITIWN.js → auto-sync-Q6Q2FVSC.js} +9 -9
  66. package/dist/behavior-learner.d.ts +1 -2
  67. package/dist/behavior-signals.d.ts +1 -2
  68. package/dist/bootstrap.d.ts +9 -10
  69. package/dist/briefing-window.d.ts +2 -3
  70. package/dist/briefing.d.ts +2 -3
  71. package/dist/briefing.js +28 -28
  72. package/dist/buffer-surprise-report.d.ts +1 -2
  73. package/dist/buffer-turn-helpers.d.ts +1 -2
  74. package/dist/buffer.d.ts +2 -3
  75. package/dist/buffer.js +20 -4
  76. package/dist/bulk-import/index.d.ts +3 -4
  77. package/dist/calibration.d.ts +1 -2
  78. package/dist/calibration.js +1 -1
  79. package/dist/capabilities.d.ts +1 -2
  80. package/dist/{capsule-merge-SGIVB3WA.js → capsule-merge-SEHERWWP.js} +4 -4
  81. package/dist/{catalog-9f-vEQLS.d.ts → catalog-C2jA-gLm.d.ts} +1 -1
  82. package/dist/causal-behavior.d.ts +1 -2
  83. package/dist/causal-consolidation.d.ts +1 -2
  84. package/dist/causal-consolidation.js +29 -29
  85. package/dist/causal-trajectory-graph.d.ts +1 -2
  86. package/dist/{chunk-LEPOP46W.js → chunk-227UFSEQ.js} +4 -4
  87. package/dist/{chunk-TFR3HG4K.js → chunk-2FA7U5XY.js} +4 -4
  88. package/dist/{chunk-PO7NXBG2.js → chunk-2GF27PGH.js} +5 -5
  89. package/dist/{chunk-W2BAGGEW.js → chunk-2ITZ74A6.js} +40 -31
  90. package/dist/{chunk-W2BAGGEW.js.map → chunk-2ITZ74A6.js.map} +1 -1
  91. package/dist/{chunk-MY2BC6UE.js → chunk-2X6BGKQL.js} +11 -11
  92. package/dist/{chunk-UEBDCMOO.js → chunk-3TSU662L.js} +3 -3
  93. package/dist/{chunk-XAB6STPO.js → chunk-46XR5FNZ.js} +53 -3
  94. package/dist/chunk-46XR5FNZ.js.map +1 -0
  95. package/dist/{chunk-FP7YTTVO.js → chunk-4OFKZAJG.js} +2 -1
  96. package/dist/chunk-4OFKZAJG.js.map +1 -0
  97. package/dist/{chunk-S5XOSTYM.js → chunk-4XLTUR6R.js} +3 -3
  98. package/dist/{chunk-BWGCOLEL.js → chunk-65JOGLIS.js} +2 -2
  99. package/dist/{chunk-HMZKGHMD.js → chunk-7UOXCCCI.js} +3 -3
  100. package/dist/{chunk-7WOWGRAU.js → chunk-AF5H7TKI.js} +108 -23
  101. package/dist/chunk-AF5H7TKI.js.map +1 -0
  102. package/dist/{chunk-7BDZTALN.js → chunk-AJTG3CP7.js} +12 -2
  103. package/dist/chunk-AJTG3CP7.js.map +1 -0
  104. package/dist/{chunk-2LWQSV6A.js → chunk-AL3UYZ5N.js} +3 -2
  105. package/dist/chunk-AL3UYZ5N.js.map +1 -0
  106. package/dist/{chunk-4F4AQFWL.js → chunk-B4AOWRYF.js} +10 -10
  107. package/dist/{chunk-ODU2CNNX.js → chunk-C5IUOBCN.js} +2 -2
  108. package/dist/{chunk-3A2NJP2U.js → chunk-CHGG74CY.js} +3 -3
  109. package/dist/{chunk-76DIF5KT.js → chunk-CX4OLNIH.js} +2 -2
  110. package/dist/{chunk-Z3YEGSR4.js → chunk-D3UXGE5D.js} +10 -10
  111. package/dist/{chunk-5HK3CJAR.js → chunk-D6Q5EPOV.js} +2 -2
  112. package/dist/{chunk-EGBDFJ36.js → chunk-DD5JFCWM.js} +2 -2
  113. package/dist/{chunk-XBGHAAKR.js → chunk-DDX6KIXF.js} +2 -2
  114. package/dist/{chunk-JIYDRBVZ.js → chunk-DJORULH3.js} +2 -2
  115. package/dist/{chunk-7KQB4EBS.js → chunk-DUAJKRR2.js} +2 -2
  116. package/dist/{chunk-XDL5CYZN.js → chunk-EEOUMG3J.js} +2 -1
  117. package/dist/{chunk-XDL5CYZN.js.map → chunk-EEOUMG3J.js.map} +1 -1
  118. package/dist/{chunk-Q57GOHLF.js → chunk-EGALNSZ4.js} +3 -3
  119. package/dist/{chunk-DPCXDG7G.js → chunk-EH65UV2Z.js} +2 -2
  120. package/dist/{chunk-KCT36JAW.js → chunk-ESNFSSO4.js} +2 -2
  121. package/dist/{chunk-XQ3HXAQH.js → chunk-ET2CNMLD.js} +4 -4
  122. package/dist/{chunk-TUHBYJXL.js → chunk-EWKVYCFP.js} +1 -1
  123. package/dist/{chunk-NPFUNWNX.js → chunk-FFUMTH27.js} +2 -2
  124. package/dist/{chunk-3PKAS6VL.js → chunk-GAJK3DQ5.js} +2 -2
  125. package/dist/{chunk-DA7ITC5Z.js → chunk-GBEOUCBB.js} +2 -2
  126. package/dist/{chunk-UENKPWCS.js → chunk-H2IRSXZN.js} +6 -6
  127. package/dist/{chunk-CFVTRUR3.js → chunk-H6RSANGQ.js} +2 -2
  128. package/dist/chunk-HVAEXYPL.js +98 -0
  129. package/dist/chunk-HVAEXYPL.js.map +1 -0
  130. package/dist/{chunk-EUYWQ7TS.js → chunk-IEZ6CGTW.js} +2 -2
  131. package/dist/{chunk-3SZD4CYO.js → chunk-IGZCAHFL.js} +3 -3
  132. package/dist/{chunk-UPFNQJC7.js → chunk-INUBU6I5.js} +2 -2
  133. package/dist/{chunk-PMVPCZJZ.js → chunk-J2R275FN.js} +3 -3
  134. package/dist/{chunk-UW5NPZJ2.js → chunk-JALOAKSZ.js} +59 -7
  135. package/dist/chunk-JALOAKSZ.js.map +1 -0
  136. package/dist/{chunk-2QSZNTDO.js → chunk-JBPKEARU.js} +7 -7
  137. package/dist/{chunk-3BCULS4U.js → chunk-JKTV3JNX.js} +145 -507
  138. package/dist/chunk-JKTV3JNX.js.map +1 -0
  139. package/dist/{chunk-5ACCD4L7.js → chunk-JRRQ747T.js} +7 -7
  140. package/dist/{chunk-V4IDF3EZ.js → chunk-JTWZKNUH.js} +5 -5
  141. package/dist/{chunk-AZMLH5UT.js → chunk-KI64TTBL.js} +2 -2
  142. package/dist/{chunk-DEACDKE3.js → chunk-KJXCD7VR.js} +112 -87
  143. package/dist/chunk-KJXCD7VR.js.map +1 -0
  144. package/dist/chunk-LJABGXC4.js +267 -0
  145. package/dist/chunk-LJABGXC4.js.map +1 -0
  146. package/dist/{chunk-NPIBN2VL.js → chunk-LK4TOYPU.js} +2 -2
  147. package/dist/{chunk-UTQUEHC7.js → chunk-LUDBXTBJ.js} +8 -8
  148. package/dist/{chunk-PU56CXZA.js → chunk-LYUUA6QB.js} +2 -2
  149. package/dist/{chunk-P36Z4JRA.js → chunk-M5ERTI4I.js} +2 -2
  150. package/dist/{chunk-LDKPDODJ.js → chunk-ME35HVDJ.js} +2 -2
  151. package/dist/{chunk-773TRRGT.js → chunk-MJUCDM3C.js} +2 -2
  152. package/dist/{chunk-OXRRJXPR.js → chunk-MUEGIKKY.js} +476 -1796
  153. package/dist/chunk-MUEGIKKY.js.map +1 -0
  154. package/dist/{chunk-AHPIFKNG.js → chunk-N4F7ZSSG.js} +2 -2
  155. package/dist/{chunk-JOZUBF4A.js → chunk-NACLNNFQ.js} +2 -2
  156. package/dist/{chunk-LC2BDILZ.js → chunk-NBP4EX5N.js} +2 -2
  157. package/dist/{chunk-T7XP6IZE.js → chunk-NFP4KPTA.js} +2 -2
  158. package/dist/{chunk-ZVPVTPGI.js → chunk-NNZFPYYX.js} +4 -4
  159. package/dist/{chunk-LPNCR4QK.js → chunk-NSTNGMSS.js} +14 -14
  160. package/dist/{chunk-5RWZH6PH.js → chunk-NUF7VSEX.js} +2 -2
  161. package/dist/{chunk-7VZFRUQU.js → chunk-O7ERGZDA.js} +5 -5
  162. package/dist/{chunk-HSZMX3ZJ.js → chunk-ODW5GDFE.js} +2 -2
  163. package/dist/{chunk-5DHKCO52.js → chunk-OJUEUQDJ.js} +2 -2
  164. package/dist/{chunk-LOXHYCVS.js → chunk-OMX6TKXH.js} +2 -2
  165. package/dist/{chunk-J2WC5LF4.js → chunk-QBC33MPY.js} +2 -1
  166. package/dist/{chunk-SEEJOGQX.js → chunk-QBNE55VA.js} +4 -4
  167. package/dist/chunk-QJCWK2A7.js +1466 -0
  168. package/dist/chunk-QJCWK2A7.js.map +1 -0
  169. package/dist/{chunk-YEUXERJ6.js → chunk-RDGKVH6T.js} +7 -3
  170. package/dist/{chunk-YEUXERJ6.js.map → chunk-RDGKVH6T.js.map} +1 -1
  171. package/dist/{chunk-JYSN42VN.js → chunk-RPIS5FQ7.js} +237 -183
  172. package/dist/chunk-RPIS5FQ7.js.map +1 -0
  173. package/dist/{chunk-F7XUD3PL.js → chunk-S4CDUXQY.js} +2 -2
  174. package/dist/{chunk-WNXYT4MK.js → chunk-S4Z2OBTX.js} +4 -4
  175. package/dist/{chunk-UL4MKZHI.js → chunk-SN4JXNLL.js} +2 -2
  176. package/dist/{chunk-CAMNRAJF.js → chunk-SZMYGDSM.js} +2 -2
  177. package/dist/chunk-TB2MJRI6.js +866 -0
  178. package/dist/chunk-TB2MJRI6.js.map +1 -0
  179. package/dist/{chunk-XNWXSGHS.js → chunk-TBCDF556.js} +28 -10
  180. package/dist/chunk-TBCDF556.js.map +1 -0
  181. package/dist/{chunk-LKYIOCWL.js → chunk-TCF4MU7L.js} +967 -132
  182. package/dist/chunk-TCF4MU7L.js.map +1 -0
  183. package/dist/chunk-TCQRIIIN.js +202 -0
  184. package/dist/chunk-TCQRIIIN.js.map +1 -0
  185. package/dist/{chunk-7PHI6GUI.js → chunk-TEZ2HTC7.js} +42 -2
  186. package/dist/chunk-TEZ2HTC7.js.map +1 -0
  187. package/dist/{chunk-CPA5NBHN.js → chunk-TNGH4ZYI.js} +2 -2
  188. package/dist/{chunk-F3NVYTTA.js → chunk-TNXNECAN.js} +6 -6
  189. package/dist/{chunk-BEC4YBNA.js → chunk-TVW4C7PV.js} +2 -2
  190. package/dist/{chunk-UFKPQBXH.js → chunk-U62OK7BB.js} +2 -2
  191. package/dist/{chunk-KZIF6XHX.js → chunk-U65VJSCJ.js} +32 -19
  192. package/dist/chunk-U65VJSCJ.js.map +1 -0
  193. package/dist/{chunk-4QEYREAV.js → chunk-U6NGKS32.js} +8 -8
  194. package/dist/{chunk-HRHO3ZNG.js → chunk-UW4RYPWC.js} +2 -2
  195. package/dist/{chunk-AX7UXCHJ.js → chunk-UYA36DQ7.js} +2 -1
  196. package/dist/chunk-UYA36DQ7.js.map +1 -0
  197. package/dist/{chunk-T6ILXUAH.js → chunk-VG4SSPAW.js} +2 -2
  198. package/dist/chunk-VOSWUO3K.js +100 -0
  199. package/dist/chunk-VOSWUO3K.js.map +1 -0
  200. package/dist/chunk-WFCWP4XU.js +17 -0
  201. package/dist/chunk-WFCWP4XU.js.map +1 -0
  202. package/dist/{chunk-H2YSH3DG.js → chunk-WKAXBXVA.js} +2 -2
  203. package/dist/{chunk-SXIMQLGV.js → chunk-WVGXCBOC.js} +2 -2
  204. package/dist/{chunk-UNUMFURP.js → chunk-X5PIDJ3L.js} +3 -3
  205. package/dist/{chunk-CRML27CO.js → chunk-X5YYSAZX.js} +4 -4
  206. package/dist/{chunk-FZEEWOI2.js → chunk-XJJYSX6F.js} +2 -2
  207. package/dist/{chunk-U7EW2W4W.js → chunk-XKNHFDTT.js} +26 -6
  208. package/dist/chunk-XKNHFDTT.js.map +1 -0
  209. package/dist/{chunk-OA2O2GJ4.js → chunk-XOHYGIWF.js} +3 -3
  210. package/dist/{chunk-UG6VXIOK.js → chunk-XSTNGNJP.js} +2 -2
  211. package/dist/{chunk-MINHJ55X.js → chunk-XXW32OL7.js} +1 -1
  212. package/dist/{chunk-MINHJ55X.js.map → chunk-XXW32OL7.js.map} +1 -1
  213. package/dist/{chunk-YDPAE2RD.js → chunk-YFLLGRXO.js} +2 -2
  214. package/dist/{chunk-MDD2RINF.js → chunk-YWPLOJ7T.js} +3 -3
  215. package/dist/{chunk-Q4WONDMJ.js → chunk-YYGZJPOK.js} +2 -2
  216. package/dist/{chunk-GTO56JY5.js → chunk-ZPS724LT.js} +2 -2
  217. package/dist/{chunk-SNOIKAHM.js → chunk-ZZZWEDF4.js} +3 -3
  218. package/dist/{cli-O3F-ht3i.d.ts → cli-CsfFMe6n.d.ts} +5 -5
  219. package/dist/cli.d.ts +13 -14
  220. package/dist/cli.js +101 -96
  221. package/dist/coding/export-okf-codegraph.d.ts +56 -0
  222. package/dist/coding/export-okf-codegraph.js +526 -0
  223. package/dist/coding/export-okf-codegraph.js.map +1 -0
  224. package/dist/coding/pre-action-gate.d.ts +1 -2
  225. package/dist/compounding/engine.d.ts +2 -3
  226. package/dist/compounding/engine.js +29 -29
  227. package/dist/compounding/preference-consolidator.d.ts +1 -2
  228. package/dist/compression-optimizer.d.ts +1 -2
  229. package/dist/config.d.ts +1 -2
  230. package/dist/config.js +11 -11
  231. package/dist/connectors/codex-materialize-runner.d.ts +1 -2
  232. package/dist/connectors/codex-materialize-runner.js +28 -28
  233. package/dist/connectors/codex-materialize.d.ts +1 -2
  234. package/dist/connectors/index.d.ts +1 -2
  235. package/dist/connectors/index.js +28 -28
  236. package/dist/consolidation-provenance-check.d.ts +2 -3
  237. package/dist/consolidation-provenance-check.js +4 -4
  238. package/dist/consolidation-undo.d.ts +2 -3
  239. package/dist/consolidation-undo.js +3 -3
  240. package/dist/contradiction/index.d.ts +3 -4
  241. package/dist/contradiction/index.js +9 -9
  242. package/dist/{contradiction-scan-AKUWPX5N.js → contradiction-scan-NOYMFG66.js} +3 -3
  243. package/dist/converge-config.d.ts +1 -2
  244. package/dist/convergence-refresh.d.ts +2 -3
  245. package/dist/convergence-refresh.js +30 -30
  246. package/dist/conversation-index/backend.d.ts +1 -2
  247. package/dist/conversation-index/backend.js +2 -2
  248. package/dist/conversation-index/chunker.d.ts +1 -2
  249. package/dist/conversation-index/faiss-adapter.d.ts +1 -2
  250. package/dist/conversation-index/indexer.d.ts +1 -2
  251. package/dist/conversation-index/search.d.ts +1 -2
  252. package/dist/corpus-watermark.d.ts +1 -2
  253. package/dist/corpus-watermark.js +30 -30
  254. package/dist/cross-lingual-recall.d.ts +1 -2
  255. package/dist/day-summary.d.ts +1 -2
  256. package/dist/delinearize.d.ts +1 -2
  257. package/dist/dependency-propagation-config.d.ts +1 -2
  258. package/dist/{dependency-propagation-delivery-CL6RWXTA.d.ts → dependency-propagation-delivery-D4WMbOwA.d.ts} +1 -1
  259. package/dist/direct-answer-wiring.d.ts +1 -2
  260. package/dist/direct-answer.d.ts +1 -2
  261. package/dist/embedding-fallback.d.ts +1 -2
  262. package/dist/enrichment/index.d.ts +1 -2
  263. package/dist/entity-origin-fields.d.ts +1 -2
  264. package/dist/entity-retrieval.d.ts +2 -3
  265. package/dist/entity-retrieval.js +28 -28
  266. package/dist/entity-schema.d.ts +1 -2
  267. package/dist/episodic-context.d.ts +1 -2
  268. package/dist/eval-trajectory-contracts.d.ts +1 -2
  269. package/dist/eval-trajectory-store.d.ts +1 -2
  270. package/dist/eval-trajectory.d.ts +1 -2
  271. package/dist/explicit-capture.d.ts +9 -10
  272. package/dist/explicit-capture.js +11 -11
  273. package/dist/external-wiki-access.d.ts +11 -12
  274. package/dist/external-wiki-access.js +55 -52
  275. package/dist/external-wiki-collection-registration.d.ts +1 -2
  276. package/dist/external-wiki-collection.d.ts +1 -2
  277. package/dist/external-wiki-mcp-tools.d.ts +11 -12
  278. package/dist/extraction-error-classification.d.ts +1 -2
  279. package/dist/extraction-faithfulness.d.ts +1 -2
  280. package/dist/extraction-faithfulness.js +2 -2
  281. package/dist/extraction-judge-telemetry.d.ts +1 -2
  282. package/dist/extraction-judge-training.d.ts +1 -2
  283. package/dist/extraction-judge.d.ts +1 -2
  284. package/dist/extraction-judge.js +2 -2
  285. package/dist/extraction-liveness.d.ts +1 -2
  286. package/dist/extraction-normalization.d.ts +1 -2
  287. package/dist/extraction-prompt.d.ts +1 -2
  288. package/dist/extraction-source-grounding-rules.d.ts +1 -2
  289. package/dist/extraction-source-grounding.d.ts +1 -2
  290. package/dist/extraction.d.ts +1 -2
  291. package/dist/extraction.js +37 -34
  292. package/dist/fallback-llm.d.ts +7 -2
  293. package/dist/fallback-llm.js +1 -1
  294. package/dist/{first-start-migration-4NETATFF.js → first-start-migration-KHIMCBIC.js} +3 -3
  295. package/dist/graph-dashboard-diff.d.ts +1 -2
  296. package/dist/graph-dashboard-key.d.ts +1 -2
  297. package/dist/graph-dashboard-parser.d.ts +1 -2
  298. package/dist/graph-edge-reinforcement.d.ts +1 -2
  299. package/dist/graph-path-reconstruction.d.ts +1 -2
  300. package/dist/graph-path-scoring.d.ts +1 -2
  301. package/dist/graph-snapshot.d.ts +1 -2
  302. package/dist/graph.d.ts +1 -2
  303. package/dist/harmonic-retrieval.js +1 -1
  304. package/dist/importance.d.ts +1 -2
  305. package/dist/importers/index.d.ts +1 -2
  306. package/dist/in-flight-reads.d.ts +1 -2
  307. package/dist/{index-C7Xep6S9.d.ts → index-DuJnzwHv.d.ts} +2 -2
  308. package/dist/index.d.ts +364 -26
  309. package/dist/index.js +232 -169
  310. package/dist/intent.d.ts +1 -2
  311. package/dist/lcm/engine.d.ts +1 -2
  312. package/dist/lcm/engine.js +4 -4
  313. package/dist/lcm/index.d.ts +1 -2
  314. package/dist/lcm/index.js +10 -10
  315. package/dist/lcm/tools.d.ts +1 -2
  316. package/dist/lifecycle.d.ts +1 -2
  317. package/dist/live-connectors-runner.d.ts +1 -2
  318. package/dist/local-llm.d.ts +1 -2
  319. package/dist/local-model-endpoint.d.ts +1 -2
  320. package/dist/location/index.d.ts +315 -6
  321. package/dist/location/index.js +151 -19
  322. package/dist/maintenance/memory-governance.d.ts +1 -2
  323. package/dist/maintenance/memory-governance.js +28 -28
  324. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -3
  325. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -28
  326. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -3
  327. package/dist/maintenance/rebuild-memory-projection.js +29 -29
  328. package/dist/{maintenance-CJ-xqFp0.d.ts → maintenance-BBeaeYRR.d.ts} +3 -3
  329. package/dist/mcp-memory-inspector-app.d.ts +11 -12
  330. package/dist/mcp-read-only-tools.js +1 -1
  331. package/dist/memory-action-policy.d.ts +1 -2
  332. package/dist/memory-cache.d.ts +1 -2
  333. package/dist/memory-controller.d.ts +1 -2
  334. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -2
  335. package/dist/memory-projection-mutations.js +3 -3
  336. package/dist/memory-projection-store.d.ts +1 -2
  337. package/dist/memory-projection-store.js +1 -1
  338. package/dist/memory-provenance.d.ts +1 -2
  339. package/dist/memory-snapshot.d.ts +1 -2
  340. package/dist/memory-subject-cli.d.ts +11 -12
  341. package/dist/memory-subject.d.ts +11 -12
  342. package/dist/memory-subject.js +4 -4
  343. package/dist/memory-worth-outcomes.d.ts +2 -3
  344. package/dist/models-json.d.ts +1 -2
  345. package/dist/namespaces/migrate.d.ts +3 -4
  346. package/dist/namespaces/migrate.js +29 -29
  347. package/dist/namespaces/principal.d.ts +1 -2
  348. package/dist/namespaces/search.d.ts +1 -2
  349. package/dist/namespaces/search.js +8 -8
  350. package/dist/namespaces/storage.d.ts +3 -4
  351. package/dist/namespaces/storage.js +28 -28
  352. package/dist/native-knowledge.d.ts +1 -2
  353. package/dist/offline-sync-file-io.js +3 -3
  354. package/dist/offline-sync-impression-drain.d.ts +1 -2
  355. package/dist/offline-sync-impression-drain.js +9 -9
  356. package/dist/offline-sync.js +4 -4
  357. package/dist/operator-doctor-corpus.d.ts +1 -2
  358. package/dist/operator-doctor-corpus.js +31 -31
  359. package/dist/operator-doctor-replica.d.ts +1 -2
  360. package/dist/operator-toolkit.d.ts +3 -4
  361. package/dist/operator-toolkit.js +47 -47
  362. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -3
  363. package/dist/orchestration/maintenance.d.ts +4 -5
  364. package/dist/orchestration/maintenance.js +42 -41
  365. package/dist/{orchestrator-BsntWxLy.d.ts → orchestrator-CaqnwNwM.d.ts} +8 -8
  366. package/dist/orchestrator.d.ts +9 -10
  367. package/dist/orchestrator.js +132 -125
  368. package/dist/page-versioning.js +3 -3
  369. package/dist/patterns-cli.d.ts +1 -2
  370. package/dist/{pipeline-CVoysPm2.d.ts → pipeline-CrxVjlJr.d.ts} +1 -1
  371. package/dist/policy-runtime.d.ts +1 -2
  372. package/dist/proactive-contention.d.ts +1 -2
  373. package/dist/provenance.d.ts +1 -2
  374. package/dist/{public-http-CuOxlTC2.d.ts → public-http-Cwvl4QZr.d.ts} +1 -1
  375. package/dist/{purge-GB7PZHT2.js → purge-OP6BEDFY.js} +2 -2
  376. package/dist/{qmd-DWMAGA5l.d.ts → qmd-BZgbJm0g.d.ts} +1 -1
  377. package/dist/qmd-preflight.d.ts +2 -3
  378. package/dist/qmd-recall-cache.d.ts +1 -2
  379. package/dist/qmd.d.ts +2 -3
  380. package/dist/recall-concurrency-config.d.ts +1 -2
  381. package/dist/recall-deep.d.ts +37 -0
  382. package/dist/recall-deep.js +81 -0
  383. package/dist/recall-deep.js.map +1 -0
  384. package/dist/recall-disclosure-escalation.d.ts +1 -2
  385. package/dist/recall-explain-renderer.d.ts +1 -2
  386. package/dist/recall-explain-renderer.js +3 -3
  387. package/dist/recall-memory-map.d.ts +1 -2
  388. package/dist/recall-navigate.d.ts +70 -0
  389. package/dist/recall-navigate.js +51 -0
  390. package/dist/recall-navigate.js.map +1 -0
  391. package/dist/recall-planner-llm.d.ts +1 -2
  392. package/dist/recall-planner-llm.js +1 -1
  393. package/dist/recall-state-view-wire.d.ts +14 -0
  394. package/dist/recall-state-view-wire.js +11 -0
  395. package/dist/recall-state-view.d.ts +25 -0
  396. package/dist/recall-state-view.js +22 -0
  397. package/dist/recall-state-view.js.map +1 -0
  398. package/dist/recall-state.d.ts +1 -2
  399. package/dist/recall-tag-filter.d.ts +1 -2
  400. package/dist/recall-timings.d.ts +1 -2
  401. package/dist/recall-xray-cli.d.ts +1 -2
  402. package/dist/recall-xray-cli.js +4 -4
  403. package/dist/recall-xray-renderer.d.ts +1 -2
  404. package/dist/recall-xray-renderer.js +3 -3
  405. package/dist/recall-xray.d.ts +1 -2
  406. package/dist/recall-xray.js +2 -2
  407. package/dist/reconcile/cursor.d.ts +1 -2
  408. package/dist/reconcile/manifest.d.ts +1 -2
  409. package/dist/reconcile/manifest.js +4 -4
  410. package/dist/reconcile/plan.d.ts +1 -2
  411. package/dist/replay/normalizers/chatgpt.d.ts +1 -2
  412. package/dist/replay/normalizers/claude.d.ts +1 -2
  413. package/dist/replay/normalizers/openclaw.d.ts +1 -2
  414. package/dist/replay/normalizers/shared.d.ts +1 -2
  415. package/dist/replay/runner.d.ts +1 -2
  416. package/dist/replay/types.d.ts +1 -2
  417. package/dist/replica-divergence.d.ts +1 -2
  418. package/dist/replica-peers-config.d.ts +1 -2
  419. package/dist/{resolution-XWBPKYFB.js → resolution-4DLI3IOR.js} +10 -10
  420. package/dist/resolution-4DLI3IOR.js.map +1 -0
  421. package/dist/resolve-auth-token.d.ts +1 -2
  422. package/dist/resume-bundles.js +12 -12
  423. package/dist/retrieval-agents.d.ts +2 -3
  424. package/dist/retrieval-tiers.d.ts +1 -2
  425. package/dist/routing/engine.d.ts +1 -2
  426. package/dist/routing/store.d.ts +1 -2
  427. package/dist/salvage-envelope.d.ts +1 -2
  428. package/dist/salvage-envelope.js +6 -6
  429. package/dist/schemas.d.ts +570 -105
  430. package/dist/schemas.js +3 -1
  431. package/dist/{scope-profiles-CPWkW_dI.d.ts → scope-profiles-DFaojvoP.d.ts} +1 -1
  432. package/dist/search/document-scanner.js +1 -1
  433. package/dist/search/embed-helper.d.ts +1 -2
  434. package/dist/search/factory.d.ts +1 -2
  435. package/dist/search/factory.js +7 -7
  436. package/dist/search/index.d.ts +1 -2
  437. package/dist/search/index.js +13 -13
  438. package/dist/search/lancedb-backend.d.ts +1 -2
  439. package/dist/search/lancedb-backend.js +1 -1
  440. package/dist/search/meilisearch-backend.d.ts +1 -2
  441. package/dist/search/meilisearch-backend.js +1 -1
  442. package/dist/search/noop-backend.d.ts +1 -2
  443. package/dist/search/orama-backend.d.ts +1 -2
  444. package/dist/search/orama-backend.js +1 -1
  445. package/dist/search/port.d.ts +1 -2
  446. package/dist/search/remote-backend.d.ts +1 -2
  447. package/dist/secure-store/index.js +3 -3
  448. package/dist/{semantic-consolidation-CNFVBXFc.d.ts → semantic-consolidation-BiX68wZA.d.ts} +1 -1
  449. package/dist/semantic-consolidation.d.ts +2 -3
  450. package/dist/semantic-consolidation.js +29 -29
  451. package/dist/semantic-rule-promotion.js +28 -28
  452. package/dist/semantic-rule-verifier.d.ts +1 -2
  453. package/dist/semantic-rule-verifier.js +28 -28
  454. package/dist/{service-Bb-JIdQ0.d.ts → service-D5h2zZ0M.d.ts} +2 -2
  455. package/dist/session-observer-bands.d.ts +1 -2
  456. package/dist/session-observer-state.d.ts +1 -2
  457. package/dist/shared-context/manager.d.ts +1 -2
  458. package/dist/signal.d.ts +1 -2
  459. package/dist/source-agent-qualifier.d.ts +1 -2
  460. package/dist/source-agent-qualifier.js +35 -32
  461. package/dist/standup/build.d.ts +16 -0
  462. package/dist/standup/build.js +17 -0
  463. package/dist/standup/build.js.map +1 -0
  464. package/dist/{storage-CukrlNKk.d.ts → storage-CtsaojWD.d.ts} +1 -1
  465. package/dist/storage.d.ts +2 -3
  466. package/dist/storage.js +27 -27
  467. package/dist/subject-config.d.ts +1 -2
  468. package/dist/subject-config.js +5 -5
  469. package/dist/summarizer.d.ts +1 -2
  470. package/dist/summarizer.js +2 -2
  471. package/dist/summary-snapshot.d.ts +1 -2
  472. package/dist/support-passport/index.d.ts +16 -17
  473. package/dist/support-passport/index.js +57 -54
  474. package/dist/temporal-supersession.d.ts +2 -3
  475. package/dist/temporal-timeline-recall.d.ts +1 -2
  476. package/dist/temporal-validity.d.ts +1 -2
  477. package/dist/threading.d.ts +1 -2
  478. package/dist/tier-migration.d.ts +2 -3
  479. package/dist/tier-routing.d.ts +1 -2
  480. package/dist/tier-routing.js +2 -2
  481. package/dist/{tier-stats-4B5IJ3NE.js → tier-stats-2TOW3QNL.js} +3 -3
  482. package/dist/topics.d.ts +1 -2
  483. package/dist/transcript.d.ts +1 -2
  484. package/dist/transfer/capsule-import.js +4 -4
  485. package/dist/transfer/export-okf.d.ts +39 -0
  486. package/dist/transfer/export-okf.js +112 -0
  487. package/dist/transfer/export-okf.js.map +1 -0
  488. package/dist/trust-score-stage.d.ts +1 -2
  489. package/dist/trust-score.d.ts +1 -2
  490. package/dist/{types-djxQlxJ7.d.ts → types-CIpfYz1I.d.ts} +132 -12
  491. package/dist/types.d.ts +1 -2
  492. package/dist/types.js +1 -1
  493. package/dist/utility-runtime.d.ts +1 -2
  494. package/dist/verified-recall.js +28 -28
  495. package/dist/who-knows-cli.d.ts +11 -12
  496. package/dist/who-knows-cli.js +29 -29
  497. package/dist/who-knows.d.ts +11 -12
  498. package/dist/who-knows.js +28 -28
  499. package/dist/write-envelope.d.ts +1 -2
  500. package/dist/write-envelope.js +5 -5
  501. package/package.json +34 -3
  502. package/src/access-admin-ops-surface.ts +6 -1
  503. package/src/access-boundary.ts +1 -0
  504. package/src/access-http.ts +3 -1
  505. package/src/access-mcp-output-schemas.ts +1 -0
  506. package/src/access-mcp.ts +3 -3
  507. package/src/access-operations.ts +1 -0
  508. package/src/access-service-offline-file-content.test.ts +63 -0
  509. package/src/access-surface-catalog.ts +2 -0
  510. package/src/activity/config.test.ts +1 -0
  511. package/src/activity/config.ts +66 -1
  512. package/src/activity/index.ts +3 -0
  513. package/src/activity/journal.test.ts +97 -0
  514. package/src/activity/journal.ts +113 -0
  515. package/src/activity/privacy.test.ts +53 -0
  516. package/src/activity/privacy.ts +80 -0
  517. package/src/activity/timeline/build.ts +279 -0
  518. package/src/activity/timeline/categories.ts +111 -0
  519. package/src/activity/timeline/classify.ts +110 -0
  520. package/src/activity/timeline/corrections.ts +145 -0
  521. package/src/activity/timeline/index.ts +8 -0
  522. package/src/activity/timeline/journal-recap.test.ts +113 -0
  523. package/src/activity/timeline/journal-recap.ts +130 -0
  524. package/src/activity/timeline/query.test.ts +198 -0
  525. package/src/activity/timeline/query.ts +313 -0
  526. package/src/activity/timeline/timeline.test.ts +277 -0
  527. package/src/activity/timeline/types.ts +106 -0
  528. package/src/activity/timeline/weekly.test.ts +215 -0
  529. package/src/activity/timeline/weekly.ts +234 -0
  530. package/src/activity/types.ts +20 -0
  531. package/src/activity/vault-publish.test.ts +166 -0
  532. package/src/activity/vault-publish.ts +101 -0
  533. package/src/cli/okf-commands.ts +45 -0
  534. package/src/cli.ts +2 -2
  535. package/src/coding/export-okf-codegraph.test.ts +381 -0
  536. package/src/coding/export-okf-codegraph.ts +565 -0
  537. package/src/config.test.ts +1 -0
  538. package/src/config.ts +2 -22
  539. package/src/dedup/merge-on-write.test.ts +91 -0
  540. package/src/dedup/merge-on-write.ts +75 -0
  541. package/src/dedup/novelty-gate.test.ts +143 -0
  542. package/src/dedup/novelty-gate.ts +163 -0
  543. package/src/extraction-prompt-safety.test.ts +14 -2
  544. package/src/extraction.ts +21 -1
  545. package/src/fallback-llm.test.ts +134 -0
  546. package/src/fallback-llm.ts +77 -5
  547. package/src/location/access-operations.ts +17 -8
  548. package/src/location/backfill.ts +137 -0
  549. package/src/location/config.test.ts +3 -0
  550. package/src/location/config.ts +46 -2
  551. package/src/location/http-glue.ts +1 -1
  552. package/src/location/index.ts +3 -0
  553. package/src/location/intervals.ts +1 -0
  554. package/src/location/matching.test.ts +65 -0
  555. package/src/location/matching.ts +354 -0
  556. package/src/location/mcp-tools.ts +2 -1
  557. package/src/location/recall-exclusion.test.ts +1 -0
  558. package/src/location/surfaces.test.ts +15 -2
  559. package/src/location/surfaces.ts +95 -18
  560. package/src/location/tagging.test.ts +119 -0
  561. package/src/location/tagging.ts +277 -0
  562. package/src/location/types.ts +23 -1
  563. package/src/mcp-read-only-tools.ts +1 -0
  564. package/src/memory-projection-store.ts +3 -1
  565. package/src/okf/cli.ts +18 -5
  566. package/src/okf/config.ts +5 -0
  567. package/src/okf/index-files.test.ts +60 -0
  568. package/src/okf/index-files.ts +114 -0
  569. package/src/okf/render.ts +133 -0
  570. package/src/okf/type-mapping.test.ts +3 -0
  571. package/src/okf/type-mapping.ts +2 -0
  572. package/src/orchestration/extraction-persist.ts +22 -23
  573. package/src/orchestration/extraction-run.ts +2 -1
  574. package/src/orchestration/generic-recall-paths.ts +15 -3
  575. package/src/orchestration/recall-entry.ts +8 -3
  576. package/src/recall-deep.test.ts +72 -0
  577. package/src/recall-deep.ts +113 -0
  578. package/src/recall-navigate.test.ts +84 -0
  579. package/src/recall-navigate.ts +100 -0
  580. package/src/recall-state-view-wire.test.ts +35 -0
  581. package/src/recall-state-view-wire.ts +28 -0
  582. package/src/recall-state-view.test.ts +131 -0
  583. package/src/recall-state-view.ts +138 -0
  584. package/src/schemas.ts +17 -1
  585. package/src/shared-context/governance.test.ts +53 -0
  586. package/src/shared-context/governance.ts +86 -0
  587. package/src/standup/access-operations.ts +14 -0
  588. package/src/standup/build.test.ts +34 -0
  589. package/src/standup/build.ts +115 -0
  590. package/src/standup/http-glue.ts +15 -0
  591. package/src/standup/mcp-tools.ts +16 -0
  592. package/src/support-passport/card-projection.ts +1 -0
  593. package/src/support-passport/card-service-commit-forwarding.test.ts +1 -0
  594. package/src/support-passport/card-service.test.ts +75 -1
  595. package/src/support-passport/card-service.ts +6 -3
  596. package/src/support-passport/card-state.ts +5 -1
  597. package/src/support-passport/offline-sync-guard.ts +14 -1
  598. package/src/transfer/export-okf.test.ts +164 -0
  599. package/src/transfer/export-okf.ts +286 -0
  600. package/src/types.ts +3 -10
  601. package/dist/chunk-2LWQSV6A.js.map +0 -1
  602. package/dist/chunk-3BCULS4U.js.map +0 -1
  603. package/dist/chunk-7BDZTALN.js.map +0 -1
  604. package/dist/chunk-7PHI6GUI.js.map +0 -1
  605. package/dist/chunk-7WOWGRAU.js.map +0 -1
  606. package/dist/chunk-AX7UXCHJ.js.map +0 -1
  607. package/dist/chunk-DEACDKE3.js.map +0 -1
  608. package/dist/chunk-FP7YTTVO.js.map +0 -1
  609. package/dist/chunk-JYSN42VN.js.map +0 -1
  610. package/dist/chunk-KZIF6XHX.js.map +0 -1
  611. package/dist/chunk-LKYIOCWL.js.map +0 -1
  612. package/dist/chunk-OXRRJXPR.js.map +0 -1
  613. package/dist/chunk-U7EW2W4W.js.map +0 -1
  614. package/dist/chunk-UW5NPZJ2.js.map +0 -1
  615. package/dist/chunk-XAB6STPO.js.map +0 -1
  616. package/dist/chunk-XNWXSGHS.js.map +0 -1
  617. package/dist/types-CM86alG1.d.ts +0 -89
  618. /package/dist/{auto-sync-2YPITIWN.js.map → auto-sync-Q6Q2FVSC.js.map} +0 -0
  619. /package/dist/{capsule-merge-SGIVB3WA.js.map → capsule-merge-SEHERWWP.js.map} +0 -0
  620. /package/dist/{chunk-LEPOP46W.js.map → chunk-227UFSEQ.js.map} +0 -0
  621. /package/dist/{chunk-TFR3HG4K.js.map → chunk-2FA7U5XY.js.map} +0 -0
  622. /package/dist/{chunk-PO7NXBG2.js.map → chunk-2GF27PGH.js.map} +0 -0
  623. /package/dist/{chunk-MY2BC6UE.js.map → chunk-2X6BGKQL.js.map} +0 -0
  624. /package/dist/{chunk-UEBDCMOO.js.map → chunk-3TSU662L.js.map} +0 -0
  625. /package/dist/{chunk-S5XOSTYM.js.map → chunk-4XLTUR6R.js.map} +0 -0
  626. /package/dist/{chunk-BWGCOLEL.js.map → chunk-65JOGLIS.js.map} +0 -0
  627. /package/dist/{chunk-HMZKGHMD.js.map → chunk-7UOXCCCI.js.map} +0 -0
  628. /package/dist/{chunk-4F4AQFWL.js.map → chunk-B4AOWRYF.js.map} +0 -0
  629. /package/dist/{chunk-ODU2CNNX.js.map → chunk-C5IUOBCN.js.map} +0 -0
  630. /package/dist/{chunk-3A2NJP2U.js.map → chunk-CHGG74CY.js.map} +0 -0
  631. /package/dist/{chunk-76DIF5KT.js.map → chunk-CX4OLNIH.js.map} +0 -0
  632. /package/dist/{chunk-Z3YEGSR4.js.map → chunk-D3UXGE5D.js.map} +0 -0
  633. /package/dist/{chunk-5HK3CJAR.js.map → chunk-D6Q5EPOV.js.map} +0 -0
  634. /package/dist/{chunk-EGBDFJ36.js.map → chunk-DD5JFCWM.js.map} +0 -0
  635. /package/dist/{chunk-XBGHAAKR.js.map → chunk-DDX6KIXF.js.map} +0 -0
  636. /package/dist/{chunk-JIYDRBVZ.js.map → chunk-DJORULH3.js.map} +0 -0
  637. /package/dist/{chunk-7KQB4EBS.js.map → chunk-DUAJKRR2.js.map} +0 -0
  638. /package/dist/{chunk-Q57GOHLF.js.map → chunk-EGALNSZ4.js.map} +0 -0
  639. /package/dist/{chunk-DPCXDG7G.js.map → chunk-EH65UV2Z.js.map} +0 -0
  640. /package/dist/{chunk-KCT36JAW.js.map → chunk-ESNFSSO4.js.map} +0 -0
  641. /package/dist/{chunk-XQ3HXAQH.js.map → chunk-ET2CNMLD.js.map} +0 -0
  642. /package/dist/{chunk-TUHBYJXL.js.map → chunk-EWKVYCFP.js.map} +0 -0
  643. /package/dist/{chunk-NPFUNWNX.js.map → chunk-FFUMTH27.js.map} +0 -0
  644. /package/dist/{chunk-3PKAS6VL.js.map → chunk-GAJK3DQ5.js.map} +0 -0
  645. /package/dist/{chunk-DA7ITC5Z.js.map → chunk-GBEOUCBB.js.map} +0 -0
  646. /package/dist/{chunk-UENKPWCS.js.map → chunk-H2IRSXZN.js.map} +0 -0
  647. /package/dist/{chunk-CFVTRUR3.js.map → chunk-H6RSANGQ.js.map} +0 -0
  648. /package/dist/{chunk-EUYWQ7TS.js.map → chunk-IEZ6CGTW.js.map} +0 -0
  649. /package/dist/{chunk-3SZD4CYO.js.map → chunk-IGZCAHFL.js.map} +0 -0
  650. /package/dist/{chunk-UPFNQJC7.js.map → chunk-INUBU6I5.js.map} +0 -0
  651. /package/dist/{chunk-PMVPCZJZ.js.map → chunk-J2R275FN.js.map} +0 -0
  652. /package/dist/{chunk-2QSZNTDO.js.map → chunk-JBPKEARU.js.map} +0 -0
  653. /package/dist/{chunk-5ACCD4L7.js.map → chunk-JRRQ747T.js.map} +0 -0
  654. /package/dist/{chunk-V4IDF3EZ.js.map → chunk-JTWZKNUH.js.map} +0 -0
  655. /package/dist/{chunk-AZMLH5UT.js.map → chunk-KI64TTBL.js.map} +0 -0
  656. /package/dist/{chunk-NPIBN2VL.js.map → chunk-LK4TOYPU.js.map} +0 -0
  657. /package/dist/{chunk-UTQUEHC7.js.map → chunk-LUDBXTBJ.js.map} +0 -0
  658. /package/dist/{chunk-PU56CXZA.js.map → chunk-LYUUA6QB.js.map} +0 -0
  659. /package/dist/{chunk-P36Z4JRA.js.map → chunk-M5ERTI4I.js.map} +0 -0
  660. /package/dist/{chunk-LDKPDODJ.js.map → chunk-ME35HVDJ.js.map} +0 -0
  661. /package/dist/{chunk-773TRRGT.js.map → chunk-MJUCDM3C.js.map} +0 -0
  662. /package/dist/{chunk-AHPIFKNG.js.map → chunk-N4F7ZSSG.js.map} +0 -0
  663. /package/dist/{chunk-JOZUBF4A.js.map → chunk-NACLNNFQ.js.map} +0 -0
  664. /package/dist/{chunk-LC2BDILZ.js.map → chunk-NBP4EX5N.js.map} +0 -0
  665. /package/dist/{chunk-T7XP6IZE.js.map → chunk-NFP4KPTA.js.map} +0 -0
  666. /package/dist/{chunk-ZVPVTPGI.js.map → chunk-NNZFPYYX.js.map} +0 -0
  667. /package/dist/{chunk-LPNCR4QK.js.map → chunk-NSTNGMSS.js.map} +0 -0
  668. /package/dist/{chunk-5RWZH6PH.js.map → chunk-NUF7VSEX.js.map} +0 -0
  669. /package/dist/{chunk-7VZFRUQU.js.map → chunk-O7ERGZDA.js.map} +0 -0
  670. /package/dist/{chunk-HSZMX3ZJ.js.map → chunk-ODW5GDFE.js.map} +0 -0
  671. /package/dist/{chunk-5DHKCO52.js.map → chunk-OJUEUQDJ.js.map} +0 -0
  672. /package/dist/{chunk-LOXHYCVS.js.map → chunk-OMX6TKXH.js.map} +0 -0
  673. /package/dist/{chunk-J2WC5LF4.js.map → chunk-QBC33MPY.js.map} +0 -0
  674. /package/dist/{chunk-SEEJOGQX.js.map → chunk-QBNE55VA.js.map} +0 -0
  675. /package/dist/{chunk-F7XUD3PL.js.map → chunk-S4CDUXQY.js.map} +0 -0
  676. /package/dist/{chunk-WNXYT4MK.js.map → chunk-S4Z2OBTX.js.map} +0 -0
  677. /package/dist/{chunk-UL4MKZHI.js.map → chunk-SN4JXNLL.js.map} +0 -0
  678. /package/dist/{chunk-CAMNRAJF.js.map → chunk-SZMYGDSM.js.map} +0 -0
  679. /package/dist/{chunk-CPA5NBHN.js.map → chunk-TNGH4ZYI.js.map} +0 -0
  680. /package/dist/{chunk-F3NVYTTA.js.map → chunk-TNXNECAN.js.map} +0 -0
  681. /package/dist/{chunk-BEC4YBNA.js.map → chunk-TVW4C7PV.js.map} +0 -0
  682. /package/dist/{chunk-UFKPQBXH.js.map → chunk-U62OK7BB.js.map} +0 -0
  683. /package/dist/{chunk-4QEYREAV.js.map → chunk-U6NGKS32.js.map} +0 -0
  684. /package/dist/{chunk-HRHO3ZNG.js.map → chunk-UW4RYPWC.js.map} +0 -0
  685. /package/dist/{chunk-T6ILXUAH.js.map → chunk-VG4SSPAW.js.map} +0 -0
  686. /package/dist/{chunk-H2YSH3DG.js.map → chunk-WKAXBXVA.js.map} +0 -0
  687. /package/dist/{chunk-SXIMQLGV.js.map → chunk-WVGXCBOC.js.map} +0 -0
  688. /package/dist/{chunk-UNUMFURP.js.map → chunk-X5PIDJ3L.js.map} +0 -0
  689. /package/dist/{chunk-CRML27CO.js.map → chunk-X5YYSAZX.js.map} +0 -0
  690. /package/dist/{chunk-FZEEWOI2.js.map → chunk-XJJYSX6F.js.map} +0 -0
  691. /package/dist/{chunk-OA2O2GJ4.js.map → chunk-XOHYGIWF.js.map} +0 -0
  692. /package/dist/{chunk-UG6VXIOK.js.map → chunk-XSTNGNJP.js.map} +0 -0
  693. /package/dist/{chunk-YDPAE2RD.js.map → chunk-YFLLGRXO.js.map} +0 -0
  694. /package/dist/{chunk-MDD2RINF.js.map → chunk-YWPLOJ7T.js.map} +0 -0
  695. /package/dist/{chunk-Q4WONDMJ.js.map → chunk-YYGZJPOK.js.map} +0 -0
  696. /package/dist/{chunk-GTO56JY5.js.map → chunk-ZPS724LT.js.map} +0 -0
  697. /package/dist/{chunk-SNOIKAHM.js.map → chunk-ZZZWEDF4.js.map} +0 -0
  698. /package/dist/{contradiction-scan-AKUWPX5N.js.map → contradiction-scan-NOYMFG66.js.map} +0 -0
  699. /package/dist/{first-start-migration-4NETATFF.js.map → first-start-migration-KHIMCBIC.js.map} +0 -0
  700. /package/dist/{purge-GB7PZHT2.js.map → purge-OP6BEDFY.js.map} +0 -0
  701. /package/dist/{resolution-XWBPKYFB.js.map → recall-state-view-wire.js.map} +0 -0
  702. /package/dist/{tier-stats-4B5IJ3NE.js.map → tier-stats-2TOW3QNL.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/support-passport/contracts.ts","../src/support-passport/card-projection.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\n\nimport { normalizeNamespaceIdentity } from \"../namespaces/identity.js\";\nimport { parseIsoOffsetTimestamp } from \"../utils/iso-timestamp.js\";\n\nexport const SUPPORT_PASSPORT_CARD_CATEGORIES = [\n \"communication\",\n \"environment\",\n \"transitions\",\n \"sensory\",\n \"regulation\",\n \"interests\",\n \"other\",\n] as const;\n\nexport const SUPPORT_PASSPORT_CARD_STATUSES = [\n \"pending_review\",\n \"active\",\n \"rejected\",\n \"superseded\",\n \"archived\",\n] as const;\n\nexport const SupportPassportCardCategorySchema = z.enum(SUPPORT_PASSPORT_CARD_CATEGORIES);\nexport const SupportPassportCardStatusSchema = z.enum(SUPPORT_PASSPORT_CARD_STATUSES);\nexport const SupportPassportCardTitleSchema = z\n .string()\n .trim()\n .min(1)\n .max(80)\n .refine((title) => !title.includes(\"]\") && !title.includes(\"\\n\") && !title.includes(\"\\r\"), {\n message: \"card titles cannot contain closing brackets or line breaks\",\n });\n\nconst IsoTimestampSchema = z\n .string()\n .datetime({ offset: true })\n .refine((value) => parseIsoOffsetTimestamp(value) !== null, {\n message: \"timestamps must be valid ISO 8601 values\",\n });\nexport const SupportPassportNamespaceSchema = z\n .string()\n .min(1)\n .refine((namespace) => namespace === normalizeNamespaceIdentity(namespace), {\n message: \"namespaces must be canonical\",\n });\nexport const SupportPassportMemoryIdSchema = z\n .string()\n .trim()\n .min(1)\n .max(128)\n .regex(/^[A-Za-z0-9._:-]+$/);\nexport const SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH = 512;\nexport const SupportPassportSourceMemoryIdSchema = z\n .string()\n .trim()\n .min(1)\n .max(SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH);\n\nexport const SupportPassportCardSchema = z\n .object({\n cardId: SupportPassportMemoryIdSchema,\n title: SupportPassportCardTitleSchema,\n statement: z.string().trim().min(1).max(500),\n category: SupportPassportCardCategorySchema,\n status: SupportPassportCardStatusSchema,\n updatedAt: IsoTimestampSchema,\n reviewBy: IsoTimestampSchema,\n revision: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\n\nexport const SupportPassportCardListSchema = z\n .array(SupportPassportCardSchema)\n .max(100)\n .superRefine((cards, ctx) => {\n const seen = new Set<string>();\n for (const [index, card] of cards.entries()) {\n if (seen.has(card.cardId)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"card IDs must be unique\",\n path: [index, \"cardId\"],\n });\n }\n seen.add(card.cardId);\n }\n });\n\nexport const SupportPassportListCardsInputSchema = z\n .object({\n principal: z.string().trim().min(1).max(512),\n })\n .strict();\n\nexport const SupportPassportManualDraftInputSchema = z\n .object({\n principal: z.string().trim().min(1).max(512),\n title: SupportPassportCardTitleSchema,\n statement: z.string().trim().min(1).max(500),\n category: SupportPassportCardCategorySchema,\n reviewBy: IsoTimestampSchema,\n })\n .strict();\n\nexport const SupportPassportCardMutationInputSchema = z\n .object({\n principal: z.string().trim().min(1).max(512),\n cardId: SupportPassportMemoryIdSchema,\n expectedRevision: z.string().regex(/^[a-f0-9]{64}$/),\n reasonCode: z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9-]+$/)\n .optional(),\n })\n .strict();\n\nexport const SupportPassportReplaceCardInputSchema = SupportPassportCardMutationInputSchema.extend({\n title: SupportPassportCardTitleSchema,\n statement: z.string().trim().min(1).max(500),\n category: SupportPassportCardCategorySchema,\n reviewBy: IsoTimestampSchema,\n}).strict();\n\nexport type SupportPassportCard = z.infer<typeof SupportPassportCardSchema>;\nexport type SupportPassportCardCategory = z.infer<typeof SupportPassportCardCategorySchema>;\nexport type SupportPassportCardStatus = z.infer<typeof SupportPassportCardStatusSchema>;\nexport type SupportPassportManualDraftInput = z.input<typeof SupportPassportManualDraftInputSchema>;\nexport type SupportPassportCardMutationInput = z.input<typeof SupportPassportCardMutationInputSchema>;\nexport type SupportPassportReplaceCardInput = z.input<typeof SupportPassportReplaceCardInputSchema>;\n\ntype RevisionFields = Omit<SupportPassportCard, \"revision\">;\n\nexport function computeSupportPassportCardRevision(fields: RevisionFields): string {\n const canonicalFields = {\n cardId: fields.cardId,\n category: fields.category,\n reviewBy: fields.reviewBy,\n statement: fields.statement,\n status: fields.status,\n title: fields.title,\n updatedAt: fields.updatedAt,\n };\n return createHash(\"sha256\").update(JSON.stringify(canonicalFields)).digest(\"hex\");\n}\n","import { createHash } from \"node:crypto\";\nimport { lstat } from \"node:fs/promises\";\n\nimport type { OfflineSyncExcludeFile } from \"../offline-sync-file-io.js\";\nimport { stripAttributesSuffix } from \"../structured-attributes.js\";\nimport type { MemoryFile } from \"../types.js\";\nimport {\n type SupportPassportCard,\n SupportPassportCardCategorySchema,\n SupportPassportCardSchema,\n SupportPassportCardStatusSchema,\n SupportPassportMemoryIdSchema,\n SupportPassportNamespaceSchema,\n SupportPassportSourceMemoryIdSchema,\n computeSupportPassportCardRevision,\n} from \"./contracts.js\";\n\nexport const SUPPORT_PASSPORT_CARD_TAG = \"support-passport-card\";\nexport const SUPPORT_PASSPORT_AUDIT_TAG = \"support-passport-audit\";\n\nexport function isSupportPassportPrivateMemory(memory: {\n frontmatter: {\n tags?: readonly string[];\n structuredAttributes?: Readonly<Record<string, string>>;\n };\n}): boolean {\n const tags = memory.frontmatter.tags;\n if (tags?.includes(SUPPORT_PASSPORT_CARD_TAG) === true || tags?.includes(SUPPORT_PASSPORT_AUDIT_TAG) === true) {\n return true;\n }\n return Object.keys(memory.frontmatter.structuredAttributes ?? {})\n .some((key) => key.startsWith(\"support-passport-\"));\n}\n\nexport function excludeSupportPassportPrivateMemories<T extends Pick<MemoryFile, \"frontmatter\">>(\n memories: readonly T[]\n): T[] {\n return memories.filter((memory) => !isSupportPassportPrivateMemory(memory));\n}\n\nexport function createSupportPassportPrivateFileExclusion(storage: {\n readMemoryByPath(filePath: string): Promise<MemoryFile | null>;\n}): OfflineSyncExcludeFile {\n const classifications = new Map<string, { identity: string; excluded: Promise<boolean> }>();\n return async ({ filePath }) => {\n let file: Awaited<ReturnType<typeof lstat>>;\n try {\n file = await lstat(filePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n classifications.delete(filePath);\n return false;\n }\n throw error;\n }\n const identity = `${file.dev}:${file.ino}:${file.size}:${file.mtimeMs}:${file.ctimeMs}`;\n const cached = classifications.get(filePath);\n if (cached?.identity === identity) return await cached.excluded;\n const excluded = storage\n .readMemoryByPath(filePath)\n .then((memory) => (memory ? isSupportPassportPrivateMemory(memory) : false));\n classifications.set(filePath, { identity, excluded });\n try {\n return await excluded;\n } catch (error) {\n if (classifications.get(filePath)?.excluded === excluded) classifications.delete(filePath);\n throw error;\n }\n };\n}\n\nexport const SUPPORT_PASSPORT_ATTRIBUTE_KEYS = Object.freeze({\n namespace: \"support-passport-namespace\",\n namespaceEncoding: \"support-passport-namespace-encoding\",\n owner: \"support-passport-owner\",\n title: \"support-passport-title\",\n category: \"support-passport-category\",\n order: \"support-passport-order\",\n reviewBy: \"support-passport-review-by\",\n sourceMemoryIds: \"support-passport-source-ids\",\n replacesDraftId: \"support-passport-replaces-draft-id\",\n replacedRevision: \"support-passport-replaced-revision\",\n draftReplacementPrepared: \"support-passport-draft-replacement-prepared\",\n replacementComplete: \"support-passport-replacement-complete\",\n generatedBatchId: \"support-passport-generated-batch-id\",\n generatedBatchSize: \"support-passport-generated-batch-size\",\n});\n\nconst SUPPORT_PASSPORT_NAMESPACE_ENCODING = \"base64url-v1\";\nconst SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX = \"support-passport-namespace-\";\nconst SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE = 1_024;\nconst LegacySupportPassportNamespaceSchema = SupportPassportNamespaceSchema.refine(\n (namespace) =>\n !namespace.includes(\"/\") &&\n !namespace.includes(\"\\\\\") &&\n !namespace.includes(\"..\") &&\n !namespace.includes(\"]\") &&\n !namespace.includes(\"\\0\") &&\n !namespace.includes(\"\\n\") &&\n !namespace.includes(\"\\r\")\n);\n\nexport function encodeSupportPassportNamespaceAttributes(namespace: string): Record<string, string> {\n const canonical = SupportPassportNamespaceSchema.parse(namespace);\n const encoded = Buffer.from(canonical, \"utf8\").toString(\"base64url\");\n const chunks = encoded.match(new RegExp(`.{1,${SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE}}`, \"g\")) ?? [];\n const digest = createHash(\"sha256\").update(encoded).digest(\"hex\");\n return Object.fromEntries([\n [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace, chunks[0] ?? \"\"],\n [\n SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespaceEncoding,\n `${SUPPORT_PASSPORT_NAMESPACE_ENCODING}:${chunks.length}:${digest}`,\n ],\n ...chunks.slice(1).map((chunk, index) => [`${SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX}${index + 1}`, chunk]),\n ]);\n}\n\nexport function decodeSupportPassportNamespaceAttributes(attributes: Readonly<Record<string, string>>): string | null {\n const firstChunk = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace];\n const encoding = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespaceEncoding];\n if (encoding === undefined) {\n const legacy = LegacySupportPassportNamespaceSchema.safeParse(firstChunk);\n return legacy.success ? legacy.data : null;\n }\n const match = /^base64url-v1:([1-9]\\d*):([a-f0-9]{64})$/.exec(encoding);\n if (!match || typeof firstChunk !== \"string\") return null;\n const chunkCount = Number(match[1]);\n if (!Number.isSafeInteger(chunkCount)) return null;\n const chunkIndexes = Object.keys(attributes).flatMap((key) => {\n const chunkMatch = /^support-passport-namespace-(\\d+)$/.exec(key);\n return chunkMatch ? [Number(chunkMatch[1])] : [];\n });\n if (\n chunkIndexes.length !== chunkCount - 1 ||\n chunkIndexes.some((index) => !Number.isSafeInteger(index) || index < 1 || index >= chunkCount)\n )\n return null;\n const chunks = [firstChunk];\n for (let index = 1; index < chunkCount; index += 1) {\n const chunk = attributes[`${SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX}${index}`];\n if (typeof chunk !== \"string\" || chunk.length === 0) return null;\n chunks.push(chunk);\n }\n const encoded = chunks.join(\"\");\n if (createHash(\"sha256\").update(encoded).digest(\"hex\") !== match[2]) return null;\n const decoded = Buffer.from(encoded, \"base64url\").toString(\"utf8\");\n if (Buffer.from(decoded, \"utf8\").toString(\"base64url\") !== encoded) return null;\n const namespace = SupportPassportNamespaceSchema.safeParse(decoded);\n return namespace.success ? namespace.data : null;\n}\n\nexport interface StoredSupportPassportCard {\n card: SupportPassportCard;\n memory: MemoryFile;\n order: number;\n sourceMemoryIds: string[];\n namespace: string;\n owner: string;\n replacesDraftId?: string;\n replacedRevision?: string;\n draftReplacementPrepared: boolean;\n generatedBatchId?: string;\n generatedBatchSize?: number;\n}\n\nexport function computeSupportPassportOwnerKey(principal: string): string {\n return createHash(\"sha256\").update(principal).digest(\"hex\");\n}\n\nexport function activeSupportPassportReplacementPredecessorIds(\n cards: readonly StoredSupportPassportCard[],\n): Set<string> {\n return new Set(\n cards\n .filter((item) => item.card.status === \"active\")\n .map((item) => item.memory.frontmatter.supersedes)\n .filter((cardId): cardId is string => typeof cardId === \"string\"),\n );\n}\n\nfunction parseSourceMemoryIds(frontmatter: MemoryFile[\"frontmatter\"]): string[] | null {\n const lineage = frontmatter.lineage;\n const legacyValue = frontmatter.structuredAttributes?.[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.sourceMemoryIds];\n const rawIds = lineage ?? (legacyValue === undefined || legacyValue === \"\" ? [] : legacyValue.split(\",\"));\n if (rawIds.length > 5) return null;\n const normalized: string[] = [];\n for (const rawId of rawIds) {\n const parsed = SupportPassportSourceMemoryIdSchema.safeParse(rawId);\n if (!parsed.success) return null;\n normalized.push(parsed.data);\n }\n if (new Set(normalized).size !== normalized.length) return null;\n return normalized;\n}\n\ninterface SupportPassportCardMetadata {\n fields: Omit<SupportPassportCard, \"revision\" | \"statement\">;\n order: number;\n sourceMemoryIds: string[];\n namespace: string;\n owner: string;\n replacesDraftId?: string;\n replacedRevision?: string;\n draftReplacementPrepared: boolean;\n generatedBatchId?: string;\n generatedBatchSize?: number;\n}\n\nfunction parseSupportPassportCardMetadata(\n memory: Pick<MemoryFile, \"frontmatter\">,\n): SupportPassportCardMetadata | null {\n const frontmatter = memory.frontmatter;\n const attributes = frontmatter.structuredAttributes;\n if (frontmatter.category !== \"preference\") return null;\n if (!frontmatter.tags?.includes(SUPPORT_PASSPORT_CARD_TAG)) return null;\n if (\n !attributes ||\n frontmatter.blockedBy ||\n frontmatter.archivedAt ||\n frontmatter.supersededBy\n )\n return null;\n\n const category = SupportPassportCardCategorySchema.safeParse(\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category],\n );\n const status = SupportPassportCardStatusSchema.safeParse(frontmatter.status);\n const rawOrder = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.order];\n const order = Number(rawOrder);\n const sourceMemoryIds = parseSourceMemoryIds(frontmatter);\n const namespace = decodeSupportPassportNamespaceAttributes(attributes);\n const owner = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner];\n let replacesDraftId: string | undefined;\n const rawReplacesDraftId =\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId];\n if (rawReplacesDraftId !== undefined) {\n const parsedReplacesDraftId =\n SupportPassportMemoryIdSchema.safeParse(rawReplacesDraftId);\n if (!parsedReplacesDraftId.success) return null;\n replacesDraftId = parsedReplacesDraftId.data;\n }\n let replacedRevision: string | undefined;\n const rawReplacedRevision =\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacedRevision];\n if (rawReplacedRevision !== undefined) {\n if (!/^[a-f0-9]{64}$/.test(rawReplacedRevision)) return null;\n replacedRevision = rawReplacedRevision;\n }\n const generatedBatchId = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchId];\n const rawGeneratedBatchSize = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchSize];\n let generatedBatchSize: number | undefined;\n if (generatedBatchId !== undefined) {\n 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)) {\n return null;\n }\n if (\n typeof rawGeneratedBatchSize !== \"string\" ||\n !/^[1-8]$/.test(rawGeneratedBatchSize)\n ) {\n return null;\n }\n generatedBatchSize = Number(rawGeneratedBatchSize);\n } else if (rawGeneratedBatchSize !== undefined) {\n return null;\n }\n if (\n !category.success ||\n !status.success ||\n status.data === \"superseded\" ||\n typeof rawOrder !== \"string\" ||\n !/^(?:0|[1-9]\\d*)$/.test(rawOrder) ||\n !Number.isSafeInteger(order) ||\n namespace === null ||\n typeof owner !== \"string\" ||\n !/^[a-f0-9]{64}$/.test(owner) ||\n !sourceMemoryIds\n )\n return null;\n const fields = SupportPassportCardSchema.omit({\n revision: true,\n statement: true,\n }).safeParse({\n cardId: frontmatter.id,\n title: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.title],\n category: category.data,\n status: status.data,\n updatedAt: frontmatter.updated,\n reviewBy: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.reviewBy],\n });\n if (!fields.success) return null;\n return {\n fields: fields.data,\n order,\n sourceMemoryIds,\n namespace,\n owner,\n replacesDraftId,\n replacedRevision,\n draftReplacementPrepared:\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared] ===\n \"true\",\n generatedBatchId,\n generatedBatchSize,\n };\n}\n\nexport function hasLiveSupportPassportCard(memory: Pick<MemoryFile, \"frontmatter\" | \"content\">): boolean {\n const metadata = parseSupportPassportCardMetadata(memory);\n if (metadata?.fields.status !== \"active\" && metadata?.fields.status !== \"pending_review\") return false;\n return SupportPassportCardSchema.omit({ revision: true }).safeParse({\n ...metadata.fields,\n statement: stripAttributesSuffix(memory.content),\n }).success;\n}\n\nexport function projectSupportPassportCard(\n memory: MemoryFile,\n): StoredSupportPassportCard | null {\n const metadata = parseSupportPassportCardMetadata(memory);\n if (!metadata) return null;\n\n const fields = {\n ...metadata.fields,\n statement: stripAttributesSuffix(memory.content),\n };\n const normalized = SupportPassportCardSchema.omit({\n revision: true,\n }).safeParse(fields);\n if (!normalized.success) return null;\n const parsed = SupportPassportCardSchema.safeParse({\n ...normalized.data,\n revision: computeSupportPassportCardRevision(normalized.data),\n });\n if (!parsed.success) return null;\n return {\n card: parsed.data,\n memory,\n order: metadata.order,\n sourceMemoryIds: metadata.sourceMemoryIds,\n namespace: metadata.namespace,\n owner: metadata.owner,\n replacesDraftId: metadata.replacesDraftId,\n replacedRevision: metadata.replacedRevision,\n draftReplacementPrepared: metadata.draftReplacementPrepared,\n generatedBatchId: metadata.generatedBatchId,\n generatedBatchSize: metadata.generatedBatchSize,\n };\n}\n"],"mappings":"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","names":["createHash","createHash"]}
1
+ {"version":3,"sources":["../src/support-passport/contracts.ts","../src/support-passport/card-projection.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\n\nimport { normalizeNamespaceIdentity } from \"../namespaces/identity.js\";\nimport { parseIsoOffsetTimestamp } from \"../utils/iso-timestamp.js\";\n\nexport const SUPPORT_PASSPORT_CARD_CATEGORIES = [\n \"communication\",\n \"environment\",\n \"transitions\",\n \"sensory\",\n \"regulation\",\n \"interests\",\n \"other\",\n] as const;\n\nexport const SUPPORT_PASSPORT_CARD_STATUSES = [\n \"pending_review\",\n \"active\",\n \"rejected\",\n \"superseded\",\n \"archived\",\n] as const;\n\nexport const SupportPassportCardCategorySchema = z.enum(SUPPORT_PASSPORT_CARD_CATEGORIES);\nexport const SupportPassportCardStatusSchema = z.enum(SUPPORT_PASSPORT_CARD_STATUSES);\nexport const SupportPassportCardTitleSchema = z\n .string()\n .trim()\n .min(1)\n .max(80)\n .refine((title) => !title.includes(\"]\") && !title.includes(\"\\n\") && !title.includes(\"\\r\"), {\n message: \"card titles cannot contain closing brackets or line breaks\",\n });\n\nconst IsoTimestampSchema = z\n .string()\n .datetime({ offset: true })\n .refine((value) => parseIsoOffsetTimestamp(value) !== null, {\n message: \"timestamps must be valid ISO 8601 values\",\n });\nexport const SupportPassportNamespaceSchema = z\n .string()\n .min(1)\n .refine((namespace) => namespace === normalizeNamespaceIdentity(namespace), {\n message: \"namespaces must be canonical\",\n });\nexport const SupportPassportMemoryIdSchema = z\n .string()\n .trim()\n .min(1)\n .max(128)\n .regex(/^[A-Za-z0-9._:-]+$/);\nexport const SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH = 512;\nexport const SupportPassportSourceMemoryIdSchema = z\n .string()\n .trim()\n .min(1)\n .max(SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH);\n\nexport const SupportPassportCardSchema = z\n .object({\n cardId: SupportPassportMemoryIdSchema,\n title: SupportPassportCardTitleSchema,\n statement: z.string().trim().min(1).max(500),\n category: SupportPassportCardCategorySchema,\n status: SupportPassportCardStatusSchema,\n updatedAt: IsoTimestampSchema,\n reviewBy: IsoTimestampSchema,\n revision: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict();\n\nexport const SupportPassportCardListSchema = z\n .array(SupportPassportCardSchema)\n .max(100)\n .superRefine((cards, ctx) => {\n const seen = new Set<string>();\n for (const [index, card] of cards.entries()) {\n if (seen.has(card.cardId)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"card IDs must be unique\",\n path: [index, \"cardId\"],\n });\n }\n seen.add(card.cardId);\n }\n });\n\nexport const SupportPassportListCardsInputSchema = z\n .object({\n principal: z.string().trim().min(1).max(512),\n })\n .strict();\n\nexport const SupportPassportManualDraftInputSchema = z\n .object({\n principal: z.string().trim().min(1).max(512),\n title: SupportPassportCardTitleSchema,\n statement: z.string().trim().min(1).max(500),\n category: SupportPassportCardCategorySchema,\n reviewBy: IsoTimestampSchema,\n })\n .strict();\n\nexport const SupportPassportCardMutationInputSchema = z\n .object({\n principal: z.string().trim().min(1).max(512),\n cardId: SupportPassportMemoryIdSchema,\n expectedRevision: z.string().regex(/^[a-f0-9]{64}$/),\n reasonCode: z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(/^[a-z0-9-]+$/)\n .optional(),\n })\n .strict();\n\nexport const SupportPassportReplaceCardInputSchema = SupportPassportCardMutationInputSchema.extend({\n title: SupportPassportCardTitleSchema,\n statement: z.string().trim().min(1).max(500),\n category: SupportPassportCardCategorySchema,\n reviewBy: IsoTimestampSchema,\n}).strict();\n\nexport type SupportPassportCard = z.infer<typeof SupportPassportCardSchema>;\nexport type SupportPassportCardCategory = z.infer<typeof SupportPassportCardCategorySchema>;\nexport type SupportPassportCardStatus = z.infer<typeof SupportPassportCardStatusSchema>;\nexport type SupportPassportManualDraftInput = z.input<typeof SupportPassportManualDraftInputSchema>;\nexport type SupportPassportCardMutationInput = z.input<typeof SupportPassportCardMutationInputSchema>;\nexport type SupportPassportReplaceCardInput = z.input<typeof SupportPassportReplaceCardInputSchema>;\n\ntype RevisionFields = Omit<SupportPassportCard, \"revision\">;\n\nexport function computeSupportPassportCardRevision(fields: RevisionFields): string {\n const canonicalFields = {\n cardId: fields.cardId,\n category: fields.category,\n reviewBy: fields.reviewBy,\n statement: fields.statement,\n status: fields.status,\n title: fields.title,\n updatedAt: fields.updatedAt,\n };\n return createHash(\"sha256\").update(JSON.stringify(canonicalFields)).digest(\"hex\");\n}\n","import { createHash } from \"node:crypto\";\nimport { lstat } from \"node:fs/promises\";\n\nimport type { OfflineSyncExcludeFile } from \"../offline-sync-file-io.js\";\nimport { stripAttributesSuffix } from \"../structured-attributes.js\";\nimport type { MemoryFile } from \"../types.js\";\nimport {\n type SupportPassportCard,\n SupportPassportCardCategorySchema,\n SupportPassportCardSchema,\n SupportPassportCardStatusSchema,\n SupportPassportMemoryIdSchema,\n SupportPassportNamespaceSchema,\n SupportPassportSourceMemoryIdSchema,\n computeSupportPassportCardRevision,\n} from \"./contracts.js\";\n\nexport const SUPPORT_PASSPORT_CARD_TAG = \"support-passport-card\";\nexport const SUPPORT_PASSPORT_AUDIT_TAG = \"support-passport-audit\";\n\nexport function isSupportPassportPrivateMemory(memory: {\n frontmatter: {\n tags?: readonly string[];\n structuredAttributes?: Readonly<Record<string, string>>;\n };\n}): boolean {\n const tags = memory.frontmatter.tags;\n if (tags?.includes(SUPPORT_PASSPORT_CARD_TAG) === true || tags?.includes(SUPPORT_PASSPORT_AUDIT_TAG) === true) {\n return true;\n }\n return Object.keys(memory.frontmatter.structuredAttributes ?? {})\n .some((key) => key.startsWith(\"support-passport-\"));\n}\n\nexport function excludeSupportPassportPrivateMemories<T extends Pick<MemoryFile, \"frontmatter\">>(\n memories: readonly T[]\n): T[] {\n return memories.filter((memory) => !isSupportPassportPrivateMemory(memory));\n}\n\nexport function createSupportPassportPrivateFileExclusion(storage: {\n readMemoryByPath(filePath: string): Promise<MemoryFile | null>;\n}): OfflineSyncExcludeFile {\n const classifications = new Map<string, { identity: string; excluded: Promise<boolean> }>();\n return async ({ filePath }) => {\n let file: Awaited<ReturnType<typeof lstat>>;\n try {\n file = await lstat(filePath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n classifications.delete(filePath);\n return false;\n }\n throw error;\n }\n const identity = `${file.dev}:${file.ino}:${file.size}:${file.mtimeMs}:${file.ctimeMs}`;\n const cached = classifications.get(filePath);\n if (cached?.identity === identity) return await cached.excluded;\n const excluded = storage\n .readMemoryByPath(filePath)\n .then((memory) => (memory ? isSupportPassportPrivateMemory(memory) : false));\n classifications.set(filePath, { identity, excluded });\n try {\n return await excluded;\n } catch (error) {\n if (classifications.get(filePath)?.excluded === excluded) classifications.delete(filePath);\n throw error;\n }\n };\n}\n\nexport const SUPPORT_PASSPORT_ATTRIBUTE_KEYS = Object.freeze({\n namespace: \"support-passport-namespace\",\n namespaceEncoding: \"support-passport-namespace-encoding\",\n owner: \"support-passport-owner\",\n title: \"support-passport-title\",\n category: \"support-passport-category\",\n order: \"support-passport-order\",\n reviewBy: \"support-passport-review-by\",\n sourceMemoryIds: \"support-passport-source-ids\",\n replacesDraftId: \"support-passport-replaces-draft-id\",\n replacedRevision: \"support-passport-replaced-revision\",\n draftReplacementPrepared: \"support-passport-draft-replacement-prepared\",\n replacementComplete: \"support-passport-replacement-complete\",\n generatedBatchId: \"support-passport-generated-batch-id\",\n generatedBatchSize: \"support-passport-generated-batch-size\",\n});\n\nconst SUPPORT_PASSPORT_NAMESPACE_ENCODING = \"base64url-v1\";\nconst SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX = \"support-passport-namespace-\";\nconst SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE = 1_024;\nconst LegacySupportPassportNamespaceSchema = SupportPassportNamespaceSchema.refine(\n (namespace) =>\n !namespace.includes(\"/\") &&\n !namespace.includes(\"\\\\\") &&\n !namespace.includes(\"..\") &&\n !namespace.includes(\"]\") &&\n !namespace.includes(\"\\0\") &&\n !namespace.includes(\"\\n\") &&\n !namespace.includes(\"\\r\")\n);\n\nexport function encodeSupportPassportNamespaceAttributes(namespace: string): Record<string, string> {\n const canonical = SupportPassportNamespaceSchema.parse(namespace);\n const encoded = Buffer.from(canonical, \"utf8\").toString(\"base64url\");\n const chunks = encoded.match(new RegExp(`.{1,${SUPPORT_PASSPORT_NAMESPACE_CHUNK_SIZE}}`, \"g\")) ?? [];\n const digest = createHash(\"sha256\").update(encoded).digest(\"hex\");\n return Object.fromEntries([\n [SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace, chunks[0] ?? \"\"],\n [\n SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespaceEncoding,\n `${SUPPORT_PASSPORT_NAMESPACE_ENCODING}:${chunks.length}:${digest}`,\n ],\n ...chunks.slice(1).map((chunk, index) => [`${SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX}${index + 1}`, chunk]),\n ]);\n}\n\nexport function decodeSupportPassportNamespaceAttributes(attributes: Readonly<Record<string, string>>): string | null {\n const firstChunk = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespace];\n const encoding = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.namespaceEncoding];\n if (encoding === undefined) {\n const legacy = LegacySupportPassportNamespaceSchema.safeParse(firstChunk);\n return legacy.success ? legacy.data : null;\n }\n const match = /^base64url-v1:([1-9]\\d*):([a-f0-9]{64})$/.exec(encoding);\n if (!match || typeof firstChunk !== \"string\") return null;\n const chunkCount = Number(match[1]);\n if (!Number.isSafeInteger(chunkCount)) return null;\n const chunkIndexes = Object.keys(attributes).flatMap((key) => {\n const chunkMatch = /^support-passport-namespace-(\\d+)$/.exec(key);\n return chunkMatch ? [Number(chunkMatch[1])] : [];\n });\n if (\n chunkIndexes.length !== chunkCount - 1 ||\n chunkIndexes.some((index) => !Number.isSafeInteger(index) || index < 1 || index >= chunkCount)\n )\n return null;\n const chunks = [firstChunk];\n for (let index = 1; index < chunkCount; index += 1) {\n const chunk = attributes[`${SUPPORT_PASSPORT_NAMESPACE_CHUNK_PREFIX}${index}`];\n if (typeof chunk !== \"string\" || chunk.length === 0) return null;\n chunks.push(chunk);\n }\n const encoded = chunks.join(\"\");\n if (createHash(\"sha256\").update(encoded).digest(\"hex\") !== match[2]) return null;\n const decoded = Buffer.from(encoded, \"base64url\").toString(\"utf8\");\n if (Buffer.from(decoded, \"utf8\").toString(\"base64url\") !== encoded) return null;\n const namespace = SupportPassportNamespaceSchema.safeParse(decoded);\n return namespace.success ? namespace.data : null;\n}\n\nexport interface StoredSupportPassportCard {\n card: SupportPassportCard;\n memory: MemoryFile;\n order: number;\n sourceMemoryIds: string[];\n namespace: string;\n owner: string;\n replacesDraftId?: string;\n replacedRevision?: string;\n draftReplacementPrepared: boolean;\n generatedBatchId?: string;\n generatedBatchSize?: number;\n}\n\nexport function computeSupportPassportOwnerKey(principal: string): string {\n return createHash(\"sha256\").update(principal).digest(\"hex\");\n}\n\nexport function activeSupportPassportReplacementPredecessorIds(\n cards: readonly StoredSupportPassportCard[],\n): Set<string> {\n return new Set(\n cards\n .filter((item) => item.card.status === \"active\")\n .map((item) => item.memory.frontmatter.supersedes)\n .filter((cardId): cardId is string => typeof cardId === \"string\"),\n );\n}\n\nfunction parseSourceMemoryIds(frontmatter: MemoryFile[\"frontmatter\"]): string[] | null {\n const lineage = frontmatter.lineage;\n const legacyValue = frontmatter.structuredAttributes?.[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.sourceMemoryIds];\n const rawIds = lineage ?? (legacyValue === undefined || legacyValue === \"\" ? [] : legacyValue.split(\",\"));\n if (rawIds.length > 5) return null;\n const normalized: string[] = [];\n for (const rawId of rawIds) {\n const parsed = SupportPassportSourceMemoryIdSchema.safeParse(rawId);\n if (!parsed.success) return null;\n normalized.push(parsed.data);\n }\n if (new Set(normalized).size !== normalized.length) return null;\n return normalized;\n}\n\ninterface SupportPassportCardMetadata {\n fields: Omit<SupportPassportCard, \"revision\" | \"statement\">;\n order: number;\n sourceMemoryIds: string[];\n namespace: string;\n owner: string;\n replacesDraftId?: string;\n replacedRevision?: string;\n draftReplacementPrepared: boolean;\n generatedBatchId?: string;\n generatedBatchSize?: number;\n}\n\nfunction parseSupportPassportCardMetadata(\n memory: Pick<MemoryFile, \"frontmatter\">,\n): SupportPassportCardMetadata | null {\n const frontmatter = memory.frontmatter;\n const attributes = frontmatter.structuredAttributes;\n if (frontmatter.category !== \"preference\") return null;\n if (!frontmatter.tags?.includes(SUPPORT_PASSPORT_CARD_TAG)) return null;\n if (\n !attributes ||\n frontmatter.blockedBy ||\n frontmatter.archivedAt ||\n frontmatter.supersededBy\n )\n return null;\n\n const category = SupportPassportCardCategorySchema.safeParse(\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category],\n );\n const status = SupportPassportCardStatusSchema.safeParse(frontmatter.status);\n const rawOrder = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.order];\n const order = Number(rawOrder);\n const sourceMemoryIds = parseSourceMemoryIds(frontmatter);\n const namespace = decodeSupportPassportNamespaceAttributes(attributes);\n const owner = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner];\n let replacesDraftId: string | undefined;\n const rawReplacesDraftId =\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId];\n if (rawReplacesDraftId !== undefined) {\n const parsedReplacesDraftId =\n SupportPassportMemoryIdSchema.safeParse(rawReplacesDraftId);\n if (!parsedReplacesDraftId.success) return null;\n replacesDraftId = parsedReplacesDraftId.data;\n }\n let replacedRevision: string | undefined;\n const rawReplacedRevision =\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacedRevision];\n if (rawReplacedRevision !== undefined) {\n if (!/^[a-f0-9]{64}$/.test(rawReplacedRevision)) return null;\n replacedRevision = rawReplacedRevision;\n }\n const generatedBatchId = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchId];\n const rawGeneratedBatchSize = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.generatedBatchSize];\n let generatedBatchSize: number | undefined;\n if (generatedBatchId !== undefined) {\n 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)) {\n return null;\n }\n if (\n typeof rawGeneratedBatchSize !== \"string\" ||\n !/^[1-8]$/.test(rawGeneratedBatchSize)\n ) {\n return null;\n }\n generatedBatchSize = Number(rawGeneratedBatchSize);\n } else if (rawGeneratedBatchSize !== undefined) {\n return null;\n }\n if (\n !category.success ||\n !status.success ||\n status.data === \"superseded\" ||\n typeof rawOrder !== \"string\" ||\n !/^(?:0|[1-9]\\d*)$/.test(rawOrder) ||\n !Number.isSafeInteger(order) ||\n namespace === null ||\n typeof owner !== \"string\" ||\n !/^[a-f0-9]{64}$/.test(owner) ||\n !sourceMemoryIds\n )\n return null;\n const fields = SupportPassportCardSchema.omit({\n revision: true,\n statement: true,\n }).safeParse({\n cardId: frontmatter.id,\n title: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.title],\n category: category.data,\n status: status.data,\n updatedAt: frontmatter.updated,\n reviewBy: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.reviewBy],\n });\n if (!fields.success) return null;\n return {\n fields: fields.data,\n order,\n sourceMemoryIds,\n namespace,\n owner,\n replacesDraftId,\n replacedRevision,\n draftReplacementPrepared:\n attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared] ===\n \"true\",\n generatedBatchId,\n generatedBatchSize,\n };\n}\n\nexport function hasLiveSupportPassportCard(memory: Pick<MemoryFile, \"frontmatter\" | \"content\">): boolean {\n const metadata = parseSupportPassportCardMetadata(memory);\n if (metadata?.fields.status !== \"active\" && metadata?.fields.status !== \"pending_review\") return false;\n if (metadata.sourceMemoryIds.length === 0) return false;\n return SupportPassportCardSchema.omit({ revision: true }).safeParse({\n ...metadata.fields,\n statement: stripAttributesSuffix(memory.content),\n }).success;\n}\n\nexport function projectSupportPassportCard(\n memory: MemoryFile,\n): StoredSupportPassportCard | null {\n const metadata = parseSupportPassportCardMetadata(memory);\n if (!metadata) return null;\n\n const fields = {\n ...metadata.fields,\n statement: stripAttributesSuffix(memory.content),\n };\n const normalized = SupportPassportCardSchema.omit({\n revision: true,\n }).safeParse(fields);\n if (!normalized.success) return null;\n const parsed = SupportPassportCardSchema.safeParse({\n ...normalized.data,\n revision: computeSupportPassportCardRevision(normalized.data),\n });\n if (!parsed.success) return null;\n return {\n card: parsed.data,\n memory,\n order: metadata.order,\n sourceMemoryIds: metadata.sourceMemoryIds,\n namespace: metadata.namespace,\n owner: metadata.owner,\n replacesDraftId: metadata.replacesDraftId,\n replacedRevision: metadata.replacedRevision,\n draftReplacementPrepared: metadata.draftReplacementPrepared,\n generatedBatchId: metadata.generatedBatchId,\n generatedBatchSize: metadata.generatedBatchSize,\n };\n}\n"],"mappings":"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","names":["createHash","createHash"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  expandScopeProfileReadNamespaces,
3
3
  resolveScopeProfilePlan
4
- } from "./chunk-KCT36JAW.js";
4
+ } from "./chunk-ESNFSSO4.js";
5
5
  import {
6
6
  canReadNamespace,
7
7
  canWriteNamespace,
@@ -22,7 +22,7 @@ import {
22
22
  combineNamespaces,
23
23
  lcmReadSessionIdsForNamespaces,
24
24
  resolveCodingNamespaceOverlay
25
- } from "./chunk-J2WC5LF4.js";
25
+ } from "./chunk-QBC33MPY.js";
26
26
 
27
27
  // src/scopes/scope-plan.ts
28
28
  import path from "path";
@@ -204,4 +204,4 @@ export {
204
204
  resolveWritableNamespaceValue,
205
205
  resolveScopedWritableNamespaceValue
206
206
  };
207
- //# sourceMappingURL=chunk-Q57GOHLF.js.map
207
+ //# sourceMappingURL=chunk-EGALNSZ4.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  computeCorpusWatermarks,
6
6
  resolveCorpusNamespaceRoots
7
- } from "./chunk-CAMNRAJF.js";
7
+ } from "./chunk-SZMYGDSM.js";
8
8
 
9
9
  // src/operator-doctor-corpus.ts
10
10
  var DIGEST_PREFIX_LENGTH = 12;
@@ -78,4 +78,4 @@ export {
78
78
  corpusWatermarksFromCheck,
79
79
  summarizeCorpusAndReplica
80
80
  };
81
- //# sourceMappingURL=chunk-DPCXDG7G.js.map
81
+ //# sourceMappingURL=chunk-EH65UV2Z.js.map
@@ -15,7 +15,7 @@ import {
15
15
  import {
16
16
  combineNamespaces,
17
17
  stableHash
18
- } from "./chunk-J2WC5LF4.js";
18
+ } from "./chunk-QBC33MPY.js";
19
19
 
20
20
  // src/namespaces/scope-profiles.ts
21
21
  import { createHash } from "crypto";
@@ -338,4 +338,4 @@ export {
338
338
  resolveScopeProfilePlan,
339
339
  expandScopeProfileReadNamespaces
340
340
  };
341
- //# sourceMappingURL=chunk-KCT36JAW.js.map
341
+ //# sourceMappingURL=chunk-ESNFSSO4.js.map
@@ -10,12 +10,12 @@ import {
10
10
  parseEnvelope,
11
11
  seal
12
12
  } from "./chunk-A6XUJE5D.js";
13
- import {
14
- isErrnoCode
15
- } from "./chunk-5UZXUTVO.js";
16
13
  import {
17
14
  RECALL_FALLBACK_DIRS
18
15
  } from "./chunk-VS2IYZRU.js";
16
+ import {
17
+ isErrnoCode
18
+ } from "./chunk-5UZXUTVO.js";
19
19
 
20
20
  // src/secure-store/secure-fs.ts
21
21
  import { createCipheriv, createDecipheriv, randomBytes, randomUUID } from "crypto";
@@ -550,4 +550,4 @@ export {
550
550
  migrateMemoryDirToEncrypted,
551
551
  decryptMemoryDirToPlaintext
552
552
  };
553
- //# sourceMappingURL=chunk-XQ3HXAQH.js.map
553
+ //# sourceMappingURL=chunk-ET2CNMLD.js.map
@@ -296,4 +296,4 @@ async function searchHarmonicRetrieval(options) {
296
296
  export {
297
297
  searchHarmonicRetrieval
298
298
  };
299
- //# sourceMappingURL=chunk-TUHBYJXL.js.map
299
+ //# sourceMappingURL=chunk-EWKVYCFP.js.map
@@ -2,7 +2,7 @@ import {
2
2
  SupportPassportError,
3
3
  SupportPassportOwnerCreateGrantRequestSchema,
4
4
  getOperation
5
- } from "./chunk-OXRRJXPR.js";
5
+ } from "./chunk-MUEGIKKY.js";
6
6
 
7
7
  // src/support-passport/access-http.ts
8
8
  var OWNER_ROOT = "/engram/v1/support-passport";
@@ -137,4 +137,4 @@ export {
137
137
  SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
138
138
  handleSupportPassportOwnerHttp
139
139
  };
140
- //# sourceMappingURL=chunk-NPFUNWNX.js.map
140
+ //# sourceMappingURL=chunk-FFUMTH27.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  resolveDefaultNamespaceRoot,
3
3
  resolveNamespaceStorageRoot
4
- } from "./chunk-F7XUD3PL.js";
4
+ } from "./chunk-S4CDUXQY.js";
5
5
  import {
6
6
  MutationSerializer,
7
7
  withHeldFileLock
@@ -1473,4 +1473,4 @@ export {
1473
1473
  isNamespaceKind,
1474
1474
  NamespaceCatalog
1475
1475
  };
1476
- //# sourceMappingURL=chunk-3PKAS6VL.js.map
1476
+ //# sourceMappingURL=chunk-GAJK3DQ5.js.map
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-NOB2T2FC.js";
12
12
  import {
13
13
  parseConfig
14
- } from "./chunk-7WOWGRAU.js";
14
+ } from "./chunk-AF5H7TKI.js";
15
15
  import {
16
16
  resolveObjectiveStateStoreDir,
17
17
  validateObjectiveStateSnapshot
@@ -268,4 +268,4 @@ export {
268
268
  recordResumeBundle,
269
269
  getResumeBundleStatus
270
270
  };
271
- //# sourceMappingURL=chunk-DA7ITC5Z.js.map
271
+ //# sourceMappingURL=chunk-GBEOUCBB.js.map
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  listMemoryGovernanceRuns,
9
9
  readMemoryGovernanceRunArtifact
10
- } from "./chunk-SEEJOGQX.js";
10
+ } from "./chunk-QBNE55VA.js";
11
11
  import {
12
12
  StorageManager
13
- } from "./chunk-W2BAGGEW.js";
13
+ } from "./chunk-2ITZ74A6.js";
14
14
  import {
15
15
  normalizeProjectionPreview,
16
16
  normalizeProjectionTags
@@ -24,7 +24,7 @@ import {
24
24
  readProjectedGovernanceRows,
25
25
  readProjectedNativeKnowledgeRows,
26
26
  writeProjectionMetaHighWater
27
- } from "./chunk-5ACCD4L7.js";
27
+ } from "./chunk-JRRQ747T.js";
28
28
  import {
29
29
  MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
30
30
  buildLifecycleEventsForMemory,
@@ -41,13 +41,13 @@ import {
41
41
  memoryCurrentSelectExpressions,
42
42
  parseCurrentRow,
43
43
  parseTimelineRows
44
- } from "./chunk-2LWQSV6A.js";
44
+ } from "./chunk-AL3UYZ5N.js";
45
45
  import {
46
46
  openBetterSqlite3
47
47
  } from "./chunk-RL6NEVXT.js";
48
48
  import {
49
49
  isSupportPassportPrivateMemory
50
- } from "./chunk-XDL5CYZN.js";
50
+ } from "./chunk-EEOUMG3J.js";
51
51
  import {
52
52
  log
53
53
  } from "./chunk-3WCASNQZ.js";
@@ -1005,4 +1005,4 @@ export {
1005
1005
  verifyMemoryProjection,
1006
1006
  repairMemoryProjection
1007
1007
  };
1008
- //# sourceMappingURL=chunk-UENKPWCS.js.map
1008
+ //# sourceMappingURL=chunk-H2IRSXZN.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-SOBJ6NEY.js";
4
4
  import {
5
5
  summarizeDisclosureTokens
6
- } from "./chunk-NPIBN2VL.js";
6
+ } from "./chunk-LK4TOYPU.js";
7
7
  import {
8
8
  summarizeRetrievedMemoryProvenance
9
9
  } from "./chunk-I4WBNM3M.js";
@@ -606,4 +606,4 @@ export {
606
606
  renderRecallExplain,
607
607
  parseRecallExplainFormat
608
608
  };
609
- //# sourceMappingURL=chunk-CFVTRUR3.js.map
609
+ //# sourceMappingURL=chunk-H6RSANGQ.js.map
@@ -0,0 +1,98 @@
1
+ import {
2
+ coerceBooleanLike
3
+ } from "./chunk-PQVCH2AE.js";
4
+
5
+ // src/recall-state-view.ts
6
+ var DEFAULT_RECALL_STATE_VIEWS = false;
7
+ var CHANGE_WORDS = ["before", "after", "switch", "switches", "switched", "switching", "change", "changes", "changed", "changing"];
8
+ function parseRecallStateViews(raw) {
9
+ return coerceBooleanLike(raw, "recallStateViews") === true;
10
+ }
11
+ function isChangeOrientedQuery(query) {
12
+ const lower = query.toLowerCase();
13
+ if (lower.includes("when did") || lower.includes("used to")) return true;
14
+ return CHANGE_WORDS.some((word) => {
15
+ const idx = lower.indexOf(word);
16
+ if (idx < 0) return false;
17
+ const before = idx === 0 || !/[a-z0-9]/.test(lower[idx - 1] ?? "");
18
+ const afterIdx = idx + word.length;
19
+ const after = afterIdx >= lower.length || !/[a-z0-9]/.test(lower[afterIdx] ?? "");
20
+ return before && after;
21
+ });
22
+ }
23
+ function shouldWidenSuperseded(successorId, candidateIds) {
24
+ return typeof successorId === "string" && successorId.length > 0 && candidateIds.has(successorId);
25
+ }
26
+ function formatSupersededPrefix(date, successorId) {
27
+ return `[superseded ${date} by ${successorId}]`;
28
+ }
29
+ function resultStateViewId(result) {
30
+ return result.id ?? result.docid ?? "";
31
+ }
32
+ function buildSuccessorMap(results, chains) {
33
+ const byPred = /* @__PURE__ */ new Map();
34
+ for (const chain of chains) {
35
+ if (chain.predecessorId && chain.successorId) {
36
+ byPred.set(chain.predecessorId, chain.successorId);
37
+ }
38
+ }
39
+ for (const result of results) {
40
+ const id = resultStateViewId(result);
41
+ if (id && result.supersededBy) byPred.set(id, result.supersededBy);
42
+ }
43
+ return byPred;
44
+ }
45
+ function labelFor(id, result, byPred, admittedIds) {
46
+ const successorId = result.supersededBy ?? byPred.get(id);
47
+ const isPred = shouldWidenSuperseded(successorId, admittedIds);
48
+ let isSucc = false;
49
+ for (const [predId, succId] of byPred) {
50
+ if (succId === id && admittedIds.has(predId)) {
51
+ isSucc = true;
52
+ break;
53
+ }
54
+ }
55
+ if (isPred && isSucc) return "transition";
56
+ if (isPred) return "historical";
57
+ if (isSucc) return "current";
58
+ return result.status === "superseded" ? "historical" : "current";
59
+ }
60
+ function annotateStateView(results, query, chains, options = {}) {
61
+ const enabled = options.enabled === true;
62
+ if (!enabled || !isChangeOrientedQuery(query)) return results;
63
+ const byPred = buildSuccessorMap(results, chains);
64
+ const candidateIds = /* @__PURE__ */ new Set();
65
+ for (const result of results) {
66
+ const id = resultStateViewId(result);
67
+ if (id) candidateIds.add(id);
68
+ }
69
+ const admitted = [];
70
+ for (const result of results) {
71
+ const id = resultStateViewId(result);
72
+ const successorId = result.supersededBy ?? byPred.get(id);
73
+ const superseded = result.status === "superseded" || Boolean(result.supersededBy) || byPred.has(id);
74
+ if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {
75
+ admitted.push(result);
76
+ }
77
+ }
78
+ const admittedIds = /* @__PURE__ */ new Set();
79
+ for (const result of admitted) {
80
+ const id = resultStateViewId(result);
81
+ if (id) admittedIds.add(id);
82
+ }
83
+ return admitted.map((result) => {
84
+ const id = resultStateViewId(result);
85
+ return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds) };
86
+ });
87
+ }
88
+
89
+ export {
90
+ DEFAULT_RECALL_STATE_VIEWS,
91
+ parseRecallStateViews,
92
+ isChangeOrientedQuery,
93
+ shouldWidenSuperseded,
94
+ formatSupersededPrefix,
95
+ resultStateViewId,
96
+ annotateStateView
97
+ };
98
+ //# sourceMappingURL=chunk-HVAEXYPL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/recall-state-view.ts"],"sourcesContent":["/**\n * Recall state views (issue #1952).\n *\n * Config key: `recallStateViews` (default false). When false, annotateStateView\n * is identity: same array reference, no `stateLabel`. config.ts is at its\n * fileSizeGrandfather ceiling, so parseConfig wiring waits for a later PR.\n * Call `parseRecallStateViews` at the recall seam when that lands.\n *\n * Change-intent morphology lives here (do not grow intent.ts). A superseded\n * memory is admitted only when its successor is also in the candidate set.\n */\nimport { coerceBooleanLike } from \"./connectors/coerce.js\";\n\nexport type StateLabel = \"current\" | \"historical\" | \"transition\";\n\nexport interface StateViewChain {\n predecessorId: string;\n successorId: string;\n supersededAt?: string;\n}\n\nexport interface StateViewResult {\n id?: string;\n docid?: string;\n status?: string;\n supersededBy?: string;\n supersededAt?: string;\n stateLabel?: StateLabel;\n}\n\nexport const DEFAULT_RECALL_STATE_VIEWS = false;\n\nconst CHANGE_WORDS = [\"before\", \"after\", \"switch\", \"switches\", \"switched\", \"switching\", \"change\", \"changes\", \"changed\", \"changing\"];\n\nexport function parseRecallStateViews(raw: unknown): boolean {\n return coerceBooleanLike(raw, \"recallStateViews\") === true;\n}\n\nexport function isChangeOrientedQuery(query: string): boolean {\n const lower = query.toLowerCase();\n if (lower.includes(\"when did\") || lower.includes(\"used to\")) return true;\n return CHANGE_WORDS.some((word) => {\n const idx = lower.indexOf(word);\n if (idx < 0) return false;\n const before = idx === 0 || !/[a-z0-9]/.test(lower[idx - 1] ?? \"\");\n const afterIdx = idx + word.length;\n const after = afterIdx >= lower.length || !/[a-z0-9]/.test(lower[afterIdx] ?? \"\");\n return before && after;\n });\n}\n\nexport function shouldWidenSuperseded(\n successorId: string | undefined,\n candidateIds: ReadonlySet<string>,\n): boolean {\n return typeof successorId === \"string\" && successorId.length > 0 && candidateIds.has(successorId);\n}\n\nexport function formatSupersededPrefix(date: string, successorId: string): string {\n return `[superseded ${date} by ${successorId}]`;\n}\n\nexport function resultStateViewId(result: StateViewResult): string {\n return result.id ?? result.docid ?? \"\";\n}\n\nfunction buildSuccessorMap(results: readonly StateViewResult[], chains: readonly StateViewChain[]): Map<string, string> {\n const byPred = new Map<string, string>();\n for (const chain of chains) {\n if (chain.predecessorId && chain.successorId) {\n byPred.set(chain.predecessorId, chain.successorId);\n }\n }\n for (const result of results) {\n const id = resultStateViewId(result);\n if (id && result.supersededBy) byPred.set(id, result.supersededBy);\n }\n return byPred;\n}\n\nfunction labelFor(\n id: string,\n result: StateViewResult,\n byPred: Map<string, string>,\n admittedIds: ReadonlySet<string>,\n): StateLabel {\n const successorId = result.supersededBy ?? byPred.get(id);\n const isPred = shouldWidenSuperseded(successorId, admittedIds);\n let isSucc = false;\n for (const [predId, succId] of byPred) {\n if (succId === id && admittedIds.has(predId)) {\n isSucc = true;\n break;\n }\n }\n if (isPred && isSucc) return \"transition\";\n if (isPred) return \"historical\";\n if (isSucc) return \"current\";\n return result.status === \"superseded\" ? \"historical\" : \"current\";\n}\n\nexport function annotateStateView<T extends StateViewResult>(\n results: T[],\n query: string,\n chains: readonly StateViewChain[],\n options: { enabled?: boolean } = {},\n): T[] {\n const enabled = options.enabled === true;\n if (!enabled || !isChangeOrientedQuery(query)) return results;\n\n const byPred = buildSuccessorMap(results, chains);\n const candidateIds = new Set<string>();\n for (const result of results) {\n const id = resultStateViewId(result);\n if (id) candidateIds.add(id);\n }\n\n const admitted: T[] = [];\n for (const result of results) {\n const id = resultStateViewId(result);\n const successorId = result.supersededBy ?? byPred.get(id);\n const superseded = result.status === \"superseded\" || Boolean(result.supersededBy) || byPred.has(id);\n if (!superseded || shouldWidenSuperseded(successorId, candidateIds)) {\n admitted.push(result);\n }\n }\n\n const admittedIds = new Set<string>();\n for (const result of admitted) {\n const id = resultStateViewId(result);\n if (id) admittedIds.add(id);\n }\n\n return admitted.map((result) => {\n const id = resultStateViewId(result);\n return { ...result, stateLabel: labelFor(id, result, byPred, admittedIds) };\n });\n}\n"],"mappings":"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","names":[]}
@@ -16,7 +16,7 @@ import {
16
16
  FallbackLlmClient,
17
17
  fallbackLlmRuntimeContextFromConfig,
18
18
  gatewayTaskChainOptions
19
- } from "./chunk-UW5NPZJ2.js";
19
+ } from "./chunk-JALOAKSZ.js";
20
20
  import {
21
21
  extractJsonCandidates
22
22
  } from "./chunk-RGMVMVMF.js";
@@ -690,4 +690,4 @@ ${truncatedConversation}`;
690
690
  export {
691
691
  HourlySummarizer
692
692
  };
693
- //# sourceMappingURL=chunk-EUYWQ7TS.js.map
693
+ //# sourceMappingURL=chunk-IEZ6CGTW.js.map
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-VI637ILW.js";
5
5
  import {
6
6
  composeSalvagedEnvelope
7
- } from "./chunk-AHPIFKNG.js";
7
+ } from "./chunk-N4F7ZSSG.js";
8
8
  import {
9
9
  StorageManager
10
- } from "./chunk-W2BAGGEW.js";
10
+ } from "./chunk-2ITZ74A6.js";
11
11
  import {
12
12
  parseContinuityImprovementLoops
13
13
  } from "./chunk-LDXUBPMO.js";
@@ -1283,4 +1283,4 @@ export {
1283
1283
  defaultTierMigrationCycleBudget,
1284
1284
  CompoundingEngine
1285
1285
  };
1286
- //# sourceMappingURL=chunk-3SZD4CYO.js.map
1286
+ //# sourceMappingURL=chunk-IGZCAHFL.js.map
@@ -5,7 +5,7 @@ import {
5
5
  } from "./chunk-5JMAGU26.js";
6
6
  import {
7
7
  runPostConsolidationMaterialize
8
- } from "./chunk-MDD2RINF.js";
8
+ } from "./chunk-YWPLOJ7T.js";
9
9
  import {
10
10
  isSemanticConsolidationLlmOperator
11
11
  } from "./chunk-G7D6GZ5J.js";
@@ -220,4 +220,4 @@ export {
220
220
  buildExtensionsBlockForConsolidation,
221
221
  materializeAfterSemanticConsolidation
222
222
  };
223
- //# sourceMappingURL=chunk-UPFNQJC7.js.map
223
+ //# sourceMappingURL=chunk-INUBU6I5.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createVersion
3
- } from "./chunk-UFKPQBXH.js";
3
+ } from "./chunk-U62OK7BB.js";
4
4
  import {
5
5
  bumpMemoryCorpusVersionForDir
6
6
  } from "./chunk-XCB6QDL6.js";
@@ -12,7 +12,7 @@ import {
12
12
  repairContentAfterJournalMove,
13
13
  requestEntityCanonicalIdReconcile,
14
14
  withRawEntityPageMutation
15
- } from "./chunk-ZVPVTPGI.js";
15
+ } from "./chunk-NNZFPYYX.js";
16
16
  import {
17
17
  parseExportBundle
18
18
  } from "./chunk-WEHSQBFR.js";
@@ -294,4 +294,4 @@ function mintForkId(capsuleId, originalId, now) {
294
294
  export {
295
295
  importCapsule
296
296
  };
297
- //# sourceMappingURL=chunk-PMVPCZJZ.js.map
297
+ //# sourceMappingURL=chunk-J2R275FN.js.map
@@ -41,6 +41,16 @@ function fallbackLlmRuntimeContextFromConfig(config, overrides = {}) {
41
41
  ...overrides
42
42
  };
43
43
  }
44
+ function isUnsupportedJsonSchemaError(error) {
45
+ const message = error instanceof Error ? error.message : String(error);
46
+ if (!/\b(?:400|404|422)\b/.test(message)) {
47
+ return false;
48
+ }
49
+ if (/(?:response[_ ]?format|json[_ ]?schema|structured[_ ]?output)/i.test(message)) {
50
+ return true;
51
+ }
52
+ return /\bunsupported\b[\s\S]{0,40}\b(?:schema|format)\b/i.test(message);
53
+ }
44
54
  var PROVIDER_ALIASES = {
45
55
  "openai-codex": ["codex"],
46
56
  codex: ["openai-codex"],
@@ -97,7 +107,8 @@ var FallbackLlmClient = class {
97
107
  log.warn("fallback LLM: no models configured in gateway");
98
108
  return null;
99
109
  }
100
- const runChain = async (runOptions) => {
110
+ const runChain = async (initialOptions) => {
111
+ let runOptions = initialOptions;
101
112
  let lastRejectedResponse = null;
102
113
  for (let i = 0; i < models.length; i++) {
103
114
  if (runOptions.signal?.aborted) {
@@ -127,6 +138,37 @@ var FallbackLlmClient = class {
127
138
  if (runOptions.signal?.aborted) {
128
139
  throw abortReason(runOptions.signal);
129
140
  }
141
+ if ((runOptions.jsonSchema || runOptions.responsesJsonSchema) && isUnsupportedJsonSchemaError(err)) {
142
+ log.debug(`fallback LLM: ${model.modelString} rejected native JSON schema; retrying without it`);
143
+ runOptions = {
144
+ ...runOptions,
145
+ jsonSchema: void 0,
146
+ responsesJsonSchema: void 0
147
+ };
148
+ try {
149
+ const result = await this.tryModel(model, messages, runOptions);
150
+ if (result) {
151
+ const response = {
152
+ content: result.content,
153
+ modelUsed: model.modelString,
154
+ usage: result.usage
155
+ };
156
+ if (!runOptions.acceptResponse || runOptions.acceptResponse(response)) {
157
+ return response;
158
+ }
159
+ lastRejectedResponse = response;
160
+ log.debug(`fallback LLM: ${model.modelString} unstructured retry output rejected by acceptResponse, trying next model...`);
161
+ continue;
162
+ }
163
+ } catch (retryError) {
164
+ if (runOptions.signal?.aborted) throw abortReason(runOptions.signal);
165
+ const retryErrorMsg = runOptions.redactProviderErrors ? "provider error details redacted" : retryError instanceof Error ? retryError.message : String(retryError);
166
+ log.debug(
167
+ `fallback LLM: ${model.modelString} unstructured retry failed (${retryErrorMsg})`
168
+ );
169
+ }
170
+ continue;
171
+ }
130
172
  const errorMsg = runOptions.redactProviderErrors ? "provider error details redacted" : err instanceof Error ? err.message : String(err);
131
173
  log.debug(`fallback LLM: ${model.modelString} failed (${errorMsg}), trying next...`);
132
174
  }
@@ -498,7 +540,17 @@ var FallbackLlmClient = class {
498
540
  }),
499
541
  ...buildChatCompletionTokenLimit(modelId, options.maxTokens ?? 4096, {
500
542
  assumeOpenAI
501
- })
543
+ }),
544
+ ...options.jsonSchema ? {
545
+ response_format: {
546
+ type: "json_schema",
547
+ json_schema: {
548
+ name: options.jsonSchema.name,
549
+ strict: options.jsonSchema.strict ?? false,
550
+ schema: options.jsonSchema.schema
551
+ }
552
+ }
553
+ } : {}
502
554
  };
503
555
  const response = await fetch(url, {
504
556
  method: "POST",
@@ -603,13 +655,13 @@ var FallbackLlmClient = class {
603
655
  assumeOpenAI: shouldAssumeOpenAiChatCompletions(config.baseUrl)
604
656
  }),
605
657
  ...options.store === void 0 ? {} : { store: options.store },
606
- ...options.responsesJsonSchema ? {
658
+ ...options.jsonSchema || options.responsesJsonSchema ? {
607
659
  text: {
608
660
  format: {
609
661
  type: "json_schema",
610
- name: options.responsesJsonSchema.name,
611
- strict: true,
612
- schema: options.responsesJsonSchema.schema
662
+ name: (options.jsonSchema ?? options.responsesJsonSchema).name,
663
+ strict: options.jsonSchema?.strict ?? (options.responsesJsonSchema ? true : false),
664
+ schema: (options.jsonSchema ?? options.responsesJsonSchema).schema
613
665
  }
614
666
  }
615
667
  } : {}
@@ -736,4 +788,4 @@ export {
736
788
  fallbackLlmRuntimeContextFromConfig,
737
789
  FallbackLlmClient
738
790
  };
739
- //# sourceMappingURL=chunk-UW5NPZJ2.js.map
791
+ //# sourceMappingURL=chunk-JALOAKSZ.js.map