@remnic/core 9.69.33 → 9.69.34

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 (759) hide show
  1. package/dist/access-admin-ops-surface.d.ts +13 -11
  2. package/dist/access-admin-ops-surface.js +61 -56
  3. package/dist/access-authorization-probe.d.ts +13 -11
  4. package/dist/access-authorization-probe.js +62 -57
  5. package/dist/access-boundary.d.ts +13 -11
  6. package/dist/access-boundary.js +61 -56
  7. package/dist/access-cli.js +129 -125
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-coding-context-resolution.js +3 -3
  11. package/dist/access-extraction-force-flush.d.ts +13 -11
  12. package/dist/access-extraction-force-flush.js +61 -56
  13. package/dist/access-health-types.d.ts +2 -1
  14. package/dist/access-http-briefing.d.ts +13 -11
  15. package/dist/access-http-briefing.js +62 -57
  16. package/dist/access-http-lcm-compaction.d.ts +13 -11
  17. package/dist/access-http-lifecycle-flush.d.ts +13 -11
  18. package/dist/access-http-offline-stream.d.ts +13 -11
  19. package/dist/access-http-query.d.ts +3 -2
  20. package/dist/access-http-query.js +63 -58
  21. package/dist/access-http.d.ts +14 -12
  22. package/dist/access-http.js +82 -78
  23. package/dist/access-identity-continuity-surface.d.ts +11 -9
  24. package/dist/access-identity-continuity-surface.js +61 -56
  25. package/dist/access-lcm-surface.d.ts +13 -11
  26. package/dist/access-lcm-surface.js +61 -56
  27. package/dist/access-mcp.d.ts +13 -11
  28. package/dist/access-mcp.js +70 -66
  29. package/dist/access-memory-search-fanout.d.ts +3 -2
  30. package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
  31. package/dist/access-namespace-preflight.d.ts +4 -3
  32. package/dist/access-namespace-preflight.js +61 -56
  33. package/dist/access-observe-transcript.d.ts +11 -9
  34. package/dist/access-observe-transcript.js +3 -3
  35. package/dist/access-observe-write-surface.d.ts +15 -13
  36. package/dist/access-observe-write-surface.js +61 -56
  37. package/dist/access-offline-manifest.d.ts +47 -11
  38. package/dist/access-offline-manifest.js +18 -16
  39. package/dist/access-operations-batch.js +64 -60
  40. package/dist/access-operations.d.ts +14 -12
  41. package/dist/access-operations.js +69 -65
  42. package/dist/access-recall-concurrency.d.ts +13 -11
  43. package/dist/access-recall-concurrency.js +61 -56
  44. package/dist/access-recall-response.d.ts +13 -11
  45. package/dist/access-recall-response.js +61 -56
  46. package/dist/access-recall-surface.d.ts +13 -11
  47. package/dist/access-recall-surface.js +61 -56
  48. package/dist/access-schema.d.ts +55 -13
  49. package/dist/access-schema.js +15 -1
  50. package/dist/{access-service-CJQoQvRa.d.ts → access-service-WUm2LnXZ.d.ts} +52 -50
  51. package/dist/access-service-helpers.d.ts +13 -11
  52. package/dist/access-service.d.ts +13 -11
  53. package/dist/access-service.js +61 -56
  54. package/dist/access-surface-catalog.d.ts +13 -11
  55. package/dist/access-surface-catalog.js +63 -58
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +4 -3
  58. package/dist/action-confidence.d.ts +2 -1
  59. package/dist/active-memory-bridge.d.ts +2 -1
  60. package/dist/active-memory-bridge.js +2 -2
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +12 -10
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +2 -1
  65. package/dist/adapters/index.d.ts +46 -1
  66. package/dist/adapters/index.js +10 -6
  67. package/dist/adapters/registry.js +2 -2
  68. package/dist/ambient-provenance.d.ts +2 -1
  69. package/dist/artifact-search.d.ts +2 -1
  70. package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
  71. package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
  72. package/dist/behavior-learner.d.ts +2 -1
  73. package/dist/behavior-signals.d.ts +2 -1
  74. package/dist/bootstrap.d.ts +11 -9
  75. package/dist/briefing-window.d.ts +3 -2
  76. package/dist/briefing.d.ts +3 -2
  77. package/dist/briefing.js +25 -24
  78. package/dist/buffer-surprise-report.d.ts +2 -1
  79. package/dist/buffer-turn-helpers.d.ts +2 -1
  80. package/dist/buffer.d.ts +3 -2
  81. package/dist/buffer.js +11 -10
  82. package/dist/bulk-import/index.d.ts +4 -3
  83. package/dist/calibration.d.ts +2 -1
  84. package/dist/calibration.js +3 -2
  85. package/dist/calibration.js.map +1 -1
  86. package/dist/capabilities.d.ts +2 -1
  87. package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
  88. package/dist/{catalog-8O9KY9eA.d.ts → catalog-BaCx29iv.d.ts} +1 -1
  89. package/dist/causal-behavior.d.ts +2 -1
  90. package/dist/causal-consolidation.d.ts +2 -1
  91. package/dist/causal-consolidation.js +26 -25
  92. package/dist/causal-consolidation.js.map +1 -1
  93. package/dist/causal-trajectory-graph.d.ts +2 -1
  94. package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
  95. package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
  96. package/dist/chunk-255PC37A.js.map +1 -0
  97. package/dist/{chunk-7BMXZCOT.js → chunk-2AU4D4HQ.js} +3 -3
  98. package/dist/{chunk-LTIZHLV7.js → chunk-2JCA2PQT.js} +2 -2
  99. package/dist/{chunk-XXIHX75O.js → chunk-2UZ5ZH6W.js} +3 -3
  100. package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
  101. package/dist/chunk-326KUXIR.js.map +1 -0
  102. package/dist/{chunk-P3SB5BNT.js → chunk-34QW2LK2.js} +2 -2
  103. package/dist/{chunk-EONF76DT.js → chunk-36UBSLFN.js} +2 -2
  104. package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
  105. package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
  106. package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
  107. package/dist/{chunk-TCUKRAMK.js → chunk-4JVQRFZD.js} +7 -7
  108. package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
  109. package/dist/chunk-4MIS4CQW.js.map +1 -0
  110. package/dist/{chunk-PYLL63BF.js → chunk-4PB2MBY6.js} +9 -9
  111. package/dist/{chunk-UUQG7HAD.js → chunk-4WCNPQQ5.js} +4 -4
  112. package/dist/{chunk-UGPUYIET.js → chunk-5A7ZUOBA.js} +220 -399
  113. package/dist/chunk-5A7ZUOBA.js.map +1 -0
  114. package/dist/chunk-5HYUUFMQ.js +1280 -0
  115. package/dist/chunk-5HYUUFMQ.js.map +1 -0
  116. package/dist/{chunk-H4VH5VIB.js → chunk-5QBDLMGG.js} +2 -2
  117. package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
  118. package/dist/{chunk-DGGB65KC.js → chunk-5THU7NFP.js} +3 -3
  119. package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
  120. package/dist/chunk-65RENJGB.js.map +1 -0
  121. package/dist/{chunk-BPJNF7J2.js → chunk-6CCRSQWT.js} +2 -2
  122. package/dist/{chunk-XXE5P6HJ.js → chunk-6XYC7NM4.js} +2 -2
  123. package/dist/{chunk-J7HFPA6O.js → chunk-6YAIN5XJ.js} +2 -2
  124. package/dist/{chunk-I5DZ3WGR.js → chunk-757NP436.js} +3 -3
  125. package/dist/{chunk-2C3S7J2S.js → chunk-7CAY3YKP.js} +741 -28
  126. package/dist/chunk-7CAY3YKP.js.map +1 -0
  127. package/dist/{chunk-E6TDQRF6.js → chunk-7J2CGXG3.js} +2 -2
  128. package/dist/{chunk-BUTCAMJM.js → chunk-A2YQL2FF.js} +5 -5
  129. package/dist/chunk-A5UQ52YQ.js +211 -0
  130. package/dist/chunk-A5UQ52YQ.js.map +1 -0
  131. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  132. package/dist/{chunk-R3HKWWUB.js → chunk-A7WOWDZK.js} +2 -2
  133. package/dist/{chunk-6N3TQFZU.js → chunk-AIKTQVV3.js} +3 -3
  134. package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
  135. package/dist/{chunk-W27OW7AB.js → chunk-APFKZVJS.js} +2 -2
  136. package/dist/{chunk-B325AGLK.js → chunk-AQIRQUCP.js} +2 -2
  137. package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
  138. package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.js} +3 -3
  139. package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
  140. package/dist/chunk-BRZWWUCJ.js +13 -0
  141. package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
  142. package/dist/{chunk-N57A4KPV.js → chunk-C2BFTYD7.js} +2 -2
  143. package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
  144. package/dist/{chunk-Q726HSJO.js → chunk-CRUFVJOX.js} +16 -15
  145. package/dist/chunk-CRUFVJOX.js.map +1 -0
  146. package/dist/{chunk-X35W4S3L.js → chunk-D3IZCN5P.js} +4 -4
  147. package/dist/{chunk-44T3Y7SZ.js → chunk-EJIEQOPB.js} +5 -5
  148. package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
  149. package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
  150. package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
  151. package/dist/{chunk-N2ZNPHA3.js → chunk-IFFLUCCU.js} +2 -2
  152. package/dist/{chunk-RHQMKJFG.js → chunk-ISYZ5DUI.js} +51 -47
  153. package/dist/{chunk-RHQMKJFG.js.map → chunk-ISYZ5DUI.js.map} +1 -1
  154. package/dist/{chunk-PFFZWDPE.js → chunk-JZDH2ZZK.js} +3 -3
  155. package/dist/{chunk-TX2UTLXC.js → chunk-K6IPSW5B.js} +2 -2
  156. package/dist/{chunk-4MHYKEOM.js → chunk-KDJHLOZP.js} +10 -10
  157. package/dist/{chunk-KCB7F4J7.js → chunk-KYGOQV37.js} +2 -2
  158. package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
  159. package/dist/chunk-L2QLDZJC.js.map +1 -0
  160. package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
  161. package/dist/chunk-LAVJC57X.js.map +1 -0
  162. package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
  163. package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
  164. package/dist/chunk-LSLCFCCQ.js.map +1 -0
  165. package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
  166. package/dist/{chunk-PL7FYKHT.js → chunk-MMG5K6XJ.js} +2 -2
  167. package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
  168. package/dist/{chunk-E6JA6XWY.js → chunk-ND2O2PVN.js} +1013 -1317
  169. package/dist/chunk-ND2O2PVN.js.map +1 -0
  170. package/dist/chunk-NPNSKE76.js +220 -0
  171. package/dist/chunk-NPNSKE76.js.map +1 -0
  172. package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
  173. package/dist/{chunk-DB5TGMLZ.js → chunk-OZUXKUPD.js} +6 -4
  174. package/dist/{chunk-DB5TGMLZ.js.map → chunk-OZUXKUPD.js.map} +1 -1
  175. package/dist/chunk-PCEYGOSL.js +66 -0
  176. package/dist/chunk-PCEYGOSL.js.map +1 -0
  177. package/dist/{chunk-LSYDG6MJ.js → chunk-PEXW2JCK.js} +2 -2
  178. package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
  179. package/dist/chunk-PWPIERBM.js.map +1 -0
  180. package/dist/chunk-Q4AUIFUA.js +111 -0
  181. package/dist/chunk-Q4AUIFUA.js.map +1 -0
  182. package/dist/{chunk-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
  183. package/dist/chunk-Q6LCCIZN.js.map +1 -0
  184. package/dist/{chunk-MOZXTRC2.js → chunk-QF4J3KMV.js} +19 -19
  185. package/dist/{chunk-JGHXXQ2G.js → chunk-QLJ6762U.js} +2 -2
  186. package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
  187. package/dist/{chunk-CETXNLEX.js → chunk-RQO3J4MR.js} +2 -2
  188. package/dist/{chunk-5NANRSCD.js → chunk-RR7G2X7C.js} +5 -5
  189. package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
  190. package/dist/{chunk-EQHDH4C2.js → chunk-S76KRJDG.js} +3 -3
  191. package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
  192. package/dist/chunk-SHEHQBCG.js.map +1 -0
  193. package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
  194. package/dist/{chunk-MFDTVQJX.js → chunk-SZWEDG3H.js} +12 -6
  195. package/dist/chunk-SZWEDG3H.js.map +1 -0
  196. package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
  197. package/dist/{chunk-JSN44KIB.js → chunk-T2YFZ27G.js} +9 -9
  198. package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
  199. package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
  200. package/dist/chunk-TLHNF6GA.js +647 -0
  201. package/dist/chunk-TLHNF6GA.js.map +1 -0
  202. package/dist/{chunk-NB5BCFUY.js → chunk-TWYTGIBR.js} +4 -4
  203. package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
  204. package/dist/chunk-UBG4GAEP.js.map +1 -0
  205. package/dist/{chunk-MWFGUESQ.js → chunk-UEZKN6VR.js} +2 -2
  206. package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
  207. package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
  208. package/dist/chunk-VELCIWJZ.js.map +1 -0
  209. package/dist/{chunk-PBGVVDLY.js → chunk-VIZR45AN.js} +2 -2
  210. package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
  211. package/dist/{chunk-JTH2SE6B.js → chunk-W5BLTZZJ.js} +8 -8
  212. package/dist/chunk-W6IJMWTZ.js +72 -0
  213. package/dist/chunk-W6IJMWTZ.js.map +1 -0
  214. package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
  215. package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
  216. package/dist/{chunk-MN3LK3KN.js → chunk-X424T5JQ.js} +2 -2
  217. package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
  218. package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
  219. package/dist/chunk-XQU3CPF2.js.map +1 -0
  220. package/dist/chunk-XW2T4QAW.js +1 -0
  221. package/dist/{chunk-D223ZDQV.js → chunk-YEDVOYL2.js} +2 -2
  222. package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
  223. package/dist/chunk-YEN4TREG.js.map +1 -0
  224. package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
  225. package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
  226. package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
  227. package/dist/{chunk-OQDPBRQ6.js → chunk-Z7YDVHDI.js} +2 -2
  228. package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
  229. package/dist/chunk-ZEFVK7XC.js.map +1 -0
  230. package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
  231. package/dist/{chunk-HV7OY4DM.js → chunk-ZMKYCFJ7.js} +640 -199
  232. package/dist/chunk-ZMKYCFJ7.js.map +1 -0
  233. package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
  234. package/dist/{cli-D57e2Mqt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
  235. package/dist/cli-fallback.d.ts +11 -4
  236. package/dist/cli-fallback.js +5 -1
  237. package/dist/cli.d.ts +15 -13
  238. package/dist/cli.js +102 -98
  239. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  240. package/dist/coding/export-okf-codegraph.js +31 -29
  241. package/dist/coding/export-okf-codegraph.js.map +1 -1
  242. package/dist/coding/pre-action-gate.d.ts +2 -1
  243. package/dist/compat/checks.js +2 -2
  244. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  245. package/dist/compat/codex-cli-fallback.js +5 -1
  246. package/dist/compat/codex-cli-fallback.js.map +1 -1
  247. package/dist/compounding/engine.d.ts +3 -2
  248. package/dist/compounding/engine.js +26 -25
  249. package/dist/compounding/preference-consolidator.d.ts +2 -1
  250. package/dist/compression-optimizer.d.ts +2 -1
  251. package/dist/config.d.ts +2 -1
  252. package/dist/config.js +12 -10
  253. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  254. package/dist/connectors/codex-materialize-runner.js +25 -24
  255. package/dist/connectors/codex-materialize.d.ts +2 -1
  256. package/dist/connectors/index.d.ts +2 -1
  257. package/dist/connectors/index.js +27 -26
  258. package/dist/consolidation-provenance-check.d.ts +3 -2
  259. package/dist/consolidation-undo.d.ts +3 -2
  260. package/dist/contradiction/index.d.ts +4 -3
  261. package/dist/contradiction/index.js +5 -5
  262. package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
  263. package/dist/converge-config.d.ts +2 -1
  264. package/dist/convergence-refresh.d.ts +3 -2
  265. package/dist/convergence-refresh.js +27 -26
  266. package/dist/conversation-index/backend.d.ts +2 -1
  267. package/dist/conversation-index/backend.js +3 -3
  268. package/dist/conversation-index/chunker.d.ts +2 -1
  269. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  270. package/dist/conversation-index/faiss-adapter.js +2 -2
  271. package/dist/conversation-index/indexer.d.ts +2 -1
  272. package/dist/conversation-index/search.d.ts +2 -1
  273. package/dist/corpus-watermark.d.ts +2 -1
  274. package/dist/corpus-watermark.js +28 -27
  275. package/dist/cross-lingual-recall.d.ts +2 -1
  276. package/dist/day-summary.d.ts +2 -1
  277. package/dist/deep-recall-http-glue.d.ts +13 -11
  278. package/dist/deep-recall-http-glue.js +12 -2
  279. package/dist/deep-recall-mcp-tools.d.ts +13 -11
  280. package/dist/deep-recall-policy-llm.d.ts +2 -1
  281. package/dist/deep-recall-policy-llm.js +4 -3
  282. package/dist/deep-recall-seeds.d.ts +2 -1
  283. package/dist/delinearize.d.ts +2 -1
  284. package/dist/dependency-propagation-config.d.ts +2 -1
  285. package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
  286. package/dist/direct-answer-wiring.d.ts +2 -1
  287. package/dist/direct-answer.d.ts +2 -1
  288. package/dist/embedding-fallback.d.ts +2 -1
  289. package/dist/enrichment/index.d.ts +2 -1
  290. package/dist/entity-origin-fields.d.ts +2 -1
  291. package/dist/entity-retrieval.d.ts +3 -2
  292. package/dist/entity-retrieval.js +25 -24
  293. package/dist/entity-schema.d.ts +2 -1
  294. package/dist/episodic-context.d.ts +2 -1
  295. package/dist/eval-trajectory-contracts.d.ts +2 -1
  296. package/dist/eval-trajectory-store.d.ts +2 -1
  297. package/dist/eval-trajectory.d.ts +2 -1
  298. package/dist/explicit-capture.d.ts +11 -9
  299. package/dist/explicit-capture.js +6 -6
  300. package/dist/external-wiki-access.d.ts +13 -11
  301. package/dist/external-wiki-access.js +62 -57
  302. package/dist/external-wiki-collection-registration.d.ts +2 -1
  303. package/dist/external-wiki-collection.d.ts +2 -1
  304. package/dist/external-wiki-mcp-tools.d.ts +13 -11
  305. package/dist/extraction-error-classification.d.ts +2 -1
  306. package/dist/extraction-faithfulness.d.ts +2 -1
  307. package/dist/extraction-faithfulness.js +4 -3
  308. package/dist/extraction-judge-telemetry.d.ts +2 -1
  309. package/dist/extraction-judge-training.d.ts +2 -1
  310. package/dist/extraction-judge.d.ts +2 -1
  311. package/dist/extraction-judge.js +5 -4
  312. package/dist/extraction-liveness.d.ts +2 -1
  313. package/dist/extraction-normalization.d.ts +2 -1
  314. package/dist/extraction-prompt.d.ts +2 -1
  315. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  316. package/dist/extraction-source-grounding.d.ts +2 -1
  317. package/dist/extraction.d.ts +2 -1
  318. package/dist/extraction.js +36 -34
  319. package/dist/fallback-llm.d.ts +2 -1
  320. package/dist/fallback-llm.js +3 -2
  321. package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
  322. package/dist/generic-recall-paths-CqAZyXKX.d.ts +23 -0
  323. package/dist/graph-append-error.d.ts +2 -1
  324. package/dist/graph-dashboard-diff.d.ts +2 -1
  325. package/dist/graph-dashboard-key.d.ts +2 -1
  326. package/dist/graph-dashboard-parser.d.ts +2 -1
  327. package/dist/graph-edge-reinforcement.d.ts +2 -1
  328. package/dist/graph-jsonl.d.ts +2 -1
  329. package/dist/graph-path-reconstruction.d.ts +2 -1
  330. package/dist/graph-path-scoring.d.ts +2 -1
  331. package/dist/graph-snapshot.d.ts +2 -1
  332. package/dist/graph.d.ts +2 -1
  333. package/dist/harmonic-retrieval.js +2 -2
  334. package/dist/importance.d.ts +2 -1
  335. package/dist/importers/index.d.ts +2 -1
  336. package/dist/importers/test-utils.d.ts +2 -1
  337. package/dist/in-flight-reads.d.ts +2 -1
  338. package/dist/{index-BTAsSkPG.d.ts → index-BNluTxBp.d.ts} +2 -2
  339. package/dist/index.d.ts +302 -245
  340. package/dist/index.js +307 -205
  341. package/dist/intent.d.ts +2 -1
  342. package/dist/lcm/engine.d.ts +2 -1
  343. package/dist/lcm/engine.js +2 -2
  344. package/dist/lcm/index.d.ts +2 -1
  345. package/dist/lcm/index.js +4 -4
  346. package/dist/lcm/tools.d.ts +2 -1
  347. package/dist/lifecycle.d.ts +2 -1
  348. package/dist/live-connectors-runner.d.ts +2 -1
  349. package/dist/local-llm.d.ts +4 -1
  350. package/dist/local-llm.js +2 -2
  351. package/dist/local-model-endpoint.d.ts +2 -1
  352. package/dist/location/index.d.ts +4 -3
  353. package/dist/location/index.js +28 -27
  354. package/dist/maintenance/memory-governance.d.ts +2 -1
  355. package/dist/maintenance/memory-governance.js +25 -24
  356. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  357. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +25 -24
  358. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  359. package/dist/maintenance/rebuild-memory-projection.js +26 -25
  360. package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
  361. package/dist/mcp-memory-inspector-app.d.ts +13 -11
  362. package/dist/memory-action-policy.d.ts +2 -1
  363. package/dist/memory-cache.d.ts +2 -1
  364. package/dist/memory-controller.d.ts +2 -1
  365. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  366. package/dist/memory-projection-store.d.ts +2 -1
  367. package/dist/memory-provenance.d.ts +2 -1
  368. package/dist/memory-snapshot.d.ts +2 -1
  369. package/dist/memory-subject-cli.d.ts +13 -11
  370. package/dist/memory-subject.d.ts +13 -11
  371. package/dist/memory-worth-outcomes.d.ts +3 -2
  372. package/dist/migrate/from-engram.js +2 -2
  373. package/dist/models-json.d.ts +2 -1
  374. package/dist/namespaces/migrate.d.ts +4 -3
  375. package/dist/namespaces/migrate.js +26 -25
  376. package/dist/namespaces/principal.d.ts +2 -1
  377. package/dist/namespaces/search.d.ts +2 -1
  378. package/dist/namespaces/search.js +8 -8
  379. package/dist/namespaces/storage.d.ts +4 -3
  380. package/dist/namespaces/storage.js +25 -24
  381. package/dist/native-knowledge.d.ts +2 -1
  382. package/dist/network/tailscale.js +2 -2
  383. package/dist/offline-sync-impression-drain.d.ts +2 -1
  384. package/dist/offline-sync-impression-drain.js +6 -6
  385. package/dist/operator-doctor-corpus.d.ts +2 -1
  386. package/dist/operator-doctor-corpus.js +29 -28
  387. package/dist/operator-doctor-replica.d.ts +2 -1
  388. package/dist/operator-toolkit.d.ts +4 -3
  389. package/dist/operator-toolkit.js +43 -41
  390. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  391. package/dist/orchestration/maintenance.d.ts +5 -4
  392. package/dist/orchestration/maintenance.js +43 -38
  393. package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
  394. package/dist/orchestrator.d.ts +11 -9
  395. package/dist/orchestrator.js +133 -127
  396. package/dist/patterns-cli.d.ts +2 -1
  397. package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
  398. package/dist/policy-runtime.d.ts +2 -1
  399. package/dist/proactive-contention.d.ts +2 -1
  400. package/dist/provenance.d.ts +2 -1
  401. package/dist/{public-http-h-yWu9rj.d.ts → public-http-L-IymRBN.d.ts} +1 -1
  402. package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Mj508lHA.d.ts} +1 -1
  403. package/dist/qmd-preflight.d.ts +3 -2
  404. package/dist/qmd-recall-cache.d.ts +2 -1
  405. package/dist/qmd.d.ts +3 -2
  406. package/dist/qmd.js +2 -2
  407. package/dist/recall-concurrency-config.d.ts +2 -1
  408. package/dist/recall-disclosure-escalation.d.ts +2 -1
  409. package/dist/recall-explain-renderer.d.ts +2 -1
  410. package/dist/recall-explain-renderer.js +3 -3
  411. package/dist/recall-memory-map.d.ts +2 -1
  412. package/dist/recall-navigate-access.d.ts +2 -1
  413. package/dist/recall-navigate-access.js +2 -2
  414. package/dist/recall-navigate-disclosure.d.ts +2 -1
  415. package/dist/recall-navigate-disclosure.js +1 -1
  416. package/dist/recall-navigate.d.ts +2 -1
  417. package/dist/recall-navigate.js +2 -2
  418. package/dist/recall-planner-llm.d.ts +2 -1
  419. package/dist/recall-planner-llm.js +3 -2
  420. package/dist/recall-planner-llm.js.map +1 -1
  421. package/dist/recall-state-view-admission.d.ts +56 -0
  422. package/dist/recall-state-view-admission.js +39 -0
  423. package/dist/recall-state-view-inject.js +2 -2
  424. package/dist/recall-state-view-render.js +2 -2
  425. package/dist/recall-state-view-widen.d.ts +18 -1
  426. package/dist/recall-state-view-widen.js +2 -2
  427. package/dist/recall-state-view-wire.d.ts +1 -1
  428. package/dist/recall-state-view-wire.js +3 -3
  429. package/dist/recall-state-view.d.ts +1 -0
  430. package/dist/recall-state-view.js +1 -1
  431. package/dist/recall-state.d.ts +2 -1
  432. package/dist/recall-tag-filter.d.ts +2 -1
  433. package/dist/recall-timings.d.ts +2 -1
  434. package/dist/recall-xray-cli.d.ts +2 -1
  435. package/dist/recall-xray-cli.js +4 -4
  436. package/dist/recall-xray-renderer.d.ts +2 -1
  437. package/dist/recall-xray-renderer.js +3 -3
  438. package/dist/recall-xray.d.ts +9 -1
  439. package/dist/recall-xray.js +2 -2
  440. package/dist/reconcile/cursor.d.ts +11 -2
  441. package/dist/reconcile/cursor.js +6 -4
  442. package/dist/reconcile/cursor.js.map +1 -1
  443. package/dist/reconcile/manifest.d.ts +37 -2
  444. package/dist/reconcile/manifest.js +15 -5
  445. package/dist/reconcile/plan.d.ts +2 -1
  446. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  447. package/dist/replay/normalizers/claude.d.ts +2 -1
  448. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  449. package/dist/replay/normalizers/shared.d.ts +2 -1
  450. package/dist/replay/runner.d.ts +2 -1
  451. package/dist/replay/types.d.ts +2 -1
  452. package/dist/replica-divergence.d.ts +2 -1
  453. package/dist/replica-peers-config.d.ts +2 -1
  454. package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
  455. package/dist/resolution-OHJZG45O.js.map +1 -0
  456. package/dist/resolve-auth-token.d.ts +2 -1
  457. package/dist/resume-bundles.js +13 -11
  458. package/dist/retrieval-agents.d.ts +3 -2
  459. package/dist/retrieval-tiers.d.ts +2 -1
  460. package/dist/routing/engine.d.ts +2 -1
  461. package/dist/routing/store.d.ts +2 -1
  462. package/dist/runtime/child-process.d.ts +1 -1
  463. package/dist/runtime/child-process.js +1 -1
  464. package/dist/salvage-envelope.d.ts +2 -1
  465. package/dist/salvage-envelope.js +2 -2
  466. package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
  467. package/dist/search/embed-helper.d.ts +2 -1
  468. package/dist/search/factory.d.ts +2 -1
  469. package/dist/search/factory.js +7 -7
  470. package/dist/search/index.d.ts +2 -1
  471. package/dist/search/index.js +11 -11
  472. package/dist/search/lancedb-backend.d.ts +2 -1
  473. package/dist/search/meilisearch-backend.d.ts +2 -1
  474. package/dist/search/noop-backend.d.ts +2 -1
  475. package/dist/search/orama-backend.d.ts +2 -1
  476. package/dist/search/port.d.ts +2 -1
  477. package/dist/search/remote-backend.d.ts +2 -1
  478. package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
  479. package/dist/semantic-consolidation.d.ts +3 -2
  480. package/dist/semantic-consolidation.js +26 -25
  481. package/dist/semantic-rule-promotion.js +25 -24
  482. package/dist/semantic-rule-verifier.d.ts +2 -1
  483. package/dist/semantic-rule-verifier.js +25 -24
  484. package/dist/{service-BbuVh1eS.d.ts → service-ZQkJ52cz.d.ts} +2 -2
  485. package/dist/session-observer-bands.d.ts +2 -1
  486. package/dist/session-observer-state.d.ts +2 -1
  487. package/dist/shared-context/manager.d.ts +2 -1
  488. package/dist/signal.d.ts +2 -1
  489. package/dist/source-agent-qualifier.d.ts +2 -1
  490. package/dist/source-agent-qualifier.js +34 -32
  491. package/dist/standup/build.js +25 -24
  492. package/dist/{storage-BBLLuVTF.d.ts → storage-CU_hZUgP.d.ts} +67 -6
  493. package/dist/storage.d.ts +4 -3
  494. package/dist/storage.js +24 -23
  495. package/dist/subject-config.d.ts +2 -1
  496. package/dist/subject-config.js +2 -2
  497. package/dist/summarizer.d.ts +2 -1
  498. package/dist/summarizer.js +5 -5
  499. package/dist/summary-snapshot.d.ts +2 -1
  500. package/dist/support-passport/index.d.ts +49 -15
  501. package/dist/support-passport/index.js +69 -60
  502. package/dist/temporal-supersession.d.ts +3 -2
  503. package/dist/temporal-timeline-recall.d.ts +2 -1
  504. package/dist/temporal-validity.d.ts +2 -1
  505. package/dist/threading.d.ts +2 -1
  506. package/dist/tier-migration.d.ts +3 -2
  507. package/dist/tier-routing.d.ts +2 -1
  508. package/dist/tier-routing.js +2 -2
  509. package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
  510. package/dist/topics.d.ts +2 -1
  511. package/dist/transcript.d.ts +2 -1
  512. package/dist/transfer/capsule-import.js +1 -1
  513. package/dist/transfer/export-okf.d.ts +2 -1
  514. package/dist/transfer/export-okf.js +26 -25
  515. package/dist/transfer/types.d.ts +24 -24
  516. package/dist/trust-score-stage.d.ts +2 -1
  517. package/dist/trust-score.d.ts +2 -1
  518. package/dist/{types-igV4-sbB.d.ts → types-BGxTvLBO.d.ts} +58 -13
  519. package/dist/types.d.ts +2 -1
  520. package/dist/types.js +1 -1
  521. package/dist/utility-runtime.d.ts +2 -1
  522. package/dist/verified-recall.js +25 -24
  523. package/dist/who-knows-cli.d.ts +13 -11
  524. package/dist/who-knows-cli.js +26 -25
  525. package/dist/who-knows.d.ts +13 -11
  526. package/dist/who-knows.js +25 -24
  527. package/dist/write-envelope.d.ts +4 -2
  528. package/dist/write-envelope.js +3 -1
  529. package/package.json +2 -2
  530. package/src/access-category-alias.test.ts +216 -0
  531. package/src/access-mcp.test.ts +73 -0
  532. package/src/access-mcp.ts +6 -6
  533. package/src/access-observe-write-surface.ts +19 -4
  534. package/src/access-offline-manifest.ts +297 -16
  535. package/src/access-recall-surface.ts +5 -5
  536. package/src/access-schema.ts +76 -7
  537. package/src/access-service.ts +11 -2
  538. package/src/activity/config.test.ts +124 -1
  539. package/src/activity/config.ts +150 -18
  540. package/src/activity/index.ts +3 -0
  541. package/src/activity/journal-extract-storage.test.ts +129 -0
  542. package/src/activity/journal-extract.test.ts +314 -0
  543. package/src/activity/journal-extract.ts +247 -0
  544. package/src/activity/journal-heading.test.ts +24 -1
  545. package/src/activity/journal-heading.ts +36 -0
  546. package/src/activity/journal-read.test.ts +242 -0
  547. package/src/activity/journal-read.ts +183 -0
  548. package/src/activity/journal-source.test.ts +15 -15
  549. package/src/activity/journal-source.ts +21 -14
  550. package/src/activity/journal-state.lock-worker.ts +30 -0
  551. package/src/activity/journal-state.test.ts +144 -0
  552. package/src/activity/journal-state.ts +107 -0
  553. package/src/activity/journal-strip.test.ts +106 -52
  554. package/src/activity/journal-strip.ts +35 -10
  555. package/src/activity/journal-vault-integration.test.ts +230 -0
  556. package/src/activity/journal-vault-provenance.test.ts +9 -7
  557. package/src/activity/journal-vault-provenance.ts +4 -10
  558. package/src/activity/journal-vault-read.test.ts +3 -2
  559. package/src/activity/journal-vault-read.ts +9 -139
  560. package/src/activity/journal.test.ts +74 -23
  561. package/src/activity/runner.test.ts +116 -1
  562. package/src/activity/runner.ts +25 -0
  563. package/src/activity/scheduler.ts +4 -0
  564. package/src/activity/store.test.ts +18 -0
  565. package/src/activity/store.ts +14 -0
  566. package/src/activity/sync-registration.ts +4 -0
  567. package/src/activity/timeline/analysis-metadata.ts +2 -0
  568. package/src/activity/timeline/analysis-provider.ts +140 -0
  569. package/src/activity/timeline/analysis-run.test.ts +419 -0
  570. package/src/activity/timeline/analysis-run.ts +106 -0
  571. package/src/activity/timeline/analysis.ts +66 -37
  572. package/src/activity/timeline/corrections.ts +9 -0
  573. package/src/activity/timeline/index.ts +3 -0
  574. package/src/activity/timeline/query.test.ts +71 -0
  575. package/src/activity/timeline/query.ts +57 -8
  576. package/src/activity/timeline/regenerate.test.ts +505 -0
  577. package/src/activity/timeline/regenerate.ts +373 -0
  578. package/src/activity/types.ts +40 -5
  579. package/src/adapters/grok-opencode.test.ts +146 -0
  580. package/src/adapters/grok.ts +53 -0
  581. package/src/adapters/index.ts +2 -0
  582. package/src/adapters/opencode.ts +52 -0
  583. package/src/adapters/registry.ts +4 -0
  584. package/src/cli-fallback.ts +13 -4
  585. package/src/config.test.ts +3 -1
  586. package/src/config.ts +4 -0
  587. package/src/dedup/merge.test.ts +732 -25
  588. package/src/fallback-llm.test.ts +53 -0
  589. package/src/fallback-llm.ts +12 -0
  590. package/src/index.ts +2 -0
  591. package/src/local-llm.ts +3 -1
  592. package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
  593. package/src/orchestration/extraction-persist-deps.ts +9 -0
  594. package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
  595. package/src/orchestration/extraction-persist-promotion.ts +42 -3
  596. package/src/orchestration/extraction-persist.ts +3 -3
  597. package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
  598. package/src/orchestration/harmonic-construction-persist.ts +34 -6
  599. package/src/orchestration/maintenance.ts +1 -0
  600. package/src/orchestration/orchestrator-helpers.ts +6 -0
  601. package/src/orchestration/recall-entry.ts +16 -0
  602. package/src/orchestration/recall-internal-deps.ts +14 -0
  603. package/src/orchestration/recall-internal.ts +41 -58
  604. package/src/orchestration/recall-result-formatter.ts +11 -1
  605. package/src/orchestration/recall-search-pipeline.ts +121 -11
  606. package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
  607. package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
  608. package/src/orchestration/semantic-merge-persist.ts +121 -16
  609. package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
  610. package/src/orchestrator.ts +7 -35
  611. package/src/providers/codex-subscription.test.ts +666 -0
  612. package/src/providers/codex-subscription.ts +743 -0
  613. package/src/recall-disclosure.test.ts +20 -0
  614. package/src/recall-state-view-admission.ts +114 -0
  615. package/src/recall-state-view-asof.test.ts +176 -0
  616. package/src/recall-state-view-call.test.ts +175 -0
  617. package/src/recall-state-view-config.test.ts +16 -0
  618. package/src/recall-state-view-widen.test.ts +70 -0
  619. package/src/recall-state-view-widen.ts +28 -7
  620. package/src/recall-state-view-wire.ts +3 -1
  621. package/src/recall-state-view-zero-diff.test.ts +20 -11
  622. package/src/recall-state-view.test.ts +142 -0
  623. package/src/recall-state-view.ts +72 -24
  624. package/src/recall-xray-renderer.test.ts +27 -0
  625. package/src/recall-xray-renderer.ts +4 -0
  626. package/src/recall-xray.ts +13 -0
  627. package/src/reconcile/cursor.ts +23 -33
  628. package/src/reconcile/manifest.ts +96 -11
  629. package/src/reconcile-identity-cache.test.ts +378 -0
  630. package/src/runtime/child-process.ts +1 -1
  631. package/src/storage/cas-revision-host.ts +75 -0
  632. package/src/storage/cas-revision-store.test.ts +459 -0
  633. package/src/storage/cas-revision-store.ts +661 -0
  634. package/src/storage/deletion-revision-store.ts +80 -6
  635. package/src/storage/tombstone-blocked-capture-index.ts +15 -0
  636. package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
  637. package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
  638. package/src/storage-contract/failure-semantics.test.ts +1 -1
  639. package/src/storage-frontmatter-cas.test.ts +698 -1
  640. package/src/storage-replay.test.ts +166 -3
  641. package/src/storage.ts +41 -41
  642. package/src/support-passport/card-projection.ts +82 -33
  643. package/src/temporal-supersession.test.ts +10 -10
  644. package/src/types.ts +7 -7
  645. package/src/write-envelope.ts +1 -1
  646. package/dist/chunk-22FVR2KE.js.map +0 -1
  647. package/dist/chunk-2C3S7J2S.js.map +0 -1
  648. package/dist/chunk-2JVJ7UHC.js.map +0 -1
  649. package/dist/chunk-2QSZNTDO.js +0 -56
  650. package/dist/chunk-2QSZNTDO.js.map +0 -1
  651. package/dist/chunk-3QQTXYZ6.js.map +0 -1
  652. package/dist/chunk-5VCDKQWQ.js +0 -560
  653. package/dist/chunk-5VCDKQWQ.js.map +0 -1
  654. package/dist/chunk-A7XEPMQ6.js.map +0 -1
  655. package/dist/chunk-BLUYQFRH.js.map +0 -1
  656. package/dist/chunk-E6JA6XWY.js.map +0 -1
  657. package/dist/chunk-EEOUMG3J.js.map +0 -1
  658. package/dist/chunk-FDLDOEO6.js.map +0 -1
  659. package/dist/chunk-FYDW33ZB.js +0 -13
  660. package/dist/chunk-H272ZPQ3.js.map +0 -1
  661. package/dist/chunk-HV7OY4DM.js.map +0 -1
  662. package/dist/chunk-HVAEXYPL.js.map +0 -1
  663. package/dist/chunk-JEIXTYVG.js.map +0 -1
  664. package/dist/chunk-LRICZIGN.js +0 -52
  665. package/dist/chunk-LRICZIGN.js.map +0 -1
  666. package/dist/chunk-MFDTVQJX.js.map +0 -1
  667. package/dist/chunk-N7RWREIQ.js.map +0 -1
  668. package/dist/chunk-O75CRYGF.js.map +0 -1
  669. package/dist/chunk-Q726HSJO.js.map +0 -1
  670. package/dist/chunk-QOIOACIE.js.map +0 -1
  671. package/dist/chunk-SEDEKFYQ.js +0 -1
  672. package/dist/chunk-SO7SV523.js.map +0 -1
  673. package/dist/chunk-TLPZ6MKZ.js.map +0 -1
  674. package/dist/chunk-UGPUYIET.js.map +0 -1
  675. package/src/activity/journal-mode.test.ts +0 -32
  676. package/src/activity/journal-mode.ts +0 -20
  677. /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
  678. /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
  679. /package/dist/{chunk-7BMXZCOT.js.map → chunk-2AU4D4HQ.js.map} +0 -0
  680. /package/dist/{chunk-LTIZHLV7.js.map → chunk-2JCA2PQT.js.map} +0 -0
  681. /package/dist/{chunk-XXIHX75O.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
  682. /package/dist/{chunk-P3SB5BNT.js.map → chunk-34QW2LK2.js.map} +0 -0
  683. /package/dist/{chunk-EONF76DT.js.map → chunk-36UBSLFN.js.map} +0 -0
  684. /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
  685. /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
  686. /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
  687. /package/dist/{chunk-TCUKRAMK.js.map → chunk-4JVQRFZD.js.map} +0 -0
  688. /package/dist/{chunk-PYLL63BF.js.map → chunk-4PB2MBY6.js.map} +0 -0
  689. /package/dist/{chunk-UUQG7HAD.js.map → chunk-4WCNPQQ5.js.map} +0 -0
  690. /package/dist/{chunk-H4VH5VIB.js.map → chunk-5QBDLMGG.js.map} +0 -0
  691. /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
  692. /package/dist/{chunk-DGGB65KC.js.map → chunk-5THU7NFP.js.map} +0 -0
  693. /package/dist/{chunk-BPJNF7J2.js.map → chunk-6CCRSQWT.js.map} +0 -0
  694. /package/dist/{chunk-XXE5P6HJ.js.map → chunk-6XYC7NM4.js.map} +0 -0
  695. /package/dist/{chunk-J7HFPA6O.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  696. /package/dist/{chunk-I5DZ3WGR.js.map → chunk-757NP436.js.map} +0 -0
  697. /package/dist/{chunk-E6TDQRF6.js.map → chunk-7J2CGXG3.js.map} +0 -0
  698. /package/dist/{chunk-BUTCAMJM.js.map → chunk-A2YQL2FF.js.map} +0 -0
  699. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  700. /package/dist/{chunk-R3HKWWUB.js.map → chunk-A7WOWDZK.js.map} +0 -0
  701. /package/dist/{chunk-6N3TQFZU.js.map → chunk-AIKTQVV3.js.map} +0 -0
  702. /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
  703. /package/dist/{chunk-W27OW7AB.js.map → chunk-APFKZVJS.js.map} +0 -0
  704. /package/dist/{chunk-B325AGLK.js.map → chunk-AQIRQUCP.js.map} +0 -0
  705. /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
  706. /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
  707. /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
  708. /package/dist/{chunk-N57A4KPV.js.map → chunk-C2BFTYD7.js.map} +0 -0
  709. /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
  710. /package/dist/{chunk-X35W4S3L.js.map → chunk-D3IZCN5P.js.map} +0 -0
  711. /package/dist/{chunk-44T3Y7SZ.js.map → chunk-EJIEQOPB.js.map} +0 -0
  712. /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
  713. /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
  714. /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
  715. /package/dist/{chunk-N2ZNPHA3.js.map → chunk-IFFLUCCU.js.map} +0 -0
  716. /package/dist/{chunk-PFFZWDPE.js.map → chunk-JZDH2ZZK.js.map} +0 -0
  717. /package/dist/{chunk-TX2UTLXC.js.map → chunk-K6IPSW5B.js.map} +0 -0
  718. /package/dist/{chunk-4MHYKEOM.js.map → chunk-KDJHLOZP.js.map} +0 -0
  719. /package/dist/{chunk-KCB7F4J7.js.map → chunk-KYGOQV37.js.map} +0 -0
  720. /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
  721. /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
  722. /package/dist/{chunk-PL7FYKHT.js.map → chunk-MMG5K6XJ.js.map} +0 -0
  723. /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
  724. /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
  725. /package/dist/{chunk-LSYDG6MJ.js.map → chunk-PEXW2JCK.js.map} +0 -0
  726. /package/dist/{chunk-MOZXTRC2.js.map → chunk-QF4J3KMV.js.map} +0 -0
  727. /package/dist/{chunk-JGHXXQ2G.js.map → chunk-QLJ6762U.js.map} +0 -0
  728. /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
  729. /package/dist/{chunk-CETXNLEX.js.map → chunk-RQO3J4MR.js.map} +0 -0
  730. /package/dist/{chunk-5NANRSCD.js.map → chunk-RR7G2X7C.js.map} +0 -0
  731. /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
  732. /package/dist/{chunk-EQHDH4C2.js.map → chunk-S76KRJDG.js.map} +0 -0
  733. /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
  734. /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
  735. /package/dist/{chunk-JSN44KIB.js.map → chunk-T2YFZ27G.js.map} +0 -0
  736. /package/dist/{chunk-227UFSEQ.js.map → chunk-TFA6HPOA.js.map} +0 -0
  737. /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
  738. /package/dist/{chunk-NB5BCFUY.js.map → chunk-TWYTGIBR.js.map} +0 -0
  739. /package/dist/{chunk-MWFGUESQ.js.map → chunk-UEZKN6VR.js.map} +0 -0
  740. /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
  741. /package/dist/{chunk-PBGVVDLY.js.map → chunk-VIZR45AN.js.map} +0 -0
  742. /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
  743. /package/dist/{chunk-JTH2SE6B.js.map → chunk-W5BLTZZJ.js.map} +0 -0
  744. /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
  745. /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
  746. /package/dist/{chunk-MN3LK3KN.js.map → chunk-X424T5JQ.js.map} +0 -0
  747. /package/dist/{chunk-5BCNEBEN.js.map → chunk-XPJNT6PI.js.map} +0 -0
  748. /package/dist/{chunk-SEDEKFYQ.js.map → chunk-XW2T4QAW.js.map} +0 -0
  749. /package/dist/{chunk-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
  750. /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
  751. /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
  752. /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
  753. /package/dist/{chunk-OQDPBRQ6.js.map → chunk-Z7YDVHDI.js.map} +0 -0
  754. /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
  755. /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
  756. /package/dist/{contradiction-scan-NOYMFG66.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
  757. /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
  758. /package/dist/{resolution-VKATP2HT.js.map → recall-state-view-admission.js.map} +0 -0
  759. /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
@@ -0,0 +1,743 @@
1
+ /**
2
+ * Codex subscription extraction provider (issue #2784).
3
+ *
4
+ * Routes extraction/consolidation LLM calls through the `codex` CLI so the
5
+ * operator's Codex subscription (ChatGPT OAuth login) authenticates the
6
+ * request — no OpenAI API key and no codex-openai-proxy. Credentials stay in
7
+ * the CLI's own auth store; this module never reads, accepts, or logs tokens.
8
+ *
9
+ * Transport contract mirrors `packages/bench/src/providers/codex-cli.ts`
10
+ * (`codex exec --json --output-last-message`, env allowlist, login-status
11
+ * precheck) but lives in core so the standalone daemon and host plugins get
12
+ * a working `api: "codex-cli"` transport without importing the optional
13
+ * bench package. Registered through the existing
14
+ * `setCodexCliFallbackRunnerForProcess` seam, and only when no host or
15
+ * benchmark runner has claimed it first.
16
+ */
17
+
18
+ import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
19
+ import os from "node:os";
20
+ import path from "node:path";
21
+
22
+ import type {
23
+ CodexCliFallbackConfig,
24
+ CodexCliFallbackMessage,
25
+ CodexCliFallbackRequest,
26
+ CodexCliFallbackResult,
27
+ CodexCliFallbackRunner,
28
+ } from "../cli-fallback.js";
29
+ import { isCodexCliFallbackRunnerRegistered, normalizeCodexCliTimeoutMs, setCodexCliFallbackRunnerForProcess } from "../cli-fallback.js";
30
+ import { log } from "../logger.js";
31
+ import { launchProcess } from "../runtime/child-process.js";
32
+ import type { CodexCliReasoningEffort, ModelProviderConfig } from "../types.js";
33
+ import { expandTildePath } from "../utils/path.js";
34
+
35
+ export const CODEX_SUBSCRIPTION_PROVIDER_ID = "codex-subscription";
36
+
37
+ /** Env var overriding the codex executable (mirrors the bench provider). */
38
+ const CODEX_EXECUTABLE_ENV = "REMNIC_CODEX_EXECUTABLE";
39
+
40
+ const DEFAULT_REASONING_EFFORT: CodexCliReasoningEffort = "medium";
41
+ const DEFAULT_TIMEOUT_MS = 120_000;
42
+ const LOGIN_STATUS_TIMEOUT_MS = 10_000;
43
+ const LOGIN_STATUS_CACHE_TTL_MS = 10 * 60_000;
44
+ const STDIO_LIMIT = 64_000;
45
+ const OUTPUT_SUMMARY_LIMIT = 500;
46
+
47
+ /**
48
+ * Environment keys forwarded to the codex child. Everything else — including
49
+ * ambient `OPENAI_API_KEY` / `OPENAI_BASE_URL` — is stripped so the CLI cannot
50
+ * silently fall back to metered API-key auth instead of the subscription
51
+ * login. Mirrors the bench provider's allowlist.
52
+ */
53
+ const CODEX_RUNTIME_ENV_ALLOWLIST: Readonly<Record<string, true>> = Object.freeze({
54
+ ALL_PROXY: true,
55
+ APPDATA: true,
56
+ CODEX_HOME: true,
57
+ COLORTERM: true,
58
+ COMSPEC: true,
59
+ FORCE_COLOR: true,
60
+ HOME: true,
61
+ HOMEDRIVE: true,
62
+ HOMEPATH: true,
63
+ LANG: true,
64
+ LOCALAPPDATA: true,
65
+ LOGNAME: true,
66
+ NO_COLOR: true,
67
+ NODE_EXTRA_CA_CERTS: true,
68
+ NO_PROXY: true,
69
+ NUMBER_OF_PROCESSORS: true,
70
+ OS: true,
71
+ PATH: true,
72
+ PATHEXT: true,
73
+ PROGRAMDATA: true,
74
+ PROCESSOR_ARCHITECTURE: true,
75
+ HTTP_PROXY: true,
76
+ HTTPS_PROXY: true,
77
+ SHELL: true,
78
+ SSL_CERT_DIR: true,
79
+ SSL_CERT_FILE: true,
80
+ SYSTEMDRIVE: true,
81
+ SYSTEMROOT: true,
82
+ TEMP: true,
83
+ TERM: true,
84
+ TMP: true,
85
+ TMPDIR: true,
86
+ USER: true,
87
+ USERNAME: true,
88
+ USERPROFILE: true,
89
+ WINDIR: true,
90
+ XDG_CACHE_HOME: true,
91
+ XDG_CONFIG_HOME: true,
92
+ XDG_DATA_HOME: true,
93
+ XDG_RUNTIME_DIR: true,
94
+ });
95
+
96
+ const LOGIN_OK_PATTERN = /logged in using chatgpt/i;
97
+ const LOGIN_API_KEY_PATTERN = /api key/i;
98
+ /** CLI output shapes that mean the subscription session was rejected. */
99
+ const AUTH_FAILURE_PATTERN =
100
+ /\b401\b|\b403\b|unauthorized|forbidden|not logged in|no active|re-?authenticat|token expired|session expired|please log ?in/i;
101
+ const TIMEOUT_PATTERN = /timed out after \d+ms/i;
102
+ /** Secret shapes a codex CLI could echo into errors; replaced before surfacing. */
103
+ const SECRET_ECHO_PATTERNS: readonly RegExp[] = [
104
+ /sk-[A-Za-z0-9_-]{8,}/g,
105
+ /Bearer\s+[A-Za-z0-9._-]{8,}/g,
106
+ /eyJ[A-Za-z0-9._-]{10,}/g,
107
+ ];
108
+
109
+ /**
110
+ * Built-in provider entry so `"codex-subscription/<model>"` chains resolve
111
+ * with no models.json and no apiKey — the transport owns authentication.
112
+ */
113
+ export function codexSubscriptionBuiltinProviderConfig(): ModelProviderConfig {
114
+ return {
115
+ baseUrl: "codex-cli://subscription",
116
+ api: "codex-cli",
117
+ models: [],
118
+ };
119
+ }
120
+
121
+ export type CodexSubscriptionAuthReason = "unauthenticated" | "expired_or_revoked";
122
+
123
+ /** Login/authorization failure with actionable re-auth guidance. */
124
+ export class CodexSubscriptionAuthError extends Error {
125
+ readonly reason: CodexSubscriptionAuthReason;
126
+
127
+ constructor(reason: CodexSubscriptionAuthReason, message: string) {
128
+ super(message);
129
+ this.name = "CodexSubscriptionAuthError";
130
+ this.reason = reason;
131
+ }
132
+ }
133
+
134
+ /** Provider config violated the no-raw-credentials contract. */
135
+ export class CodexSubscriptionConfigError extends Error {
136
+ constructor(message: string) {
137
+ super(message);
138
+ this.name = "CodexSubscriptionConfigError";
139
+ }
140
+ }
141
+
142
+ /** Request exceeded its deadline. Abort-driven cancellations rethrow the
143
+ * caller's own abort reason instead, preserving the AbortError contract. */
144
+ export class CodexSubscriptionTimeoutError extends Error {
145
+ constructor(timeoutMs: number) {
146
+ super(`codex-subscription request timed out after ${timeoutMs}ms`);
147
+ this.name = "TimeoutError";
148
+ }
149
+ }
150
+
151
+ export interface CodexSubscriptionExecRequest {
152
+ executable: string;
153
+ args: string[];
154
+ input: string;
155
+ env: NodeJS.ProcessEnv;
156
+ outputPath: string;
157
+ workspacePath: string;
158
+ timeoutMs?: number;
159
+ signal?: AbortSignal;
160
+ }
161
+
162
+ export interface CodexSubscriptionExecResult {
163
+ status: number | null;
164
+ signal?: NodeJS.Signals | null;
165
+ stdout: string;
166
+ stderr: string;
167
+ outputText: string;
168
+ }
169
+
170
+ export interface CodexSubscriptionRunnerDeps {
171
+ /** Runs `codex exec`. Default: isolated subprocess via launchProcess. */
172
+ runCodexExec?: (request: CodexSubscriptionExecRequest) => Promise<CodexSubscriptionExecResult>;
173
+ /** Runs `codex login status`. Default: isolated subprocess. Receives the
174
+ * login-status timeout budget (capped by the request deadline). */
175
+ runLoginStatus?: (
176
+ executable: string,
177
+ env: NodeJS.ProcessEnv,
178
+ timeoutMs: number
179
+ ) => Promise<{ status: number | null; stdout: string; stderr: string }>;
180
+ /** Environment the isolated child env is filtered from. Tests inject fakes. */
181
+ env?: NodeJS.ProcessEnv;
182
+ tmpdir?: () => string;
183
+ now?: () => number;
184
+ }
185
+
186
+ interface CommandOutput {
187
+ status: number | null;
188
+ signal?: NodeJS.Signals | null;
189
+ stdout: string;
190
+ stderr: string;
191
+ }
192
+
193
+ const loginStatusCache = new Map<string, { at: number; promise: Promise<void> }>();
194
+ let coreRunnerRegistered = false;
195
+
196
+ export function createCodexSubscriptionRunner(deps: CodexSubscriptionRunnerDeps = {}): CodexCliFallbackRunner {
197
+ const envSource = deps.env ?? process.env;
198
+ return (request) => runCodexSubscriptionRequest(request, deps, envSource);
199
+ }
200
+
201
+ /**
202
+ * Registers the core subprocess transport on the codex-cli seam, but only
203
+ * when no runner is registered yet — a host or benchmark runner that claimed
204
+ * the seam first always wins. If the seam was cleared afterwards
205
+ * (setCodexCliFallbackRunnerForProcess(undefined)), the core runner is
206
+ * re-registered so the next call still routes. Idempotent.
207
+ */
208
+ export function ensureCodexSubscriptionRunnerRegistered(deps: CodexSubscriptionRunnerDeps = {}): boolean {
209
+ if (isCodexCliFallbackRunnerRegistered()) return false;
210
+ setCodexCliFallbackRunnerForProcess(createCodexSubscriptionRunner(deps));
211
+ coreRunnerRegistered = true;
212
+ return true;
213
+ }
214
+
215
+ async function runCodexSubscriptionRequest(
216
+ request: CodexCliFallbackRequest,
217
+ deps: CodexSubscriptionRunnerDeps,
218
+ envSource: NodeJS.ProcessEnv
219
+ ): Promise<CodexCliFallbackResult> {
220
+ const { config } = request;
221
+ assertNoApiKeyConfig(config);
222
+ const executable = resolveExecutable(config, envSource);
223
+ const env = buildIsolatedEnv(envSource);
224
+
225
+ const providerTimeoutMs = config.retryOptions?.timeoutMs !== undefined
226
+ ? normalizeCodexCliTimeoutMs(config.retryOptions.timeoutMs)
227
+ : undefined;
228
+ const timeoutMs = request.options.timeoutMs ?? providerTimeoutMs ?? DEFAULT_TIMEOUT_MS;
229
+ // The effective deadline starts BEFORE the login-status precheck: login
230
+ // consumes the same call/provider timeout budget, it is not additive.
231
+ const now = deps.now ?? Date.now;
232
+ const deadlineStartedAt = now();
233
+ await assertSubscriptionLogin(executable, env, deps, Math.min(LOGIN_STATUS_TIMEOUT_MS, timeoutMs));
234
+
235
+ if (request.options.signal?.aborted) {
236
+ throw abortErrorOf(request.options.signal);
237
+ }
238
+
239
+ const remainingTimeoutMs = timeoutMs - (now() - deadlineStartedAt);
240
+ if (remainingTimeoutMs <= 0) {
241
+ throw new CodexSubscriptionTimeoutError(timeoutMs);
242
+ }
243
+ let tempDir: string | undefined;
244
+ try {
245
+ tempDir = await mkdtemp(path.join(deps.tmpdir?.() ?? os.tmpdir(), "remnic-codex-sub-"));
246
+ const workspacePath = path.join(tempDir, "workspace");
247
+ const outputPath = path.join(tempDir, "last-message.txt");
248
+ await mkdir(workspacePath, { recursive: true });
249
+
250
+ const runCodexExec = deps.runCodexExec ?? runCodexExecSubprocess;
251
+ const result = await runCodexExec({
252
+ executable,
253
+ args: buildExecArgs(request.modelId, config, workspacePath, outputPath),
254
+ input: buildPrompt(request.messages),
255
+ env,
256
+ outputPath,
257
+ workspacePath,
258
+ timeoutMs: remainingTimeoutMs,
259
+ signal: request.options.signal,
260
+ });
261
+
262
+ if (request.options.signal?.aborted) {
263
+ throw abortErrorOf(request.options.signal);
264
+ }
265
+ if (result.status !== 0) {
266
+ throw execFailureError(result, remainingTimeoutMs, executable, env);
267
+ }
268
+
269
+ const content = result.outputText.trim();
270
+ if (content.length === 0) {
271
+ throw new Error(
272
+ `codex-subscription: codex exec returned no final message (${summarizeOutput(result.stderr, result.stdout)})`
273
+ );
274
+ }
275
+ return { content, ...usageFrom(result) };
276
+ } finally {
277
+ if (tempDir) {
278
+ await rm(tempDir, { force: true, recursive: true }).catch(() => {});
279
+ }
280
+ }
281
+ }
282
+
283
+ /**
284
+ * This provider authenticates exclusively through the codex CLI login, so a
285
+ * configured apiKey is a configuration mistake — reject it without echoing
286
+ * the value.
287
+ */
288
+ function assertNoApiKeyConfig(config: CodexCliFallbackConfig): void {
289
+ if (config.apiKey !== undefined && config.apiKey !== "") {
290
+ throw new CodexSubscriptionConfigError(
291
+ `${CODEX_SUBSCRIPTION_PROVIDER_ID} does not accept apiKey configuration: it authenticates through the Codex CLI login. Remove the apiKey field and run \`codex login\` with a ChatGPT account instead.`
292
+ );
293
+ }
294
+ }
295
+
296
+ function resolveExecutable(config: CodexCliFallbackConfig, env: NodeJS.ProcessEnv): string {
297
+ const configured = config.codexCliExecutable ?? config.executable ?? env[CODEX_EXECUTABLE_ENV] ?? "codex";
298
+ const expanded = expandTildePath(String(configured).trim());
299
+ if (expanded.trim().length === 0) {
300
+ throw new CodexSubscriptionConfigError(`${CODEX_EXECUTABLE_ENV} / executable must not be empty`);
301
+ }
302
+ // The exec child runs with cwd = the temp workspace, and spawn resolves a
303
+ // relative executable against the CHILD cwd. Resolve relative paths against
304
+ // the original process cwd now so `./codex` stays valid; bare names keep
305
+ // PATH lookup.
306
+ if (expanded.includes("/") || expanded.includes("\\")) {
307
+ return path.resolve(expanded);
308
+ }
309
+ return expanded;
310
+ }
311
+
312
+ function buildIsolatedEnv(source: NodeJS.ProcessEnv): NodeJS.ProcessEnv {
313
+ const env: NodeJS.ProcessEnv = {};
314
+ for (const [key, value] of Object.entries(source)) {
315
+ if (value !== undefined && isAllowedEnvKey(key)) {
316
+ env[key] = value;
317
+ }
318
+ }
319
+ return env;
320
+ }
321
+
322
+ function isAllowedEnvKey(key: string): boolean {
323
+ const normalized = key.toUpperCase();
324
+ return CODEX_RUNTIME_ENV_ALLOWLIST[normalized] === true || normalized.startsWith("LC_");
325
+ }
326
+
327
+ /**
328
+ * Verifies the operator's Codex subscription login via `codex login status`.
329
+ * Success is cached briefly; failures are never cached so a re-login takes
330
+ * effect on the next request.
331
+ */
332
+ async function assertSubscriptionLogin(
333
+ executable: string,
334
+ env: NodeJS.ProcessEnv,
335
+ deps: CodexSubscriptionRunnerDeps,
336
+ loginStatusTimeoutMs: number
337
+ ): Promise<void> {
338
+ const now = deps.now ?? Date.now;
339
+ const cacheKey = `${executable}\0${env.CODEX_HOME ?? env.HOME ?? ""}`;
340
+ const cached = loginStatusCache.get(cacheKey);
341
+ if (cached && now() - cached.at < LOGIN_STATUS_CACHE_TTL_MS) {
342
+ await cached.promise;
343
+ return;
344
+ }
345
+ const promise = (async () => {
346
+ const runLoginStatus = deps.runLoginStatus ?? runLoginStatusSubprocess;
347
+ const result = await runLoginStatus(executable, env, loginStatusTimeoutMs);
348
+ const output = `${result.stdout}\n${result.stderr}`.trim();
349
+ if (TIMEOUT_PATTERN.test(output)) {
350
+ // A login-status subprocess timeout is a deadline expiry, not an auth
351
+ // failure — never report it as "unauthenticated".
352
+ throw new CodexSubscriptionTimeoutError(loginStatusTimeoutMs);
353
+ }
354
+ if (result.status === 0 && LOGIN_OK_PATTERN.test(output)) {
355
+ return;
356
+ }
357
+ const apiKeyNote = LOGIN_API_KEY_PATTERN.test(output)
358
+ ? " The CLI currently reports an API-key login; subscription extraction needs a ChatGPT login."
359
+ : "";
360
+ throw new CodexSubscriptionAuthError(
361
+ "unauthenticated",
362
+ `codex-subscription: no ChatGPT-backed Codex login found. Run \`codex login\` and choose the ChatGPT account option, then retry.${apiKeyNote}`
363
+ );
364
+ })();
365
+ loginStatusCache.set(cacheKey, { at: now(), promise });
366
+ try {
367
+ await promise;
368
+ } catch (err) {
369
+ loginStatusCache.delete(cacheKey);
370
+ throw err;
371
+ }
372
+ }
373
+
374
+ /**
375
+ * Args mirror the bench provider: fully sandboxed, ephemeral, no tools/hooks/
376
+ * plugins/memories — extraction must behave as a plain completion endpoint.
377
+ */
378
+ function buildExecArgs(
379
+ modelId: string,
380
+ config: CodexCliFallbackConfig,
381
+ workspacePath: string,
382
+ outputPath: string
383
+ ): string[] {
384
+ const reasoningEffort = readReasoningEffort(config) ?? DEFAULT_REASONING_EFFORT;
385
+ return [
386
+ "exec",
387
+ "--strict-config",
388
+ "--model",
389
+ modelId,
390
+ "--config",
391
+ `model_reasoning_effort=${JSON.stringify(reasoningEffort)}`,
392
+ "--config",
393
+ 'approval_policy="never"',
394
+ "--config",
395
+ 'web_search="disabled"',
396
+ "--disable",
397
+ "hooks",
398
+ "--disable",
399
+ "shell_tool",
400
+ "--disable",
401
+ "unified_exec",
402
+ "--disable",
403
+ "apps",
404
+ "--disable",
405
+ "plugins",
406
+ "--disable",
407
+ "remote_plugin",
408
+ "--disable",
409
+ "multi_agent",
410
+ "--disable",
411
+ "browser_use",
412
+ "--disable",
413
+ "browser_use_external",
414
+ "--disable",
415
+ "computer_use",
416
+ "--disable",
417
+ "image_generation",
418
+ "--disable",
419
+ "in_app_browser",
420
+ "--disable",
421
+ "goals",
422
+ "--disable",
423
+ "memories",
424
+ "--disable",
425
+ "chronicle",
426
+ "--disable",
427
+ "tool_suggest",
428
+ "--disable",
429
+ "workspace_dependencies",
430
+ "--disable",
431
+ "shell_snapshot",
432
+ "--ephemeral",
433
+ "--ignore-user-config",
434
+ "--ignore-rules",
435
+ "--sandbox",
436
+ "read-only",
437
+ "--cd",
438
+ workspacePath,
439
+ "--skip-git-repo-check",
440
+ "--json",
441
+ "--output-last-message",
442
+ outputPath,
443
+ "-",
444
+ ];
445
+ }
446
+
447
+ function readReasoningEffort(config: CodexCliFallbackConfig): CodexCliReasoningEffort | undefined {
448
+ for (const value of [config.codexCliReasoningEffort, config.reasoningEffort]) {
449
+ if (typeof value === "string") {
450
+ const normalized = value.trim().toLowerCase();
451
+ if (normalized === "low" || normalized === "medium" || normalized === "high" || normalized === "xhigh") {
452
+ return normalized;
453
+ }
454
+ throw new CodexSubscriptionConfigError(
455
+ "codex-subscription reasoningEffort must be one of low, medium, high, xhigh (got unrecognized value)"
456
+ );
457
+ }
458
+ }
459
+ return undefined;
460
+ }
461
+
462
+ /**
463
+ * One JSON object per message: role boundaries are structural (JSON string
464
+ * escaping), so literal `[system]`/role-marker text inside message content
465
+ * can never forge another role's turn. Content stays model-visible verbatim.
466
+ */
467
+ function buildPrompt(messages: readonly CodexCliFallbackMessage[]): string {
468
+ const transcript = messages
469
+ .map((message) => JSON.stringify({ role: message.role, content: message.content }))
470
+ .join("\n");
471
+ return [
472
+ "You are acting as an LLM completion endpoint for a memory-extraction pipeline, not as a coding agent.",
473
+ "Answer the request in the transcript below. Do not inspect files, run commands, browse, or use tools.",
474
+ "Return only the final answer text. If the request asks for JSON, return raw JSON only.",
475
+ "",
476
+ 'TRANSCRIPT (JSON Lines: one {"role":"...","content":"..."} object per message; newlines inside content are escaped):',
477
+ transcript,
478
+ ].join("\n");
479
+ }
480
+
481
+ function execFailureError(
482
+ result: CodexSubscriptionExecResult,
483
+ timeoutMs: number,
484
+ executable: string,
485
+ env: NodeJS.ProcessEnv
486
+ ): Error {
487
+ const combined = `${result.stderr}\n${result.stdout}`;
488
+ if (AUTH_FAILURE_PATTERN.test(combined)) {
489
+ // Re-check login on the next request; the cached status is now stale.
490
+ loginStatusCache.delete(`${executable}\0${env.CODEX_HOME ?? env.HOME ?? ""}`);
491
+ return new CodexSubscriptionAuthError(
492
+ "expired_or_revoked",
493
+ "codex-subscription: the Codex CLI rejected the request as unauthenticated " +
494
+ "(session expired or revoked). Run `codex login` again to re-authenticate, then retry."
495
+ );
496
+ }
497
+ if (TIMEOUT_PATTERN.test(combined)) {
498
+ return new CodexSubscriptionTimeoutError(timeoutMs);
499
+ }
500
+ const exitLabel = result.signal ? `signal ${result.signal}` : `exit ${result.status ?? "unknown"}`;
501
+ return new Error(
502
+ `codex-subscription: codex exec failed (${exitLabel}): ${summarizeOutput(result.stderr, result.stdout)}`
503
+ );
504
+ }
505
+
506
+ /** Secret-redacted, then bounded tail of child output — the only child text
507
+ * that ever reaches a thrown error. Redaction runs BEFORE bounding so a
508
+ * secret straddling the cutoff cannot survive as an unmatchable fragment. */
509
+ function summarizeOutput(stderr: string, stdout: string): string {
510
+ const summary = [stderr.trim(), stdout.trim()].filter((part) => part.length > 0).join("\n");
511
+ if (summary.length === 0) {
512
+ return "no process output";
513
+ }
514
+ return redactSecretEchoes(summary).slice(-OUTPUT_SUMMARY_LIMIT);
515
+ }
516
+
517
+ export function redactSecretEchoes(value: string): string {
518
+ let redacted = value;
519
+ for (const pattern of SECRET_ECHO_PATTERNS) {
520
+ redacted = redacted.replace(pattern, "[redacted]");
521
+ }
522
+ return redacted;
523
+ }
524
+ type CodexSubscriptionUsage = Pick<CodexCliFallbackResult, "usage">;
525
+
526
+ function usageFrom(result: CodexSubscriptionExecResult): CodexSubscriptionUsage {
527
+ const usage = parseCodexJsonlUsage(`${result.stdout}\n${result.stderr}`);
528
+ if (!usage) {
529
+ return {};
530
+ }
531
+ return {
532
+ usage: {
533
+ inputTokens: usage.inputTokens,
534
+ outputTokens: usage.outputTokens,
535
+ totalTokens: usage.inputTokens + usage.outputTokens,
536
+ },
537
+ };
538
+ }
539
+ /** Parses `turn.completed` usage events from codex exec JSONL output.
540
+ * Mirrors the bench parser (core cannot import the optional bench package). */
541
+ export function parseCodexJsonlUsage(output: string): { inputTokens: number; outputTokens: number } | undefined {
542
+ let usage: { inputTokens: number; outputTokens: number } | undefined;
543
+ for (const line of output.split(/\r?\n/)) {
544
+ const trimmed = line.trim();
545
+ if (!trimmed.startsWith("{")) continue;
546
+ try {
547
+ const event = JSON.parse(trimmed) as {
548
+ type?: unknown;
549
+ usage?: Record<string, unknown>;
550
+ };
551
+ if (event.type !== "turn.completed" || !event.usage) continue;
552
+ const inputTokens = readCounter(event.usage.input_tokens);
553
+ const outputTokens = readCounter(event.usage.output_tokens);
554
+ if (inputTokens !== undefined && outputTokens !== undefined) {
555
+ usage = { inputTokens, outputTokens };
556
+ }
557
+ } catch {
558
+ // codex exec prints non-JSON status text alongside JSONL; ignore it
559
+ }
560
+ }
561
+ return usage;
562
+ }
563
+
564
+ function readCounter(value: unknown): number | undefined {
565
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
566
+ return undefined;
567
+ }
568
+ return value;
569
+ }
570
+
571
+ function abortErrorOf(signal: AbortSignal): Error {
572
+ if (signal.reason instanceof Error) return signal.reason;
573
+ if (signal.reason !== undefined) return new Error(String(signal.reason));
574
+ return new DOMException("The operation was aborted.", "AbortError");
575
+ }
576
+
577
+ /** Bounds streamed child output to STDIO_LIMIT, keeping the TAIL — codex
578
+ * prints its final error or turn.completed result last. Secrets are redacted
579
+ * BEFORE bounding so one straddling the cutoff cannot leak a fragment. */
580
+ function appendBounded(existing: string, next: string): string {
581
+ const redacted = redactSecretEchoes(existing + next);
582
+ return redacted.length > STDIO_LIMIT ? redacted.slice(-STDIO_LIMIT) : redacted;
583
+ }
584
+
585
+ async function runLoginStatusSubprocess(
586
+ executable: string,
587
+ env: NodeJS.ProcessEnv,
588
+ timeoutMs: number
589
+ ): Promise<{ status: number | null; stdout: string; stderr: string }> {
590
+ return await runSubprocess(executable, ["login", "status"], {
591
+ env,
592
+ stdin: undefined,
593
+ timeoutMs,
594
+ timeoutLabel: "login status",
595
+ });
596
+ }
597
+
598
+ async function runCodexExecSubprocess(request: CodexSubscriptionExecRequest): Promise<CodexSubscriptionExecResult> {
599
+ const result = await runSubprocess(request.executable, request.args, {
600
+ env: request.env,
601
+ stdin: request.input,
602
+ timeoutMs: request.timeoutMs,
603
+ timeoutLabel: "exec",
604
+ signal: request.signal,
605
+ cwd: request.workspacePath,
606
+ });
607
+ let outputText = "";
608
+ try {
609
+ outputText = (await readFile(request.outputPath, "utf8")).trim();
610
+ } catch {
611
+ // Missing output file surfaces as the no-final-message error path.
612
+ }
613
+ return { ...result, outputText };
614
+ }
615
+
616
+ interface SubprocessOptions {
617
+ env: NodeJS.ProcessEnv;
618
+ stdin?: string;
619
+ timeoutMs?: number;
620
+ timeoutLabel: string;
621
+ signal?: AbortSignal;
622
+ cwd?: string;
623
+ }
624
+
625
+ async function runSubprocess(executable: string, args: string[], options: SubprocessOptions): Promise<CommandOutput> {
626
+ return await new Promise<CommandOutput>((resolve, reject) => {
627
+ if (options.signal?.aborted) {
628
+ reject(abortErrorOf(options.signal));
629
+ return;
630
+ }
631
+ const child = launchProcess(executable, args, {
632
+ ...(options.cwd ? { cwd: options.cwd } : {}),
633
+ env: options.env,
634
+ stdio: [options.stdin === undefined ? "ignore" : "pipe", "pipe", "pipe"],
635
+ detached: process.platform !== "win32",
636
+ windowsHide: true,
637
+ });
638
+ let stdout = "";
639
+ let stderr = "";
640
+ let timedOut = false;
641
+ let killTimeout: ReturnType<typeof setTimeout> | undefined;
642
+ const clearKillTimeout = (): void => {
643
+ if (killTimeout) {
644
+ clearTimeout(killTimeout);
645
+ killTimeout = undefined;
646
+ }
647
+ };
648
+ const terminate = (signal: NodeJS.Signals): void => {
649
+ if (child.pid && process.platform !== "win32") {
650
+ try {
651
+ process.kill(-child.pid, signal);
652
+ return;
653
+ } catch {
654
+ // fall through to killing the direct child
655
+ }
656
+ }
657
+ child.kill(signal);
658
+ };
659
+ const scheduleForcedKill = (): void => {
660
+ clearKillTimeout();
661
+ killTimeout = setTimeout(() => terminate("SIGKILL"), 1_000);
662
+ killTimeout.unref();
663
+ };
664
+ const onAbort = (): void => {
665
+ terminate("SIGTERM");
666
+ scheduleForcedKill();
667
+ };
668
+ options.signal?.addEventListener("abort", onAbort, { once: true });
669
+ const timeout = options.timeoutMs
670
+ ? setTimeout(() => {
671
+ timedOut = true;
672
+ stderr = appendBounded(
673
+ stderr,
674
+ `\ncodex-subscription: ${options.timeoutLabel} timed out after ${options.timeoutMs}ms.`
675
+ );
676
+ terminate("SIGTERM");
677
+ scheduleForcedKill();
678
+ }, options.timeoutMs)
679
+ : undefined;
680
+ timeout?.unref();
681
+ child.stdout?.setEncoding("utf8");
682
+ child.stderr?.setEncoding("utf8");
683
+ child.stdout?.on("data", (chunk: string) => {
684
+ stdout = appendBounded(stdout, chunk);
685
+ });
686
+ child.stderr?.on("data", (chunk: string) => {
687
+ stderr = appendBounded(stderr, chunk);
688
+ });
689
+ child.stdin?.on("error", (error: NodeJS.ErrnoException) => {
690
+ stderr = appendBounded(stderr, `\ncodex-subscription: stdin error: ${error.code ?? error.message}`);
691
+ });
692
+ const settle = (fn: () => void): void => {
693
+ clearTimeout(timeout);
694
+ clearKillTimeout();
695
+ options.signal?.removeEventListener("abort", onAbort);
696
+ fn();
697
+ };
698
+ child.on("error", (error) => {
699
+ settle(() => {
700
+ reject(
701
+ child.pid
702
+ ? new Error(`codex-subscription: codex CLI failed after start: ${safeMessage(error)}`, { cause: error })
703
+ : new CodexSubscriptionAuthError(
704
+ "unauthenticated",
705
+ `codex-subscription: codex CLI not found at \`${executable}\` — install the Codex CLI and run \`codex login\` with a ChatGPT account, then retry.`
706
+ )
707
+ );
708
+ });
709
+ });
710
+ child.on("close", (status, signal) => {
711
+ settle(() => {
712
+ resolve({
713
+ status: timedOut ? (status ?? 124) : status,
714
+ signal: timedOut ? (signal ?? "SIGTERM") : signal,
715
+ stdout,
716
+ stderr,
717
+ });
718
+ });
719
+ });
720
+ if (options.stdin !== undefined) {
721
+ try {
722
+ child.stdin?.end(options.stdin);
723
+ } catch (error) {
724
+ log.debug(`codex-subscription: failed writing prompt to stdin: ${safeMessage(error)}`);
725
+ }
726
+ }
727
+ });
728
+ }
729
+
730
+ function safeMessage(error: unknown): string {
731
+ return error instanceof Error ? error.message : String(error);
732
+ }
733
+
734
+ export const __codexSubscriptionTestHooks = {
735
+ appendBounded,
736
+ resetLoginStatusCache: (): void => {
737
+ loginStatusCache.clear();
738
+ },
739
+ isCoreRunnerRegistered: (): boolean => coreRunnerRegistered,
740
+ resetCoreRunnerRegistered: (): void => {
741
+ coreRunnerRegistered = false;
742
+ },
743
+ };