@remnic/core 9.54.4 → 9.54.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (648) hide show
  1. package/dist/access-admin-ops-surface.d.ts +24 -23
  2. package/dist/access-admin-ops-surface.js +55 -50
  3. package/dist/access-authorization-probe.d.ts +25 -22
  4. package/dist/access-authorization-probe.js +58 -51
  5. package/dist/access-boundary.d.ts +26 -23
  6. package/dist/access-boundary.js +59 -52
  7. package/dist/access-cli.js +115 -107
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +19 -18
  11. package/dist/access-extraction-force-flush.js +55 -50
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +22 -21
  14. package/dist/access-http-lifecycle-flush.d.ts +22 -21
  15. package/dist/access-http-offline-stream.d.ts +19 -18
  16. package/dist/access-http-query.js +55 -50
  17. package/dist/access-http.d.ts +55 -36
  18. package/dist/access-http.js +76 -65
  19. package/dist/access-identity-continuity-surface.d.ts +9 -9
  20. package/dist/access-identity-continuity-surface.js +55 -50
  21. package/dist/access-lcm-surface.d.ts +21 -20
  22. package/dist/access-lcm-surface.js +55 -50
  23. package/dist/access-mcp.d.ts +22 -21
  24. package/dist/access-mcp.js +63 -57
  25. package/dist/access-memory-search-fanout.d.ts +22 -2
  26. package/dist/access-memory-search-fanout.js +1 -1
  27. package/dist/{access-namespace-preflight-C7n4tgWC.d.ts → access-namespace-preflight-CCNn_6NE.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +55 -50
  30. package/dist/access-observe-write-surface.d.ts +22 -21
  31. package/dist/access-observe-write-surface.js +55 -50
  32. package/dist/access-offline-manifest.d.ts +10 -9
  33. package/dist/access-offline-manifest.js +12 -10
  34. package/dist/access-operations-batch.js +57 -52
  35. package/dist/access-operations.d.ts +23 -22
  36. package/dist/access-operations.js +61 -55
  37. package/dist/access-recall-concurrency.d.ts +21 -20
  38. package/dist/access-recall-concurrency.js +55 -50
  39. package/dist/access-recall-response.d.ts +19 -18
  40. package/dist/access-recall-response.js +55 -50
  41. package/dist/access-recall-surface.d.ts +19 -18
  42. package/dist/access-recall-surface.js +55 -50
  43. package/dist/access-schema.d.ts +2 -2
  44. package/dist/access-schema.js +5 -4
  45. package/dist/{access-service-CXvbxLK-.d.ts → access-service-DkSdXK4S.d.ts} +1314 -83
  46. package/dist/access-service-helpers.d.ts +22 -21
  47. package/dist/access-service.d.ts +31 -30
  48. package/dist/access-service.js +55 -50
  49. package/dist/access-surface-catalog.d.ts +22 -21
  50. package/dist/access-surface-catalog.js +209 -2
  51. package/dist/access-surface-catalog.js.map +1 -1
  52. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  53. package/dist/action-confidence.d.ts +1 -1
  54. package/dist/active-memory-bridge.d.ts +14 -1
  55. package/dist/active-memory-bridge.js +6 -1
  56. package/dist/active-recall.d.ts +1 -1
  57. package/dist/active-recall.js +4 -2
  58. package/dist/active-recall.js.map +1 -1
  59. package/dist/adapters/index.js +7 -7
  60. package/dist/adapters/registry.js +3 -3
  61. package/dist/admin-console/public/what-helps-me/app.js +1594 -0
  62. package/dist/admin-console/public/what-helps-me/index.html +339 -0
  63. package/dist/admin-console/public/what-helps-me/model.js +685 -0
  64. package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
  65. package/dist/ambient-provenance.d.ts +1 -1
  66. package/dist/artifact-search.d.ts +1 -1
  67. package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
  68. package/dist/behavior-learner.d.ts +1 -1
  69. package/dist/behavior-signals.d.ts +1 -1
  70. package/dist/bootstrap.d.ts +9 -9
  71. package/dist/briefing.d.ts +2 -2
  72. package/dist/briefing.js +33 -12
  73. package/dist/buffer-surprise-report.d.ts +1 -1
  74. package/dist/buffer-turn-helpers.d.ts +1 -1
  75. package/dist/buffer.d.ts +2 -2
  76. package/dist/buffer.js +3 -3
  77. package/dist/bulk-import/index.d.ts +3 -3
  78. package/dist/calibration.d.ts +1 -1
  79. package/dist/calibration.js +1 -1
  80. package/dist/capabilities.d.ts +1 -1
  81. package/dist/{catalog-BOOxl-I2.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
  82. package/dist/causal-behavior.d.ts +1 -1
  83. package/dist/causal-consolidation.d.ts +1 -1
  84. package/dist/causal-consolidation.js +34 -13
  85. package/dist/causal-consolidation.js.map +1 -1
  86. package/dist/causal-trajectory-graph.d.ts +1 -1
  87. package/dist/{chunk-ZYLC7NFO.js → chunk-26ZXBTYN.js} +4 -4
  88. package/dist/chunk-26ZXBTYN.js.map +1 -0
  89. package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
  90. package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
  91. package/dist/chunk-2LWQSV6A.js.map +1 -0
  92. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  93. package/dist/chunk-37DZZFFM.js +502 -0
  94. package/dist/chunk-37DZZFFM.js.map +1 -0
  95. package/dist/chunk-3HSRWJTC.js +9 -0
  96. package/dist/chunk-3HSRWJTC.js.map +1 -0
  97. package/dist/{chunk-XUAMCLY4.js → chunk-3TIZPSJC.js} +17 -13
  98. package/dist/chunk-3TIZPSJC.js.map +1 -0
  99. package/dist/{chunk-PDDTI7IC.js → chunk-43SEBY2M.js} +1 -1
  100. package/dist/{chunk-HWRD23DW.js → chunk-46SZBVDS.js} +3 -3
  101. package/dist/{chunk-6HPHEFXT.js → chunk-5FD7JMTX.js} +2 -2
  102. package/dist/{chunk-7BZOBA5J.js → chunk-5NB726GV.js} +70 -16
  103. package/dist/chunk-5NB726GV.js.map +1 -0
  104. package/dist/chunk-62OKGIJA.js +39 -0
  105. package/dist/chunk-62OKGIJA.js.map +1 -0
  106. package/dist/{chunk-IBKR2TFR.js → chunk-6CYHUWCO.js} +2 -2
  107. package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
  108. package/dist/{chunk-UU3G6GUP.js → chunk-76JJSXK7.js} +1 -1
  109. package/dist/chunk-76JJSXK7.js.map +1 -0
  110. package/dist/{chunk-PX2LSHYM.js → chunk-7BD6O7ZV.js} +189 -4
  111. package/dist/chunk-7BD6O7ZV.js.map +1 -0
  112. package/dist/chunk-7TBXNYLO.js +346 -0
  113. package/dist/chunk-7TBXNYLO.js.map +1 -0
  114. package/dist/{chunk-NH5IR2WM.js → chunk-BRR5EUTF.js} +6 -2
  115. package/dist/chunk-BRR5EUTF.js.map +1 -0
  116. package/dist/{chunk-NIS256NW.js → chunk-CIAI24TQ.js} +3 -3
  117. package/dist/{chunk-T2JHZWH6.js → chunk-D3LBIUWV.js} +11703 -7573
  118. package/dist/chunk-D3LBIUWV.js.map +1 -0
  119. package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
  120. package/dist/{chunk-G7Z6EENO.js → chunk-EKTP7MNS.js} +4 -4
  121. package/dist/{chunk-S75M5ZRK.js → chunk-F2JRDPON.js} +16 -1
  122. package/dist/chunk-F2JRDPON.js.map +1 -0
  123. package/dist/{chunk-RZ4XGKOJ.js → chunk-FFRTNF3L.js} +8 -8
  124. package/dist/{chunk-VKXWK44Q.js → chunk-FONWBCVY.js} +3 -3
  125. package/dist/{chunk-DZD576ZU.js → chunk-FPLM2TKD.js} +2 -2
  126. package/dist/{chunk-ZPJ4QSGP.js → chunk-FTPONF6B.js} +2 -2
  127. package/dist/{chunk-LJS7KUPV.js → chunk-FWX7W5PM.js} +2 -2
  128. package/dist/{chunk-UTRO5UJU.js → chunk-G6DFSS6A.js} +5 -1
  129. package/dist/chunk-G6DFSS6A.js.map +1 -0
  130. package/dist/{chunk-6LAPLZOS.js → chunk-GJ776BC2.js} +8 -3
  131. package/dist/chunk-GJ776BC2.js.map +1 -0
  132. package/dist/{chunk-G4T7L557.js → chunk-GN3WRFJY.js} +6 -6
  133. package/dist/{chunk-QT2FRYI4.js → chunk-H7NAZ3UB.js} +2 -2
  134. package/dist/{chunk-APPFNGX6.js → chunk-HBUFQRIM.js} +2 -2
  135. package/dist/{chunk-UU7TRFNE.js → chunk-HGJ6NJ4E.js} +2 -2
  136. package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
  137. package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
  138. package/dist/{chunk-UES4BHA2.js → chunk-I3MSGFGD.js} +17 -6
  139. package/dist/chunk-I3MSGFGD.js.map +1 -0
  140. package/dist/{chunk-C4ZNGVK3.js → chunk-IKP5OYQQ.js} +2 -2
  141. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  142. package/dist/{chunk-RDJRFDJY.js → chunk-IQ4NVWEF.js} +2 -2
  143. package/dist/{chunk-CGVHPCP2.js → chunk-JYG4OLWH.js} +2 -2
  144. package/dist/{chunk-WOPA3SGI.js → chunk-K26NWEOC.js} +8 -8
  145. package/dist/{chunk-K4QS7LXU.js → chunk-K2UGPTYY.js} +485 -44
  146. package/dist/chunk-K2UGPTYY.js.map +1 -0
  147. package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
  148. package/dist/chunk-KFBOPMF6.js.map +1 -0
  149. package/dist/{chunk-G7A5HLUS.js → chunk-KJH6W2I7.js} +2 -2
  150. package/dist/{chunk-IXEBUYO4.js → chunk-KM55SMLG.js} +11 -2
  151. package/dist/{chunk-IXEBUYO4.js.map → chunk-KM55SMLG.js.map} +1 -1
  152. package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
  153. package/dist/chunk-LC2BDILZ.js +57 -0
  154. package/dist/chunk-LC2BDILZ.js.map +1 -0
  155. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  156. package/dist/{chunk-6R4G7N4S.js → chunk-M4YHAODQ.js} +388 -748
  157. package/dist/chunk-M4YHAODQ.js.map +1 -0
  158. package/dist/{chunk-3JLPGJ43.js → chunk-MIH3CJPN.js} +5 -5
  159. package/dist/{chunk-QHFV6VNU.js → chunk-MK5VEWCR.js} +2 -2
  160. package/dist/chunk-NISZQW72.js +140 -0
  161. package/dist/chunk-NISZQW72.js.map +1 -0
  162. package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
  163. package/dist/{chunk-G2LUMAUF.js → chunk-OCIP6YMD.js} +12 -5
  164. package/dist/chunk-OCIP6YMD.js.map +1 -0
  165. package/dist/{chunk-47P3RYZP.js → chunk-PG4QBPVG.js} +21 -11
  166. package/dist/chunk-PG4QBPVG.js.map +1 -0
  167. package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
  168. package/dist/{chunk-QWGE2PUH.js → chunk-PT54WISF.js} +190 -56
  169. package/dist/chunk-PT54WISF.js.map +1 -0
  170. package/dist/{chunk-AZM4CCAC.js → chunk-QZLDRQ4I.js} +8 -8
  171. package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
  172. package/dist/{chunk-JDZPNCMA.js → chunk-RUNORG2P.js} +6 -3
  173. package/dist/chunk-RUNORG2P.js.map +1 -0
  174. package/dist/{chunk-JV5YUBIZ.js → chunk-RZQ6W2W4.js} +50 -44
  175. package/dist/chunk-RZQ6W2W4.js.map +1 -0
  176. package/dist/{chunk-RUMNY5DT.js → chunk-SMNYAMJD.js} +6 -2
  177. package/dist/chunk-SMNYAMJD.js.map +1 -0
  178. package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
  179. package/dist/chunk-TB6CBZ5V.js.map +1 -0
  180. package/dist/{chunk-VMMQDEN5.js → chunk-TO7ZTWJW.js} +2 -2
  181. package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
  182. package/dist/{chunk-HLYR2TQL.js → chunk-UCTS3DDH.js} +2 -2
  183. package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
  184. package/dist/{chunk-WM65LU67.js → chunk-UKYS3NU5.js} +2 -2
  185. package/dist/{chunk-WDBX6VER.js → chunk-UPLZNJKN.js} +5 -5
  186. package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
  187. package/dist/chunk-UW5NPZJ2.js.map +1 -0
  188. package/dist/{chunk-2GFK22OZ.js → chunk-V6ERBR7U.js} +2 -2
  189. package/dist/{chunk-CYF6WVE7.js → chunk-W5ZKPI34.js} +139 -158
  190. package/dist/chunk-W5ZKPI34.js.map +1 -0
  191. package/dist/chunk-XX4HPFFM.js +370 -0
  192. package/dist/chunk-XX4HPFFM.js.map +1 -0
  193. package/dist/{chunk-ZMYDYNI4.js → chunk-XZHE2DEN.js} +4 -4
  194. package/dist/chunk-YXQEKCZM.js +223 -0
  195. package/dist/chunk-YXQEKCZM.js.map +1 -0
  196. package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
  197. package/dist/chunk-Z4N7SVVF.js.map +1 -0
  198. package/dist/{chunk-MAXVH44E.js → chunk-Z54EM5YZ.js} +7 -7
  199. package/dist/{chunk-YGLY6QFV.js → chunk-ZRZVLB7O.js} +2 -2
  200. package/dist/{chunk-4IIFL7GC.js → chunk-ZUKIUXHQ.js} +10 -10
  201. package/dist/{cli-DVUFIa5E.d.ts → cli-Bze8S0Qs.d.ts} +5 -5
  202. package/dist/cli.d.ts +22 -21
  203. package/dist/cli.js +90 -80
  204. package/dist/coding/pre-action-gate.d.ts +1 -1
  205. package/dist/compounding/engine.d.ts +2 -2
  206. package/dist/compounding/engine.js +33 -12
  207. package/dist/compounding/preference-consolidator.d.ts +1 -1
  208. package/dist/compression-optimizer.d.ts +1 -1
  209. package/dist/config.d.ts +1 -1
  210. package/dist/config.js +4 -2
  211. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  212. package/dist/connectors/codex-materialize-runner.js +33 -12
  213. package/dist/connectors/codex-materialize.d.ts +1 -1
  214. package/dist/connectors/index.d.ts +1 -1
  215. package/dist/connectors/index.js +32 -12
  216. package/dist/consolidation-provenance-check.d.ts +2 -2
  217. package/dist/consolidation-undo.d.ts +2 -2
  218. package/dist/contradiction/index.d.ts +2 -2
  219. package/dist/contradiction/index.js +3 -1
  220. package/dist/contradiction-scan-JDTBXRGW.js +20 -0
  221. package/dist/converge-config.d.ts +1 -1
  222. package/dist/convergence-refresh.d.ts +2 -2
  223. package/dist/convergence-refresh.js +35 -14
  224. package/dist/conversation-index/backend.d.ts +1 -1
  225. package/dist/conversation-index/backend.js +2 -2
  226. package/dist/conversation-index/chunker.d.ts +1 -1
  227. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  228. package/dist/conversation-index/indexer.d.ts +1 -1
  229. package/dist/conversation-index/search.d.ts +1 -1
  230. package/dist/corpus-watermark.d.ts +1 -1
  231. package/dist/corpus-watermark.js +25 -24
  232. package/dist/day-summary.d.ts +1 -1
  233. package/dist/delinearize.d.ts +1 -1
  234. package/dist/dependency-propagation-config.d.ts +1 -1
  235. package/dist/{dependency-propagation-delivery-XzF76C9n.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
  236. package/dist/direct-answer-wiring.d.ts +1 -1
  237. package/dist/direct-answer.d.ts +1 -1
  238. package/dist/embedding-fallback.d.ts +1 -1
  239. package/dist/enrichment/index.d.ts +1 -1
  240. package/dist/entity-retrieval.d.ts +2 -2
  241. package/dist/entity-retrieval.js +33 -12
  242. package/dist/entity-schema.d.ts +1 -1
  243. package/dist/explicit-capture.d.ts +9 -9
  244. package/dist/explicit-capture.js +7 -4
  245. package/dist/external-wiki-access.d.ts +22 -21
  246. package/dist/external-wiki-access.js +56 -51
  247. package/dist/external-wiki-collection-registration.d.ts +1 -1
  248. package/dist/external-wiki-collection.d.ts +1 -1
  249. package/dist/external-wiki-mcp-tools.d.ts +22 -21
  250. package/dist/extraction-error-classification.d.ts +1 -1
  251. package/dist/extraction-faithfulness.d.ts +1 -1
  252. package/dist/extraction-faithfulness.js +2 -2
  253. package/dist/extraction-judge-telemetry.d.ts +1 -1
  254. package/dist/extraction-judge-training.d.ts +1 -1
  255. package/dist/extraction-judge.d.ts +1 -1
  256. package/dist/extraction-judge.js +2 -2
  257. package/dist/extraction-liveness.d.ts +1 -1
  258. package/dist/extraction-normalization.d.ts +1 -1
  259. package/dist/extraction-prompt.d.ts +1 -1
  260. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  261. package/dist/extraction-source-grounding.d.ts +1 -1
  262. package/dist/extraction.d.ts +1 -1
  263. package/dist/extraction.js +35 -19
  264. package/dist/fallback-llm.d.ts +14 -1
  265. package/dist/fallback-llm.js +1 -1
  266. package/dist/{first-start-migration-626C5554.js → first-start-migration-CRZCZAJN.js} +11 -3
  267. package/dist/first-start-migration-CRZCZAJN.js.map +1 -0
  268. package/dist/graph-dashboard-diff.d.ts +1 -1
  269. package/dist/graph-dashboard-key.d.ts +1 -1
  270. package/dist/graph-dashboard-parser.d.ts +1 -1
  271. package/dist/graph-edge-reinforcement.d.ts +1 -1
  272. package/dist/graph-path-reconstruction.d.ts +1 -1
  273. package/dist/graph-path-scoring.d.ts +1 -1
  274. package/dist/graph-snapshot.d.ts +1 -1
  275. package/dist/graph.d.ts +1 -1
  276. package/dist/harmonic-retrieval.js +1 -1
  277. package/dist/importance.d.ts +1 -1
  278. package/dist/importers/index.d.ts +1 -1
  279. package/dist/in-flight-reads.d.ts +1 -1
  280. package/dist/index.d.ts +314 -308
  281. package/dist/index.js +304 -133
  282. package/dist/inline-script.d.ts +3 -0
  283. package/dist/inline-script.js +8 -0
  284. package/dist/inline-script.js.map +1 -0
  285. package/dist/intent.d.ts +1 -1
  286. package/dist/lcm/engine.d.ts +1 -1
  287. package/dist/lcm/engine.js +3 -3
  288. package/dist/lcm/index.d.ts +1 -1
  289. package/dist/lcm/index.js +6 -6
  290. package/dist/lcm/tools.d.ts +1 -1
  291. package/dist/lifecycle.d.ts +1 -1
  292. package/dist/live-connectors-runner.d.ts +1 -1
  293. package/dist/local-llm.d.ts +2 -1
  294. package/dist/local-llm.js +2 -2
  295. package/dist/local-model-endpoint.d.ts +1 -1
  296. package/dist/maintenance/memory-governance.d.ts +1 -1
  297. package/dist/maintenance/memory-governance.js +33 -12
  298. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  299. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -12
  300. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  301. package/dist/maintenance/rebuild-memory-projection.js +34 -13
  302. package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
  303. package/dist/mcp-memory-inspector-app.d.ts +22 -21
  304. package/dist/mcp-read-only-tools.js +1 -1
  305. package/dist/memory-action-policy.d.ts +1 -1
  306. package/dist/memory-cache.d.ts +1 -1
  307. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  308. package/dist/memory-projection-mutations.js +2 -2
  309. package/dist/memory-projection-store.d.ts +6 -2
  310. package/dist/memory-projection-store.js +1 -1
  311. package/dist/memory-provenance.d.ts +1 -1
  312. package/dist/memory-snapshot.d.ts +1 -1
  313. package/dist/memory-worth-outcomes.d.ts +2 -2
  314. package/dist/models-json.d.ts +1 -1
  315. package/dist/namespaces/migrate.d.ts +3 -3
  316. package/dist/namespaces/migrate.js +24 -23
  317. package/dist/namespaces/principal.d.ts +1 -1
  318. package/dist/namespaces/search.d.ts +1 -1
  319. package/dist/namespaces/search.js +8 -8
  320. package/dist/namespaces/storage.d.ts +3 -3
  321. package/dist/namespaces/storage.js +33 -12
  322. package/dist/native-knowledge.d.ts +1 -1
  323. package/dist/offline-sync-file-io.d.ts +20 -0
  324. package/dist/offline-sync-file-io.js +18 -0
  325. package/dist/offline-sync-file-io.js.map +1 -0
  326. package/dist/offline-sync-impression-drain.d.ts +1 -1
  327. package/dist/offline-sync-impression-drain.js +5 -5
  328. package/dist/offline-sync.d.ts +8 -6
  329. package/dist/offline-sync.js +2 -1
  330. package/dist/operator-doctor-corpus.d.ts +1 -1
  331. package/dist/operator-doctor-corpus.js +26 -25
  332. package/dist/operator-doctor-replica.d.ts +1 -1
  333. package/dist/operator-toolkit.d.ts +3 -3
  334. package/dist/operator-toolkit.js +39 -36
  335. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  336. package/dist/orchestration/maintenance.d.ts +4 -4
  337. package/dist/orchestration/maintenance.js +38 -18
  338. package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-D85CzDDY.d.ts} +11 -8
  339. package/dist/orchestrator.d.ts +9 -9
  340. package/dist/orchestrator.js +117 -109
  341. package/dist/patterns-cli.d.ts +1 -1
  342. package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
  343. package/dist/policy-runtime.d.ts +1 -1
  344. package/dist/proactive-contention.d.ts +1 -1
  345. package/dist/provenance.d.ts +1 -1
  346. package/dist/public-http-D-SyWNj6.d.ts +25 -0
  347. package/dist/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
  348. package/dist/{qmd-eAWObK4M.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
  349. package/dist/qmd-preflight.d.ts +2 -2
  350. package/dist/qmd-recall-cache.d.ts +1 -1
  351. package/dist/qmd.d.ts +2 -2
  352. package/dist/recall-concurrency-config.d.ts +1 -1
  353. package/dist/recall-disclosure-escalation.d.ts +1 -1
  354. package/dist/recall-explain-renderer.d.ts +1 -1
  355. package/dist/recall-explain-renderer.js +3 -3
  356. package/dist/recall-memory-map.d.ts +1 -1
  357. package/dist/recall-planner-llm.d.ts +1 -1
  358. package/dist/recall-planner-llm.js +1 -1
  359. package/dist/recall-state.d.ts +1 -1
  360. package/dist/recall-tag-filter.d.ts +1 -1
  361. package/dist/recall-timings.d.ts +1 -1
  362. package/dist/recall-xray-cli.d.ts +1 -1
  363. package/dist/recall-xray-cli.js +4 -4
  364. package/dist/recall-xray-renderer.d.ts +1 -1
  365. package/dist/recall-xray-renderer.js +3 -3
  366. package/dist/recall-xray.d.ts +1 -1
  367. package/dist/recall-xray.js +2 -2
  368. package/dist/reconcile/cursor.d.ts +2 -1
  369. package/dist/reconcile/manifest.d.ts +2 -1
  370. package/dist/reconcile/manifest.js +6 -5
  371. package/dist/reconcile/plan.d.ts +2 -1
  372. package/dist/reconcile/plan.js +3 -2
  373. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  374. package/dist/replay/normalizers/claude.d.ts +1 -1
  375. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  376. package/dist/replay/normalizers/shared.d.ts +1 -1
  377. package/dist/replay/runner.d.ts +1 -1
  378. package/dist/replay/types.d.ts +1 -1
  379. package/dist/replica-divergence.d.ts +1 -1
  380. package/dist/replica-peers-config.d.ts +1 -1
  381. package/dist/resolve-auth-token.d.ts +1 -1
  382. package/dist/resume-bundles.js +5 -3
  383. package/dist/retrieval-agents.d.ts +2 -2
  384. package/dist/retrieval-tiers.d.ts +1 -1
  385. package/dist/routing/engine.d.ts +1 -1
  386. package/dist/routing/store.d.ts +1 -1
  387. package/dist/salvage-envelope.d.ts +1 -1
  388. package/dist/schemas.d.ts +38 -38
  389. package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
  390. package/dist/search/embed-helper.d.ts +1 -1
  391. package/dist/search/factory.d.ts +1 -1
  392. package/dist/search/factory.js +6 -6
  393. package/dist/search/index.d.ts +1 -1
  394. package/dist/search/index.js +12 -12
  395. package/dist/search/lancedb-backend.d.ts +1 -1
  396. package/dist/search/meilisearch-backend.d.ts +1 -1
  397. package/dist/search/noop-backend.d.ts +1 -1
  398. package/dist/search/orama-backend.d.ts +1 -1
  399. package/dist/search/port.d.ts +1 -1
  400. package/dist/search/remote-backend.d.ts +1 -1
  401. package/dist/{semantic-consolidation-HD8RkzVA.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
  402. package/dist/semantic-consolidation.d.ts +2 -2
  403. package/dist/semantic-consolidation.js +34 -13
  404. package/dist/semantic-rule-promotion.js +33 -12
  405. package/dist/semantic-rule-verifier.d.ts +1 -1
  406. package/dist/semantic-rule-verifier.js +33 -12
  407. package/dist/{service-DIrtHHEg.d.ts → service-DT-pJyda.d.ts} +660 -660
  408. package/dist/session-observer-bands.d.ts +1 -1
  409. package/dist/session-observer-state.d.ts +1 -1
  410. package/dist/shared-context/manager.d.ts +1 -1
  411. package/dist/signal.d.ts +1 -1
  412. package/dist/source-agent-qualifier.d.ts +1 -1
  413. package/dist/source-agent-qualifier.js +31 -15
  414. package/dist/{storage-DqCzXi56.d.ts → storage-qOnaJ1Lw.d.ts} +49 -13
  415. package/dist/storage.d.ts +2 -2
  416. package/dist/storage.js +33 -12
  417. package/dist/summarizer.d.ts +1 -1
  418. package/dist/summarizer.js +5 -5
  419. package/dist/summary-snapshot.d.ts +1 -1
  420. package/dist/support-passport/index.d.ts +518 -0
  421. package/dist/support-passport/index.js +357 -0
  422. package/dist/support-passport/index.js.map +1 -0
  423. package/dist/temporal-supersession.d.ts +2 -2
  424. package/dist/temporal-timeline-recall.d.ts +1 -1
  425. package/dist/temporal-validity.d.ts +1 -1
  426. package/dist/threading.d.ts +1 -1
  427. package/dist/tier-migration.d.ts +2 -2
  428. package/dist/tier-routing.d.ts +2 -2
  429. package/dist/tier-routing.js +7 -1
  430. package/dist/{tier-stats-2JCZYEF7.js → tier-stats-EXYSKSVN.js} +8 -2
  431. package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-EXYSKSVN.js.map} +1 -1
  432. package/dist/topics.d.ts +1 -1
  433. package/dist/transcript.d.ts +1 -1
  434. package/dist/transfer/autodetect.js +1 -1
  435. package/dist/transfer/backup.js +1 -1
  436. package/dist/transfer/capsule-export.js +2 -2
  437. package/dist/transfer/types.d.ts +36 -36
  438. package/dist/trust-score-stage.d.ts +1 -1
  439. package/dist/trust-score.d.ts +1 -1
  440. package/dist/{types-d_j4vC6N.d.ts → types-ed-SvS2t.d.ts} +8 -1
  441. package/dist/types.d.ts +1 -1
  442. package/dist/types.js +1 -1
  443. package/dist/utility-runtime.d.ts +2 -2
  444. package/dist/verified-recall.js +33 -12
  445. package/dist/write-envelope.d.ts +1 -1
  446. package/dist/write-rate-limiter.d.ts +11 -5
  447. package/dist/write-rate-limiter.js +1 -1
  448. package/package.json +12 -2
  449. package/scripts/build-with-heap.mjs +11 -1
  450. package/src/access-authorization-probe.ts +20 -2
  451. package/src/access-boundary.ts +32 -0
  452. package/src/access-http.test.ts +1971 -643
  453. package/src/access-http.ts +81 -74
  454. package/src/access-mcp.ts +3 -1
  455. package/src/access-memory-search-fanout.ts +24 -1
  456. package/src/access-offline-manifest.ts +5 -0
  457. package/src/access-operations.ts +2 -0
  458. package/src/access-service-namespace.test.ts +14 -0
  459. package/src/access-service-observe-scope.test.ts +2 -0
  460. package/src/access-service-offline-file-content.test.ts +211 -0
  461. package/src/access-service.ts +628 -884
  462. package/src/access-surface-catalog.test.ts +40 -10
  463. package/src/access-surface-catalog.ts +15 -0
  464. package/src/active-memory-bridge.test.ts +151 -0
  465. package/src/active-memory-bridge.ts +95 -21
  466. package/src/briefing.test.ts +38 -0
  467. package/src/briefing.ts +3 -3
  468. package/src/cli.ts +6 -1
  469. package/src/config.ts +18 -9
  470. package/src/connectors/codex-materialize-runner.ts +2 -0
  471. package/src/contradiction/contradiction-scan.ts +2 -0
  472. package/src/contradiction/contradiction.test.ts +42 -0
  473. package/src/correction/correction-access-wiring.ts +8 -2
  474. package/src/correction/correction-storage-integration.test.ts +7 -0
  475. package/src/explicit-capture.test.ts +24 -0
  476. package/src/explicit-capture.ts +2 -0
  477. package/src/fallback-llm.test.ts +54 -0
  478. package/src/fallback-llm.ts +54 -9
  479. package/src/index.ts +3 -0
  480. package/src/inline-script.ts +6 -0
  481. package/src/local-llm-headers-timeout.test.ts +42 -0
  482. package/src/local-llm.ts +8 -8
  483. package/src/maintenance/first-start-migration.ts +2 -1
  484. package/src/maintenance/memory-governance.test.ts +25 -0
  485. package/src/maintenance/memory-governance.ts +4 -1
  486. package/src/maintenance/pattern-reinforcement.test.ts +20 -0
  487. package/src/maintenance/pattern-reinforcement.ts +2 -1
  488. package/src/maintenance/rebuild-memory-projection.ts +8 -8
  489. package/src/mcp-read-only-tools.ts +3 -0
  490. package/src/memory-projection-store.ts +25 -27
  491. package/src/offline-sync-file-io.ts +68 -0
  492. package/src/offline-sync.ts +43 -57
  493. package/src/orchestration/consolidation-run.ts +5 -4
  494. package/src/orchestration/contradiction-linking-coordinator.ts +7 -0
  495. package/src/orchestration/contradiction-localization.integration.test.ts +115 -0
  496. package/src/orchestration/lifecycle-policy-coordinator.ts +2 -1
  497. package/src/orchestration/qmd-result-resolver.test.ts +215 -14
  498. package/src/orchestration/qmd-result-resolver.ts +142 -82
  499. package/src/orchestration/recall-search-pipeline.test.ts +41 -0
  500. package/src/orchestration/recall-search-pipeline.ts +12 -0
  501. package/src/orchestration/semantic-consolidation-coordinator.ts +2 -1
  502. package/src/orchestration/tier-migration-coordinator.ts +23 -56
  503. package/src/orchestration/workspace-ops.test.ts +37 -0
  504. package/src/orchestration/workspace-ops.ts +5 -29
  505. package/src/orchestrator.ts +7 -8
  506. package/src/relay/mission-access.test.ts +11 -11
  507. package/src/relay/mission-ui.test.ts +3 -1
  508. package/src/storage/supersession-audit.ts +7 -1
  509. package/src/storage/supersession-side-effects.ts +17 -5
  510. package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
  511. package/src/storage-contract/failure-semantics.test.ts +102 -0
  512. package/src/storage.ts +18 -19
  513. package/src/support-passport/access-http-base.ts +143 -0
  514. package/src/support-passport/access-http.ts +172 -0
  515. package/src/support-passport/access-operations.ts +272 -0
  516. package/src/support-passport/access-service-base.test.ts +193 -0
  517. package/src/support-passport/access-service-base.ts +176 -0
  518. package/src/support-passport/access-surface.test.ts +283 -0
  519. package/src/support-passport/access-surface.ts +286 -0
  520. package/src/support-passport/card-projection.test.ts +137 -0
  521. package/src/support-passport/card-projection.ts +348 -0
  522. package/src/support-passport/card-replacement.ts +126 -0
  523. package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
  524. package/src/support-passport/card-service.test.ts +2964 -0
  525. package/src/support-passport/card-service.ts +1184 -0
  526. package/src/support-passport/card-state.ts +158 -0
  527. package/src/support-passport/config-model-routing.test.ts +37 -0
  528. package/src/support-passport/config.test.ts +34 -0
  529. package/src/support-passport/config.ts +41 -0
  530. package/src/support-passport/contracts.test.ts +156 -0
  531. package/src/support-passport/contracts.ts +149 -0
  532. package/src/support-passport/errors.ts +30 -0
  533. package/src/support-passport/generated-batch.test.ts +185 -0
  534. package/src/support-passport/generated-batch.ts +338 -0
  535. package/src/support-passport/grant-contracts.ts +183 -0
  536. package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
  537. package/src/support-passport/grant-service-cache.test.ts +148 -0
  538. package/src/support-passport/grant-service-cancellation.test.ts +83 -0
  539. package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
  540. package/src/support-passport/grant-service.test.ts +3496 -0
  541. package/src/support-passport/grant-service.ts +513 -0
  542. package/src/support-passport/grant-store-commit-hook.test.ts +123 -0
  543. package/src/support-passport/grant-store-order.test.ts +60 -0
  544. package/src/support-passport/grant-store-path-safety.test.ts +30 -0
  545. package/src/support-passport/grant-store-recovery.test.ts +448 -0
  546. package/src/support-passport/grant-store.ts +906 -0
  547. package/src/support-passport/index.ts +17 -0
  548. package/src/support-passport/mcp-tools.test.ts +222 -0
  549. package/src/support-passport/mcp-tools.ts +187 -0
  550. package/src/support-passport/model-adapter.test.ts +840 -0
  551. package/src/support-passport/model-adapter.ts +602 -0
  552. package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
  553. package/src/support-passport/model-audit.ts +152 -0
  554. package/src/support-passport/model-bridge.test.ts +456 -0
  555. package/src/support-passport/model-bridge.ts +439 -0
  556. package/src/support-passport/model-contracts.ts +124 -0
  557. package/src/support-passport/model-service.test.ts +1731 -0
  558. package/src/support-passport/model-service.ts +399 -0
  559. package/src/support-passport/offline-sync-guard.ts +230 -0
  560. package/src/support-passport/owner-http.test.ts +671 -0
  561. package/src/support-passport/owner-lock.ts +70 -0
  562. package/src/support-passport/private-file.test.ts +99 -0
  563. package/src/support-passport/private-file.ts +498 -0
  564. package/src/support-passport/public-http.test.ts +476 -0
  565. package/src/support-passport/public-http.ts +601 -0
  566. package/src/support-passport/ui.test.ts +181 -0
  567. package/src/tier-routing.ts +28 -17
  568. package/src/training-export/converter.test.ts +24 -0
  569. package/src/training-export/converter.ts +2 -0
  570. package/src/types.ts +8 -1
  571. package/src/wearables/service.test.ts +13 -0
  572. package/src/wearables/service.ts +2 -0
  573. package/src/write-rate-limiter.test.ts +30 -6
  574. package/src/write-rate-limiter.ts +29 -18
  575. package/dist/chunk-3CSX3ETE.js.map +0 -1
  576. package/dist/chunk-47P3RYZP.js.map +0 -1
  577. package/dist/chunk-6LAPLZOS.js.map +0 -1
  578. package/dist/chunk-6R4G7N4S.js.map +0 -1
  579. package/dist/chunk-7BZOBA5J.js.map +0 -1
  580. package/dist/chunk-C23BYTJV.js.map +0 -1
  581. package/dist/chunk-CYF6WVE7.js.map +0 -1
  582. package/dist/chunk-G2LUMAUF.js.map +0 -1
  583. package/dist/chunk-GYPQL6XN.js.map +0 -1
  584. package/dist/chunk-JDZPNCMA.js.map +0 -1
  585. package/dist/chunk-JV5YUBIZ.js.map +0 -1
  586. package/dist/chunk-K4QS7LXU.js.map +0 -1
  587. package/dist/chunk-L6CQ7WIW.js.map +0 -1
  588. package/dist/chunk-MKQBXQKU.js.map +0 -1
  589. package/dist/chunk-NH5IR2WM.js.map +0 -1
  590. package/dist/chunk-PX2LSHYM.js.map +0 -1
  591. package/dist/chunk-QWGE2PUH.js.map +0 -1
  592. package/dist/chunk-RUMNY5DT.js.map +0 -1
  593. package/dist/chunk-S75M5ZRK.js.map +0 -1
  594. package/dist/chunk-T2JHZWH6.js.map +0 -1
  595. package/dist/chunk-UES4BHA2.js.map +0 -1
  596. package/dist/chunk-UTRO5UJU.js.map +0 -1
  597. package/dist/chunk-UU3G6GUP.js.map +0 -1
  598. package/dist/chunk-XUAMCLY4.js.map +0 -1
  599. package/dist/chunk-ZYLC7NFO.js.map +0 -1
  600. package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
  601. package/dist/first-start-migration-626C5554.js.map +0 -1
  602. /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
  603. /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
  604. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  605. /package/dist/{chunk-PDDTI7IC.js.map → chunk-43SEBY2M.js.map} +0 -0
  606. /package/dist/{chunk-HWRD23DW.js.map → chunk-46SZBVDS.js.map} +0 -0
  607. /package/dist/{chunk-6HPHEFXT.js.map → chunk-5FD7JMTX.js.map} +0 -0
  608. /package/dist/{chunk-IBKR2TFR.js.map → chunk-6CYHUWCO.js.map} +0 -0
  609. /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
  610. /package/dist/{chunk-NIS256NW.js.map → chunk-CIAI24TQ.js.map} +0 -0
  611. /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
  612. /package/dist/{chunk-G7Z6EENO.js.map → chunk-EKTP7MNS.js.map} +0 -0
  613. /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-FFRTNF3L.js.map} +0 -0
  614. /package/dist/{chunk-VKXWK44Q.js.map → chunk-FONWBCVY.js.map} +0 -0
  615. /package/dist/{chunk-DZD576ZU.js.map → chunk-FPLM2TKD.js.map} +0 -0
  616. /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-FTPONF6B.js.map} +0 -0
  617. /package/dist/{chunk-LJS7KUPV.js.map → chunk-FWX7W5PM.js.map} +0 -0
  618. /package/dist/{chunk-G4T7L557.js.map → chunk-GN3WRFJY.js.map} +0 -0
  619. /package/dist/{chunk-QT2FRYI4.js.map → chunk-H7NAZ3UB.js.map} +0 -0
  620. /package/dist/{chunk-APPFNGX6.js.map → chunk-HBUFQRIM.js.map} +0 -0
  621. /package/dist/{chunk-UU7TRFNE.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
  622. /package/dist/{chunk-C4ZNGVK3.js.map → chunk-IKP5OYQQ.js.map} +0 -0
  623. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  624. /package/dist/{chunk-RDJRFDJY.js.map → chunk-IQ4NVWEF.js.map} +0 -0
  625. /package/dist/{chunk-CGVHPCP2.js.map → chunk-JYG4OLWH.js.map} +0 -0
  626. /package/dist/{chunk-WOPA3SGI.js.map → chunk-K26NWEOC.js.map} +0 -0
  627. /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
  628. /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
  629. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  630. /package/dist/{chunk-3JLPGJ43.js.map → chunk-MIH3CJPN.js.map} +0 -0
  631. /package/dist/{chunk-QHFV6VNU.js.map → chunk-MK5VEWCR.js.map} +0 -0
  632. /package/dist/{chunk-GUKBW4HL.js.map → chunk-NQMSEB5D.js.map} +0 -0
  633. /package/dist/{chunk-WRJVB3C2.js.map → chunk-PO7NXBG2.js.map} +0 -0
  634. /package/dist/{chunk-AZM4CCAC.js.map → chunk-QZLDRQ4I.js.map} +0 -0
  635. /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
  636. /package/dist/{chunk-VMMQDEN5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
  637. /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
  638. /package/dist/{chunk-HLYR2TQL.js.map → chunk-UCTS3DDH.js.map} +0 -0
  639. /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
  640. /package/dist/{chunk-WM65LU67.js.map → chunk-UKYS3NU5.js.map} +0 -0
  641. /package/dist/{chunk-WDBX6VER.js.map → chunk-UPLZNJKN.js.map} +0 -0
  642. /package/dist/{chunk-2GFK22OZ.js.map → chunk-V6ERBR7U.js.map} +0 -0
  643. /package/dist/{chunk-ZMYDYNI4.js.map → chunk-XZHE2DEN.js.map} +0 -0
  644. /package/dist/{chunk-MAXVH44E.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  645. /package/dist/{chunk-YGLY6QFV.js.map → chunk-ZRZVLB7O.js.map} +0 -0
  646. /package/dist/{chunk-4IIFL7GC.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
  647. /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
  648. /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
@@ -0,0 +1,346 @@
1
+ import {
2
+ SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
3
+ SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
4
+ } from "./chunk-D3LBIUWV.js";
5
+ import {
6
+ SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
7
+ } from "./chunk-XX4HPFFM.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-7TBXNYLO.js.map
@@ -0,0 +1 @@
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"]}
@@ -4,7 +4,10 @@ import {
4
4
  } from "./chunk-KSXJOC4F.js";
5
5
  import {
6
6
  StorageManager
7
- } from "./chunk-6R4G7N4S.js";
7
+ } from "./chunk-M4YHAODQ.js";
8
+ import {
9
+ excludeSupportPassportPrivateMemories
10
+ } from "./chunk-XX4HPFFM.js";
8
11
  import {
9
12
  isSafeRouteNamespace
10
13
  } from "./chunk-U3PN77QT.js";
@@ -69,6 +72,7 @@ async function runCodexMaterialize(options) {
69
72
  const storage = new StorageManager(nsDir);
70
73
  memories = await storage.readAllMemories();
71
74
  }
75
+ memories = excludeSupportPassportPrivateMemories(memories);
72
76
  const result = materializeForNamespace(namespace, {
73
77
  memories,
74
78
  codexHome,
@@ -134,4 +138,4 @@ export {
134
138
  runCodexMaterialize,
135
139
  runPostConsolidationMaterialize
136
140
  };
137
- //# sourceMappingURL=chunk-NH5IR2WM.js.map
141
+ //# sourceMappingURL=chunk-BRR5EUTF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connectors/codex-materialize-runner.ts","../src/namespaces/path.ts"],"sourcesContent":["/**\n * codex-materialize-runner.ts — Thin I/O bridge for the Codex materializer.\n *\n * The pure rendering logic lives in {@link ./codex-materialize.js}. This file\n * is the place callers (consolidation hooks, CLI, session-end hook) go when\n * they want the whole \"load memories from storage → render → write\" flow.\n *\n * Kept deliberately small so #378 never has to reach into orchestrator.ts /\n * importance.ts — the two files Wave 1 agents are editing concurrently.\n */\n\nimport { existsSync } from \"node:fs\";\n\nimport { log } from \"../logger.js\";\nimport { resolveNamespaceChildRoot } from \"../namespaces/path.js\";\nimport { isSafeRouteNamespace } from \"../routing/engine.js\";\nimport { StorageManager } from \"../storage.js\";\nimport { excludeSupportPassportPrivateMemories } from \"../support-passport/card-projection.js\";\nimport type { PluginConfig, MemoryFile } from \"../types.js\";\nimport {\n hasCodexMaterializeSentinel,\n materializeForNamespace,\n type MaterializeResult,\n type RolloutSummaryInput,\n} from \"./codex-materialize.js\";\n\n/** Options accepted by the shared post-consolidation materialize helper. */\nexport interface PostConsolidationMaterializeOptions {\n config: PluginConfig;\n namespace?: string;\n memories?: MemoryFile[];\n memoryDir?: string;\n codexHome?: string;\n rolloutSummaries?: RolloutSummaryInput[];\n now?: Date;\n}\n\n/** Options accepted by the runner. */\nexport interface RunMaterializeOptions {\n /** Remnic config — we only read the `codexMaterialize*` fields. */\n config: PluginConfig;\n /** Namespace to materialize. Overrides the config's `codexMaterializeNamespace`. */\n namespace?: string;\n /** Override the memory directory (defaults to `config.memoryDir`). */\n memoryDir?: string;\n /** Override `<codex_home>` (useful for tests). */\n codexHome?: string;\n /** Optional pre-loaded memories (bypasses disk read — used in tests). */\n memories?: MemoryFile[];\n /** Optional rollout summaries supplied by the caller. */\n rolloutSummaries?: RolloutSummaryInput[];\n /** Current time injection for deterministic runs. */\n now?: Date;\n /** Reason string — logged for observability. */\n reason?: \"consolidation\" | \"session_end\" | \"manual\" | \"cli\";\n}\n\n/**\n * Run the Codex materialization end-to-end. Returns `null` when the feature\n * is disabled in config or when the user hasn't opted in via the sentinel.\n * Never throws for \"expected\" skips; only throws on schema validation or I/O\n * errors that callers actually need to surface.\n */\nexport async function runCodexMaterialize(\n options: RunMaterializeOptions,\n): Promise<MaterializeResult | null> {\n const cfg = options.config;\n if (!cfg.codexMaterializeMemories) {\n log.debug(`[codex-materialize] skipped — codexMaterializeMemories=false`);\n return null;\n }\n\n // Per-trigger gate: session-end runs must honor codexMaterializeOnSessionEnd.\n // The Codex Stop hook (remnic-codex-hook.cjs, session-end event) passes\n // reason=\"session_end\"; when the user has turned off the session-end trigger\n // we short-circuit here without touching disk.\n if (options.reason === \"session_end\" && cfg.codexMaterializeOnSessionEnd === false) {\n log.debug(\n `[codex-materialize] skipped — session-end disabled via codexMaterializeOnSessionEnd=false`,\n );\n return null;\n }\n\n const namespace = resolveNamespace(options.namespace, cfg);\n const memoryDir = options.memoryDir ?? cfg.memoryDir;\n const codexHome = options.codexHome ?? cfg.codex?.codexHome ?? undefined;\n if (!memoryDir) {\n log.warn(`[codex-materialize] skipped — no memoryDir available`);\n return null;\n }\n\n let memories: MemoryFile[];\n if (options.memories) {\n memories = options.memories;\n } else {\n if (!hasCodexMaterializeSentinel(codexHome)) {\n return materializeForNamespace(namespace, {\n memories: [],\n codexHome,\n maxSummaryTokens: cfg.codexMaterializeMaxSummaryTokens,\n rolloutRetentionDays: cfg.codexMaterializeRolloutRetentionDays,\n rolloutSummaries: options.rolloutSummaries,\n now: options.now,\n });\n }\n const nsDir = resolveNamespaceDir(memoryDir, namespace, cfg);\n const storage = new StorageManager(nsDir);\n memories = await storage.readAllMemories();\n }\n memories = excludeSupportPassportPrivateMemories(memories);\n\n // Intentionally NOT catching here: per the JSDoc contract above,\n // schema-validation and I/O errors from `materializeForNamespace` must\n // surface to callers so they can exit non-zero (CLI) or log + recover\n // (consolidation post-hook, which has its own narrower try/catch).\n // Catching everything would make a broken MEMORY.md render look like a\n // successful skip, and invisible failures are strictly worse than loud\n // ones for a feature that writes to `~/.codex/memories`.\n const result = materializeForNamespace(namespace, {\n memories,\n codexHome,\n maxSummaryTokens: cfg.codexMaterializeMaxSummaryTokens,\n rolloutRetentionDays: cfg.codexMaterializeRolloutRetentionDays,\n rolloutSummaries: options.rolloutSummaries,\n now: options.now,\n });\n if (options.reason) {\n log.debug(\n `[codex-materialize] ran reason=${options.reason} wrote=${result.wrote} files=${result.filesWritten.length}`,\n );\n }\n return result;\n}\n\n/**\n * Shared helper for post-consolidation materialize hooks.\n *\n * `materializeAfterSemanticConsolidation` and `materializeAfterCausalConsolidation`\n * used to be two nearly-identical copies of this logic; keeping the actual\n * body here means any future guard/logging change happens in one place.\n *\n * The only per-caller knob is `logPrefix`, which is used to tag the\n * non-fatal warning emitted when the materializer throws.\n */\nexport async function runPostConsolidationMaterialize(\n logPrefix: string,\n options: PostConsolidationMaterializeOptions,\n): Promise<MaterializeResult | null> {\n if (!options.config.codexMaterializeMemories) return null;\n if (!options.config.codexMaterializeOnConsolidation) return null;\n try {\n return await runCodexMaterialize({\n config: options.config,\n namespace: options.namespace,\n memories: options.memories,\n memoryDir: options.memoryDir,\n codexHome: options.codexHome,\n rolloutSummaries: options.rolloutSummaries,\n now: options.now,\n reason: \"consolidation\",\n });\n } catch (error) {\n log.warn(\n `${logPrefix} Codex materialize post-hook failed (non-fatal): ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n return null;\n }\n}\n\nfunction resolveNamespace(override: string | undefined, cfg: PluginConfig): string {\n const requested = (override ?? cfg.codexMaterializeNamespace ?? \"auto\").trim();\n const defaultNamespace = (cfg.defaultNamespace ?? \"\").trim();\n const namespace =\n requested.length === 0 || requested === \"auto\"\n ? (defaultNamespace.length > 0 ? defaultNamespace : \"default\")\n : requested;\n if (!isSafeRouteNamespace(namespace)) {\n throw new Error(`invalid materialize namespace: ${namespace}`);\n }\n return namespace;\n}\n\n/**\n * Resolve the on-disk storage root for a namespace, matching\n * `NamespaceStorageRouter` in `packages/remnic-core/src/namespaces/storage.ts`.\n *\n * Contract:\n * - When namespaces are disabled, every namespace maps to `memoryDir` itself.\n * - When namespaces are enabled, non-default namespaces always live under\n * `memoryDir/namespaces/<namespace>`.\n * - The default namespace prefers `memoryDir/namespaces/<defaultNamespace>`\n * when that directory already exists (migrated install); otherwise it\n * falls back to the legacy `memoryDir` root so materialization does not\n * silently switch directories out from under an existing install.\n */\nfunction resolveNamespaceDir(\n memoryDir: string,\n namespace: string,\n cfg: PluginConfig,\n): string {\n if (!cfg.namespacesEnabled) return memoryDir;\n\n const configuredDefaultNamespace = (cfg.defaultNamespace ?? \"\").trim();\n const defaultNamespace =\n configuredDefaultNamespace.length > 0 ? configuredDefaultNamespace : \"default\";\n const ns = (namespace || defaultNamespace).trim();\n if (!isSafeRouteNamespace(ns)) {\n throw new Error(`invalid materialize namespace: ${ns}`);\n }\n const namespacedRoot = resolveNamespaceChildRoot(memoryDir, ns, \"materialize namespace path\");\n\n if (ns === defaultNamespace) {\n return existsSync(namespacedRoot) ? namespacedRoot : memoryDir;\n }\n return namespacedRoot;\n}\n","import path from \"node:path\";\n\nexport function assertNamespacePathInsideRoot(\n root: string,\n candidate: string,\n namespace: string,\n label = \"namespace path\",\n): void {\n const relative = path.relative(root, candidate);\n if (relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))) {\n return;\n }\n throw new Error(`invalid ${label}: ${namespace}`);\n}\n\nexport function resolveNamespaceChildRoot(\n memoryDir: string,\n namespace: string,\n label = \"namespace path\",\n): string {\n const namespaceRoot = path.resolve(memoryDir, \"namespaces\");\n const candidate = path.resolve(namespaceRoot, namespace);\n assertNamespacePathInsideRoot(namespaceRoot, candidate, namespace, label);\n return candidate;\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isValidCapsuleSince
3
- } from "./chunk-KQAFEZQX.js";
3
+ } from "./chunk-IPLYGWQF.js";
4
4
  import {
5
5
  CAPSULE_ID_PATTERN
6
6
  } from "./chunk-WEHSQBFR.js";
@@ -12,7 +12,7 @@ import {
12
12
  import {
13
13
  OFFLINE_SYNC_FILE_CONTENT_MAX_CHUNK_BYTES,
14
14
  OFFLINE_SYNC_MAX_MTIME_MS
15
- } from "./chunk-GYPQL6XN.js";
15
+ } from "./chunk-Z4N7SVVF.js";
16
16
  import {
17
17
  validateArchiveRelativePath
18
18
  } from "./chunk-GCGJW34D.js";
@@ -475,4 +475,4 @@ export {
475
475
  actionConfidenceRequestSchema,
476
476
  validateRequest
477
477
  };
478
- //# sourceMappingURL=chunk-NIS256NW.js.map
478
+ //# sourceMappingURL=chunk-CIAI24TQ.js.map