@remnic/core 1.0.0

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 (551) hide show
  1. package/dist/abstraction-nodes.d.ts +52 -0
  2. package/dist/abstraction-nodes.js +15 -0
  3. package/dist/abstraction-nodes.js.map +1 -0
  4. package/dist/access-cli.d.ts +5 -0
  5. package/dist/access-cli.js +308 -0
  6. package/dist/access-cli.js.map +1 -0
  7. package/dist/access-http.d.ts +158 -0
  8. package/dist/access-http.js +32 -0
  9. package/dist/access-http.js.map +1 -0
  10. package/dist/access-idempotency.d.ts +31 -0
  11. package/dist/access-idempotency.js +11 -0
  12. package/dist/access-idempotency.js.map +1 -0
  13. package/dist/access-mcp.d.ts +76 -0
  14. package/dist/access-mcp.js +8 -0
  15. package/dist/access-mcp.js.map +1 -0
  16. package/dist/access-schema.d.ts +266 -0
  17. package/dist/access-schema.js +29 -0
  18. package/dist/access-schema.js.map +1 -0
  19. package/dist/access-service.d.ts +614 -0
  20. package/dist/access-service.js +32 -0
  21. package/dist/access-service.js.map +1 -0
  22. package/dist/behavior-learner.d.ts +16 -0
  23. package/dist/behavior-learner.js +124 -0
  24. package/dist/behavior-learner.js.map +1 -0
  25. package/dist/behavior-signals.d.ts +15 -0
  26. package/dist/behavior-signals.js +11 -0
  27. package/dist/behavior-signals.js.map +1 -0
  28. package/dist/bootstrap.d.ts +46 -0
  29. package/dist/bootstrap.js +9 -0
  30. package/dist/bootstrap.js.map +1 -0
  31. package/dist/boxes.d.ts +93 -0
  32. package/dist/boxes.js +14 -0
  33. package/dist/boxes.js.map +1 -0
  34. package/dist/buffer.d.ts +22 -0
  35. package/dist/buffer.js +9 -0
  36. package/dist/buffer.js.map +1 -0
  37. package/dist/calibration.d.ts +81 -0
  38. package/dist/calibration.js +239 -0
  39. package/dist/calibration.js.map +1 -0
  40. package/dist/causal-behavior.d.ts +79 -0
  41. package/dist/causal-behavior.js +190 -0
  42. package/dist/causal-behavior.js.map +1 -0
  43. package/dist/causal-chain.d.ts +61 -0
  44. package/dist/causal-chain.js +24 -0
  45. package/dist/causal-chain.js.map +1 -0
  46. package/dist/causal-consolidation.d.ts +71 -0
  47. package/dist/causal-consolidation.js +211 -0
  48. package/dist/causal-consolidation.js.map +1 -0
  49. package/dist/causal-retrieval.d.ts +44 -0
  50. package/dist/causal-retrieval.js +184 -0
  51. package/dist/causal-retrieval.js.map +1 -0
  52. package/dist/causal-trajectory-graph.d.ts +13 -0
  53. package/dist/causal-trajectory-graph.js +59 -0
  54. package/dist/causal-trajectory-graph.js.map +1 -0
  55. package/dist/causal-trajectory.d.ts +68 -0
  56. package/dist/causal-trajectory.js +18 -0
  57. package/dist/causal-trajectory.js.map +1 -0
  58. package/dist/chunk-2CJCWDMR.js +87 -0
  59. package/dist/chunk-2CJCWDMR.js.map +1 -0
  60. package/dist/chunk-2NMMFZ5T.js +216 -0
  61. package/dist/chunk-2NMMFZ5T.js.map +1 -0
  62. package/dist/chunk-2PO5ZRKV.js +103 -0
  63. package/dist/chunk-2PO5ZRKV.js.map +1 -0
  64. package/dist/chunk-3QKK7QOS.js +154 -0
  65. package/dist/chunk-3QKK7QOS.js.map +1 -0
  66. package/dist/chunk-3SLRNYNG.js +26 -0
  67. package/dist/chunk-3SLRNYNG.js.map +1 -0
  68. package/dist/chunk-4A24LIM2.js +68 -0
  69. package/dist/chunk-4A24LIM2.js.map +1 -0
  70. package/dist/chunk-6HZ6AO2P.js +164 -0
  71. package/dist/chunk-6HZ6AO2P.js.map +1 -0
  72. package/dist/chunk-763GUIOU.js +302 -0
  73. package/dist/chunk-763GUIOU.js.map +1 -0
  74. package/dist/chunk-AAI7JARD.js +173 -0
  75. package/dist/chunk-AAI7JARD.js.map +1 -0
  76. package/dist/chunk-B7LOFDVE.js +112 -0
  77. package/dist/chunk-B7LOFDVE.js.map +1 -0
  78. package/dist/chunk-BDFZXRSO.js +318 -0
  79. package/dist/chunk-BDFZXRSO.js.map +1 -0
  80. package/dist/chunk-BOUYNNYD.js +707 -0
  81. package/dist/chunk-BOUYNNYD.js.map +1 -0
  82. package/dist/chunk-BRK4ODMI.js +60 -0
  83. package/dist/chunk-BRK4ODMI.js.map +1 -0
  84. package/dist/chunk-C6QPK5GG.js +111 -0
  85. package/dist/chunk-C6QPK5GG.js.map +1 -0
  86. package/dist/chunk-C7VW7C3F.js +117 -0
  87. package/dist/chunk-C7VW7C3F.js.map +1 -0
  88. package/dist/chunk-CDW777AI.js +621 -0
  89. package/dist/chunk-CDW777AI.js.map +1 -0
  90. package/dist/chunk-CULXMQJH.js +185 -0
  91. package/dist/chunk-CULXMQJH.js.map +1 -0
  92. package/dist/chunk-CXWFUJR2.js +1203 -0
  93. package/dist/chunk-CXWFUJR2.js.map +1 -0
  94. package/dist/chunk-DGXUHMOV.js +61 -0
  95. package/dist/chunk-DGXUHMOV.js.map +1 -0
  96. package/dist/chunk-DM2T26WE.js +61 -0
  97. package/dist/chunk-DM2T26WE.js.map +1 -0
  98. package/dist/chunk-DORBM6OB.js +81 -0
  99. package/dist/chunk-DORBM6OB.js.map +1 -0
  100. package/dist/chunk-DT5TVLJE.js +32 -0
  101. package/dist/chunk-DT5TVLJE.js.map +1 -0
  102. package/dist/chunk-EEQLFRUM.js +89 -0
  103. package/dist/chunk-EEQLFRUM.js.map +1 -0
  104. package/dist/chunk-EQINRHYR.js +672 -0
  105. package/dist/chunk-EQINRHYR.js.map +1 -0
  106. package/dist/chunk-ESSMF2FR.js +146 -0
  107. package/dist/chunk-ESSMF2FR.js.map +1 -0
  108. package/dist/chunk-ETOW6ACV.js +158 -0
  109. package/dist/chunk-ETOW6ACV.js.map +1 -0
  110. package/dist/chunk-FYIYMQ5N.js +221 -0
  111. package/dist/chunk-FYIYMQ5N.js.map +1 -0
  112. package/dist/chunk-G3AG3KZN.js +78 -0
  113. package/dist/chunk-G3AG3KZN.js.map +1 -0
  114. package/dist/chunk-GJR6D6KC.js +61 -0
  115. package/dist/chunk-GJR6D6KC.js.map +1 -0
  116. package/dist/chunk-GPGBSNKM.js +380 -0
  117. package/dist/chunk-GPGBSNKM.js.map +1 -0
  118. package/dist/chunk-H63EDPFJ.js +57 -0
  119. package/dist/chunk-H63EDPFJ.js.map +1 -0
  120. package/dist/chunk-HG2NKWR2.js +185 -0
  121. package/dist/chunk-HG2NKWR2.js.map +1 -0
  122. package/dist/chunk-HL4DB7TO.js +13 -0
  123. package/dist/chunk-HL4DB7TO.js.map +1 -0
  124. package/dist/chunk-HLBYLYRD.js +346 -0
  125. package/dist/chunk-HLBYLYRD.js.map +1 -0
  126. package/dist/chunk-HLXVTBF3.js +109 -0
  127. package/dist/chunk-HLXVTBF3.js.map +1 -0
  128. package/dist/chunk-IFFFR3MR.js +68 -0
  129. package/dist/chunk-IFFFR3MR.js.map +1 -0
  130. package/dist/chunk-ISY75RLM.js +1027 -0
  131. package/dist/chunk-ISY75RLM.js.map +1 -0
  132. package/dist/chunk-IZME7KW2.js +1886 -0
  133. package/dist/chunk-IZME7KW2.js.map +1 -0
  134. package/dist/chunk-J3BT33K7.js +720 -0
  135. package/dist/chunk-J3BT33K7.js.map +1 -0
  136. package/dist/chunk-J47FNDR7.js +113 -0
  137. package/dist/chunk-J47FNDR7.js.map +1 -0
  138. package/dist/chunk-JWPLJLDU.js +63 -0
  139. package/dist/chunk-JWPLJLDU.js.map +1 -0
  140. package/dist/chunk-K6WK37A6.js +865 -0
  141. package/dist/chunk-K6WK37A6.js.map +1 -0
  142. package/dist/chunk-KL4CP4SB.js +130 -0
  143. package/dist/chunk-KL4CP4SB.js.map +1 -0
  144. package/dist/chunk-KT4NEUNF.js +315 -0
  145. package/dist/chunk-KT4NEUNF.js.map +1 -0
  146. package/dist/chunk-KWBU5S5U.js +42 -0
  147. package/dist/chunk-KWBU5S5U.js.map +1 -0
  148. package/dist/chunk-L5RPWGFK.js +59 -0
  149. package/dist/chunk-L5RPWGFK.js.map +1 -0
  150. package/dist/chunk-L7WO3MZ4.js +128 -0
  151. package/dist/chunk-L7WO3MZ4.js.map +1 -0
  152. package/dist/chunk-LIRZNNUP.js +74 -0
  153. package/dist/chunk-LIRZNNUP.js.map +1 -0
  154. package/dist/chunk-LK6SGL53.js +22 -0
  155. package/dist/chunk-LK6SGL53.js.map +1 -0
  156. package/dist/chunk-LOBRX7VD.js +200 -0
  157. package/dist/chunk-LOBRX7VD.js.map +1 -0
  158. package/dist/chunk-LPSF4OQH.js +47 -0
  159. package/dist/chunk-LPSF4OQH.js.map +1 -0
  160. package/dist/chunk-LU3GQNDQ.js +152 -0
  161. package/dist/chunk-LU3GQNDQ.js.map +1 -0
  162. package/dist/chunk-M5KEYE5E.js +350 -0
  163. package/dist/chunk-M5KEYE5E.js.map +1 -0
  164. package/dist/chunk-M62O4P4T.js +41 -0
  165. package/dist/chunk-M62O4P4T.js.map +1 -0
  166. package/dist/chunk-MARWOCVP.js +48 -0
  167. package/dist/chunk-MARWOCVP.js.map +1 -0
  168. package/dist/chunk-MDDAA2AO.js +925 -0
  169. package/dist/chunk-MDDAA2AO.js.map +1 -0
  170. package/dist/chunk-MWGVGUIS.js +198 -0
  171. package/dist/chunk-MWGVGUIS.js.map +1 -0
  172. package/dist/chunk-N5AKDXAI.js +74 -0
  173. package/dist/chunk-N5AKDXAI.js.map +1 -0
  174. package/dist/chunk-NGAVDO7E.js +115 -0
  175. package/dist/chunk-NGAVDO7E.js.map +1 -0
  176. package/dist/chunk-NTTLPF7F.js +283 -0
  177. package/dist/chunk-NTTLPF7F.js.map +1 -0
  178. package/dist/chunk-ONRU4L2N.js +240 -0
  179. package/dist/chunk-ONRU4L2N.js.map +1 -0
  180. package/dist/chunk-ORZMT74A.js +209 -0
  181. package/dist/chunk-ORZMT74A.js.map +1 -0
  182. package/dist/chunk-OTAVQCSF.js +268 -0
  183. package/dist/chunk-OTAVQCSF.js.map +1 -0
  184. package/dist/chunk-PGK3VUHN.js +160 -0
  185. package/dist/chunk-PGK3VUHN.js.map +1 -0
  186. package/dist/chunk-Q6FETXJA.js +1362 -0
  187. package/dist/chunk-Q6FETXJA.js.map +1 -0
  188. package/dist/chunk-QANCTXQF.js +271 -0
  189. package/dist/chunk-QANCTXQF.js.map +1 -0
  190. package/dist/chunk-QCCCQT3O.js +189 -0
  191. package/dist/chunk-QCCCQT3O.js.map +1 -0
  192. package/dist/chunk-QDOSNLB4.js +1048 -0
  193. package/dist/chunk-QDOSNLB4.js.map +1 -0
  194. package/dist/chunk-QFQVZOGA.js +2168 -0
  195. package/dist/chunk-QFQVZOGA.js.map +1 -0
  196. package/dist/chunk-QPKFPHOO.js +178 -0
  197. package/dist/chunk-QPKFPHOO.js.map +1 -0
  198. package/dist/chunk-QSVPYQPG.js +268 -0
  199. package/dist/chunk-QSVPYQPG.js.map +1 -0
  200. package/dist/chunk-QWUUMMIK.js +3045 -0
  201. package/dist/chunk-QWUUMMIK.js.map +1 -0
  202. package/dist/chunk-QY2BHY5O.js +2378 -0
  203. package/dist/chunk-QY2BHY5O.js.map +1 -0
  204. package/dist/chunk-SCHEKPYH.js +349 -0
  205. package/dist/chunk-SCHEKPYH.js.map +1 -0
  206. package/dist/chunk-SCU65EZI.js +15 -0
  207. package/dist/chunk-SCU65EZI.js.map +1 -0
  208. package/dist/chunk-T4WRIV2C.js +170 -0
  209. package/dist/chunk-T4WRIV2C.js.map +1 -0
  210. package/dist/chunk-TKO4HZCK.js +1852 -0
  211. package/dist/chunk-TKO4HZCK.js.map +1 -0
  212. package/dist/chunk-TP4FZJIZ.js +93 -0
  213. package/dist/chunk-TP4FZJIZ.js.map +1 -0
  214. package/dist/chunk-TPB3I2AC.js +403 -0
  215. package/dist/chunk-TPB3I2AC.js.map +1 -0
  216. package/dist/chunk-TVVVQQAK.js +1431 -0
  217. package/dist/chunk-TVVVQQAK.js.map +1 -0
  218. package/dist/chunk-U4PV25RD.js +14 -0
  219. package/dist/chunk-U4PV25RD.js.map +1 -0
  220. package/dist/chunk-UCYSTFZR.js +284 -0
  221. package/dist/chunk-UCYSTFZR.js.map +1 -0
  222. package/dist/chunk-UHGBNIOS.js +205 -0
  223. package/dist/chunk-UHGBNIOS.js.map +1 -0
  224. package/dist/chunk-UIYZ5T3I.js +108 -0
  225. package/dist/chunk-UIYZ5T3I.js.map +1 -0
  226. package/dist/chunk-UV2FO7J4.js +747 -0
  227. package/dist/chunk-UV2FO7J4.js.map +1 -0
  228. package/dist/chunk-UZB5KHKX.js +63 -0
  229. package/dist/chunk-UZB5KHKX.js.map +1 -0
  230. package/dist/chunk-V3RXWQIE.js +626 -0
  231. package/dist/chunk-V3RXWQIE.js.map +1 -0
  232. package/dist/chunk-V4YC4LUK.js +444 -0
  233. package/dist/chunk-V4YC4LUK.js.map +1 -0
  234. package/dist/chunk-VEWZZM3H.js +133 -0
  235. package/dist/chunk-VEWZZM3H.js.map +1 -0
  236. package/dist/chunk-WWIQTB2Y.js +98 -0
  237. package/dist/chunk-WWIQTB2Y.js.map +1 -0
  238. package/dist/chunk-X7XN6YU4.js +24 -0
  239. package/dist/chunk-X7XN6YU4.js.map +1 -0
  240. package/dist/chunk-XKECPATV.js +202 -0
  241. package/dist/chunk-XKECPATV.js.map +1 -0
  242. package/dist/chunk-XYIK4LF6.js +75 -0
  243. package/dist/chunk-XYIK4LF6.js.map +1 -0
  244. package/dist/chunk-Y27UJK6V.js +39 -0
  245. package/dist/chunk-Y27UJK6V.js.map +1 -0
  246. package/dist/chunk-Y4Z4I6WK.js +9 -0
  247. package/dist/chunk-Y4Z4I6WK.js.map +1 -0
  248. package/dist/chunk-YAPUAHAY.js +10761 -0
  249. package/dist/chunk-YAPUAHAY.js.map +1 -0
  250. package/dist/chunk-YAZNBMNF.js +92 -0
  251. package/dist/chunk-YAZNBMNF.js.map +1 -0
  252. package/dist/chunk-YCN4BVDK.js +66 -0
  253. package/dist/chunk-YCN4BVDK.js.map +1 -0
  254. package/dist/chunk-YNCQ7E4M.js +388 -0
  255. package/dist/chunk-YNCQ7E4M.js.map +1 -0
  256. package/dist/chunk-YNI4S5WT.js +143 -0
  257. package/dist/chunk-YNI4S5WT.js.map +1 -0
  258. package/dist/chunk-YRMVARQP.js +406 -0
  259. package/dist/chunk-YRMVARQP.js.map +1 -0
  260. package/dist/chunk-Z5AAYHUC.js +79 -0
  261. package/dist/chunk-Z5AAYHUC.js.map +1 -0
  262. package/dist/chunk-Z5LAYHGJ.js +15 -0
  263. package/dist/chunk-Z5LAYHGJ.js.map +1 -0
  264. package/dist/chunk-ZJLY4QSU.js +823 -0
  265. package/dist/chunk-ZJLY4QSU.js.map +1 -0
  266. package/dist/chunk-ZKYI7UVO.js +276 -0
  267. package/dist/chunk-ZKYI7UVO.js.map +1 -0
  268. package/dist/chunk-ZPKBYX2F.js +297 -0
  269. package/dist/chunk-ZPKBYX2F.js.map +1 -0
  270. package/dist/chunking.d.ts +48 -0
  271. package/dist/chunking.js +11 -0
  272. package/dist/chunking.js.map +1 -0
  273. package/dist/cli.d.ts +1162 -0
  274. package/dist/cli.js +7187 -0
  275. package/dist/cli.js.map +1 -0
  276. package/dist/commitment-ledger.d.ts +83 -0
  277. package/dist/commitment-ledger.js +19 -0
  278. package/dist/commitment-ledger.js.map +1 -0
  279. package/dist/compression-optimizer.d.ts +37 -0
  280. package/dist/compression-optimizer.js +13 -0
  281. package/dist/compression-optimizer.js.map +1 -0
  282. package/dist/config.d.ts +6 -0
  283. package/dist/config.js +12 -0
  284. package/dist/config.js.map +1 -0
  285. package/dist/cue-anchors.d.ts +50 -0
  286. package/dist/cue-anchors.js +15 -0
  287. package/dist/cue-anchors.js.map +1 -0
  288. package/dist/dashboard-runtime.d.ts +46 -0
  289. package/dist/dashboard-runtime.js +10 -0
  290. package/dist/dashboard-runtime.js.map +1 -0
  291. package/dist/day-summary.d.ts +6 -0
  292. package/dist/day-summary.js +10 -0
  293. package/dist/day-summary.js.map +1 -0
  294. package/dist/delinearize.d.ts +34 -0
  295. package/dist/delinearize.js +11 -0
  296. package/dist/delinearize.js.map +1 -0
  297. package/dist/embedding-fallback.d.ts +22 -0
  298. package/dist/embedding-fallback.js +8 -0
  299. package/dist/embedding-fallback.js.map +1 -0
  300. package/dist/engine-P26JFSVY.js +19 -0
  301. package/dist/engine-P26JFSVY.js.map +1 -0
  302. package/dist/entity-retrieval.d.ts +23 -0
  303. package/dist/entity-retrieval.js +24 -0
  304. package/dist/entity-retrieval.js.map +1 -0
  305. package/dist/evals.d.ts +282 -0
  306. package/dist/evals.js +32 -0
  307. package/dist/evals.js.map +1 -0
  308. package/dist/explicit-capture.d.ts +60 -0
  309. package/dist/explicit-capture.js +23 -0
  310. package/dist/explicit-capture.js.map +1 -0
  311. package/dist/extraction.d.ts +141 -0
  312. package/dist/extraction.js +22 -0
  313. package/dist/extraction.js.map +1 -0
  314. package/dist/fallback-llm.d.ts +95 -0
  315. package/dist/fallback-llm.js +12 -0
  316. package/dist/fallback-llm.js.map +1 -0
  317. package/dist/graph-dashboard-diff.d.ts +12 -0
  318. package/dist/graph-dashboard-diff.js +8 -0
  319. package/dist/graph-dashboard-diff.js.map +1 -0
  320. package/dist/graph-dashboard-key.d.ts +5 -0
  321. package/dist/graph-dashboard-key.js +7 -0
  322. package/dist/graph-dashboard-key.js.map +1 -0
  323. package/dist/graph-dashboard-parser.d.ts +20 -0
  324. package/dist/graph-dashboard-parser.js +8 -0
  325. package/dist/graph-dashboard-parser.js.map +1 -0
  326. package/dist/graph.d.ts +157 -0
  327. package/dist/graph.js +27 -0
  328. package/dist/graph.js.map +1 -0
  329. package/dist/harmonic-retrieval.d.ts +27 -0
  330. package/dist/harmonic-retrieval.js +12 -0
  331. package/dist/harmonic-retrieval.js.map +1 -0
  332. package/dist/himem.d.ts +23 -0
  333. package/dist/himem.js +7 -0
  334. package/dist/himem.js.map +1 -0
  335. package/dist/hygiene.d.ts +24 -0
  336. package/dist/hygiene.js +9 -0
  337. package/dist/hygiene.js.map +1 -0
  338. package/dist/identity-continuity.d.ts +17 -0
  339. package/dist/identity-continuity.js +19 -0
  340. package/dist/identity-continuity.js.map +1 -0
  341. package/dist/importance.d.ts +25 -0
  342. package/dist/importance.js +11 -0
  343. package/dist/importance.js.map +1 -0
  344. package/dist/index.d.ts +923 -0
  345. package/dist/index.js +2512 -0
  346. package/dist/index.js.map +1 -0
  347. package/dist/intent.d.ts +8 -0
  348. package/dist/intent.js +13 -0
  349. package/dist/intent.js.map +1 -0
  350. package/dist/json-extract.d.ts +14 -0
  351. package/dist/json-extract.js +9 -0
  352. package/dist/json-extract.js.map +1 -0
  353. package/dist/json-store.d.ts +5 -0
  354. package/dist/json-store.js +11 -0
  355. package/dist/json-store.js.map +1 -0
  356. package/dist/legacy-hook-compat.d.ts +3 -0
  357. package/dist/legacy-hook-compat.js +35 -0
  358. package/dist/legacy-hook-compat.js.map +1 -0
  359. package/dist/lifecycle.d.ts +52 -0
  360. package/dist/lifecycle.js +21 -0
  361. package/dist/lifecycle.js.map +1 -0
  362. package/dist/local-llm.d.ts +154 -0
  363. package/dist/local-llm.js +10 -0
  364. package/dist/local-llm.js.map +1 -0
  365. package/dist/logger.d.ts +15 -0
  366. package/dist/logger.js +9 -0
  367. package/dist/logger.js.map +1 -0
  368. package/dist/memory-action-policy.d.ts +13 -0
  369. package/dist/memory-action-policy.js +7 -0
  370. package/dist/memory-action-policy.js.map +1 -0
  371. package/dist/memory-cache.d.ts +35 -0
  372. package/dist/memory-cache.js +37 -0
  373. package/dist/memory-cache.js.map +1 -0
  374. package/dist/memory-lifecycle-ledger-utils.d.ts +13 -0
  375. package/dist/memory-lifecycle-ledger-utils.js +23 -0
  376. package/dist/memory-lifecycle-ledger-utils.js.map +1 -0
  377. package/dist/memory-projection-format.d.ts +4 -0
  378. package/dist/memory-projection-format.js +9 -0
  379. package/dist/memory-projection-format.js.map +1 -0
  380. package/dist/memory-projection-store-NxMkbocT.d.ts +221 -0
  381. package/dist/memory-projection-store.d.ts +3 -0
  382. package/dist/memory-projection-store.js +31 -0
  383. package/dist/memory-projection-store.js.map +1 -0
  384. package/dist/model-registry.d.ts +60 -0
  385. package/dist/model-registry.js +8 -0
  386. package/dist/model-registry.js.map +1 -0
  387. package/dist/native-knowledge.d.ts +94 -0
  388. package/dist/native-knowledge.js +26 -0
  389. package/dist/native-knowledge.js.map +1 -0
  390. package/dist/negative.d.ts +26 -0
  391. package/dist/negative.js +8 -0
  392. package/dist/negative.js.map +1 -0
  393. package/dist/objective-state-writers.d.ts +22 -0
  394. package/dist/objective-state-writers.js +313 -0
  395. package/dist/objective-state-writers.js.map +1 -0
  396. package/dist/objective-state.d.ts +75 -0
  397. package/dist/objective-state.js +17 -0
  398. package/dist/objective-state.js.map +1 -0
  399. package/dist/openai-chat-compat.d.ts +13 -0
  400. package/dist/openai-chat-compat.js +11 -0
  401. package/dist/openai-chat-compat.js.map +1 -0
  402. package/dist/operator-toolkit.d.ts +304 -0
  403. package/dist/operator-toolkit.js +41 -0
  404. package/dist/operator-toolkit.js.map +1 -0
  405. package/dist/opik-exporter.d.ts +72 -0
  406. package/dist/opik-exporter.js +361 -0
  407. package/dist/opik-exporter.js.map +1 -0
  408. package/dist/orchestrator-zTa-Qo-1.d.ts +1104 -0
  409. package/dist/orchestrator.d.ts +21 -0
  410. package/dist/orchestrator.js +145 -0
  411. package/dist/orchestrator.js.map +1 -0
  412. package/dist/policy-runtime.d.ts +37 -0
  413. package/dist/policy-runtime.js +13 -0
  414. package/dist/policy-runtime.js.map +1 -0
  415. package/dist/port-C1GZFv8h.d.ts +41 -0
  416. package/dist/profiling.d.ts +80 -0
  417. package/dist/profiling.js +10 -0
  418. package/dist/profiling.js.map +1 -0
  419. package/dist/qmd-recall-cache.d.ts +29 -0
  420. package/dist/qmd-recall-cache.js +13 -0
  421. package/dist/qmd-recall-cache.js.map +1 -0
  422. package/dist/qmd.d.ts +105 -0
  423. package/dist/qmd.js +13 -0
  424. package/dist/qmd.js.map +1 -0
  425. package/dist/recall-qos.d.ts +33 -0
  426. package/dist/recall-qos.js +10 -0
  427. package/dist/recall-qos.js.map +1 -0
  428. package/dist/recall-query-policy.d.ts +20 -0
  429. package/dist/recall-query-policy.js +11 -0
  430. package/dist/recall-query-policy.js.map +1 -0
  431. package/dist/recall-state.d.ts +113 -0
  432. package/dist/recall-state.js +12 -0
  433. package/dist/recall-state.js.map +1 -0
  434. package/dist/recall-tokenization.d.ts +4 -0
  435. package/dist/recall-tokenization.js +9 -0
  436. package/dist/recall-tokenization.js.map +1 -0
  437. package/dist/reconstruct.d.ts +16 -0
  438. package/dist/reconstruct.js +7 -0
  439. package/dist/reconstruct.js.map +1 -0
  440. package/dist/release-changelog.d.ts +7 -0
  441. package/dist/release-changelog.js +30 -0
  442. package/dist/release-changelog.js.map +1 -0
  443. package/dist/relevance.d.ts +18 -0
  444. package/dist/relevance.js +8 -0
  445. package/dist/relevance.js.map +1 -0
  446. package/dist/rerank.d.ts +57 -0
  447. package/dist/rerank.js +11 -0
  448. package/dist/rerank.js.map +1 -0
  449. package/dist/resolve-provider-secret.d.ts +16 -0
  450. package/dist/resolve-provider-secret.js +11 -0
  451. package/dist/resolve-provider-secret.js.map +1 -0
  452. package/dist/resume-bundles.d.ts +66 -0
  453. package/dist/resume-bundles.js +27 -0
  454. package/dist/resume-bundles.js.map +1 -0
  455. package/dist/retrieval-agents.d.ts +129 -0
  456. package/dist/retrieval-agents.js +23 -0
  457. package/dist/retrieval-agents.js.map +1 -0
  458. package/dist/retrieval.d.ts +19 -0
  459. package/dist/retrieval.js +10 -0
  460. package/dist/retrieval.js.map +1 -0
  461. package/dist/sanitize.d.ts +9 -0
  462. package/dist/sanitize.js +9 -0
  463. package/dist/sanitize.js.map +1 -0
  464. package/dist/schemas.d.ts +688 -0
  465. package/dist/schemas.js +51 -0
  466. package/dist/schemas.js.map +1 -0
  467. package/dist/sdk-compat.d.ts +21 -0
  468. package/dist/sdk-compat.js +28 -0
  469. package/dist/sdk-compat.js.map +1 -0
  470. package/dist/semantic-consolidation.d.ts +42 -0
  471. package/dist/semantic-consolidation.js +12 -0
  472. package/dist/semantic-consolidation.js.map +1 -0
  473. package/dist/semantic-rule-promotion.d.ts +28 -0
  474. package/dist/semantic-rule-promotion.js +17 -0
  475. package/dist/semantic-rule-promotion.js.map +1 -0
  476. package/dist/semantic-rule-verifier.d.ts +19 -0
  477. package/dist/semantic-rule-verifier.js +18 -0
  478. package/dist/semantic-rule-verifier.js.map +1 -0
  479. package/dist/session-integrity.d.ts +67 -0
  480. package/dist/session-integrity.js +11 -0
  481. package/dist/session-integrity.js.map +1 -0
  482. package/dist/session-observer-bands.d.ts +6 -0
  483. package/dist/session-observer-bands.js +9 -0
  484. package/dist/session-observer-bands.js.map +1 -0
  485. package/dist/session-observer-state.d.ts +40 -0
  486. package/dist/session-observer-state.js +11 -0
  487. package/dist/session-observer-state.js.map +1 -0
  488. package/dist/signal.d.ts +6 -0
  489. package/dist/signal.js +9 -0
  490. package/dist/signal.js.map +1 -0
  491. package/dist/storage.d.ts +453 -0
  492. package/dist/storage.js +24 -0
  493. package/dist/storage.js.map +1 -0
  494. package/dist/store-contract.d.ts +10 -0
  495. package/dist/store-contract.js +21 -0
  496. package/dist/store-contract.js.map +1 -0
  497. package/dist/summarizer.d.ts +35 -0
  498. package/dist/summarizer.js +17 -0
  499. package/dist/summarizer.js.map +1 -0
  500. package/dist/summary-snapshot.d.ts +8 -0
  501. package/dist/summary-snapshot.js +13 -0
  502. package/dist/summary-snapshot.js.map +1 -0
  503. package/dist/temporal-index.d.ts +139 -0
  504. package/dist/temporal-index.js +29 -0
  505. package/dist/temporal-index.js.map +1 -0
  506. package/dist/threading.d.ts +62 -0
  507. package/dist/threading.js +8 -0
  508. package/dist/threading.js.map +1 -0
  509. package/dist/tier-migration.d.ts +44 -0
  510. package/dist/tier-migration.js +7 -0
  511. package/dist/tier-migration.js.map +1 -0
  512. package/dist/tier-routing.d.ts +21 -0
  513. package/dist/tier-routing.js +10 -0
  514. package/dist/tier-routing.js.map +1 -0
  515. package/dist/tmt.d.ts +79 -0
  516. package/dist/tmt.js +29 -0
  517. package/dist/tmt.js.map +1 -0
  518. package/dist/tokens.d.ts +24 -0
  519. package/dist/tokens.js +21 -0
  520. package/dist/tokens.js.map +1 -0
  521. package/dist/topics.d.ts +29 -0
  522. package/dist/topics.js +9 -0
  523. package/dist/topics.js.map +1 -0
  524. package/dist/transcript.d.ts +171 -0
  525. package/dist/transcript.js +9 -0
  526. package/dist/transcript.js.map +1 -0
  527. package/dist/trust-zones.d.ts +170 -0
  528. package/dist/trust-zones.js +32 -0
  529. package/dist/trust-zones.js.map +1 -0
  530. package/dist/types.d.ts +1243 -0
  531. package/dist/types.js +9 -0
  532. package/dist/types.js.map +1 -0
  533. package/dist/utility-learner.d.ts +59 -0
  534. package/dist/utility-learner.js +17 -0
  535. package/dist/utility-learner.js.map +1 -0
  536. package/dist/utility-runtime.d.ts +21 -0
  537. package/dist/utility-runtime.js +16 -0
  538. package/dist/utility-runtime.js.map +1 -0
  539. package/dist/utility-telemetry.d.ts +68 -0
  540. package/dist/utility-telemetry.js +17 -0
  541. package/dist/utility-telemetry.js.map +1 -0
  542. package/dist/verified-recall.d.ts +17 -0
  543. package/dist/verified-recall.js +19 -0
  544. package/dist/verified-recall.js.map +1 -0
  545. package/dist/version-utils.d.ts +4 -0
  546. package/dist/version-utils.js +7 -0
  547. package/dist/version-utils.js.map +1 -0
  548. package/dist/work-product-ledger.d.ts +65 -0
  549. package/dist/work-product-ledger.js +18 -0
  550. package/dist/work-product-ledger.js.map +1 -0
  551. package/package.json +58 -0
