@remnic/core 9.69.38 → 9.69.40

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 (656) hide show
  1. package/dist/access-admin-ops-surface.d.ts +16 -14
  2. package/dist/access-admin-ops-surface.js +39 -39
  3. package/dist/access-authorization-probe.d.ts +16 -14
  4. package/dist/access-authorization-probe.js +40 -40
  5. package/dist/access-boundary.d.ts +16 -14
  6. package/dist/access-boundary.js +39 -39
  7. package/dist/access-cli.js +107 -105
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +16 -14
  11. package/dist/access-extraction-force-flush.js +39 -39
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-briefing.d.ts +16 -14
  14. package/dist/access-http-briefing.js +40 -40
  15. package/dist/access-http-lcm-compaction.d.ts +16 -14
  16. package/dist/access-http-lifecycle-flush.d.ts +16 -14
  17. package/dist/access-http-offline-stream.d.ts +16 -14
  18. package/dist/access-http-query.d.ts +2 -2
  19. package/dist/access-http-query.js +41 -41
  20. package/dist/access-http.d.ts +17 -15
  21. package/dist/access-http.js +58 -58
  22. package/dist/access-identity-continuity-surface.d.ts +13 -12
  23. package/dist/access-identity-continuity-surface.js +39 -39
  24. package/dist/access-lcm-surface.d.ts +16 -14
  25. package/dist/access-lcm-surface.js +39 -39
  26. package/dist/access-mcp.d.ts +16 -14
  27. package/dist/access-mcp.js +47 -47
  28. package/dist/access-memory-search-fanout.d.ts +2 -2
  29. package/dist/{access-namespace-preflight-DY4z6L5X.d.ts → access-namespace-preflight-CKBumJ8W.d.ts} +1 -1
  30. package/dist/access-namespace-preflight.d.ts +3 -3
  31. package/dist/access-namespace-preflight.js +39 -39
  32. package/dist/access-observe-transcript.d.ts +13 -12
  33. package/dist/access-observe-write-category.d.ts +1 -1
  34. package/dist/access-observe-write-category.js +2 -2
  35. package/dist/access-observe-write-surface.d.ts +16 -14
  36. package/dist/access-observe-write-surface.js +39 -39
  37. package/dist/access-offline-manifest.d.ts +37 -13
  38. package/dist/access-offline-manifest.js +7 -3
  39. package/dist/access-operations-batch.js +41 -41
  40. package/dist/access-operations.d.ts +16 -14
  41. package/dist/access-operations.js +46 -46
  42. package/dist/access-recall-concurrency.d.ts +16 -14
  43. package/dist/access-recall-concurrency.js +39 -39
  44. package/dist/access-recall-response.d.ts +16 -14
  45. package/dist/access-recall-response.js +39 -39
  46. package/dist/access-recall-surface.d.ts +16 -14
  47. package/dist/access-recall-surface.js +39 -39
  48. package/dist/access-schema.d.ts +5 -3
  49. package/dist/access-schema.js +1 -1
  50. package/dist/{access-service-gBcdRUHY.d.ts → access-service-DJ3qogNt.d.ts} +8 -8
  51. package/dist/access-service-helpers.d.ts +16 -14
  52. package/dist/access-service.d.ts +16 -14
  53. package/dist/access-service.js +39 -39
  54. package/dist/access-surface-catalog.d.ts +16 -14
  55. package/dist/access-surface-catalog.js +41 -41
  56. package/dist/access-wearables-meetings-surface.d.ts +6 -5
  57. package/dist/action-confidence.d.ts +1 -1
  58. package/dist/active-memory-bridge.d.ts +1 -1
  59. package/dist/active-recall.d.ts +1 -1
  60. package/dist/active-recall.js +6 -5
  61. package/dist/active-recall.js.map +1 -1
  62. package/dist/activity/digest.d.ts +1 -1
  63. package/dist/adapters/index.js +4 -4
  64. package/dist/adapters/registry.js +2 -2
  65. package/dist/ambient-provenance.d.ts +1 -1
  66. package/dist/artifact-search.d.ts +1 -1
  67. package/dist/{auto-sync-RP4C6ZPF.js → auto-sync-D6BAPIJV.js} +5 -5
  68. package/dist/background-generation-config.d.ts +1 -1
  69. package/dist/background-generation-config.js +3 -1
  70. package/dist/background-generation.d.ts +1 -1
  71. package/dist/behavior-learner.d.ts +1 -1
  72. package/dist/behavior-signals.d.ts +1 -1
  73. package/dist/bootstrap.d.ts +13 -12
  74. package/dist/briefing-window.d.ts +2 -2
  75. package/dist/briefing.d.ts +2 -2
  76. package/dist/briefing.js +16 -16
  77. package/dist/buffer-surprise-report.d.ts +1 -1
  78. package/dist/buffer-turn-helpers.d.ts +1 -1
  79. package/dist/buffer.d.ts +2 -2
  80. package/dist/buffer.js +5 -5
  81. package/dist/bulk-import/index.d.ts +3 -3
  82. package/dist/calibration.d.ts +3 -2
  83. package/dist/calibration.js +2 -2
  84. package/dist/capabilities.d.ts +1 -1
  85. package/dist/{catalog-CW87xGx8.d.ts → catalog-BHXkBVhg.d.ts} +1 -1
  86. package/dist/causal-behavior.d.ts +1 -1
  87. package/dist/causal-consolidation.d.ts +1 -1
  88. package/dist/causal-consolidation.js +20 -19
  89. package/dist/causal-consolidation.js.map +1 -1
  90. package/dist/causal-trajectory-graph.d.ts +1 -1
  91. package/dist/{chunk-B36GUU6T.js → chunk-23HFXQ5J.js} +36 -3
  92. package/dist/chunk-23HFXQ5J.js.map +1 -0
  93. package/dist/{chunk-YFTNZMGR.js → chunk-27NO2KVB.js} +31 -8
  94. package/dist/chunk-27NO2KVB.js.map +1 -0
  95. package/dist/{chunk-T32B72QX.js → chunk-2SKMZUOW.js} +2 -2
  96. package/dist/{chunk-VHOSM5G4.js → chunk-2SNCQHJZ.js} +2 -2
  97. package/dist/{chunk-VV4ZVUE6.js → chunk-3QEVOQF5.js} +2 -2
  98. package/dist/{chunk-3N3PBBEH.js → chunk-3XPN7AVY.js} +2 -2
  99. package/dist/{chunk-XN6XT6GR.js → chunk-46Z3VGWF.js} +2 -2
  100. package/dist/{chunk-2PTNJTBE.js → chunk-4CMXI55L.js} +2 -2
  101. package/dist/{chunk-2MT4ADLQ.js → chunk-5LYSEZOF.js} +18 -9
  102. package/dist/chunk-5LYSEZOF.js.map +1 -0
  103. package/dist/{chunk-XWLLFKHM.js → chunk-62HFZNCJ.js} +19 -12
  104. package/dist/chunk-62HFZNCJ.js.map +1 -0
  105. package/dist/{chunk-VELCIWJZ.js → chunk-6L2II3KS.js} +22 -11
  106. package/dist/chunk-6L2II3KS.js.map +1 -0
  107. package/dist/{chunk-A6CKMIPK.js → chunk-7D6SER6A.js} +8 -8
  108. package/dist/{chunk-4B3HBIFX.js → chunk-7Z54NXVS.js} +2 -2
  109. package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
  110. package/dist/{chunk-ACY4ZPF7.js → chunk-AEOOGXMQ.js} +10 -5
  111. package/dist/chunk-AEOOGXMQ.js.map +1 -0
  112. package/dist/{chunk-NWMUSKED.js → chunk-BGRTZOJB.js} +3 -3
  113. package/dist/{chunk-ZEGL7YCC.js → chunk-BXIJSPCL.js} +2 -2
  114. package/dist/{chunk-MLWMR2GE.js → chunk-BYQX4IOG.js} +2 -2
  115. package/dist/{chunk-ULDBGA5W.js → chunk-C5R73BON.js} +2 -2
  116. package/dist/{chunk-BD7JTBYP.js → chunk-D7MAYFQP.js} +2 -2
  117. package/dist/{chunk-V6G2PSXA.js → chunk-DAZANIYU.js} +251 -297
  118. package/dist/chunk-DAZANIYU.js.map +1 -0
  119. package/dist/{chunk-BRZWWUCJ.js → chunk-DFVSJFHK.js} +2 -2
  120. package/dist/{chunk-DPMTLJCT.js → chunk-ES5BUPYB.js} +2 -2
  121. package/dist/{chunk-MVAQ2WM3.js → chunk-G2XZFGYN.js} +6 -2
  122. package/dist/chunk-G2XZFGYN.js.map +1 -0
  123. package/dist/{chunk-TNSCIPBQ.js → chunk-G6NQ3L4T.js} +2 -2
  124. package/dist/{chunk-5N4MZLEH.js → chunk-GO5LOHCD.js} +2 -2
  125. package/dist/{chunk-AECJY3GJ.js → chunk-GSSDHAYH.js} +2 -2
  126. package/dist/{chunk-JA2QJOAX.js → chunk-HJUP3K6L.js} +2 -2
  127. package/dist/{chunk-ZKZFFWLV.js → chunk-ICNJ6J46.js} +2 -2
  128. package/dist/{chunk-6EHM2AV7.js → chunk-IMBQFHRV.js} +2 -2
  129. package/dist/{chunk-6PRY6CLC.js → chunk-IOPIGX7Y.js} +1 -1
  130. package/dist/{chunk-TRHBQVVO.js → chunk-IS2IDFJP.js} +14 -14
  131. package/dist/{chunk-R4VAUNNC.js → chunk-J4WGTN2N.js} +2 -2
  132. package/dist/{chunk-JPOX2AJB.js → chunk-J7FVMLBR.js} +2 -2
  133. package/dist/{chunk-BYZKLEWG.js → chunk-JAJIMTFB.js} +6 -6
  134. package/dist/{chunk-OKO57IXB.js → chunk-JOP7W24J.js} +11 -11
  135. package/dist/{chunk-YUW66UAH.js → chunk-JUDT33RX.js} +2 -2
  136. package/dist/{chunk-QHT7MOUF.js → chunk-K4A6UVPB.js} +22 -11
  137. package/dist/chunk-K4A6UVPB.js.map +1 -0
  138. package/dist/{chunk-UQNYPK7G.js → chunk-K4JKAXMO.js} +2 -2
  139. package/dist/{chunk-BV4ZKIZH.js → chunk-K75A5XWU.js} +3 -2
  140. package/dist/{chunk-3CBI2ZSA.js → chunk-KG2OOAFF.js} +20 -12
  141. package/dist/chunk-KG2OOAFF.js.map +1 -0
  142. package/dist/{chunk-M6HBPLBA.js → chunk-KOTG3RXE.js} +2 -2
  143. package/dist/{chunk-CWTCMZGE.js → chunk-KTOXQMW3.js} +119 -3
  144. package/dist/chunk-KTOXQMW3.js.map +1 -0
  145. package/dist/{chunk-OB3XMWX5.js → chunk-KVO2BTA4.js} +2 -2
  146. package/dist/{chunk-CBFYCDYO.js → chunk-KY236SP5.js} +3 -3
  147. package/dist/{chunk-4BCHFSC7.js → chunk-LFVZD5EC.js} +3 -3
  148. package/dist/{chunk-GGAXFTNH.js → chunk-LKFVVN7R.js} +2 -2
  149. package/dist/{chunk-IYKZJVL5.js → chunk-MDIEES23.js} +1 -1
  150. package/dist/chunk-MDIEES23.js.map +1 -0
  151. package/dist/{chunk-4RX5O34R.js → chunk-MJC7UKH7.js} +2 -2
  152. package/dist/{chunk-7S53BPTU.js → chunk-MVG3KXON.js} +69 -22
  153. package/dist/chunk-MVG3KXON.js.map +1 -0
  154. package/dist/chunk-NETQXOPY.js +221 -0
  155. package/dist/chunk-NETQXOPY.js.map +1 -0
  156. package/dist/{chunk-UZZ7SQT3.js → chunk-NVVZPBKI.js} +2 -2
  157. package/dist/{chunk-BLDBT6HZ.js → chunk-PJRKLB4Z.js} +18 -2
  158. package/dist/chunk-PJRKLB4Z.js.map +1 -0
  159. package/dist/{chunk-TTSJ7WUC.js → chunk-PKUJNICO.js} +2 -2
  160. package/dist/{chunk-QMWKENNK.js → chunk-Q4AUIFUA.js} +4 -4
  161. package/dist/{chunk-G43PMSME.js → chunk-QE6YVNP5.js} +7 -7
  162. package/dist/{chunk-WKDFJXW5.js → chunk-QM2SPLKQ.js} +1 -1
  163. package/dist/chunk-QM2SPLKQ.js.map +1 -0
  164. package/dist/{chunk-GT4ZHOKT.js → chunk-QPVNK2VE.js} +2 -2
  165. package/dist/{chunk-K5DA5TRG.js → chunk-QS5Q5RBV.js} +2 -2
  166. package/dist/{chunk-BX4EOMKT.js → chunk-RDLPFM7I.js} +2 -2
  167. package/dist/{chunk-EY5JAWZC.js → chunk-RJQAP333.js} +2 -2
  168. package/dist/{chunk-5AERZWJD.js → chunk-RLU2Y5GV.js} +4 -4
  169. package/dist/chunk-RLU2Y5GV.js.map +1 -0
  170. package/dist/{chunk-2OGTN37H.js → chunk-ROEFLU37.js} +4 -4
  171. package/dist/{chunk-62QIQEUC.js → chunk-SFHLQPBF.js} +25 -25
  172. package/dist/chunk-SK7D34OL.js +68 -0
  173. package/dist/chunk-SK7D34OL.js.map +1 -0
  174. package/dist/{chunk-HVS7TH2Y.js → chunk-SUEOG2S4.js} +2 -2
  175. package/dist/{chunk-74AHCL56.js → chunk-TEMKBSV6.js} +2 -2
  176. package/dist/{chunk-LQNRVPTV.js → chunk-THTF2W7M.js} +151 -118
  177. package/dist/chunk-THTF2W7M.js.map +1 -0
  178. package/dist/{chunk-KDFDXEXZ.js → chunk-TO36VPZI.js} +2 -2
  179. package/dist/{chunk-BJEJUOGM.js → chunk-TZ44E732.js} +44 -6
  180. package/dist/chunk-TZ44E732.js.map +1 -0
  181. package/dist/{chunk-JXN77SGO.js → chunk-U2VDCFXW.js} +1 -1
  182. package/dist/chunk-U2VDCFXW.js.map +1 -0
  183. package/dist/{chunk-3OYSIVOO.js → chunk-UZ6JYPJ6.js} +611 -289
  184. package/dist/chunk-UZ6JYPJ6.js.map +1 -0
  185. package/dist/{chunk-M3MYMWXG.js → chunk-V2ZA4YWE.js} +2 -2
  186. package/dist/{chunk-UIOIDW3L.js → chunk-VHKXRYQN.js} +2 -2
  187. package/dist/{chunk-GAS7KYC7.js → chunk-VKWFNPBH.js} +2 -2
  188. package/dist/{chunk-6H2G7RFT.js → chunk-VNQRRUNS.js} +11 -10
  189. package/dist/chunk-VNQRRUNS.js.map +1 -0
  190. package/dist/{chunk-XGRXQR6T.js → chunk-VQWBUPSJ.js} +2 -2
  191. package/dist/{chunk-TUKGXQ5T.js → chunk-VQYWKCDR.js} +2 -2
  192. package/dist/{chunk-PPQEP4OH.js → chunk-W23JARAQ.js} +2 -2
  193. package/dist/{chunk-YQNNHLCG.js → chunk-WPGR3RW4.js} +2 -2
  194. package/dist/{chunk-474DL7UB.js → chunk-WZYHPAG5.js} +3 -3
  195. package/dist/{chunk-5HYUUFMQ.js → chunk-XCPNH2MG.js} +259 -10
  196. package/dist/chunk-XCPNH2MG.js.map +1 -0
  197. package/dist/{chunk-GQQVEH6V.js → chunk-XM46Y66S.js} +2 -2
  198. package/dist/{chunk-JNSENHV5.js → chunk-YRIFXXMI.js} +3 -3
  199. package/dist/{chunk-TRLOFIQC.js → chunk-YTK5MVNF.js} +2 -2
  200. package/dist/{chunk-VMNCZ627.js → chunk-YTZN2UZO.js} +2 -2
  201. package/dist/chunk-Z4GUX2M6.js +94 -0
  202. package/dist/chunk-Z4GUX2M6.js.map +1 -0
  203. package/dist/{chunk-6ZMNTRU3.js → chunk-ZAEPD4C2.js} +2 -2
  204. package/dist/{chunk-KQW3YGEN.js → chunk-ZRMMXWYI.js} +2 -2
  205. package/dist/{chunk-P4ZAEYKG.js → chunk-ZX3AYNNV.js} +6 -3
  206. package/dist/chunk-ZX3AYNNV.js.map +1 -0
  207. package/dist/{chunk-MCRVQ5YQ.js → chunk-ZZCR2QYL.js} +2 -2
  208. package/dist/{cli-BNg-TAlz.d.ts → cli-BWri5-am.d.ts} +5 -5
  209. package/dist/cli.d.ts +18 -16
  210. package/dist/cli.js +80 -79
  211. package/dist/coding/export-okf-codegraph.d.ts +1 -1
  212. package/dist/coding/export-okf-codegraph.js +15 -15
  213. package/dist/coding/pre-action-gate.d.ts +1 -1
  214. package/dist/compounding/engine.d.ts +2 -2
  215. package/dist/compounding/engine.js +16 -16
  216. package/dist/compounding/preference-consolidator.d.ts +1 -1
  217. package/dist/compression-optimizer.d.ts +1 -1
  218. package/dist/config.d.ts +1 -1
  219. package/dist/config.js +6 -5
  220. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  221. package/dist/connectors/codex-materialize-runner.js +16 -16
  222. package/dist/connectors/codex-materialize.d.ts +1 -1
  223. package/dist/connectors/index.d.ts +1 -1
  224. package/dist/connectors/index.js +16 -16
  225. package/dist/consolidation-provenance-check.d.ts +2 -2
  226. package/dist/consolidation-undo.d.ts +2 -2
  227. package/dist/contradiction/index.d.ts +6 -5
  228. package/dist/converge-config.d.ts +1 -1
  229. package/dist/convergence-refresh.d.ts +2 -2
  230. package/dist/convergence-refresh.js +18 -18
  231. package/dist/conversation-index/backend.d.ts +1 -1
  232. package/dist/conversation-index/chunker.d.ts +1 -1
  233. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  234. package/dist/conversation-index/indexer.d.ts +1 -1
  235. package/dist/conversation-index/search.d.ts +1 -1
  236. package/dist/corpus-watermark.d.ts +1 -1
  237. package/dist/corpus-watermark.js +18 -18
  238. package/dist/cross-lingual-recall.d.ts +1 -1
  239. package/dist/day-summary.d.ts +1 -1
  240. package/dist/deep-recall-http-glue.d.ts +16 -14
  241. package/dist/deep-recall-http-glue.js +2 -2
  242. package/dist/deep-recall-mcp-tools.d.ts +16 -14
  243. package/dist/deep-recall-policy-llm.d.ts +4 -3
  244. package/dist/deep-recall-policy-llm.js +3 -3
  245. package/dist/deep-recall-seeds.d.ts +1 -1
  246. package/dist/delinearize.d.ts +1 -1
  247. package/dist/dependency-propagation-config.d.ts +1 -1
  248. package/dist/{dependency-propagation-delivery-Cq1ekOwV.d.ts → dependency-propagation-delivery-ueZlKTQB.d.ts} +1 -1
  249. package/dist/direct-answer-wiring.d.ts +1 -1
  250. package/dist/direct-answer.d.ts +1 -1
  251. package/dist/embedding-fallback.d.ts +1 -1
  252. package/dist/enrichment/index.d.ts +1 -1
  253. package/dist/entity-origin-fields.d.ts +1 -1
  254. package/dist/entity-retrieval.d.ts +2 -2
  255. package/dist/entity-retrieval.js +16 -16
  256. package/dist/entity-schema.d.ts +1 -1
  257. package/dist/episodic-context.d.ts +1 -1
  258. package/dist/eval-trajectory-contracts.d.ts +1 -1
  259. package/dist/eval-trajectory-store.d.ts +1 -1
  260. package/dist/eval-trajectory.d.ts +1 -1
  261. package/dist/explicit-capture.d.ts +13 -12
  262. package/dist/external-wiki-access.d.ts +16 -14
  263. package/dist/external-wiki-access.js +40 -40
  264. package/dist/external-wiki-collection-registration.d.ts +1 -1
  265. package/dist/external-wiki-collection.d.ts +1 -1
  266. package/dist/external-wiki-mcp-tools.d.ts +16 -14
  267. package/dist/extraction-error-classification.d.ts +14 -3
  268. package/dist/extraction-error-classification.js +5 -3
  269. package/dist/extraction-faithfulness.d.ts +4 -3
  270. package/dist/extraction-faithfulness.js +3 -3
  271. package/dist/extraction-judge-telemetry.d.ts +4 -3
  272. package/dist/extraction-judge-training.d.ts +4 -3
  273. package/dist/extraction-judge.d.ts +4 -3
  274. package/dist/extraction-judge.js +3 -3
  275. package/dist/extraction-liveness.d.ts +1 -1
  276. package/dist/extraction-normalization.d.ts +1 -1
  277. package/dist/extraction-prompt.d.ts +1 -1
  278. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  279. package/dist/extraction-source-grounding.d.ts +1 -1
  280. package/dist/extraction-span-config.d.ts +1 -1
  281. package/dist/extraction-span-materialize.d.ts +1 -1
  282. package/dist/extraction.d.ts +4 -4
  283. package/dist/extraction.js +26 -24
  284. package/dist/fallback-llm-codex-subscription.d.ts +52 -7
  285. package/dist/fallback-llm-codex-subscription.js +17 -1
  286. package/dist/fallback-llm.d.ts +25 -28
  287. package/dist/fallback-llm.js +4 -3
  288. package/dist/{generic-recall-paths-BcySh_f9.d.ts → generic-recall-paths-CpyVmA88.d.ts} +1 -1
  289. package/dist/graph-append-error.d.ts +1 -1
  290. package/dist/graph-dashboard-diff.d.ts +1 -1
  291. package/dist/graph-dashboard-key.d.ts +1 -1
  292. package/dist/graph-dashboard-parser.d.ts +1 -1
  293. package/dist/graph-edge-reinforcement.d.ts +1 -1
  294. package/dist/graph-jsonl.d.ts +1 -1
  295. package/dist/graph-path-reconstruction.d.ts +1 -1
  296. package/dist/graph-path-scoring.d.ts +1 -1
  297. package/dist/graph-snapshot.d.ts +1 -1
  298. package/dist/graph.d.ts +1 -1
  299. package/dist/harmonic-retrieval.js +1 -1
  300. package/dist/importance.d.ts +1 -1
  301. package/dist/importers/index.d.ts +1 -1
  302. package/dist/importers/test-utils.d.ts +1 -1
  303. package/dist/in-flight-reads.d.ts +1 -1
  304. package/dist/{index-DWOb4wz9.d.ts → index-BvUA4S7M.d.ts} +3 -3
  305. package/dist/index.d.ts +80 -40
  306. package/dist/index.js +140 -115
  307. package/dist/intent.d.ts +1 -1
  308. package/dist/lcm/engine.d.ts +1 -1
  309. package/dist/lcm/engine.js +2 -2
  310. package/dist/lcm/index.d.ts +1 -1
  311. package/dist/lcm/index.js +7 -7
  312. package/dist/lcm/tools.d.ts +1 -1
  313. package/dist/lifecycle.d.ts +1 -1
  314. package/dist/live-connectors-runner.d.ts +1 -1
  315. package/dist/local-llm-BsJGulur.d.ts +247 -0
  316. package/dist/local-llm-config.d.ts +4 -1
  317. package/dist/local-llm-config.js +4 -2
  318. package/dist/local-llm-helpers.d.ts +18 -69
  319. package/dist/local-llm-helpers.js +1 -1
  320. package/dist/local-llm.d.ts +3 -170
  321. package/dist/local-llm.js +2 -2
  322. package/dist/local-model-endpoint.d.ts +1 -1
  323. package/dist/location/index.d.ts +3 -3
  324. package/dist/location/index.js +18 -18
  325. package/dist/maintenance/memory-governance.d.ts +1 -1
  326. package/dist/maintenance/memory-governance.js +16 -16
  327. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  328. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +16 -16
  329. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  330. package/dist/maintenance/rebuild-memory-projection.js +17 -17
  331. package/dist/{maintenance-CW9wCzMP.d.ts → maintenance-CYubtIRr.d.ts} +9 -3
  332. package/dist/mcp-memory-inspector-app.d.ts +16 -14
  333. package/dist/memory-action-policy.d.ts +1 -1
  334. package/dist/memory-cache.d.ts +1 -1
  335. package/dist/memory-controller.d.ts +1 -1
  336. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  337. package/dist/memory-projection-store.d.ts +1 -1
  338. package/dist/memory-provenance.d.ts +1 -1
  339. package/dist/memory-snapshot.d.ts +1 -1
  340. package/dist/memory-subject-cli.d.ts +16 -14
  341. package/dist/memory-subject.d.ts +16 -14
  342. package/dist/memory-worth-outcomes.d.ts +2 -2
  343. package/dist/models-json.d.ts +1 -1
  344. package/dist/namespaces/migrate.d.ts +3 -3
  345. package/dist/namespaces/migrate.js +17 -17
  346. package/dist/namespaces/principal.d.ts +1 -1
  347. package/dist/namespaces/search.d.ts +12 -1
  348. package/dist/namespaces/search.js +9 -9
  349. package/dist/namespaces/storage.d.ts +3 -3
  350. package/dist/namespaces/storage.js +16 -16
  351. package/dist/native-knowledge.d.ts +1 -1
  352. package/dist/offline-sync-impression-drain.d.ts +1 -1
  353. package/dist/operator-doctor-corpus.d.ts +1 -1
  354. package/dist/operator-doctor-corpus.js +19 -19
  355. package/dist/operator-doctor-replica.d.ts +1 -1
  356. package/dist/operator-toolkit.d.ts +3 -3
  357. package/dist/operator-toolkit.js +30 -29
  358. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  359. package/dist/orchestration/maintenance.d.ts +4 -4
  360. package/dist/orchestration/maintenance.js +27 -27
  361. package/dist/{orchestrator-DocO0_hw.d.ts → orchestrator-BWDRJ_0d.d.ts} +37 -13
  362. package/dist/orchestrator.d.ts +13 -12
  363. package/dist/orchestrator.js +110 -106
  364. package/dist/patterns-cli.d.ts +1 -1
  365. package/dist/{pipeline-CiYcqqhl.d.ts → pipeline-7JMn2yMH.d.ts} +1 -1
  366. package/dist/policy-runtime.d.ts +1 -1
  367. package/dist/proactive-contention.d.ts +2 -2
  368. package/dist/provenance.d.ts +1 -1
  369. package/dist/{public-http-C0FoTiL_.d.ts → public-http-CJWs3mo9.d.ts} +1 -1
  370. package/dist/{qmd-qXD4vatU.d.ts → qmd-CxCH9G9m.d.ts} +2 -2
  371. package/dist/qmd-preflight.d.ts +2 -2
  372. package/dist/qmd-recall-cache.d.ts +1 -1
  373. package/dist/qmd.d.ts +2 -2
  374. package/dist/qmd.js +2 -2
  375. package/dist/recall-concurrency-config.d.ts +1 -1
  376. package/dist/recall-disclosure-escalation.d.ts +1 -1
  377. package/dist/recall-explain-renderer.d.ts +1 -1
  378. package/dist/recall-explain-renderer.js +3 -3
  379. package/dist/recall-memory-map.d.ts +1 -1
  380. package/dist/recall-navigate-access.d.ts +1 -1
  381. package/dist/recall-navigate-access.js +2 -2
  382. package/dist/recall-navigate-disclosure.d.ts +1 -1
  383. package/dist/recall-navigate-disclosure.js +1 -1
  384. package/dist/recall-navigate.d.ts +1 -1
  385. package/dist/recall-navigate.js +2 -2
  386. package/dist/recall-planner-llm.d.ts +3 -2
  387. package/dist/recall-planner-llm.js +4 -3
  388. package/dist/recall-planner-llm.js.map +1 -1
  389. package/dist/recall-state-view-admission.d.ts +13 -3
  390. package/dist/recall-state-view-admission.js +8 -8
  391. package/dist/recall-state-view-anchors.d.ts +85 -0
  392. package/dist/recall-state-view-anchors.js +21 -0
  393. package/dist/recall-state-view-anchors.js.map +1 -0
  394. package/dist/recall-state-view-inject.js +2 -2
  395. package/dist/recall-state-view-render.js +2 -2
  396. package/dist/recall-state-view-widen.js +2 -2
  397. package/dist/recall-state-view-wire.js +3 -3
  398. package/dist/recall-state-view.d.ts +38 -1
  399. package/dist/recall-state-view.js +11 -3
  400. package/dist/recall-state.d.ts +1 -1
  401. package/dist/recall-tag-filter.d.ts +1 -1
  402. package/dist/recall-timings.d.ts +1 -1
  403. package/dist/recall-xray-cli.d.ts +1 -1
  404. package/dist/recall-xray-cli.js +4 -4
  405. package/dist/recall-xray-renderer.d.ts +1 -1
  406. package/dist/recall-xray-renderer.js +3 -3
  407. package/dist/recall-xray.d.ts +1 -1
  408. package/dist/recall-xray.js +2 -2
  409. package/dist/reconcile/cursor.d.ts +1 -1
  410. package/dist/reconcile/manifest.d.ts +1 -1
  411. package/dist/reconcile/plan.d.ts +1 -1
  412. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  413. package/dist/replay/normalizers/claude.d.ts +1 -1
  414. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  415. package/dist/replay/normalizers/shared.d.ts +1 -1
  416. package/dist/replay/runner.d.ts +1 -1
  417. package/dist/replay/types.d.ts +1 -1
  418. package/dist/replica-divergence.d.ts +1 -1
  419. package/dist/replica-peers-config.d.ts +1 -1
  420. package/dist/resolve-auth-token.d.ts +1 -1
  421. package/dist/resume-bundles.js +7 -6
  422. package/dist/retrieval-agents.d.ts +2 -2
  423. package/dist/retrieval-tiers.d.ts +1 -1
  424. package/dist/routing/engine.d.ts +1 -1
  425. package/dist/routing/store.d.ts +1 -1
  426. package/dist/salvage-envelope.d.ts +1 -1
  427. package/dist/{scope-profiles-BT9rqC3w.d.ts → scope-profiles-BGAUqhBR.d.ts} +1 -1
  428. package/dist/search/embed-helper.d.ts +1 -1
  429. package/dist/search/factory.d.ts +1 -1
  430. package/dist/search/factory.js +8 -8
  431. package/dist/search/index.d.ts +1 -1
  432. package/dist/search/index.js +12 -12
  433. package/dist/search/lancedb-backend.d.ts +1 -1
  434. package/dist/search/lancedb-backend.js +2 -2
  435. package/dist/search/meilisearch-backend.d.ts +1 -1
  436. package/dist/search/meilisearch-backend.js +2 -2
  437. package/dist/search/noop-backend.d.ts +1 -1
  438. package/dist/search/orama-backend.d.ts +1 -1
  439. package/dist/search/orama-backend.js +2 -2
  440. package/dist/search/port.d.ts +2 -2
  441. package/dist/search/port.js +1 -1
  442. package/dist/search/remote-backend.d.ts +1 -1
  443. package/dist/search/remote-backend.js +2 -2
  444. package/dist/{semantic-consolidation-CmZi7thY.d.ts → semantic-consolidation-CCeRD9pV.d.ts} +1 -1
  445. package/dist/semantic-consolidation.d.ts +2 -2
  446. package/dist/semantic-consolidation.js +17 -17
  447. package/dist/semantic-rule-promotion.js +16 -16
  448. package/dist/semantic-rule-verifier.d.ts +1 -1
  449. package/dist/semantic-rule-verifier.js +16 -16
  450. package/dist/{service-CLkA7AQB.d.ts → service-BwpzRduk.d.ts} +2 -2
  451. package/dist/session-observer-bands.d.ts +1 -1
  452. package/dist/session-observer-state.d.ts +1 -1
  453. package/dist/shared-context/manager.d.ts +1 -1
  454. package/dist/signal.d.ts +1 -1
  455. package/dist/source-agent-qualifier.d.ts +1 -1
  456. package/dist/source-agent-qualifier.js +19 -19
  457. package/dist/standup/build.js +16 -16
  458. package/dist/{storage-wvX01lht.d.ts → storage-BprAGBG0.d.ts} +2 -1
  459. package/dist/storage.d.ts +2 -2
  460. package/dist/storage.js +15 -15
  461. package/dist/subject-config.d.ts +1 -1
  462. package/dist/summarizer.d.ts +1 -1
  463. package/dist/summarizer.js +5 -5
  464. package/dist/summary-snapshot.d.ts +1 -1
  465. package/dist/support-passport/index.d.ts +18 -17
  466. package/dist/support-passport/index.js +42 -42
  467. package/dist/task-llm-config.d.ts +16 -0
  468. package/dist/task-llm-config.js +12 -0
  469. package/dist/task-llm-config.js.map +1 -0
  470. package/dist/temporal-supersession.d.ts +2 -2
  471. package/dist/temporal-timeline-recall.d.ts +1 -1
  472. package/dist/temporal-validity.d.ts +1 -1
  473. package/dist/threading.d.ts +1 -1
  474. package/dist/tier-migration.d.ts +2 -2
  475. package/dist/tier-routing.d.ts +1 -1
  476. package/dist/topics.d.ts +1 -1
  477. package/dist/transcript.d.ts +1 -1
  478. package/dist/transfer/export-okf.d.ts +1 -1
  479. package/dist/transfer/export-okf.js +16 -16
  480. package/dist/trust-score-stage.d.ts +1 -1
  481. package/dist/trust-score.d.ts +1 -1
  482. package/dist/{types-Cyr32ABj.d.ts → types-nJV23pa3.d.ts} +1 -1
  483. package/dist/types.d.ts +1 -1
  484. package/dist/types.js +1 -1
  485. package/dist/utility-runtime.d.ts +1 -1
  486. package/dist/verified-recall.js +16 -16
  487. package/dist/who-knows-cli.d.ts +16 -14
  488. package/dist/who-knows-cli.js +17 -17
  489. package/dist/who-knows.d.ts +16 -14
  490. package/dist/who-knows.js +16 -16
  491. package/dist/write-envelope.d.ts +1 -1
  492. package/package.json +2 -2
  493. package/src/access-category-alias.test.ts +93 -0
  494. package/src/access-offline-manifest.ts +52 -2
  495. package/src/access-schema.ts +9 -4
  496. package/src/activity/config.test.ts +61 -0
  497. package/src/activity/config.ts +40 -1
  498. package/src/activity/timeline/analysis-provider.ts +8 -2
  499. package/src/activity/timeline/analysis-run.test.ts +82 -0
  500. package/src/activity/timeline/publish-cli.test.ts +30 -0
  501. package/src/activity/timeline/publish-cli.ts +7 -0
  502. package/src/activity/timeline/query.ts +8 -1
  503. package/src/activity/timeline/regenerate.test.ts +82 -2
  504. package/src/activity/timeline/regenerate.ts +7 -1
  505. package/src/activity/vault-frontmatter.test.ts +99 -1
  506. package/src/activity/vault-frontmatter.ts +131 -0
  507. package/src/activity/vault-publish.ts +6 -0
  508. package/src/activity/vault-publisher.test.ts +172 -0
  509. package/src/activity/vault-publisher.ts +69 -15
  510. package/src/activity/vault-region.test.ts +7 -2
  511. package/src/activity/vault-region.ts +7 -3
  512. package/src/background-generation-config.ts +32 -6
  513. package/src/background-generation.test.ts +10 -1
  514. package/src/cli/timeline-publish-commands.ts +9 -0
  515. package/src/config.test.ts +170 -43
  516. package/src/config.ts +17 -5
  517. package/src/extraction-error-classification.ts +36 -1
  518. package/src/extraction-timeout.test.ts +110 -1
  519. package/src/extraction.test.ts +19 -1
  520. package/src/extraction.ts +23 -21
  521. package/src/fallback-llm-codex-subscription.ts +193 -7
  522. package/src/fallback-llm-parse-failure.test.ts +156 -0
  523. package/src/fallback-llm.test.ts +58 -0
  524. package/src/fallback-llm.ts +187 -186
  525. package/src/index.ts +1 -0
  526. package/src/local-llm-config.ts +11 -10
  527. package/src/local-llm-headers-timeout.test.ts +30 -0
  528. package/src/local-llm-helpers.ts +28 -0
  529. package/src/local-llm.ts +8 -19
  530. package/src/namespaces/search.test.ts +51 -1
  531. package/src/namespaces/search.ts +48 -3
  532. package/src/orchestration/extraction-persist-promotion.test.ts +228 -2
  533. package/src/orchestration/extraction-persist-promotion.ts +17 -14
  534. package/src/orchestration/orchestrator-helpers.test.ts +104 -0
  535. package/src/orchestration/orchestrator-init.ts +366 -106
  536. package/src/orchestration/recall-internal.ts +85 -74
  537. package/src/orchestration/recall-rerank-coordinator.ts +41 -4
  538. package/src/orchestration/recall-search-pipeline.ts +25 -18
  539. package/src/orchestration/recall-state-view-pipeline.test.ts +89 -0
  540. package/src/orchestration/semantic-merge-promotion-payload.ts +62 -6
  541. package/src/orchestration/startup-collection-checks.ts +85 -0
  542. package/src/orchestrator-flush.test.ts +7 -0
  543. package/src/orchestrator-init.test.ts +1539 -0
  544. package/src/orchestrator.ts +7 -0
  545. package/src/qmd.ts +21 -10
  546. package/src/recall-rerank-coordinator.test.ts +153 -0
  547. package/src/recall-state-view-admission.ts +11 -1
  548. package/src/recall-state-view-anchors.ts +163 -0
  549. package/src/recall-state-view-cron-intent.test.ts +268 -0
  550. package/src/recall-state-view-widen.test.ts +14 -5
  551. package/src/recall-state-view-widen.ts +29 -8
  552. package/src/recall-state-view-zero-diff.test.ts +30 -0
  553. package/src/recall-state-view.test.ts +161 -0
  554. package/src/recall-state-view.ts +211 -37
  555. package/src/reconcile-identity-cache.test.ts +82 -1
  556. package/src/search/port.ts +1 -1
  557. package/src/storage/cas-revision-store.test.ts +4 -0
  558. package/src/storage/cas-revision-store.ts +104 -12
  559. package/src/storage-frontmatter-cas.test.ts +19 -17
  560. package/src/summarizer.ts +5 -1
  561. package/src/task-llm-config.test.ts +124 -0
  562. package/src/task-llm-config.ts +88 -0
  563. package/src/testing/subjects/startup-discovery-lifecycle.test.ts +273 -0
  564. package/src/trust-score-recall-paths.test.ts +1 -1
  565. package/src/types.ts +1 -0
  566. package/dist/chunk-255PC37A.js +0 -120
  567. package/dist/chunk-255PC37A.js.map +0 -1
  568. package/dist/chunk-2MT4ADLQ.js.map +0 -1
  569. package/dist/chunk-3CBI2ZSA.js.map +0 -1
  570. package/dist/chunk-3OYSIVOO.js.map +0 -1
  571. package/dist/chunk-5AERZWJD.js.map +0 -1
  572. package/dist/chunk-5HYUUFMQ.js.map +0 -1
  573. package/dist/chunk-6H2G7RFT.js.map +0 -1
  574. package/dist/chunk-7S53BPTU.js.map +0 -1
  575. package/dist/chunk-ACY4ZPF7.js.map +0 -1
  576. package/dist/chunk-B36GUU6T.js.map +0 -1
  577. package/dist/chunk-BJEJUOGM.js.map +0 -1
  578. package/dist/chunk-BLDBT6HZ.js.map +0 -1
  579. package/dist/chunk-CWTCMZGE.js.map +0 -1
  580. package/dist/chunk-IYKZJVL5.js.map +0 -1
  581. package/dist/chunk-JXN77SGO.js.map +0 -1
  582. package/dist/chunk-LQNRVPTV.js.map +0 -1
  583. package/dist/chunk-MVAQ2WM3.js.map +0 -1
  584. package/dist/chunk-P4ZAEYKG.js.map +0 -1
  585. package/dist/chunk-QHT7MOUF.js.map +0 -1
  586. package/dist/chunk-V6G2PSXA.js.map +0 -1
  587. package/dist/chunk-VELCIWJZ.js.map +0 -1
  588. package/dist/chunk-WKDFJXW5.js.map +0 -1
  589. package/dist/chunk-XWLLFKHM.js.map +0 -1
  590. package/dist/chunk-YFTNZMGR.js.map +0 -1
  591. /package/dist/{auto-sync-RP4C6ZPF.js.map → auto-sync-D6BAPIJV.js.map} +0 -0
  592. /package/dist/{chunk-T32B72QX.js.map → chunk-2SKMZUOW.js.map} +0 -0
  593. /package/dist/{chunk-VHOSM5G4.js.map → chunk-2SNCQHJZ.js.map} +0 -0
  594. /package/dist/{chunk-VV4ZVUE6.js.map → chunk-3QEVOQF5.js.map} +0 -0
  595. /package/dist/{chunk-3N3PBBEH.js.map → chunk-3XPN7AVY.js.map} +0 -0
  596. /package/dist/{chunk-XN6XT6GR.js.map → chunk-46Z3VGWF.js.map} +0 -0
  597. /package/dist/{chunk-2PTNJTBE.js.map → chunk-4CMXI55L.js.map} +0 -0
  598. /package/dist/{chunk-A6CKMIPK.js.map → chunk-7D6SER6A.js.map} +0 -0
  599. /package/dist/{chunk-4B3HBIFX.js.map → chunk-7Z54NXVS.js.map} +0 -0
  600. /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
  601. /package/dist/{chunk-NWMUSKED.js.map → chunk-BGRTZOJB.js.map} +0 -0
  602. /package/dist/{chunk-ZEGL7YCC.js.map → chunk-BXIJSPCL.js.map} +0 -0
  603. /package/dist/{chunk-MLWMR2GE.js.map → chunk-BYQX4IOG.js.map} +0 -0
  604. /package/dist/{chunk-ULDBGA5W.js.map → chunk-C5R73BON.js.map} +0 -0
  605. /package/dist/{chunk-BD7JTBYP.js.map → chunk-D7MAYFQP.js.map} +0 -0
  606. /package/dist/{chunk-BRZWWUCJ.js.map → chunk-DFVSJFHK.js.map} +0 -0
  607. /package/dist/{chunk-DPMTLJCT.js.map → chunk-ES5BUPYB.js.map} +0 -0
  608. /package/dist/{chunk-TNSCIPBQ.js.map → chunk-G6NQ3L4T.js.map} +0 -0
  609. /package/dist/{chunk-5N4MZLEH.js.map → chunk-GO5LOHCD.js.map} +0 -0
  610. /package/dist/{chunk-AECJY3GJ.js.map → chunk-GSSDHAYH.js.map} +0 -0
  611. /package/dist/{chunk-JA2QJOAX.js.map → chunk-HJUP3K6L.js.map} +0 -0
  612. /package/dist/{chunk-ZKZFFWLV.js.map → chunk-ICNJ6J46.js.map} +0 -0
  613. /package/dist/{chunk-6EHM2AV7.js.map → chunk-IMBQFHRV.js.map} +0 -0
  614. /package/dist/{chunk-6PRY6CLC.js.map → chunk-IOPIGX7Y.js.map} +0 -0
  615. /package/dist/{chunk-TRHBQVVO.js.map → chunk-IS2IDFJP.js.map} +0 -0
  616. /package/dist/{chunk-R4VAUNNC.js.map → chunk-J4WGTN2N.js.map} +0 -0
  617. /package/dist/{chunk-JPOX2AJB.js.map → chunk-J7FVMLBR.js.map} +0 -0
  618. /package/dist/{chunk-BYZKLEWG.js.map → chunk-JAJIMTFB.js.map} +0 -0
  619. /package/dist/{chunk-OKO57IXB.js.map → chunk-JOP7W24J.js.map} +0 -0
  620. /package/dist/{chunk-YUW66UAH.js.map → chunk-JUDT33RX.js.map} +0 -0
  621. /package/dist/{chunk-UQNYPK7G.js.map → chunk-K4JKAXMO.js.map} +0 -0
  622. /package/dist/{chunk-BV4ZKIZH.js.map → chunk-K75A5XWU.js.map} +0 -0
  623. /package/dist/{chunk-M6HBPLBA.js.map → chunk-KOTG3RXE.js.map} +0 -0
  624. /package/dist/{chunk-OB3XMWX5.js.map → chunk-KVO2BTA4.js.map} +0 -0
  625. /package/dist/{chunk-CBFYCDYO.js.map → chunk-KY236SP5.js.map} +0 -0
  626. /package/dist/{chunk-4BCHFSC7.js.map → chunk-LFVZD5EC.js.map} +0 -0
  627. /package/dist/{chunk-GGAXFTNH.js.map → chunk-LKFVVN7R.js.map} +0 -0
  628. /package/dist/{chunk-4RX5O34R.js.map → chunk-MJC7UKH7.js.map} +0 -0
  629. /package/dist/{chunk-UZZ7SQT3.js.map → chunk-NVVZPBKI.js.map} +0 -0
  630. /package/dist/{chunk-TTSJ7WUC.js.map → chunk-PKUJNICO.js.map} +0 -0
  631. /package/dist/{chunk-QMWKENNK.js.map → chunk-Q4AUIFUA.js.map} +0 -0
  632. /package/dist/{chunk-G43PMSME.js.map → chunk-QE6YVNP5.js.map} +0 -0
  633. /package/dist/{chunk-GT4ZHOKT.js.map → chunk-QPVNK2VE.js.map} +0 -0
  634. /package/dist/{chunk-K5DA5TRG.js.map → chunk-QS5Q5RBV.js.map} +0 -0
  635. /package/dist/{chunk-BX4EOMKT.js.map → chunk-RDLPFM7I.js.map} +0 -0
  636. /package/dist/{chunk-EY5JAWZC.js.map → chunk-RJQAP333.js.map} +0 -0
  637. /package/dist/{chunk-2OGTN37H.js.map → chunk-ROEFLU37.js.map} +0 -0
  638. /package/dist/{chunk-62QIQEUC.js.map → chunk-SFHLQPBF.js.map} +0 -0
  639. /package/dist/{chunk-HVS7TH2Y.js.map → chunk-SUEOG2S4.js.map} +0 -0
  640. /package/dist/{chunk-74AHCL56.js.map → chunk-TEMKBSV6.js.map} +0 -0
  641. /package/dist/{chunk-KDFDXEXZ.js.map → chunk-TO36VPZI.js.map} +0 -0
  642. /package/dist/{chunk-M3MYMWXG.js.map → chunk-V2ZA4YWE.js.map} +0 -0
  643. /package/dist/{chunk-UIOIDW3L.js.map → chunk-VHKXRYQN.js.map} +0 -0
  644. /package/dist/{chunk-GAS7KYC7.js.map → chunk-VKWFNPBH.js.map} +0 -0
  645. /package/dist/{chunk-XGRXQR6T.js.map → chunk-VQWBUPSJ.js.map} +0 -0
  646. /package/dist/{chunk-TUKGXQ5T.js.map → chunk-VQYWKCDR.js.map} +0 -0
  647. /package/dist/{chunk-PPQEP4OH.js.map → chunk-W23JARAQ.js.map} +0 -0
  648. /package/dist/{chunk-YQNNHLCG.js.map → chunk-WPGR3RW4.js.map} +0 -0
  649. /package/dist/{chunk-474DL7UB.js.map → chunk-WZYHPAG5.js.map} +0 -0
  650. /package/dist/{chunk-GQQVEH6V.js.map → chunk-XM46Y66S.js.map} +0 -0
  651. /package/dist/{chunk-JNSENHV5.js.map → chunk-YRIFXXMI.js.map} +0 -0
  652. /package/dist/{chunk-TRLOFIQC.js.map → chunk-YTK5MVNF.js.map} +0 -0
  653. /package/dist/{chunk-VMNCZ627.js.map → chunk-YTZN2UZO.js.map} +0 -0
  654. /package/dist/{chunk-6ZMNTRU3.js.map → chunk-ZAEPD4C2.js.map} +0 -0
  655. /package/dist/{chunk-KQW3YGEN.js.map → chunk-ZRMMXWYI.js.map} +0 -0
  656. /package/dist/{chunk-MCRVQ5YQ.js.map → chunk-ZZCR2QYL.js.map} +0 -0
