@remnic/core 10.0.91 → 10.0.93

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 (522) hide show
  1. package/dist/access-admin-ops-surface.js +334 -61
  2. package/dist/access-authorization-probe.js +2 -283
  3. package/dist/access-boundary.d.ts +1 -1
  4. package/dist/access-boundary.d.ts.map +1 -1
  5. package/dist/access-boundary.js +1 -282
  6. package/dist/access-cli.js +288 -304
  7. package/dist/access-cli.js.map +1 -1
  8. package/dist/access-coding-context-resolution.js +3 -3
  9. package/dist/access-extraction-force-flush.js +334 -61
  10. package/dist/access-http-briefing.js +334 -62
  11. package/dist/access-http-query.js +334 -63
  12. package/dist/access-http.js +332 -114
  13. package/dist/access-identity-continuity-surface.js +334 -61
  14. package/dist/access-lcm-surface.js +334 -61
  15. package/dist/access-mcp-frames.d.ts +20 -6
  16. package/dist/access-mcp-frames.d.ts.map +1 -1
  17. package/dist/access-mcp-frames.js +1 -1
  18. package/dist/access-mcp.d.ts +5 -0
  19. package/dist/access-mcp.d.ts.map +1 -1
  20. package/dist/access-mcp.js +332 -89
  21. package/dist/access-namespace-preflight.js +2 -282
  22. package/dist/access-observe-transcript.js +3 -3
  23. package/dist/access-observe-write-category.js +6 -6
  24. package/dist/access-observe-write-surface.js +334 -61
  25. package/dist/access-offline-manifest.js +12 -11
  26. package/dist/access-operations-batch.js +332 -66
  27. package/dist/access-operations.js +332 -75
  28. package/dist/access-recall-concurrency.js +334 -61
  29. package/dist/access-recall-diagnostics.js +6 -5
  30. package/dist/access-recall-response.js +334 -61
  31. package/dist/access-recall-surface.js +334 -61
  32. package/dist/access-schema.js +2 -2
  33. package/dist/access-service.d.ts +1 -0
  34. package/dist/access-service.d.ts.map +1 -1
  35. package/dist/access-service.js +337 -64
  36. package/dist/access-surface-catalog.js +6 -283
  37. package/dist/access-surface-catalog.js.map +1 -1
  38. package/dist/active-context-transform.js +1 -1
  39. package/dist/active-memory-bridge.js +3 -2
  40. package/dist/active-recall.js +36 -37
  41. package/dist/active-recall.js.map +1 -1
  42. package/dist/activity/journal-extract.d.ts +13 -1
  43. package/dist/activity/journal-extract.d.ts.map +1 -1
  44. package/dist/{auto-sync-3AZW7MXI.js → auto-sync-BO5YZKM6.js} +13 -15
  45. package/dist/{auto-sync-3AZW7MXI.js.map → auto-sync-BO5YZKM6.js.map} +1 -1
  46. package/dist/briefing.js +20 -20
  47. package/dist/buffer.js +16 -16
  48. package/dist/calibration.js +10 -10
  49. package/dist/{capsule-merge-2IIXFXN5.js → capsule-merge-6IDAYTKG.js} +6 -6
  50. package/dist/causal-consolidation.js +23 -23
  51. package/dist/{chunk-QL7RHYK6.js → chunk-2LMA22UU.js} +5 -5
  52. package/dist/{chunk-RGUUBAT5.js → chunk-2WCLTWV2.js} +3 -3
  53. package/dist/{chunk-RSK2WIEM.js → chunk-2YODOG2O.js} +2 -2
  54. package/dist/{chunk-WYG5UNDY.js → chunk-3AUDELZL.js} +2 -2
  55. package/dist/{chunk-OFVCFKDH.js → chunk-3CYOCE6U.js} +3 -3
  56. package/dist/{chunk-6HM6HARE.js → chunk-3FBAEPCU.js} +2 -2
  57. package/dist/{chunk-PIITB2YZ.js → chunk-3ZS3NUEI.js} +4 -4
  58. package/dist/{chunk-V4XE263I.js → chunk-43AA5FVD.js} +1 -1
  59. package/dist/chunk-43AA5FVD.js.map +1 -0
  60. package/dist/{chunk-ANZZLRUX.js → chunk-4IVRQMZW.js} +2 -2
  61. package/dist/{chunk-63E37JCN.js → chunk-4RAJT5L2.js} +4 -4
  62. package/dist/{chunk-45VUHDV2.js → chunk-5CO5G4MN.js} +2 -2
  63. package/dist/{chunk-PUEO37QG.js → chunk-5YT2IIFX.js} +729 -17
  64. package/dist/chunk-5YT2IIFX.js.map +1 -0
  65. package/dist/{chunk-P5VZSSYL.js → chunk-622V2AZA.js} +233 -40
  66. package/dist/chunk-622V2AZA.js.map +1 -0
  67. package/dist/{chunk-3UMDRGFS.js → chunk-65HWAQ4F.js} +3 -3
  68. package/dist/{chunk-T67LUYCR.js → chunk-77NTFICT.js} +5 -5
  69. package/dist/chunk-A2WFUMUN.js +86 -0
  70. package/dist/chunk-A2WFUMUN.js.map +1 -0
  71. package/dist/{chunk-UE6RRXMF.js → chunk-A4F7OIC5.js} +2 -2
  72. package/dist/chunk-AHA5VQGP.js +117 -0
  73. package/dist/chunk-AHA5VQGP.js.map +1 -0
  74. package/dist/{chunk-AOFEMUHG.js → chunk-ATG2PQ4V.js} +56 -5
  75. package/dist/chunk-ATG2PQ4V.js.map +1 -0
  76. package/dist/{chunk-63O7LVMN.js → chunk-B33YWUJV.js} +3 -3
  77. package/dist/{chunk-QVMOCJRV.js → chunk-B377OKUP.js} +2 -2
  78. package/dist/{chunk-IUKYFTGW.js → chunk-B3DR2JBZ.js} +140 -125
  79. package/dist/chunk-B3DR2JBZ.js.map +1 -0
  80. package/dist/{chunk-ZT6WPSII.js → chunk-BGHCSLE5.js} +2 -2
  81. package/dist/{chunk-YYOMGOHB.js → chunk-BOK6BN5M.js} +2 -2
  82. package/dist/{chunk-OH7QLI6W.js → chunk-BPPUH5JM.js} +5 -5
  83. package/dist/{chunk-EV76IZ37.js → chunk-BTI4C4MA.js} +2 -2
  84. package/dist/{chunk-O6ZSWHVR.js → chunk-C2KE5DMD.js} +4 -4
  85. package/dist/{chunk-47F6WWLQ.js → chunk-C73N66PR.js} +2 -2
  86. package/dist/{chunk-3XIWW4TB.js → chunk-CGJYL633.js} +2 -2
  87. package/dist/{chunk-WRT7GJ2D.js → chunk-CIWMTNHW.js} +4 -4
  88. package/dist/{chunk-O55EKIEC.js → chunk-D3ZKHLN2.js} +2 -2
  89. package/dist/{chunk-CD4BCCNP.js → chunk-DJ7WVEWX.js} +2 -2
  90. package/dist/{chunk-RO7RUBLD.js → chunk-EFL24KOI.js} +2 -2
  91. package/dist/{chunk-4CJTQHEG.js → chunk-ESLOLCD4.js} +3 -3
  92. package/dist/{chunk-Z4Q6USKJ.js → chunk-ETBVCRVL.js} +4 -4
  93. package/dist/{chunk-VILPVT4S.js → chunk-EZ47HOJ6.js} +4 -4
  94. package/dist/{chunk-EFYN5I7Z.js → chunk-F4QFU5IZ.js} +2 -2
  95. package/dist/{chunk-T6OZW2WR.js → chunk-FA7SLQ5X.js} +7 -1
  96. package/dist/chunk-FA7SLQ5X.js.map +1 -0
  97. package/dist/{chunk-SHUBTAY2.js → chunk-FMKILENU.js} +14 -14
  98. package/dist/{chunk-YLXETSAH.js → chunk-GCZJ7XRI.js} +2 -2
  99. package/dist/{chunk-J4MMPQ7Q.js → chunk-GQXOBKPL.js} +7 -9
  100. package/dist/{chunk-J4MMPQ7Q.js.map → chunk-GQXOBKPL.js.map} +1 -1
  101. package/dist/{chunk-UDKWFDV2.js → chunk-HLUHEMN4.js} +27 -3
  102. package/dist/chunk-HLUHEMN4.js.map +1 -0
  103. package/dist/{chunk-QFEDITXM.js → chunk-JNDMIAJ4.js} +2 -2
  104. package/dist/chunk-JTSSSR4L.js +359 -0
  105. package/dist/chunk-JTSSSR4L.js.map +1 -0
  106. package/dist/{chunk-5KBIOI4G.js → chunk-JVBAPAWZ.js} +217 -13
  107. package/dist/chunk-JVBAPAWZ.js.map +1 -0
  108. package/dist/{chunk-E5PPE4VA.js → chunk-K2VRKCPA.js} +2 -2
  109. package/dist/{chunk-MKRYQROF.js → chunk-LGEHAQHK.js} +4 -4
  110. package/dist/{chunk-7HTUYFR3.js → chunk-LLPMMMWG.js} +27 -10
  111. package/dist/chunk-LLPMMMWG.js.map +1 -0
  112. package/dist/{chunk-XYTQJD7F.js → chunk-LMJVP5CM.js} +2 -2
  113. package/dist/{chunk-JC36FPQ5.js → chunk-LPV72KRQ.js} +2 -2
  114. package/dist/{chunk-2LCRG2YV.js → chunk-M2XR6B6V.js} +2 -2
  115. package/dist/{chunk-GGRRF4PZ.js → chunk-MDPT6QFK.js} +1 -1
  116. package/dist/{chunk-GGRRF4PZ.js.map → chunk-MDPT6QFK.js.map} +1 -1
  117. package/dist/{chunk-VPQFK63H.js → chunk-MH632KPO.js} +2 -2
  118. package/dist/{chunk-EQ4U73UH.js → chunk-MLAMXQAW.js} +14 -2
  119. package/dist/chunk-MLAMXQAW.js.map +1 -0
  120. package/dist/{chunk-ZU5JDLOH.js → chunk-MMRTPH3J.js} +2 -2
  121. package/dist/{chunk-ZZ67UTQX.js → chunk-MUX7IL77.js} +2 -2
  122. package/dist/{chunk-RYWROSL5.js → chunk-NAQ4A5IX.js} +7 -7
  123. package/dist/{chunk-TVIVY7KU.js → chunk-NED7IR7B.js} +4 -4
  124. package/dist/{chunk-ADYP7HXE.js → chunk-NHVAX7MH.js} +3 -3
  125. package/dist/{chunk-TG3R2SID.js → chunk-NMGHGTVR.js} +5 -5
  126. package/dist/{chunk-YCNIGRRF.js → chunk-NS7U4ZYU.js} +13 -117
  127. package/dist/chunk-NS7U4ZYU.js.map +1 -0
  128. package/dist/{chunk-NGHDW6UU.js → chunk-NUQEREIP.js} +2 -2
  129. package/dist/{chunk-5IIQU4JZ.js → chunk-OB72KNMF.js} +4 -4
  130. package/dist/{chunk-7L3TODI7.js → chunk-OJXJWNFY.js} +2 -2
  131. package/dist/{chunk-66L5ZRJC.js → chunk-P3WRNWWM.js} +157 -4
  132. package/dist/chunk-P3WRNWWM.js.map +1 -0
  133. package/dist/{chunk-E6M225BJ.js → chunk-PC5DRBGD.js} +18 -8
  134. package/dist/chunk-PC5DRBGD.js.map +1 -0
  135. package/dist/{chunk-EURPSF4Y.js → chunk-PH5ZQM35.js} +2 -2
  136. package/dist/{chunk-BMWMTAQF.js → chunk-PRAUN6PN.js} +3 -3
  137. package/dist/{chunk-RWGRSKN5.js → chunk-PT4DZDJA.js} +2 -2
  138. package/dist/{chunk-7EPY3IQL.js → chunk-PZJQ46DH.js} +2 -2
  139. package/dist/{chunk-AH637HZ5.js → chunk-QDESY76F.js} +3 -3
  140. package/dist/{chunk-I6QGI65T.js → chunk-QRMG4HK4.js} +3 -3
  141. package/dist/{chunk-ZU3NJNO7.js → chunk-QSF5SJAM.js} +4 -4
  142. package/dist/{chunk-5IYOKDM4.js → chunk-R23JWJD3.js} +5 -5
  143. package/dist/{chunk-EWJZZDRG.js → chunk-R4BBGPI2.js} +219 -219
  144. package/dist/chunk-R4BBGPI2.js.map +1 -0
  145. package/dist/{chunk-LJQFJF4J.js → chunk-RM2YUFH6.js} +6 -6
  146. package/dist/{chunk-IPT2OY4B.js → chunk-RQFXZYTF.js} +35 -33
  147. package/dist/chunk-RQFXZYTF.js.map +1 -0
  148. package/dist/{chunk-AP6NCP3V.js → chunk-S3S72HRM.js} +8 -6
  149. package/dist/chunk-S3S72HRM.js.map +1 -0
  150. package/dist/{chunk-6QMWECO5.js → chunk-SGQPR5SX.js} +7 -7
  151. package/dist/{chunk-ZGFLIK5H.js → chunk-SPAKBUJY.js} +2 -2
  152. package/dist/{chunk-ER7XANP3.js → chunk-SQ3GEIEL.js} +4 -4
  153. package/dist/{chunk-5UCMYPVF.js → chunk-SVT5IA2H.js} +2 -2
  154. package/dist/{chunk-HVKUCT3W.js → chunk-T4KY6UYF.js} +5 -3
  155. package/dist/{chunk-HVKUCT3W.js.map → chunk-T4KY6UYF.js.map} +1 -1
  156. package/dist/{chunk-FRSHF6FU.js → chunk-TJ4F6H4H.js} +3 -3
  157. package/dist/{chunk-R6HMAIKM.js → chunk-TOSPNM4T.js} +2 -2
  158. package/dist/{chunk-NJJMVS5Y.js → chunk-TRQE3RYR.js} +5 -5
  159. package/dist/{chunk-RMXS4I66.js → chunk-TVDJEUV5.js} +2 -2
  160. package/dist/{chunk-PLCYKAWH.js → chunk-TYRWSE4B.js} +2 -2
  161. package/dist/{chunk-YS2GHSWN.js → chunk-UBEKET2V.js} +389 -39
  162. package/dist/chunk-UBEKET2V.js.map +1 -0
  163. package/dist/{chunk-IQWUACVG.js → chunk-UHMHJX5G.js} +3 -3
  164. package/dist/{chunk-YODUDA6R.js → chunk-UN4RVUG2.js} +22 -22
  165. package/dist/{chunk-KZSGBWOJ.js → chunk-V2KGDESV.js} +2 -2
  166. package/dist/{chunk-E6Z4FBX6.js → chunk-V2QSNFCT.js} +2 -2
  167. package/dist/{chunk-BCCG7VWM.js → chunk-V65H7MI6.js} +396 -13
  168. package/dist/chunk-V65H7MI6.js.map +1 -0
  169. package/dist/chunk-W54Z2MOP.js +4500 -0
  170. package/dist/chunk-W54Z2MOP.js.map +1 -0
  171. package/dist/{chunk-N74SGESS.js → chunk-WKSQTMU7.js} +2 -2
  172. package/dist/{chunk-RIZ5NUNN.js → chunk-WQ4XKIOX.js} +4 -4
  173. package/dist/{chunk-WWK6J6SE.js → chunk-WQURALGV.js} +4996 -2748
  174. package/dist/chunk-WQURALGV.js.map +1 -0
  175. package/dist/{chunk-QEYTRFR3.js → chunk-X26YOFGS.js} +2 -2
  176. package/dist/{chunk-ITHZFHST.js → chunk-X2BVB74H.js} +2 -2
  177. package/dist/{chunk-GNXGJBCA.js → chunk-XIYLWEXC.js} +2 -2
  178. package/dist/{chunk-IBJ6U753.js → chunk-XKZBZOKV.js} +4 -4
  179. package/dist/{chunk-7O2MC42R.js → chunk-XNRLRNQF.js} +2 -2
  180. package/dist/{chunk-65AUYLU3.js → chunk-XPXHQI6N.js} +2 -2
  181. package/dist/{chunk-JBCCWVU2.js → chunk-XRDYRWZI.js} +2 -2
  182. package/dist/chunk-XRWWCW4H.js +102 -0
  183. package/dist/chunk-XRWWCW4H.js.map +1 -0
  184. package/dist/chunk-YKJBSMMP.js +67137 -0
  185. package/dist/chunk-YKJBSMMP.js.map +1 -0
  186. package/dist/{chunk-2JSDPUKD.js → chunk-YMFPFXEX.js} +2 -2
  187. package/dist/{chunk-645WOU5I.js → chunk-ZDZJNXL6.js} +4 -4
  188. package/dist/{chunk-6TCXIRP5.js → chunk-ZKE4CO6B.js} +4 -4
  189. package/dist/{chunk-KEPXC4KN.js → chunk-ZSE774RV.js} +2 -2
  190. package/dist/cli.d.ts.map +1 -1
  191. package/dist/cli.js +305 -187
  192. package/dist/coding/export-okf-codegraph.js +29 -29
  193. package/dist/compounding/engine.js +23 -24
  194. package/dist/config.d.ts.map +1 -1
  195. package/dist/config.js +36 -37
  196. package/dist/connectors/codex-materialize-runner.js +20 -20
  197. package/dist/connectors/index.js +21 -21
  198. package/dist/connectors/live/framework.d.ts +7 -0
  199. package/dist/connectors/live/framework.d.ts.map +1 -1
  200. package/dist/connectors/live/google-drive.d.ts +17 -3
  201. package/dist/connectors/live/google-drive.d.ts.map +1 -1
  202. package/dist/consolidation-provenance-check.js +4 -4
  203. package/dist/consolidation-undo.js +5 -5
  204. package/dist/contradiction/index.js +7 -6
  205. package/dist/{contradiction-scan-P2MHYFVG.js → contradiction-scan-IBPYGQZF.js} +4 -3
  206. package/dist/convergence-refresh.js +22 -22
  207. package/dist/corpus-watermark.js +23 -23
  208. package/dist/deep-recall-http-glue.js +2 -2
  209. package/dist/deep-recall-policy-llm.js +4 -4
  210. package/dist/direct-answer-wiring.js +2 -2
  211. package/dist/embedding-fallback.js +1 -1
  212. package/dist/entity-retrieval.js +21 -21
  213. package/dist/eval-trajectory-store.js +2 -2
  214. package/dist/eval-trajectory.js +2 -2
  215. package/dist/event-order-recall.js +2 -2
  216. package/dist/explicit-capture.d.ts +3 -2
  217. package/dist/explicit-capture.d.ts.map +1 -1
  218. package/dist/explicit-capture.js +530 -6
  219. package/dist/explicit-cue-recall.js +2 -2
  220. package/dist/external-wiki-access.js +2 -283
  221. package/dist/extraction-faithfulness.js +4 -4
  222. package/dist/extraction-judge.js +5 -5
  223. package/dist/extraction-normalization.js +1 -1
  224. package/dist/extraction-quote-grounding.d.ts.map +1 -1
  225. package/dist/extraction-quote-grounding.js +1 -1
  226. package/dist/extraction-source-grounding-rules.js +2 -2
  227. package/dist/extraction-source-grounding.js +3 -3
  228. package/dist/extraction.js +43 -44
  229. package/dist/fallback-llm-codex-subscription.js +2 -2
  230. package/dist/fallback-llm.js +3 -3
  231. package/dist/{first-start-migration-QFI7B5SH.js → first-start-migration-FILJH3RO.js} +6 -5
  232. package/dist/{first-start-migration-QFI7B5SH.js.map → first-start-migration-FILJH3RO.js.map} +1 -1
  233. package/dist/focused-list-recall.js +2 -2
  234. package/dist/harmonic-retrieval.js +20 -20
  235. package/dist/index.js +776 -797
  236. package/dist/lcm/index.js +2 -2
  237. package/dist/live-connectors-runner.d.ts +2 -0
  238. package/dist/live-connectors-runner.d.ts.map +1 -1
  239. package/dist/live-connectors-runner.js +3 -4
  240. package/dist/local-llm-config.js +2 -2
  241. package/dist/local-llm-helpers.d.ts +4 -0
  242. package/dist/local-llm-helpers.d.ts.map +1 -1
  243. package/dist/local-llm-helpers.js +3 -1
  244. package/dist/local-llm.d.ts +4 -1
  245. package/dist/local-llm.d.ts.map +1 -1
  246. package/dist/local-llm.js +4 -4
  247. package/dist/location/index.js +27 -29
  248. package/dist/maintenance/memory-governance.js +20 -20
  249. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +20 -20
  250. package/dist/maintenance/rebuild-memory-projection-runner.js +22 -22
  251. package/dist/maintenance/rebuild-memory-projection.js +21 -21
  252. package/dist/memory-browse-operations.js +2 -283
  253. package/dist/memory-browse.js +8 -7
  254. package/dist/memory-controller.js +2 -2
  255. package/dist/memory-subject.js +2 -2
  256. package/dist/namespaces/migrate.js +21 -21
  257. package/dist/namespaces/search.js +5 -5
  258. package/dist/namespaces/storage.js +20 -20
  259. package/dist/offline-sync-changeset-generations.js +1 -1
  260. package/dist/offline-sync-embedding-generation.js +1 -1
  261. package/dist/offline-sync-impression-drain.js +6 -6
  262. package/dist/offline-sync-snapshot-stream.js +1 -1
  263. package/dist/offline-sync.js +1 -1
  264. package/dist/operator-doctor-corpus.js +24 -24
  265. package/dist/operator-toolkit.js +58 -61
  266. package/dist/orchestration/backlog-scheduler.js +279 -295
  267. package/dist/orchestration/backlog-scheduler.js.map +1 -1
  268. package/dist/orchestration/buffer-drain-runner.js +279 -295
  269. package/dist/orchestration/extraction-run.d.ts +4 -0
  270. package/dist/orchestration/extraction-run.d.ts.map +1 -1
  271. package/dist/orchestration/fact-dedup-window.d.ts +1 -1
  272. package/dist/orchestration/fact-dedup-window.d.ts.map +1 -1
  273. package/dist/orchestration/maintenance.js +39 -42
  274. package/dist/orchestrator.d.ts +11 -11
  275. package/dist/orchestrator.d.ts.map +1 -1
  276. package/dist/orchestrator.js +291 -308
  277. package/dist/page-versioning.js +3 -3
  278. package/dist/qmd-daemon-session.js +2 -2
  279. package/dist/qmd.js +3 -3
  280. package/dist/recall-explain-renderer.js +3 -3
  281. package/dist/recall-navigate-access.js +2 -2
  282. package/dist/recall-navigate-disclosure.js +2 -2
  283. package/dist/recall-navigate.js +2 -2
  284. package/dist/recall-navigation-operations.js +2 -283
  285. package/dist/recall-navigation.js +334 -61
  286. package/dist/recall-planner-llm.js +3 -3
  287. package/dist/recall-state-view-admission.js +6 -6
  288. package/dist/recall-why-service.js +10 -9
  289. package/dist/recall-why.js +4 -3
  290. package/dist/recall-xray-cli.js +4 -4
  291. package/dist/recall-xray-renderer.js +3 -3
  292. package/dist/recall-xray.js +2 -2
  293. package/dist/reconcile/manifest.js +3 -3
  294. package/dist/{resolution-N7H3F2E4.js → resolution-OVVIF7ZY.js} +8 -7
  295. package/dist/response-guidance-recall.js +2 -2
  296. package/dist/resume-bundles.js +40 -41
  297. package/dist/salvage-envelope.js +4 -4
  298. package/dist/search/factory.js +4 -4
  299. package/dist/search/index.js +4 -4
  300. package/dist/semantic-consolidation.js +23 -23
  301. package/dist/semantic-rule-promotion.js +20 -20
  302. package/dist/semantic-rule-verifier.js +20 -20
  303. package/dist/shared-context/manager.js +2 -3
  304. package/dist/source-agent-qualifier.js +32 -33
  305. package/dist/standup/build.js +20 -20
  306. package/dist/{state-store-I5HLZTZT.js → state-store-EEAX2MBS.js} +2 -2
  307. package/dist/storage/content-hash-index.d.ts +10 -0
  308. package/dist/storage/content-hash-index.d.ts.map +1 -1
  309. package/dist/storage.js +19 -19
  310. package/dist/subject-config.js +3 -3
  311. package/dist/summarizer.d.ts +4 -1
  312. package/dist/summarizer.d.ts.map +1 -1
  313. package/dist/summarizer.js +6 -6
  314. package/dist/support-passport/index.js +53 -297
  315. package/dist/targeted-fact-recall.js +2 -2
  316. package/dist/tier-routing.js +3 -2
  317. package/dist/{tier-stats-FQGQSFET.js → tier-stats-FXEUJN73.js} +6 -5
  318. package/dist/{tier-stats-FQGQSFET.js.map → tier-stats-FXEUJN73.js.map} +1 -1
  319. package/dist/transcript.js +2 -2
  320. package/dist/transfer/capsule-import.js +4 -4
  321. package/dist/transfer/export-okf.js +20 -20
  322. package/dist/types.d.ts +10 -10
  323. package/dist/types.d.ts.map +1 -1
  324. package/dist/types.js +1 -1
  325. package/dist/verified-recall.js +20 -20
  326. package/dist/wearables/memory-gen.d.ts +5 -1
  327. package/dist/wearables/memory-gen.d.ts.map +1 -1
  328. package/dist/wearables/service.d.ts.map +1 -1
  329. package/dist/who-knows-cli.js +21 -21
  330. package/dist/who-knows.js +20 -20
  331. package/dist/write-envelope.js +3 -3
  332. package/package.json +2 -2
  333. package/src/access-boundary.ts +5 -1
  334. package/src/access-category-alias.test.ts +5 -0
  335. package/src/access-mcp-frames.test.ts +60 -5
  336. package/src/access-mcp-frames.ts +72 -18
  337. package/src/access-mcp.test.ts +66 -2
  338. package/src/access-mcp.ts +19 -13
  339. package/src/access-service-coding-write.test.ts +7 -0
  340. package/src/access-service.ts +3 -0
  341. package/src/activity/journal-extract-storage.test.ts +31 -0
  342. package/src/activity/journal-extract.test.ts +1 -0
  343. package/src/activity/journal-extract.ts +24 -3
  344. package/src/cli.ts +1 -2
  345. package/src/config.test.ts +17 -0
  346. package/src/config.ts +25 -7
  347. package/src/connectors/live/framework.ts +8 -0
  348. package/src/connectors/live/google-drive.test.ts +74 -0
  349. package/src/connectors/live/google-drive.ts +138 -11
  350. package/src/explicit-capture.test.ts +109 -17
  351. package/src/explicit-capture.ts +90 -37
  352. package/src/extraction-quote-grounding.test.ts +20 -0
  353. package/src/extraction-quote-grounding.ts +21 -11
  354. package/src/fact-dedup-window.test.ts +37 -0
  355. package/src/live-connectors-runner.ts +3 -0
  356. package/src/live-connectors-secretref.test.ts +126 -0
  357. package/src/local-llm-helpers.ts +12 -0
  358. package/src/local-llm-shutdown.test.ts +194 -0
  359. package/src/local-llm.ts +32 -30
  360. package/src/orchestration/extraction-run.ts +12 -3
  361. package/src/orchestration/fact-dedup-window.ts +5 -1
  362. package/src/orchestrator-connector-dedup.test.ts +9 -5
  363. package/src/orchestrator.ts +52 -55
  364. package/src/storage/content-hash-index.ts +27 -2
  365. package/src/storage-fact-hash-publish-failure.test.ts +87 -0
  366. package/src/summarizer-shutdown.test.ts +195 -0
  367. package/src/summarizer.ts +15 -2
  368. package/src/types.ts +10 -10
  369. package/src/wearables/memory-gen.test.ts +20 -0
  370. package/src/wearables/memory-gen.ts +14 -7
  371. package/src/wearables/service.ts +14 -1
  372. package/src/wearables/storage-io.test.ts +25 -0
  373. package/dist/chunk-27XYV2XL.js +0 -43
  374. package/dist/chunk-27XYV2XL.js.map +0 -1
  375. package/dist/chunk-5KBIOI4G.js.map +0 -1
  376. package/dist/chunk-66L5ZRJC.js.map +0 -1
  377. package/dist/chunk-7HTUYFR3.js.map +0 -1
  378. package/dist/chunk-AOFEMUHG.js.map +0 -1
  379. package/dist/chunk-AP6NCP3V.js.map +0 -1
  380. package/dist/chunk-APYY5CX3.js +0 -335
  381. package/dist/chunk-APYY5CX3.js.map +0 -1
  382. package/dist/chunk-ATPWMT2E.js +0 -223
  383. package/dist/chunk-ATPWMT2E.js.map +0 -1
  384. package/dist/chunk-BCCG7VWM.js.map +0 -1
  385. package/dist/chunk-E6M225BJ.js.map +0 -1
  386. package/dist/chunk-EQ4U73UH.js.map +0 -1
  387. package/dist/chunk-ETSJD5IV.js +0 -361
  388. package/dist/chunk-ETSJD5IV.js.map +0 -1
  389. package/dist/chunk-EWJZZDRG.js.map +0 -1
  390. package/dist/chunk-FHGWKODN.js +0 -2300
  391. package/dist/chunk-FHGWKODN.js.map +0 -1
  392. package/dist/chunk-GRTKLWYX.js +0 -621
  393. package/dist/chunk-GRTKLWYX.js.map +0 -1
  394. package/dist/chunk-IGLJNHOX.js +0 -62
  395. package/dist/chunk-IGLJNHOX.js.map +0 -1
  396. package/dist/chunk-IPT2OY4B.js.map +0 -1
  397. package/dist/chunk-IUKYFTGW.js.map +0 -1
  398. package/dist/chunk-KUIRDD74.js +0 -3991
  399. package/dist/chunk-KUIRDD74.js.map +0 -1
  400. package/dist/chunk-MVMRUGBH.js +0 -1919
  401. package/dist/chunk-MVMRUGBH.js.map +0 -1
  402. package/dist/chunk-ODL4ZTNI.js +0 -3644
  403. package/dist/chunk-ODL4ZTNI.js.map +0 -1
  404. package/dist/chunk-OGXXGHW6.js +0 -223
  405. package/dist/chunk-OGXXGHW6.js.map +0 -1
  406. package/dist/chunk-P5VZSSYL.js.map +0 -1
  407. package/dist/chunk-PPCLZ4JU.js +0 -28
  408. package/dist/chunk-PPCLZ4JU.js.map +0 -1
  409. package/dist/chunk-PUEO37QG.js.map +0 -1
  410. package/dist/chunk-RRTVGD3J.js +0 -792
  411. package/dist/chunk-RRTVGD3J.js.map +0 -1
  412. package/dist/chunk-STSLB4HT.js +0 -18793
  413. package/dist/chunk-STSLB4HT.js.map +0 -1
  414. package/dist/chunk-T6OZW2WR.js.map +0 -1
  415. package/dist/chunk-TRBGGJKZ.js +0 -32218
  416. package/dist/chunk-TRBGGJKZ.js.map +0 -1
  417. package/dist/chunk-UDKWFDV2.js.map +0 -1
  418. package/dist/chunk-V4XE263I.js.map +0 -1
  419. package/dist/chunk-V7IZKJI3.js +0 -22
  420. package/dist/chunk-V7IZKJI3.js.map +0 -1
  421. package/dist/chunk-VMVVSZTD.js +0 -61
  422. package/dist/chunk-VMVVSZTD.js.map +0 -1
  423. package/dist/chunk-VNUOAXWP.js +0 -203
  424. package/dist/chunk-VNUOAXWP.js.map +0 -1
  425. package/dist/chunk-WLBEZZK5.js +0 -729
  426. package/dist/chunk-WLBEZZK5.js.map +0 -1
  427. package/dist/chunk-WUUES6CU.js +0 -25
  428. package/dist/chunk-WUUES6CU.js.map +0 -1
  429. package/dist/chunk-WWK6J6SE.js.map +0 -1
  430. package/dist/chunk-XICOH5HT.js +0 -346
  431. package/dist/chunk-XICOH5HT.js.map +0 -1
  432. package/dist/chunk-YCNIGRRF.js.map +0 -1
  433. package/dist/chunk-YS2GHSWN.js.map +0 -1
  434. package/dist/chunk-ZCLEYJPB.js +0 -10143
  435. package/dist/chunk-ZCLEYJPB.js.map +0 -1
  436. /package/dist/{capsule-merge-2IIXFXN5.js.map → capsule-merge-6IDAYTKG.js.map} +0 -0
  437. /package/dist/{chunk-QL7RHYK6.js.map → chunk-2LMA22UU.js.map} +0 -0
  438. /package/dist/{chunk-RGUUBAT5.js.map → chunk-2WCLTWV2.js.map} +0 -0
  439. /package/dist/{chunk-RSK2WIEM.js.map → chunk-2YODOG2O.js.map} +0 -0
  440. /package/dist/{chunk-WYG5UNDY.js.map → chunk-3AUDELZL.js.map} +0 -0
  441. /package/dist/{chunk-OFVCFKDH.js.map → chunk-3CYOCE6U.js.map} +0 -0
  442. /package/dist/{chunk-6HM6HARE.js.map → chunk-3FBAEPCU.js.map} +0 -0
  443. /package/dist/{chunk-PIITB2YZ.js.map → chunk-3ZS3NUEI.js.map} +0 -0
  444. /package/dist/{chunk-ANZZLRUX.js.map → chunk-4IVRQMZW.js.map} +0 -0
  445. /package/dist/{chunk-63E37JCN.js.map → chunk-4RAJT5L2.js.map} +0 -0
  446. /package/dist/{chunk-45VUHDV2.js.map → chunk-5CO5G4MN.js.map} +0 -0
  447. /package/dist/{chunk-3UMDRGFS.js.map → chunk-65HWAQ4F.js.map} +0 -0
  448. /package/dist/{chunk-T67LUYCR.js.map → chunk-77NTFICT.js.map} +0 -0
  449. /package/dist/{chunk-UE6RRXMF.js.map → chunk-A4F7OIC5.js.map} +0 -0
  450. /package/dist/{chunk-63O7LVMN.js.map → chunk-B33YWUJV.js.map} +0 -0
  451. /package/dist/{chunk-QVMOCJRV.js.map → chunk-B377OKUP.js.map} +0 -0
  452. /package/dist/{chunk-ZT6WPSII.js.map → chunk-BGHCSLE5.js.map} +0 -0
  453. /package/dist/{chunk-YYOMGOHB.js.map → chunk-BOK6BN5M.js.map} +0 -0
  454. /package/dist/{chunk-OH7QLI6W.js.map → chunk-BPPUH5JM.js.map} +0 -0
  455. /package/dist/{chunk-EV76IZ37.js.map → chunk-BTI4C4MA.js.map} +0 -0
  456. /package/dist/{chunk-O6ZSWHVR.js.map → chunk-C2KE5DMD.js.map} +0 -0
  457. /package/dist/{chunk-47F6WWLQ.js.map → chunk-C73N66PR.js.map} +0 -0
  458. /package/dist/{chunk-3XIWW4TB.js.map → chunk-CGJYL633.js.map} +0 -0
  459. /package/dist/{chunk-WRT7GJ2D.js.map → chunk-CIWMTNHW.js.map} +0 -0
  460. /package/dist/{chunk-O55EKIEC.js.map → chunk-D3ZKHLN2.js.map} +0 -0
  461. /package/dist/{chunk-CD4BCCNP.js.map → chunk-DJ7WVEWX.js.map} +0 -0
  462. /package/dist/{chunk-RO7RUBLD.js.map → chunk-EFL24KOI.js.map} +0 -0
  463. /package/dist/{chunk-4CJTQHEG.js.map → chunk-ESLOLCD4.js.map} +0 -0
  464. /package/dist/{chunk-Z4Q6USKJ.js.map → chunk-ETBVCRVL.js.map} +0 -0
  465. /package/dist/{chunk-VILPVT4S.js.map → chunk-EZ47HOJ6.js.map} +0 -0
  466. /package/dist/{chunk-EFYN5I7Z.js.map → chunk-F4QFU5IZ.js.map} +0 -0
  467. /package/dist/{chunk-SHUBTAY2.js.map → chunk-FMKILENU.js.map} +0 -0
  468. /package/dist/{chunk-YLXETSAH.js.map → chunk-GCZJ7XRI.js.map} +0 -0
  469. /package/dist/{chunk-QFEDITXM.js.map → chunk-JNDMIAJ4.js.map} +0 -0
  470. /package/dist/{chunk-E5PPE4VA.js.map → chunk-K2VRKCPA.js.map} +0 -0
  471. /package/dist/{chunk-MKRYQROF.js.map → chunk-LGEHAQHK.js.map} +0 -0
  472. /package/dist/{chunk-XYTQJD7F.js.map → chunk-LMJVP5CM.js.map} +0 -0
  473. /package/dist/{chunk-JC36FPQ5.js.map → chunk-LPV72KRQ.js.map} +0 -0
  474. /package/dist/{chunk-2LCRG2YV.js.map → chunk-M2XR6B6V.js.map} +0 -0
  475. /package/dist/{chunk-VPQFK63H.js.map → chunk-MH632KPO.js.map} +0 -0
  476. /package/dist/{chunk-ZU5JDLOH.js.map → chunk-MMRTPH3J.js.map} +0 -0
  477. /package/dist/{chunk-ZZ67UTQX.js.map → chunk-MUX7IL77.js.map} +0 -0
  478. /package/dist/{chunk-RYWROSL5.js.map → chunk-NAQ4A5IX.js.map} +0 -0
  479. /package/dist/{chunk-TVIVY7KU.js.map → chunk-NED7IR7B.js.map} +0 -0
  480. /package/dist/{chunk-ADYP7HXE.js.map → chunk-NHVAX7MH.js.map} +0 -0
  481. /package/dist/{chunk-TG3R2SID.js.map → chunk-NMGHGTVR.js.map} +0 -0
  482. /package/dist/{chunk-NGHDW6UU.js.map → chunk-NUQEREIP.js.map} +0 -0
  483. /package/dist/{chunk-5IIQU4JZ.js.map → chunk-OB72KNMF.js.map} +0 -0
  484. /package/dist/{chunk-7L3TODI7.js.map → chunk-OJXJWNFY.js.map} +0 -0
  485. /package/dist/{chunk-EURPSF4Y.js.map → chunk-PH5ZQM35.js.map} +0 -0
  486. /package/dist/{chunk-BMWMTAQF.js.map → chunk-PRAUN6PN.js.map} +0 -0
  487. /package/dist/{chunk-RWGRSKN5.js.map → chunk-PT4DZDJA.js.map} +0 -0
  488. /package/dist/{chunk-7EPY3IQL.js.map → chunk-PZJQ46DH.js.map} +0 -0
  489. /package/dist/{chunk-AH637HZ5.js.map → chunk-QDESY76F.js.map} +0 -0
  490. /package/dist/{chunk-I6QGI65T.js.map → chunk-QRMG4HK4.js.map} +0 -0
  491. /package/dist/{chunk-ZU3NJNO7.js.map → chunk-QSF5SJAM.js.map} +0 -0
  492. /package/dist/{chunk-5IYOKDM4.js.map → chunk-R23JWJD3.js.map} +0 -0
  493. /package/dist/{chunk-LJQFJF4J.js.map → chunk-RM2YUFH6.js.map} +0 -0
  494. /package/dist/{chunk-6QMWECO5.js.map → chunk-SGQPR5SX.js.map} +0 -0
  495. /package/dist/{chunk-ZGFLIK5H.js.map → chunk-SPAKBUJY.js.map} +0 -0
  496. /package/dist/{chunk-ER7XANP3.js.map → chunk-SQ3GEIEL.js.map} +0 -0
  497. /package/dist/{chunk-5UCMYPVF.js.map → chunk-SVT5IA2H.js.map} +0 -0
  498. /package/dist/{chunk-FRSHF6FU.js.map → chunk-TJ4F6H4H.js.map} +0 -0
  499. /package/dist/{chunk-R6HMAIKM.js.map → chunk-TOSPNM4T.js.map} +0 -0
  500. /package/dist/{chunk-NJJMVS5Y.js.map → chunk-TRQE3RYR.js.map} +0 -0
  501. /package/dist/{chunk-RMXS4I66.js.map → chunk-TVDJEUV5.js.map} +0 -0
  502. /package/dist/{chunk-PLCYKAWH.js.map → chunk-TYRWSE4B.js.map} +0 -0
  503. /package/dist/{chunk-IQWUACVG.js.map → chunk-UHMHJX5G.js.map} +0 -0
  504. /package/dist/{chunk-YODUDA6R.js.map → chunk-UN4RVUG2.js.map} +0 -0
  505. /package/dist/{chunk-KZSGBWOJ.js.map → chunk-V2KGDESV.js.map} +0 -0
  506. /package/dist/{chunk-E6Z4FBX6.js.map → chunk-V2QSNFCT.js.map} +0 -0
  507. /package/dist/{chunk-N74SGESS.js.map → chunk-WKSQTMU7.js.map} +0 -0
  508. /package/dist/{chunk-RIZ5NUNN.js.map → chunk-WQ4XKIOX.js.map} +0 -0
  509. /package/dist/{chunk-QEYTRFR3.js.map → chunk-X26YOFGS.js.map} +0 -0
  510. /package/dist/{chunk-ITHZFHST.js.map → chunk-X2BVB74H.js.map} +0 -0
  511. /package/dist/{chunk-GNXGJBCA.js.map → chunk-XIYLWEXC.js.map} +0 -0
  512. /package/dist/{chunk-IBJ6U753.js.map → chunk-XKZBZOKV.js.map} +0 -0
  513. /package/dist/{chunk-7O2MC42R.js.map → chunk-XNRLRNQF.js.map} +0 -0
  514. /package/dist/{chunk-65AUYLU3.js.map → chunk-XPXHQI6N.js.map} +0 -0
  515. /package/dist/{chunk-JBCCWVU2.js.map → chunk-XRDYRWZI.js.map} +0 -0
  516. /package/dist/{chunk-2JSDPUKD.js.map → chunk-YMFPFXEX.js.map} +0 -0
  517. /package/dist/{chunk-645WOU5I.js.map → chunk-ZDZJNXL6.js.map} +0 -0
  518. /package/dist/{chunk-6TCXIRP5.js.map → chunk-ZKE4CO6B.js.map} +0 -0
  519. /package/dist/{chunk-KEPXC4KN.js.map → chunk-ZSE774RV.js.map} +0 -0
  520. /package/dist/{contradiction-scan-P2MHYFVG.js.map → contradiction-scan-IBPYGQZF.js.map} +0 -0
  521. /package/dist/{resolution-N7H3F2E4.js.map → resolution-OVVIF7ZY.js.map} +0 -0
  522. /package/dist/{state-store-I5HLZTZT.js.map → state-store-EEAX2MBS.js.map} +0 -0