@@ -0,0 +1,209 @@
1
+ import {
2
+ countRecallTokenOverlap,
3
+ normalizeRecallTokens
4
+ } from "./chunk-DT5TVLJE.js";
5
+ import {
6
+ assertIsoRecordedAt,
7
+ assertSafePathSegment,
8
+ assertString,
9
+ isRecord,
10
+ optionalString,
11
+ optionalStringArray,
12
+ recordStoreDay,
13
+ validateStringRecord
14
+ } from "./chunk-DGXUHMOV.js";
15
+ import {
16
+ listJsonFiles,
17
+ readJsonFile
18
+ } from "./chunk-LPSF4OQH.js";
19
+
20
+ // src/causal-trajectory.ts
21
+ import path from "path";
22
+ import { mkdir, writeFile } from "fs/promises";
23
+ function validateMetadata(raw) {
24
+ return validateStringRecord(raw, "metadata");
25
+ }
26
+ function resolveCausalTrajectoryStoreDir(memoryDir, overrideDir) {
27
+ if (typeof overrideDir === "string" && overrideDir.trim().length > 0) {
28
+ return overrideDir.trim();
29
+ }
30
+ return path.join(memoryDir, "state", "causal-trajectories");
31
+ }
32
+ function validateCausalTrajectoryRecord(raw) {
33
+ if (!isRecord(raw)) throw new Error("causal trajectory record must be an object");
34
+ if (raw.schemaVersion !== 1) throw new Error("schemaVersion must be 1");
35
+ const outcomeKind = assertString(raw.outcomeKind, "outcomeKind");
36
+ if (!["success", "failure", "partial", "unknown"].includes(outcomeKind)) {
37
+ throw new Error("outcomeKind must be one of success|failure|partial|unknown");
38
+ }
39
+ return {
40
+ schemaVersion: 1,
41
+ trajectoryId: assertSafePathSegment(assertString(raw.trajectoryId, "trajectoryId"), "trajectoryId"),
42
+ recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, "recordedAt")),
43
+ sessionKey: assertString(raw.sessionKey, "sessionKey"),
44
+ goal: assertString(raw.goal, "goal"),
45
+ actionSummary: assertString(raw.actionSummary, "actionSummary"),
46
+ observationSummary: assertString(raw.observationSummary, "observationSummary"),
47
+ outcomeKind,
48
+ outcomeSummary: assertString(raw.outcomeSummary, "outcomeSummary"),
49
+ followUpSummary: optionalString(raw.followUpSummary),
50
+ objectiveStateSnapshotRefs: optionalStringArray(raw.objectiveStateSnapshotRefs, "objectiveStateSnapshotRefs"),
51
+ entityRefs: optionalStringArray(raw.entityRefs, "entityRefs"),
52
+ tags: optionalStringArray(raw.tags, "tags"),
53
+ metadata: validateMetadata(raw.metadata)
54
+ };
55
+ }
56
+ async function recordCausalTrajectory(options) {
57
+ const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);
58
+ const validated = validateCausalTrajectoryRecord(options.record);
59
+ const day = recordStoreDay(validated.recordedAt);
60
+ const trajectoriesDir = path.join(rootDir, "trajectories", day);
61
+ const filePath = path.join(trajectoriesDir, `${validated.trajectoryId}.json`);
62
+ await mkdir(trajectoriesDir, { recursive: true });
63
+ await writeFile(filePath, JSON.stringify(validated, null, 2), "utf8");
64
+ if (options.actionGraphRecallEnabled === true) {
65
+ try {
66
+ const { appendCausalTrajectoryGraphEdges } = await import("./causal-trajectory-graph.js");
67
+ await appendCausalTrajectoryGraphEdges({
68
+ memoryDir: options.memoryDir,
69
+ record: validated
70
+ });
71
+ } catch (error) {
72
+ const { log } = await import("./logger.js");
73
+ log.warn(
74
+ `[causal-trajectory] action-conditioned graph write failed for ${validated.trajectoryId}: ${error instanceof Error ? error.message : String(error)}`
75
+ );
76
+ }
77
+ }
78
+ if (options.cmcEnabled === true) {
79
+ try {
80
+ const { stitchCausalChain } = await import("./causal-chain.js");
81
+ await stitchCausalChain({
82
+ memoryDir: options.memoryDir,
83
+ causalTrajectoryStoreDir: options.causalTrajectoryStoreDir,
84
+ newTrajectory: validated,
85
+ config: {
86
+ lookbackDays: options.cmcStitchLookbackDays ?? 7,
87
+ minScore: options.cmcStitchMinScore ?? 2.5,
88
+ maxEdgesPerTrajectory: options.cmcStitchMaxEdgesPerTrajectory ?? 3
89
+ }
90
+ });
91
+ } catch (error) {
92
+ const { log } = await import("./logger.js");
93
+ log.warn(
94
+ `[cmc] causal chain stitching failed for ${validated.trajectoryId}: ${error instanceof Error ? error.message : String(error)}`
95
+ );
96
+ }
97
+ }
98
+ return filePath;
99
+ }
100
+ async function readCausalTrajectoryRecords(options) {
101
+ const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);
102
+ const files = await listJsonFiles(path.join(rootDir, "trajectories"));
103
+ const trajectories = [];
104
+ const invalidTrajectories = [];
105
+ for (const filePath of files) {
106
+ try {
107
+ trajectories.push(validateCausalTrajectoryRecord(await readJsonFile(filePath)));
108
+ } catch (error) {
109
+ invalidTrajectories.push({
110
+ path: filePath,
111
+ error: error instanceof Error ? error.message : String(error)
112
+ });
113
+ }
114
+ }
115
+ return { files, trajectories, invalidTrajectories };
116
+ }
117
+ async function getCausalTrajectoryStoreStatus(options) {
118
+ const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);
119
+ const trajectoriesDir = path.join(rootDir, "trajectories");
120
+ const { files, trajectories, invalidTrajectories } = await readCausalTrajectoryRecords(options);
121
+ trajectories.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));
122
+ const byOutcome = {};
123
+ for (const trajectory of trajectories) {
124
+ byOutcome[trajectory.outcomeKind] = (byOutcome[trajectory.outcomeKind] ?? 0) + 1;
125
+ }
126
+ return {
127
+ enabled: options.enabled,
128
+ rootDir,
129
+ trajectoriesDir,
130
+ trajectories: {
131
+ total: files.length,
132
+ valid: trajectories.length,
133
+ invalid: invalidTrajectories.length,
134
+ byOutcome,
135
+ latestTrajectoryId: trajectories[0]?.trajectoryId,
136
+ latestRecordedAt: trajectories[0]?.recordedAt,
137
+ latestSessionKey: trajectories[0]?.sessionKey
138
+ },
139
+ latestTrajectory: trajectories[0],
140
+ invalidTrajectories
141
+ };
142
+ }
143
+ function lexicalScoreCausalTrajectoryRecord(record, queryTokens) {
144
+ const weightedFields = [
145
+ ["goal", record.goal, 4],
146
+ ["action", record.actionSummary, 3],
147
+ ["observation", record.observationSummary, 3],
148
+ ["outcome", record.outcomeSummary, 3],
149
+ ["follow_up", record.followUpSummary, 2],
150
+ ["outcome_kind", record.outcomeKind, 1],
151
+ ["tags", record.tags?.join(" "), 2],
152
+ ["entity_refs", record.entityRefs?.join(" "), 2],
153
+ ["objective_state_refs", record.objectiveStateSnapshotRefs?.join(" "), 1]
154
+ ];
155
+ let score = 0;
156
+ const matchedFields = [];
157
+ for (const [field, value, weight] of weightedFields) {
158
+ const matches = countRecallTokenOverlap(queryTokens, value, ["make"]);
159
+ if (matches > 0) matchedFields.push(field);
160
+ score += matches * weight;
161
+ }
162
+ return { score, matchedFields };
163
+ }
164
+ function scoreCausalTrajectoryRecord(record, lexicalScore, sessionKey) {
165
+ let score = lexicalScore;
166
+ if (sessionKey && record.sessionKey === sessionKey) score += 1.5;
167
+ const recordedAtMs = Date.parse(record.recordedAt);
168
+ if (Number.isFinite(recordedAtMs)) {
169
+ const ageHours = Math.max(0, (Date.now() - recordedAtMs) / 36e5);
170
+ score += 1 / (1 + ageHours);
171
+ }
172
+ return score;
173
+ }
174
+ async function searchCausalTrajectories(options) {
175
+ const maxResults = Math.max(0, Math.floor(options.maxResults));
176
+ if (maxResults === 0) return [];
177
+ const { trajectories } = await readCausalTrajectoryRecords(options);
178
+ if (trajectories.length === 0) return [];
179
+ const queryTokens = new Set(normalizeRecallTokens(options.query, ["make"]));
180
+ if (queryTokens.size === 0) return [];
181
+ const scored = trajectories.map((record) => {
182
+ const lexical = lexicalScoreCausalTrajectoryRecord(record, queryTokens);
183
+ return {
184
+ record,
185
+ matchedFields: lexical.matchedFields,
186
+ lexicalScore: lexical.score,
187
+ score: scoreCausalTrajectoryRecord(record, lexical.score, options.sessionKey)
188
+ };
189
+ });
190
+ const filtered = scored.filter((result) => result.lexicalScore > 0);
191
+ filtered.sort((left, right) => {
192
+ if (right.score !== left.score) return right.score - left.score;
193
+ return right.record.recordedAt.localeCompare(left.record.recordedAt);
194
+ });
195
+ return filtered.slice(0, maxResults).map(({ record, score, matchedFields }) => ({
196
+ record,
197
+ score,
198
+ matchedFields
199
+ }));
200
+ }
201
+
202
+ export {
203
+ resolveCausalTrajectoryStoreDir,
204
+ validateCausalTrajectoryRecord,
205
+ recordCausalTrajectory,
206
+ getCausalTrajectoryStoreStatus,
207
+ searchCausalTrajectories
208
+ };
209
+ //# sourceMappingURL=chunk-ORZMT74A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/causal-trajectory.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport type { ObjectiveStateOutcome } from \"./objective-state.js\";\nimport { countRecallTokenOverlap, normalizeRecallTokens } from \"./recall-tokenization.js\";\nimport {\n assertIsoRecordedAt,\n assertSafePathSegment,\n assertString,\n isRecord,\n optionalString,\n optionalStringArray,\n recordStoreDay,\n validateStringRecord,\n} from \"./store-contract.js\";\n\nexport interface CausalTrajectoryRecord {\n schemaVersion: 1;\n trajectoryId: string;\n recordedAt: string;\n sessionKey: string;\n goal: string;\n actionSummary: string;\n observationSummary: string;\n outcomeKind: ObjectiveStateOutcome;\n outcomeSummary: string;\n followUpSummary?: string;\n objectiveStateSnapshotRefs?: string[];\n entityRefs?: string[];\n tags?: string[];\n metadata?: Record<string, string>;\n}\n\nexport interface CausalTrajectoryStoreStatus {\n enabled: boolean;\n rootDir: string;\n trajectoriesDir: string;\n trajectories: {\n total: number;\n valid: number;\n invalid: number;\n byOutcome: Partial<Record<ObjectiveStateOutcome, number>>;\n latestTrajectoryId?: string;\n latestRecordedAt?: string;\n latestSessionKey?: string;\n };\n latestTrajectory?: CausalTrajectoryRecord;\n invalidTrajectories: Array<{\n path: string;\n error: string;\n }>;\n}\n\nexport interface CausalTrajectorySearchResult {\n record: CausalTrajectoryRecord;\n score: number;\n matchedFields: string[];\n}\n\nfunction validateMetadata(raw: unknown): Record<string, string> | undefined {\n return validateStringRecord(raw, \"metadata\");\n}\n\nexport function resolveCausalTrajectoryStoreDir(memoryDir: string, overrideDir?: string): string {\n if (typeof overrideDir === \"string\" && overrideDir.trim().length > 0) {\n return overrideDir.trim();\n }\n return path.join(memoryDir, \"state\", \"causal-trajectories\");\n}\n\nexport function validateCausalTrajectoryRecord(raw: unknown): CausalTrajectoryRecord {\n if (!isRecord(raw)) throw new Error(\"causal trajectory record must be an object\");\n if (raw.schemaVersion !== 1) throw new Error(\"schemaVersion must be 1\");\n\n const outcomeKind = assertString(raw.outcomeKind, \"outcomeKind\");\n if (![\"success\", \"failure\", \"partial\", \"unknown\"].includes(outcomeKind)) {\n throw new Error(\"outcomeKind must be one of success|failure|partial|unknown\");\n }\n\n return {\n schemaVersion: 1,\n trajectoryId: assertSafePathSegment(assertString(raw.trajectoryId, \"trajectoryId\"), \"trajectoryId\"),\n recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, \"recordedAt\")),\n sessionKey: assertString(raw.sessionKey, \"sessionKey\"),\n goal: assertString(raw.goal, \"goal\"),\n actionSummary: assertString(raw.actionSummary, \"actionSummary\"),\n observationSummary: assertString(raw.observationSummary, \"observationSummary\"),\n outcomeKind: outcomeKind as ObjectiveStateOutcome,\n outcomeSummary: assertString(raw.outcomeSummary, \"outcomeSummary\"),\n followUpSummary: optionalString(raw.followUpSummary),\n objectiveStateSnapshotRefs: optionalStringArray(raw.objectiveStateSnapshotRefs, \"objectiveStateSnapshotRefs\"),\n entityRefs: optionalStringArray(raw.entityRefs, \"entityRefs\"),\n tags: optionalStringArray(raw.tags, \"tags\"),\n metadata: validateMetadata(raw.metadata),\n };\n}\n\nexport async function recordCausalTrajectory(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n actionGraphRecallEnabled?: boolean;\n cmcEnabled?: boolean;\n cmcStitchLookbackDays?: number;\n cmcStitchMinScore?: number;\n cmcStitchMaxEdgesPerTrajectory?: number;\n record: CausalTrajectoryRecord;\n}): Promise<string> {\n const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const validated = validateCausalTrajectoryRecord(options.record);\n const day = recordStoreDay(validated.recordedAt);\n const trajectoriesDir = path.join(rootDir, \"trajectories\", day);\n const filePath = path.join(trajectoriesDir, `${validated.trajectoryId}.json`);\n await mkdir(trajectoriesDir, { recursive: true });\n await writeFile(filePath, JSON.stringify(validated, null, 2), \"utf8\");\n if (options.actionGraphRecallEnabled === true) {\n try {\n const { appendCausalTrajectoryGraphEdges } = await import(\"./causal-trajectory-graph.js\");\n await appendCausalTrajectoryGraphEdges({\n memoryDir: options.memoryDir,\n record: validated,\n });\n } catch (error) {\n const { log } = await import(\"./logger.js\");\n log.warn(\n `[causal-trajectory] action-conditioned graph write failed for ${validated.trajectoryId}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n if (options.cmcEnabled === true) {\n try {\n const { stitchCausalChain } = await import(\"./causal-chain.js\");\n await stitchCausalChain({\n memoryDir: options.memoryDir,\n causalTrajectoryStoreDir: options.causalTrajectoryStoreDir,\n newTrajectory: validated,\n config: {\n lookbackDays: options.cmcStitchLookbackDays ?? 7,\n minScore: options.cmcStitchMinScore ?? 2.5,\n maxEdgesPerTrajectory: options.cmcStitchMaxEdgesPerTrajectory ?? 3,\n },\n });\n } catch (error) {\n const { log } = await import(\"./logger.js\");\n log.warn(\n `[cmc] causal chain stitching failed for ${validated.trajectoryId}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n return filePath;\n}\n\nasync function readCausalTrajectoryRecords(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n}): Promise<{\n files: string[];\n trajectories: CausalTrajectoryRecord[];\n invalidTrajectories: Array<{ path: string; error: string }>;\n}> {\n const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const files = await listJsonFiles(path.join(rootDir, \"trajectories\"));\n const trajectories: CausalTrajectoryRecord[] = [];\n const invalidTrajectories: Array<{ path: string; error: string }> = [];\n for (const filePath of files) {\n try {\n trajectories.push(validateCausalTrajectoryRecord(await readJsonFile(filePath)));\n } catch (error) {\n invalidTrajectories.push({\n path: filePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { files, trajectories, invalidTrajectories };\n}\n\nexport async function getCausalTrajectoryStoreStatus(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n enabled: boolean;\n}): Promise<CausalTrajectoryStoreStatus> {\n const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const trajectoriesDir = path.join(rootDir, \"trajectories\");\n const { files, trajectories, invalidTrajectories } = await readCausalTrajectoryRecords(options);\n\n trajectories.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));\n const byOutcome: Partial<Record<ObjectiveStateOutcome, number>> = {};\n for (const trajectory of trajectories) {\n byOutcome[trajectory.outcomeKind] = (byOutcome[trajectory.outcomeKind] ?? 0) + 1;\n }\n\n return {\n enabled: options.enabled,\n rootDir,\n trajectoriesDir,\n trajectories: {\n total: files.length,\n valid: trajectories.length,\n invalid: invalidTrajectories.length,\n byOutcome,\n latestTrajectoryId: trajectories[0]?.trajectoryId,\n latestRecordedAt: trajectories[0]?.recordedAt,\n latestSessionKey: trajectories[0]?.sessionKey,\n },\n latestTrajectory: trajectories[0],\n invalidTrajectories,\n };\n}\n\nfunction lexicalScoreCausalTrajectoryRecord(\n record: CausalTrajectoryRecord,\n queryTokens: Set<string>,\n): { score: number; matchedFields: string[] } {\n const weightedFields: Array<[field: string, value: string | undefined, weight: number]> = [\n [\"goal\", record.goal, 4],\n [\"action\", record.actionSummary, 3],\n [\"observation\", record.observationSummary, 3],\n [\"outcome\", record.outcomeSummary, 3],\n [\"follow_up\", record.followUpSummary, 2],\n [\"outcome_kind\", record.outcomeKind, 1],\n [\"tags\", record.tags?.join(\" \"), 2],\n [\"entity_refs\", record.entityRefs?.join(\" \"), 2],\n [\"objective_state_refs\", record.objectiveStateSnapshotRefs?.join(\" \"), 1],\n ];\n\n let score = 0;\n const matchedFields: string[] = [];\n for (const [field, value, weight] of weightedFields) {\n const matches = countRecallTokenOverlap(queryTokens, value, [\"make\"]);\n if (matches > 0) matchedFields.push(field);\n score += matches * weight;\n }\n return { score, matchedFields };\n}\n\nfunction scoreCausalTrajectoryRecord(\n record: CausalTrajectoryRecord,\n lexicalScore: number,\n sessionKey?: string,\n): number {\n let score = lexicalScore;\n if (sessionKey && record.sessionKey === sessionKey) score += 1.5;\n\n const recordedAtMs = Date.parse(record.recordedAt);\n if (Number.isFinite(recordedAtMs)) {\n const ageHours = Math.max(0, (Date.now() - recordedAtMs) / 3_600_000);\n score += 1 / (1 + ageHours);\n }\n return score;\n}\n\nexport async function searchCausalTrajectories(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n query: string;\n maxResults: number;\n sessionKey?: string;\n}): Promise<CausalTrajectorySearchResult[]> {\n const maxResults = Math.max(0, Math.floor(options.maxResults));\n if (maxResults === 0) return [];\n\n const { trajectories } = await readCausalTrajectoryRecords(options);\n if (trajectories.length === 0) return [];\n\n const queryTokens = new Set(normalizeRecallTokens(options.query, [\"make\"]));\n if (queryTokens.size === 0) return [];\n const scored = trajectories.map((record) => {\n const lexical = lexicalScoreCausalTrajectoryRecord(record, queryTokens);\n return {\n record,\n matchedFields: lexical.matchedFields,\n lexicalScore: lexical.score,\n score: scoreCausalTrajectoryRecord(record, lexical.score, options.sessionKey),\n };\n });\n\n const filtered = scored.filter((result) => result.lexicalScore > 0);\n\n filtered.sort((left, right) => {\n if (right.score !== left.score) return right.score - left.score;\n return right.record.recordedAt.localeCompare(left.record.recordedAt);\n });\n\n return filtered.slice(0, maxResults).map(({ record, score, matchedFields }) => ({\n record,\n score,\n matchedFields,\n }));\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,268 @@
1
+ import {
2
+ readUtilityTelemetryEvents,
3
+ resolveUtilityTelemetryDir
4
+ } from "./chunk-3QKK7QOS.js";
5
+ import {
6
+ clamp01
7
+ } from "./chunk-QCCCQT3O.js";
8
+
9
+ // src/utility-learner.ts
10
+ import path from "path";
11
+ import { mkdir, readFile, rename, writeFile } from "fs/promises";
12
+ var UTILITY_LEARNING_SNAPSHOT_VERSION = 1;
13
+ var UTILITY_LEARNING_STATE_FILE = "learning-state.json";
14
+ function clampWeight(value, maxWeightMagnitude) {
15
+ const limit = Number.isFinite(maxWeightMagnitude) && maxWeightMagnitude > 0 ? maxWeightMagnitude : 0;
16
+ return Math.max(-limit, Math.min(limit, value));
17
+ }
18
+ function coerceLearningWindowDays(value) {
19
+ if (!Number.isFinite(value)) return 14;
20
+ return Math.max(1, Math.floor(value));
21
+ }
22
+ function coerceMinEventCount(value) {
23
+ if (!Number.isFinite(value)) return 3;
24
+ return Math.max(1, Math.floor(value));
25
+ }
26
+ function coerceMaxWeightMagnitude(value) {
27
+ if (!Number.isFinite(value)) return 0.35;
28
+ return Math.max(0, Math.min(1, value));
29
+ }
30
+ function roundWeight(value) {
31
+ return Math.round(value * 1e3) / 1e3;
32
+ }
33
+ function outcomeCountsFor(events) {
34
+ const counts = {};
35
+ for (const event of events) {
36
+ counts[event.outcome] = (counts[event.outcome] ?? 0) + 1;
37
+ }
38
+ return counts;
39
+ }
40
+ function selectRecentEvents(events, now, windowDays) {
41
+ if (!Number.isFinite(windowDays) || windowDays <= 0) return [...events];
42
+ const minTimestamp = now.getTime() - windowDays * 864e5;
43
+ return events.filter((event) => {
44
+ const ts = Date.parse(event.recordedAt);
45
+ return Number.isFinite(ts) && ts >= minTimestamp;
46
+ });
47
+ }
48
+ function confidenceFromEvents(eventCount, averageUtilityScore) {
49
+ if (eventCount <= 0) return 0;
50
+ return roundWeight(clamp01(Math.abs(averageUtilityScore) * Math.min(1, eventCount / 10)));
51
+ }
52
+ function validateUtilityLearningSnapshot(raw) {
53
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
54
+ throw new Error("utility learning snapshot must be an object");
55
+ }
56
+ const record = raw;
57
+ if (record.version !== UTILITY_LEARNING_SNAPSHOT_VERSION) {
58
+ throw new Error("utility learning snapshot version must be 1");
59
+ }
60
+ if (typeof record.updatedAt !== "string" || record.updatedAt.length === 0) {
61
+ throw new Error("utility learning snapshot updatedAt must be a string");
62
+ }
63
+ if (typeof record.windowDays !== "number" || !Number.isFinite(record.windowDays) || record.windowDays < 0) {
64
+ throw new Error("utility learning snapshot windowDays must be a non-negative number");
65
+ }
66
+ if (typeof record.minEventCount !== "number" || !Number.isFinite(record.minEventCount) || record.minEventCount < 1) {
67
+ throw new Error("utility learning snapshot minEventCount must be >= 1");
68
+ }
69
+ if (typeof record.maxWeightMagnitude !== "number" || !Number.isFinite(record.maxWeightMagnitude) || record.maxWeightMagnitude < 0) {
70
+ throw new Error("utility learning snapshot maxWeightMagnitude must be >= 0");
71
+ }
72
+ if (!Array.isArray(record.weights)) {
73
+ throw new Error("utility learning snapshot weights must be an array");
74
+ }
75
+ const weights = record.weights.map((entry) => {
76
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
77
+ throw new Error("utility learning weight must be an object");
78
+ }
79
+ const weight = entry;
80
+ const target = weight.target;
81
+ const decision = weight.decision;
82
+ if (target !== "promotion" && target !== "ranking") {
83
+ throw new Error("utility learning weight target must be promotion|ranking");
84
+ }
85
+ if (!["promote", "demote", "hold", "boost", "suppress"].includes(String(decision))) {
86
+ throw new Error("utility learning weight decision is invalid");
87
+ }
88
+ if (typeof weight.eventCount !== "number" || !Number.isFinite(weight.eventCount) || weight.eventCount < 0) {
89
+ throw new Error("utility learning weight eventCount must be >= 0");
90
+ }
91
+ if (typeof weight.learnedWeight !== "number" || !Number.isFinite(weight.learnedWeight)) {
92
+ throw new Error("utility learning weight learnedWeight must be finite");
93
+ }
94
+ if (typeof weight.averageUtilityScore !== "number" || !Number.isFinite(weight.averageUtilityScore)) {
95
+ throw new Error("utility learning weight averageUtilityScore must be finite");
96
+ }
97
+ if (typeof weight.confidence !== "number" || !Number.isFinite(weight.confidence)) {
98
+ throw new Error("utility learning weight confidence must be finite");
99
+ }
100
+ if (typeof weight.updatedAt !== "string" || weight.updatedAt.length === 0) {
101
+ throw new Error("utility learning weight updatedAt must be a string");
102
+ }
103
+ const outcomeCounts = weight.outcomeCounts ?? {};
104
+ return {
105
+ target,
106
+ decision,
107
+ eventCount: weight.eventCount,
108
+ learnedWeight: roundWeight(weight.learnedWeight),
109
+ averageUtilityScore: roundWeight(weight.averageUtilityScore),
110
+ confidence: roundWeight(clamp01(weight.confidence)),
111
+ outcomeCounts,
112
+ updatedAt: weight.updatedAt
113
+ };
114
+ });
115
+ return {
116
+ version: 1,
117
+ updatedAt: record.updatedAt,
118
+ windowDays: record.windowDays,
119
+ minEventCount: record.minEventCount,
120
+ maxWeightMagnitude: record.maxWeightMagnitude,
121
+ weights
122
+ };
123
+ }
124
+ function resolveUtilityLearningStatePath(memoryDir, utilityTelemetryDir) {
125
+ return path.join(resolveUtilityTelemetryDir(memoryDir, utilityTelemetryDir), UTILITY_LEARNING_STATE_FILE);
126
+ }
127
+ async function readUtilityLearningSnapshot(memoryDir, utilityTelemetryDir) {
128
+ const statePath = resolveUtilityLearningStatePath(memoryDir, utilityTelemetryDir);
129
+ try {
130
+ const raw = JSON.parse(await readFile(statePath, "utf8"));
131
+ return validateUtilityLearningSnapshot(raw);
132
+ } catch {
133
+ return null;
134
+ }
135
+ }
136
+ async function writeUtilityLearningSnapshot(statePath, snapshot) {
137
+ const tempPath = `${statePath}.tmp`;
138
+ await mkdir(path.dirname(statePath), { recursive: true });
139
+ await writeFile(tempPath, `${JSON.stringify(snapshot, null, 2)}
140
+ `, "utf8");
141
+ await rename(tempPath, statePath);
142
+ }
143
+ async function learnUtilityPromotionWeights(options) {
144
+ const statePath = resolveUtilityLearningStatePath(options.memoryDir, options.utilityTelemetryDir);
145
+ if (!options.enabled) {
146
+ return {
147
+ applied: false,
148
+ reason: "disabled",
149
+ statePath,
150
+ snapshot: null
151
+ };
152
+ }
153
+ const now = options.now ?? /* @__PURE__ */ new Date();
154
+ const updatedAt = now.toISOString();
155
+ const windowDays = coerceLearningWindowDays(options.learningWindowDays);
156
+ const minEventCount = coerceMinEventCount(options.minEventCount);
157
+ const maxWeightMagnitude = coerceMaxWeightMagnitude(options.maxWeightMagnitude);
158
+ const recentEvents = selectRecentEvents(
159
+ (await readUtilityTelemetryEvents({
160
+ memoryDir: options.memoryDir,
161
+ utilityTelemetryDir: options.utilityTelemetryDir
162
+ })).events,
163
+ now,
164
+ windowDays
165
+ );
166
+ const grouped = /* @__PURE__ */ new Map();
167
+ for (const event of recentEvents) {
168
+ const key = `${event.target}:${event.decision}`;
169
+ const existing = grouped.get(key);
170
+ if (existing) {
171
+ existing.push(event);
172
+ } else {
173
+ grouped.set(key, [event]);
174
+ }
175
+ }
176
+ const weights = [];
177
+ for (const events of grouped.values()) {
178
+ if (events.length < minEventCount) continue;
179
+ const target = events[0].target;
180
+ const decision = events[0].decision;
181
+ const averageUtilityScore = events.reduce((sum, event) => sum + event.utilityScore, 0) / events.length;
182
+ const confidence = confidenceFromEvents(events.length, averageUtilityScore);
183
+ const learnedWeight = roundWeight(
184
+ clampWeight(averageUtilityScore * confidence, maxWeightMagnitude)
185
+ );
186
+ weights.push({
187
+ target,
188
+ decision,
189
+ eventCount: events.length,
190
+ learnedWeight,
191
+ averageUtilityScore: roundWeight(averageUtilityScore),
192
+ confidence,
193
+ outcomeCounts: outcomeCountsFor(events),
194
+ updatedAt
195
+ });
196
+ }
197
+ weights.sort((left, right) => {
198
+ const targetCompare = left.target.localeCompare(right.target);
199
+ if (targetCompare !== 0) return targetCompare;
200
+ return left.decision.localeCompare(right.decision);
201
+ });
202
+ const snapshot = {
203
+ version: 1,
204
+ updatedAt,
205
+ windowDays,
206
+ minEventCount,
207
+ maxWeightMagnitude,
208
+ weights
209
+ };
210
+ if (weights.length === 0) {
211
+ return {
212
+ applied: false,
213
+ reason: "insufficient_events",
214
+ statePath,
215
+ snapshot
216
+ };
217
+ }
218
+ await writeUtilityLearningSnapshot(statePath, snapshot);
219
+ return {
220
+ applied: true,
221
+ reason: "learned",
222
+ statePath,
223
+ snapshot
224
+ };
225
+ }
226
+ async function getUtilityLearningStatus(options) {
227
+ const rootDir = resolveUtilityTelemetryDir(options.memoryDir, options.utilityTelemetryDir);
228
+ const statePath = resolveUtilityLearningStatePath(options.memoryDir, options.utilityTelemetryDir);
229
+ if (!options.enabled) {
230
+ return {
231
+ enabled: false,
232
+ promotionByOutcomeEnabled: options.promotionByOutcomeEnabled === true,
233
+ rootDir,
234
+ statePath,
235
+ snapshot: null,
236
+ weights: {
237
+ total: 0,
238
+ positive: 0,
239
+ negative: 0,
240
+ zero: 0
241
+ }
242
+ };
243
+ }
244
+ const snapshot = await readUtilityLearningSnapshot(options.memoryDir, options.utilityTelemetryDir);
245
+ const weights = snapshot?.weights ?? [];
246
+ return {
247
+ enabled: true,
248
+ promotionByOutcomeEnabled: options.promotionByOutcomeEnabled === true,
249
+ rootDir,
250
+ statePath,
251
+ snapshot,
252
+ weights: {
253
+ total: weights.length,
254
+ positive: weights.filter((entry) => entry.learnedWeight > 0).length,
255
+ negative: weights.filter((entry) => entry.learnedWeight < 0).length,
256
+ zero: weights.filter((entry) => entry.learnedWeight === 0).length,
257
+ latestUpdatedAt: snapshot?.updatedAt
258
+ }
259
+ };
260
+ }
261
+
262
+ export {
263
+ resolveUtilityLearningStatePath,
264
+ readUtilityLearningSnapshot,
265
+ learnUtilityPromotionWeights,
266
+ getUtilityLearningStatus
267
+ };
268
+ //# sourceMappingURL=chunk-OTAVQCSF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utility-learner.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { clamp01 } from \"./lifecycle.js\";\nimport {\n readUtilityTelemetryEvents,\n resolveUtilityTelemetryDir,\n type UtilityTelemetryDecision,\n type UtilityTelemetryEvent,\n type UtilityTelemetryOutcome,\n type UtilityTelemetryTarget,\n} from \"./utility-telemetry.js\";\n\nexport interface UtilityLearningWeight {\n target: UtilityTelemetryTarget;\n decision: UtilityTelemetryDecision;\n eventCount: number;\n learnedWeight: number;\n averageUtilityScore: number;\n confidence: number;\n outcomeCounts: Partial<Record<UtilityTelemetryOutcome, number>>;\n updatedAt: string;\n}\n\nexport interface UtilityLearningSnapshot {\n version: 1;\n updatedAt: string;\n windowDays: number;\n minEventCount: number;\n maxWeightMagnitude: number;\n weights: UtilityLearningWeight[];\n}\n\nexport interface UtilityLearningStatus {\n enabled: boolean;\n promotionByOutcomeEnabled: boolean;\n rootDir: string;\n statePath: string;\n snapshot: UtilityLearningSnapshot | null;\n weights: {\n total: number;\n positive: number;\n negative: number;\n zero: number;\n latestUpdatedAt?: string;\n };\n}\n\nexport interface UtilityLearningResult {\n applied: boolean;\n reason: \"disabled\" | \"insufficient_events\" | \"learned\";\n statePath: string;\n snapshot: UtilityLearningSnapshot | null;\n}\n\nconst UTILITY_LEARNING_SNAPSHOT_VERSION = 1;\nconst UTILITY_LEARNING_STATE_FILE = \"learning-state.json\";\n\nfunction clampWeight(value: number, maxWeightMagnitude: number): number {\n const limit = Number.isFinite(maxWeightMagnitude) && maxWeightMagnitude > 0\n ? maxWeightMagnitude\n : 0;\n return Math.max(-limit, Math.min(limit, value));\n}\n\nfunction coerceLearningWindowDays(value: number): number {\n if (!Number.isFinite(value)) return 14;\n return Math.max(1, Math.floor(value));\n}\n\nfunction coerceMinEventCount(value: number): number {\n if (!Number.isFinite(value)) return 3;\n return Math.max(1, Math.floor(value));\n}\n\nfunction coerceMaxWeightMagnitude(value: number): number {\n if (!Number.isFinite(value)) return 0.35;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction roundWeight(value: number): number {\n return Math.round(value * 1000) / 1000;\n}\n\nfunction outcomeCountsFor(events: UtilityTelemetryEvent[]): Partial<Record<UtilityTelemetryOutcome, number>> {\n const counts: Partial<Record<UtilityTelemetryOutcome, number>> = {};\n for (const event of events) {\n counts[event.outcome] = (counts[event.outcome] ?? 0) + 1;\n }\n return counts;\n}\n\nfunction selectRecentEvents(events: UtilityTelemetryEvent[], now: Date, windowDays: number): UtilityTelemetryEvent[] {\n if (!Number.isFinite(windowDays) || windowDays <= 0) return [...events];\n const minTimestamp = now.getTime() - windowDays * 86_400_000;\n return events.filter((event) => {\n const ts = Date.parse(event.recordedAt);\n return Number.isFinite(ts) && ts >= minTimestamp;\n });\n}\n\nfunction confidenceFromEvents(eventCount: number, averageUtilityScore: number): number {\n if (eventCount <= 0) return 0;\n return roundWeight(clamp01(Math.abs(averageUtilityScore) * Math.min(1, eventCount / 10)));\n}\n\nfunction validateUtilityLearningSnapshot(raw: unknown): UtilityLearningSnapshot {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n throw new Error(\"utility learning snapshot must be an object\");\n }\n const record = raw as Record<string, unknown>;\n if (record.version !== UTILITY_LEARNING_SNAPSHOT_VERSION) {\n throw new Error(\"utility learning snapshot version must be 1\");\n }\n if (typeof record.updatedAt !== \"string\" || record.updatedAt.length === 0) {\n throw new Error(\"utility learning snapshot updatedAt must be a string\");\n }\n if (typeof record.windowDays !== \"number\" || !Number.isFinite(record.windowDays) || record.windowDays < 0) {\n throw new Error(\"utility learning snapshot windowDays must be a non-negative number\");\n }\n if (typeof record.minEventCount !== \"number\" || !Number.isFinite(record.minEventCount) || record.minEventCount < 1) {\n throw new Error(\"utility learning snapshot minEventCount must be >= 1\");\n }\n if (\n typeof record.maxWeightMagnitude !== \"number\" ||\n !Number.isFinite(record.maxWeightMagnitude) ||\n record.maxWeightMagnitude < 0\n ) {\n throw new Error(\"utility learning snapshot maxWeightMagnitude must be >= 0\");\n }\n if (!Array.isArray(record.weights)) {\n throw new Error(\"utility learning snapshot weights must be an array\");\n }\n\n const weights = record.weights.map((entry) => {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n throw new Error(\"utility learning weight must be an object\");\n }\n const weight = entry as Record<string, unknown>;\n const target = weight.target;\n const decision = weight.decision;\n if (target !== \"promotion\" && target !== \"ranking\") {\n throw new Error(\"utility learning weight target must be promotion|ranking\");\n }\n if (![\"promote\", \"demote\", \"hold\", \"boost\", \"suppress\"].includes(String(decision))) {\n throw new Error(\"utility learning weight decision is invalid\");\n }\n if (typeof weight.eventCount !== \"number\" || !Number.isFinite(weight.eventCount) || weight.eventCount < 0) {\n throw new Error(\"utility learning weight eventCount must be >= 0\");\n }\n if (typeof weight.learnedWeight !== \"number\" || !Number.isFinite(weight.learnedWeight)) {\n throw new Error(\"utility learning weight learnedWeight must be finite\");\n }\n if (typeof weight.averageUtilityScore !== \"number\" || !Number.isFinite(weight.averageUtilityScore)) {\n throw new Error(\"utility learning weight averageUtilityScore must be finite\");\n }\n if (typeof weight.confidence !== \"number\" || !Number.isFinite(weight.confidence)) {\n throw new Error(\"utility learning weight confidence must be finite\");\n }\n if (typeof weight.updatedAt !== \"string\" || weight.updatedAt.length === 0) {\n throw new Error(\"utility learning weight updatedAt must be a string\");\n }\n const outcomeCounts = (weight.outcomeCounts ?? {}) as Partial<Record<UtilityTelemetryOutcome, number>>;\n return {\n target,\n decision: decision as UtilityTelemetryDecision,\n eventCount: weight.eventCount,\n learnedWeight: roundWeight(weight.learnedWeight),\n averageUtilityScore: roundWeight(weight.averageUtilityScore),\n confidence: roundWeight(clamp01(weight.confidence)),\n outcomeCounts,\n updatedAt: weight.updatedAt,\n } satisfies UtilityLearningWeight;\n });\n\n return {\n version: 1,\n updatedAt: record.updatedAt,\n windowDays: record.windowDays,\n minEventCount: record.minEventCount,\n maxWeightMagnitude: record.maxWeightMagnitude,\n weights,\n };\n}\n\nexport function resolveUtilityLearningStatePath(memoryDir: string, utilityTelemetryDir?: string): string {\n return path.join(resolveUtilityTelemetryDir(memoryDir, utilityTelemetryDir), UTILITY_LEARNING_STATE_FILE);\n}\n\nexport async function readUtilityLearningSnapshot(\n memoryDir: string,\n utilityTelemetryDir?: string,\n): Promise<UtilityLearningSnapshot | null> {\n const statePath = resolveUtilityLearningStatePath(memoryDir, utilityTelemetryDir);\n try {\n const raw = JSON.parse(await readFile(statePath, \"utf8\")) as unknown;\n return validateUtilityLearningSnapshot(raw);\n } catch {\n return null;\n }\n}\n\nasync function writeUtilityLearningSnapshot(\n statePath: string,\n snapshot: UtilityLearningSnapshot,\n): Promise<void> {\n const tempPath = `${statePath}.tmp`;\n await mkdir(path.dirname(statePath), { recursive: true });\n await writeFile(tempPath, `${JSON.stringify(snapshot, null, 2)}\\n`, \"utf8\");\n await rename(tempPath, statePath);\n}\n\nexport async function learnUtilityPromotionWeights(options: {\n memoryDir: string;\n utilityTelemetryDir?: string;\n enabled: boolean;\n now?: Date;\n learningWindowDays: number;\n minEventCount: number;\n maxWeightMagnitude: number;\n}): Promise<UtilityLearningResult> {\n const statePath = resolveUtilityLearningStatePath(options.memoryDir, options.utilityTelemetryDir);\n if (!options.enabled) {\n return {\n applied: false,\n reason: \"disabled\",\n statePath,\n snapshot: null,\n };\n }\n\n const now = options.now ?? new Date();\n const updatedAt = now.toISOString();\n const windowDays = coerceLearningWindowDays(options.learningWindowDays);\n const minEventCount = coerceMinEventCount(options.minEventCount);\n const maxWeightMagnitude = coerceMaxWeightMagnitude(options.maxWeightMagnitude);\n const recentEvents = selectRecentEvents(\n (\n await readUtilityTelemetryEvents({\n memoryDir: options.memoryDir,\n utilityTelemetryDir: options.utilityTelemetryDir,\n })\n ).events,\n now,\n windowDays,\n );\n\n const grouped = new Map<string, UtilityTelemetryEvent[]>();\n for (const event of recentEvents) {\n const key = `${event.target}:${event.decision}`;\n const existing = grouped.get(key);\n if (existing) {\n existing.push(event);\n } else {\n grouped.set(key, [event]);\n }\n }\n\n const weights: UtilityLearningWeight[] = [];\n for (const events of grouped.values()) {\n if (events.length < minEventCount) continue;\n const target = events[0].target;\n const decision = events[0].decision;\n const averageUtilityScore = events.reduce((sum, event) => sum + event.utilityScore, 0) / events.length;\n const confidence = confidenceFromEvents(events.length, averageUtilityScore);\n const learnedWeight = roundWeight(\n clampWeight(averageUtilityScore * confidence, maxWeightMagnitude),\n );\n weights.push({\n target,\n decision,\n eventCount: events.length,\n learnedWeight,\n averageUtilityScore: roundWeight(averageUtilityScore),\n confidence,\n outcomeCounts: outcomeCountsFor(events),\n updatedAt,\n });\n }\n\n weights.sort((left, right) => {\n const targetCompare = left.target.localeCompare(right.target);\n if (targetCompare !== 0) return targetCompare;\n return left.decision.localeCompare(right.decision);\n });\n\n const snapshot: UtilityLearningSnapshot = {\n version: 1,\n updatedAt,\n windowDays,\n minEventCount,\n maxWeightMagnitude,\n weights,\n };\n\n if (weights.length === 0) {\n return {\n applied: false,\n reason: \"insufficient_events\",\n statePath,\n snapshot,\n };\n }\n\n await writeUtilityLearningSnapshot(statePath, snapshot);\n return {\n applied: true,\n reason: \"learned\",\n statePath,\n snapshot,\n };\n}\n\nexport async function getUtilityLearningStatus(options: {\n memoryDir: string;\n utilityTelemetryDir?: string;\n enabled: boolean;\n promotionByOutcomeEnabled?: boolean;\n}): Promise<UtilityLearningStatus> {\n const rootDir = resolveUtilityTelemetryDir(options.memoryDir, options.utilityTelemetryDir);\n const statePath = resolveUtilityLearningStatePath(options.memoryDir, options.utilityTelemetryDir);\n if (!options.enabled) {\n return {\n enabled: false,\n promotionByOutcomeEnabled: options.promotionByOutcomeEnabled === true,\n rootDir,\n statePath,\n snapshot: null,\n weights: {\n total: 0,\n positive: 0,\n negative: 0,\n zero: 0,\n },\n };\n }\n\n const snapshot = await readUtilityLearningSnapshot(options.memoryDir, options.utilityTelemetryDir);\n const weights = snapshot?.weights ?? [];\n return {\n enabled: true,\n promotionByOutcomeEnabled: options.promotionByOutcomeEnabled === true,\n rootDir,\n statePath,\n snapshot,\n weights: {\n total: weights.length,\n positive: weights.filter((entry) => entry.learnedWeight > 0).length,\n negative: weights.filter((entry) => entry.learnedWeight < 0).length,\n zero: weights.filter((entry) => entry.learnedWeight === 0).length,\n latestUpdatedAt: snapshot?.updatedAt,\n },\n };\n}\n"],"mappings":"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","names":[]}