@@ -2724,21 +2724,88 @@ test("parseConfig coerces string-typed sharedContextAllowBindingAuthority from t
2724
2724
  );
2725
2725
  }
2726
2726
  });
2727
+ test("parseConfig coerces string-typed sharedContextEnabled from the CLI", () => {
2728
+ // `--config sharedContextEnabled=true` arrives as a string, so a strict
2729
+ // `=== true` silently left the feature off for anyone who enabled it.
2730
+ // Parity with sharedContextAllowBindingAuthority (issue #2918).
2731
+ // The default recall-pipeline shared-context gate must use the same
2732
+ // coerced boolean — string true with no custom pipeline enables the
2733
+ // section; false/malformed stay off.
2734
+ for (const enabled of ["true", "1", "yes", "on", true]) {
2735
+ const parsed = parseConfig({ sharedContextEnabled: enabled });
2736
+ assert.equal(
2737
+ parsed.sharedContextEnabled,
2738
+ true,
2739
+ `${JSON.stringify(enabled)} must enable shared context`,
2740
+ );
2741
+ assert.equal(
2742
+ parsed.recallPipeline.find((section) => section.id === "shared-context")?.enabled,
2743
+ true,
2744
+ `${JSON.stringify(enabled)} must enable the default shared-context section`,
2745
+ );
2746
+ }
2747
+ for (const disabled of ["false", "0", "no", "off", false, undefined, "", "garbage"]) {
2748
+ const parsed = parseConfig({ sharedContextEnabled: disabled });
2749
+ assert.equal(
2750
+ parsed.sharedContextEnabled,
2751
+ false,
2752
+ `${JSON.stringify(disabled)} must leave shared context off (malformed input never activates)`,
2753
+ );
2754
+ assert.equal(
2755
+ parsed.recallPipeline.find((section) => section.id === "shared-context")?.enabled,
2756
+ false,
2757
+ `${JSON.stringify(disabled)} must leave the default shared-context section off`,
2758
+ );
2759
+ }
2760
+ });
2761
+
2762
+ test("custom recallPipeline keeps operator shared-context enabled (#2918)", () => {
2763
+ const customOff = parseConfig({
2764
+ sharedContextEnabled: "true",
2765
+ recallPipeline: [{ id: "shared-context", enabled: false, maxChars: 1000 }],
2766
+ });
2767
+ assert.equal(customOff.sharedContextEnabled, true);
2768
+ assert.equal(
2769
+ customOff.recallPipeline.find((section) => section.id === "shared-context")?.enabled,
2770
+ false,
2771
+ "custom pipeline must not silently activate shared-context",
2772
+ );
2773
+
2774
+ const customOn = parseConfig({
2775
+ sharedContextEnabled: "false",
2776
+ recallPipeline: [{ id: "shared-context", enabled: true, maxChars: 1000 }],
2777
+ });
2778
+ assert.equal(customOn.sharedContextEnabled, false);
2779
+ assert.equal(
2780
+ customOn.recallPipeline.find((section) => section.id === "shared-context")?.enabled,
2781
+ true,
2782
+ "custom pipeline enabled stays as specified",
2783
+ );
2784
+ });
2727
2785
 
