@remnic/core 10.0.92 → 10.0.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (486) hide show
  1. package/dist/access-admin-ops-surface.js +331 -58
  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 +286 -302
  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 +331 -58
  10. package/dist/access-http-briefing.js +331 -59
  11. package/dist/access-http-query.js +331 -60
  12. package/dist/access-http.js +329 -111
  13. package/dist/access-identity-continuity-surface.js +331 -58
  14. package/dist/access-lcm-surface.js +331 -58
  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 +329 -86
  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 +331 -58
  25. package/dist/access-offline-manifest.js +12 -11
  26. package/dist/access-operations-batch.js +329 -63
  27. package/dist/access-operations.js +329 -72
  28. package/dist/access-recall-concurrency.js +331 -58
  29. package/dist/access-recall-diagnostics.js +5 -4
  30. package/dist/access-recall-response.js +331 -58
  31. package/dist/access-recall-surface.js +331 -58
  32. package/dist/access-schema.js +2 -2
  33. package/dist/access-service.js +334 -61
  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 +35 -36
  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 +19 -19
  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 +22 -22
  49. package/dist/{chunk-ATPWZ4F7.js → chunk-2LMA22UU.js} +5 -5
  50. package/dist/{chunk-RGUUBAT5.js → chunk-2WCLTWV2.js} +3 -3
  51. package/dist/{chunk-BQZEGOZ4.js → chunk-2YODOG2O.js} +2 -2
  52. package/dist/{chunk-WYG5UNDY.js → chunk-3AUDELZL.js} +2 -2
  53. package/dist/{chunk-N4KAE2NB.js → chunk-3CYOCE6U.js} +3 -3
  54. package/dist/{chunk-MB6ZJDN6.js → chunk-3FBAEPCU.js} +2 -2
  55. package/dist/{chunk-PIITB2YZ.js → chunk-3ZS3NUEI.js} +4 -4
  56. package/dist/{chunk-ANZZLRUX.js → chunk-4IVRQMZW.js} +2 -2
  57. package/dist/{chunk-63E37JCN.js → chunk-4RAJT5L2.js} +4 -4
  58. package/dist/{chunk-45VUHDV2.js → chunk-5CO5G4MN.js} +2 -2
  59. package/dist/{chunk-BRLXOZLM.js → chunk-5YT2IIFX.js} +729 -17
  60. package/dist/chunk-5YT2IIFX.js.map +1 -0
  61. package/dist/{chunk-E4IRW2FG.js → chunk-622V2AZA.js} +233 -40
  62. package/dist/chunk-622V2AZA.js.map +1 -0
  63. package/dist/{chunk-LUJCQQ3L.js → chunk-65HWAQ4F.js} +2 -2
  64. package/dist/{chunk-T67LUYCR.js → chunk-77NTFICT.js} +5 -5
  65. package/dist/chunk-A2WFUMUN.js +86 -0
  66. package/dist/chunk-A2WFUMUN.js.map +1 -0
  67. package/dist/{chunk-UE6RRXMF.js → chunk-A4F7OIC5.js} +2 -2
  68. package/dist/chunk-AHA5VQGP.js +117 -0
  69. package/dist/chunk-AHA5VQGP.js.map +1 -0
  70. package/dist/{chunk-SUSW74WU.js → chunk-ATG2PQ4V.js} +56 -5
  71. package/dist/chunk-ATG2PQ4V.js.map +1 -0
  72. package/dist/{chunk-U6UNF5ZS.js → chunk-B33YWUJV.js} +3 -3
  73. package/dist/{chunk-RRJBDXAQ.js → chunk-B377OKUP.js} +2 -2
  74. package/dist/{chunk-IUKYFTGW.js → chunk-B3DR2JBZ.js} +140 -125
  75. package/dist/chunk-B3DR2JBZ.js.map +1 -0
  76. package/dist/{chunk-ETZLQOUR.js → chunk-BGHCSLE5.js} +2 -2
  77. package/dist/{chunk-YYOMGOHB.js → chunk-BOK6BN5M.js} +2 -2
  78. package/dist/{chunk-OH7QLI6W.js → chunk-BPPUH5JM.js} +5 -5
  79. package/dist/{chunk-4J363OAA.js → chunk-BTI4C4MA.js} +2 -2
  80. package/dist/{chunk-O6ZSWHVR.js → chunk-C2KE5DMD.js} +4 -4
  81. package/dist/{chunk-47F6WWLQ.js → chunk-C73N66PR.js} +2 -2
  82. package/dist/{chunk-E3A7ELSG.js → chunk-CGJYL633.js} +2 -2
  83. package/dist/{chunk-WRT7GJ2D.js → chunk-CIWMTNHW.js} +4 -4
  84. package/dist/{chunk-O55EKIEC.js → chunk-D3ZKHLN2.js} +2 -2
  85. package/dist/{chunk-CD4BCCNP.js → chunk-DJ7WVEWX.js} +2 -2
  86. package/dist/{chunk-PWXPRVLK.js → chunk-EFL24KOI.js} +2 -2
  87. package/dist/{chunk-4CJTQHEG.js → chunk-ESLOLCD4.js} +3 -3
  88. package/dist/{chunk-6F42QONS.js → chunk-ETBVCRVL.js} +4 -4
  89. package/dist/{chunk-VILPVT4S.js → chunk-EZ47HOJ6.js} +4 -4
  90. package/dist/{chunk-EFYN5I7Z.js → chunk-F4QFU5IZ.js} +2 -2
  91. package/dist/{chunk-T6OZW2WR.js → chunk-FA7SLQ5X.js} +7 -1
  92. package/dist/chunk-FA7SLQ5X.js.map +1 -0
  93. package/dist/{chunk-7W3RXOIG.js → chunk-FMKILENU.js} +14 -14
  94. package/dist/{chunk-YLXETSAH.js → chunk-GCZJ7XRI.js} +2 -2
  95. package/dist/{chunk-5HFXGXE5.js → chunk-GQXOBKPL.js} +7 -9
  96. package/dist/{chunk-5HFXGXE5.js.map → chunk-GQXOBKPL.js.map} +1 -1
  97. package/dist/{chunk-UDKWFDV2.js → chunk-HLUHEMN4.js} +27 -3
  98. package/dist/chunk-HLUHEMN4.js.map +1 -0
  99. package/dist/{chunk-QFEDITXM.js → chunk-JNDMIAJ4.js} +2 -2
  100. package/dist/chunk-JTSSSR4L.js +359 -0
  101. package/dist/chunk-JTSSSR4L.js.map +1 -0
  102. package/dist/{chunk-5KBIOI4G.js → chunk-JVBAPAWZ.js} +217 -13
  103. package/dist/chunk-JVBAPAWZ.js.map +1 -0
  104. package/dist/{chunk-E5PPE4VA.js → chunk-K2VRKCPA.js} +2 -2
  105. package/dist/{chunk-MKRYQROF.js → chunk-LGEHAQHK.js} +4 -4
  106. package/dist/{chunk-7HTUYFR3.js → chunk-LLPMMMWG.js} +27 -10
  107. package/dist/chunk-LLPMMMWG.js.map +1 -0
  108. package/dist/{chunk-XYTQJD7F.js → chunk-LMJVP5CM.js} +2 -2
  109. package/dist/{chunk-FQKBJJYB.js → chunk-LPV72KRQ.js} +2 -2
  110. package/dist/{chunk-2LCRG2YV.js → chunk-M2XR6B6V.js} +2 -2
  111. package/dist/{chunk-P4WNBSTW.js → chunk-MH632KPO.js} +2 -2
  112. package/dist/{chunk-EQ4U73UH.js → chunk-MLAMXQAW.js} +14 -2
  113. package/dist/chunk-MLAMXQAW.js.map +1 -0
  114. package/dist/{chunk-ZU5JDLOH.js → chunk-MMRTPH3J.js} +2 -2
  115. package/dist/{chunk-PMJFRDJI.js → chunk-MUX7IL77.js} +2 -2
  116. package/dist/{chunk-HF3BKUVV.js → chunk-NAQ4A5IX.js} +7 -7
  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-JV4S6VDH.js → chunk-OJXJWNFY.js} +2 -2
  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-Z7JIZ42P.js → chunk-PRAUN6PN.js} +3 -3
  130. package/dist/{chunk-RWGRSKN5.js → chunk-PT4DZDJA.js} +2 -2
  131. package/dist/{chunk-7EPY3IQL.js → chunk-PZJQ46DH.js} +2 -2
  132. package/dist/{chunk-MXHMNKWG.js → chunk-QDESY76F.js} +3 -3
  133. package/dist/{chunk-I6QGI65T.js → chunk-QRMG4HK4.js} +3 -3
  134. package/dist/{chunk-ZU3NJNO7.js → chunk-QSF5SJAM.js} +4 -4
  135. package/dist/{chunk-5IYOKDM4.js → chunk-R23JWJD3.js} +5 -5
  136. package/dist/{chunk-RHQLIHMB.js → chunk-R4BBGPI2.js} +218 -218
  137. package/dist/chunk-R4BBGPI2.js.map +1 -0
  138. package/dist/{chunk-7GLJMDEQ.js → chunk-RM2YUFH6.js} +6 -6
  139. package/dist/{chunk-IPT2OY4B.js → chunk-RQFXZYTF.js} +35 -33
  140. package/dist/chunk-RQFXZYTF.js.map +1 -0
  141. package/dist/{chunk-AP6NCP3V.js → chunk-S3S72HRM.js} +8 -6
  142. package/dist/chunk-S3S72HRM.js.map +1 -0
  143. package/dist/{chunk-RIMK327Y.js → chunk-SGQPR5SX.js} +7 -7
  144. package/dist/{chunk-ZGFLIK5H.js → chunk-SPAKBUJY.js} +2 -2
  145. package/dist/{chunk-ER7XANP3.js → chunk-SQ3GEIEL.js} +4 -4
  146. package/dist/{chunk-BLJT6JP2.js → chunk-SVT5IA2H.js} +2 -2
  147. package/dist/{chunk-HVX4LPNY.js → chunk-T4KY6UYF.js} +5 -3
  148. package/dist/{chunk-HVX4LPNY.js.map → chunk-T4KY6UYF.js.map} +1 -1
  149. package/dist/{chunk-GVGAO3WV.js → chunk-TJ4F6H4H.js} +3 -3
  150. package/dist/{chunk-R6HMAIKM.js → chunk-TOSPNM4T.js} +2 -2
  151. package/dist/{chunk-HH5LY6RR.js → chunk-TRQE3RYR.js} +5 -5
  152. package/dist/{chunk-RMXS4I66.js → chunk-TVDJEUV5.js} +2 -2
  153. package/dist/{chunk-PLCYKAWH.js → chunk-TYRWSE4B.js} +2 -2
  154. package/dist/{chunk-B4QYQFGY.js → chunk-UBEKET2V.js} +383 -36
  155. package/dist/chunk-UBEKET2V.js.map +1 -0
  156. package/dist/{chunk-IQWUACVG.js → chunk-UHMHJX5G.js} +3 -3
  157. package/dist/{chunk-YODUDA6R.js → chunk-UN4RVUG2.js} +22 -22
  158. package/dist/{chunk-E6Z4FBX6.js → chunk-V2QSNFCT.js} +2 -2
  159. package/dist/{chunk-NBH6K6G5.js → chunk-V65H7MI6.js} +345 -16
  160. package/dist/chunk-V65H7MI6.js.map +1 -0
  161. package/dist/chunk-W54Z2MOP.js +4500 -0
  162. package/dist/chunk-W54Z2MOP.js.map +1 -0
  163. package/dist/{chunk-E7YZXWIS.js → chunk-WKSQTMU7.js} +2 -2
  164. package/dist/{chunk-RIZ5NUNN.js → chunk-WQ4XKIOX.js} +4 -4
  165. package/dist/{chunk-FSO3G4JJ.js → chunk-WQURALGV.js} +4995 -2747
  166. package/dist/chunk-WQURALGV.js.map +1 -0
  167. package/dist/{chunk-QEYTRFR3.js → chunk-X26YOFGS.js} +2 -2
  168. package/dist/{chunk-ITHZFHST.js → chunk-X2BVB74H.js} +2 -2
  169. package/dist/{chunk-XYKBWTWI.js → chunk-XIYLWEXC.js} +2 -2
  170. package/dist/{chunk-IBJ6U753.js → chunk-XKZBZOKV.js} +4 -4
  171. package/dist/{chunk-65AUYLU3.js → chunk-XPXHQI6N.js} +2 -2
  172. package/dist/{chunk-EXHXJETE.js → chunk-XRDYRWZI.js} +2 -2
  173. package/dist/chunk-XRWWCW4H.js +102 -0
  174. package/dist/chunk-XRWWCW4H.js.map +1 -0
  175. package/dist/chunk-YKJBSMMP.js +67137 -0
  176. package/dist/chunk-YKJBSMMP.js.map +1 -0
  177. package/dist/{chunk-2JSDPUKD.js → chunk-YMFPFXEX.js} +2 -2
  178. package/dist/{chunk-645WOU5I.js → chunk-ZDZJNXL6.js} +4 -4
  179. package/dist/{chunk-6TCXIRP5.js → chunk-ZKE4CO6B.js} +4 -4
  180. package/dist/{chunk-FNXQZGUS.js → chunk-ZSE774RV.js} +2 -2
  181. package/dist/cli.js +302 -184
  182. package/dist/coding/export-okf-codegraph.js +28 -28
  183. package/dist/compounding/engine.js +22 -23
  184. package/dist/config.js +35 -36
  185. package/dist/connectors/codex-materialize-runner.js +19 -19
  186. package/dist/connectors/index.js +20 -20
  187. package/dist/connectors/live/google-drive.d.ts +2 -0
  188. package/dist/connectors/live/google-drive.d.ts.map +1 -1
  189. package/dist/consolidation-provenance-check.js +4 -4
  190. package/dist/consolidation-undo.js +5 -5
  191. package/dist/contradiction/index.js +7 -6
  192. package/dist/{contradiction-scan-P2MHYFVG.js → contradiction-scan-IBPYGQZF.js} +4 -3
  193. package/dist/convergence-refresh.js +21 -21
  194. package/dist/corpus-watermark.js +22 -22
  195. package/dist/deep-recall-http-glue.js +2 -2
  196. package/dist/deep-recall-policy-llm.js +4 -4
  197. package/dist/direct-answer-wiring.js +2 -2
  198. package/dist/embedding-fallback.js +1 -1
  199. package/dist/entity-retrieval.js +20 -20
  200. package/dist/eval-trajectory-store.js +2 -2
  201. package/dist/eval-trajectory.js +2 -2
  202. package/dist/event-order-recall.js +2 -2
  203. package/dist/explicit-capture.d.ts +3 -2
  204. package/dist/explicit-capture.d.ts.map +1 -1
  205. package/dist/explicit-capture.js +530 -6
  206. package/dist/explicit-cue-recall.js +2 -2
  207. package/dist/external-wiki-access.js +2 -283
  208. package/dist/extraction-faithfulness.js +4 -4
  209. package/dist/extraction-judge.js +5 -5
  210. package/dist/extraction-normalization.js +1 -1
  211. package/dist/extraction-quote-grounding.d.ts.map +1 -1
  212. package/dist/extraction-quote-grounding.js +1 -1
  213. package/dist/extraction-source-grounding-rules.js +2 -2
  214. package/dist/extraction-source-grounding.js +3 -3
  215. package/dist/extraction.js +42 -43
  216. package/dist/fallback-llm-codex-subscription.js +2 -2
  217. package/dist/fallback-llm.js +3 -3
  218. package/dist/{first-start-migration-QFI7B5SH.js → first-start-migration-FILJH3RO.js} +6 -5
  219. package/dist/{first-start-migration-QFI7B5SH.js.map → first-start-migration-FILJH3RO.js.map} +1 -1
  220. package/dist/focused-list-recall.js +2 -2
  221. package/dist/harmonic-retrieval.js +19 -19
  222. package/dist/index.js +772 -793
  223. package/dist/lcm/index.js +2 -2
  224. package/dist/live-connectors-runner.js +2 -3
  225. package/dist/local-llm-config.js +2 -2
  226. package/dist/local-llm-helpers.d.ts +4 -0
  227. package/dist/local-llm-helpers.d.ts.map +1 -1
  228. package/dist/local-llm-helpers.js +3 -1
  229. package/dist/local-llm.d.ts +4 -1
  230. package/dist/local-llm.d.ts.map +1 -1
  231. package/dist/local-llm.js +4 -4
  232. package/dist/location/index.js +26 -28
  233. package/dist/maintenance/memory-governance.js +19 -19
  234. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +19 -19
  235. package/dist/maintenance/rebuild-memory-projection-runner.js +21 -21
  236. package/dist/maintenance/rebuild-memory-projection.js +20 -20
  237. package/dist/memory-browse-operations.js +2 -283
  238. package/dist/memory-browse.js +8 -7
  239. package/dist/memory-controller.js +2 -2
  240. package/dist/memory-subject.js +2 -2
  241. package/dist/namespaces/migrate.js +20 -20
  242. package/dist/namespaces/search.js +5 -5
  243. package/dist/namespaces/storage.js +19 -19
  244. package/dist/offline-sync-changeset-generations.js +1 -1
  245. package/dist/offline-sync-embedding-generation.js +1 -1
  246. package/dist/offline-sync-impression-drain.js +6 -6
  247. package/dist/offline-sync-snapshot-stream.js +1 -1
  248. package/dist/offline-sync.js +1 -1
  249. package/dist/operator-doctor-corpus.js +23 -23
  250. package/dist/operator-toolkit.js +57 -60
  251. package/dist/orchestration/backlog-scheduler.js +277 -293
  252. package/dist/orchestration/backlog-scheduler.js.map +1 -1
  253. package/dist/orchestration/buffer-drain-runner.js +277 -293
  254. package/dist/orchestration/extraction-run.d.ts +4 -0
  255. package/dist/orchestration/extraction-run.d.ts.map +1 -1
  256. package/dist/orchestration/fact-dedup-window.d.ts +1 -1
  257. package/dist/orchestration/fact-dedup-window.d.ts.map +1 -1
  258. package/dist/orchestration/maintenance.js +38 -41
  259. package/dist/orchestrator.d.ts +9 -11
  260. package/dist/orchestrator.d.ts.map +1 -1
  261. package/dist/orchestrator.js +289 -306
  262. package/dist/page-versioning.js +3 -3
  263. package/dist/qmd-daemon-session.js +2 -2
  264. package/dist/qmd.js +3 -3
  265. package/dist/recall-explain-renderer.js +1 -1
  266. package/dist/recall-navigation-operations.js +2 -283
  267. package/dist/recall-navigation.js +331 -58
  268. package/dist/recall-planner-llm.js +3 -3
  269. package/dist/recall-state-view-admission.js +6 -6
  270. package/dist/recall-why-service.js +10 -9
  271. package/dist/recall-why.js +4 -3
  272. package/dist/recall-xray-cli.js +2 -2
  273. package/dist/recall-xray-renderer.js +1 -1
  274. package/dist/reconcile/manifest.js +3 -3
  275. package/dist/{resolution-N7H3F2E4.js → resolution-OVVIF7ZY.js} +8 -7
  276. package/dist/response-guidance-recall.js +2 -2
  277. package/dist/resume-bundles.js +39 -40
  278. package/dist/salvage-envelope.js +4 -4
  279. package/dist/search/factory.js +4 -4
  280. package/dist/search/index.js +4 -4
  281. package/dist/semantic-consolidation.js +22 -22
  282. package/dist/semantic-rule-promotion.js +19 -19
  283. package/dist/semantic-rule-verifier.js +19 -19
  284. package/dist/shared-context/manager.js +2 -3
  285. package/dist/source-agent-qualifier.js +31 -32
  286. package/dist/standup/build.js +19 -19
  287. package/dist/storage/content-hash-index.d.ts +10 -0
  288. package/dist/storage/content-hash-index.d.ts.map +1 -1
  289. package/dist/storage.js +18 -18
  290. package/dist/subject-config.js +3 -3
  291. package/dist/summarizer.d.ts +4 -1
  292. package/dist/summarizer.d.ts.map +1 -1
  293. package/dist/summarizer.js +6 -6
  294. package/dist/support-passport/index.js +53 -297
  295. package/dist/targeted-fact-recall.js +2 -2
  296. package/dist/tier-routing.js +3 -2
  297. package/dist/{tier-stats-FQGQSFET.js → tier-stats-FXEUJN73.js} +6 -5
  298. package/dist/{tier-stats-FQGQSFET.js.map → tier-stats-FXEUJN73.js.map} +1 -1
  299. package/dist/transcript.js +2 -2
  300. package/dist/transfer/capsule-import.js +4 -4
  301. package/dist/transfer/export-okf.js +19 -19
  302. package/dist/verified-recall.js +19 -19
  303. package/dist/wearables/memory-gen.d.ts +5 -1
  304. package/dist/wearables/memory-gen.d.ts.map +1 -1
  305. package/dist/wearables/service.d.ts.map +1 -1
  306. package/dist/who-knows-cli.js +20 -20
  307. package/dist/who-knows.js +19 -19
  308. package/dist/write-envelope.js +3 -3
  309. package/package.json +2 -2
  310. package/src/access-boundary.ts +5 -1
  311. package/src/access-category-alias.test.ts +5 -0
  312. package/src/access-mcp-frames.test.ts +60 -5
  313. package/src/access-mcp-frames.ts +72 -18
  314. package/src/access-mcp.test.ts +66 -2
  315. package/src/access-mcp.ts +19 -13
  316. package/src/access-service-coding-write.test.ts +7 -0
  317. package/src/activity/journal-extract-storage.test.ts +31 -0
  318. package/src/activity/journal-extract.test.ts +1 -0
  319. package/src/activity/journal-extract.ts +24 -3
  320. package/src/connectors/live/google-drive.test.ts +39 -0
  321. package/src/connectors/live/google-drive.ts +41 -12
  322. package/src/explicit-capture.test.ts +109 -17
  323. package/src/explicit-capture.ts +90 -37
  324. package/src/extraction-quote-grounding.test.ts +20 -0
  325. package/src/extraction-quote-grounding.ts +21 -11
  326. package/src/fact-dedup-window.test.ts +37 -0
  327. package/src/local-llm-helpers.ts +12 -0
  328. package/src/local-llm-shutdown.test.ts +194 -0
  329. package/src/local-llm.ts +32 -30
  330. package/src/orchestration/extraction-run.ts +12 -3
  331. package/src/orchestration/fact-dedup-window.ts +5 -1
  332. package/src/orchestrator-connector-dedup.test.ts +9 -5
  333. package/src/orchestrator.ts +47 -50
  334. package/src/storage/content-hash-index.ts +27 -2
  335. package/src/storage-fact-hash-publish-failure.test.ts +87 -0
  336. package/src/summarizer-shutdown.test.ts +195 -0
  337. package/src/summarizer.ts +15 -2
  338. package/src/wearables/memory-gen.test.ts +20 -0
  339. package/src/wearables/memory-gen.ts +14 -7
  340. package/src/wearables/service.ts +14 -1
  341. package/src/wearables/storage-io.test.ts +25 -0
  342. package/dist/chunk-2FGLEF7C.js +0 -61
  343. package/dist/chunk-2FGLEF7C.js.map +0 -1
  344. package/dist/chunk-3RLK65ZK.js +0 -203
  345. package/dist/chunk-3RLK65ZK.js.map +0 -1
  346. package/dist/chunk-4WR2OD7K.js +0 -43
  347. package/dist/chunk-4WR2OD7K.js.map +0 -1
  348. package/dist/chunk-5KBIOI4G.js.map +0 -1
  349. package/dist/chunk-5M5M22GW.js +0 -346
  350. package/dist/chunk-5M5M22GW.js.map +0 -1
  351. package/dist/chunk-7HTUYFR3.js.map +0 -1
  352. package/dist/chunk-AP6NCP3V.js.map +0 -1
  353. package/dist/chunk-B4QYQFGY.js.map +0 -1
  354. package/dist/chunk-BJRTMNCB.js +0 -1919
  355. package/dist/chunk-BJRTMNCB.js.map +0 -1
  356. package/dist/chunk-BRLXOZLM.js.map +0 -1
  357. package/dist/chunk-BSACVS6R.js +0 -621
  358. package/dist/chunk-BSACVS6R.js.map +0 -1
  359. package/dist/chunk-DKAA2IHQ.js +0 -3644
  360. package/dist/chunk-DKAA2IHQ.js.map +0 -1
  361. package/dist/chunk-E4IRW2FG.js.map +0 -1
  362. package/dist/chunk-E6M225BJ.js.map +0 -1
  363. package/dist/chunk-EQ4U73UH.js.map +0 -1
  364. package/dist/chunk-ETSJD5IV.js +0 -361
  365. package/dist/chunk-ETSJD5IV.js.map +0 -1
  366. package/dist/chunk-F55YQP7N.js +0 -336
  367. package/dist/chunk-F55YQP7N.js.map +0 -1
  368. package/dist/chunk-FHGWKODN.js +0 -2300
  369. package/dist/chunk-FHGWKODN.js.map +0 -1
  370. package/dist/chunk-FLRP63GU.js +0 -32219
  371. package/dist/chunk-FLRP63GU.js.map +0 -1
  372. package/dist/chunk-FSO3G4JJ.js.map +0 -1
  373. package/dist/chunk-ID6JGIMD.js +0 -25
  374. package/dist/chunk-ID6JGIMD.js.map +0 -1
  375. package/dist/chunk-IGLJNHOX.js +0 -62
  376. package/dist/chunk-IGLJNHOX.js.map +0 -1
  377. package/dist/chunk-IPT2OY4B.js.map +0 -1
  378. package/dist/chunk-IUKYFTGW.js.map +0 -1
  379. package/dist/chunk-NBH6K6G5.js.map +0 -1
  380. package/dist/chunk-NTRUKAAE.js +0 -223
  381. package/dist/chunk-NTRUKAAE.js.map +0 -1
  382. package/dist/chunk-OGXXGHW6.js +0 -223
  383. package/dist/chunk-OGXXGHW6.js.map +0 -1
  384. package/dist/chunk-PPCLZ4JU.js +0 -28
  385. package/dist/chunk-PPCLZ4JU.js.map +0 -1
  386. package/dist/chunk-QJPJXCS4.js.map +0 -1
  387. package/dist/chunk-R2LBF4HH.js +0 -729
  388. package/dist/chunk-R2LBF4HH.js.map +0 -1
  389. package/dist/chunk-RHQLIHMB.js.map +0 -1
  390. package/dist/chunk-RRTVGD3J.js +0 -792
  391. package/dist/chunk-RRTVGD3J.js.map +0 -1
  392. package/dist/chunk-SUSW74WU.js.map +0 -1
  393. package/dist/chunk-T6OZW2WR.js.map +0 -1
  394. package/dist/chunk-UDKWFDV2.js.map +0 -1
  395. package/dist/chunk-V7IZKJI3.js +0 -22
  396. package/dist/chunk-V7IZKJI3.js.map +0 -1
  397. package/dist/chunk-X562NQFA.js +0 -10144
  398. package/dist/chunk-X562NQFA.js.map +0 -1
  399. package/dist/chunk-XDSCJOH7.js +0 -3991
  400. package/dist/chunk-XDSCJOH7.js.map +0 -1
  401. package/dist/chunk-YCNIGRRF.js.map +0 -1
  402. package/dist/chunk-ZTTCDQ4I.js +0 -18796
  403. package/dist/chunk-ZTTCDQ4I.js.map +0 -1
  404. /package/dist/{capsule-merge-2IIXFXN5.js.map → capsule-merge-6IDAYTKG.js.map} +0 -0
  405. /package/dist/{chunk-ATPWZ4F7.js.map → chunk-2LMA22UU.js.map} +0 -0
  406. /package/dist/{chunk-RGUUBAT5.js.map → chunk-2WCLTWV2.js.map} +0 -0
  407. /package/dist/{chunk-BQZEGOZ4.js.map → chunk-2YODOG2O.js.map} +0 -0
  408. /package/dist/{chunk-WYG5UNDY.js.map → chunk-3AUDELZL.js.map} +0 -0
  409. /package/dist/{chunk-N4KAE2NB.js.map → chunk-3CYOCE6U.js.map} +0 -0
  410. /package/dist/{chunk-MB6ZJDN6.js.map → chunk-3FBAEPCU.js.map} +0 -0
  411. /package/dist/{chunk-PIITB2YZ.js.map → chunk-3ZS3NUEI.js.map} +0 -0
  412. /package/dist/{chunk-ANZZLRUX.js.map → chunk-4IVRQMZW.js.map} +0 -0
  413. /package/dist/{chunk-63E37JCN.js.map → chunk-4RAJT5L2.js.map} +0 -0
  414. /package/dist/{chunk-45VUHDV2.js.map → chunk-5CO5G4MN.js.map} +0 -0
  415. /package/dist/{chunk-LUJCQQ3L.js.map → chunk-65HWAQ4F.js.map} +0 -0
  416. /package/dist/{chunk-T67LUYCR.js.map → chunk-77NTFICT.js.map} +0 -0
  417. /package/dist/{chunk-UE6RRXMF.js.map → chunk-A4F7OIC5.js.map} +0 -0
  418. /package/dist/{chunk-U6UNF5ZS.js.map → chunk-B33YWUJV.js.map} +0 -0
  419. /package/dist/{chunk-RRJBDXAQ.js.map → chunk-B377OKUP.js.map} +0 -0
  420. /package/dist/{chunk-ETZLQOUR.js.map → chunk-BGHCSLE5.js.map} +0 -0
  421. /package/dist/{chunk-YYOMGOHB.js.map → chunk-BOK6BN5M.js.map} +0 -0
  422. /package/dist/{chunk-OH7QLI6W.js.map → chunk-BPPUH5JM.js.map} +0 -0
  423. /package/dist/{chunk-4J363OAA.js.map → chunk-BTI4C4MA.js.map} +0 -0
  424. /package/dist/{chunk-O6ZSWHVR.js.map → chunk-C2KE5DMD.js.map} +0 -0
  425. /package/dist/{chunk-47F6WWLQ.js.map → chunk-C73N66PR.js.map} +0 -0
  426. /package/dist/{chunk-E3A7ELSG.js.map → chunk-CGJYL633.js.map} +0 -0
  427. /package/dist/{chunk-WRT7GJ2D.js.map → chunk-CIWMTNHW.js.map} +0 -0
  428. /package/dist/{chunk-O55EKIEC.js.map → chunk-D3ZKHLN2.js.map} +0 -0
  429. /package/dist/{chunk-CD4BCCNP.js.map → chunk-DJ7WVEWX.js.map} +0 -0
  430. /package/dist/{chunk-PWXPRVLK.js.map → chunk-EFL24KOI.js.map} +0 -0
  431. /package/dist/{chunk-4CJTQHEG.js.map → chunk-ESLOLCD4.js.map} +0 -0
  432. /package/dist/{chunk-6F42QONS.js.map → chunk-ETBVCRVL.js.map} +0 -0
  433. /package/dist/{chunk-VILPVT4S.js.map → chunk-EZ47HOJ6.js.map} +0 -0
  434. /package/dist/{chunk-EFYN5I7Z.js.map → chunk-F4QFU5IZ.js.map} +0 -0
  435. /package/dist/{chunk-7W3RXOIG.js.map → chunk-FMKILENU.js.map} +0 -0
  436. /package/dist/{chunk-YLXETSAH.js.map → chunk-GCZJ7XRI.js.map} +0 -0
  437. /package/dist/{chunk-QFEDITXM.js.map → chunk-JNDMIAJ4.js.map} +0 -0
  438. /package/dist/{chunk-E5PPE4VA.js.map → chunk-K2VRKCPA.js.map} +0 -0
  439. /package/dist/{chunk-MKRYQROF.js.map → chunk-LGEHAQHK.js.map} +0 -0
  440. /package/dist/{chunk-XYTQJD7F.js.map → chunk-LMJVP5CM.js.map} +0 -0
  441. /package/dist/{chunk-FQKBJJYB.js.map → chunk-LPV72KRQ.js.map} +0 -0
  442. /package/dist/{chunk-2LCRG2YV.js.map → chunk-M2XR6B6V.js.map} +0 -0
  443. /package/dist/{chunk-P4WNBSTW.js.map → chunk-MH632KPO.js.map} +0 -0
  444. /package/dist/{chunk-ZU5JDLOH.js.map → chunk-MMRTPH3J.js.map} +0 -0
  445. /package/dist/{chunk-PMJFRDJI.js.map → chunk-MUX7IL77.js.map} +0 -0
  446. /package/dist/{chunk-HF3BKUVV.js.map → chunk-NAQ4A5IX.js.map} +0 -0
  447. /package/dist/{chunk-TVIVY7KU.js.map → chunk-NED7IR7B.js.map} +0 -0
  448. /package/dist/{chunk-6F5MJFXY.js.map → chunk-NHVAX7MH.js.map} +0 -0
  449. /package/dist/{chunk-TG3R2SID.js.map → chunk-NMGHGTVR.js.map} +0 -0
  450. /package/dist/{chunk-NGHDW6UU.js.map → chunk-NUQEREIP.js.map} +0 -0
  451. /package/dist/{chunk-5IIQU4JZ.js.map → chunk-OB72KNMF.js.map} +0 -0
  452. /package/dist/{chunk-JV4S6VDH.js.map → chunk-OJXJWNFY.js.map} +0 -0
  453. /package/dist/{chunk-Z7JIZ42P.js.map → chunk-PRAUN6PN.js.map} +0 -0
  454. /package/dist/{chunk-RWGRSKN5.js.map → chunk-PT4DZDJA.js.map} +0 -0
  455. /package/dist/{chunk-7EPY3IQL.js.map → chunk-PZJQ46DH.js.map} +0 -0
  456. /package/dist/{chunk-MXHMNKWG.js.map → chunk-QDESY76F.js.map} +0 -0
  457. /package/dist/{chunk-I6QGI65T.js.map → chunk-QRMG4HK4.js.map} +0 -0
  458. /package/dist/{chunk-ZU3NJNO7.js.map → chunk-QSF5SJAM.js.map} +0 -0
  459. /package/dist/{chunk-5IYOKDM4.js.map → chunk-R23JWJD3.js.map} +0 -0
  460. /package/dist/{chunk-7GLJMDEQ.js.map → chunk-RM2YUFH6.js.map} +0 -0
  461. /package/dist/{chunk-RIMK327Y.js.map → chunk-SGQPR5SX.js.map} +0 -0
  462. /package/dist/{chunk-ZGFLIK5H.js.map → chunk-SPAKBUJY.js.map} +0 -0
  463. /package/dist/{chunk-ER7XANP3.js.map → chunk-SQ3GEIEL.js.map} +0 -0
  464. /package/dist/{chunk-BLJT6JP2.js.map → chunk-SVT5IA2H.js.map} +0 -0
  465. /package/dist/{chunk-GVGAO3WV.js.map → chunk-TJ4F6H4H.js.map} +0 -0
  466. /package/dist/{chunk-R6HMAIKM.js.map → chunk-TOSPNM4T.js.map} +0 -0
  467. /package/dist/{chunk-HH5LY6RR.js.map → chunk-TRQE3RYR.js.map} +0 -0
  468. /package/dist/{chunk-RMXS4I66.js.map → chunk-TVDJEUV5.js.map} +0 -0
  469. /package/dist/{chunk-PLCYKAWH.js.map → chunk-TYRWSE4B.js.map} +0 -0
  470. /package/dist/{chunk-IQWUACVG.js.map → chunk-UHMHJX5G.js.map} +0 -0
  471. /package/dist/{chunk-YODUDA6R.js.map → chunk-UN4RVUG2.js.map} +0 -0
  472. /package/dist/{chunk-E6Z4FBX6.js.map → chunk-V2QSNFCT.js.map} +0 -0
  473. /package/dist/{chunk-E7YZXWIS.js.map → chunk-WKSQTMU7.js.map} +0 -0
  474. /package/dist/{chunk-RIZ5NUNN.js.map → chunk-WQ4XKIOX.js.map} +0 -0
  475. /package/dist/{chunk-QEYTRFR3.js.map → chunk-X26YOFGS.js.map} +0 -0
  476. /package/dist/{chunk-ITHZFHST.js.map → chunk-X2BVB74H.js.map} +0 -0
  477. /package/dist/{chunk-XYKBWTWI.js.map → chunk-XIYLWEXC.js.map} +0 -0
  478. /package/dist/{chunk-IBJ6U753.js.map → chunk-XKZBZOKV.js.map} +0 -0
  479. /package/dist/{chunk-65AUYLU3.js.map → chunk-XPXHQI6N.js.map} +0 -0
  480. /package/dist/{chunk-EXHXJETE.js.map → chunk-XRDYRWZI.js.map} +0 -0
  481. /package/dist/{chunk-2JSDPUKD.js.map → chunk-YMFPFXEX.js.map} +0 -0
  482. /package/dist/{chunk-645WOU5I.js.map → chunk-ZDZJNXL6.js.map} +0 -0
  483. /package/dist/{chunk-6TCXIRP5.js.map → chunk-ZKE4CO6B.js.map} +0 -0
  484. /package/dist/{chunk-FNXQZGUS.js.map → chunk-ZSE774RV.js.map} +0 -0
  485. /package/dist/{contradiction-scan-P2MHYFVG.js.map → contradiction-scan-IBPYGQZF.js.map} +0 -0
  486. /package/dist/{resolution-N7H3F2E4.js.map → resolution-OVVIF7ZY.js.map} +0 -0
