@remnic/core 10.0.92 → 10.0.94

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 (501) hide show
  1. package/dist/access-admin-ops-surface.js +332 -59
  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 +287 -303
  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 +332 -59
  10. package/dist/access-http-briefing.js +332 -60
  11. package/dist/access-http-query.js +332 -61
  12. package/dist/access-http.js +330 -112
  13. package/dist/access-identity-continuity-surface.js +332 -59
  14. package/dist/access-lcm-surface.js +332 -59
  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 +330 -87
  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 +332 -59
  25. package/dist/access-offline-manifest.js +12 -11
  26. package/dist/access-operations-batch.js +330 -64
  27. package/dist/access-operations.js +330 -73
  28. package/dist/access-recall-concurrency.js +332 -59
  29. package/dist/access-recall-diagnostics.js +5 -4
  30. package/dist/access-recall-response.js +332 -59
  31. package/dist/access-recall-surface.js +332 -59
  32. package/dist/access-schema.js +2 -2
  33. package/dist/access-service.js +335 -62
  34. package/dist/access-surface-catalog.js +6 -283
  35. package/dist/access-surface-catalog.js.map +1 -1
  36. package/dist/active-context-transform.js +1 -1
  37. package/dist/active-memory-bridge.js +3 -2
  38. package/dist/active-recall.js +36 -37
  39. package/dist/active-recall.js.map +1 -1
  40. package/dist/activity/journal-extract.d.ts +13 -1
  41. package/dist/activity/journal-extract.d.ts.map +1 -1
  42. package/dist/{auto-sync-3AZW7MXI.js → auto-sync-BO5YZKM6.js} +13 -15
  43. package/dist/{auto-sync-3AZW7MXI.js.map → auto-sync-BO5YZKM6.js.map} +1 -1
  44. package/dist/briefing.js +20 -20
  45. package/dist/buffer.js +16 -16
  46. package/dist/calibration.js +10 -10
  47. package/dist/{capsule-merge-2IIXFXN5.js → capsule-merge-6IDAYTKG.js} +6 -6
  48. package/dist/causal-consolidation.js +23 -23
  49. package/dist/{chunk-RGUUBAT5.js → chunk-2WCLTWV2.js} +3 -3
  50. package/dist/{chunk-BQZEGOZ4.js → chunk-2YODOG2O.js} +2 -2
  51. package/dist/{chunk-WYG5UNDY.js → chunk-3AUDELZL.js} +2 -2
  52. package/dist/{chunk-MB6ZJDN6.js → chunk-3FBAEPCU.js} +2 -2
  53. package/dist/{chunk-PIITB2YZ.js → chunk-3ZS3NUEI.js} +4 -4
  54. package/dist/{chunk-ATPWZ4F7.js → chunk-4EZWSDFL.js} +5 -5
  55. package/dist/{chunk-ANZZLRUX.js → chunk-4IVRQMZW.js} +2 -2
  56. package/dist/{chunk-63E37JCN.js → chunk-4RAJT5L2.js} +4 -4
  57. package/dist/{chunk-45VUHDV2.js → chunk-5CO5G4MN.js} +2 -2
  58. package/dist/{chunk-LUJCQQ3L.js → chunk-65HWAQ4F.js} +2 -2
  59. package/dist/{chunk-T67LUYCR.js → chunk-77NTFICT.js} +5 -5
  60. package/dist/chunk-A2WFUMUN.js +86 -0
  61. package/dist/chunk-A2WFUMUN.js.map +1 -0
  62. package/dist/{chunk-UE6RRXMF.js → chunk-A4F7OIC5.js} +2 -2
  63. package/dist/chunk-AHA5VQGP.js +117 -0
  64. package/dist/chunk-AHA5VQGP.js.map +1 -0
  65. package/dist/{chunk-RRJBDXAQ.js → chunk-B377OKUP.js} +2 -2
  66. package/dist/{chunk-IUKYFTGW.js → chunk-B3DR2JBZ.js} +140 -125
  67. package/dist/chunk-B3DR2JBZ.js.map +1 -0
  68. package/dist/{chunk-Z7JIZ42P.js → chunk-BN2EBCLB.js} +3 -3
  69. package/dist/{chunk-YYOMGOHB.js → chunk-BOK6BN5M.js} +2 -2
  70. package/dist/{chunk-U6UNF5ZS.js → chunk-BPK32FRM.js} +3 -3
  71. package/dist/{chunk-OH7QLI6W.js → chunk-BPPUH5JM.js} +5 -5
  72. package/dist/{chunk-O6ZSWHVR.js → chunk-C2KE5DMD.js} +4 -4
  73. package/dist/{chunk-47F6WWLQ.js → chunk-C73N66PR.js} +2 -2
  74. package/dist/{chunk-WRT7GJ2D.js → chunk-CIWMTNHW.js} +4 -4
  75. package/dist/{chunk-HF3BKUVV.js → chunk-CL4JU3DF.js} +7 -7
  76. package/dist/{chunk-O55EKIEC.js → chunk-D3ZKHLN2.js} +2 -2
  77. package/dist/chunk-D5S6RL32.js +67137 -0
  78. package/dist/chunk-D5S6RL32.js.map +1 -0
  79. package/dist/{chunk-ETZLQOUR.js → chunk-D5XG2KPS.js} +2 -2
  80. package/dist/{chunk-CD4BCCNP.js → chunk-DJ7WVEWX.js} +2 -2
  81. package/dist/{chunk-PWXPRVLK.js → chunk-DNY63QWJ.js} +2 -2
  82. package/dist/{chunk-4CJTQHEG.js → chunk-ESLOLCD4.js} +3 -3
  83. package/dist/{chunk-VILPVT4S.js → chunk-EZ47HOJ6.js} +4 -4
  84. package/dist/{chunk-EFYN5I7Z.js → chunk-F4QFU5IZ.js} +2 -2
  85. package/dist/{chunk-T6OZW2WR.js → chunk-FA7SLQ5X.js} +7 -1
  86. package/dist/chunk-FA7SLQ5X.js.map +1 -0
  87. package/dist/{chunk-BRLXOZLM.js → chunk-FQAQ63QA.js} +729 -17
  88. package/dist/chunk-FQAQ63QA.js.map +1 -0
  89. package/dist/{chunk-FSO3G4JJ.js → chunk-FWRXW7CZ.js} +5000 -2748
  90. package/dist/chunk-FWRXW7CZ.js.map +1 -0
  91. package/dist/{chunk-XYKBWTWI.js → chunk-FZZMLGWQ.js} +2 -2
  92. package/dist/{chunk-FNXQZGUS.js → chunk-GBJUTX44.js} +2 -2
  93. package/dist/{chunk-YLXETSAH.js → chunk-GCZJ7XRI.js} +2 -2
  94. package/dist/{chunk-UDKWFDV2.js → chunk-HLUHEMN4.js} +27 -3
  95. package/dist/chunk-HLUHEMN4.js.map +1 -0
  96. package/dist/{chunk-SUSW74WU.js → chunk-IL3RHBWM.js} +56 -5
  97. package/dist/chunk-IL3RHBWM.js.map +1 -0
  98. package/dist/{chunk-JV4S6VDH.js → chunk-ILY5SSOM.js} +2 -2
  99. package/dist/{chunk-EXHXJETE.js → chunk-IQ55QGY5.js} +2 -2
  100. package/dist/{chunk-4J363OAA.js → chunk-J7BIFOYP.js} +2 -2
  101. package/dist/{chunk-QFEDITXM.js → chunk-JNDMIAJ4.js} +2 -2
  102. package/dist/chunk-JTSSSR4L.js +359 -0
  103. package/dist/chunk-JTSSSR4L.js.map +1 -0
  104. package/dist/{chunk-5KBIOI4G.js → chunk-JVBAPAWZ.js} +217 -13
  105. package/dist/chunk-JVBAPAWZ.js.map +1 -0
  106. package/dist/{chunk-E5PPE4VA.js → chunk-K2VRKCPA.js} +2 -2
  107. package/dist/{chunk-MKRYQROF.js → chunk-LGEHAQHK.js} +4 -4
  108. package/dist/{chunk-7HTUYFR3.js → chunk-LLPMMMWG.js} +27 -10
  109. package/dist/chunk-LLPMMMWG.js.map +1 -0
  110. package/dist/{chunk-XYTQJD7F.js → chunk-LMJVP5CM.js} +2 -2
  111. package/dist/{chunk-E7YZXWIS.js → chunk-LNGELD2M.js} +2 -2
  112. package/dist/{chunk-FQKBJJYB.js → chunk-LPV72KRQ.js} +2 -2
  113. package/dist/{chunk-2LCRG2YV.js → chunk-M2XR6B6V.js} +2 -2
  114. package/dist/{chunk-EQ4U73UH.js → chunk-MLAMXQAW.js} +14 -2
  115. package/dist/chunk-MLAMXQAW.js.map +1 -0
  116. package/dist/{chunk-ZU5JDLOH.js → chunk-MMRTPH3J.js} +2 -2
  117. package/dist/{chunk-TVIVY7KU.js → chunk-NED7IR7B.js} +4 -4
  118. package/dist/{chunk-6F5MJFXY.js → chunk-NHVAX7MH.js} +2 -2
  119. package/dist/{chunk-TG3R2SID.js → chunk-NMGHGTVR.js} +5 -5
  120. package/dist/{chunk-YCNIGRRF.js → chunk-NS7U4ZYU.js} +13 -117
  121. package/dist/chunk-NS7U4ZYU.js.map +1 -0
  122. package/dist/{chunk-NGHDW6UU.js → chunk-NUQEREIP.js} +2 -2
  123. package/dist/{chunk-5IIQU4JZ.js → chunk-OB72KNMF.js} +4 -4
  124. package/dist/{chunk-RIMK327Y.js → chunk-OUVYYKYU.js} +7 -7
  125. package/dist/{chunk-QJPJXCS4.js → chunk-P3WRNWWM.js} +157 -4
  126. package/dist/chunk-P3WRNWWM.js.map +1 -0
  127. package/dist/{chunk-E6M225BJ.js → chunk-PC5DRBGD.js} +18 -8
  128. package/dist/chunk-PC5DRBGD.js.map +1 -0
  129. package/dist/{chunk-RWGRSKN5.js → chunk-PT4DZDJA.js} +2 -2
  130. package/dist/{chunk-7EPY3IQL.js → chunk-PZJQ46DH.js} +2 -2
  131. package/dist/{chunk-MXHMNKWG.js → chunk-QDESY76F.js} +3 -3
  132. package/dist/{chunk-E3A7ELSG.js → chunk-QHARXWTC.js} +2 -2
  133. package/dist/{chunk-BLJT6JP2.js → chunk-QMFAMOT2.js} +2 -2
  134. package/dist/{chunk-I6QGI65T.js → chunk-QRMG4HK4.js} +3 -3
  135. package/dist/{chunk-ZU3NJNO7.js → chunk-QSF5SJAM.js} +4 -4
  136. package/dist/{chunk-5IYOKDM4.js → chunk-R23JWJD3.js} +5 -5
  137. package/dist/{chunk-RHQLIHMB.js → chunk-R4BBGPI2.js} +218 -218
  138. package/dist/chunk-R4BBGPI2.js.map +1 -0
  139. package/dist/{chunk-NT7F7WJQ.js → chunk-RFUL2ZIQ.js} +291 -93
  140. package/dist/chunk-RFUL2ZIQ.js.map +1 -0
  141. package/dist/{chunk-E4IRW2FG.js → chunk-RKABLU5M.js} +233 -40
  142. package/dist/chunk-RKABLU5M.js.map +1 -0
  143. package/dist/{chunk-P4WNBSTW.js → chunk-RNG7S3FY.js} +2 -2
  144. package/dist/{chunk-IPT2OY4B.js → chunk-RQFXZYTF.js} +35 -33
  145. package/dist/chunk-RQFXZYTF.js.map +1 -0
  146. package/dist/{chunk-5HFXGXE5.js → chunk-RUTN5MMC.js} +7 -9
  147. package/dist/{chunk-5HFXGXE5.js.map → chunk-RUTN5MMC.js.map} +1 -1
  148. package/dist/{chunk-AP6NCP3V.js → chunk-S3S72HRM.js} +8 -6
  149. package/dist/chunk-S3S72HRM.js.map +1 -0
  150. package/dist/{chunk-ZGFLIK5H.js → chunk-SPAKBUJY.js} +2 -2
  151. package/dist/{chunk-ER7XANP3.js → chunk-SQ3GEIEL.js} +4 -4
  152. package/dist/{chunk-PMJFRDJI.js → chunk-SUTEBYGI.js} +2 -2
  153. package/dist/{chunk-HVX4LPNY.js → chunk-T4KY6UYF.js} +5 -3
  154. package/dist/{chunk-HVX4LPNY.js.map → chunk-T4KY6UYF.js.map} +1 -1
  155. package/dist/{chunk-R6HMAIKM.js → chunk-TOSPNM4T.js} +2 -2
  156. package/dist/{chunk-RMXS4I66.js → chunk-TVDJEUV5.js} +2 -2
  157. package/dist/{chunk-PLCYKAWH.js → chunk-TYRWSE4B.js} +2 -2
  158. package/dist/{chunk-B4QYQFGY.js → chunk-UBEKET2V.js} +383 -36
  159. package/dist/chunk-UBEKET2V.js.map +1 -0
  160. package/dist/{chunk-IQWUACVG.js → chunk-UHMHJX5G.js} +3 -3
  161. package/dist/{chunk-YODUDA6R.js → chunk-UN4RVUG2.js} +22 -22
  162. package/dist/{chunk-E6Z4FBX6.js → chunk-V2QSNFCT.js} +2 -2
  163. package/dist/{chunk-NBH6K6G5.js → chunk-V65H7MI6.js} +345 -16
  164. package/dist/chunk-V65H7MI6.js.map +1 -0
  165. package/dist/chunk-W54Z2MOP.js +4500 -0
  166. package/dist/chunk-W54Z2MOP.js.map +1 -0
  167. package/dist/{chunk-7W3RXOIG.js → chunk-WGGRZYSQ.js} +14 -14
  168. package/dist/{chunk-RIZ5NUNN.js → chunk-WQ4XKIOX.js} +4 -4
  169. package/dist/{chunk-QEYTRFR3.js → chunk-X26YOFGS.js} +2 -2
  170. package/dist/{chunk-ITHZFHST.js → chunk-X2BVB74H.js} +2 -2
  171. package/dist/{chunk-6F42QONS.js → chunk-X5HGU2EM.js} +4 -4
  172. package/dist/{chunk-GVGAO3WV.js → chunk-XJ2S5UBF.js} +3 -3
  173. package/dist/{chunk-IBJ6U753.js → chunk-XKZBZOKV.js} +4 -4
  174. package/dist/{chunk-65AUYLU3.js → chunk-XPXHQI6N.js} +2 -2
  175. package/dist/chunk-XRWWCW4H.js +102 -0
  176. package/dist/chunk-XRWWCW4H.js.map +1 -0
  177. package/dist/{chunk-HH5LY6RR.js → chunk-YIXJSW5M.js} +5 -5
  178. package/dist/{chunk-2JSDPUKD.js → chunk-YMFPFXEX.js} +2 -2
  179. package/dist/{chunk-N4KAE2NB.js → chunk-Z3FTSHT5.js} +3 -3
  180. package/dist/{chunk-7GLJMDEQ.js → chunk-ZDV5YWID.js} +6 -6
  181. package/dist/{chunk-645WOU5I.js → chunk-ZDZJNXL6.js} +4 -4
  182. package/dist/{chunk-6TCXIRP5.js → chunk-ZKE4CO6B.js} +4 -4
  183. package/dist/cli.js +303 -185
  184. package/dist/coding/export-okf-codegraph.js +29 -29
  185. package/dist/compounding/engine.js +23 -24
  186. package/dist/config.js +36 -37
  187. package/dist/connectors/codex-materialize-runner.js +20 -20
  188. package/dist/connectors/index.js +21 -21
  189. package/dist/connectors/live/google-drive.d.ts +2 -0
  190. package/dist/connectors/live/google-drive.d.ts.map +1 -1
  191. package/dist/consolidation-provenance-check.js +4 -4
  192. package/dist/consolidation-undo.js +5 -5
  193. package/dist/contradiction/index.js +7 -6
  194. package/dist/{contradiction-scan-P2MHYFVG.js → contradiction-scan-IBPYGQZF.js} +4 -3
  195. package/dist/convergence-refresh.js +22 -22
  196. package/dist/corpus-watermark.js +23 -23
  197. package/dist/deep-recall-http-glue.js +2 -2
  198. package/dist/deep-recall-policy-llm.js +4 -4
  199. package/dist/direct-answer-wiring.js +2 -2
  200. package/dist/embedding-fallback.js +1 -1
  201. package/dist/entity-retrieval.js +21 -21
  202. package/dist/eval-trajectory-store.js +2 -2
  203. package/dist/eval-trajectory.js +2 -2
  204. package/dist/event-order-recall.js +2 -2
  205. package/dist/explicit-capture.d.ts +3 -2
  206. package/dist/explicit-capture.d.ts.map +1 -1
  207. package/dist/explicit-capture.js +530 -6
  208. package/dist/explicit-cue-recall.js +2 -2
  209. package/dist/external-wiki-access.js +2 -283
  210. package/dist/extraction-faithfulness.js +4 -4
  211. package/dist/extraction-judge.js +5 -5
  212. package/dist/extraction-normalization.js +1 -1
  213. package/dist/extraction-quote-grounding.d.ts.map +1 -1
  214. package/dist/extraction-quote-grounding.js +1 -1
  215. package/dist/extraction-source-grounding-rules.js +2 -2
  216. package/dist/extraction-source-grounding.js +3 -3
  217. package/dist/extraction.js +43 -44
  218. package/dist/fallback-llm-codex-subscription.js +2 -2
  219. package/dist/fallback-llm.js +3 -3
  220. package/dist/{first-start-migration-QFI7B5SH.js → first-start-migration-FILJH3RO.js} +6 -5
  221. package/dist/{first-start-migration-QFI7B5SH.js.map → first-start-migration-FILJH3RO.js.map} +1 -1
  222. package/dist/focused-list-recall.js +2 -2
  223. package/dist/harmonic-retrieval.js +20 -20
  224. package/dist/index.js +773 -794
  225. package/dist/lcm/index.js +2 -2
  226. package/dist/live-connectors-runner.js +2 -3
  227. package/dist/local-llm-config.js +2 -2
  228. package/dist/local-llm-helpers.d.ts +4 -0
  229. package/dist/local-llm-helpers.d.ts.map +1 -1
  230. package/dist/local-llm-helpers.js +3 -1
  231. package/dist/local-llm.d.ts +4 -1
  232. package/dist/local-llm.d.ts.map +1 -1
  233. package/dist/local-llm.js +4 -4
  234. package/dist/location/index.js +27 -29
  235. package/dist/maintenance/memory-governance.js +20 -20
  236. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +20 -20
  237. package/dist/maintenance/rebuild-memory-projection-runner.js +22 -22
  238. package/dist/maintenance/rebuild-memory-projection.js +21 -21
  239. package/dist/memory-browse-operations.js +2 -283
  240. package/dist/memory-browse.js +8 -7
  241. package/dist/memory-controller.js +2 -2
  242. package/dist/memory-subject.js +2 -2
  243. package/dist/namespaces/migrate.js +21 -21
  244. package/dist/namespaces/search.js +5 -5
  245. package/dist/namespaces/storage.js +20 -20
  246. package/dist/offline-sync-changeset-generations.js +1 -1
  247. package/dist/offline-sync-embedding-generation.js +1 -1
  248. package/dist/offline-sync-impression-drain.js +6 -6
  249. package/dist/offline-sync-snapshot-stream.js +1 -1
  250. package/dist/offline-sync.js +1 -1
  251. package/dist/operator-doctor-corpus.js +24 -24
  252. package/dist/operator-toolkit.js +58 -61
  253. package/dist/orchestration/backlog-scheduler.js +278 -294
  254. package/dist/orchestration/backlog-scheduler.js.map +1 -1
  255. package/dist/orchestration/buffer-drain-runner.js +278 -294
  256. package/dist/orchestration/extraction-run.d.ts +4 -0
  257. package/dist/orchestration/extraction-run.d.ts.map +1 -1
  258. package/dist/orchestration/fact-dedup-window.d.ts +1 -1
  259. package/dist/orchestration/fact-dedup-window.d.ts.map +1 -1
  260. package/dist/orchestration/maintenance.js +39 -42
  261. package/dist/orchestrator.d.ts +9 -11
  262. package/dist/orchestrator.d.ts.map +1 -1
  263. package/dist/orchestrator.js +290 -307
  264. package/dist/page-versioning.js +3 -3
  265. package/dist/qmd-daemon-session.js +2 -2
  266. package/dist/qmd.js +3 -3
  267. package/dist/recall-explain-renderer.js +1 -1
  268. package/dist/recall-navigation-operations.js +2 -283
  269. package/dist/recall-navigation.js +332 -59
  270. package/dist/recall-planner-llm.js +3 -3
  271. package/dist/recall-state-view-admission.js +6 -6
  272. package/dist/recall-why-service.js +10 -9
  273. package/dist/recall-why.js +4 -3
  274. package/dist/recall-xray-cli.js +2 -2
  275. package/dist/recall-xray-renderer.js +1 -1
  276. package/dist/reconcile/manifest.js +3 -3
  277. package/dist/{resolution-N7H3F2E4.js → resolution-OVVIF7ZY.js} +8 -7
  278. package/dist/response-guidance-recall.js +2 -2
  279. package/dist/resume-bundles.js +40 -41
  280. package/dist/salvage-envelope.js +4 -4
  281. package/dist/search/factory.js +4 -4
  282. package/dist/search/index.js +4 -4
  283. package/dist/semantic-consolidation.js +23 -23
  284. package/dist/semantic-rule-promotion.js +20 -20
  285. package/dist/semantic-rule-verifier.js +20 -20
  286. package/dist/shared-context/manager.js +2 -3
  287. package/dist/source-agent-qualifier.js +32 -33
  288. package/dist/standup/build.js +20 -20
  289. package/dist/storage/buffer-drain-claims.d.ts +97 -12
  290. package/dist/storage/buffer-drain-claims.d.ts.map +1 -1
  291. package/dist/storage/buffer-drain-claims.js +1 -1
  292. package/dist/storage/buffer-session-files.d.ts +4 -0
  293. package/dist/storage/buffer-session-files.d.ts.map +1 -1
  294. package/dist/storage/buffer-session-files.js +1 -1
  295. package/dist/storage/content-hash-index.d.ts +10 -0
  296. package/dist/storage/content-hash-index.d.ts.map +1 -1
  297. package/dist/storage.d.ts.map +1 -1
  298. package/dist/storage.js +19 -19
  299. package/dist/subject-config.js +3 -3
  300. package/dist/summarizer.d.ts +4 -1
  301. package/dist/summarizer.d.ts.map +1 -1
  302. package/dist/summarizer.js +6 -6
  303. package/dist/support-passport/index.js +53 -297
  304. package/dist/targeted-fact-recall.js +2 -2
  305. package/dist/tier-routing.js +3 -2
  306. package/dist/{tier-stats-FQGQSFET.js → tier-stats-FXEUJN73.js} +6 -5
  307. package/dist/{tier-stats-FQGQSFET.js.map → tier-stats-FXEUJN73.js.map} +1 -1
  308. package/dist/transcript.js +2 -2
  309. package/dist/transfer/capsule-import.js +4 -4
  310. package/dist/transfer/export-okf.js +20 -20
  311. package/dist/verified-recall.js +20 -20
  312. package/dist/wearables/memory-gen.d.ts +5 -1
  313. package/dist/wearables/memory-gen.d.ts.map +1 -1
  314. package/dist/wearables/service.d.ts.map +1 -1
  315. package/dist/who-knows-cli.js +21 -21
  316. package/dist/who-knows.js +20 -20
  317. package/dist/write-envelope.js +3 -3
  318. package/package.json +2 -2
  319. package/src/access-boundary.ts +5 -1
  320. package/src/access-category-alias.test.ts +5 -0
  321. package/src/access-mcp-frames.test.ts +60 -5
  322. package/src/access-mcp-frames.ts +72 -18
  323. package/src/access-mcp.test.ts +66 -2
  324. package/src/access-mcp.ts +19 -13
  325. package/src/access-service-coding-write.test.ts +7 -0
  326. package/src/activity/journal-extract-storage.test.ts +31 -0
  327. package/src/activity/journal-extract.test.ts +1 -0
  328. package/src/activity/journal-extract.ts +24 -3
  329. package/src/buffer-drain-handover.test.ts +5 -1
  330. package/src/connectors/live/google-drive.test.ts +39 -0
  331. package/src/connectors/live/google-drive.ts +41 -12
  332. package/src/explicit-capture.test.ts +109 -17
  333. package/src/explicit-capture.ts +90 -37
  334. package/src/extraction-quote-grounding.test.ts +20 -0
  335. package/src/extraction-quote-grounding.ts +21 -11
  336. package/src/fact-dedup-window.test.ts +37 -0
  337. package/src/local-llm-helpers.ts +12 -0
  338. package/src/local-llm-shutdown.test.ts +194 -0
  339. package/src/local-llm.ts +32 -30
  340. package/src/orchestration/extraction-run.ts +12 -3
  341. package/src/orchestration/fact-dedup-window.ts +5 -1
  342. package/src/orchestrator-connector-dedup.test.ts +9 -5
  343. package/src/orchestrator.ts +47 -50
  344. package/src/storage/buffer-drain-claims.test.ts +385 -1
  345. package/src/storage/buffer-drain-claims.ts +380 -97
  346. package/src/storage/buffer-session-files.ts +4 -0
  347. package/src/storage/content-hash-index.ts +27 -2
  348. package/src/storage-fact-hash-publish-failure.test.ts +87 -0
  349. package/src/storage.ts +5 -1
  350. package/src/summarizer-shutdown.test.ts +195 -0
  351. package/src/summarizer.ts +15 -2
  352. package/src/wearables/memory-gen.test.ts +20 -0
  353. package/src/wearables/memory-gen.ts +14 -7
  354. package/src/wearables/service.ts +14 -1
  355. package/src/wearables/storage-io.test.ts +25 -0
  356. package/dist/chunk-2FGLEF7C.js +0 -61
  357. package/dist/chunk-2FGLEF7C.js.map +0 -1
  358. package/dist/chunk-3RLK65ZK.js +0 -203
  359. package/dist/chunk-3RLK65ZK.js.map +0 -1
  360. package/dist/chunk-4WR2OD7K.js +0 -43
  361. package/dist/chunk-4WR2OD7K.js.map +0 -1
  362. package/dist/chunk-5KBIOI4G.js.map +0 -1
  363. package/dist/chunk-5M5M22GW.js +0 -346
  364. package/dist/chunk-5M5M22GW.js.map +0 -1
  365. package/dist/chunk-7HTUYFR3.js.map +0 -1
  366. package/dist/chunk-AP6NCP3V.js.map +0 -1
  367. package/dist/chunk-B4QYQFGY.js.map +0 -1
  368. package/dist/chunk-BJRTMNCB.js +0 -1919
  369. package/dist/chunk-BJRTMNCB.js.map +0 -1
  370. package/dist/chunk-BRLXOZLM.js.map +0 -1
  371. package/dist/chunk-BSACVS6R.js +0 -621
  372. package/dist/chunk-BSACVS6R.js.map +0 -1
  373. package/dist/chunk-DKAA2IHQ.js +0 -3644
  374. package/dist/chunk-DKAA2IHQ.js.map +0 -1
  375. package/dist/chunk-E4IRW2FG.js.map +0 -1
  376. package/dist/chunk-E6M225BJ.js.map +0 -1
  377. package/dist/chunk-EQ4U73UH.js.map +0 -1
  378. package/dist/chunk-ETSJD5IV.js +0 -361
  379. package/dist/chunk-ETSJD5IV.js.map +0 -1
  380. package/dist/chunk-F55YQP7N.js +0 -336
  381. package/dist/chunk-F55YQP7N.js.map +0 -1
  382. package/dist/chunk-FHGWKODN.js +0 -2300
  383. package/dist/chunk-FHGWKODN.js.map +0 -1
  384. package/dist/chunk-FLRP63GU.js +0 -32219
  385. package/dist/chunk-FLRP63GU.js.map +0 -1
  386. package/dist/chunk-FSO3G4JJ.js.map +0 -1
  387. package/dist/chunk-ID6JGIMD.js +0 -25
  388. package/dist/chunk-ID6JGIMD.js.map +0 -1
  389. package/dist/chunk-IGLJNHOX.js +0 -62
  390. package/dist/chunk-IGLJNHOX.js.map +0 -1
  391. package/dist/chunk-IPT2OY4B.js.map +0 -1
  392. package/dist/chunk-IUKYFTGW.js.map +0 -1
  393. package/dist/chunk-NBH6K6G5.js.map +0 -1
  394. package/dist/chunk-NT7F7WJQ.js.map +0 -1
  395. package/dist/chunk-NTRUKAAE.js +0 -223
  396. package/dist/chunk-NTRUKAAE.js.map +0 -1
  397. package/dist/chunk-OGXXGHW6.js +0 -223
  398. package/dist/chunk-OGXXGHW6.js.map +0 -1
  399. package/dist/chunk-PPCLZ4JU.js +0 -28
  400. package/dist/chunk-PPCLZ4JU.js.map +0 -1
  401. package/dist/chunk-QJPJXCS4.js.map +0 -1
  402. package/dist/chunk-R2LBF4HH.js +0 -729
  403. package/dist/chunk-R2LBF4HH.js.map +0 -1
  404. package/dist/chunk-RHQLIHMB.js.map +0 -1
  405. package/dist/chunk-RRTVGD3J.js +0 -792
  406. package/dist/chunk-RRTVGD3J.js.map +0 -1
  407. package/dist/chunk-SUSW74WU.js.map +0 -1
  408. package/dist/chunk-T6OZW2WR.js.map +0 -1
  409. package/dist/chunk-UDKWFDV2.js.map +0 -1
  410. package/dist/chunk-V7IZKJI3.js +0 -22
  411. package/dist/chunk-V7IZKJI3.js.map +0 -1
  412. package/dist/chunk-X562NQFA.js +0 -10144
  413. package/dist/chunk-X562NQFA.js.map +0 -1
  414. package/dist/chunk-XDSCJOH7.js +0 -3991
  415. package/dist/chunk-XDSCJOH7.js.map +0 -1
  416. package/dist/chunk-YCNIGRRF.js.map +0 -1
  417. package/dist/chunk-ZTTCDQ4I.js +0 -18796
  418. package/dist/chunk-ZTTCDQ4I.js.map +0 -1
  419. /package/dist/{capsule-merge-2IIXFXN5.js.map → capsule-merge-6IDAYTKG.js.map} +0 -0
  420. /package/dist/{chunk-RGUUBAT5.js.map → chunk-2WCLTWV2.js.map} +0 -0
  421. /package/dist/{chunk-BQZEGOZ4.js.map → chunk-2YODOG2O.js.map} +0 -0
  422. /package/dist/{chunk-WYG5UNDY.js.map → chunk-3AUDELZL.js.map} +0 -0
  423. /package/dist/{chunk-MB6ZJDN6.js.map → chunk-3FBAEPCU.js.map} +0 -0
  424. /package/dist/{chunk-PIITB2YZ.js.map → chunk-3ZS3NUEI.js.map} +0 -0
  425. /package/dist/{chunk-ATPWZ4F7.js.map → chunk-4EZWSDFL.js.map} +0 -0
  426. /package/dist/{chunk-ANZZLRUX.js.map → chunk-4IVRQMZW.js.map} +0 -0
  427. /package/dist/{chunk-63E37JCN.js.map → chunk-4RAJT5L2.js.map} +0 -0
  428. /package/dist/{chunk-45VUHDV2.js.map → chunk-5CO5G4MN.js.map} +0 -0
  429. /package/dist/{chunk-LUJCQQ3L.js.map → chunk-65HWAQ4F.js.map} +0 -0
  430. /package/dist/{chunk-T67LUYCR.js.map → chunk-77NTFICT.js.map} +0 -0
  431. /package/dist/{chunk-UE6RRXMF.js.map → chunk-A4F7OIC5.js.map} +0 -0
  432. /package/dist/{chunk-RRJBDXAQ.js.map → chunk-B377OKUP.js.map} +0 -0
  433. /package/dist/{chunk-Z7JIZ42P.js.map → chunk-BN2EBCLB.js.map} +0 -0
  434. /package/dist/{chunk-YYOMGOHB.js.map → chunk-BOK6BN5M.js.map} +0 -0
  435. /package/dist/{chunk-U6UNF5ZS.js.map → chunk-BPK32FRM.js.map} +0 -0
  436. /package/dist/{chunk-OH7QLI6W.js.map → chunk-BPPUH5JM.js.map} +0 -0
  437. /package/dist/{chunk-O6ZSWHVR.js.map → chunk-C2KE5DMD.js.map} +0 -0
  438. /package/dist/{chunk-47F6WWLQ.js.map → chunk-C73N66PR.js.map} +0 -0
  439. /package/dist/{chunk-WRT7GJ2D.js.map → chunk-CIWMTNHW.js.map} +0 -0
  440. /package/dist/{chunk-HF3BKUVV.js.map → chunk-CL4JU3DF.js.map} +0 -0
  441. /package/dist/{chunk-O55EKIEC.js.map → chunk-D3ZKHLN2.js.map} +0 -0
  442. /package/dist/{chunk-ETZLQOUR.js.map → chunk-D5XG2KPS.js.map} +0 -0
  443. /package/dist/{chunk-CD4BCCNP.js.map → chunk-DJ7WVEWX.js.map} +0 -0
  444. /package/dist/{chunk-PWXPRVLK.js.map → chunk-DNY63QWJ.js.map} +0 -0
  445. /package/dist/{chunk-4CJTQHEG.js.map → chunk-ESLOLCD4.js.map} +0 -0
  446. /package/dist/{chunk-VILPVT4S.js.map → chunk-EZ47HOJ6.js.map} +0 -0
  447. /package/dist/{chunk-EFYN5I7Z.js.map → chunk-F4QFU5IZ.js.map} +0 -0
  448. /package/dist/{chunk-XYKBWTWI.js.map → chunk-FZZMLGWQ.js.map} +0 -0
  449. /package/dist/{chunk-FNXQZGUS.js.map → chunk-GBJUTX44.js.map} +0 -0
  450. /package/dist/{chunk-YLXETSAH.js.map → chunk-GCZJ7XRI.js.map} +0 -0
  451. /package/dist/{chunk-JV4S6VDH.js.map → chunk-ILY5SSOM.js.map} +0 -0
  452. /package/dist/{chunk-EXHXJETE.js.map → chunk-IQ55QGY5.js.map} +0 -0
  453. /package/dist/{chunk-4J363OAA.js.map → chunk-J7BIFOYP.js.map} +0 -0
  454. /package/dist/{chunk-QFEDITXM.js.map → chunk-JNDMIAJ4.js.map} +0 -0
  455. /package/dist/{chunk-E5PPE4VA.js.map → chunk-K2VRKCPA.js.map} +0 -0
  456. /package/dist/{chunk-MKRYQROF.js.map → chunk-LGEHAQHK.js.map} +0 -0
  457. /package/dist/{chunk-XYTQJD7F.js.map → chunk-LMJVP5CM.js.map} +0 -0
  458. /package/dist/{chunk-E7YZXWIS.js.map → chunk-LNGELD2M.js.map} +0 -0
  459. /package/dist/{chunk-FQKBJJYB.js.map → chunk-LPV72KRQ.js.map} +0 -0
  460. /package/dist/{chunk-2LCRG2YV.js.map → chunk-M2XR6B6V.js.map} +0 -0
  461. /package/dist/{chunk-ZU5JDLOH.js.map → chunk-MMRTPH3J.js.map} +0 -0
  462. /package/dist/{chunk-TVIVY7KU.js.map → chunk-NED7IR7B.js.map} +0 -0
  463. /package/dist/{chunk-6F5MJFXY.js.map → chunk-NHVAX7MH.js.map} +0 -0
  464. /package/dist/{chunk-TG3R2SID.js.map → chunk-NMGHGTVR.js.map} +0 -0
  465. /package/dist/{chunk-NGHDW6UU.js.map → chunk-NUQEREIP.js.map} +0 -0
  466. /package/dist/{chunk-5IIQU4JZ.js.map → chunk-OB72KNMF.js.map} +0 -0
  467. /package/dist/{chunk-RIMK327Y.js.map → chunk-OUVYYKYU.js.map} +0 -0
  468. /package/dist/{chunk-RWGRSKN5.js.map → chunk-PT4DZDJA.js.map} +0 -0
  469. /package/dist/{chunk-7EPY3IQL.js.map → chunk-PZJQ46DH.js.map} +0 -0
  470. /package/dist/{chunk-MXHMNKWG.js.map → chunk-QDESY76F.js.map} +0 -0
  471. /package/dist/{chunk-E3A7ELSG.js.map → chunk-QHARXWTC.js.map} +0 -0
  472. /package/dist/{chunk-BLJT6JP2.js.map → chunk-QMFAMOT2.js.map} +0 -0
  473. /package/dist/{chunk-I6QGI65T.js.map → chunk-QRMG4HK4.js.map} +0 -0
  474. /package/dist/{chunk-ZU3NJNO7.js.map → chunk-QSF5SJAM.js.map} +0 -0
  475. /package/dist/{chunk-5IYOKDM4.js.map → chunk-R23JWJD3.js.map} +0 -0
  476. /package/dist/{chunk-P4WNBSTW.js.map → chunk-RNG7S3FY.js.map} +0 -0
  477. /package/dist/{chunk-ZGFLIK5H.js.map → chunk-SPAKBUJY.js.map} +0 -0
  478. /package/dist/{chunk-ER7XANP3.js.map → chunk-SQ3GEIEL.js.map} +0 -0
  479. /package/dist/{chunk-PMJFRDJI.js.map → chunk-SUTEBYGI.js.map} +0 -0
  480. /package/dist/{chunk-R6HMAIKM.js.map → chunk-TOSPNM4T.js.map} +0 -0
  481. /package/dist/{chunk-RMXS4I66.js.map → chunk-TVDJEUV5.js.map} +0 -0
  482. /package/dist/{chunk-PLCYKAWH.js.map → chunk-TYRWSE4B.js.map} +0 -0
  483. /package/dist/{chunk-IQWUACVG.js.map → chunk-UHMHJX5G.js.map} +0 -0
  484. /package/dist/{chunk-YODUDA6R.js.map → chunk-UN4RVUG2.js.map} +0 -0
  485. /package/dist/{chunk-E6Z4FBX6.js.map → chunk-V2QSNFCT.js.map} +0 -0
  486. /package/dist/{chunk-7W3RXOIG.js.map → chunk-WGGRZYSQ.js.map} +0 -0
  487. /package/dist/{chunk-RIZ5NUNN.js.map → chunk-WQ4XKIOX.js.map} +0 -0
  488. /package/dist/{chunk-QEYTRFR3.js.map → chunk-X26YOFGS.js.map} +0 -0
  489. /package/dist/{chunk-ITHZFHST.js.map → chunk-X2BVB74H.js.map} +0 -0
  490. /package/dist/{chunk-6F42QONS.js.map → chunk-X5HGU2EM.js.map} +0 -0
  491. /package/dist/{chunk-GVGAO3WV.js.map → chunk-XJ2S5UBF.js.map} +0 -0
  492. /package/dist/{chunk-IBJ6U753.js.map → chunk-XKZBZOKV.js.map} +0 -0
  493. /package/dist/{chunk-65AUYLU3.js.map → chunk-XPXHQI6N.js.map} +0 -0
  494. /package/dist/{chunk-HH5LY6RR.js.map → chunk-YIXJSW5M.js.map} +0 -0
  495. /package/dist/{chunk-2JSDPUKD.js.map → chunk-YMFPFXEX.js.map} +0 -0
  496. /package/dist/{chunk-N4KAE2NB.js.map → chunk-Z3FTSHT5.js.map} +0 -0
  497. /package/dist/{chunk-7GLJMDEQ.js.map → chunk-ZDV5YWID.js.map} +0 -0
  498. /package/dist/{chunk-645WOU5I.js.map → chunk-ZDZJNXL6.js.map} +0 -0
  499. /package/dist/{chunk-6TCXIRP5.js.map → chunk-ZKE4CO6B.js.map} +0 -0
  500. /package/dist/{contradiction-scan-P2MHYFVG.js.map → contradiction-scan-IBPYGQZF.js.map} +0 -0
  501. /package/dist/{resolution-N7H3F2E4.js.map → resolution-OVVIF7ZY.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-ZTTCDQ4I.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-5M5M22GW.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/source-agent-qualifier.ts"],"sourcesContent":["/**\n * Source-agent qualifier helpers for extraction (#2183).\n *\n * Pure leaf module: imports only types and sibling leaf/orchestration helpers,\n * never `extraction.ts`, so it introduces no cycle (extraction-run.ts only\n * type-imports extraction.ts).\n */\nimport { resolvePipelineProcessingCapabilities } from \"./capabilities.js\";\nimport { applyExtractionSourceGrounding } from \"./extraction-source-grounding.js\";\nimport type { ExtractionGroundingRoleSources } from \"./extraction-source-grounding.js\";\nimport { isValidConnectorId } from \"./connectors/index.js\";\nimport { CONNECTOR_LABEL_MAX_LENGTH, knownConnectorIds } from \"./connectors/label.js\";\nimport { deriveSourceConnector } from \"./orchestration/extraction-run.js\";\nimport type { BufferTurn, ExtractionResult, PluginConfig } from \"./types.js\";\n\n\nexport function resolveSourceConnector(turns: readonly BufferTurn[]): string | undefined {\n const contributing = turns.filter((turn) => turn.extractionContextOnly !== true);\n const derived = deriveSourceConnector(contributing);\n if (derived === undefined || !isValidConnectorId(derived)) return undefined;\n return /[\\u0000-\\u001F\\u007F]/.test(derived) ? undefined : derived;\n}\n\n// Same bound as the recall renderer (CONNECTOR_LABEL_MAX_LENGTH) but a DIFFERENT\n// policy: recall TRUNCATES past the bound (a truncated display label cannot\n// mislead), while the prompt SUPPRESSES (a truncated id could collide with a\n// different connector). Do not \"fix\" this inconsistency — it is deliberate.\nexport function headerConnector(connector: string | undefined): string | undefined {\n return connector !== undefined && connector.length <= CONNECTOR_LABEL_MAX_LENGTH ? connector : undefined;\n}\n\nexport function renderExtractionConversation(\n boundedTurns: readonly BufferTurn[],\n sourceConnector: string | undefined,\n): { conversation: string; renderedConversation: string } {\n const renderedConversation = boundedTurns\n .map((t) => `[${t.extractionContextOnly === true ? `context ${t.role}` : t.role}] ${t.content}`)\n .join(\"\\n\\n\");\n const conversation = sourceConnector === undefined\n ? renderedConversation\n : `Source agent: ${sourceConnector}\\n\\nTool and command instructions in this conversation apply to the ${sourceConnector} agent unless they are clearly universal.\\n\\n${renderedConversation}`;\n return { conversation, renderedConversation };\n}\n\nexport interface ExtractionGroundingContext {\n groundingSource: string;\n assertionSource: string;\n roleAssertionSources?: ExtractionGroundingRoleSources;\n messageTimestamp: Date | undefined;\n sourceConnector?: string;\n /** Input came from an always-on recorder (issue #2294); the proactive\n * second pass reads it so its prompts carry the same media warning. */\n ambientCapture?: boolean;\n scopeClassificationEnabled?: boolean;\n /** Contents of the turns assertionSource was joined from, so quote anchors cut at real turn boundaries. */\n turns?: readonly string[];\n}\n\nexport function applyGroundingWithConnector(\n config: PluginConfig,\n result: ExtractionResult,\n ctx: ExtractionGroundingContext,\n): ExtractionResult {\n const caps = resolvePipelineProcessingCapabilities(config);\n const options = {\n sourceGrounding: caps.sourceGrounding,\n anchorTemporalExpressions: caps.delinearize,\n spanMode: config.extraction?.spanMode ?? \"off\",\n turns: ctx.turns,\n };\n const known = buildKnownConnectors(ctx.sourceConnector);\n // Scope-forcing is decoupled from strip/restore (runs without a trusted\n // connector) but gated on the capability: flag off = byte-identical pre-#2183.\n const scoped = ctx.scopeClassificationEnabled === false\n ? result\n : forceProjectScopeOnAnyQualifier(result, known);\n if (ctx.sourceConnector === undefined) {\n return applyExtractionSourceGrounding(scoped, ctx.groundingSource, ctx.assertionSource, ctx.roleAssertionSources, ctx.messageTimestamp, options);\n }\n const prepared = prepareTrustedConnectorQualifier(scoped, ctx.sourceConnector, known);\n const grounded = applyExtractionSourceGrounding(prepared.result, ctx.groundingSource, ctx.assertionSource, ctx.roleAssertionSources, ctx.messageTimestamp, options);\n return restoreTrustedConnectorQualifier(grounded);\n}\n\nfunction buildKnownConnectors(trusted: string | undefined): Set<string> {\n const known = new Set<string>();\n for (const id of knownConnectorIds()) known.add(id.toLowerCase());\n if (trusted !== undefined) known.add(trusted.toLowerCase());\n return known;\n}\n\n/**\n * Parse a leading agent qualifier from fact text. ONE parser, ONE boundary\n * rule, ONE case policy (case-insensitive), ONE definition of \"agent\" (the name\n * must be a known connector ID). Returns the matched agent and the remaining\n * text, or undefined. Both scope-forcing and strip/restore consume this single\n * result so they can never disagree (#2183 round-11).\n */\nfunction parseLeadingQualifier(content: string, known: ReadonlySet<string>): { agent: string; rest: string } | undefined {\n const lower = content.toLowerCase();\n for (const lead of [\"in \", \"for \"]) {\n if (!lower.startsWith(lead)) continue;\n const m = lower.slice(lead.length).match(/^([a-z0-9][a-z0-9._-]*)\\s*,/u);\n if (m && known.has(m[1])) {\n const consumed = lead.length + m[0].length;\n return { agent: m[1], rest: content.slice(consumed).replace(/^[\\s,.;:]+/u, \"\") };\n }\n }\n const pm = lower.match(/^([a-z0-9][a-z0-9._-]*)'s(?![\\p{L}\\p{N}])/u);\n if (pm && known.has(pm[1])) {\n return { agent: pm[1], rest: content.slice(pm[0].length).replace(/^[\\s,.;:]+/u, \"\") };\n }\n return undefined;\n}\n\n/**\n * Force \"project\" scope on any fact whose content starts with a recognised\n * agent qualifier (a known connector name). A qualifier is evidence the fact is\n * agent-tied; which connector it names does not matter.\n */\nfunction forceProjectScopeOnAnyQualifier(result: ExtractionResult, known: ReadonlySet<string>): ExtractionResult {\n let any = false;\n const facts = result.facts.map((fact) => {\n if (fact.scope === \"project\") return fact;\n if (parseLeadingQualifier(fact.content, known) === undefined) return fact;\n any = true;\n return { ...fact, scope: \"project\" as const };\n });\n return any ? { ...result, facts } : result;\n}\n\nconst RESTORE_KEY = \"_qo\";\n\n/**\n * Strip the TRUSTED connector's qualifier for the grounding pass. Uses the same\n * parseLeadingQualifier as scope-forcing, but only strips when the matched agent\n * IS the trusted connector. Each stripped fact carries its original content\n * positionally for collision-free restore.\n */\nfunction prepareTrustedConnectorQualifier(\n result: ExtractionResult,\n trustedConnector: string,\n known: ReadonlySet<string>,\n): { result: ExtractionResult } {\n const trusted = trustedConnector.toLowerCase();\n const facts = result.facts.map((fact) => {\n const parsed = parseLeadingQualifier(fact.content, known);\n if (parsed === undefined || parsed.agent !== trusted) return fact;\n return { ...fact, content: parsed.rest, [RESTORE_KEY]: fact.content };\n }) as ExtractionResult[\"facts\"];\n return { result: { ...result, facts } };\n}\n\nfunction restoreTrustedConnectorQualifier(grounded: ExtractionResult): ExtractionResult {\n let touched = false;\n const facts = grounded.facts.map((fact) => {\n const record = fact as unknown as Record<string, unknown>;\n const original = record[RESTORE_KEY];\n if (typeof original !== \"string\") return fact;\n touched = true;\n const rest = { ...record };\n delete rest[RESTORE_KEY];\n return { ...rest, content: original } as ExtractionResult[\"facts\"][number];\n });\n return touched ? { ...grounded, facts } : grounded;\n}\n"],"mappings":"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","names":[]}