2728
- test("parseConfig consumes backgroundGeneration and leaves openaiBaseUrl untouched", () => {
2786
+
2787
+ test("parseConfig consumes llmBridgeClientConfigPath into backgroundGeneration only", () => {
2729
2788
  withIsolatedConnectorsDir(false, () => {
2789
+ const dir = mkdtempSync(path.join(tmpdir(), "remnic-llm-bridge-client-"));
2730
2790
  const previousKey = process.env.OPENAI_API_KEY;
2731
2791
  const previousBase = process.env.OPENAI_BASE_URL;
2732
2792
  delete process.env.OPENAI_API_KEY;
2733
2793
  delete process.env.OPENAI_BASE_URL;
2734
2794
  try {
2735
- const parsed = parseConfig({
2736
- backgroundGeneration: {
2795
+ const file = path.join(dir, "client.json");
2796
+ writeFileSync(
2797
+ file,
2798
+ JSON.stringify({
2737
2799
  endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2800
+ health_endpoint: "http://127.0.0.1:8765/healthz",
2801
+ bind: "127.0.0.1",
2802
+ model_policy: "server-owned",
2803
+ max_body_bytes: 524288,
2804
+ timeout_seconds: 120,
2738
2805
  token: "bridge-token-fixture",
2739
- timeoutSeconds: 120,
2740
- },
2741
- });
2806
+ }),
2807
+ );
2808
+ const parsed = parseConfig({ llmBridgeClientConfigPath: file });
2742
2809
  assert.equal(parsed.openaiBaseUrl, undefined);
2743
2810
  assert.equal(parsed.openaiApiKey, undefined);
2744
2811
  assert.deepEqual(parsed.backgroundGeneration, {
@@ -2748,11 +2815,7 @@ test("parseConfig consumes backgroundGeneration and leaves openaiBaseUrl untouch
2748
2815
  });
2749
2816
 
2750
2817
  const explicitOpenAi = parseConfig({
2751
- backgroundGeneration: {
2752
- endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2753
- token: "bridge-token-fixture",
2754
- timeoutSeconds: 120,
2755
- },
2818
+ llmBridgeClientConfigPath: file,
2756
2819
  openaiBaseUrl: "http://127.0.0.1:9999/v1",
2757
2820
  openaiApiKey: "keep-me",
2758
2821
  });
@@ -2762,65 +2825,78 @@ test("parseConfig consumes backgroundGeneration and leaves openaiBaseUrl untouch
2762
2825
  explicitOpenAi.backgroundGeneration?.endpoint,
2763
2826
  "http://127.0.0.1:8765/v1/chat/completions",
2764
2827
  );
2828
+
2829
+ const explicitBg = parseConfig({
2830
+ backgroundGeneration: {
2831
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2832
+ token: "explicit-token",
2833
+ timeoutSeconds: 30,
2834
+ },
2835
+ });
2836
+ assert.equal(explicitBg.openaiBaseUrl, undefined);
2837
+ assert.deepEqual(explicitBg.backgroundGeneration, {
2838
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2839
+ token: "explicit-token",
2840
+ timeoutSeconds: 30,
2841
+ });
2765
2842
  } finally {
2766
2843
  if (previousKey === undefined) delete process.env.OPENAI_API_KEY;
2767
2844
  else process.env.OPENAI_API_KEY = previousKey;
2768
2845
  if (previousBase === undefined) delete process.env.OPENAI_BASE_URL;
2769
2846
  else process.env.OPENAI_BASE_URL = previousBase;
2847
+ rmSync(dir, { recursive: true, force: true });
2770
2848
  }
2771
2849
  });
2772
2850
  });
2773
2851
 
2774
- test("parseConfig ignores llmBridgeClientConfigPath", () => {
2775
- withIsolatedConnectorsDir(false, () => {
2776
- const parsed = parseConfig({
2777
- llmBridgeClientConfigPath: "/no/such/remnic-llm-bridge-client.json",
2778
- });
2779
- assert.equal(parsed.backgroundGeneration, undefined);
2780
- });
2781
- });
2782
-
2783
- test("parseConfig rejects backgroundGeneration without a token", () => {
2852
+ test("parseConfig rejects an unreadable llmBridgeClientConfigPath", () => {
2784
2853
  withIsolatedConnectorsDir(false, () => {
2785
2854
  assert.throws(
2786
- () =>
2787
- parseConfig({
2788
- backgroundGeneration: {
2789
- endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2790
- },
2791
- }),
2792
- /must include a token/,
2855
+ () => parseConfig({ llmBridgeClientConfigPath: "/no/such/remnic-llm-bridge-client.json" }),
2856
+ /llmBridgeClientConfigPath could not be read/,
2793
2857
  );
2794
2858
  });
2795
2859
  });
2796
2860
 
2797
- test("parseConfig ignores Hermes timeout_seconds on backgroundGeneration", () => {
2861
+ test("parseConfig rejects a bridge client file without a token", () => {
2798
2862
  withIsolatedConnectorsDir(false, () => {
2799
- const parsed = parseConfig({
2800
- backgroundGeneration: {
2801
- endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2802
- token: "bridge-token-fixture",
2803
- timeout_seconds: 45,
2804
- },
2805
- });
2806
- assert.equal(parsed.backgroundGeneration?.timeoutSeconds, 120);
2863
+ const dir = mkdtempSync(path.join(tmpdir(), "remnic-llm-bridge-client-"));
2864
+ try {
2865
+ const file = path.join(dir, "client.json");
2866
+ writeFileSync(
2867
+ file,
2868
+ JSON.stringify({
2869
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2870
+ }),
2871
+ );
2872
+ assert.throws(
2873
+ () => parseConfig({ llmBridgeClientConfigPath: file }),
2874
+ /must include a token/,
2875
+ );
2876
+ } finally {
2877
+ rmSync(dir, { recursive: true, force: true });
2878
+ }
2807
2879
  });
2808
2880
  });
2809
2881
 
2810
- test("parseConfig keeps env openaiBaseUrl isolated from backgroundGeneration", () => {
2882
+ test("parseConfig keeps env openaiBaseUrl isolated from the Hermes bridge", () => {
2811
2883
  withIsolatedConnectorsDir(false, () => {
2884
+ const dir = mkdtempSync(path.join(tmpdir(), "remnic-llm-bridge-env-"));
2812
2885
  const previousKey = process.env.OPENAI_API_KEY;
2813
2886
  const previousBase = process.env.OPENAI_BASE_URL;
2814
2887
  process.env.OPENAI_API_KEY = "env-openai-key";
2815
2888
  process.env.OPENAI_BASE_URL = "http://127.0.0.1:9999/v1";
2816
2889
  try {
2817
- const parsed = parseConfig({
2818
- backgroundGeneration: {
2890
+ const file = path.join(dir, "client.json");
2891
+ writeFileSync(
2892
+ file,
2893
+ JSON.stringify({
2819
2894
  endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2820
2895
  token: "bridge-token-fixture",
2821
- timeoutSeconds: 45,
2822
- },
2823
- });
2896
+ timeout_seconds: 45,
2897
+ }),
2898
+ );
2899
+ const parsed = parseConfig({ llmBridgeClientConfigPath: file });
2824
2900
  assert.equal(parsed.openaiBaseUrl, "http://127.0.0.1:9999/v1");
2825
2901
  assert.equal(parsed.openaiApiKey, "env-openai-key");
2826
2902
  assert.deepEqual(parsed.backgroundGeneration, {
@@ -2833,6 +2909,57 @@ test("parseConfig keeps env openaiBaseUrl isolated from backgroundGeneration", (
2833
2909
  else process.env.OPENAI_API_KEY = previousKey;
2834
2910
  if (previousBase === undefined) delete process.env.OPENAI_BASE_URL;
2835
2911
  else process.env.OPENAI_BASE_URL = previousBase;
2912
+ rmSync(dir, { recursive: true, force: true });
2913
+ }
2914
+ });
2915
+ });
2916
+
2917
+ test("parseConfig rejects nonnumeric bridge timeout values", () => {
2918
+ withIsolatedConnectorsDir(false, () => {
2919
+ assert.throws(
2920
+ () =>
2921
+ parseConfig({
2922
+ backgroundGeneration: {
2923
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2924
+ token: "t",
2925
+ timeoutSeconds: true,
2926
+ },
2927
+ }),
2928
+ /timeoutSeconds must be a finite number/,
2929
+ );
2930
+ assert.throws(
2931
+ () =>
2932
+ parseConfig({
2933
+ backgroundGeneration: {
2934
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2935
+ token: "t",
2936
+ timeout_seconds: "45",
2937
+ },
2938
+ }),
2939
+ /timeoutSeconds must be a finite number/,
2940
+ );
2941
+ });
2942
+ });
2943
+
2944
+ test("parseConfig rejects a bridge client file with a nonnumeric timeout", () => {
2945
+ withIsolatedConnectorsDir(false, () => {
2946
+ const dir = mkdtempSync(path.join(tmpdir(), "remnic-llm-bridge-badtimeout-"));
2947
+ try {
2948
+ const file = path.join(dir, "client.json");
2949
+ writeFileSync(
2950
+ file,
2951
+ JSON.stringify({
2952
+ endpoint: "http://127.0.0.1:8765/v1/chat/completions",
2953
+ token: "bridge-token-fixture",
2954
+ timeout_seconds: "45",
2955
+ }),
2956
+ );
2957
+ assert.throws(
2958
+ () => parseConfig({ llmBridgeClientConfigPath: file }),
2959
+ /timeoutSeconds must be a finite number/,
2960
+ );
2961
+ } finally {
2962
+ rmSync(dir, { recursive: true, force: true });
2836
2963
  }
2837
2964
  });
2838
2965
  });
package/src/config.ts CHANGED
@@ -25,6 +25,7 @@ import type {
25
25
  TriggerMode,
26
26
  TrustWeights,
27
27
  } from "./types.js";
28
+ import { parseBackgroundGeneration } from "./background-generation-config.js";
28
29
  import { parseLocalLlmConfig } from "./local-llm-config.js";
29
30
  import { parseConvergeConfig } from "./converge-config.js";
30
31
  import { parseExternalWikiRecallGuard } from "./external-wiki-guard.js";
@@ -519,6 +520,7 @@ function normalizeOpenaiBaseUrl(value: string | undefined, source: "config" | "e
519
520
  return url;
520
521
  }
521
522
 
523
+
522
524
  function normalizeMemoryRelativeDir(raw: unknown, fallback: string): string {
523
525
  if (typeof raw !== "string") return fallback;
524
526
  const trimmed = raw.trim();
@@ -1482,6 +1484,7 @@ export function parseConfig(
1482
1484
  } else if (apiKey !== undefined) {
1483
1485
  baseUrl = normalizeOpenaiBaseUrl(readEnvVar("OPENAI_BASE_URL"), "env");
1484
1486
  }
1487
+ const backgroundGeneration = parseBackgroundGeneration(cfg, resolveEnvVars);
1485
1488
 
1486
1489
  const sharedCrossSignalSemanticEnabled =
1487
1490
  cfg.sharedCrossSignalSemanticEnabled === true || cfg.crossSignalsSemanticEnabled === true;
@@ -1491,7 +1494,15 @@ export function parseConfig(
1491
1494
  : typeof cfg.crossSignalsSemanticTimeoutMs === "number"
1492
1495
  ? Math.max(1, Math.floor(cfg.crossSignalsSemanticTimeoutMs))
1493
1496
  : 4000;
1494
- const recallPipelineConfig = buildRecallPipelineConfig(cfg);
1497
+ // Coerce once. The default recall-pipeline shared-context gate reads
1498
+ // `cfg.sharedContextEnabled === true`, so it must see this boolean —
1499
+ // not the raw CLI/config string. Custom `recallPipeline` is unchanged.
1500
+ const sharedContextEnabled =
1501
+ coerceBool(cfg.sharedContextEnabled, "sharedContextEnabled") ?? false;
1502
+ const recallPipelineConfig = buildRecallPipelineConfig({
1503
+ ...cfg,
1504
+ sharedContextEnabled,
1505
+ });
1495
1506
  const maintenanceNamespaceFanoutEnabled = resolveBooleanConfig(
1496
1507
  readFlatOrNestedConfig(
1497
1508
  cfg,
@@ -1560,6 +1571,7 @@ export function parseConfig(
1560
1571
  return {
1561
1572
  openaiApiKey: apiKey,
1562
1573
  openaiBaseUrl: baseUrl,
1574
+ backgroundGeneration,
1563
1575
  model,
1564
1576
  reasoningEffort,
1565
1577
  triggerMode,
@@ -3003,10 +3015,9 @@ export function parseConfig(
3003
3015
  ? cfg.routingRulesStateFile.trim()
3004
3016
  : "state/routing-rules.json",
3005
3017
 
3006
- // v4.0 shared-context (default off)
3007
- sharedContextEnabled: cfg.sharedContextEnabled === true,
3008
- // CLI values arrive as strings (`--config sharedContextAllowBindingAuthority=true`),
3009
- // so a strict `=== true` silently keeps the feature off. Default stays false.
3018
+ // Reuse the hoisted coerce above (default pipeline already saw it).
3019
+ sharedContextEnabled,
3020
+ // Same coercion contract for the binding-authority sibling (#2918 parity).
3010
3021
  sharedContextAllowBindingAuthority:
3011
3022
  coerceBool(cfg.sharedContextAllowBindingAuthority, "sharedContextAllowBindingAuthority") ?? false,
3012
3023
  sharedContextDir:
@@ -4217,6 +4228,7 @@ function buildDefaultRecallPipeline(cfg: Record<string, unknown>): RecallSection
4217
4228
  return [
4218
4229
  {
4219
4230
  id: "shared-context",
4231
+ // Already coerced in parseConfig; do not coerce again.
4220
4232
  enabled: cfg.sharedContextEnabled === true,
4221
4233
  maxChars:
4222
4234
  typeof cfg.sharedContextMaxInjectChars === "number"
@@ -39,14 +39,49 @@ export function classifyExtractionThrownError(err: unknown): ExtractionFailureCl
39
39
  * genuine empty-parse.
40
40
  */
41
41
  export function classifyFallbackParseFailure(
42
- reason: "no_models" | "empty" | "http_error",
42
+ reason: "no_models" | "empty" | "http_error" | "schema_rejection" | "timeout",
43
43
  ): ExtractionFailureClass {
44
44
  switch (reason) {
45
45
  case "no_models":
46
46
  return "auth_config";
47
47
  case "http_error":
48
+ case "timeout":
48
49
  return "provider_retryable";
49
50
  case "empty":
51
+ case "schema_rejection":
50
52
  return "parse_empty";
51
53
  }
52
54
  }
55
+
56
+ /**
57
+ * Operator-visible extraction parse-failure line. Keeps the historical
58
+ * greppable prefix and appends the fields that used to live only at debug.
59
+ */
60
+ export function formatExtractionParseFailureLog(input: {
61
+ failureReason: string;
62
+ attemptedModel?: string;
63
+ httpStatus?: number;
64
+ errorClass?: string;
65
+ traceId: string;
66
+ }): string {
67
+ const modelUsed =
68
+ typeof input.attemptedModel === "string" && input.attemptedModel.length > 0
69
+ ? input.attemptedModel
70
+ : "unknown";
71
+ const errorClass =
72
+ typeof input.errorClass === "string" && input.errorClass.length > 0
73
+ ? input.errorClass
74
+ : "none";
75
+ const httpStatus =
76
+ typeof input.httpStatus === "number" && Number.isFinite(input.httpStatus)
77
+ ? String(input.httpStatus)
78
+ : "none";
79
+ return [
80
+ "extraction fallback returned no parsed output",
81
+ `failureReason=${input.failureReason}`,
82
+ `modelUsed=${modelUsed}`,
83
+ `errorClass=${errorClass}`,
84
+ `httpStatus=${httpStatus}`,
85
+ `traceId=${input.traceId}`,
86
+ ].join(" ");
87
+ }
@@ -3,7 +3,9 @@ import test from "node:test";
3
3
 
4
4
  import { parseConfig } from "./config.js";
5
5
  import { ExtractionEngine } from "./extraction.js";
6
- import type { BufferTurn } from "./types.js";
6
+ import { initLogger, resetLogger } from "./logger.js";
7
+ import type { BufferTurn, ExtractionFailureClass, LlmTraceEvent } from "./types.js";
8
+ import type { StructuredParseFailure } from "./fallback-llm.js";
7
9
 
8
10
  test("gateway extraction fallback honors configured timeout and output budget", async () => {
9
11
  const config = parseConfig({
@@ -320,3 +322,110 @@ test("gateway extraction forwards caller cancellation to the provider", async ()
320
322
  controller.abort(new Error("deadline"));
321
323
  await assert.rejects(extraction, /deadline/);
322
324
  });
325
+
326
+ function gatewayConfig() {
327
+ return {
328
+ modelSource: "gateway" as const,
329
+ gatewayConfig: {
330
+ agents: {
331
+ defaults: { model: { primary: "bench-internal/gpt-5.5" } },
332
+ list: [],
333
+ },
334
+ models: {
335
+ providers: {
336
+ "bench-internal": {
337
+ api: "codex-cli" as const,
338
+ baseUrl: "codex-cli://local",
339
+ models: [{ id: "gpt-5.5", name: "gpt-5.5" }],
340
+ },
341
+ },
342
+ },
343
+ },
344
+ };
345
+ }
346
+
347
+ const RETRYABLE: ReadonlySet<ExtractionFailureClass> = new Set([
348
+ "provider_retryable",
349
+ "parse_empty",
350
+ "auth_config",
351
+ ]);
352
+
353
+ test("extraction warn and llm_error keep failure classes distinct and fingerprints retryable", async () => {
354
+ const cases: Array<{
355
+ failure: StructuredParseFailure;
356
+ expectedClass: ExtractionFailureClass;
357
+ }> = [
358
+ {
359
+ failure: { result: null, failureReason: "empty", attemptedModel: "bench-internal/gpt-5.5", errorClass: "empty" },
360
+ expectedClass: "parse_empty",
361
+ },
362
+ {
363
+ failure: {
364
+ result: null,
365
+ failureReason: "schema_rejection",
366
+ attemptedModel: "bench-internal/gpt-5.5",
367
+ errorClass: "schema_rejection",
368
+ },
369
+ expectedClass: "parse_empty",
370
+ },
371
+ {
372
+ failure: {
373
+ result: null,
374
+ failureReason: "http_error",
375
+ attemptedModel: "bench-internal/gpt-5.5",
376
+ httpStatus: 502,
377
+ errorClass: "http_5xx",
378
+ },
379
+ expectedClass: "provider_retryable",
380
+ },
381
+ {
382
+ failure: { result: null, failureReason: "timeout", errorClass: "timeout" },
383
+ expectedClass: "provider_retryable",
384
+ },
385
+ ];
386
+
387
+ for (const { failure, expectedClass } of cases) {
388
+ const warns: string[] = [];
389
+ const events: LlmTraceEvent[] = [];
390
+ initLogger({ info() {}, warn(msg) { warns.push(msg); }, error() {} }, false, { timestamps: false });
391
+ (globalThis as { __openclawEngramTrace?: (event: LlmTraceEvent) => void }).__openclawEngramTrace = (event) => {
392
+ events.push(event);
393
+ };
394
+ try {
395
+ const engine = new ExtractionEngine(parseConfig(gatewayConfig()));
396
+ (engine as unknown as {
397
+ fallbackLlm: {
398
+ parseWithSchemaDetailed(): Promise<StructuredParseFailure>;
399
+ };
400
+ }).fallbackLlm = {
401
+ async parseWithSchemaDetailed() {
402
+ return failure;
403
+ },
404
+ };
405
+ const result = await engine.extract([
406
+ { role: "user", content: "Remember that the depot is cedar hall.", timestamp: "2026-05-08T00:00:00.000Z" },
407
+ ]);
408
+ assert.equal(result.extractionFailure, "fallback_no_parsed_output");
409
+ assert.equal(result.extractionFailureClass, expectedClass);
410
+ assert.equal(RETRYABLE.has(result.extractionFailureClass ?? "provider_retryable"), true);
411
+ const warn = warns.find((line) => line.includes("extraction fallback returned no parsed output"));
412
+ assert.ok(warn, `missing warn for ${failure.failureReason}`);
413
+ assert.match(warn, new RegExp(`failureReason=${failure.failureReason}`));
414
+ assert.match(warn, /modelUsed=/);
415
+ assert.match(warn, /errorClass=/);
416
+ assert.match(warn, /httpStatus=/);
417
+ assert.match(warn, /traceId=/);
418
+ if (failure.httpStatus !== undefined) {
419
+ assert.match(warn, new RegExp(`httpStatus=${failure.httpStatus}`));
420
+ }
421
+ const errorEvent = events.find((event) => event.kind === "llm_error");
422
+ assert.ok(errorEvent, `missing llm_error for ${failure.failureReason}`);
423
+ assert.match(errorEvent.error ?? "", new RegExp(`failureReason=${failure.failureReason}`));
424
+ assert.match(errorEvent.error ?? "", /traceId=/);
425
+ assert.equal(errorEvent.traceId.length > 0, true);
426
+ } finally {
427
+ resetLogger();
428
+ delete (globalThis as { __openclawEngramTrace?: unknown }).__openclawEngramTrace;
429
+ }
430
+ }
431
+ });
@@ -10,7 +10,7 @@
10
10
  import assert from "node:assert/strict";
11
11
  import test from "node:test";
12
12
 
13
- import { classifyExtractionThrownError, classifyFallbackParseFailure } from "./extraction.js";
13
+ import { classifyExtractionThrownError, classifyFallbackParseFailure, formatExtractionParseFailureLog } from "./extraction.js";
14
14
 
15
15
  test("classifyExtractionThrownError: 401/403 → auth_config", () => {
16
16
  assert.equal(classifyExtractionThrownError({ status: 401 }), "auth_config");
@@ -36,4 +36,22 @@ test("classifyFallbackParseFailure: maps the gateway parse-failure reasons", ()
36
36
  assert.equal(classifyFallbackParseFailure("no_models"), "auth_config");
37
37
  assert.equal(classifyFallbackParseFailure("http_error"), "provider_retryable");
38
38
  assert.equal(classifyFallbackParseFailure("empty"), "parse_empty");
39
+ assert.equal(classifyFallbackParseFailure("schema_rejection"), "parse_empty");
40
+ assert.equal(classifyFallbackParseFailure("timeout"), "provider_retryable");
41
+ });
42
+
43
+ test("formatExtractionParseFailureLog keeps the greppable prefix and distinct fields", () => {
44
+ const line = formatExtractionParseFailureLog({
45
+ failureReason: "http_error",
46
+ attemptedModel: "openai/test-model",
47
+ httpStatus: 502,
48
+ errorClass: "http_5xx",
49
+ traceId: "trace-1",
50
+ });
51
+ assert.match(line, /^extraction fallback returned no parsed output /);
52
+ assert.match(line, /failureReason=http_error/);
53
+ assert.match(line, /modelUsed=openai\/test-model/);
54
+ assert.match(line, /errorClass=http_5xx/);
55
+ assert.match(line, /httpStatus=502/);
56
+ assert.match(line, /traceId=trace-1/);
39
57
  });
package/src/extraction.ts CHANGED
@@ -38,7 +38,8 @@ import {
38
38
  } from "./extraction-source-grounding.js";
39
39
  import { applyGroundingWithConnector, headerConnector, renderExtractionConversation, resolveSourceConnector, type ExtractionGroundingContext } from "./source-agent-qualifier.js";
40
40
  import { isMemoryCategory } from "./write-envelope.js";
41
- import { classifyExtractionThrownError, classifyFallbackParseFailure } from "./extraction-error-classification.js";
41
+ export { classifyExtractionThrownError, classifyFallbackParseFailure, formatExtractionParseFailureLog } from "./extraction-error-classification.js";
42
+ import { classifyExtractionThrownError, classifyFallbackParseFailure, formatExtractionParseFailureLog } from "./extraction-error-classification.js";
42
43
  import { AMBIENT_CAPTURE_PROMPT_SECTION_COMPACT, clampAmbientCaptureConfidence } from "./ambient-provenance.js";
43
44
  import {
44
45
  CONSOLIDATION_RESPONSE_SCHEMA,
@@ -53,22 +54,8 @@ import {
53
54
  spanModePromptSection,
54
55
  } from "./extraction-prompt.js";
55
56
  import { zodToJsonSchema } from "zod-to-json-schema";
56
- import {
57
- containsExtractionPlaceholder,
58
- extractionAttributes,
59
- extractionCueAnchors,
60
- extractionText,
61
- isPlainRecord,
62
- } from "./extraction-normalization.js";
63
- export { classifyExtractionThrownError, classifyFallbackParseFailure } from "./extraction-error-classification.js";
64
- import {
65
- applyExtractionSpanMaterialization,
66
- bindLocalExtractionPrompt,
67
- buildSpanMaterializeTurns,
68
- stripUntrustedFactSpans,
69
- truncateLocalExtractionConversation,
70
- type SpanMaterializeTurn,
71
- } from "./extraction-span-materialize.js";
57
+ import { containsExtractionPlaceholder, extractionAttributes, extractionCueAnchors, extractionText, isPlainRecord } from "./extraction-normalization.js";
58
+ import { applyExtractionSpanMaterialization, bindLocalExtractionPrompt, buildSpanMaterializeTurns, stripUntrustedFactSpans, truncateLocalExtractionConversation, type SpanMaterializeTurn } from "./extraction-span-materialize.js";
72
59
  import { resolveLocalLlmCapabilities, resolveMemoryLifecycleCapabilities, resolvePipelineProcessingCapabilities, resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
73
60
  type ExtractionQuestion = ExtractionResult["questions"][number];
74
61
  type ExtractedFactResult = ExtractionResult["facts"][number];
@@ -1363,7 +1350,7 @@ export class ExtractionEngine {
1363
1350
  this.withGatewayAgent({
1364
1351
  temperature: 0.3,
1365
1352
  maxTokens: this.config.extractionMaxOutputTokens,
1366
- timeoutMs: this.config.localLlmTimeoutMs,
1353
+ timeoutMs: this.config.taskLlmTimeoutMs ?? this.config.localLlmTimeoutMs,
1367
1354
  jsonSchema: {
1368
1355
  name: "extraction_result",
1369
1356
  schema: EXTRACTION_PROVIDER_JSON_SCHEMA,
@@ -1391,11 +1378,26 @@ export class ExtractionEngine {
1391
1378
  return this.finalizeExtractionResult(finalResult, boundedTurns, resolvedConnector, ambientCapture);
1392
1379
  }
1393
1380
 
1381
+ const parseFailure =
1382
+ detailed.result === null
1383
+ ? detailed
1384
+ : { failureReason: "empty" as const, attemptedModel: undefined, httpStatus: undefined, errorClass: "empty" };
1385
+ const failureLog = formatExtractionParseFailureLog({
1386
+ failureReason: parseFailure.failureReason,
1387
+ attemptedModel: parseFailure.attemptedModel,
1388
+ httpStatus: parseFailure.httpStatus,
1389
+ errorClass: parseFailure.errorClass,
1390
+ traceId: fallbackTraceId,
1391
+ });
1394
1392
  this.emit({
1395
- kind: "llm_error", traceId: fallbackTraceId, model: "fallback", operation: "extraction",
1396
- durationMs: fallbackDurationMs, error: "fallback returned no parsed output",
1393
+ kind: "llm_error",
1394
+ traceId: fallbackTraceId,
1395
+ model: parseFailure.attemptedModel ?? "fallback",
1396
+ operation: "extraction",
1397
+ durationMs: fallbackDurationMs,
1398
+ error: failureLog,
1397
1399
  });
1398
- log.warn("extraction fallback returned no parsed output");
1400
+ log.warn(failureLog);
1399
1401
  const fallbackParseFailureClass: ExtractionFailureClass =
1400
1402
  detailed.result === null
1401
1403
  ? detailed.failureReason === "no_models" && primaryExtractorAttempted