@@ -1,1919 +0,0 @@
1
- import {
2
- buildStandup,
3
- parseStandupDate
4
- } from "./chunk-XYKBWTWI.js";
5
- import {
6
- backfillMemoryStorage,
7
- runLocationBackfill,
8
- runLocationCheck,
9
- runLocationDay,
10
- runLocationStatus,
11
- runLocationSync
12
- } from "./chunk-SUSW74WU.js";
13
- import {
14
- externalWikiSearchOperation
15
- } from "./chunk-MB6ZJDN6.js";
16
- import {
17
- DECISION_SUBCOMMANDS,
18
- DELTA_SUBCOMMANDS,
19
- defineOperation,
20
- isCodegraphToolName
21
- } from "./chunk-ZTTCDQ4I.js";
22
- import {
23
- CorrectionContractError
24
- } from "./chunk-ETSJD5IV.js";
25
- import {
26
- memoryStoreRequestSchema,
27
- retainedCategoryAlias
28
- } from "./chunk-R2DOFBG4.js";
29
- import {
30
- serializeMutations,
31
- withHeldFileLock
32
- } from "./chunk-EBV6VXKF.js";
33
- import {
34
- EngramAccessInputError
35
- } from "./chunk-CJCTKL6Y.js";
36
-
37
- // src/access-operations.ts
38
- import { z as z5 } from "zod";
39
-
40
- // src/relay/mission-access.ts
41
- import { z as z2 } from "zod";
42
-
43
- // src/relay/mission.ts
44
- import { createHash, randomUUID } from "crypto";
45
- import { promises as fs, constants as fsConstants } from "fs";
46
- import path from "path";
47
- import { z } from "zod";
48
- var RELAY_MISSION_SCHEMA_VERSION = "1";
49
- var RELAY_MISSION_MAX_FILE_BYTES = 4 * 1024 * 1024;
50
- var RELAY_MISSION_MAX_LINE_BYTES = 64 * 1024;
51
- var RELAY_MISSION_MAX_EVENTS = 2e3;
52
- var RELAY_MISSION_DEFAULT_EVENT_LIMIT = 200;
53
- var RELAY_MISSION_MAX_EVENT_LIMIT = 500;
54
- var RelayMissionIdSchema = z.string().min(1).max(64).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, {
55
- message: "must contain only lowercase letters, numbers, and single hyphens"
56
- });
57
- var identifierSchema = z.string().min(1).max(128).regex(/^[A-Za-z0-9](?:[A-Za-z0-9._:@-]{0,126}[A-Za-z0-9])?$/, {
58
- message: "must be a bounded identifier"
59
- });
60
- var namespaceSchema = z.string().trim().min(1).max(128);
61
- var authenticatedPrincipalSchema = z.string().trim().min(1).max(256);
62
- var shortTextSchema = z.string().trim().min(1).max(240);
63
- var statementSchema = z.string().trim().min(1).max(4e3);
64
- var uniqueIdentifierListSchema = (minimum, maximum) => z.array(identifierSchema).min(minimum).max(maximum).refine((values) => new Set(values).size === values.length, "must not contain duplicate identifiers");
65
- var RelayIsoDateTimeSchema = z.string().datetime({ offset: true }).refine((value) => Number.isFinite(Date.parse(value)), "must be a representable timestamp");
66
- var RelayEvidenceRefSchema = z.object({
67
- kind: z.enum(["memory", "recall_audit", "source", "test", "commit", "correction", "agent_output", "approval"]),
68
- id: identifierSchema,
69
- label: shortTextSchema,
70
- locator: z.string().trim().min(1).max(2048).optional(),
71
- capture: z.enum(["at_action", "historical_lookup", "fixture"])
72
- }).strict();
73
- var evidenceListSchema = z.array(RelayEvidenceRefSchema).max(16);
74
- var agentIdentityFields = {
75
- agentId: identifierSchema,
76
- sessionId: identifierSchema
77
- };
78
- var RelayMissionPayloadUnionSchema = z.discriminatedUnion("kind", [
79
- z.object({
80
- kind: z.literal("mission_started"),
81
- title: shortTextSchema,
82
- objective: statementSchema,
83
- runMode: z.enum(["live", "replay", "fixture"]),
84
- evidence: evidenceListSchema.default([])
85
- }).strict(),
86
- z.object({
87
- kind: z.literal("agent_status"),
88
- ...agentIdentityFields,
89
- label: shortTextSchema,
90
- role: shortTextSchema,
91
- status: z.enum(["idle", "working", "blocked", "complete", "failed"]),
92
- detail: statementSchema.optional(),
93
- evidence: evidenceListSchema.default([])
94
- }).strict(),
95
- z.object({
96
- kind: z.literal("agent_output"),
97
- ...agentIdentityFields,
98
- outputId: identifierSchema,
99
- summary: statementSchema,
100
- evidence: evidenceListSchema.default([])
101
- }).strict(),
102
- z.object({
103
- kind: z.literal("belief_observed"),
104
- ...agentIdentityFields,
105
- beliefId: identifierSchema,
106
- decisionId: identifierSchema,
107
- statement: statementSchema,
108
- confidence: z.number().finite().min(0).max(1).optional(),
109
- evidence: evidenceListSchema.default([])
110
- }).strict(),
111
- z.object({
112
- kind: z.literal("conflict_detected"),
113
- conflictId: identifierSchema,
114
- decisionIds: uniqueIdentifierListSchema(2, 8),
115
- agentIds: uniqueIdentifierListSchema(2, 16),
116
- summary: statementSchema,
117
- evidence: evidenceListSchema.default([])
118
- }).strict(),
119
- z.object({
120
- kind: z.literal("test_result"),
121
- testId: identifierSchema,
122
- decisionId: identifierSchema,
123
- correctionId: identifierSchema.optional(),
124
- command: z.string().trim().min(1).max(1e3),
125
- status: z.enum(["passed", "failed", "error"]),
126
- summary: statementSchema,
127
- durationMs: z.number().int().nonnegative().max(36e5).optional(),
128
- evidence: evidenceListSchema.default([])
129
- }).strict(),
130
- z.object({
131
- kind: z.literal("correction_proposed"),
132
- correctionId: identifierSchema,
133
- conflictId: identifierSchema,
134
- proposedDecisionId: identifierSchema,
135
- supersedesDecisionIds: uniqueIdentifierListSchema(1, 8),
136
- statement: statementSchema,
137
- rationale: statementSchema,
138
- proposedBy: identifierSchema,
139
- evidence: evidenceListSchema.default([])
140
- }).strict(),
141
- z.object({
142
- kind: z.literal("correction_approved"),
143
- correctionId: identifierSchema,
144
- approvedBy: z.object({
145
- kind: z.enum(["human", "agent"]),
146
- id: identifierSchema,
147
- label: shortTextSchema
148
- }).strict(),
149
- note: statementSchema.optional(),
150
- evidence: evidenceListSchema.default([])
151
- }).strict(),
152
- z.object({
153
- kind: z.literal("decision_superseded"),
154
- decisionId: identifierSchema,
155
- replacementDecisionId: identifierSchema,
156
- correctionId: identifierSchema,
157
- evidence: evidenceListSchema.default([])
158
- }).strict(),
159
- z.object({
160
- kind: z.literal("recall_observed"),
161
- ...agentIdentityFields,
162
- recallReceiptId: identifierSchema,
163
- decisionId: identifierSchema,
164
- query: statementSchema,
165
- capturedAtAction: z.boolean(),
166
- evidence: evidenceListSchema.default([])
167
- }).strict(),
168
- z.object({
169
- kind: z.literal("propagation_verified"),
170
- ...agentIdentityFields,
171
- correctionId: identifierSchema,
172
- decisionId: identifierSchema,
173
- recallReceiptId: identifierSchema,
174
- staleDecisionAbsent: z.boolean(),
175
- evidence: evidenceListSchema.default([])
176
- }).strict(),
177
- z.object({
178
- kind: z.literal("mission_completed"),
179
- outcome: z.enum(["recovered", "failed", "inconclusive"]),
180
- summary: statementSchema,
181
- evidence: evidenceListSchema.default([])
182
- }).strict()
183
- ]);
184
- var RelayMissionPayloadSchema = RelayMissionPayloadUnionSchema.superRefine((value, ctx) => {
185
- if (value.kind === "decision_superseded" && value.decisionId === value.replacementDecisionId) {
186
- ctx.addIssue({
187
- code: z.ZodIssueCode.custom,
188
- message: "a decision cannot supersede itself",
189
- path: ["replacementDecisionId"]
190
- });
191
- }
192
- if (value.kind === "correction_approved" && !value.evidence.some((item) => item.kind === "approval")) {
193
- ctx.addIssue({
194
- code: z.ZodIssueCode.custom,
195
- message: "correction approval requires approval evidence",
196
- path: ["evidence"]
197
- });
198
- }
199
- if (value.kind === "decision_superseded" && !value.evidence.some((item) => item.kind === "correction" && item.id === value.correctionId)) {
200
- ctx.addIssue({
201
- code: z.ZodIssueCode.custom,
202
- message: "decision supersession requires matching correction evidence",
203
- path: ["evidence"]
204
- });
205
- }
206
- if (value.kind !== "recall_observed" && value.kind !== "propagation_verified") return;
207
- const matchingRecallEvidence = value.evidence.find(
208
- (item) => item.kind === "recall_audit" && item.id === value.recallReceiptId
209
- );
210
- if (!matchingRecallEvidence) {
211
- ctx.addIssue({
212
- code: z.ZodIssueCode.custom,
213
- message: "recall proof requires a matching recall-audit reference",
214
- path: ["evidence"]
215
- });
216
- return;
217
- }
218
- if (value.kind === "recall_observed") {
219
- const expectedCapture = value.capturedAtAction ? "at_action" : "historical_lookup";
220
- if (matchingRecallEvidence.capture !== expectedCapture && matchingRecallEvidence.capture !== "fixture") {
221
- ctx.addIssue({
222
- code: z.ZodIssueCode.custom,
223
- message: `recall evidence must be labeled ${expectedCapture}`,
224
- path: ["evidence", value.evidence.indexOf(matchingRecallEvidence), "capture"]
225
- });
226
- }
227
- }
228
- });
229
- var RelayMissionEventInputSchema = z.object({
230
- occurredAt: RelayIsoDateTimeSchema.optional(),
231
- idempotencyKey: identifierSchema.optional(),
232
- payload: RelayMissionPayloadSchema
233
- }).strict();
234
- var RelayMissionEventSchema = z.object({
235
- schemaVersion: z.literal(RELAY_MISSION_SCHEMA_VERSION),
236
- eventId: identifierSchema,
237
- missionId: RelayMissionIdSchema,
238
- namespace: namespaceSchema,
239
- authenticatedPrincipal: authenticatedPrincipalSchema.optional(),
240
- recordedAt: RelayIsoDateTimeSchema,
241
- occurredAt: RelayIsoDateTimeSchema,
242
- idempotencyKey: identifierSchema.optional(),
243
- payload: RelayMissionPayloadSchema
244
- }).strict();
245
- var RelayMissionReadOptionsSchema = z.object({
246
- since: RelayIsoDateTimeSchema.optional(),
247
- until: RelayIsoDateTimeSchema.optional(),
248
- limit: z.number().int().min(1).max(RELAY_MISSION_MAX_EVENT_LIMIT).default(RELAY_MISSION_DEFAULT_EVENT_LIMIT)
249
- }).strict().refine(
250
- (value) => value.since === void 0 || value.until === void 0 || Date.parse(value.since) < Date.parse(value.until),
251
- { message: "since must be earlier than until", path: ["until"] }
252
- );
253
- var RelayMissionStoreError = class extends Error {
254
- constructor(code, message, options) {
255
- super(message, options);
256
- this.code = code;
257
- this.name = "RelayMissionStoreError";
258
- }
259
- code;
260
- };
261
- var RelayMissionStore = class {
262
- rootDir;
263
- namespace;
264
- now;
265
- createEventId;
266
- maxFileBytes;
267
- maxEvents;
268
- lockMaxWaitMs;
269
- constructor(options) {
270
- if (typeof options.rootDir !== "string" || options.rootDir.trim().length === 0) {
271
- throw new TypeError("RelayMissionStore rootDir must be a non-empty string");
272
- }
273
- this.rootDir = path.resolve(options.rootDir);
274
- this.namespace = namespaceSchema.parse(options.namespace);
275
- this.now = options.now ?? (() => /* @__PURE__ */ new Date());
276
- this.createEventId = options.createEventId ?? (() => `relay-${randomUUID()}`);
277
- this.maxFileBytes = positiveIntegerOption(options.maxFileBytes, "maxFileBytes", RELAY_MISSION_MAX_FILE_BYTES);
278
- this.maxEvents = positiveIntegerOption(options.maxEvents, "maxEvents", RELAY_MISSION_MAX_EVENTS);
279
- this.lockMaxWaitMs = positiveIntegerOption(options.lockMaxWaitMs, "lockMaxWaitMs", 5e3);
280
- }
281
- async append(missionIdValue, inputValue, hooks = {}) {
282
- const missionId = RelayMissionIdSchema.parse(missionIdValue);
283
- const input = RelayMissionEventInputSchema.parse(inputValue);
284
- const authenticatedPrincipal = hooks.authenticatedPrincipal === void 0 ? void 0 : authenticatedPrincipalSchema.parse(hooks.authenticatedPrincipal);
285
- const missionDir = await this.openMissionDirectory(true);
286
- const filePath = path.join(missionDir.accessPath, `${missionId}.jsonl`);
287
- const logicalFilePath = path.join(missionDir.logicalPath, `${missionId}.jsonl`);
288
- const lockPath = `${filePath}.lock`;
289
- try {
290
- return await serializeMutations(
291
- `relay-mission:${logicalFilePath}`,
292
- () => withHeldFileLock(
293
- lockPath,
294
- { staleMs: 3e4, maxWaitMs: this.lockMaxWaitMs, heartbeatMs: 1e4 },
295
- async (acquired) => {
296
- if (!acquired) {
297
- throw new RelayMissionStoreError("lock_unavailable", "could not acquire Relay mission lock");
298
- }
299
- const existing = await this.readFile(filePath, missionId);
300
- if (input.idempotencyKey) {
301
- const replay = existing.events.find((event2) => event2.idempotencyKey === input.idempotencyKey);
302
- if (replay) {
303
- if (!sameIdempotentInput(replay, input, authenticatedPrincipal)) {
304
- throw new RelayMissionStoreError(
305
- "idempotency_conflict",
306
- `idempotency key ${input.idempotencyKey} was already used for different input`
307
- );
308
- }
309
- return { appended: false, replayed: true, event: replay };
310
- }
311
- }
312
- if (existing.events.length >= this.maxEvents) {
313
- throw new RelayMissionStoreError(
314
- "limit_exceeded",
315
- `mission ${missionId} reached the ${this.maxEvents}-event limit`
316
- );
317
- }
318
- await hooks.beforeAppend?.();
319
- const recordedAt = validNow(this.now);
320
- const event = RelayMissionEventSchema.parse({
321
- schemaVersion: RELAY_MISSION_SCHEMA_VERSION,
322
- eventId: this.createEventId(),
323
- missionId,
324
- namespace: this.namespace,
325
- ...authenticatedPrincipal === void 0 ? {} : { authenticatedPrincipal },
326
- recordedAt,
327
- occurredAt: input.occurredAt ?? recordedAt,
328
- ...input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {},
329
- payload: input.payload
330
- });
331
- const line = `${JSON.stringify(event)}
332
- `;
333
- const lineBytes = Buffer.byteLength(line, "utf8");
334
- if (lineBytes > RELAY_MISSION_MAX_LINE_BYTES) {
335
- throw new RelayMissionStoreError(
336
- "limit_exceeded",
337
- `Relay mission event exceeds ${RELAY_MISSION_MAX_LINE_BYTES} bytes`
338
- );
339
- }
340
- if (existing.rawBytes + lineBytes > this.maxFileBytes) {
341
- throw new RelayMissionStoreError(
342
- "limit_exceeded",
343
- `mission ${missionId} would exceed the ${this.maxFileBytes}-byte limit`
344
- );
345
- }
346
- await this.appendFile(filePath, line);
347
- return { appended: true, replayed: false, event };
348
- }
349
- )
350
- );
351
- } finally {
352
- await missionDir.handle.close().catch(() => void 0);
353
- }
354
- }
355
- async read(missionIdValue, readOptions = {}) {
356
- const missionId = RelayMissionIdSchema.parse(missionIdValue);
357
- const options = RelayMissionReadOptionsSchema.parse(readOptions);
358
- const missionDir = await this.openMissionDirectory(false);
359
- if (missionDir === null) {
360
- return reduceRelayMission({
361
- missionId,
362
- namespace: this.namespace,
363
- events: [],
364
- fileExists: false,
365
- options
366
- });
367
- }
368
- const filePath = path.join(missionDir.accessPath, `${missionId}.jsonl`);
369
- const logicalFilePath = path.join(missionDir.logicalPath, `${missionId}.jsonl`);
370
- try {
371
- return await serializeMutations(`relay-mission:${logicalFilePath}`, async () => {
372
- const read = await this.readFile(filePath, missionId);
373
- return reduceRelayMission({
374
- missionId,
375
- namespace: this.namespace,
376
- events: read.events,
377
- corruptLines: read.corruptLines,
378
- fileExists: read.exists,
379
- options
380
- });
381
- });
382
- } finally {
383
- await missionDir.handle.close().catch(() => void 0);
384
- }
385
- }
386
- async openMissionDirectory(create) {
387
- let currentHandle;
388
- try {
389
- currentHandle = await openVerifiedDirectory(this.rootDir, "Relay root must be a real directory");
390
- let logicalPath = this.rootDir;
391
- for (const segment of ["state", "relay", "missions"]) {
392
- let childHandle;
393
- try {
394
- childHandle = create ? await openOrCreatePinnedChildDirectory(currentHandle, segment) : await openVerifiedDirectory(
395
- path.join(pinnedDirectoryPath(currentHandle), segment),
396
- "Relay directory symlinks are rejected"
397
- );
398
- } catch (error) {
399
- if (!create && error.code === "ENOENT") {
400
- await currentHandle.close();
401
- return null;
402
- }
403
- throw error;
404
- }
405
- await currentHandle.close();
406
- currentHandle = childHandle;
407
- logicalPath = path.join(logicalPath, segment);
408
- }
409
- return {
410
- logicalPath,
411
- accessPath: pinnedDirectoryPath(currentHandle),
412
- handle: currentHandle
413
- };
414
- } catch (error) {
415
- await currentHandle?.close().catch(() => void 0);
416
- if (error instanceof RelayMissionStoreError) throw error;
417
- throw new RelayMissionStoreError("unsafe_path", "Relay mission directory is unavailable or unsafe", {
418
- cause: error
419
- });
420
- }
421
- }
422
- async readFile(filePath, missionId) {
423
- let handle;
424
- try {
425
- handle = await fs.open(filePath, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW);
426
- const info = await handle.stat();
427
- if (!info.isFile()) {
428
- throw new RelayMissionStoreError("unsafe_path", "Relay mission path is not a file");
429
- }
430
- if (info.nlink !== 1) {
431
- throw new RelayMissionStoreError("unsafe_path", "Relay mission hard links are rejected");
432
- }
433
- if (info.size > this.maxFileBytes) {
434
- throw new RelayMissionStoreError(
435
- "limit_exceeded",
436
- `mission ${missionId} exceeds the ${this.maxFileBytes}-byte read limit`
437
- );
438
- }
439
- const raw = await handle.readFile("utf8");
440
- const parsed = parseMissionJsonl(raw, missionId, this.namespace, this.maxEvents);
441
- return { exists: true, rawBytes: Buffer.byteLength(raw, "utf8"), ...parsed };
442
- } catch (error) {
443
- if (error.code === "ENOENT") {
444
- return { exists: false, events: [], corruptLines: 0, rawBytes: 0 };
445
- }
446
- if (error instanceof RelayMissionStoreError) throw error;
447
- throw new RelayMissionStoreError("read_failed", "failed to read Relay mission", {
448
- cause: error
449
- });
450
- } finally {
451
- await handle?.close().catch(() => void 0);
452
- }
453
- }
454
- async appendFile(filePath, line) {
455
- let handle;
456
- try {
457
- handle = await fs.open(
458
- filePath,
459
- fsConstants.O_WRONLY | fsConstants.O_CREAT | fsConstants.O_APPEND | fsConstants.O_NOFOLLOW,
460
- 384
461
- );
462
- const info = await handle.stat();
463
- if (!info.isFile()) {
464
- throw new RelayMissionStoreError("unsafe_path", "Relay mission path is not a file");
465
- }
466
- if (info.nlink !== 1) {
467
- throw new RelayMissionStoreError("unsafe_path", "Relay mission hard links are rejected");
468
- }
469
- await handle.chmod(384);
470
- await handle.writeFile(line, "utf8");
471
- await handle.sync();
472
- } catch (error) {
473
- if (error instanceof RelayMissionStoreError) throw error;
474
- if (error.code === "ELOOP") {
475
- throw new RelayMissionStoreError("unsafe_path", "Relay mission symlink is rejected", {
476
- cause: error
477
- });
478
- }
479
- throw new RelayMissionStoreError("write_failed", "failed to append Relay mission", {
480
- cause: error
481
- });
482
- } finally {
483
- await handle?.close().catch(() => void 0);
484
- }
485
- }
486
- };
487
- function reduceRelayMission(input) {
488
- const missionId = RelayMissionIdSchema.parse(input.missionId);
489
- const namespace = namespaceSchema.parse(input.namespace);
490
- const options = RelayMissionReadOptionsSchema.parse(input.options ?? {});
491
- const corruptLines = input.corruptLines ?? 0;
492
- const sinceMs = options.since ? Date.parse(options.since) : void 0;
493
- const untilMs = options.until ? Date.parse(options.until) : void 0;
494
- const appendPositions = new Map(input.events.map((event, index) => [event, index]));
495
- const orderedEvents = [...input.events].sort(compareRelayEvents);
496
- const firstStartEvent = input.events.find((event) => event.payload.kind === "mission_started");
497
- const firstCompletionEvent = input.events.find((event) => event.payload.kind === "mission_completed");
498
- const firstStartPosition = firstStartEvent === void 0 ? -1 : appendPositions.get(firstStartEvent) ?? -1;
499
- const firstCompletionPosition = firstCompletionEvent === void 0 ? -1 : appendPositions.get(firstCompletionEvent) ?? -1;
500
- const filteredEvents = orderedEvents.filter((event) => {
501
- const occurredAt = Date.parse(event.occurredAt);
502
- return (sinceMs === void 0 || occurredAt >= sinceMs) && (untilMs === void 0 || occurredAt < untilMs);
503
- });
504
- const agents = /* @__PURE__ */ new Map();
505
- const decisions = /* @__PURE__ */ new Map();
506
- const conflicts = /* @__PURE__ */ new Map();
507
- const corrections = /* @__PURE__ */ new Map();
508
- const tests = [];
509
- const propagation = [];
510
- const beliefAppendPositions = /* @__PURE__ */ new Map();
511
- const conflictAppendPositions = /* @__PURE__ */ new Map();
512
- const correctionProposalAppendPositions = /* @__PURE__ */ new Map();
513
- const correctionApprovalAppendPositions = /* @__PURE__ */ new Map();
514
- const correctionAppliedAppendPositions = /* @__PURE__ */ new Map();
515
- const recallAppendPositions = /* @__PURE__ */ new Map();
516
- const propagationAppendPositions = /* @__PURE__ */ new Map();
517
- const testAppendPositions = /* @__PURE__ */ new Map();
518
- const missingEvidence = /* @__PURE__ */ new Set();
519
- if (corruptLines > 0) missingEvidence.add("mission:corrupt-events");
520
- const substantiveAgentIds = /* @__PURE__ */ new Set();
521
- const substantiveSessionIds = /* @__PURE__ */ new Set();
522
- const conflictDisagreementIds = /* @__PURE__ */ new Set();
523
- const groundedCorrectionIds = /* @__PURE__ */ new Set();
524
- let title = null;
525
- let objective = null;
526
- let runMode = null;
527
- let startedAt = null;
528
- let completedAt = null;
529
- let status = "not_started";
530
- let outcome = null;
531
- const ensureAgent = (agentId, sessionId, occurredAt) => {
532
- const existing = agents.get(agentId);
533
- if (existing) {
534
- if (!existing.sessionIds.includes(sessionId)) existing.sessionIds.push(sessionId);
535
- existing.lastSeenAt = occurredAt;
536
- return existing;
537
- }
538
- const created = {
539
- agentId,
540
- label: agentId,
541
- role: "Codex agent",
542
- status: "working",
543
- sessionIds: [sessionId],
544
- outputs: [],
545
- recalls: [],
546
- lastSeenAt: occurredAt
547
- };
548
- agents.set(agentId, created);
549
- return created;
550
- };
551
- const markSubstantiveParticipation = (agentId, sessionId) => {
552
- substantiveAgentIds.add(agentId);
553
- if (sessionId) substantiveSessionIds.add(sessionId);
554
- };
555
- for (const event of orderedEvents) {
556
- const payload = event.payload;
557
- const appendPosition = appendPositions.get(event) ?? -1;
558
- if (payload.kind !== "mission_started" && firstStartEvent !== void 0 && (appendPosition < firstStartPosition || compareRelayEvents(event, firstStartEvent) < 0)) {
559
- missingEvidence.add(`mission:event-before-start:${event.eventId}`);
560
- collectMissingEvidence(missingEvidence, event, payload.evidence);
561
- continue;
562
- }
563
- if (payload.kind !== "mission_completed" && (outcome !== null || firstCompletionPosition >= 0 && appendPosition > firstCompletionPosition)) {
564
- missingEvidence.add(`mission:event-after-completion:${event.eventId}`);
565
- if (payload.kind === "mission_started") missingEvidence.add("mission:lifecycle-order");
566
- collectMissingEvidence(missingEvidence, event, payload.evidence);
567
- continue;
568
- }
569
- switch (payload.kind) {
570
- case "mission_started":
571
- if (startedAt !== null) {
572
- missingEvidence.add("mission:duplicate-start");
573
- collectMissingEvidence(missingEvidence, event, payload.evidence);
574
- break;
575
- }
576
- title = payload.title;
577
- objective = payload.objective;
578
- runMode = payload.runMode;
579
- startedAt = event.occurredAt;
580
- if (outcome === null) status = "active";
581
- collectMissingEvidence(missingEvidence, event, payload.evidence);
582
- break;
583
- case "agent_status": {
584
- const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);
585
- markSubstantiveParticipation(payload.agentId, payload.sessionId);
586
- agent.label = payload.label;
587
- agent.role = payload.role;
588
- agent.status = payload.status;
589
- collectMissingEvidence(missingEvidence, event, payload.evidence);
590
- break;
591
- }
592
- case "agent_output": {
593
- const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);
594
- markSubstantiveParticipation(payload.agentId, payload.sessionId);
595
- agent.outputs.push({
596
- outputId: payload.outputId,
597
- summary: payload.summary,
598
- occurredAt: event.occurredAt,
599
- evidence: payload.evidence
600
- });
601
- collectMissingEvidence(missingEvidence, event, payload.evidence);
602
- break;
603
- }
604
- case "belief_observed": {
605
- ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);
606
- markSubstantiveParticipation(payload.agentId, payload.sessionId);
607
- recordEarliestAppendPosition(
608
- beliefAppendPositions,
609
- beliefAppendPositionKey(payload.agentId, payload.decisionId),
610
- appendPosition
611
- );
612
- const existing = decisions.get(payload.decisionId);
613
- if (existing) {
614
- if (!decisionStatementsMatch(existing.statement, payload.statement)) {
615
- missingEvidence.add(`decision:${payload.decisionId}:statement-consistency`);
616
- }
617
- if (!existing.heldByAgentIds.includes(payload.agentId)) {
618
- existing.heldByAgentIds.push(payload.agentId);
619
- }
620
- if (!existing.beliefIds.includes(payload.beliefId)) existing.beliefIds.push(payload.beliefId);
621
- existing.evidence.push(...payload.evidence);
622
- } else {
623
- decisions.set(payload.decisionId, {
624
- decisionId: payload.decisionId,
625
- statement: payload.statement,
626
- status: "active",
627
- heldByAgentIds: [payload.agentId],
628
- beliefIds: [payload.beliefId],
629
- evidence: [...payload.evidence],
630
- firstObservedAt: event.occurredAt
631
- });
632
- }
633
- collectMissingEvidence(missingEvidence, event, payload.evidence);
634
- break;
635
- }
636
- case "conflict_detected": {
637
- recordEarliestAppendPosition(conflictAppendPositions, payload.conflictId, appendPosition);
638
- const normalizedDecisionStatements = payload.decisionIds.map((decisionId) => decisions.get(decisionId)?.statement).filter((statement) => statement !== void 0).map(normalizeDecisionStatement);
639
- if (normalizedDecisionStatements.length !== payload.decisionIds.length || new Set(normalizedDecisionStatements).size < 2) {
640
- missingEvidence.add(`conflict:${payload.conflictId}:distinct-decision-statements`);
641
- } else {
642
- conflictDisagreementIds.add(payload.conflictId);
643
- }
644
- const participantHoldings = payload.agentIds.map((agentId) => ({
645
- agentId,
646
- decisionIds: uniqueSorted(
647
- payload.decisionIds.filter((decisionId) => decisions.get(decisionId)?.heldByAgentIds.includes(agentId))
648
- )
649
- }));
650
- for (const participant of participantHoldings) {
651
- if (participant.decisionIds.length === 0) {
652
- missingEvidence.add(`conflict:${payload.conflictId}:participant:${participant.agentId}:decision-link`);
653
- }
654
- }
655
- for (const decisionId of payload.decisionIds) {
656
- if (!participantHoldings.some((participant) => participant.decisionIds.includes(decisionId))) {
657
- missingEvidence.add(`conflict:${payload.conflictId}:decision:${decisionId}:participant-link`);
658
- }
659
- if (!payload.agentIds.some(
660
- (agentId) => (beliefAppendPositions.get(beliefAppendPositionKey(agentId, decisionId)) ?? Number.POSITIVE_INFINITY) < appendPosition
661
- )) {
662
- missingEvidence.add(`conflict:${payload.conflictId}:decision:${decisionId}:append-order`);
663
- }
664
- }
665
- for (const agentId of payload.agentIds) {
666
- if (!payload.decisionIds.some(
667
- (decisionId) => (beliefAppendPositions.get(beliefAppendPositionKey(agentId, decisionId)) ?? Number.POSITIVE_INFINITY) < appendPosition
668
- )) {
669
- missingEvidence.add(`conflict:${payload.conflictId}:participant:${agentId}:append-order`);
670
- }
671
- }
672
- if (participantHoldings.every((participant) => participant.decisionIds.length > 0) && new Set(participantHoldings.map((participant) => participant.decisionIds.join("\0"))).size < 2) {
673
- missingEvidence.add(`conflict:${payload.conflictId}:distinct-participant-beliefs`);
674
- }
675
- if (conflicts.has(payload.conflictId)) {
676
- missingEvidence.add(`conflict:${payload.conflictId}:duplicate`);
677
- } else {
678
- conflicts.set(payload.conflictId, {
679
- conflictId: payload.conflictId,
680
- decisionIds: uniqueSorted(payload.decisionIds),
681
- agentIds: uniqueSorted(payload.agentIds),
682
- summary: payload.summary,
683
- status: "open",
684
- occurredAt: event.occurredAt,
685
- evidence: payload.evidence
686
- });
687
- }
688
- for (const agentId of payload.agentIds) substantiveAgentIds.add(agentId);
689
- collectMissingEvidence(missingEvidence, event, payload.evidence);
690
- break;
691
- }
692
- case "test_result": {
693
- const testSnapshot = {
694
- testId: payload.testId,
695
- decisionId: payload.decisionId,
696
- ...payload.correctionId === void 0 ? {} : { correctionId: payload.correctionId },
697
- command: payload.command,
698
- status: payload.status,
699
- summary: payload.summary,
700
- ...payload.durationMs === void 0 ? {} : { durationMs: payload.durationMs },
701
- occurredAt: event.occurredAt,
702
- evidence: payload.evidence
703
- };
704
- tests.push(testSnapshot);
705
- testAppendPositions.set(testSnapshot, appendPosition);
706
- collectMissingEvidence(missingEvidence, event, payload.evidence);
707
- break;
708
- }
709
- case "correction_proposed": {
710
- if (corrections.has(payload.correctionId)) {
711
- missingEvidence.add(`correction:${payload.correctionId}:duplicate-proposal`);
712
- collectMissingEvidence(missingEvidence, event, payload.evidence);
713
- break;
714
- }
715
- substantiveAgentIds.add(payload.proposedBy);
716
- const correction = {
717
- correctionId: payload.correctionId,
718
- conflictId: payload.conflictId,
719
- proposedDecisionId: payload.proposedDecisionId,
720
- supersedesDecisionIds: uniqueSorted(payload.supersedesDecisionIds),
721
- statement: payload.statement,
722
- rationale: payload.rationale,
723
- proposedBy: payload.proposedBy,
724
- status: "proposed",
725
- proposedAt: event.occurredAt,
726
- evidence: [...payload.evidence]
727
- };
728
- corrections.set(payload.correctionId, correction);
729
- correctionProposalAppendPositions.set(payload.correctionId, appendPosition);
730
- const existingProposedDecision = decisions.get(payload.proposedDecisionId);
731
- const replacementStatementMatches = existingProposedDecision === void 0 || decisionStatementsMatch(existingProposedDecision.statement, payload.statement);
732
- if (!replacementStatementMatches) {
733
- missingEvidence.add(`correction:${payload.correctionId}:replacement-statement`);
734
- }
735
- if (existingProposedDecision === void 0) {
736
- decisions.set(payload.proposedDecisionId, {
737
- decisionId: payload.proposedDecisionId,
738
- statement: payload.statement,
739
- status: "proposed",
740
- heldByAgentIds: [],
741
- beliefIds: [],
742
- evidence: [...payload.evidence],
743
- firstObservedAt: event.occurredAt
744
- });
745
- }
746
- const conflict = conflicts.get(payload.conflictId);
747
- const conflictAppendPosition = conflictAppendPositions.get(payload.conflictId);
748
- const conflictPredatesProposal = conflictAppendPosition !== void 0 && conflictAppendPosition < appendPosition;
749
- if (!conflictPredatesProposal) {
750
- missingEvidence.add(`correction:${payload.correctionId}:conflict-append-order`);
751
- }
752
- const correctionSourceIds = sourceEvidenceIds(payload.evidence);
753
- if (correctionSourceIds.size === 0) {
754
- missingEvidence.add(`correction:${payload.correctionId}:source`);
755
- }
756
- if (conflict) {
757
- const conflictSourceIds = sourceEvidenceIds(conflict.evidence);
758
- if (conflictSourceIds.size === 0) {
759
- missingEvidence.add(`conflict:${payload.conflictId}:source`);
760
- }
761
- const sourceLinked = [...correctionSourceIds].some((sourceId) => conflictSourceIds.has(sourceId));
762
- if (!sourceLinked) {
763
- missingEvidence.add(`correction:${payload.correctionId}:source-link`);
764
- }
765
- if (!correctionCoversConflict(correction, conflict)) {
766
- missingEvidence.add(`conflict:${payload.conflictId}:decision-link`);
767
- } else if (sourceLinked && conflictPredatesProposal && conflictDisagreementIds.has(payload.conflictId) && replacementStatementMatches) {
768
- groundedCorrectionIds.add(payload.correctionId);
769
- conflict.status = "proposed";
770
- conflict.correctionId = payload.correctionId;
771
- }
772
- } else {
773
- missingEvidence.add(`conflict:${payload.conflictId}:observation`);
774
- }
775
- status = "awaiting_approval";
776
- collectMissingEvidence(missingEvidence, event, payload.evidence);
777
- break;
778
- }
779
- case "correction_approved": {
780
- if (payload.approvedBy.kind === "agent") substantiveAgentIds.add(payload.approvedBy.id);
781
- const correction = corrections.get(payload.correctionId);
782
- if (correction) {
783
- const proposalAppendPosition = correctionProposalAppendPositions.get(payload.correctionId);
784
- const proposalPredatesApproval = proposalAppendPosition !== void 0 && proposalAppendPosition < appendPosition;
785
- const authenticatedHumanApproval = payload.approvedBy.kind !== "human" || runMode !== "live" || event.authenticatedPrincipal === payload.approvedBy.id;
786
- if (!proposalPredatesApproval) {
787
- missingEvidence.add(`correction:${payload.correctionId}:approval-append-order`);
788
- } else if (!authenticatedHumanApproval) {
789
- missingEvidence.add(`correction:${payload.correctionId}:authenticated-human-approval`);
790
- } else if (correction.approvedAt === void 0) {
791
- correction.approvedAt = event.occurredAt;
792
- correction.approvedBy = payload.approvedBy;
793
- correction.approvalNote = payload.note;
794
- if (event.authenticatedPrincipal !== void 0) {
795
- correction.approvalPrincipal = event.authenticatedPrincipal;
796
- }
797
- correctionApprovalAppendPositions.set(payload.correctionId, appendPosition);
798
- if (correction.status === "proposed") correction.status = "approved";
799
- status = "correcting";
800
- } else {
801
- missingEvidence.add(`correction:${payload.correctionId}:duplicate-approval`);
802
- }
803
- correction.evidence.push(...payload.evidence);
804
- } else {
805
- missingEvidence.add(`correction:${payload.correctionId}:proposal`);
806
- }
807
- collectMissingEvidence(missingEvidence, event, payload.evidence);
808
- break;
809
- }
810
- case "decision_superseded": {
811
- const correction = corrections.get(payload.correctionId);
812
- if (!correction) {
813
- missingEvidence.add(`correction:${payload.correctionId}:proposal`);
814
- collectMissingEvidence(missingEvidence, event, payload.evidence);
815
- break;
816
- }
817
- if (correction.approvedAt === void 0 || correction.approvedBy === void 0) {
818
- missingEvidence.add(`correction:${payload.correctionId}:approval`);
819
- collectMissingEvidence(missingEvidence, event, payload.evidence);
820
- break;
821
- }
822
- const approvalAppendPosition = correctionApprovalAppendPositions.get(payload.correctionId);
823
- if (approvalAppendPosition === void 0 || approvalAppendPosition >= appendPosition) {
824
- missingEvidence.add(`correction:${payload.correctionId}:approval-append-order`);
825
- collectMissingEvidence(missingEvidence, event, payload.evidence);
826
- break;
827
- }
828
- const conflict = conflicts.get(correction.conflictId);
829
- if (!conflict || !correctionCoversConflict(correction, conflict)) {
830
- missingEvidence.add(`conflict:${correction.conflictId}:decision-link`);
831
- collectMissingEvidence(missingEvidence, event, payload.evidence);
832
- break;
833
- }
834
- if (!groundedCorrectionIds.has(payload.correctionId)) {
835
- missingEvidence.add(`correction:${payload.correctionId}:source-link`);
836
- collectMissingEvidence(missingEvidence, event, payload.evidence);
837
- break;
838
- }
839
- if (!correction.supersedesDecisionIds.includes(payload.decisionId) || correction.proposedDecisionId !== payload.replacementDecisionId) {
840
- missingEvidence.add(`correction:${payload.correctionId}:supersession-link`);
841
- collectMissingEvidence(missingEvidence, event, payload.evidence);
842
- break;
843
- }
844
- const stale = decisions.get(payload.decisionId);
845
- const replacement = decisions.get(payload.replacementDecisionId);
846
- if (!stale) missingEvidence.add(`decision:${payload.decisionId}:observation`);
847
- if (!replacement) missingEvidence.add(`decision:${payload.replacementDecisionId}:replacement`);
848
- if (!stale || !replacement) {
849
- collectMissingEvidence(missingEvidence, event, payload.evidence);
850
- break;
851
- }
852
- stale.status = "superseded";
853
- stale.supersededAt = event.occurredAt;
854
- stale.supersededBy = payload.replacementDecisionId;
855
- stale.correctionId = payload.correctionId;
856
- stale.evidence.push(...payload.evidence);
857
- replacement.status = "active";
858
- replacement.evidence.push(...payload.evidence);
859
- correction.evidence.push(...payload.evidence);
860
- if (correctionSupersessionComplete(correction, decisions)) {
861
- correction.appliedAt ??= event.occurredAt;
862
- recordEarliestAppendPosition(correctionAppliedAppendPositions, payload.correctionId, appendPosition);
863
- if (correction.status !== "propagated") correction.status = "applied";
864
- conflict.status = "resolved";
865
- }
866
- collectMissingEvidence(missingEvidence, event, payload.evidence);
867
- break;
868
- }
869
- case "recall_observed": {
870
- const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);
871
- const coldStart = !substantiveAgentIds.has(payload.agentId) && !substantiveSessionIds.has(payload.sessionId) && agent.recalls.length === 0;
872
- const recallSnapshot = {
873
- recallReceiptId: payload.recallReceiptId,
874
- sessionId: payload.sessionId,
875
- decisionId: payload.decisionId,
876
- query: payload.query,
877
- capturedAtAction: payload.capturedAtAction,
878
- coldStart,
879
- occurredAt: event.occurredAt,
880
- evidence: payload.evidence
881
- };
882
- agent.recalls.push(recallSnapshot);
883
- recallAppendPositions.set(recallSnapshot, appendPosition);
884
- markSubstantiveParticipation(payload.agentId, payload.sessionId);
885
- const decision = decisions.get(payload.decisionId);
886
- if (decision && !decision.heldByAgentIds.includes(payload.agentId)) {
887
- decision.heldByAgentIds.push(payload.agentId);
888
- }
889
- if (!decision) missingEvidence.add(`decision:${payload.decisionId}:recall-target`);
890
- collectMissingEvidence(missingEvidence, event, payload.evidence);
891
- break;
892
- }
893
- case "propagation_verified": {
894
- const agent = ensureAgent(payload.agentId, payload.sessionId, event.occurredAt);
895
- const correction = corrections.get(payload.correctionId);
896
- if (!correction) {
897
- missingEvidence.add(`correction:${payload.correctionId}:proposal`);
898
- collectMissingEvidence(missingEvidence, event, payload.evidence);
899
- break;
900
- }
901
- if (correction.approvedAt === void 0 || correction.approvedBy === void 0) {
902
- missingEvidence.add(`correction:${payload.correctionId}:approval`);
903
- collectMissingEvidence(missingEvidence, event, payload.evidence);
904
- break;
905
- }
906
- if (correction.status !== "applied" && correction.status !== "propagated" || correction.appliedAt === void 0 || correction.proposedDecisionId !== payload.decisionId) {
907
- missingEvidence.add(`correction:${payload.correctionId}:supersession`);
908
- collectMissingEvidence(missingEvidence, event, payload.evidence);
909
- break;
910
- }
911
- const recalled = agent.recalls.find(
912
- (recall) => recall.recallReceiptId === payload.recallReceiptId && recall.sessionId === payload.sessionId && recall.decisionId === payload.decisionId
913
- );
914
- if (!recalled) {
915
- missingEvidence.add(`recall:${payload.recallReceiptId}:observation`);
916
- collectMissingEvidence(missingEvidence, event, payload.evidence);
917
- break;
918
- }
919
- const appliedAppendPosition = correctionAppliedAppendPositions.get(payload.correctionId);
920
- const recallAppendPosition = recallAppendPositions.get(recalled);
921
- if (appliedAppendPosition === void 0 || recallAppendPosition === void 0 || appliedAppendPosition >= recallAppendPosition) {
922
- missingEvidence.add(`recall:${payload.recallReceiptId}:post-application-append-order`);
923
- collectMissingEvidence(missingEvidence, event, payload.evidence);
924
- break;
925
- }
926
- if (recallAppendPosition >= appendPosition) {
927
- missingEvidence.add(`recall:${payload.recallReceiptId}:propagation-append-order`);
928
- collectMissingEvidence(missingEvidence, event, payload.evidence);
929
- break;
930
- }
931
- if (!recalled.capturedAtAction) {
932
- missingEvidence.add(`recall:${payload.recallReceiptId}:at-action`);
933
- collectMissingEvidence(missingEvidence, event, payload.evidence);
934
- break;
935
- }
936
- if (!recalled.coldStart) {
937
- missingEvidence.add(`recall:${payload.recallReceiptId}:cold-start`);
938
- collectMissingEvidence(missingEvidence, event, payload.evidence);
939
- break;
940
- }
941
- if (compareInstants(correction.appliedAt, recalled.occurredAt) >= 0) {
942
- missingEvidence.add(`recall:${payload.recallReceiptId}:post-application`);
943
- collectMissingEvidence(missingEvidence, event, payload.evidence);
944
- break;
945
- }
946
- if (compareInstants(recalled.occurredAt, event.occurredAt) >= 0) {
947
- missingEvidence.add(`recall:${payload.recallReceiptId}:propagation-order`);
948
- collectMissingEvidence(missingEvidence, event, payload.evidence);
949
- break;
950
- }
951
- const propagationSnapshot = {
952
- correctionId: payload.correctionId,
953
- agentId: payload.agentId,
954
- sessionId: payload.sessionId,
955
- decisionId: payload.decisionId,
956
- recallReceiptId: payload.recallReceiptId,
957
- staleDecisionAbsent: payload.staleDecisionAbsent,
958
- occurredAt: event.occurredAt,
959
- evidence: payload.evidence
960
- };
961
- propagation.push(propagationSnapshot);
962
- propagationAppendPositions.set(propagationSnapshot, appendPosition);
963
- correction.evidence.push(...payload.evidence);
964
- if (payload.staleDecisionAbsent) {
965
- correction.status = "propagated";
966
- correction.propagatedAt = event.occurredAt;
967
- }
968
- status = payload.staleDecisionAbsent ? "verified" : "correcting";
969
- collectMissingEvidence(missingEvidence, event, payload.evidence);
970
- break;
971
- }
972
- case "mission_completed":
973
- if (outcome !== null) {
974
- missingEvidence.add("mission:duplicate-completion");
975
- collectMissingEvidence(missingEvidence, event, payload.evidence);
976
- break;
977
- }
978
- if (startedAt === null) missingEvidence.add("mission:start");
979
- outcome = {
980
- result: payload.outcome,
981
- summary: payload.summary,
982
- occurredAt: event.occurredAt,
983
- evidence: payload.evidence
984
- };
985
- completedAt = event.occurredAt;
986
- status = payload.outcome === "failed" ? "failed" : "completed";
987
- collectMissingEvidence(missingEvidence, event, payload.evidence);
988
- break;
989
- }
990
- }
991
- for (const conflict of conflicts.values()) {
992
- if (sourceEvidenceIds(conflict.evidence).size === 0) {
993
- missingEvidence.add(`conflict:${conflict.conflictId}:source`);
994
- }
995
- for (const decisionId of conflict.decisionIds) {
996
- if (!decisions.has(decisionId)) missingEvidence.add(`decision:${decisionId}:conflict-target`);
997
- }
998
- for (const agentId of conflict.agentIds) {
999
- if (!agents.has(agentId)) missingEvidence.add(`agent:${agentId}:conflict-participant`);
1000
- }
1001
- }
1002
- for (const correction of corrections.values()) {
1003
- if (sourceEvidenceIds(correction.evidence).size === 0) {
1004
- missingEvidence.add(`correction:${correction.correctionId}:source`);
1005
- }
1006
- if (correction.approvedAt === void 0 || correction.approvedBy === void 0) {
1007
- missingEvidence.add(`correction:${correction.correctionId}:approval`);
1008
- } else if (correction.approvedBy.kind !== "human") {
1009
- missingEvidence.add(`correction:${correction.correctionId}:human-approval`);
1010
- } else if (runMode === "live" && correction.approvalPrincipal !== correction.approvedBy.id) {
1011
- missingEvidence.add(`correction:${correction.correctionId}:authenticated-human-approval`);
1012
- }
1013
- if (correction.status === "approved" || correction.status === "proposed") {
1014
- missingEvidence.add(`correction:${correction.correctionId}:supersession`);
1015
- }
1016
- if (correction.status === "applied") {
1017
- missingEvidence.add(`correction:${correction.correctionId}:propagation`);
1018
- }
1019
- }
1020
- const liveFixtureEvidenceEventIds = runMode === "live" ? orderedEvents.filter((event) => event.payload.evidence.some((item) => item.capture === "fixture")).map((event) => event.eventId) : [];
1021
- for (const eventId of liveFixtureEvidenceEventIds) {
1022
- missingEvidence.add(`mission:live-fixture-evidence:${eventId}`);
1023
- }
1024
- const captureTrustValid = liveFixtureEvidenceEventIds.length === 0;
1025
- const sortedDecisions = [...decisions.values()].map((decision) => ({
1026
- ...decision,
1027
- heldByAgentIds: uniqueSorted(decision.heldByAgentIds),
1028
- beliefIds: uniqueSorted(decision.beliefIds),
1029
- evidence: uniqueEvidence(decision.evidence)
1030
- })).sort((a, b) => compareText(a.decisionId, b.decisionId));
1031
- const coldStartVerified = captureTrustValid && propagation.some((item) => item.staleDecisionAbsent);
1032
- const passingOutcomeVerified = captureTrustValid && outcome?.result === "recovered" && tests.some((test) => {
1033
- const testAppendPosition = testAppendPositions.get(test);
1034
- if (test.status !== "passed" || test.correctionId === void 0 || testAppendPosition === void 0 || firstCompletionPosition < 0 || testAppendPosition >= firstCompletionPosition || compareInstants(test.occurredAt, outcome.occurredAt) >= 0) {
1035
- return false;
1036
- }
1037
- const correction = corrections.get(test.correctionId);
1038
- if (correction?.status !== "propagated" || correction.proposedDecisionId !== test.decisionId || !test.evidence.some((item) => item.kind === "correction" && item.id === correction.correctionId) || !test.evidence.some((item) => item.kind === "test")) {
1039
- return false;
1040
- }
1041
- return propagation.some((item) => {
1042
- const propagationAppendPosition = propagationAppendPositions.get(item);
1043
- return item.staleDecisionAbsent && item.correctionId === correction.correctionId && item.decisionId === test.decisionId && propagationAppendPosition !== void 0 && propagationAppendPosition < testAppendPosition && compareInstants(item.occurredAt, test.occurredAt) < 0;
1044
- });
1045
- });
1046
- if (outcome && !passingOutcomeVerified) missingEvidence.add("outcome:passing-test");
1047
- if (outcome?.result === "recovered" && !coldStartVerified) {
1048
- missingEvidence.add("outcome:cold-start-propagation");
1049
- }
1050
- if (input.events.length > 0 && startedAt === null) missingEvidence.add("mission:start");
1051
- if (startedAt !== null && completedAt !== null && compareInstants(startedAt, completedAt) >= 0) {
1052
- missingEvidence.add("mission:lifecycle-order");
1053
- }
1054
- if (firstStartEvent !== void 0 && firstCompletionEvent !== void 0 && (firstStartPosition >= firstCompletionPosition || compareRelayEvents(firstStartEvent, firstCompletionEvent) >= 0)) {
1055
- missingEvidence.add("mission:lifecycle-order");
1056
- }
1057
- const eventWindow = filteredEvents.slice(Math.max(0, filteredEvents.length - options.limit));
1058
- const found = input.events.length > 0;
1059
- return {
1060
- schemaVersion: RELAY_MISSION_SCHEMA_VERSION,
1061
- missionId,
1062
- namespace,
1063
- found,
1064
- readHealth: corruptLines > 0 ? "partial" : found || input.fileExists ? "ok" : "empty",
1065
- status,
1066
- mission: { title, objective, runMode, startedAt, completedAt },
1067
- agents: [...agents.values()].map((agent) => ({
1068
- ...agent,
1069
- sessionIds: uniqueSorted(agent.sessionIds),
1070
- outputs: agent.outputs.sort((a, b) => compareTimedIds(a, b, "outputId")),
1071
- recalls: agent.recalls.sort((a, b) => compareTimedIds(a, b, "recallReceiptId"))
1072
- })).sort((a, b) => compareText(a.agentId, b.agentId)),
1073
- decisions: sortedDecisions,
1074
- conflicts: [...conflicts.values()].sort((a, b) => compareText(a.conflictId, b.conflictId)),
1075
- corrections: [...corrections.values()].map((correction) => ({ ...correction, evidence: uniqueEvidence(correction.evidence) })).sort((a, b) => compareText(a.correctionId, b.correctionId)),
1076
- tests: tests.sort((a, b) => compareTimedIds(a, b, "testId")),
1077
- propagation: propagation.sort((a, b) => {
1078
- const byTime = compareInstants(a.occurredAt, b.occurredAt);
1079
- if (byTime !== 0) return byTime;
1080
- const byAgent = compareText(a.agentId, b.agentId);
1081
- return byAgent !== 0 ? byAgent : compareText(a.recallReceiptId, b.recallReceiptId);
1082
- }),
1083
- outcome,
1084
- receipt: {
1085
- complete: status === "completed" && outcome?.result === "recovered" && passingOutcomeVerified && coldStartVerified && missingEvidence.size === 0,
1086
- missingEvidence: [...missingEvidence].sort(compareText),
1087
- activeDecisionIds: sortedDecisions.filter((decision) => decision.status === "active").map((decision) => decision.decisionId),
1088
- supersededDecisionIds: sortedDecisions.filter((decision) => decision.status === "superseded").map((decision) => decision.decisionId),
1089
- coldStartVerified,
1090
- passingOutcomeVerified
1091
- },
1092
- bounds: {
1093
- totalEvents: filteredEvents.length,
1094
- returnedEvents: eventWindow.length,
1095
- corruptLines,
1096
- truncated: filteredEvents.length > eventWindow.length,
1097
- since: options.since ?? null,
1098
- until: options.until ?? null
1099
- },
1100
- events: eventWindow
1101
- };
1102
- }
1103
- function compareRelayEvents(a, b) {
1104
- const byOccurrence = compareInstants(a.occurredAt, b.occurredAt);
1105
- if (byOccurrence !== 0) return byOccurrence;
1106
- const byRecord = compareInstants(a.recordedAt, b.recordedAt);
1107
- if (byRecord !== 0) return byRecord;
1108
- return compareText(a.eventId, b.eventId);
1109
- }
1110
- function parseMissionJsonl(raw, missionId, namespace, maxEvents) {
1111
- const events = [];
1112
- let corruptLines = 0;
1113
- for (const line of raw.split("\n")) {
1114
- if (line.trim().length === 0) continue;
1115
- if (Buffer.byteLength(line, "utf8") > RELAY_MISSION_MAX_LINE_BYTES) {
1116
- corruptLines += 1;
1117
- continue;
1118
- }
1119
- let candidate;
1120
- try {
1121
- candidate = JSON.parse(line);
1122
- } catch {
1123
- corruptLines += 1;
1124
- continue;
1125
- }
1126
- const parsed = RelayMissionEventSchema.safeParse(candidate);
1127
- if (!parsed.success || parsed.data.missionId !== missionId || parsed.data.namespace !== namespace) {
1128
- corruptLines += 1;
1129
- continue;
1130
- }
1131
- if (events.length >= maxEvents) {
1132
- throw new RelayMissionStoreError(
1133
- "limit_exceeded",
1134
- `mission ${missionId} exceeds the ${maxEvents}-event read limit`
1135
- );
1136
- }
1137
- events.push(parsed.data);
1138
- }
1139
- return { events, corruptLines };
1140
- }
1141
- function collectMissingEvidence(missing, event, evidence) {
1142
- if (evidence.length === 0) missing.add(`event:${event.eventId}:evidence`);
1143
- }
1144
- function sameIdempotentInput(event, input, authenticatedPrincipal) {
1145
- if (event.authenticatedPrincipal !== authenticatedPrincipal) return false;
1146
- if (input.occurredAt !== void 0 && event.occurredAt !== input.occurredAt) return false;
1147
- return stableJson(event.payload) === stableJson(input.payload);
1148
- }
1149
- function stableJson(value) {
1150
- if (Array.isArray(value)) return `[${value.map(stableJson).join(",")}]`;
1151
- if (value && typeof value === "object") {
1152
- const entries = Object.entries(value).sort(([a], [b]) => compareText(a, b)).map(([key, child]) => `${JSON.stringify(key)}:${stableJson(child)}`);
1153
- return `{${entries.join(",")}}`;
1154
- }
1155
- return JSON.stringify(value) ?? "null";
1156
- }
1157
- function uniqueEvidence(evidence) {
1158
- const byKey = /* @__PURE__ */ new Map();
1159
- for (const item of evidence) byKey.set(`${item.kind}\0${item.id}`, item);
1160
- return [...byKey.values()].sort((a, b) => {
1161
- const byKind = compareText(a.kind, b.kind);
1162
- return byKind !== 0 ? byKind : compareText(a.id, b.id);
1163
- });
1164
- }
1165
- function uniqueSorted(values) {
1166
- return [...new Set(values)].sort(compareText);
1167
- }
1168
- function compareText(a, b) {
1169
- if (a < b) return -1;
1170
- if (a > b) return 1;
1171
- return 0;
1172
- }
1173
- function compareInstants(a, b) {
1174
- const aMs = Date.parse(a);
1175
- const bMs = Date.parse(b);
1176
- if (aMs < bMs) return -1;
1177
- if (aMs > bMs) return 1;
1178
- return 0;
1179
- }
1180
- function compareTimedIds(a, b, idKey) {
1181
- const byTime = compareInstants(a.occurredAt, b.occurredAt);
1182
- if (byTime !== 0) return byTime;
1183
- return compareText(String(a[idKey]), String(b[idKey]));
1184
- }
1185
- function beliefAppendPositionKey(agentId, decisionId) {
1186
- return `${agentId}\0${decisionId}`;
1187
- }
1188
- function normalizeDecisionStatement(statement) {
1189
- return statement.normalize("NFKC").trim().toLowerCase().replace(/\s+/g, " ").replace(/[.!?]+$/, "");
1190
- }
1191
- function decisionStatementsMatch(left, right) {
1192
- return normalizeDecisionStatement(left) === normalizeDecisionStatement(right);
1193
- }
1194
- function recordEarliestAppendPosition(positions, key, position) {
1195
- const current = positions.get(key);
1196
- if (current === void 0 || position < current) positions.set(key, position);
1197
- }
1198
- function correctionSupersessionComplete(correction, decisions) {
1199
- return correction.supersedesDecisionIds.every((decisionId) => {
1200
- const decision = decisions.get(decisionId);
1201
- return decision?.status === "superseded" && decision.supersededBy === correction.proposedDecisionId && decision.correctionId === correction.correctionId;
1202
- });
1203
- }
1204
- function correctionCoversConflict(correction, conflict) {
1205
- const expectedSuperseded = uniqueSorted(
1206
- conflict.decisionIds.filter((decisionId) => decisionId !== correction.proposedDecisionId)
1207
- );
1208
- const declaredSuperseded = uniqueSorted(correction.supersedesDecisionIds);
1209
- return expectedSuperseded.length === declaredSuperseded.length && expectedSuperseded.every((decisionId, index) => decisionId === declaredSuperseded[index]);
1210
- }
1211
- function sourceEvidenceIds(evidence) {
1212
- return new Set(evidence.filter((item) => item.kind === "source").map((item) => item.id));
1213
- }
1214
- function positiveIntegerOption(value, name, fallback) {
1215
- if (value === void 0) return fallback;
1216
- if (!Number.isInteger(value) || value <= 0) {
1217
- throw new TypeError(`RelayMissionStore ${name} must be a positive integer`);
1218
- }
1219
- return value;
1220
- }
1221
- function validNow(now) {
1222
- const value = now();
1223
- if (!(value instanceof Date) || !Number.isFinite(value.getTime())) {
1224
- throw new TypeError("RelayMissionStore now() must return a valid Date");
1225
- }
1226
- return value.toISOString();
1227
- }
1228
- async function openOrCreatePinnedChildDirectory(parentHandle, segment) {
1229
- const directory = path.join(pinnedDirectoryPath(parentHandle), segment);
1230
- try {
1231
- await fs.mkdir(directory, { mode: 448 });
1232
- } catch (error) {
1233
- if (error.code !== "EEXIST") throw error;
1234
- }
1235
- return openVerifiedDirectory(directory, "Relay directory symlinks are rejected");
1236
- }
1237
- async function openVerifiedDirectory(directory, unsafeMessage) {
1238
- const before = await fs.lstat(directory);
1239
- if (before.isSymbolicLink() || !before.isDirectory()) {
1240
- throw new RelayMissionStoreError("unsafe_path", unsafeMessage);
1241
- }
1242
- const handle = await fs.open(directory, fsConstants.O_RDONLY | fsConstants.O_DIRECTORY | fsConstants.O_NOFOLLOW);
1243
- try {
1244
- const openInfo = await handle.stat();
1245
- const after = await fs.lstat(directory);
1246
- if (after.isSymbolicLink() || !after.isDirectory() || before.dev !== openInfo.dev || before.ino !== openInfo.ino || after.dev !== openInfo.dev || after.ino !== openInfo.ino) {
1247
- throw new RelayMissionStoreError("unsafe_path", "Relay directory changed during validation");
1248
- }
1249
- return handle;
1250
- } catch (error) {
1251
- await handle.close().catch(() => void 0);
1252
- throw error;
1253
- }
1254
- }
1255
- function pinnedDirectoryPath(handle) {
1256
- if (process.platform === "linux") return `/proc/self/fd/${handle.fd}`;
1257
- if (process.platform === "darwin" || process.platform === "freebsd" || process.platform === "openbsd") {
1258
- return `/dev/fd/${handle.fd}`;
1259
- }
1260
- throw new RelayMissionStoreError(
1261
- "unsafe_path",
1262
- `Relay pinned directory access is unsupported on ${process.platform}`
1263
- );
1264
- }
1265
- function relayMissionReceiptDigest(snapshot) {
1266
- const receipt = {
1267
- schemaVersion: snapshot.schemaVersion,
1268
- missionId: snapshot.missionId,
1269
- namespace: snapshot.namespace,
1270
- status: snapshot.status,
1271
- decisions: snapshot.decisions,
1272
- corrections: snapshot.corrections,
1273
- propagation: snapshot.propagation,
1274
- tests: snapshot.tests,
1275
- outcome: snapshot.outcome,
1276
- receipt: snapshot.receipt
1277
- };
1278
- return createHash("sha256").update(stableJson(receipt)).digest("hex");
1279
- }
1280
-
1281
- // src/relay/mission-access.ts
1282
- var namespaceSchema2 = z2.string().trim().min(1).max(128).nullable().optional();
1283
- var RelayMissionAppendAccessSchema = z2.object({
1284
- missionId: RelayMissionIdSchema,
1285
- namespace: namespaceSchema2,
1286
- event: RelayMissionEventInputSchema
1287
- }).strict();
1288
- var optionalLimitSchema = z2.preprocess((value) => {
1289
- if (value === void 0 || value === null) return void 0;
1290
- if (typeof value === "string" && /^(?:0|[1-9]\d*)$/.test(value)) return Number(value);
1291
- return value;
1292
- }, z2.number().int().min(1).max(RELAY_MISSION_MAX_EVENT_LIMIT).optional());
1293
- var RelayMissionReadAccessSchema = z2.object({
1294
- missionId: RelayMissionIdSchema,
1295
- namespace: namespaceSchema2,
1296
- since: RelayIsoDateTimeSchema.optional(),
1297
- until: RelayIsoDateTimeSchema.optional(),
1298
- limit: optionalLimitSchema
1299
- }).strict().refine(
1300
- (value) => value.since === void 0 || value.until === void 0 || Date.parse(value.since) < Date.parse(value.until),
1301
- { message: "since must be earlier than until", path: ["until"] }
1302
- );
1303
- async function appendRelayMissionEvent(service, input, authenticatedPrincipal, beforeAppend) {
1304
- const event = RelayMissionEventInputSchema.parse(input.event);
1305
- const approvalPrincipal = authenticatedPrincipal?.trim() || void 0;
1306
- if (event.payload.kind === "correction_approved" && event.payload.approvedBy.kind === "human") {
1307
- if (!approvalPrincipal) {
1308
- throw new EngramAccessInputError(
1309
- "Relay human approval requires a server-resolved authenticated principal"
1310
- );
1311
- }
1312
- if (event.payload.approvedBy.id !== approvalPrincipal) {
1313
- throw new EngramAccessInputError(
1314
- "Relay human approval identity must match the server-resolved authenticated principal"
1315
- );
1316
- }
1317
- }
1318
- const resolved = await service.getWritableStorageForNamespace(input.namespace ?? void 0, approvalPrincipal);
1319
- const store = new RelayMissionStore({
1320
- rootDir: resolved.storage.dir,
1321
- namespace: resolved.namespace
1322
- });
1323
- return store.append(input.missionId, event, { authenticatedPrincipal: approvalPrincipal, beforeAppend });
1324
- }
1325
- async function readRelayMission(service, input, authenticatedPrincipal) {
1326
- const resolved = await service.getReadableStorageForNamespace(input.namespace ?? void 0, authenticatedPrincipal);
1327
- const store = new RelayMissionStore({
1328
- rootDir: resolved.storage.dir,
1329
- namespace: resolved.namespace
1330
- });
1331
- const options = RelayMissionReadOptionsSchema.parse({
1332
- ...input.since === void 0 ? {} : { since: input.since },
1333
- ...input.until === void 0 ? {} : { until: input.until },
1334
- ...input.limit === void 0 ? {} : { limit: input.limit }
1335
- });
1336
- return store.read(input.missionId, options);
1337
- }
1338
- var relayMissionAppendOperation = defineOperation({
1339
- name: "relay_mission_append",
1340
- description: "Append one evidence-backed event to an isolated Relay mission.",
1341
- schema: RelayMissionAppendAccessSchema,
1342
- handler: async (input, ctx) => ({
1343
- result: await appendRelayMissionEvent(ctx.service, input, ctx.authenticatedPrincipal, ctx.hooks?.enforceWriteQuota)
1344
- })
1345
- });
1346
- var relayMissionReadOperation = defineOperation({
1347
- name: "relay_mission_read",
1348
- description: "Read one bounded, browser-ready Relay mission receipt.",
1349
- schema: RelayMissionReadAccessSchema,
1350
- handler: async (input, ctx) => ({
1351
- result: await readRelayMission(ctx.service, input, ctx.authenticatedPrincipal)
1352
- })
1353
- });
1354
-
1355
- // src/location/access-operations.ts
1356
- import { z as z3 } from "zod";
1357
- var dateField = z3.union([z3.string(), z3.null()]).optional();
1358
- var daysField = z3.union([z3.number(), z3.string(), z3.null()]).optional();
1359
- var dryRunField = z3.union([z3.boolean(), z3.null()]).optional();
1360
- function locationDeps(service) {
1361
- return {
1362
- config: service.configRef.location,
1363
- memoryDir: service.memoryDir,
1364
- getMemoryStorage: () => backfillMemoryStorage(service.configRef)
1365
- };
1366
- }
1367
- defineOperation({
1368
- name: "location_status",
1369
- description: "Location sync status (gates, providers, last sync, day counts).",
1370
- fleetWide: true,
1371
- schema: z3.object({}).passthrough(),
1372
- handler: async (_input, ctx) => ({
1373
- result: await runLocationStatus(locationDeps(ctx.service))
1374
- })
1375
- });
1376
- defineOperation({
1377
- name: "location_check",
1378
- description: "Probe every enabled location provider.",
1379
- fleetWide: true,
1380
- schema: z3.object({}).passthrough(),
1381
- handler: async (_input, ctx) => ({
1382
- result: await runLocationCheck(locationDeps(ctx.service))
1383
- })
1384
- });
1385
- defineOperation({
1386
- name: "location_sync",
1387
- description: "Sync location days (default window: syncDays ending yesterday).",
1388
- fleetWide: true,
1389
- schema: z3.object({ date: dateField, days: daysField }).passthrough(),
1390
- handler: async (input, ctx) => ({
1391
- result: {
1392
- days: await runLocationSync(locationDeps(ctx.service), {
1393
- ...input.date !== void 0 && input.date !== null && input.date !== "" ? { endDate: input.date } : {},
1394
- ...input.days !== void 0 && input.days !== null && input.days !== "" ? { days: Number(input.days) } : {}
1395
- })
1396
- }
1397
- })
1398
- });
1399
- defineOperation({
1400
- name: "location_backfill",
1401
- description: "Sync an explicit historical day range (\u2264 90 days) and re-tag overlapping memories (issue #2046).",
1402
- fleetWide: true,
1403
- schema: z3.object({ from: dateField, to: dateField, dryRun: dryRunField }).passthrough(),
1404
- handler: async (input, ctx) => ({
1405
- result: await runLocationBackfill(locationDeps(ctx.service), {
1406
- from: input.from ?? null,
1407
- to: input.to ?? null,
1408
- dryRun: input.dryRun === true
1409
- })
1410
- })
1411
- });
1412
- defineOperation({
1413
- name: "location_day",
1414
- description: "Read one stored location day.",
1415
- fleetWide: true,
1416
- schema: z3.object({ date: dateField }).passthrough(),
1417
- handler: async (input, ctx) => ({
1418
- result: await runLocationDay(locationDeps(ctx.service).memoryDir, input.date)
1419
- })
1420
- });
1421
-
1422
- // src/standup/access-operations.ts
1423
- import { z as z4 } from "zod";
1424
- defineOperation({
1425
- name: "standup",
1426
- description: "Deterministic yesterday/today/blockers standup brief.",
1427
- fleetWide: true,
1428
- schema: z4.object({ date: z4.string().optional() }).strict(),
1429
- handler: async (input, ctx) => ({
1430
- result: buildStandup(ctx.service.memoryDir, parseStandupDate(input.date))
1431
- })
1432
- });
1433
-
1434
- // src/access-operations.ts
1435
- var memoryGetSchema = z5.object({
1436
- memoryId: z5.string().trim().min(1, "memoryId is required").max(512),
1437
- // Issue #1582 — when memoryId is a `[m:xxxx]` handle, sessionKey scopes the
1438
- // resolution to this session's recent recall history.
1439
- sessionKey: z5.string().trim().min(1).max(512).nullable().optional(),
1440
- namespace: z5.string().trim().max(256).nullable().optional()
1441
- });
1442
- var memoryGetOperation = defineOperation({
1443
- name: "memory_get",
1444
- description: "Fetch one memory by id.",
1445
- schema: memoryGetSchema,
1446
- handler: async (input, ctx) => {
1447
- const result = await ctx.service.memoryGet(
1448
- input.memoryId,
1449
- input.namespace ?? void 0,
1450
- ctx.authenticatedPrincipal,
1451
- input.sessionKey ?? void 0
1452
- );
1453
- return { result };
1454
- }
1455
- });
1456
- var memorySearchSchema = z5.object({
1457
- query: z5.string().trim().min(1, "query is required").max(2048),
1458
- namespace: z5.string().trim().max(256).nullable().optional(),
1459
- // No upper cap: the pre-boundary MCP handler forwarded any finite number to
1460
- // memorySearch, and the QMD/search backends honor large limits. Capping at
1461
- // 100 would reject existing clients that request larger result sets.
1462
- maxResults: z5.number().int().min(1).nullable().optional(),
1463
- collection: z5.string().trim().min(1).max(256).nullable().optional(),
1464
- // Ranking mode. Mirrors the in-process manager's override so a host that
1465
- // asks for vector or lexical ranking gets the same semantics whether it
1466
- // talks to an embedded orchestrator or a standalone daemon (issue #2120).
1467
- mode: z5.enum(["search", "hybrid", "bm25", "vector"]).nullable().optional()
1468
- });
1469
- var memorySearchOperation = defineOperation({
1470
- name: "memory_search",
1471
- description: "Search memories across readable namespaces.",
1472
- schema: memorySearchSchema,
1473
- handler: async (input, ctx) => {
1474
- const result = await ctx.service.memorySearch({
1475
- query: input.query,
1476
- namespace: input.namespace ?? void 0,
1477
- maxResults: input.maxResults ?? void 0,
1478
- collection: input.collection ?? void 0,
1479
- mode: input.mode ?? void 0,
1480
- principal: ctx.authenticatedPrincipal
1481
- });
1482
- return { result };
1483
- }
1484
- });
1485
- var memoryStoreOperation = defineOperation({
1486
- name: "memory_store",
1487
- description: "Store an explicit memory through the access layer.",
1488
- // The canonical wire schema (issue #2482): its category transform already
1489
- // mapped compat aliases to "fact", so `input.category` is finite here. The
1490
- // raw spelling survives on `ctx.rawInput` for the coercion note (#2829).
1491
- schema: memoryStoreRequestSchema,
1492
- handler: async (input, ctx) => {
1493
- const rawCategory = retainedCategoryAlias(ctx.rawInput);
1494
- const result = await ctx.service.memoryStore(
1495
- {
1496
- ...input,
1497
- authenticatedPrincipal: ctx.authenticatedPrincipal,
1498
- ...ctx.sourceConnector ? { sourceConnector: ctx.sourceConnector } : {},
1499
- ...rawCategory ? { rawCategory } : {}
1500
- },
1501
- // Forward transport-level hooks (e.g. HTTP's atomic write-quota gate)
1502
- // so the hook still fires inside the service's idempotent-write lock —
1503
- // never before, never on a replay (#1434 invariant preserved by the
1504
- // boundary migration).
1505
- ctx.hooks
1506
- );
1507
- return { result };
1508
- }
1509
- });
1510
- var codingDecisionSchema = z5.preprocess(
1511
- (data) => {
1512
- if (data && typeof data === "object" && !Array.isArray(data)) {
1513
- const out = {};
1514
- for (const [k, v] of Object.entries(data)) {
1515
- if (v !== null) out[k] = v;
1516
- }
1517
- return out;
1518
- }
1519
- return data;
1520
- },
1521
- z5.object({
1522
- subcommand: z5.enum(DECISION_SUBCOMMANDS),
1523
- sessionKey: z5.string().trim().max(512).optional(),
1524
- namespace: z5.string().trim().max(256).optional(),
1525
- id: z5.string().trim().max(512).optional(),
1526
- title: z5.string().trim().max(512).optional(),
1527
- status: z5.string().trim().max(64).optional(),
1528
- context: z5.string().trim().max(8192).optional(),
1529
- decision: z5.string().trim().max(8192).optional(),
1530
- consequences: z5.string().trim().max(8192).optional(),
1531
- entityRefs: z5.array(z5.string().trim().min(1).max(256)).optional(),
1532
- supersedesId: z5.string().trim().max(512).optional()
1533
- })
1534
- );
1535
- var codingDecisionOperation = defineOperation({
1536
- name: "coding_decision",
1537
- description: "List, get, record, or supersede decision records in the session's coding namespace (issue #1548 Track A).",
1538
- schema: codingDecisionSchema,
1539
- handler: async (input, ctx) => {
1540
- const result = await ctx.service.codingDecision(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1541
- return { result };
1542
- }
1543
- });
1544
- var codingArchitectureSchema = z5.preprocess(
1545
- (data) => {
1546
- if (data !== null && typeof data === "object" && !Array.isArray(data)) {
1547
- const obj = data;
1548
- const cleaned = {};
1549
- for (const [key, value] of Object.entries(obj)) {
1550
- if (value !== null) cleaned[key] = value;
1551
- }
1552
- return cleaned;
1553
- }
1554
- return data;
1555
- },
1556
- z5.object({
1557
- subcommand: z5.enum(["get", "refresh"]),
1558
- sessionKey: z5.string().optional(),
1559
- namespace: z5.string().optional()
1560
- })
1561
- );
1562
- var codingArchitectureOperation = defineOperation({
1563
- name: "coding_architecture",
1564
- description: "Get or refresh the architecture card for the session's coding namespace (issue #1548 Track A PR 3).",
1565
- schema: codingArchitectureSchema,
1566
- handler: async (input, ctx) => {
1567
- const result = await ctx.service.codingArchitecture(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1568
- return { result };
1569
- }
1570
- });
1571
- var codegraphSurfaceSchema = z5.preprocess(
1572
- (data) => {
1573
- if (data !== null && typeof data === "object" && !Array.isArray(data)) {
1574
- const obj = data;
1575
- const cleaned = {};
1576
- for (const [key, value] of Object.entries(obj)) {
1577
- if (value !== null) cleaned[key] = value;
1578
- }
1579
- return cleaned;
1580
- }
1581
- return data;
1582
- },
1583
- z5.object({
1584
- tool: z5.string().refine(isCodegraphToolName, {
1585
- message: "tool must be one of the codegraph tool names"
1586
- }),
1587
- sessionKey: z5.string().max(512).optional(),
1588
- principal: z5.string().max(256).optional(),
1589
- project: z5.string().max(256).optional(),
1590
- query: z5.string().max(2048).optional(),
1591
- limit: z5.number().int().positive().max(200).optional(),
1592
- start: z5.string().max(512).optional(),
1593
- direction: z5.string().max(64).optional(),
1594
- depth: z5.number().int().positive().max(10).optional(),
1595
- qualifiedName: z5.string().max(1024).optional(),
1596
- path: z5.string().max(2048).optional(),
1597
- structuredQuery: z5.record(z5.string(), z5.unknown()).optional(),
1598
- head: z5.string().max(256).optional(),
1599
- repoRoot: z5.string().max(2048).optional(),
1600
- mode: z5.string().max(64).optional(),
1601
- confirm: z5.boolean().optional(),
1602
- subcommand: z5.string().max(64).optional(),
1603
- id: z5.string().max(512).optional(),
1604
- title: z5.string().max(512).optional(),
1605
- status: z5.string().max(64).optional(),
1606
- context: z5.string().max(8192).optional(),
1607
- decision: z5.string().max(8192).optional(),
1608
- consequences: z5.string().max(8192).optional(),
1609
- entityRefs: z5.array(z5.string().max(256)).optional(),
1610
- supersedesId: z5.string().max(512).optional(),
1611
- traces: z5.array(z5.unknown()).optional()
1612
- })
1613
- );
1614
- var codingDeltaSchema = z5.preprocess(
1615
- (data) => {
1616
- if (data !== null && typeof data === "object" && !Array.isArray(data)) {
1617
- const obj = data;
1618
- const cleaned = {};
1619
- for (const [key, value] of Object.entries(obj)) {
1620
- if (value !== null) cleaned[key] = value;
1621
- }
1622
- return cleaned;
1623
- }
1624
- return data;
1625
- },
1626
- z5.object({
1627
- subcommand: z5.enum(DELTA_SUBCOMMANDS),
1628
- sessionKey: z5.string().trim().max(512).optional(),
1629
- namespace: z5.string().trim().max(256).optional()
1630
- })
1631
- );
1632
- var codingDeltaOperation = defineOperation({
1633
- name: "coding_delta",
1634
- description: "Get the session delta (commits + touched files since last seen) for the session's coding namespace (issue #1548 Track A PR 4).",
1635
- schema: codingDeltaSchema,
1636
- handler: async (input, ctx) => {
1637
- const result = await ctx.service.codingDelta(input, ctx.authenticatedPrincipal);
1638
- return { result };
1639
- }
1640
- });
1641
- var memoryCorrectPlanSchema = z5.preprocess(
1642
- (data) => {
1643
- if (data && typeof data === "object" && !Array.isArray(data)) {
1644
- const out = {};
1645
- for (const [k, v] of Object.entries(data)) {
1646
- if (v !== null) out[k] = v;
1647
- }
1648
- return out;
1649
- }
1650
- return data;
1651
- },
1652
- z5.object({
1653
- text: z5.string().trim().min(1).max(1e4),
1654
- targetIds: z5.array(z5.string().trim().min(1).max(512)).optional(),
1655
- duplicateOf: z5.string().trim().min(1).max(512).optional(),
1656
- sessionKey: z5.string().trim().max(512).optional(),
1657
- namespace: z5.string().trim().max(256).optional()
1658
- })
1659
- );
1660
- var memoryCorrectPlanOperation = defineOperation({
1661
- name: "memory_correct_plan",
1662
- description: "Plan a memory correction from a plain-language statement (issue #1580). Returns a CorrectionPlan with a diff preview; apply via memory_correct_apply.",
1663
- schema: memoryCorrectPlanSchema,
1664
- handler: async (input, ctx) => {
1665
- try {
1666
- const result = await ctx.service.correctionPlan(
1667
- {
1668
- text: input.text,
1669
- ...input.targetIds ? { targetIds: input.targetIds } : {},
1670
- ...input.duplicateOf ? { duplicateOf: input.duplicateOf } : {},
1671
- ...input.sessionKey ? { sessionKey: input.sessionKey } : {},
1672
- ...input.namespace ? { namespace: input.namespace } : {},
1673
- ...ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {}
1674
- },
1675
- ctx.abortSignal ? { abortSignal: ctx.abortSignal } : void 0
1676
- );
1677
- return { result };
1678
- } catch (err) {
1679
- if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);
1680
- throw err;
1681
- }
1682
- }
1683
- });
1684
- var memoryCorrectApplySchema = z5.preprocess(
1685
- (data) => {
1686
- if (data && typeof data === "object" && !Array.isArray(data)) {
1687
- const out = {};
1688
- for (const [k, v] of Object.entries(data)) {
1689
- if (v !== null) out[k] = v;
1690
- }
1691
- return out;
1692
- }
1693
- return data;
1694
- },
1695
- z5.object({
1696
- planId: z5.string().trim().min(1).max(512),
1697
- confirm: z5.boolean().optional(),
1698
- sessionKey: z5.string().trim().max(512).optional(),
1699
- namespace: z5.string().trim().max(256).optional()
1700
- })
1701
- );
1702
- var memoryCorrectApplyOperation = defineOperation({
1703
- name: "memory_correct_apply",
1704
- description: "Apply a planned memory correction by planId (issue #1580). Requires confirm: true when correction.applyRequiresConfirm is on (default).",
1705
- schema: memoryCorrectApplySchema,
1706
- handler: async (input, ctx) => {
1707
- try {
1708
- const result = await ctx.service.correctionApply(input.planId, {
1709
- confirm: input.confirm === true,
1710
- ...input.sessionKey ? { sessionKey: input.sessionKey } : {},
1711
- ...input.namespace ? { namespace: input.namespace } : {},
1712
- ...ctx.authenticatedPrincipal ? { principal: ctx.authenticatedPrincipal } : {},
1713
- ...ctx.abortSignal ? { abortSignal: ctx.abortSignal } : {}
1714
- });
1715
- return { result };
1716
- } catch (err) {
1717
- if (err instanceof CorrectionContractError) throw new EngramAccessInputError(err.message);
1718
- throw err;
1719
- }
1720
- }
1721
- });
1722
- var codegraphIndexOperation = defineOperation({
1723
- name: "codegraph_index",
1724
- description: "Codegraph parity tool (issue #1554): index. Delegates to the shared codegraph surface handler.",
1725
- schema: codegraphSurfaceSchema,
1726
- handler: async (input, ctx) => {
1727
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1728
- return { result };
1729
- }
1730
- });
1731
- var codegraphListProjectsOperation = defineOperation({
1732
- name: "codegraph_list_projects",
1733
- description: "Codegraph parity tool (issue #1554): list_projects. Delegates to the shared codegraph surface handler.",
1734
- schema: codegraphSurfaceSchema,
1735
- handler: async (input, ctx) => {
1736
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1737
- return { result };
1738
- }
1739
- });
1740
- var codegraphDeleteProjectOperation = defineOperation({
1741
- name: "codegraph_delete_project",
1742
- description: "Codegraph parity tool (issue #1554): delete_project. Delegates to the shared codegraph surface handler.",
1743
- schema: codegraphSurfaceSchema,
1744
- handler: async (input, ctx) => {
1745
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1746
- return { result };
1747
- }
1748
- });
1749
- var codegraphIndexStatusOperation = defineOperation({
1750
- name: "codegraph_index_status",
1751
- description: "Codegraph parity tool (issue #1554): index_status. Delegates to the shared codegraph surface handler.",
1752
- schema: codegraphSurfaceSchema,
1753
- handler: async (input, ctx) => {
1754
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1755
- return { result };
1756
- }
1757
- });
1758
- var codegraphSearchGraphOperation = defineOperation({
1759
- name: "codegraph_search_graph",
1760
- description: "Codegraph parity tool (issue #1554): search_graph. Delegates to the shared codegraph surface handler.",
1761
- schema: codegraphSurfaceSchema,
1762
- handler: async (input, ctx) => {
1763
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1764
- return { result };
1765
- }
1766
- });
1767
- var codegraphTracePathOperation = defineOperation({
1768
- name: "codegraph_trace_path",
1769
- description: "Codegraph parity tool (issue #1554): trace_path. Delegates to the shared codegraph surface handler.",
1770
- schema: codegraphSurfaceSchema,
1771
- handler: async (input, ctx) => {
1772
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1773
- return { result };
1774
- }
1775
- });
1776
- var codegraphDetectChangesOperation = defineOperation({
1777
- name: "codegraph_detect_changes",
1778
- description: "Codegraph parity tool (issue #1554): detect_changes. Delegates to the shared codegraph surface handler.",
1779
- schema: codegraphSurfaceSchema,
1780
- handler: async (input, ctx) => {
1781
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1782
- return { result };
1783
- }
1784
- });
1785
- var codegraphQueryGraphOperation = defineOperation({
1786
- name: "codegraph_query_graph",
1787
- description: "Codegraph parity tool (issue #1554): query_graph. Delegates to the shared codegraph surface handler.",
1788
- schema: codegraphSurfaceSchema,
1789
- handler: async (input, ctx) => {
1790
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1791
- return { result };
1792
- }
1793
- });
1794
- var codegraphGetSchemaOperation = defineOperation({
1795
- name: "codegraph_get_schema",
1796
- description: "Codegraph parity tool (issue #1554): get_schema. Delegates to the shared codegraph surface handler.",
1797
- schema: codegraphSurfaceSchema,
1798
- handler: async (input, ctx) => {
1799
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1800
- return { result };
1801
- }
1802
- });
1803
- var codegraphGetSnippetOperation = defineOperation({
1804
- name: "codegraph_get_snippet",
1805
- description: "Codegraph parity tool (issue #1554): get_snippet. Delegates to the shared codegraph surface handler.",
1806
- schema: codegraphSurfaceSchema,
1807
- handler: async (input, ctx) => {
1808
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1809
- return { result };
1810
- }
1811
- });
1812
- var codegraphGetArchitectureOperation = defineOperation({
1813
- name: "codegraph_get_architecture",
1814
- description: "Codegraph parity tool (issue #1554): get_architecture. Delegates to the shared codegraph surface handler.",
1815
- schema: codegraphSurfaceSchema,
1816
- handler: async (input, ctx) => {
1817
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1818
- return { result };
1819
- }
1820
- });
1821
- var codegraphSearchCodeOperation = defineOperation({
1822
- name: "codegraph_search_code",
1823
- description: "Codegraph parity tool (issue #1554): search_code. Delegates to the shared codegraph surface handler.",
1824
- schema: codegraphSurfaceSchema,
1825
- handler: async (input, ctx) => {
1826
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1827
- return { result };
1828
- }
1829
- });
1830
- var codegraphManageAdrOperation = defineOperation({
1831
- name: "codegraph_manage_adr",
1832
- description: "Codegraph parity tool (issue #1554): manage_adr. Delegates to the shared codegraph surface handler.",
1833
- schema: codegraphSurfaceSchema,
1834
- handler: async (input, ctx) => {
1835
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1836
- return { result };
1837
- }
1838
- });
1839
- var codegraphIngestTracesOperation = defineOperation({
1840
- name: "codegraph_ingest_traces",
1841
- description: "Codegraph parity tool (issue #1554): ingest_traces. Delegates to the shared codegraph surface handler.",
1842
- schema: codegraphSurfaceSchema,
1843
- handler: async (input, ctx) => {
1844
- const result = await ctx.service.codegraphTool(input, ctx.authenticatedPrincipal, ctx.sourceConnector);
1845
- return { result };
1846
- }
1847
- });
1848
- var REGISTERED_OPERATIONS = [
1849
- memoryGetOperation.spec.name,
1850
- memorySearchOperation.spec.name,
1851
- externalWikiSearchOperation.spec.name,
1852
- memoryStoreOperation.spec.name,
1853
- codingDecisionOperation.spec.name,
1854
- codingArchitectureOperation.spec.name,
1855
- codegraphIndexOperation.spec.name,
1856
- codegraphListProjectsOperation.spec.name,
1857
- codegraphDeleteProjectOperation.spec.name,
1858
- codegraphIndexStatusOperation.spec.name,
1859
- codegraphSearchGraphOperation.spec.name,
1860
- codegraphTracePathOperation.spec.name,
1861
- codegraphDetectChangesOperation.spec.name,
1862
- codegraphQueryGraphOperation.spec.name,
1863
- codegraphGetSchemaOperation.spec.name,
1864
- codegraphGetSnippetOperation.spec.name,
1865
- codegraphGetArchitectureOperation.spec.name,
1866
- codegraphSearchCodeOperation.spec.name,
1867
- codegraphManageAdrOperation.spec.name,
1868
- codegraphIngestTracesOperation.spec.name,
1869
- codingDeltaOperation.spec.name,
1870
- memoryCorrectPlanOperation.spec.name,
1871
- memoryCorrectApplyOperation.spec.name
1872
- ];
1873
-
1874
- export {
1875
- RELAY_MISSION_SCHEMA_VERSION,
1876
- RELAY_MISSION_MAX_FILE_BYTES,
1877
- RELAY_MISSION_MAX_LINE_BYTES,
1878
- RELAY_MISSION_MAX_EVENTS,
1879
- RELAY_MISSION_DEFAULT_EVENT_LIMIT,
1880
- RELAY_MISSION_MAX_EVENT_LIMIT,
1881
- RelayEvidenceRefSchema,
1882
- RelayMissionPayloadSchema,
1883
- RelayMissionEventInputSchema,
1884
- RelayMissionEventSchema,
1885
- RelayMissionReadOptionsSchema,
1886
- RelayMissionStoreError,
1887
- RelayMissionStore,
1888
- reduceRelayMission,
1889
- compareRelayEvents,
1890
- relayMissionReceiptDigest,
1891
- appendRelayMissionEvent,
1892
- readRelayMission,
1893
- relayMissionAppendOperation,
1894
- relayMissionReadOperation,
1895
- memoryGetOperation,
1896
- memorySearchOperation,
1897
- memoryStoreOperation,
1898
- codingDecisionOperation,
1899
- codingArchitectureOperation,
1900
- codingDeltaOperation,
1901
- memoryCorrectPlanOperation,
1902
- memoryCorrectApplyOperation,
1903
- codegraphIndexOperation,
1904
- codegraphListProjectsOperation,
1905
- codegraphDeleteProjectOperation,
1906
- codegraphIndexStatusOperation,
1907
- codegraphSearchGraphOperation,
1908
- codegraphTracePathOperation,
1909
- codegraphDetectChangesOperation,
1910
- codegraphQueryGraphOperation,
1911
- codegraphGetSchemaOperation,
1912
- codegraphGetSnippetOperation,
1913
- codegraphGetArchitectureOperation,
1914
- codegraphSearchCodeOperation,
1915
- codegraphManageAdrOperation,
1916
- codegraphIngestTracesOperation,
1917
- REGISTERED_OPERATIONS
1918
- };
1919
- //# sourceMappingURL=chunk-BJRTMNCB.js.map