@@ -1,346 +0,0 @@
1
- import {
2
- SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
3
- SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
4
- } from "./chunk-STSLB4HT.js";
5
- import {
6
- SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
7
- } from "./chunk-YCNIGRRF.js";
8
-
9
- // src/support-passport/model-bridge.ts
10
- import { randomUUID } from "crypto";
11
- import { z } from "zod";
12
- var SUPPORT_PASSPORT_MODEL_JOB_PATH = "/engram/v1/support-passport/internal/model/jobs/next";
13
- var SUPPORT_PASSPORT_MODEL_ACK_PATH = "/engram/v1/support-passport/internal/model/jobs/ack";
14
- var SUPPORT_PASSPORT_MODEL_RESULT_PATH = "/engram/v1/support-passport/internal/model/jobs/result";
15
- var CONSUMER_HANDOFF_GRACE_MS = 1e3;
16
- var MAX_JSON_STRING_EXPANSION = 6;
17
- var MAX_DRAFT_MESSAGE_STRUCTURE = JSON.stringify({
18
- sourceNotes: Array.from({ length: SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES }, () => ({ memoryId: "", content: "" }))
19
- }).length;
20
- var MAX_MODEL_MESSAGE_CHARACTERS = MAX_DRAFT_MESSAGE_STRUCTURE + MAX_JSON_STRING_EXPANSION * (SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS + SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES * SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH);
21
- var ModelMessageSchema = z.object({
22
- role: z.enum(["system", "user", "assistant"]),
23
- content: z.string().max(MAX_MODEL_MESSAGE_CHARACTERS)
24
- }).strict();
25
- var ModelJobSchema = z.object({
26
- id: z.string().uuid(),
27
- claimId: z.string().uuid().optional(),
28
- messages: z.array(ModelMessageSchema).min(1).max(8),
29
- temperature: z.number().finite().min(0).max(2),
30
- maxTokens: z.number().int().min(1).max(32e3),
31
- timeoutMs: z.number().int().min(1).max(12e4),
32
- claimAckTimeoutMs: z.number().int().min(1).max(12e4).optional(),
33
- executionLeaseTimeoutMs: z.number().int().min(1).max(12e4).optional(),
34
- operation: z.enum(["support-passport-draft", "support-passport-answer"]),
35
- jsonSchema: z.object({
36
- name: z.string().min(1).max(128),
37
- schema: z.record(z.string(), z.unknown())
38
- }).strict()
39
- }).strict();
40
- function parseSupportPassportModelJob(value) {
41
- const parsed = ModelJobSchema.safeParse(value);
42
- return parsed.success ? parsed.data : void 0;
43
- }
44
- var ModelResultSchema = z.object({
45
- id: z.string().uuid(),
46
- claimId: z.string().uuid().optional(),
47
- result: z.object({
48
- content: z.string().max(25e4),
49
- modelUsed: z.string().min(1).max(512),
50
- usage: z.object({
51
- inputTokens: z.number().int().nonnegative().optional(),
52
- outputTokens: z.number().int().nonnegative().optional(),
53
- totalTokens: z.number().int().nonnegative().optional()
54
- }).strict().optional()
55
- }).strict().nullable()
56
- }).strict();
57
- var ModelClaimSchema = z.object({
58
- id: z.string().uuid(),
59
- claimId: z.string().uuid()
60
- }).strict();
61
- function respondJson(res, status, payload) {
62
- const body = JSON.stringify(payload);
63
- res.statusCode = status;
64
- res.setHeader("cache-control", "no-store");
65
- res.setHeader("content-type", "application/json; charset=utf-8");
66
- res.setHeader("content-length", String(Buffer.byteLength(body)));
67
- res.end(body);
68
- }
69
- function respondNoContent(res) {
70
- res.statusCode = 204;
71
- res.setHeader("cache-control", "no-store");
72
- res.end();
73
- }
74
- function requestPath(req) {
75
- try {
76
- return new URL(req.url ?? "/", "http://placeholder").pathname;
77
- } catch {
78
- return void 0;
79
- }
80
- }
81
- async function readJson(req, maxBytes) {
82
- const chunks = [];
83
- let bytes = 0;
84
- for await (const chunk of req) {
85
- const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
86
- bytes += buffer.length;
87
- if (bytes > maxBytes) throw new Error("request_too_large");
88
- chunks.push(buffer);
89
- }
90
- return JSON.parse(Buffer.concat(chunks, bytes).toString("utf8"));
91
- }
92
- var SupportPassportModelBridge = class {
93
- route;
94
- requestHandler;
95
- maxPendingJobs;
96
- claimAckTimeoutMs;
97
- executionLeaseTimeoutMs;
98
- pending = /* @__PURE__ */ new Map();
99
- available = [];
100
- waiters = [];
101
- claimed = /* @__PURE__ */ new Set();
102
- lastConsumerPollAt = 0;
103
- closed = false;
104
- constructor(options = {}) {
105
- this.maxPendingJobs = options.maxPendingJobs ?? 32;
106
- this.claimAckTimeoutMs = options.claimAckTimeoutMs ?? 5e3;
107
- this.executionLeaseTimeoutMs = options.executionLeaseTimeoutMs ?? 15e3;
108
- if (!Number.isInteger(this.maxPendingJobs) || this.maxPendingJobs < 1) {
109
- throw new Error("maxPendingJobs must be a positive integer");
110
- }
111
- if (!Number.isInteger(this.claimAckTimeoutMs) || this.claimAckTimeoutMs < 1) {
112
- throw new Error("claimAckTimeoutMs must be a positive integer");
113
- }
114
- if (!Number.isInteger(this.executionLeaseTimeoutMs) || this.executionLeaseTimeoutMs < 1 || this.executionLeaseTimeoutMs > 12e4) {
115
- throw new Error("executionLeaseTimeoutMs must be an integer from 1 through 120000");
116
- }
117
- this.route = {
118
- kind: "gateway",
119
- invoke: (messages, invokeOptions) => this.invoke(messages, invokeOptions)
120
- };
121
- this.requestHandler = (req, res, ctx) => this.handleRequest(req, res, ctx.authorized, ctx.tokenAuthorized);
122
- }
123
- close() {
124
- if (this.closed) return;
125
- this.closed = true;
126
- for (const pending of this.pending.values()) pending.resolve(null);
127
- this.pending.clear();
128
- this.available.length = 0;
129
- this.claimed.clear();
130
- for (const waiter of this.waiters.splice(0)) waiter.resolve(null);
131
- }
132
- invoke(messages, options) {
133
- const consumerAvailable = this.waiters.length > 0 || this.claimed.size > 0 || Date.now() - this.lastConsumerPollAt <= CONSUMER_HANDOFF_GRACE_MS;
134
- if (!consumerAvailable || this.closed || this.pending.size >= this.maxPendingJobs || options.signal?.aborted) {
135
- return Promise.resolve(null);
136
- }
137
- const parsed = ModelJobSchema.safeParse({
138
- id: randomUUID(),
139
- messages,
140
- temperature: options.temperature,
141
- maxTokens: options.maxTokens,
142
- timeoutMs: options.timeoutMs,
143
- operation: options.operation,
144
- jsonSchema: options.jsonSchema
145
- });
146
- if (!parsed.success) return Promise.resolve(null);
147
- return new Promise((resolve) => {
148
- let settled = false;
149
- const deadlineAt = Date.now() + parsed.data.timeoutMs;
150
- const timeout = setTimeout(() => settle(null), parsed.data.timeoutMs);
151
- const settle = (result) => {
152
- if (settled) return;
153
- settled = true;
154
- clearTimeout(timeout);
155
- const pending = this.pending.get(parsed.data.id);
156
- if (pending?.claimTimer) clearTimeout(pending.claimTimer);
157
- this.pending.delete(parsed.data.id);
158
- this.claimed.delete(parsed.data.id);
159
- const availableIndex = this.available.indexOf(parsed.data.id);
160
- if (availableIndex >= 0) this.available.splice(availableIndex, 1);
161
- options.signal?.removeEventListener("abort", abort);
162
- resolve(result);
163
- };
164
- const abort = () => settle(null);
165
- const requeue = () => {
166
- const pending = this.pending.get(parsed.data.id);
167
- if (!pending || !this.claimed.delete(parsed.data.id)) return;
168
- if (pending.claimTimer) clearTimeout(pending.claimTimer);
169
- pending.claimTimer = void 0;
170
- pending.claimId = void 0;
171
- const waiter2 = this.waiters.shift();
172
- if (waiter2) {
173
- waiter2.resolve(this.claimPending(pending, waiter2.claimLease));
174
- } else {
175
- this.available.push(parsed.data.id);
176
- }
177
- };
178
- this.pending.set(parsed.data.id, {
179
- job: parsed.data,
180
- deadlineAt,
181
- resolve: settle,
182
- requeue
183
- });
184
- options.signal?.addEventListener("abort", abort, { once: true });
185
- const waiter = this.waiters.shift();
186
- if (waiter) {
187
- const pending = this.pending.get(parsed.data.id);
188
- waiter.resolve(pending ? this.claimPending(pending, waiter.claimLease) : null);
189
- } else this.available.push(parsed.data.id);
190
- });
191
- }
192
- claimedJob(job) {
193
- const pending = this.pending.get(job.id);
194
- if (!pending) return null;
195
- const remainingMs = pending.deadlineAt - Date.now();
196
- if (remainingMs <= 0) {
197
- pending.resolve(null);
198
- return null;
199
- }
200
- return { ...job, timeoutMs: remainingMs };
201
- }
202
- claimPending(pending, claimLease) {
203
- const job = this.claimedJob(pending.job);
204
- if (!job) return null;
205
- this.claimed.add(job.id);
206
- if (!claimLease) return job;
207
- const claimAckTimeoutMs = Math.min(this.claimAckTimeoutMs, job.timeoutMs);
208
- const executionLeaseTimeoutMs = Math.min(this.executionLeaseTimeoutMs, job.timeoutMs);
209
- pending.claimId = randomUUID();
210
- this.armClaimTimer(pending, claimAckTimeoutMs);
211
- return { ...job, claimId: pending.claimId, claimAckTimeoutMs, executionLeaseTimeoutMs };
212
- }
213
- armClaimTimer(pending, timeoutMs) {
214
- if (pending.claimTimer) clearTimeout(pending.claimTimer);
215
- pending.claimTimer = setTimeout(() => pending.requeue(), timeoutMs);
216
- pending.claimTimer.unref?.();
217
- }
218
- takeAvailable(claimLease) {
219
- for (; ; ) {
220
- const id = this.available.shift();
221
- if (!id) return null;
222
- const pending = this.pending.get(id);
223
- if (pending) {
224
- return this.claimPending(pending, claimLease);
225
- }
226
- }
227
- }
228
- nextJob(timeoutMs, signal, claimLease) {
229
- const available = this.takeAvailable(claimLease);
230
- if (available || this.closed || signal.aborted || timeoutMs === 0 || this.waiters.length >= this.maxPendingJobs) {
231
- return Promise.resolve(available);
232
- }
233
- return new Promise((resolve) => {
234
- let active = true;
235
- const done = (job) => {
236
- if (!active) return;
237
- active = false;
238
- clearTimeout(timeout);
239
- signal.removeEventListener("abort", abort);
240
- resolve(job);
241
- };
242
- const waiter = { claimLease, resolve: done };
243
- const abort = () => {
244
- const index = this.waiters.indexOf(waiter);
245
- if (index >= 0) this.waiters.splice(index, 1);
246
- done(null);
247
- };
248
- const timeout = setTimeout(() => {
249
- const index = this.waiters.indexOf(waiter);
250
- if (index >= 0) this.waiters.splice(index, 1);
251
- done(null);
252
- }, timeoutMs);
253
- signal.addEventListener("abort", abort, { once: true });
254
- this.waiters.push(waiter);
255
- });
256
- }
257
- async handleRequest(req, res, authorized, tokenAuthorized) {
258
- const pathname = requestPath(req);
259
- const owned = req.method === "POST" && (pathname === SUPPORT_PASSPORT_MODEL_JOB_PATH || pathname === SUPPORT_PASSPORT_MODEL_ACK_PATH || pathname === SUPPORT_PASSPORT_MODEL_RESULT_PATH);
260
- if (!owned) return false;
261
- if (!tokenAuthorized) {
262
- res.setHeader("www-authenticate", "Bearer");
263
- respondJson(res, 401, { error: "unauthorized", code: "unauthorized" });
264
- return true;
265
- }
266
- if (!authorized) {
267
- respondJson(res, 403, { error: "forbidden", code: "forbidden" });
268
- return true;
269
- }
270
- if (pathname === SUPPORT_PASSPORT_MODEL_JOB_PATH) {
271
- let timeoutMs = 2e4;
272
- let claimLease = false;
273
- try {
274
- const parsed = z.object({
275
- timeoutMs: z.number().int().min(0).max(25e3),
276
- claimLease: z.boolean().optional()
277
- }).strict().parse(await readJson(req, 1024));
278
- timeoutMs = parsed.timeoutMs;
279
- claimLease = parsed.claimLease === true;
280
- } catch {
281
- respondJson(res, 400, { error: "invalid_request", code: "invalid_request" });
282
- return true;
283
- }
284
- const controller = new AbortController();
285
- const abort = () => controller.abort();
286
- req.once("aborted", abort);
287
- res.once("close", abort);
288
- const job = await this.nextJob(timeoutMs, controller.signal, claimLease);
289
- req.off("aborted", abort);
290
- res.off("close", abort);
291
- if (res.destroyed) {
292
- if (job) this.pending.get(job.id)?.requeue();
293
- return true;
294
- }
295
- this.lastConsumerPollAt = Date.now();
296
- if (job) respondJson(res, 200, job);
297
- else if (this.closed) respondJson(res, 410, { error: "bridge_closed", code: "bridge_closed" });
298
- else respondNoContent(res);
299
- return true;
300
- }
301
- if (pathname === SUPPORT_PASSPORT_MODEL_ACK_PATH) {
302
- try {
303
- const parsed = ModelClaimSchema.parse(await readJson(req, 1024));
304
- const pending = this.pending.get(parsed.id);
305
- if (!pending || !this.claimed.has(parsed.id) || pending.claimId !== parsed.claimId) {
306
- respondJson(res, 404, { error: "job_not_found", code: "job_not_found" });
307
- return true;
308
- }
309
- const remainingMs = pending.deadlineAt - Date.now();
310
- if (remainingMs <= 0) {
311
- pending.resolve(null);
312
- respondJson(res, 404, { error: "job_not_found", code: "job_not_found" });
313
- return true;
314
- }
315
- this.armClaimTimer(pending, Math.min(this.executionLeaseTimeoutMs, remainingMs));
316
- respondNoContent(res);
317
- } catch {
318
- respondJson(res, 400, { error: "invalid_request", code: "invalid_request" });
319
- }
320
- return true;
321
- }
322
- try {
323
- const parsed = ModelResultSchema.parse(await readJson(req, 3e5));
324
- const pending = this.pending.get(parsed.id);
325
- if (!pending || !this.claimed.has(parsed.id) || pending.claimId !== void 0 && pending.claimId !== parsed.claimId) {
326
- respondJson(res, 404, { error: "job_not_found", code: "job_not_found" });
327
- return true;
328
- }
329
- this.lastConsumerPollAt = Date.now();
330
- pending.resolve(parsed.result);
331
- respondNoContent(res);
332
- } catch {
333
- respondJson(res, 400, { error: "invalid_request", code: "invalid_request" });
334
- }
335
- return true;
336
- }
337
- };
338
-
339
- export {
340
- SUPPORT_PASSPORT_MODEL_JOB_PATH,
341
- SUPPORT_PASSPORT_MODEL_ACK_PATH,
342
- SUPPORT_PASSPORT_MODEL_RESULT_PATH,
343
- parseSupportPassportModelJob,
344
- SupportPassportModelBridge
345
- };
346
- //# sourceMappingURL=chunk-XICOH5HT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/support-passport/model-bridge.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { z } from \"zod\";\n\nimport { SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH } from \"./contracts.js\";\nimport type {\n SupportPassportModelMessage,\n SupportPassportModelRoute,\n SupportPassportModelRouteResult,\n} from \"./model-adapter.js\";\nimport {\n SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,\n SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES,\n} from \"./model-contracts.js\";\nimport type { SupportPassportExternalRequestHandler } from \"./public-http.js\";\n\nexport const SUPPORT_PASSPORT_MODEL_JOB_PATH = \"/engram/v1/support-passport/internal/model/jobs/next\";\nexport const SUPPORT_PASSPORT_MODEL_ACK_PATH = \"/engram/v1/support-passport/internal/model/jobs/ack\";\nexport const SUPPORT_PASSPORT_MODEL_RESULT_PATH = \"/engram/v1/support-passport/internal/model/jobs/result\";\n\nconst CONSUMER_HANDOFF_GRACE_MS = 1_000;\nconst MAX_JSON_STRING_EXPANSION = 6;\nconst MAX_DRAFT_MESSAGE_STRUCTURE = JSON.stringify({\n sourceNotes: Array.from({ length: SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES }, () => ({ memoryId: \"\", content: \"\" })),\n}).length;\nconst MAX_MODEL_MESSAGE_CHARACTERS =\n MAX_DRAFT_MESSAGE_STRUCTURE +\n MAX_JSON_STRING_EXPANSION *\n (SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS +\n SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES * SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH);\n\nconst ModelMessageSchema = z\n .object({\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n content: z.string().max(MAX_MODEL_MESSAGE_CHARACTERS),\n })\n .strict();\n\nconst ModelJobSchema = z\n .object({\n id: z.string().uuid(),\n claimId: z.string().uuid().optional(),\n messages: z.array(ModelMessageSchema).min(1).max(8),\n temperature: z.number().finite().min(0).max(2),\n maxTokens: z.number().int().min(1).max(32_000),\n timeoutMs: z.number().int().min(1).max(120_000),\n claimAckTimeoutMs: z.number().int().min(1).max(120_000).optional(),\n executionLeaseTimeoutMs: z.number().int().min(1).max(120_000).optional(),\n operation: z.enum([\"support-passport-draft\", \"support-passport-answer\"]),\n jsonSchema: z\n .object({\n name: z.string().min(1).max(128),\n schema: z.record(z.string(), z.unknown()),\n })\n .strict(),\n })\n .strict();\n\nexport type SupportPassportModelJob = z.infer<typeof ModelJobSchema>;\n\nexport function parseSupportPassportModelJob(value: unknown): SupportPassportModelJob | undefined {\n const parsed = ModelJobSchema.safeParse(value);\n return parsed.success ? parsed.data : undefined;\n}\n\nconst ModelResultSchema = z\n .object({\n id: z.string().uuid(),\n claimId: z.string().uuid().optional(),\n result: z\n .object({\n content: z.string().max(250_000),\n modelUsed: z.string().min(1).max(512),\n usage: z\n .object({\n inputTokens: z.number().int().nonnegative().optional(),\n outputTokens: z.number().int().nonnegative().optional(),\n totalTokens: z.number().int().nonnegative().optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n .nullable(),\n })\n .strict();\n\nconst ModelClaimSchema = z\n .object({\n id: z.string().uuid(),\n claimId: z.string().uuid(),\n })\n .strict();\n\ninterface PendingJob {\n job: SupportPassportModelJob;\n deadlineAt: number;\n claimId?: string;\n claimTimer?: ReturnType<typeof setTimeout>;\n resolve: (result: SupportPassportModelRouteResult | null) => void;\n requeue(): void;\n}\n\ninterface PendingWaiter {\n claimLease: boolean;\n resolve(job: SupportPassportModelJob | null): void;\n}\n\nexport interface SupportPassportModelBridgeOptions {\n maxPendingJobs?: number;\n claimAckTimeoutMs?: number;\n executionLeaseTimeoutMs?: number;\n}\n\nfunction respondJson(res: ServerResponse, status: number, payload: unknown): void {\n const body = JSON.stringify(payload);\n res.statusCode = status;\n res.setHeader(\"cache-control\", \"no-store\");\n res.setHeader(\"content-type\", \"application/json; charset=utf-8\");\n res.setHeader(\"content-length\", String(Buffer.byteLength(body)));\n res.end(body);\n}\n\nfunction respondNoContent(res: ServerResponse): void {\n res.statusCode = 204;\n res.setHeader(\"cache-control\", \"no-store\");\n res.end();\n}\n\nfunction requestPath(req: IncomingMessage): string | undefined {\n try {\n return new URL(req.url ?? \"/\", \"http://placeholder\").pathname;\n } catch {\n return undefined;\n }\n}\n\nasync function readJson(req: IncomingMessage, maxBytes: number): Promise<unknown> {\n const chunks: Buffer[] = [];\n let bytes = 0;\n for await (const chunk of req) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n bytes += buffer.length;\n if (bytes > maxBytes) throw new Error(\"request_too_large\");\n chunks.push(buffer);\n }\n return JSON.parse(Buffer.concat(chunks, bytes).toString(\"utf8\"));\n}\n\n/**\n * In-memory transport between a standalone Remnic daemon and its OpenClaw\n * delegate. The transport carries provider-neutral model jobs only.\n */\nexport class SupportPassportModelBridge {\n readonly route: SupportPassportModelRoute;\n readonly requestHandler: SupportPassportExternalRequestHandler;\n\n private readonly maxPendingJobs: number;\n private readonly claimAckTimeoutMs: number;\n private readonly executionLeaseTimeoutMs: number;\n private readonly pending = new Map<string, PendingJob>();\n private readonly available: string[] = [];\n private readonly waiters: PendingWaiter[] = [];\n private readonly claimed = new Set<string>();\n private lastConsumerPollAt = 0;\n private closed = false;\n\n constructor(options: SupportPassportModelBridgeOptions = {}) {\n this.maxPendingJobs = options.maxPendingJobs ?? 32;\n this.claimAckTimeoutMs = options.claimAckTimeoutMs ?? 5_000;\n this.executionLeaseTimeoutMs = options.executionLeaseTimeoutMs ?? 15_000;\n if (!Number.isInteger(this.maxPendingJobs) || this.maxPendingJobs < 1) {\n throw new Error(\"maxPendingJobs must be a positive integer\");\n }\n if (!Number.isInteger(this.claimAckTimeoutMs) || this.claimAckTimeoutMs < 1) {\n throw new Error(\"claimAckTimeoutMs must be a positive integer\");\n }\n if (\n !Number.isInteger(this.executionLeaseTimeoutMs) ||\n this.executionLeaseTimeoutMs < 1 ||\n this.executionLeaseTimeoutMs > 120_000\n ) {\n throw new Error(\"executionLeaseTimeoutMs must be an integer from 1 through 120000\");\n }\n this.route = {\n kind: \"gateway\",\n invoke: (messages, invokeOptions) => this.invoke(messages, invokeOptions),\n };\n this.requestHandler = (req, res, ctx) => this.handleRequest(req, res, ctx.authorized, ctx.tokenAuthorized);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const pending of this.pending.values()) pending.resolve(null);\n this.pending.clear();\n this.available.length = 0;\n this.claimed.clear();\n for (const waiter of this.waiters.splice(0)) waiter.resolve(null);\n }\n\n private invoke(\n messages: SupportPassportModelMessage[],\n options: Parameters<SupportPassportModelRoute[\"invoke\"]>[1]\n ): Promise<SupportPassportModelRouteResult | null> {\n const consumerAvailable =\n this.waiters.length > 0 ||\n this.claimed.size > 0 ||\n Date.now() - this.lastConsumerPollAt <= CONSUMER_HANDOFF_GRACE_MS;\n if (!consumerAvailable || this.closed || this.pending.size >= this.maxPendingJobs || options.signal?.aborted) {\n return Promise.resolve(null);\n }\n const parsed = ModelJobSchema.safeParse({\n id: randomUUID(),\n messages,\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n timeoutMs: options.timeoutMs,\n operation: options.operation,\n jsonSchema: options.jsonSchema,\n });\n if (!parsed.success) return Promise.resolve(null);\n return new Promise((resolve) => {\n let settled = false;\n const deadlineAt = Date.now() + parsed.data.timeoutMs;\n const timeout = setTimeout(() => settle(null), parsed.data.timeoutMs);\n const settle = (result: SupportPassportModelRouteResult | null): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n const pending = this.pending.get(parsed.data.id);\n if (pending?.claimTimer) clearTimeout(pending.claimTimer);\n this.pending.delete(parsed.data.id);\n this.claimed.delete(parsed.data.id);\n const availableIndex = this.available.indexOf(parsed.data.id);\n if (availableIndex >= 0) this.available.splice(availableIndex, 1);\n options.signal?.removeEventListener(\"abort\", abort);\n resolve(result);\n };\n const abort = (): void => settle(null);\n const requeue = (): void => {\n const pending = this.pending.get(parsed.data.id);\n if (!pending || !this.claimed.delete(parsed.data.id)) return;\n if (pending.claimTimer) clearTimeout(pending.claimTimer);\n pending.claimTimer = undefined;\n pending.claimId = undefined;\n const waiter = this.waiters.shift();\n if (waiter) {\n waiter.resolve(this.claimPending(pending, waiter.claimLease));\n } else {\n this.available.push(parsed.data.id);\n }\n };\n this.pending.set(parsed.data.id, {\n job: parsed.data,\n deadlineAt,\n resolve: settle,\n requeue,\n });\n options.signal?.addEventListener(\"abort\", abort, { once: true });\n const waiter = this.waiters.shift();\n if (waiter) {\n const pending = this.pending.get(parsed.data.id);\n waiter.resolve(pending ? this.claimPending(pending, waiter.claimLease) : null);\n } else this.available.push(parsed.data.id);\n });\n }\n\n private claimedJob(job: SupportPassportModelJob): SupportPassportModelJob | null {\n const pending = this.pending.get(job.id);\n if (!pending) return null;\n const remainingMs = pending.deadlineAt - Date.now();\n if (remainingMs <= 0) {\n pending.resolve(null);\n return null;\n }\n return { ...job, timeoutMs: remainingMs };\n }\n\n private claimPending(pending: PendingJob, claimLease: boolean): SupportPassportModelJob | null {\n const job = this.claimedJob(pending.job);\n if (!job) return null;\n this.claimed.add(job.id);\n if (!claimLease) return job;\n const claimAckTimeoutMs = Math.min(this.claimAckTimeoutMs, job.timeoutMs);\n const executionLeaseTimeoutMs = Math.min(this.executionLeaseTimeoutMs, job.timeoutMs);\n pending.claimId = randomUUID();\n this.armClaimTimer(pending, claimAckTimeoutMs);\n return { ...job, claimId: pending.claimId, claimAckTimeoutMs, executionLeaseTimeoutMs };\n }\n\n private armClaimTimer(pending: PendingJob, timeoutMs: number): void {\n if (pending.claimTimer) clearTimeout(pending.claimTimer);\n pending.claimTimer = setTimeout(() => pending.requeue(), timeoutMs);\n pending.claimTimer.unref?.();\n }\n\n private takeAvailable(claimLease: boolean): SupportPassportModelJob | null {\n for (;;) {\n const id = this.available.shift();\n if (!id) return null;\n const pending = this.pending.get(id);\n if (pending) {\n return this.claimPending(pending, claimLease);\n }\n }\n }\n\n private nextJob(\n timeoutMs: number,\n signal: AbortSignal,\n claimLease: boolean\n ): Promise<SupportPassportModelJob | null> {\n const available = this.takeAvailable(claimLease);\n if (available || this.closed || signal.aborted || timeoutMs === 0 || this.waiters.length >= this.maxPendingJobs) {\n return Promise.resolve(available);\n }\n return new Promise((resolve) => {\n let active = true;\n const done = (job: SupportPassportModelJob | null): void => {\n if (!active) return;\n active = false;\n clearTimeout(timeout);\n signal.removeEventListener(\"abort\", abort);\n resolve(job);\n };\n const waiter: PendingWaiter = { claimLease, resolve: done };\n const abort = (): void => {\n const index = this.waiters.indexOf(waiter);\n if (index >= 0) this.waiters.splice(index, 1);\n done(null);\n };\n const timeout = setTimeout(() => {\n const index = this.waiters.indexOf(waiter);\n if (index >= 0) this.waiters.splice(index, 1);\n done(null);\n }, timeoutMs);\n signal.addEventListener(\"abort\", abort, { once: true });\n this.waiters.push(waiter);\n });\n }\n\n private async handleRequest(\n req: IncomingMessage,\n res: ServerResponse,\n authorized: boolean,\n tokenAuthorized: boolean\n ): Promise<boolean> {\n const pathname = requestPath(req);\n const owned =\n req.method === \"POST\" &&\n (pathname === SUPPORT_PASSPORT_MODEL_JOB_PATH ||\n pathname === SUPPORT_PASSPORT_MODEL_ACK_PATH ||\n pathname === SUPPORT_PASSPORT_MODEL_RESULT_PATH);\n if (!owned) return false;\n if (!tokenAuthorized) {\n res.setHeader(\"www-authenticate\", \"Bearer\");\n respondJson(res, 401, { error: \"unauthorized\", code: \"unauthorized\" });\n return true;\n }\n if (!authorized) {\n respondJson(res, 403, { error: \"forbidden\", code: \"forbidden\" });\n return true;\n }\n if (pathname === SUPPORT_PASSPORT_MODEL_JOB_PATH) {\n let timeoutMs = 20_000;\n let claimLease = false;\n try {\n const parsed = z\n .object({\n timeoutMs: z.number().int().min(0).max(25_000),\n claimLease: z.boolean().optional(),\n })\n .strict()\n .parse(await readJson(req, 1_024));\n timeoutMs = parsed.timeoutMs;\n claimLease = parsed.claimLease === true;\n } catch {\n respondJson(res, 400, { error: \"invalid_request\", code: \"invalid_request\" });\n return true;\n }\n const controller = new AbortController();\n const abort = (): void => controller.abort();\n req.once(\"aborted\", abort);\n res.once(\"close\", abort);\n const job = await this.nextJob(timeoutMs, controller.signal, claimLease);\n req.off(\"aborted\", abort);\n res.off(\"close\", abort);\n if (res.destroyed) {\n if (job) this.pending.get(job.id)?.requeue();\n return true;\n }\n this.lastConsumerPollAt = Date.now();\n if (job) respondJson(res, 200, job);\n else if (this.closed) respondJson(res, 410, { error: \"bridge_closed\", code: \"bridge_closed\" });\n else respondNoContent(res);\n return true;\n }\n if (pathname === SUPPORT_PASSPORT_MODEL_ACK_PATH) {\n try {\n const parsed = ModelClaimSchema.parse(await readJson(req, 1_024));\n const pending = this.pending.get(parsed.id);\n if (!pending || !this.claimed.has(parsed.id) || pending.claimId !== parsed.claimId) {\n respondJson(res, 404, { error: \"job_not_found\", code: \"job_not_found\" });\n return true;\n }\n const remainingMs = pending.deadlineAt - Date.now();\n if (remainingMs <= 0) {\n pending.resolve(null);\n respondJson(res, 404, { error: \"job_not_found\", code: \"job_not_found\" });\n return true;\n }\n this.armClaimTimer(pending, Math.min(this.executionLeaseTimeoutMs, remainingMs));\n respondNoContent(res);\n } catch {\n respondJson(res, 400, { error: \"invalid_request\", code: \"invalid_request\" });\n }\n return true;\n }\n try {\n const parsed = ModelResultSchema.parse(await readJson(req, 300_000));\n const pending = this.pending.get(parsed.id);\n if (\n !pending ||\n !this.claimed.has(parsed.id) ||\n (pending.claimId !== undefined && pending.claimId !== parsed.claimId)\n ) {\n respondJson(res, 404, { error: \"job_not_found\", code: \"job_not_found\" });\n return true;\n }\n this.lastConsumerPollAt = Date.now();\n pending.resolve(parsed.result);\n respondNoContent(res);\n } catch {\n respondJson(res, 400, { error: \"invalid_request\", code: \"invalid_request\" });\n }\n return true;\n }\n}\n"],"mappings":"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","names":["waiter"]}
@@ -1 +0,0 @@
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 ?? {}).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\n/**\n * Stat identity a persisted exclusion classification is keyed on. Any content\n * change rewrites the file, which moves ctime, so a matching identity implies\n * the same bytes and therefore the same classification.\n */\nexport function supportPassportStatIdentity(file: {\n dev: number;\n ino: number;\n size: number;\n mtimeMs: number;\n ctimeMs: number;\n}): string {\n return `${file.dev}:${file.ino}:${file.size}:${file.mtimeMs}:${file.ctimeMs}`;\n}\n\nexport interface PersistedSupportPassportClassification {\n statIdentity: string;\n excluded: boolean;\n}\n\n/**\n * `createSupportPassportPrivateFileExclusion` variant that consults a\n * PERSISTED classification before touching the file. The plain factory\n * classifies by reading and parsing every candidate (readMemoryByPath), which\n * is fine once per process but defeats any persisted-parse optimization: a\n * warm reconcile plan that should skip per-file reads would still read every\n * file just to decide exclusion. When the persisted stat identity matches, the\n * classification is reused and the file is not opened; on mismatch it is\n * recomputed once and recorded into `updates` so the caller can persist it.\n */\nexport function createPersistedSupportPassportPrivateFileExclusion(\n storage: {\n readMemoryByPath(filePath: string): Promise<MemoryFile | null>;\n },\n persisted: ReadonlyMap<string, { statIdentity?: string; excluded?: boolean }>,\n updates: Map<string, PersistedSupportPassportClassification>\n): OfflineSyncExcludeFile {\n const inFlight = new Map<string, { identity: string; excluded: Promise<boolean> }>();\n return async ({ filePath, path: relPath }) => {\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 inFlight.delete(filePath);\n return false;\n }\n throw error;\n }\n const identity = supportPassportStatIdentity(file);\n const known = persisted.get(relPath);\n if (known?.statIdentity === identity && known.excluded !== undefined) {\n updates.set(relPath, { statIdentity: identity, excluded: known.excluded });\n return known.excluded;\n }\n const cached = inFlight.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 .finally(() => {\n if (inFlight.get(filePath)?.identity === identity) inFlight.delete(filePath);\n });\n inFlight.set(filePath, { identity, excluded });\n const result = await excluded;\n updates.set(relPath, { statIdentity: identity, excluded: result });\n return result;\n };\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(memory: Pick<MemoryFile, \"frontmatter\">): 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 (!attributes || frontmatter.blockedBy || frontmatter.archivedAt || frontmatter.supersededBy) return null;\n\n const category = SupportPassportCardCategorySchema.safeParse(attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.category]);\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 = attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.replacesDraftId];\n if (rawReplacesDraftId !== undefined) {\n const parsedReplacesDraftId = SupportPassportMemoryIdSchema.safeParse(rawReplacesDraftId);\n if (!parsedReplacesDraftId.success) return null;\n replacesDraftId = parsedReplacesDraftId.data;\n }\n let replacedRevision: string | undefined;\n const rawReplacedRevision = 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 (typeof rawGeneratedBatchSize !== \"string\" || !/^[1-8]$/.test(rawGeneratedBatchSize)) {\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: attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.draftReplacementPrepared] === \"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(memory: MemoryFile): 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"]}