@remnic/core 9.69.37 → 9.69.39

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 (697) hide show
  1. package/dist/access-admin-ops-surface.d.ts +14 -12
  2. package/dist/access-admin-ops-surface.js +86 -83
  3. package/dist/access-authorization-probe.d.ts +14 -12
  4. package/dist/access-authorization-probe.js +87 -84
  5. package/dist/access-boundary.d.ts +14 -12
  6. package/dist/access-boundary.js +86 -83
  7. package/dist/access-cli.js +197 -191
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +2 -1
  10. package/dist/access-extraction-force-flush.d.ts +14 -12
  11. package/dist/access-extraction-force-flush.js +86 -83
  12. package/dist/access-health-types.d.ts +2 -1
  13. package/dist/access-http-briefing.d.ts +14 -12
  14. package/dist/access-http-briefing.js +87 -84
  15. package/dist/access-http-lcm-compaction.d.ts +14 -12
  16. package/dist/access-http-lifecycle-flush.d.ts +14 -12
  17. package/dist/access-http-offline-stream.d.ts +14 -12
  18. package/dist/access-http-query.d.ts +3 -2
  19. package/dist/access-http-query.js +88 -85
  20. package/dist/access-http.d.ts +15 -13
  21. package/dist/access-http.js +108 -105
  22. package/dist/access-identity-continuity-surface.d.ts +12 -10
  23. package/dist/access-identity-continuity-surface.js +86 -83
  24. package/dist/access-lcm-surface.d.ts +14 -12
  25. package/dist/access-lcm-surface.js +86 -83
  26. package/dist/access-mcp.d.ts +14 -12
  27. package/dist/access-mcp.js +97 -94
  28. package/dist/access-memory-search-fanout.d.ts +3 -2
  29. package/dist/{access-namespace-preflight-CV5cHujx.d.ts → access-namespace-preflight-DY4z6L5X.d.ts} +1 -1
  30. package/dist/access-namespace-preflight.d.ts +4 -3
  31. package/dist/access-namespace-preflight.js +86 -83
  32. package/dist/access-observe-transcript.d.ts +12 -10
  33. package/dist/access-observe-write-category.d.ts +37 -0
  34. package/dist/access-observe-write-category.js +34 -0
  35. package/dist/access-observe-write-surface.d.ts +17 -15
  36. package/dist/access-observe-write-surface.js +86 -83
  37. package/dist/access-offline-manifest.d.ts +12 -10
  38. package/dist/access-offline-manifest.js +15 -15
  39. package/dist/access-operations-batch.js +91 -88
  40. package/dist/access-operations.d.ts +17 -30
  41. package/dist/access-operations.js +96 -93
  42. package/dist/access-recall-concurrency.d.ts +14 -12
  43. package/dist/access-recall-concurrency.js +86 -83
  44. package/dist/access-recall-response.d.ts +14 -12
  45. package/dist/access-recall-response.js +86 -83
  46. package/dist/access-recall-surface.d.ts +14 -12
  47. package/dist/access-recall-surface.js +86 -83
  48. package/dist/access-schema.d.ts +210 -107
  49. package/dist/access-schema.js +9 -15
  50. package/dist/{access-service-DwHC7lcV.d.ts → access-service-MY4bsr_Q.d.ts} +101 -77
  51. package/dist/access-service-helpers.d.ts +14 -12
  52. package/dist/access-service.d.ts +14 -12
  53. package/dist/access-service.js +86 -83
  54. package/dist/access-surface-catalog.d.ts +14 -12
  55. package/dist/access-surface-catalog.js +88 -85
  56. package/dist/access-surface-catalog.js.map +1 -1
  57. package/dist/access-wearables-meetings-surface.d.ts +5 -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 +3 -3
  61. package/dist/active-recall.d.ts +2 -1
  62. package/dist/active-recall.js +20 -17
  63. package/dist/active-recall.js.map +1 -1
  64. package/dist/activity/digest.d.ts +2 -1
  65. package/dist/adapters/index.js +4 -4
  66. package/dist/adapters/registry.js +2 -2
  67. package/dist/ambient-provenance.d.ts +2 -1
  68. package/dist/artifact-search.d.ts +2 -1
  69. package/dist/{auto-sync-FSRJDU63.js → auto-sync-RP4C6ZPF.js} +11 -9
  70. package/dist/{auto-sync-FSRJDU63.js.map → auto-sync-RP4C6ZPF.js.map} +1 -1
  71. package/dist/background-generation-config.d.ts +10 -0
  72. package/dist/background-generation-config.js +9 -0
  73. package/dist/background-generation.d.ts +25 -0
  74. package/dist/background-generation.js +11 -0
  75. package/dist/behavior-learner.d.ts +2 -1
  76. package/dist/behavior-signals.d.ts +2 -1
  77. package/dist/bootstrap.d.ts +12 -10
  78. package/dist/briefing-window.d.ts +3 -2
  79. package/dist/briefing.d.ts +3 -2
  80. package/dist/briefing.js +27 -26
  81. package/dist/buffer-surprise-report.d.ts +2 -1
  82. package/dist/buffer-turn-helpers.d.ts +2 -1
  83. package/dist/buffer.d.ts +3 -2
  84. package/dist/buffer.js +8 -8
  85. package/dist/bulk-import/index.d.ts +4 -3
  86. package/dist/calibration.d.ts +3 -1
  87. package/dist/calibration.js +4 -2
  88. package/dist/calibration.js.map +1 -1
  89. package/dist/capabilities.d.ts +2 -1
  90. package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
  91. package/dist/{capsule-merge-ZCXUPLNJ.js → capsule-merge-IPG4IOFP.js} +2 -2
  92. package/dist/{catalog-Cl4H8N89.d.ts → catalog-CW87xGx8.d.ts} +1 -1
  93. package/dist/causal-behavior.d.ts +2 -1
  94. package/dist/causal-behavior.js +2 -2
  95. package/dist/causal-chain.js +2 -2
  96. package/dist/causal-consolidation.d.ts +2 -1
  97. package/dist/causal-consolidation.js +29 -28
  98. package/dist/causal-consolidation.js.map +1 -1
  99. package/dist/causal-retrieval.js +2 -2
  100. package/dist/causal-trajectory-graph.d.ts +2 -1
  101. package/dist/causal-trajectory-graph.js +2 -2
  102. package/dist/causal-trajectory.js +1 -1
  103. package/dist/{chunk-YHU5XUF4.js → chunk-27MKMTBY.js} +2 -2
  104. package/dist/{chunk-TK4FHQRN.js → chunk-2J3V5QEO.js} +4 -4
  105. package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
  106. package/dist/chunk-2QG4SLZI.js +44 -0
  107. package/dist/chunk-2QG4SLZI.js.map +1 -0
  108. package/dist/{chunk-TFRDUD3M.js → chunk-2ZTDRNCS.js} +2 -2
  109. package/dist/{chunk-PWPIERBM.js → chunk-37CAEC7E.js} +4 -4
  110. package/dist/{chunk-X7BCM2NA.js → chunk-3EKVN2OP.js} +2 -2
  111. package/dist/{chunk-S2ULTQZR.js → chunk-3N3PBBEH.js} +2 -2
  112. package/dist/{chunk-XCF3SFHD.js → chunk-3NPNBVFR.js} +2 -2
  113. package/dist/{chunk-JO5TQAKW.js → chunk-4BCHFSC7.js} +3 -3
  114. package/dist/{chunk-Q6D7EUSQ.js → chunk-4JVQRFZD.js} +10 -10
  115. package/dist/{chunk-YEDVOYL2.js → chunk-4RX5O34R.js} +2 -2
  116. package/dist/{chunk-JMPYZJQN.js → chunk-4RZLTZVM.js} +4 -4
  117. package/dist/{chunk-Q7JK6YEB.js → chunk-54NX5EG4.js} +2 -2
  118. package/dist/{chunk-GWK7FEUL.js → chunk-5FAGCOZD.js} +4 -4
  119. package/dist/{chunk-2PUE5P7C.js → chunk-5N4MZLEH.js} +5 -5
  120. package/dist/{chunk-B2YKTE7P.js → chunk-5SPCMAUC.js} +10 -10
  121. package/dist/{chunk-3OHISDDW.js → chunk-5U7K4W6K.js} +2 -2
  122. package/dist/{chunk-CYEMS2PG.js → chunk-5YCNDC3C.js} +3 -3
  123. package/dist/{chunk-PAAJWQH5.js → chunk-62D2PAAM.js} +4 -4
  124. package/dist/{chunk-52II7PB6.js → chunk-645WOU5I.js} +4 -4
  125. package/dist/chunk-6AGWBKQU.js +94 -0
  126. package/dist/chunk-6AGWBKQU.js.map +1 -0
  127. package/dist/{chunk-326KUXIR.js → chunk-6EHM2AV7.js} +6 -6
  128. package/dist/{chunk-YM7YN37H.js → chunk-6ET2VII7.js} +2 -2
  129. package/dist/chunk-6H2G7RFT.js +58 -0
  130. package/dist/chunk-6H2G7RFT.js.map +1 -0
  131. package/dist/{chunk-A2YQL2FF.js → chunk-6P4REYKL.js} +5 -5
  132. package/dist/{chunk-7RKBPXY6.js → chunk-6YAIN5XJ.js} +2 -2
  133. package/dist/{chunk-2L5FSNPC.js → chunk-A7GQBJP5.js} +10 -10
  134. package/dist/{chunk-UYVXIY6C.js → chunk-AAZEKXUP.js} +2 -2
  135. package/dist/{chunk-JR6PP7UM.js → chunk-ACY4ZPF7.js} +28 -2
  136. package/dist/chunk-ACY4ZPF7.js.map +1 -0
  137. package/dist/{chunk-IQZ6ISFX.js → chunk-AECJY3GJ.js} +2 -2
  138. package/dist/{chunk-76DRU7C4.js → chunk-AENM6GKU.js} +2 -2
  139. package/dist/{chunk-KTRXQQFN.js → chunk-B36GUU6T.js} +4 -4
  140. package/dist/{chunk-TLHNF6GA.js → chunk-BV4ZKIZH.js} +1 -1
  141. package/dist/{chunk-ZWEZXVYH.js → chunk-CEO4DONG.js} +2 -2
  142. package/dist/chunk-CWTCMZGE.js +858 -0
  143. package/dist/chunk-CWTCMZGE.js.map +1 -0
  144. package/dist/{chunk-ZEPVWLCN.js → chunk-CZTPU65V.js} +25 -25
  145. package/dist/{chunk-TRU6JBOI.js → chunk-D545Z7UH.js} +3 -3
  146. package/dist/{chunk-6E5GYDIE.js → chunk-DGS34QSY.js} +2 -2
  147. package/dist/{chunk-65RENJGB.js → chunk-E2AWJ7KQ.js} +8 -4
  148. package/dist/chunk-E2AWJ7KQ.js.map +1 -0
  149. package/dist/{chunk-6Z3WW2MW.js → chunk-ENBPQEVU.js} +3 -3
  150. package/dist/{chunk-DOKKRZPH.js → chunk-EYKIDK33.js} +21 -19
  151. package/dist/chunk-EYKIDK33.js.map +1 -0
  152. package/dist/{chunk-PNEDMJ53.js → chunk-F4EHXVP7.js} +2 -2
  153. package/dist/{chunk-JPKZTCWZ.js → chunk-FNHLI2RE.js} +3 -3
  154. package/dist/{chunk-D2DIYEFW.js → chunk-FWWWUPOE.js} +12 -36
  155. package/dist/chunk-FWWWUPOE.js.map +1 -0
  156. package/dist/{chunk-M3MYMWXG.js → chunk-FXHOZGSE.js} +2 -2
  157. package/dist/{chunk-SAKA6PPL.js → chunk-GAS7KYC7.js} +5 -5
  158. package/dist/{chunk-LSLCFCCQ.js → chunk-GDYU6VF4.js} +1 -1
  159. package/dist/chunk-GDYU6VF4.js.map +1 -0
  160. package/dist/{chunk-2AR5JFD7.js → chunk-GG5FHZJJ.js} +6 -6
  161. package/dist/{chunk-WS3WNLST.js → chunk-GI4ZBWPQ.js} +3 -3
  162. package/dist/{chunk-JYR4LH76.js → chunk-GMIQV6DD.js} +2 -2
  163. package/dist/{chunk-WIKO4SCR.js → chunk-H3TKENU4.js} +5 -5
  164. package/dist/{chunk-ZLN7AROH.js → chunk-HIP6DKJJ.js} +5 -5
  165. package/dist/{chunk-SF6RFI5Z.js → chunk-HWLIMQE2.js} +2 -2
  166. package/dist/{chunk-JZYECQWN.js → chunk-IL6ODG6M.js} +2 -2
  167. package/dist/{chunk-GNR6YEWZ.js → chunk-IQEJIOEU.js} +6 -6
  168. package/dist/{chunk-BICNRVEC.js → chunk-IWO6QXWJ.js} +2 -2
  169. package/dist/{chunk-RN3MVLW3.js → chunk-IYKZJVL5.js} +1 -1
  170. package/dist/chunk-IYKZJVL5.js.map +1 -0
  171. package/dist/{chunk-42DJ235G.js → chunk-J272ODKJ.js} +2 -2
  172. package/dist/{chunk-R3TLVTWW.js → chunk-JDX2OA4R.js} +3 -3
  173. package/dist/{chunk-G5MO3VQA.js → chunk-JKKII6GX.js} +2 -2
  174. package/dist/{chunk-L5OXE4PX.js → chunk-JTQR6L2N.js} +3 -3
  175. package/dist/{chunk-VDX2J7OX.js → chunk-KQAFEZQX.js} +2 -2
  176. package/dist/{chunk-AKE4GGQ3.js → chunk-KQW3YGEN.js} +2 -2
  177. package/dist/{chunk-LMMQKZK3.js → chunk-L63GFNKL.js} +1 -1
  178. package/dist/{chunk-BRZWWUCJ.js → chunk-LMLGBG6H.js} +2 -2
  179. package/dist/{chunk-3IXB77DA.js → chunk-LPYYY4AP.js} +318 -278
  180. package/dist/chunk-LPYYY4AP.js.map +1 -0
  181. package/dist/{chunk-YEN4TREG.js → chunk-LQNRVPTV.js} +54 -567
  182. package/dist/chunk-LQNRVPTV.js.map +1 -0
  183. package/dist/{chunk-CQ7SSBO4.js → chunk-M6HBPLBA.js} +2 -2
  184. package/dist/chunk-MCRVQ5YQ.js +14 -0
  185. package/dist/chunk-MCRVQ5YQ.js.map +1 -0
  186. package/dist/{chunk-3YMDY3ZF.js → chunk-MUTVRKKY.js} +16 -16
  187. package/dist/{chunk-FCFAYMTU.js → chunk-NXGSONWM.js} +2 -2
  188. package/dist/{chunk-4WGAMREC.js → chunk-O4M4BDIJ.js} +2 -2
  189. package/dist/{chunk-5SYI2F47.js → chunk-O76F5QPP.js} +2 -2
  190. package/dist/{chunk-SROIT6QY.js → chunk-OPBFP4TF.js} +28 -11
  191. package/dist/chunk-OPBFP4TF.js.map +1 -0
  192. package/dist/{chunk-7MJBKZPU.js → chunk-P4ZAEYKG.js} +68 -34
  193. package/dist/chunk-P4ZAEYKG.js.map +1 -0
  194. package/dist/{chunk-57GDHV2D.js → chunk-PCOVEDPK.js} +6 -6
  195. package/dist/{chunk-PPTOAHTZ.js → chunk-PGAB2V53.js} +2 -2
  196. package/dist/{chunk-HHDTBYDJ.js → chunk-Q432REND.js} +2 -2
  197. package/dist/{chunk-XAITGGX5.js → chunk-Q4AUIFUA.js} +4 -4
  198. package/dist/{chunk-5LLQAUMI.js → chunk-Q7CLGFA7.js} +3 -3
  199. package/dist/{chunk-KUK56OPR.js → chunk-QHT7MOUF.js} +12 -12
  200. package/dist/{chunk-W6IJMWTZ.js → chunk-QTQ6XKGT.js} +4 -4
  201. package/dist/{chunk-FLLORID2.js → chunk-RLJHJQUY.js} +9 -9
  202. package/dist/{chunk-353KGBKY.js → chunk-RW4QNB4J.js} +4 -4
  203. package/dist/{chunk-GWQVMKUJ.js → chunk-SCXURCVT.js} +3 -3
  204. package/dist/{chunk-FQXJAC3T.js → chunk-SGUDMW2K.js} +4 -4
  205. package/dist/{chunk-LSDEIZ76.js → chunk-TA4C3XB7.js} +6 -6
  206. package/dist/{chunk-YIZ2EUUL.js → chunk-TNZNSMVJ.js} +94 -94
  207. package/dist/{chunk-CIYUWSMZ.js → chunk-TRLOFIQC.js} +2 -2
  208. package/dist/{chunk-TL7NLM2L.js → chunk-TSP5WH72.js} +2 -2
  209. package/dist/{chunk-3K6UFW5B.js → chunk-UHRZ324M.js} +8 -8
  210. package/dist/{chunk-JLXWRQNR.js → chunk-UZEHHXYC.js} +170 -167
  211. package/dist/chunk-UZEHHXYC.js.map +1 -0
  212. package/dist/{chunk-A5UQ52YQ.js → chunk-UZZ7SQT3.js} +5 -5
  213. package/dist/{chunk-GHX5PNXW.js → chunk-VBSNUH4J.js} +2 -2
  214. package/dist/{chunk-MR6LQVZ5.js → chunk-VJIE4D2I.js} +3 -3
  215. package/dist/{chunk-OTPXEE6W.js → chunk-VSL63CFJ.js} +15 -12
  216. package/dist/chunk-VSL63CFJ.js.map +1 -0
  217. package/dist/{chunk-2JGGZICG.js → chunk-WBM2MVBK.js} +2 -2
  218. package/dist/{chunk-CD3C4BJN.js → chunk-WIWLX65T.js} +2 -2
  219. package/dist/{chunk-GDDSXVWR.js → chunk-X4TD4O2F.js} +3 -3
  220. package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
  221. package/dist/{chunk-FPQDZCUX.js → chunk-XH3HGI2N.js} +2 -2
  222. package/dist/{chunk-C6KRO3SU.js → chunk-XVDZFTN5.js} +4 -4
  223. package/dist/{chunk-3SL52JKD.js → chunk-XVZA6VXC.js} +4 -4
  224. package/dist/chunk-YDVAM7S4.js +221 -0
  225. package/dist/chunk-YDVAM7S4.js.map +1 -0
  226. package/dist/chunk-YFTNZMGR.js +71 -0
  227. package/dist/chunk-YFTNZMGR.js.map +1 -0
  228. package/dist/{chunk-VELCIWJZ.js → chunk-YKREX63Z.js} +19 -10
  229. package/dist/chunk-YKREX63Z.js.map +1 -0
  230. package/dist/{chunk-BLHX5FQW.js → chunk-YUW66UAH.js} +2 -2
  231. package/dist/{chunk-DOQLHCSS.js → chunk-ZBW7A667.js} +2 -2
  232. package/dist/{chunk-4DPDIOVA.js → chunk-ZEGL7YCC.js} +2 -2
  233. package/dist/{chunk-VVX5PZFS.js → chunk-ZHXSOMYH.js} +2 -2
  234. package/dist/{chunk-GCBIXUPT.js → chunk-ZMWSYUUL.js} +2 -2
  235. package/dist/{chunk-X2QPKLPL.js → chunk-ZZUVBZL2.js} +2 -2
  236. package/dist/{cli-1mzd5TM4.d.ts → cli-DGq0MNpO.d.ts} +5 -5
  237. package/dist/cli-fallback.d.ts +4 -2
  238. package/dist/cli-fallback.js +3 -1
  239. package/dist/cli.d.ts +16 -14
  240. package/dist/cli.js +139 -134
  241. package/dist/coding/export-okf-codegraph.d.ts +2 -1
  242. package/dist/coding/export-okf-codegraph.js +26 -25
  243. package/dist/coding/export-okf-codegraph.js.map +1 -1
  244. package/dist/coding/pre-action-gate.d.ts +2 -1
  245. package/dist/coding/pre-action-gate.js +2 -2
  246. package/dist/compat/codex-cli-fallback.d.ts +1 -1
  247. package/dist/compat/codex-cli-fallback.js +3 -1
  248. package/dist/compat/codex-cli-fallback.js.map +1 -1
  249. package/dist/compounding/engine.d.ts +3 -2
  250. package/dist/compounding/engine.js +27 -26
  251. package/dist/compounding/preference-consolidator.d.ts +2 -1
  252. package/dist/compression-optimizer.d.ts +2 -1
  253. package/dist/config.d.ts +2 -1
  254. package/dist/config.js +18 -15
  255. package/dist/connectors/codex-materialize-runner.d.ts +2 -1
  256. package/dist/connectors/codex-materialize-runner.js +26 -25
  257. package/dist/connectors/codex-materialize.d.ts +2 -1
  258. package/dist/connectors/index.d.ts +2 -1
  259. package/dist/connectors/index.js +29 -28
  260. package/dist/consolidation-provenance-check.d.ts +3 -2
  261. package/dist/consolidation-undo.d.ts +3 -2
  262. package/dist/contradiction/index.d.ts +5 -3
  263. package/dist/contradiction/index.js +7 -7
  264. package/dist/{contradiction-scan-GVD4JJ7B.js → contradiction-scan-BSGKZHYJ.js} +4 -4
  265. package/dist/contradiction-scan-BSGKZHYJ.js.map +1 -0
  266. package/dist/converge-config.d.ts +2 -1
  267. package/dist/convergence-refresh.d.ts +3 -2
  268. package/dist/convergence-refresh.js +29 -28
  269. package/dist/conversation-index/backend.d.ts +2 -1
  270. package/dist/conversation-index/chunker.d.ts +2 -1
  271. package/dist/conversation-index/faiss-adapter.d.ts +2 -1
  272. package/dist/conversation-index/indexer.d.ts +2 -1
  273. package/dist/conversation-index/search.d.ts +2 -1
  274. package/dist/corpus-watermark.d.ts +2 -1
  275. package/dist/corpus-watermark.js +29 -28
  276. package/dist/cross-lingual-recall.d.ts +2 -1
  277. package/dist/day-summary.d.ts +2 -1
  278. package/dist/deep-recall-http-glue.d.ts +14 -12
  279. package/dist/deep-recall-http-glue.js +4 -14
  280. package/dist/deep-recall-mcp-tools.d.ts +14 -12
  281. package/dist/deep-recall-policy-llm.d.ts +3 -1
  282. package/dist/deep-recall-policy-llm.js +5 -3
  283. package/dist/deep-recall-seeds.d.ts +2 -1
  284. package/dist/delinearize.d.ts +2 -1
  285. package/dist/dependency-propagation-config.d.ts +2 -1
  286. package/dist/{dependency-propagation-delivery-Bua2ApHV.d.ts → dependency-propagation-delivery-Cq1ekOwV.d.ts} +1 -1
  287. package/dist/direct-answer-wiring.d.ts +2 -1
  288. package/dist/direct-answer.d.ts +2 -1
  289. package/dist/embedding-fallback.d.ts +2 -1
  290. package/dist/enrichment/index.d.ts +2 -1
  291. package/dist/entity-origin-fields.d.ts +2 -1
  292. package/dist/entity-retrieval.d.ts +3 -2
  293. package/dist/entity-retrieval.js +28 -27
  294. package/dist/entity-schema.d.ts +2 -1
  295. package/dist/episodic-context.d.ts +2 -1
  296. package/dist/eval-trajectory-contracts.d.ts +2 -1
  297. package/dist/eval-trajectory-store.d.ts +2 -1
  298. package/dist/eval-trajectory.d.ts +2 -1
  299. package/dist/event-order-recall.js +3 -3
  300. package/dist/explicit-capture.d.ts +12 -10
  301. package/dist/explicit-capture.js +6 -6
  302. package/dist/external-wiki-access.d.ts +14 -12
  303. package/dist/external-wiki-access.js +87 -84
  304. package/dist/external-wiki-collection-registration.d.ts +2 -1
  305. package/dist/external-wiki-collection.d.ts +2 -1
  306. package/dist/external-wiki-mcp-tools.d.ts +14 -12
  307. package/dist/extraction-error-classification.d.ts +2 -1
  308. package/dist/extraction-faithfulness.d.ts +3 -1
  309. package/dist/extraction-faithfulness.js +5 -3
  310. package/dist/extraction-judge-telemetry.d.ts +3 -1
  311. package/dist/extraction-judge-training.d.ts +3 -1
  312. package/dist/extraction-judge.d.ts +3 -1
  313. package/dist/extraction-judge.js +5 -3
  314. package/dist/extraction-liveness.d.ts +2 -1
  315. package/dist/extraction-normalization.d.ts +2 -1
  316. package/dist/extraction-prompt.d.ts +2 -1
  317. package/dist/extraction-source-grounding-rules.d.ts +2 -1
  318. package/dist/extraction-source-grounding.d.ts +2 -1
  319. package/dist/extraction-source-grounding.js +3 -3
  320. package/dist/extraction-span-config.d.ts +2 -1
  321. package/dist/extraction-span-materialize.d.ts +2 -1
  322. package/dist/extraction-span-materialize.js +2 -2
  323. package/dist/extraction.d.ts +2 -1
  324. package/dist/extraction.js +46 -45
  325. package/dist/fallback-llm-codex-subscription.d.ts +79 -0
  326. package/dist/fallback-llm-codex-subscription.js +22 -0
  327. package/dist/fallback-llm-codex-subscription.js.map +1 -0
  328. package/dist/fallback-llm.d.ts +5 -1
  329. package/dist/fallback-llm.js +4 -2
  330. package/dist/{first-start-migration-GZ45G5FS.js → first-start-migration-ZWMV5CX4.js} +6 -6
  331. package/dist/{generic-recall-paths-DJBADojG.d.ts → generic-recall-paths-BcySh_f9.d.ts} +1 -1
  332. package/dist/graph-append-error.d.ts +2 -1
  333. package/dist/graph-dashboard-diff.d.ts +2 -1
  334. package/dist/graph-dashboard-key.d.ts +2 -1
  335. package/dist/graph-dashboard-parser.d.ts +2 -1
  336. package/dist/{graph-edge-decay-ROSUPDX3.js → graph-edge-decay-MKIRZ762.js} +5 -5
  337. package/dist/graph-edge-decay-MKIRZ762.js.map +1 -0
  338. package/dist/graph-edge-reinforcement.d.ts +2 -1
  339. package/dist/graph-jsonl.d.ts +2 -1
  340. package/dist/graph-jsonl.js +3 -3
  341. package/dist/graph-path-reconstruction.d.ts +2 -1
  342. package/dist/graph-path-scoring.d.ts +2 -1
  343. package/dist/graph-snapshot.d.ts +2 -1
  344. package/dist/graph-snapshot.js +3 -3
  345. package/dist/graph.d.ts +2 -1
  346. package/dist/graph.js +2 -2
  347. package/dist/harmonic-retrieval.js +3 -3
  348. package/dist/importance.d.ts +2 -1
  349. package/dist/importers/index.d.ts +2 -1
  350. package/dist/importers/test-utils.d.ts +2 -1
  351. package/dist/in-flight-reads.d.ts +2 -1
  352. package/dist/{index-Bsy8ygLL.d.ts → index-DWOb4wz9.d.ts} +2 -2
  353. package/dist/index.d.ts +713 -705
  354. package/dist/index.js +419 -346
  355. package/dist/intent.d.ts +2 -1
  356. package/dist/lcm/engine.d.ts +2 -1
  357. package/dist/lcm/engine.js +4 -4
  358. package/dist/lcm/index.d.ts +2 -1
  359. package/dist/lcm/index.js +12 -12
  360. package/dist/lcm/tools.d.ts +2 -1
  361. package/dist/lifecycle.d.ts +2 -1
  362. package/dist/live-connectors-runner.d.ts +2 -1
  363. package/dist/local-llm-config.d.ts +7 -1
  364. package/dist/local-llm-config.js +12 -0
  365. package/dist/local-llm.d.ts +2 -1
  366. package/dist/local-model-endpoint.d.ts +2 -1
  367. package/dist/location/index.d.ts +4 -3
  368. package/dist/location/index.js +60 -59
  369. package/dist/maintenance/memory-governance.d.ts +2 -1
  370. package/dist/maintenance/memory-governance.js +26 -25
  371. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
  372. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +27 -26
  373. package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
  374. package/dist/maintenance/rebuild-memory-projection.js +28 -27
  375. package/dist/{maintenance-DItyBwTC.d.ts → maintenance-CW9wCzMP.d.ts} +3 -3
  376. package/dist/mcp-memory-inspector-app.d.ts +14 -12
  377. package/dist/memory-action-policy.d.ts +2 -1
  378. package/dist/memory-cache.d.ts +2 -1
  379. package/dist/memory-controller.d.ts +2 -1
  380. package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
  381. package/dist/memory-projection-store.d.ts +2 -1
  382. package/dist/memory-provenance.d.ts +2 -1
  383. package/dist/memory-snapshot.d.ts +2 -1
  384. package/dist/memory-subject-cli.d.ts +14 -12
  385. package/dist/memory-subject.d.ts +14 -12
  386. package/dist/memory-worth-outcomes.d.ts +3 -2
  387. package/dist/models-json.d.ts +2 -1
  388. package/dist/namespaces/migrate.d.ts +4 -3
  389. package/dist/namespaces/migrate.js +27 -26
  390. package/dist/namespaces/principal.d.ts +2 -1
  391. package/dist/namespaces/search.d.ts +2 -1
  392. package/dist/namespaces/search.js +6 -6
  393. package/dist/namespaces/storage.d.ts +4 -3
  394. package/dist/namespaces/storage.js +26 -25
  395. package/dist/native-knowledge.d.ts +2 -1
  396. package/dist/offline-sync-impression-drain.d.ts +2 -1
  397. package/dist/offline-sync-impression-drain.js +4 -4
  398. package/dist/operator-doctor-corpus.d.ts +2 -1
  399. package/dist/operator-doctor-corpus.js +30 -29
  400. package/dist/operator-doctor-replica.d.ts +2 -1
  401. package/dist/operator-toolkit.d.ts +4 -3
  402. package/dist/operator-toolkit.js +53 -49
  403. package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
  404. package/dist/orchestration/maintenance.d.ts +5 -4
  405. package/dist/orchestration/maintenance.js +39 -38
  406. package/dist/{orchestrator-DBUX-aAM.d.ts → orchestrator-ComHLm49.d.ts} +22 -11
  407. package/dist/orchestrator.d.ts +12 -10
  408. package/dist/orchestrator.js +224 -218
  409. package/dist/patterns-cli.d.ts +2 -1
  410. package/dist/{pipeline-BqgcOk1Z.d.ts → pipeline-CiYcqqhl.d.ts} +1 -1
  411. package/dist/policy-runtime.d.ts +2 -1
  412. package/dist/proactive-contention.d.ts +2 -1
  413. package/dist/provenance.d.ts +2 -1
  414. package/dist/provenance.js +2 -2
  415. package/dist/{public-http-CqtZ5kv3.d.ts → public-http-CuK4_Cb1.d.ts} +1 -1
  416. package/dist/qmd-preflight.d.ts +3 -2
  417. package/dist/{qmd-BD0ikV_Y.d.ts → qmd-qXD4vatU.d.ts} +1 -1
  418. package/dist/qmd-recall-cache.d.ts +2 -1
  419. package/dist/qmd.d.ts +3 -2
  420. package/dist/recall-concurrency-config.d.ts +2 -1
  421. package/dist/recall-disclosure-escalation.d.ts +2 -1
  422. package/dist/recall-explain-renderer.d.ts +2 -1
  423. package/dist/recall-explain-renderer.js +3 -3
  424. package/dist/recall-memory-map.d.ts +2 -1
  425. package/dist/recall-navigate-access.d.ts +2 -1
  426. package/dist/recall-navigate-access.js +2 -2
  427. package/dist/recall-navigate-disclosure.d.ts +2 -1
  428. package/dist/recall-navigate-disclosure.js +1 -1
  429. package/dist/recall-navigate.d.ts +2 -1
  430. package/dist/recall-navigate.js +2 -2
  431. package/dist/recall-planner-llm.d.ts +3 -1
  432. package/dist/recall-planner-llm.js +4 -2
  433. package/dist/recall-planner-llm.js.map +1 -1
  434. package/dist/recall-state-view-admission.d.ts +3 -2
  435. package/dist/recall-state-view-admission.js +9 -9
  436. package/dist/recall-state-view-anchors.d.ts +85 -0
  437. package/dist/recall-state-view-anchors.js +21 -0
  438. package/dist/recall-state-view-anchors.js.map +1 -0
  439. package/dist/recall-state-view-inject.js +2 -2
  440. package/dist/recall-state-view-render.js +2 -2
  441. package/dist/recall-state-view-widen.js +2 -2
  442. package/dist/recall-state-view-wire.js +3 -3
  443. package/dist/recall-state-view.d.ts +37 -1
  444. package/dist/recall-state-view.js +11 -3
  445. package/dist/recall-state.d.ts +2 -1
  446. package/dist/recall-tag-filter.d.ts +2 -1
  447. package/dist/recall-timings.d.ts +2 -1
  448. package/dist/recall-xray-cli.d.ts +2 -1
  449. package/dist/recall-xray-cli.js +4 -4
  450. package/dist/recall-xray-renderer.d.ts +2 -1
  451. package/dist/recall-xray-renderer.js +3 -3
  452. package/dist/recall-xray.d.ts +2 -1
  453. package/dist/recall-xray.js +2 -2
  454. package/dist/reconcile/cursor.d.ts +2 -1
  455. package/dist/reconcile/cursor.js +2 -2
  456. package/dist/reconcile/manifest.d.ts +2 -1
  457. package/dist/reconcile/manifest.js +4 -4
  458. package/dist/reconcile/plan.d.ts +2 -1
  459. package/dist/reconcile/plan.js +2 -2
  460. package/dist/replay/normalizers/chatgpt.d.ts +2 -1
  461. package/dist/replay/normalizers/claude.d.ts +2 -1
  462. package/dist/replay/normalizers/openclaw.d.ts +2 -1
  463. package/dist/replay/normalizers/shared.d.ts +2 -1
  464. package/dist/replay/runner.d.ts +2 -1
  465. package/dist/replay/types.d.ts +2 -1
  466. package/dist/replica-divergence.d.ts +2 -1
  467. package/dist/replica-peers-config.d.ts +2 -1
  468. package/dist/{resolution-OHJZG45O.js → resolution-4GG3QZRJ.js} +8 -8
  469. package/dist/resolution-4GG3QZRJ.js.map +1 -0
  470. package/dist/resolve-auth-token.d.ts +2 -1
  471. package/dist/resume-bundles.js +19 -16
  472. package/dist/retrieval-agents.d.ts +3 -2
  473. package/dist/retrieval-tiers.d.ts +2 -1
  474. package/dist/routing/engine.d.ts +2 -1
  475. package/dist/routing/store.d.ts +2 -1
  476. package/dist/salvage-envelope.d.ts +2 -1
  477. package/dist/salvage-envelope.js +2 -2
  478. package/dist/schemas.d.ts +160 -160
  479. package/dist/{scope-profiles-BIJMsd0B.d.ts → scope-profiles-BT9rqC3w.d.ts} +1 -1
  480. package/dist/search/embed-helper.d.ts +2 -1
  481. package/dist/search/factory.d.ts +2 -1
  482. package/dist/search/factory.js +5 -5
  483. package/dist/search/index.d.ts +2 -1
  484. package/dist/search/index.js +13 -13
  485. package/dist/search/lancedb-backend.d.ts +2 -1
  486. package/dist/search/meilisearch-backend.d.ts +2 -1
  487. package/dist/search/noop-backend.d.ts +2 -1
  488. package/dist/search/orama-backend.d.ts +2 -1
  489. package/dist/search/port.d.ts +2 -1
  490. package/dist/search/remote-backend.d.ts +2 -1
  491. package/dist/{semantic-consolidation-D7sJocll.d.ts → semantic-consolidation-CmZi7thY.d.ts} +1 -1
  492. package/dist/semantic-consolidation.d.ts +3 -2
  493. package/dist/semantic-consolidation.js +27 -26
  494. package/dist/semantic-rule-promotion.js +26 -25
  495. package/dist/semantic-rule-verifier.d.ts +2 -1
  496. package/dist/semantic-rule-verifier.js +26 -25
  497. package/dist/{service-fwgEngUj.d.ts → service-CLkA7AQB.d.ts} +2 -2
  498. package/dist/session-observer-bands.d.ts +2 -1
  499. package/dist/session-observer-state.d.ts +2 -1
  500. package/dist/shared-context/manager.d.ts +8 -7
  501. package/dist/signal.d.ts +2 -1
  502. package/dist/source-agent-qualifier.d.ts +2 -1
  503. package/dist/source-agent-qualifier.js +41 -40
  504. package/dist/standup/build.js +27 -26
  505. package/dist/{storage-Cbll3-Tk.d.ts → storage-wvX01lht.d.ts} +1 -1
  506. package/dist/storage.d.ts +3 -2
  507. package/dist/storage.js +25 -24
  508. package/dist/subject-config.d.ts +2 -1
  509. package/dist/subject-config.js +2 -2
  510. package/dist/summarizer.d.ts +2 -1
  511. package/dist/summarizer.js +6 -3
  512. package/dist/summary-snapshot.d.ts +2 -1
  513. package/dist/support-passport/index.d.ts +17 -15
  514. package/dist/support-passport/index.js +92 -89
  515. package/dist/temporal-supersession.d.ts +3 -2
  516. package/dist/temporal-timeline-recall.d.ts +2 -1
  517. package/dist/temporal-validity.d.ts +2 -1
  518. package/dist/threading.d.ts +2 -1
  519. package/dist/tier-migration.d.ts +3 -2
  520. package/dist/tier-routing.d.ts +2 -1
  521. package/dist/tier-routing.js +3 -3
  522. package/dist/{tier-stats-VK5PCO2L.js → tier-stats-LUSUUNU6.js} +4 -4
  523. package/dist/topics.d.ts +2 -1
  524. package/dist/transcript.d.ts +2 -1
  525. package/dist/transfer/backup.js +2 -2
  526. package/dist/transfer/capsule-export.js +2 -2
  527. package/dist/transfer/capsule-import.js +3 -3
  528. package/dist/transfer/export-okf.d.ts +2 -1
  529. package/dist/transfer/export-okf.js +26 -25
  530. package/dist/transfer/types.d.ts +78 -78
  531. package/dist/trust-score-stage.d.ts +2 -1
  532. package/dist/trust-score.d.ts +2 -1
  533. package/dist/{types-48sPkWB0.d.ts → types-Cyr32ABj.d.ts} +3 -1
  534. package/dist/types.d.ts +2 -1
  535. package/dist/types.js +1 -1
  536. package/dist/utility-runtime.d.ts +2 -1
  537. package/dist/verified-recall.js +26 -25
  538. package/dist/who-knows-cli.d.ts +14 -12
  539. package/dist/who-knows-cli.js +27 -26
  540. package/dist/who-knows.d.ts +14 -12
  541. package/dist/who-knows.js +26 -25
  542. package/dist/write-envelope.d.ts +7 -1
  543. package/dist/write-envelope.js +1 -1
  544. package/package.json +2 -2
  545. package/src/access-boundary.ts +21 -6
  546. package/src/access-category-alias.test.ts +488 -51
  547. package/src/access-http.test.ts +249 -0
  548. package/src/access-http.ts +2 -0
  549. package/src/access-mcp.test.ts +2 -2
  550. package/src/access-observe-write-category.ts +25 -0
  551. package/src/access-observe-write-surface.ts +58 -57
  552. package/src/access-operations-batch.ts +28 -2
  553. package/src/access-operations.ts +6 -4
  554. package/src/access-schema.ts +106 -50
  555. package/src/access-service.ts +23 -9
  556. package/src/background-generation-config.ts +79 -0
  557. package/src/background-generation.test.ts +123 -0
  558. package/src/background-generation.ts +52 -0
  559. package/src/cli-fallback.ts +8 -2
  560. package/src/config.test.ts +172 -0
  561. package/src/config.ts +2 -43
  562. package/src/fallback-llm-codex-subscription.ts +168 -0
  563. package/src/fallback-llm.test.ts +46 -0
  564. package/src/fallback-llm.ts +60 -48
  565. package/src/index.ts +2 -16
  566. package/src/local-llm-config.ts +84 -0
  567. package/src/orchestration/recall-internal.ts +91 -74
  568. package/src/orchestration/recall-rerank-coordinator.ts +41 -4
  569. package/src/orchestration/recall-search-pipeline.ts +25 -18
  570. package/src/orchestration/recall-state-view-pipeline.test.ts +89 -0
  571. package/src/providers/codex-subscription.test.ts +804 -1
  572. package/src/providers/codex-subscription.ts +407 -65
  573. package/src/recall-rerank-coordinator.test.ts +153 -0
  574. package/src/recall-state-view-anchors.ts +163 -0
  575. package/src/recall-state-view-widen.ts +21 -7
  576. package/src/recall-state-view-zero-diff.test.ts +30 -0
  577. package/src/recall-state-view.test.ts +161 -0
  578. package/src/recall-state-view.ts +206 -35
  579. package/src/summarizer.ts +25 -0
  580. package/src/trust-score-recall-paths.test.ts +1 -1
  581. package/src/types.ts +3 -2
  582. package/src/write-envelope.ts +5 -0
  583. package/dist/chunk-255PC37A.js +0 -120
  584. package/dist/chunk-255PC37A.js.map +0 -1
  585. package/dist/chunk-3IXB77DA.js.map +0 -1
  586. package/dist/chunk-65RENJGB.js.map +0 -1
  587. package/dist/chunk-7MJBKZPU.js.map +0 -1
  588. package/dist/chunk-D2DIYEFW.js.map +0 -1
  589. package/dist/chunk-DOKKRZPH.js.map +0 -1
  590. package/dist/chunk-JLXWRQNR.js.map +0 -1
  591. package/dist/chunk-JR6PP7UM.js.map +0 -1
  592. package/dist/chunk-LSLCFCCQ.js.map +0 -1
  593. package/dist/chunk-OTPXEE6W.js.map +0 -1
  594. package/dist/chunk-RN3MVLW3.js.map +0 -1
  595. package/dist/chunk-SROIT6QY.js.map +0 -1
  596. package/dist/chunk-VELCIWJZ.js.map +0 -1
  597. package/dist/chunk-YEN4TREG.js.map +0 -1
  598. /package/dist/{capsule-crypto-YO5QJ6L3.js.map → access-observe-write-category.js.map} +0 -0
  599. /package/dist/{contradiction-scan-GVD4JJ7B.js.map → background-generation-config.js.map} +0 -0
  600. /package/dist/{graph-edge-decay-ROSUPDX3.js.map → background-generation.js.map} +0 -0
  601. /package/dist/{resolution-OHJZG45O.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
  602. /package/dist/{capsule-merge-ZCXUPLNJ.js.map → capsule-merge-IPG4IOFP.js.map} +0 -0
  603. /package/dist/{chunk-YHU5XUF4.js.map → chunk-27MKMTBY.js.map} +0 -0
  604. /package/dist/{chunk-TK4FHQRN.js.map → chunk-2J3V5QEO.js.map} +0 -0
  605. /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
  606. /package/dist/{chunk-TFRDUD3M.js.map → chunk-2ZTDRNCS.js.map} +0 -0
  607. /package/dist/{chunk-PWPIERBM.js.map → chunk-37CAEC7E.js.map} +0 -0
  608. /package/dist/{chunk-X7BCM2NA.js.map → chunk-3EKVN2OP.js.map} +0 -0
  609. /package/dist/{chunk-S2ULTQZR.js.map → chunk-3N3PBBEH.js.map} +0 -0
  610. /package/dist/{chunk-XCF3SFHD.js.map → chunk-3NPNBVFR.js.map} +0 -0
  611. /package/dist/{chunk-JO5TQAKW.js.map → chunk-4BCHFSC7.js.map} +0 -0
  612. /package/dist/{chunk-Q6D7EUSQ.js.map → chunk-4JVQRFZD.js.map} +0 -0
  613. /package/dist/{chunk-YEDVOYL2.js.map → chunk-4RX5O34R.js.map} +0 -0
  614. /package/dist/{chunk-JMPYZJQN.js.map → chunk-4RZLTZVM.js.map} +0 -0
  615. /package/dist/{chunk-Q7JK6YEB.js.map → chunk-54NX5EG4.js.map} +0 -0
  616. /package/dist/{chunk-GWK7FEUL.js.map → chunk-5FAGCOZD.js.map} +0 -0
  617. /package/dist/{chunk-2PUE5P7C.js.map → chunk-5N4MZLEH.js.map} +0 -0
  618. /package/dist/{chunk-B2YKTE7P.js.map → chunk-5SPCMAUC.js.map} +0 -0
  619. /package/dist/{chunk-3OHISDDW.js.map → chunk-5U7K4W6K.js.map} +0 -0
  620. /package/dist/{chunk-CYEMS2PG.js.map → chunk-5YCNDC3C.js.map} +0 -0
  621. /package/dist/{chunk-PAAJWQH5.js.map → chunk-62D2PAAM.js.map} +0 -0
  622. /package/dist/{chunk-52II7PB6.js.map → chunk-645WOU5I.js.map} +0 -0
  623. /package/dist/{chunk-326KUXIR.js.map → chunk-6EHM2AV7.js.map} +0 -0
  624. /package/dist/{chunk-YM7YN37H.js.map → chunk-6ET2VII7.js.map} +0 -0
  625. /package/dist/{chunk-A2YQL2FF.js.map → chunk-6P4REYKL.js.map} +0 -0
  626. /package/dist/{chunk-7RKBPXY6.js.map → chunk-6YAIN5XJ.js.map} +0 -0
  627. /package/dist/{chunk-2L5FSNPC.js.map → chunk-A7GQBJP5.js.map} +0 -0
  628. /package/dist/{chunk-UYVXIY6C.js.map → chunk-AAZEKXUP.js.map} +0 -0
  629. /package/dist/{chunk-IQZ6ISFX.js.map → chunk-AECJY3GJ.js.map} +0 -0
  630. /package/dist/{chunk-76DRU7C4.js.map → chunk-AENM6GKU.js.map} +0 -0
  631. /package/dist/{chunk-KTRXQQFN.js.map → chunk-B36GUU6T.js.map} +0 -0
  632. /package/dist/{chunk-TLHNF6GA.js.map → chunk-BV4ZKIZH.js.map} +0 -0
  633. /package/dist/{chunk-ZWEZXVYH.js.map → chunk-CEO4DONG.js.map} +0 -0
  634. /package/dist/{chunk-ZEPVWLCN.js.map → chunk-CZTPU65V.js.map} +0 -0
  635. /package/dist/{chunk-TRU6JBOI.js.map → chunk-D545Z7UH.js.map} +0 -0
  636. /package/dist/{chunk-6E5GYDIE.js.map → chunk-DGS34QSY.js.map} +0 -0
  637. /package/dist/{chunk-6Z3WW2MW.js.map → chunk-ENBPQEVU.js.map} +0 -0
  638. /package/dist/{chunk-PNEDMJ53.js.map → chunk-F4EHXVP7.js.map} +0 -0
  639. /package/dist/{chunk-JPKZTCWZ.js.map → chunk-FNHLI2RE.js.map} +0 -0
  640. /package/dist/{chunk-M3MYMWXG.js.map → chunk-FXHOZGSE.js.map} +0 -0
  641. /package/dist/{chunk-SAKA6PPL.js.map → chunk-GAS7KYC7.js.map} +0 -0
  642. /package/dist/{chunk-2AR5JFD7.js.map → chunk-GG5FHZJJ.js.map} +0 -0
  643. /package/dist/{chunk-WS3WNLST.js.map → chunk-GI4ZBWPQ.js.map} +0 -0
  644. /package/dist/{chunk-JYR4LH76.js.map → chunk-GMIQV6DD.js.map} +0 -0
  645. /package/dist/{chunk-WIKO4SCR.js.map → chunk-H3TKENU4.js.map} +0 -0
  646. /package/dist/{chunk-ZLN7AROH.js.map → chunk-HIP6DKJJ.js.map} +0 -0
  647. /package/dist/{chunk-SF6RFI5Z.js.map → chunk-HWLIMQE2.js.map} +0 -0
  648. /package/dist/{chunk-JZYECQWN.js.map → chunk-IL6ODG6M.js.map} +0 -0
  649. /package/dist/{chunk-GNR6YEWZ.js.map → chunk-IQEJIOEU.js.map} +0 -0
  650. /package/dist/{chunk-BICNRVEC.js.map → chunk-IWO6QXWJ.js.map} +0 -0
  651. /package/dist/{chunk-42DJ235G.js.map → chunk-J272ODKJ.js.map} +0 -0
  652. /package/dist/{chunk-R3TLVTWW.js.map → chunk-JDX2OA4R.js.map} +0 -0
  653. /package/dist/{chunk-G5MO3VQA.js.map → chunk-JKKII6GX.js.map} +0 -0
  654. /package/dist/{chunk-L5OXE4PX.js.map → chunk-JTQR6L2N.js.map} +0 -0
  655. /package/dist/{chunk-VDX2J7OX.js.map → chunk-KQAFEZQX.js.map} +0 -0
  656. /package/dist/{chunk-AKE4GGQ3.js.map → chunk-KQW3YGEN.js.map} +0 -0
  657. /package/dist/{chunk-LMMQKZK3.js.map → chunk-L63GFNKL.js.map} +0 -0
  658. /package/dist/{chunk-BRZWWUCJ.js.map → chunk-LMLGBG6H.js.map} +0 -0
  659. /package/dist/{chunk-CQ7SSBO4.js.map → chunk-M6HBPLBA.js.map} +0 -0
  660. /package/dist/{chunk-3YMDY3ZF.js.map → chunk-MUTVRKKY.js.map} +0 -0
  661. /package/dist/{chunk-FCFAYMTU.js.map → chunk-NXGSONWM.js.map} +0 -0
  662. /package/dist/{chunk-4WGAMREC.js.map → chunk-O4M4BDIJ.js.map} +0 -0
  663. /package/dist/{chunk-5SYI2F47.js.map → chunk-O76F5QPP.js.map} +0 -0
  664. /package/dist/{chunk-57GDHV2D.js.map → chunk-PCOVEDPK.js.map} +0 -0
  665. /package/dist/{chunk-PPTOAHTZ.js.map → chunk-PGAB2V53.js.map} +0 -0
  666. /package/dist/{chunk-HHDTBYDJ.js.map → chunk-Q432REND.js.map} +0 -0
  667. /package/dist/{chunk-XAITGGX5.js.map → chunk-Q4AUIFUA.js.map} +0 -0
  668. /package/dist/{chunk-5LLQAUMI.js.map → chunk-Q7CLGFA7.js.map} +0 -0
  669. /package/dist/{chunk-KUK56OPR.js.map → chunk-QHT7MOUF.js.map} +0 -0
  670. /package/dist/{chunk-W6IJMWTZ.js.map → chunk-QTQ6XKGT.js.map} +0 -0
  671. /package/dist/{chunk-FLLORID2.js.map → chunk-RLJHJQUY.js.map} +0 -0
  672. /package/dist/{chunk-353KGBKY.js.map → chunk-RW4QNB4J.js.map} +0 -0
  673. /package/dist/{chunk-GWQVMKUJ.js.map → chunk-SCXURCVT.js.map} +0 -0
  674. /package/dist/{chunk-FQXJAC3T.js.map → chunk-SGUDMW2K.js.map} +0 -0
  675. /package/dist/{chunk-LSDEIZ76.js.map → chunk-TA4C3XB7.js.map} +0 -0
  676. /package/dist/{chunk-YIZ2EUUL.js.map → chunk-TNZNSMVJ.js.map} +0 -0
  677. /package/dist/{chunk-CIYUWSMZ.js.map → chunk-TRLOFIQC.js.map} +0 -0
  678. /package/dist/{chunk-TL7NLM2L.js.map → chunk-TSP5WH72.js.map} +0 -0
  679. /package/dist/{chunk-3K6UFW5B.js.map → chunk-UHRZ324M.js.map} +0 -0
  680. /package/dist/{chunk-A5UQ52YQ.js.map → chunk-UZZ7SQT3.js.map} +0 -0
  681. /package/dist/{chunk-GHX5PNXW.js.map → chunk-VBSNUH4J.js.map} +0 -0
  682. /package/dist/{chunk-MR6LQVZ5.js.map → chunk-VJIE4D2I.js.map} +0 -0
  683. /package/dist/{chunk-2JGGZICG.js.map → chunk-WBM2MVBK.js.map} +0 -0
  684. /package/dist/{chunk-CD3C4BJN.js.map → chunk-WIWLX65T.js.map} +0 -0
  685. /package/dist/{chunk-GDDSXVWR.js.map → chunk-X4TD4O2F.js.map} +0 -0
  686. /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
  687. /package/dist/{chunk-FPQDZCUX.js.map → chunk-XH3HGI2N.js.map} +0 -0
  688. /package/dist/{chunk-C6KRO3SU.js.map → chunk-XVDZFTN5.js.map} +0 -0
  689. /package/dist/{chunk-3SL52JKD.js.map → chunk-XVZA6VXC.js.map} +0 -0
  690. /package/dist/{chunk-BLHX5FQW.js.map → chunk-YUW66UAH.js.map} +0 -0
  691. /package/dist/{chunk-DOQLHCSS.js.map → chunk-ZBW7A667.js.map} +0 -0
  692. /package/dist/{chunk-4DPDIOVA.js.map → chunk-ZEGL7YCC.js.map} +0 -0
  693. /package/dist/{chunk-VVX5PZFS.js.map → chunk-ZHXSOMYH.js.map} +0 -0
  694. /package/dist/{chunk-GCBIXUPT.js.map → chunk-ZMWSYUUL.js.map} +0 -0
  695. /package/dist/{chunk-X2QPKLPL.js.map → chunk-ZZUVBZL2.js.map} +0 -0
  696. /package/dist/{first-start-migration-GZ45G5FS.js.map → first-start-migration-ZWMV5CX4.js.map} +0 -0
  697. /package/dist/{tier-stats-VK5PCO2L.js.map → tier-stats-LUSUUNU6.js.map} +0 -0
@@ -15,7 +15,7 @@
15
15
  * benchmark runner has claimed it first.
16
16
  */
17
17
 
18
- import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
18
+ import { mkdir, mkdtemp, readFile, rm, stat } from "node:fs/promises";
19
19
  import os from "node:os";
20
20
  import path from "node:path";
21
21
 
@@ -26,7 +26,7 @@ import type {
26
26
  CodexCliFallbackResult,
27
27
  CodexCliFallbackRunner,
28
28
  } from "../cli-fallback.js";
29
- import { isCodexCliFallbackRunnerRegistered, normalizeCodexCliTimeoutMs, setCodexCliFallbackRunnerForProcess } from "../cli-fallback.js";
29
+ import { getCodexCliFallbackRunnerForProcess, isCodexCliFallbackRunnerRegistered, normalizeCodexCliTimeoutMs, setCodexCliFallbackRunnerForProcess } from "../cli-fallback.js";
30
30
  import { log } from "../logger.js";
31
31
  import { launchProcess } from "../runtime/child-process.js";
32
32
  import type { CodexCliReasoningEffort, ModelProviderConfig } from "../types.js";
@@ -43,6 +43,12 @@ const LOGIN_STATUS_TIMEOUT_MS = 10_000;
43
43
  const LOGIN_STATUS_CACHE_TTL_MS = 10 * 60_000;
44
44
  const STDIO_LIMIT = 64_000;
45
45
  const OUTPUT_SUMMARY_LIMIT = 500;
46
+ /**
47
+ * Env keys whose value is a filesystem path. Relative values resolve against
48
+ * the original process cwd before either child launches, because the exec
49
+ * child runs with cwd = the ephemeral workspace (same rule as executables).
50
+ */
51
+ const PATH_BEARING_ENV_KEYS: Readonly<Record<string, true>> = Object.freeze({ CODEX_HOME: true, HOME: true, USERPROFILE: true });
46
52
 
47
53
  /**
48
54
  * Environment keys forwarded to the codex child. Everything else — including
@@ -171,11 +177,13 @@ export interface CodexSubscriptionRunnerDeps {
171
177
  /** Runs `codex exec`. Default: isolated subprocess via launchProcess. */
172
178
  runCodexExec?: (request: CodexSubscriptionExecRequest) => Promise<CodexSubscriptionExecResult>;
173
179
  /** Runs `codex login status`. Default: isolated subprocess. Receives the
174
- * login-status timeout budget (capped by the request deadline). */
180
+ * login-status timeout budget (capped by the request deadline) and the
181
+ * shared-check abort signal (fires when the last waiter leaves). */
175
182
  runLoginStatus?: (
176
183
  executable: string,
177
184
  env: NodeJS.ProcessEnv,
178
- timeoutMs: number
185
+ timeoutMs: number,
186
+ signal?: AbortSignal
179
187
  ) => Promise<{ status: number | null; stdout: string; stderr: string }>;
180
188
  /** Environment the isolated child env is filtered from. Tests inject fakes. */
181
189
  env?: NodeJS.ProcessEnv;
@@ -190,12 +198,70 @@ interface CommandOutput {
190
198
  stderr: string;
191
199
  }
192
200
 
193
- const loginStatusCache = new Map<string, { at: number; promise: Promise<void> }>();
201
+ interface LoginStatusCacheEntry {
202
+ at: number;
203
+ promise: Promise<void>;
204
+ /** Auth-store fingerprint at check time; a mismatch invalidates the entry. */
205
+ fingerprint: string | null;
206
+ /** Live waiters. The in-flight check aborts when the last waiter leaves. */
207
+ waiters: number;
208
+ settled: boolean;
209
+ controller: AbortController;
210
+ }
211
+
212
+ const loginStatusCache = new Map<string, LoginStatusCacheEntry>();
213
+ const childrenByRunner = new WeakMap<CodexCliFallbackRunner, Set<number>>();
214
+ const runnerByOwner = new WeakMap<object, CodexCliFallbackRunner>();
215
+ const shutdownByRunner = new WeakMap<CodexCliFallbackRunner, AbortController>();
216
+ let defaultRegisteredRunner: CodexCliFallbackRunner | undefined;
194
217
  let coreRunnerRegistered = false;
195
218
 
196
219
  export function createCodexSubscriptionRunner(deps: CodexSubscriptionRunnerDeps = {}): CodexCliFallbackRunner {
197
220
  const envSource = deps.env ?? process.env;
198
- return (request) => runCodexSubscriptionRequest(request, deps, envSource);
221
+ const children = new Set<number>();
222
+ const shutdown = new AbortController();
223
+ const runnerDeps: CodexSubscriptionRunnerDeps = {
224
+ ...deps,
225
+ runCodexExec: deps.runCodexExec ?? ((request) => runCodexExecSubprocess(request, children)),
226
+ runLoginStatus:
227
+ deps.runLoginStatus ??
228
+ ((executable, env, timeoutMs, signal) =>
229
+ runLoginStatusSubprocess(executable, env, timeoutMs, signal, children)),
230
+ };
231
+ const runner: CodexCliFallbackRunner = (request) => {
232
+ const signal = request.options.signal
233
+ ? AbortSignal.any([request.options.signal, shutdown.signal])
234
+ : shutdown.signal;
235
+ if (signal.aborted) {
236
+ return Promise.reject(abortErrorOf(signal));
237
+ }
238
+ return runCodexSubscriptionRequest(
239
+ { ...request, options: { ...request.options, signal } },
240
+ runnerDeps,
241
+ envSource,
242
+ );
243
+ };
244
+ childrenByRunner.set(runner, children);
245
+ shutdownByRunner.set(runner, shutdown);
246
+ return runner;
247
+ }
248
+
249
+ /** One runner per owning runtime/config object so teardown cannot cross instances. */
250
+ export function getCodexSubscriptionRunnerForOwner(owner: object): CodexCliFallbackRunner {
251
+ let runner = runnerByOwner.get(owner);
252
+ const shutdown = runner ? shutdownByRunner.get(runner) : undefined;
253
+ if (!runner || shutdown?.signal.aborted) {
254
+ runner = createCodexSubscriptionRunner();
255
+ runnerByOwner.set(owner, runner);
256
+ }
257
+ return runner;
258
+ }
259
+
260
+ /** Shutdown signal for the owning runner, if this function is a core runner. */
261
+ export function getCodexSubscriptionShutdownSignal(
262
+ runner: CodexCliFallbackRunner,
263
+ ): AbortSignal | undefined {
264
+ return shutdownByRunner.get(runner)?.signal;
199
265
  }
200
266
 
201
267
  /**
@@ -207,11 +273,51 @@ export function createCodexSubscriptionRunner(deps: CodexSubscriptionRunnerDeps
207
273
  */
208
274
  export function ensureCodexSubscriptionRunnerRegistered(deps: CodexSubscriptionRunnerDeps = {}): boolean {
209
275
  if (isCodexCliFallbackRunnerRegistered()) return false;
210
- setCodexCliFallbackRunnerForProcess(createCodexSubscriptionRunner(deps));
276
+ defaultRegisteredRunner = createCodexSubscriptionRunner(deps);
277
+ setCodexCliFallbackRunnerForProcess(defaultRegisteredRunner);
211
278
  coreRunnerRegistered = true;
212
279
  return true;
213
280
  }
214
281
 
282
+ /** True when the process seam still holds the core default runner. */
283
+ export function isDefaultRegisteredCodexSubscriptionRunner(): boolean {
284
+ return defaultRegisteredRunner !== undefined
285
+ && getCodexCliFallbackRunnerForProcess() === defaultRegisteredRunner;
286
+ }
287
+
288
+ /** Host shutdown hook: terminate this runtime's detached Codex children. Does not exit. */
289
+ export function terminateActiveCodexSubscriptionChildren(
290
+ signal: NodeJS.Signals = "SIGTERM",
291
+ runner?: CodexCliFallbackRunner,
292
+ ): void {
293
+ const target = runner ?? defaultRegisteredRunner;
294
+ if (!target) return;
295
+ const shutdown = shutdownByRunner.get(target);
296
+ if (shutdown && !shutdown.signal.aborted) {
297
+ shutdown.abort(new DOMException("The operation was aborted.", "AbortError"));
298
+ }
299
+ const pids = childrenByRunner.get(target);
300
+ if (!pids) return;
301
+ for (const pid of pids) {
302
+ terminateCodexChildPid(pid, signal);
303
+ }
304
+ }
305
+
306
+ /** SIGTERM now, SIGKILL after a bound, even if the caller later awaits drain. */
307
+ export function beginCodexSubscriptionShutdown(
308
+ runner?: CodexCliFallbackRunner,
309
+ forceKillAfterMs = 1_000,
310
+ ): () => void {
311
+ terminateActiveCodexSubscriptionChildren("SIGTERM", runner);
312
+ const timer = setTimeout(() => {
313
+ terminateActiveCodexSubscriptionChildren("SIGKILL", runner);
314
+ }, forceKillAfterMs);
315
+ timer.unref();
316
+ return () => {
317
+ clearTimeout(timer);
318
+ terminateActiveCodexSubscriptionChildren("SIGKILL", runner);
319
+ };
320
+ }
215
321
  async function runCodexSubscriptionRequest(
216
322
  request: CodexCliFallbackRequest,
217
323
  deps: CodexSubscriptionRunnerDeps,
@@ -230,7 +336,15 @@ async function runCodexSubscriptionRequest(
230
336
  // consumes the same call/provider timeout budget, it is not additive.
231
337
  const now = deps.now ?? Date.now;
232
338
  const deadlineStartedAt = now();
233
- await assertSubscriptionLogin(executable, env, deps, Math.min(LOGIN_STATUS_TIMEOUT_MS, timeoutMs));
339
+ if (request.options.signal?.aborted) {
340
+ throw abortErrorOf(request.options.signal);
341
+ }
342
+ await assertSubscriptionLogin(executable, env, deps, {
343
+ loginStatusTimeoutMs: Math.min(LOGIN_STATUS_TIMEOUT_MS, timeoutMs),
344
+ callerTimeoutMs: timeoutMs,
345
+ deadlineStartedAt,
346
+ signal: request.options.signal,
347
+ });
234
348
 
235
349
  if (request.options.signal?.aborted) {
236
350
  throw abortErrorOf(request.options.signal);
@@ -247,7 +361,7 @@ async function runCodexSubscriptionRequest(
247
361
  const outputPath = path.join(tempDir, "last-message.txt");
248
362
  await mkdir(workspacePath, { recursive: true });
249
363
 
250
- const runCodexExec = deps.runCodexExec ?? runCodexExecSubprocess;
364
+ const runCodexExec = deps.runCodexExec!;
251
365
  const result = await runCodexExec({
252
366
  executable,
253
367
  args: buildExecArgs(request.modelId, config, workspacePath, outputPath),
@@ -259,12 +373,19 @@ async function runCodexSubscriptionRequest(
259
373
  signal: request.options.signal,
260
374
  });
261
375
 
376
+ if (result.status !== 0) {
377
+ const failure = execFailureError(result, remainingTimeoutMs, executable, env);
378
+ if (failure instanceof CodexSubscriptionTimeoutError) {
379
+ throw failure;
380
+ }
381
+ if (request.options.signal?.aborted) {
382
+ throw abortErrorOf(request.options.signal);
383
+ }
384
+ throw failure;
385
+ }
262
386
  if (request.options.signal?.aborted) {
263
387
  throw abortErrorOf(request.options.signal);
264
388
  }
265
- if (result.status !== 0) {
266
- throw execFailureError(result, remainingTimeoutMs, executable, env);
267
- }
268
389
 
269
390
  const content = result.outputText.trim();
270
391
  if (content.length === 0) {
@@ -285,7 +406,7 @@ async function runCodexSubscriptionRequest(
285
406
  * configured apiKey is a configuration mistake — reject it without echoing
286
407
  * the value.
287
408
  */
288
- function assertNoApiKeyConfig(config: CodexCliFallbackConfig): void {
409
+ export function assertNoApiKeyConfig(config: CodexCliFallbackConfig): void {
289
410
  if (config.apiKey !== undefined && config.apiKey !== "") {
290
411
  throw new CodexSubscriptionConfigError(
291
412
  `${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.`
@@ -313,64 +434,205 @@ function buildIsolatedEnv(source: NodeJS.ProcessEnv): NodeJS.ProcessEnv {
313
434
  const env: NodeJS.ProcessEnv = {};
314
435
  for (const [key, value] of Object.entries(source)) {
315
436
  if (value !== undefined && isAllowedEnvKey(key)) {
316
- env[key] = value;
437
+ env[key] = PATH_BEARING_ENV_KEYS[key.toUpperCase()] === true
438
+ ? normalizePathEnvValue(value)
439
+ : value;
317
440
  }
318
441
  }
319
442
  return env;
320
443
  }
321
444
 
445
+ /**
446
+ * The exec child runs with cwd = the ephemeral workspace while the login
447
+ * child runs with cwd = this process, so a relative HOME/CODEX_HOME would
448
+ * resolve differently per child. Anchor both to the original process cwd.
449
+ */
450
+ function normalizePathEnvValue(value: string): string {
451
+ const trimmed = value.trim();
452
+ if (trimmed.length === 0) {
453
+ return value;
454
+ }
455
+ const expanded = expandTildePath(trimmed);
456
+ return path.isAbsolute(expanded) ? expanded : path.resolve(expanded);
457
+ }
322
458
  function isAllowedEnvKey(key: string): boolean {
323
459
  const normalized = key.toUpperCase();
324
460
  return CODEX_RUNTIME_ENV_ALLOWLIST[normalized] === true || normalized.startsWith("LC_");
325
461
  }
326
462
 
463
+ interface LoginCheckContext {
464
+ /** Budget for the login-status subprocess itself. */
465
+ loginStatusTimeoutMs: number;
466
+ /** The caller's overall effective deadline (login + exec). */
467
+ callerTimeoutMs: number;
468
+ deadlineStartedAt: number;
469
+ signal?: AbortSignal;
470
+ }
471
+
327
472
  /**
328
473
  * Verifies the operator's Codex subscription login via `codex login status`.
329
474
  * Success is cached briefly; failures are never cached so a re-login takes
330
- * effect on the next request.
475
+ * effect on the next request. A cached success is also invalidated when the
476
+ * auth store changes on disk (e.g. another process switches the same Codex
477
+ * home from a ChatGPT login to an API key), so the cache can never mask a
478
+ * later non-subscription login mode.
331
479
  */
332
480
  async function assertSubscriptionLogin(
333
481
  executable: string,
334
482
  env: NodeJS.ProcessEnv,
335
483
  deps: CodexSubscriptionRunnerDeps,
336
- loginStatusTimeoutMs: number
484
+ ctx: LoginCheckContext
337
485
  ): Promise<void> {
338
486
  const now = deps.now ?? Date.now;
339
- const cacheKey = `${executable}\0${env.CODEX_HOME ?? env.HOME ?? ""}`;
487
+ const cacheKey = `${executable}\0${resolveCodexAuthHome(env) ?? ""}`;
340
488
  const cached = loginStatusCache.get(cacheKey);
341
489
  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)) {
490
+ if (!cached.settled || (await authStoreFingerprint(env)) === cached.fingerprint) {
491
+ await waitForLoginEntry(cached, cacheKey, ctx, now);
355
492
  return;
356
493
  }
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 });
494
+ }
495
+ loginStatusCache.delete(cacheKey);
496
+ if (ctx.signal?.aborted) {
497
+ throw abortErrorOf(ctx.signal);
498
+ }
499
+ const entry: LoginStatusCacheEntry = {
500
+ at: now(),
501
+ fingerprint: null,
502
+ waiters: 0,
503
+ settled: false,
504
+ controller: new AbortController(),
505
+ promise: Promise.resolve(undefined),
506
+ };
507
+ entry.promise = runLoginStatusCheck(executable, env, deps, ctx, entry);
508
+ entry.promise.then(
509
+ () => {
510
+ entry.settled = true;
511
+ },
512
+ () => {
513
+ entry.settled = true;
514
+ if (loginStatusCache.get(cacheKey) === entry) {
515
+ loginStatusCache.delete(cacheKey);
516
+ }
517
+ }
518
+ );
519
+ loginStatusCache.set(cacheKey, entry);
520
+ await waitForLoginEntry(entry, cacheKey, ctx, now);
521
+ }
522
+
523
+ async function runLoginStatusCheck(
524
+ executable: string,
525
+ env: NodeJS.ProcessEnv,
526
+ deps: CodexSubscriptionRunnerDeps,
527
+ ctx: LoginCheckContext,
528
+ entry: LoginStatusCacheEntry
529
+ ): Promise<void> {
530
+ const runLoginStatus = deps.runLoginStatus!;
531
+ const result = await runLoginStatus(executable, env, ctx.loginStatusTimeoutMs, entry.controller.signal);
532
+ const output = `${result.stdout}\n${result.stderr}`.trim();
533
+ if (TIMEOUT_PATTERN.test(output)) {
534
+ // A login-status subprocess timeout is a deadline expiry, not an auth
535
+ // failure — never report it as "unauthenticated".
536
+ throw new CodexSubscriptionTimeoutError(ctx.loginStatusTimeoutMs);
537
+ }
538
+ if (result.status === 0 && LOGIN_OK_PATTERN.test(output)) {
539
+ entry.fingerprint = await authStoreFingerprint(env);
540
+ return;
541
+ }
542
+ const apiKeyNote = LOGIN_API_KEY_PATTERN.test(output)
543
+ ? " The CLI currently reports an API-key login; subscription extraction needs a ChatGPT login."
544
+ : "";
545
+ throw new CodexSubscriptionAuthError(
546
+ "unauthenticated",
547
+ `codex-subscription: no ChatGPT-backed Codex login found. Run \`codex login\` and choose the ChatGPT account option, then retry.${apiKeyNote}`
548
+ );
549
+ }
550
+
551
+ /**
552
+ * Waits on a shared login check with this caller's own budget. A deadline or
553
+ * caller abort rejects immediately — without cancelling the shared check
554
+ * while other callers still wait on it. When the LAST waiter leaves an
555
+ * in-flight check, the subprocess is aborted and the entry dropped so a later
556
+ * caller starts a fresh check.
557
+ */
558
+ async function waitForLoginEntry(
559
+ entry: LoginStatusCacheEntry,
560
+ cacheKey: string,
561
+ ctx: LoginCheckContext,
562
+ now: () => number
563
+ ): Promise<void> {
564
+ const remainingMs = ctx.callerTimeoutMs - (now() - ctx.deadlineStartedAt);
565
+ if (remainingMs <= 0) {
566
+ throw new CodexSubscriptionTimeoutError(ctx.callerTimeoutMs);
567
+ }
568
+ const signal = ctx.signal;
569
+ let rejectOnAbort!: (reason?: unknown) => void;
570
+ const abortWait = new Promise<never>((_resolve, reject) => {
571
+ rejectOnAbort = reject;
572
+ });
573
+ // Identity matters: the same reference is removed in the finally below.
574
+ const onAbort = (): void => {
575
+ if (signal === undefined) return;
576
+ rejectOnAbort(abortErrorOf(signal));
577
+ };
578
+ signal?.addEventListener("abort", onAbort, { once: true });
579
+ entry.waiters++;
580
+ // The deadline timer intentionally holds the event loop: this caller's
581
+ // await is backed by nothing else while the shared check is in flight.
582
+ let deadlineTimer: ReturnType<typeof setTimeout> | undefined;
366
583
  try {
367
- await promise;
584
+ await Promise.race([
585
+ entry.promise,
586
+ abortWait,
587
+ new Promise<never>((_resolve, reject) => {
588
+ deadlineTimer = setTimeout(
589
+ () => reject(new CodexSubscriptionTimeoutError(ctx.callerTimeoutMs)),
590
+ remainingMs
591
+ );
592
+ }),
593
+ ]);
368
594
  } catch (err) {
369
- loginStatusCache.delete(cacheKey);
595
+ if (signal?.aborted) {
596
+ throw abortErrorOf(signal);
597
+ }
370
598
  throw err;
599
+ } finally {
600
+ clearTimeout(deadlineTimer);
601
+ signal?.removeEventListener("abort", onAbort);
602
+ entry.waiters--;
603
+ if (entry.waiters <= 0 && !entry.settled) {
604
+ entry.controller.abort();
605
+ if (loginStatusCache.get(cacheKey) === entry) {
606
+ loginStatusCache.delete(cacheKey);
607
+ }
608
+ }
609
+ }
610
+ }
611
+
612
+ /**
613
+ * `mtimeMs:size` of the Codex auth store, read as metadata only — the
614
+ * provider never reads the store's contents. A change between the cached
615
+ * check and now invalidates the cached login mode.
616
+ */
617
+ async function authStoreFingerprint(env: NodeJS.ProcessEnv): Promise<string | null> {
618
+ const home = resolveCodexAuthHome(env);
619
+ if (!home) {
620
+ return null;
621
+ }
622
+ try {
623
+ const stats = await stat(path.join(home, "auth.json"));
624
+ return `${stats.mtimeMs}:${stats.size}`;
625
+ } catch {
626
+ return null;
371
627
  }
372
628
  }
373
629
 
630
+ function resolveCodexAuthHome(env: NodeJS.ProcessEnv): string | undefined {
631
+ if (env.CODEX_HOME) return env.CODEX_HOME;
632
+ const profile = env.HOME ?? env.USERPROFILE;
633
+ return profile ? path.join(profile, ".codex") : undefined;
634
+ }
635
+
374
636
  /**
375
637
  * Args mirror the bench provider: fully sandboxed, ephemeral, no tools/hooks/
376
638
  * plugins/memories — extraction must behave as a plain completion endpoint.
@@ -485,6 +747,12 @@ function execFailureError(
485
747
  env: NodeJS.ProcessEnv
486
748
  ): Error {
487
749
  const combined = `${result.stderr}\n${result.stdout}`;
750
+ // The authoritative timeout marker wins over auth-pattern text: a timed-out
751
+ // exec may have already printed model/diagnostic output containing 401/403
752
+ // before the deadline fired (issue #2833).
753
+ if (TIMEOUT_PATTERN.test(combined)) {
754
+ return new CodexSubscriptionTimeoutError(timeoutMs);
755
+ }
488
756
  if (AUTH_FAILURE_PATTERN.test(combined)) {
489
757
  // Re-check login on the next request; the cached status is now stale.
490
758
  loginStatusCache.delete(`${executable}\0${env.CODEX_HOME ?? env.HOME ?? ""}`);
@@ -494,9 +762,7 @@ function execFailureError(
494
762
  "(session expired or revoked). Run `codex login` again to re-authenticate, then retry."
495
763
  );
496
764
  }
497
- if (TIMEOUT_PATTERN.test(combined)) {
498
- return new CodexSubscriptionTimeoutError(timeoutMs);
499
- }
765
+
500
766
  const exitLabel = result.signal ? `signal ${result.signal}` : `exit ${result.status ?? "unknown"}`;
501
767
  return new Error(
502
768
  `codex-subscription: codex exec failed (${exitLabel}): ${summarizeOutput(result.stderr, result.stdout)}`
@@ -536,8 +802,7 @@ function usageFrom(result: CodexSubscriptionExecResult): CodexSubscriptionUsage
536
802
  },
537
803
  };
538
804
  }
539
- /** Parses `turn.completed` usage events from codex exec JSONL output.
540
- * Mirrors the bench parser (core cannot import the optional bench package). */
805
+
541
806
  export function parseCodexJsonlUsage(output: string): { inputTokens: number; outputTokens: number } | undefined {
542
807
  let usage: { inputTokens: number; outputTokens: number } | undefined;
543
808
  for (const line of output.split(/\r?\n/)) {
@@ -569,9 +834,18 @@ function readCounter(value: unknown): number | undefined {
569
834
  }
570
835
 
571
836
  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");
837
+ if (signal.reason instanceof CodexSubscriptionTimeoutError) return signal.reason;
838
+ const reason =
839
+ signal.reason instanceof Error
840
+ ? signal.reason
841
+ : signal.reason !== undefined
842
+ ? new Error(String(signal.reason))
843
+ : new DOMException("The operation was aborted.", "AbortError");
844
+ const match = /fallback LLM timed out after (\d+)ms/i.exec(reason.message);
845
+ if (match) {
846
+ return new CodexSubscriptionTimeoutError(Number(match[1]));
847
+ }
848
+ return reason;
575
849
  }
576
850
 
577
851
  /** Bounds streamed child output to STDIO_LIMIT, keeping the TAIL — codex
@@ -585,17 +859,24 @@ function appendBounded(existing: string, next: string): string {
585
859
  async function runLoginStatusSubprocess(
586
860
  executable: string,
587
861
  env: NodeJS.ProcessEnv,
588
- timeoutMs: number
862
+ timeoutMs: number,
863
+ signal: AbortSignal | undefined,
864
+ children: Set<number>,
589
865
  ): Promise<{ status: number | null; stdout: string; stderr: string }> {
590
866
  return await runSubprocess(executable, ["login", "status"], {
591
867
  env,
592
868
  stdin: undefined,
593
869
  timeoutMs,
594
870
  timeoutLabel: "login status",
871
+ signal,
872
+ children,
595
873
  });
596
874
  }
597
875
 
598
- async function runCodexExecSubprocess(request: CodexSubscriptionExecRequest): Promise<CodexSubscriptionExecResult> {
876
+ async function runCodexExecSubprocess(
877
+ request: CodexSubscriptionExecRequest,
878
+ children: Set<number>,
879
+ ): Promise<CodexSubscriptionExecResult> {
599
880
  const result = await runSubprocess(request.executable, request.args, {
600
881
  env: request.env,
601
882
  stdin: request.input,
@@ -603,7 +884,9 @@ async function runCodexExecSubprocess(request: CodexSubscriptionExecRequest): Pr
603
884
  timeoutLabel: "exec",
604
885
  signal: request.signal,
605
886
  cwd: request.workspacePath,
887
+ children,
606
888
  });
889
+ if (result.status === 124) return { ...result, outputText: "" };
607
890
  let outputText = "";
608
891
  try {
609
892
  outputText = (await readFile(request.outputPath, "utf8")).trim();
@@ -620,6 +903,7 @@ interface SubprocessOptions {
620
903
  timeoutLabel: string;
621
904
  signal?: AbortSignal;
622
905
  cwd?: string;
906
+ children: Set<number>;
623
907
  }
624
908
 
625
909
  async function runSubprocess(executable: string, args: string[], options: SubprocessOptions): Promise<CommandOutput> {
@@ -635,9 +919,11 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
635
919
  detached: process.platform !== "win32",
636
920
  windowsHide: true,
637
921
  });
922
+ registerActiveCodexChild(child.pid, options.children);
638
923
  let stdout = "";
639
924
  let stderr = "";
640
925
  let timedOut = false;
926
+ let settled = false;
641
927
  let killTimeout: ReturnType<typeof setTimeout> | undefined;
642
928
  const clearKillTimeout = (): void => {
643
929
  if (killTimeout) {
@@ -661,20 +947,47 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
661
947
  killTimeout = setTimeout(() => terminate("SIGKILL"), 1_000);
662
948
  killTimeout.unref();
663
949
  };
950
+ const finish = (fn: () => void): void => {
951
+ if (settled) return;
952
+ settled = true;
953
+ clearTimeout(timeout);
954
+ options.signal?.removeEventListener("abort", onAbort);
955
+ fn();
956
+ };
957
+ const settleTimeout = (): void => {
958
+ timedOut = true;
959
+ stderr = appendBounded(
960
+ stderr,
961
+ `\ncodex-subscription: ${options.timeoutLabel} timed out after ${options.timeoutMs}ms.`
962
+ );
963
+ finish(() => {
964
+ resolve({
965
+ status: 124,
966
+ signal: "SIGTERM",
967
+ stdout,
968
+ stderr,
969
+ });
970
+ });
971
+ };
664
972
  const onAbort = (): void => {
973
+ const reasonText =
974
+ options.signal?.reason instanceof Error
975
+ ? options.signal.reason.message
976
+ : String(options.signal?.reason ?? "");
665
977
  terminate("SIGTERM");
666
978
  scheduleForcedKill();
979
+ if (/fallback LLM timed out after \d+ms/i.test(reasonText)) {
980
+ settleTimeout();
981
+ return;
982
+ }
983
+ finish(() => reject(abortErrorOf(options.signal!)));
667
984
  };
668
985
  options.signal?.addEventListener("abort", onAbort, { once: true });
669
986
  const timeout = options.timeoutMs
670
987
  ? setTimeout(() => {
671
- timedOut = true;
672
- stderr = appendBounded(
673
- stderr,
674
- `\ncodex-subscription: ${options.timeoutLabel} timed out after ${options.timeoutMs}ms.`
675
- );
676
988
  terminate("SIGTERM");
677
989
  scheduleForcedKill();
990
+ settleTimeout();
678
991
  }, options.timeoutMs)
679
992
  : undefined;
680
993
  timeout?.unref();
@@ -689,14 +1002,9 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
689
1002
  child.stdin?.on("error", (error: NodeJS.ErrnoException) => {
690
1003
  stderr = appendBounded(stderr, `\ncodex-subscription: stdin error: ${error.code ?? error.message}`);
691
1004
  });
692
- const settle = (fn: () => void): void => {
693
- clearTimeout(timeout);
694
- clearKillTimeout();
695
- options.signal?.removeEventListener("abort", onAbort);
696
- fn();
697
- };
698
1005
  child.on("error", (error) => {
699
- settle(() => {
1006
+ unregisterActiveCodexChild(child.pid, options.children);
1007
+ finish(() => {
700
1008
  reject(
701
1009
  child.pid
702
1010
  ? new Error(`codex-subscription: codex CLI failed after start: ${safeMessage(error)}`, { cause: error })
@@ -708,9 +1016,11 @@ async function runSubprocess(executable: string, args: string[], options: Subpro
708
1016
  });
709
1017
  });
710
1018
  child.on("close", (status, signal) => {
711
- settle(() => {
1019
+ clearKillTimeout();
1020
+ unregisterActiveCodexChild(child.pid, options.children);
1021
+ finish(() => {
712
1022
  resolve({
713
- status: timedOut ? (status ?? 124) : status,
1023
+ status: timedOut ? (status === null || status === 0 ? 124 : status) : status,
714
1024
  signal: timedOut ? (signal ?? "SIGTERM") : signal,
715
1025
  stdout,
716
1026
  stderr,
@@ -732,6 +1042,10 @@ function safeMessage(error: unknown): string {
732
1042
  }
733
1043
 
734
1044
  export const __codexSubscriptionTestHooks = {
1045
+ activeCodexChildCount: (runner?: CodexCliFallbackRunner): number => {
1046
+ const target = runner ?? defaultRegisteredRunner;
1047
+ return target ? (childrenByRunner.get(target)?.size ?? 0) : 0;
1048
+ },
735
1049
  appendBounded,
736
1050
  resetLoginStatusCache: (): void => {
737
1051
  loginStatusCache.clear();
@@ -739,5 +1053,33 @@ export const __codexSubscriptionTestHooks = {
739
1053
  isCoreRunnerRegistered: (): boolean => coreRunnerRegistered,
740
1054
  resetCoreRunnerRegistered: (): void => {
741
1055
  coreRunnerRegistered = false;
1056
+ defaultRegisteredRunner = undefined;
742
1057
  },
743
1058
  };
1059
+
1060
+ function registerActiveCodexChild(pid: number | undefined, children: Set<number>): void {
1061
+ if (pid === undefined) return;
1062
+ children.add(pid);
1063
+ }
1064
+
1065
+ function unregisterActiveCodexChild(pid: number | undefined, children: Set<number>): void {
1066
+ if (pid === undefined) return;
1067
+ children.delete(pid);
1068
+ }
1069
+
1070
+ function terminateCodexChildPid(pid: number, signal: NodeJS.Signals): void {
1071
+ if (process.platform !== "win32") {
1072
+ try {
1073
+ process.kill(-pid, signal);
1074
+ return;
1075
+ } catch {
1076
+ // Fall back to killing the direct child below.
1077
+ }
1078
+ }
1079
+
1080
+ try {
1081
+ process.kill(pid, signal);
1082
+ } catch {
1083
+ // The child may already have exited.
1084
+ }
1085
+ }