@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,621 @@
1
+ import {
2
+ readSummarySnapshot,
3
+ upsertSummarySnapshot,
4
+ writeSummarySnapshot
5
+ } from "./chunk-ETOW6ACV.js";
6
+ import {
7
+ ModelRegistry
8
+ } from "./chunk-ONRU4L2N.js";
9
+ import {
10
+ LocalLlmClient
11
+ } from "./chunk-MDDAA2AO.js";
12
+ import {
13
+ FallbackLlmClient
14
+ } from "./chunk-KT4NEUNF.js";
15
+ import {
16
+ extractJsonCandidates
17
+ } from "./chunk-UZB5KHKX.js";
18
+ import {
19
+ log
20
+ } from "./chunk-KWBU5S5U.js";
21
+
22
+ // src/summarizer.ts
23
+ import { mkdir, readFile, writeFile, readdir } from "fs/promises";
24
+ import path from "path";
25
+ import { z } from "zod";
26
+ var HourlySummarySchema = z.object({
27
+ bullets: z.array(z.string()).describe("3-5 bullet points summarizing the hour's activity")
28
+ });
29
+ var HourlySummaryExtendedSchema = z.object({
30
+ topics: z.array(z.string()).default([]),
31
+ decisions: z.array(z.string()).default([]),
32
+ actionItems: z.array(z.string()).default([]),
33
+ rejected: z.array(z.string()).default([])
34
+ });
35
+ var HourlySummarizer = class {
36
+ summariesDir;
37
+ config;
38
+ localLlm;
39
+ fallbackLlm;
40
+ modelRegistry;
41
+ transcript;
42
+ constructor(config, gatewayConfig, modelRegistry, transcript) {
43
+ this.config = config;
44
+ this.summariesDir = path.join(config.memoryDir, "summaries", "hourly");
45
+ this.modelRegistry = modelRegistry ?? new ModelRegistry(config.memoryDir);
46
+ this.transcript = transcript;
47
+ this.localLlm = new LocalLlmClient(config, this.modelRegistry);
48
+ this.fallbackLlm = new FallbackLlmClient(gatewayConfig);
49
+ if (!gatewayConfig?.agents?.defaults?.model?.primary && !config.localLlmEnabled && config.modelSource !== "gateway") {
50
+ log.warn("no gateway default AI and local LLM disabled \u2014 hourly summarization disabled");
51
+ }
52
+ }
53
+ get useGatewayModelSource() {
54
+ return this.config.modelSource === "gateway";
55
+ }
56
+ get shouldUseLocalLlm() {
57
+ return this.config.localLlmEnabled && !this.useGatewayModelSource;
58
+ }
59
+ withGatewayAgent(options) {
60
+ if (!this.useGatewayModelSource) return options;
61
+ const agentId = this.config.gatewayAgentId || void 0;
62
+ return agentId ? { ...options, agentId } : options;
63
+ }
64
+ async initialize() {
65
+ await mkdir(this.summariesDir, { recursive: true });
66
+ log.info("hourly summarizer initialized");
67
+ }
68
+ // Generate summary for a specific hour and session
69
+ async generateSummary(sessionKey, hourStart, entries) {
70
+ if (entries.length === 0) return null;
71
+ const conversation = entries.map((e) => `[${e.role}] ${e.content}`).join("\n\n");
72
+ if (this.config.hourlySummariesExtendedEnabled) {
73
+ const extended = await this.generateExtended(sessionKey, hourStart, conversation, entries);
74
+ if (!extended) return null;
75
+ const meta = {
76
+ userTurns: entries.filter((e) => e.role === "user").length,
77
+ assistantTurns: entries.filter((e) => e.role === "assistant").length,
78
+ toolCalls: extended._meta.toolCalls,
79
+ toolCounts: extended._meta.toolCounts
80
+ };
81
+ const base = {
82
+ hour: hourStart.toISOString(),
83
+ sessionKey,
84
+ bullets: extended.topics.length > 0 ? extended.topics.slice(0, 5) : ["(summary generated)"],
85
+ turnCount: entries.length,
86
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString()
87
+ };
88
+ const withExtras = base;
89
+ withExtras._extended = extended;
90
+ withExtras._extendedMeta = meta;
91
+ return base;
92
+ }
93
+ const hourIso = hourStart.toISOString();
94
+ const startTime = Date.now();
95
+ if (this.shouldUseLocalLlm) {
96
+ try {
97
+ const localResult = await this.generateWithLocalLlm(conversation);
98
+ if (localResult) {
99
+ const durationMs = Date.now() - startTime;
100
+ log.debug(
101
+ `generated hourly summary for ${sessionKey} at ${hourIso} in ${durationMs}ms using local LLM`
102
+ );
103
+ return {
104
+ hour: hourIso,
105
+ sessionKey,
106
+ bullets: localResult.bullets,
107
+ turnCount: entries.length,
108
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString()
109
+ };
110
+ }
111
+ if (!this.config.localLlmFallback) {
112
+ log.warn("summary generation: local LLM failed and fallback disabled");
113
+ return null;
114
+ }
115
+ log.info("summary generation: local LLM unavailable, falling back to gateway default AI");
116
+ } catch (err) {
117
+ if (!this.config.localLlmFallback) {
118
+ log.warn("summary generation: local LLM error and fallback disabled:", err);
119
+ return null;
120
+ }
121
+ log.info("summary generation: local LLM error, falling back to gateway default AI:", err);
122
+ }
123
+ }
124
+ log.info("summary generation: falling back to gateway default AI");
125
+ try {
126
+ const messages = [
127
+ {
128
+ role: "system",
129
+ content: `You are a conversation summarization system. Summarize the following conversation transcript into 3-5 concise bullet points.
130
+
131
+ Guidelines:
132
+ - Focus on what was accomplished, decided, or discussed
133
+ - Include specific topics, projects, or entities mentioned
134
+ - Note any significant user requests or agent actions
135
+ - Keep bullets brief but informative (1-2 sentences each)
136
+ - Skip trivial greetings or meta-conversation
137
+ - Use present tense for ongoing work, past for completed items
138
+
139
+ Respond with valid JSON matching this schema:
140
+ {
141
+ "bullets": ["bullet 1", "bullet 2", "bullet 3"]
142
+ }`
143
+ },
144
+ { role: "user", content: `Summarize this conversation:
145
+
146
+ ${conversation}` }
147
+ ];
148
+ const result = await this.fallbackLlm.parseWithSchema(
149
+ messages,
150
+ HourlySummarySchema,
151
+ this.withGatewayAgent({ temperature: 0.3, maxTokens: 8192 })
152
+ );
153
+ const durationMs = Date.now() - startTime;
154
+ if (result) {
155
+ log.debug(
156
+ `generated hourly summary for ${sessionKey} at ${hourIso} in ${durationMs}ms via fallback`
157
+ );
158
+ return {
159
+ hour: hourIso,
160
+ sessionKey,
161
+ bullets: result.bullets,
162
+ turnCount: entries.length,
163
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString()
164
+ };
165
+ }
166
+ log.warn("summary generation fallback returned no parsed output");
167
+ return null;
168
+ } catch (err) {
169
+ log.error("summary generation fallback failed", err);
170
+ return null;
171
+ }
172
+ }
173
+ async generateExtended(sessionKey, hourStart, conversation, entries) {
174
+ const hourIso = hourStart.toISOString();
175
+ const startTime = Date.now();
176
+ const hourEnd = new Date(hourStart.getTime() + 60 * 60 * 1e3);
177
+ let toolCounts = {};
178
+ if (this.config.hourlySummariesIncludeToolStats && this.transcript) {
179
+ const uses = await this.transcript.readToolUse(sessionKey, hourStart, hourEnd);
180
+ for (const u of uses) toolCounts[u.tool] = (toolCounts[u.tool] ?? 0) + 1;
181
+ }
182
+ const sys = `You are a conversation summarization system.
183
+
184
+ Summarize the hour into structured sections.
185
+
186
+ Return valid JSON matching:
187
+ {
188
+ "topics": ["..."],
189
+ "decisions": ["..."],
190
+ "actionItems": ["..."],
191
+ "rejected": ["..."]
192
+ }
193
+
194
+ Guidelines:
195
+ - Prefer concrete topics and decisions.
196
+ - Action items should be imperative.
197
+ - Rejected ideas are things that were explicitly discarded or reversed.
198
+ - If there are none for a section, return an empty array.
199
+ `;
200
+ const toolStatsLine = Object.keys(toolCounts).length > 0 ? `Tools used (counts): ${Object.entries(toolCounts).sort((a, b) => b[1] - a[1]).slice(0, 10).map(([k, v]) => `${k}=${v}`).join(", ")}
201
+
202
+ ` : "";
203
+ const userTurns = entries.filter((e) => e.role === "user").length;
204
+ const assistantTurns = entries.filter((e) => e.role === "assistant").length;
205
+ const toolCalls = Object.values(toolCounts).reduce((a, b) => a + b, 0);
206
+ const statsLine = `Stats: userTurns=${userTurns}, assistantTurns=${assistantTurns}, toolCalls=${toolCalls}
207
+
208
+ `;
209
+ const user = `Hour: ${hourIso}
210
+ Session: ${sessionKey}
211
+
212
+ ${statsLine}${toolStatsLine}Conversation:
213
+ ${conversation}
214
+ `;
215
+ if (this.shouldUseLocalLlm) {
216
+ try {
217
+ const contextSizes = this.modelRegistry.calculateContextSizes(this.config.localLlmModel, this.config.localLlmMaxContext);
218
+ const truncated = user.length > contextSizes.maxInputChars ? user.slice(0, contextSizes.maxInputChars) + "\n\n[truncated]" : user;
219
+ const response = await this.localLlm.chatCompletion(
220
+ [
221
+ { role: "system", content: "Output valid JSON only." },
222
+ { role: "user", content: sys + "\n\n" + truncated }
223
+ ],
224
+ {
225
+ temperature: 0.2,
226
+ maxTokens: contextSizes.maxOutputTokens,
227
+ operation: "hourly_summary_extended",
228
+ priority: "background"
229
+ }
230
+ );
231
+ if (response?.content) {
232
+ const content = response.content.trim();
233
+ for (const candidate of extractJsonCandidates(content)) {
234
+ try {
235
+ const parsed = JSON.parse(candidate);
236
+ const result = HourlySummaryExtendedSchema.parse(parsed);
237
+ log.debug(
238
+ `generated extended hourly summary for ${sessionKey} at ${hourIso} in ${Date.now() - startTime}ms (local)`
239
+ );
240
+ return { ...result, _meta: { userTurns, assistantTurns, toolCalls, toolCounts } };
241
+ } catch {
242
+ }
243
+ }
244
+ }
245
+ } catch (err) {
246
+ if (!this.config.localLlmFallback) return null;
247
+ log.info("extended summary: local failed, falling back:", err);
248
+ }
249
+ }
250
+ try {
251
+ const result = await this.fallbackLlm.parseWithSchema(
252
+ [
253
+ { role: "system", content: sys },
254
+ { role: "user", content: user }
255
+ ],
256
+ HourlySummaryExtendedSchema,
257
+ this.withGatewayAgent({ temperature: 0.2, maxTokens: 2048 })
258
+ );
259
+ if (result) {
260
+ log.debug(`generated extended hourly summary for ${sessionKey} at ${hourIso} in ${Date.now() - startTime}ms (fallback)`);
261
+ return { ...result, _meta: { userTurns, assistantTurns, toolCalls, toolCounts } };
262
+ }
263
+ return null;
264
+ } catch (err) {
265
+ log.error("extended summary generation failed", err);
266
+ return null;
267
+ }
268
+ }
269
+ /**
270
+ * Generate summary using local LLM with JSON mode.
271
+ * Uses dynamic context sizing based on model capabilities.
272
+ */
273
+ async generateWithLocalLlm(conversation) {
274
+ const contextSizes = this.modelRegistry.calculateContextSizes(
275
+ this.config.localLlmModel,
276
+ this.config.localLlmMaxContext
277
+ );
278
+ log.debug(`Summarizer model context: ${contextSizes.description}`);
279
+ const maxConversationChars = contextSizes.maxInputChars;
280
+ const truncatedConversation = conversation.length > maxConversationChars ? conversation.slice(0, maxConversationChars) + "\n\n[truncated]" : conversation;
281
+ const instructions = `You are a conversation summarization system. Summarize the following conversation transcript into 3-5 concise bullet points.
282
+
283
+ Guidelines:
284
+ - Focus on what was accomplished, decided, or discussed
285
+ - Include specific topics, projects, or entities mentioned
286
+ - Note any significant user requests or agent actions
287
+ - Keep bullets brief but informative (1-2 sentences each)
288
+ - Skip trivial greetings or meta-conversation
289
+ - Use present tense for ongoing work, past for completed items
290
+
291
+ Respond with valid JSON matching this schema:
292
+ {
293
+ "bullets": ["bullet 1", "bullet 2", "bullet 3"]
294
+ }`;
295
+ const fullPrompt = `${instructions}
296
+
297
+ Conversation to summarize:
298
+ ${truncatedConversation}`;
299
+ const response = await this.localLlm.chatCompletion(
300
+ [
301
+ { role: "system", content: "You are a conversation summarization system. Output valid JSON only." },
302
+ { role: "user", content: fullPrompt }
303
+ ],
304
+ {
305
+ temperature: 0.3,
306
+ maxTokens: contextSizes.maxOutputTokens,
307
+ operation: "hourly_summary",
308
+ priority: "background"
309
+ }
310
+ );
311
+ if (!response?.content) {
312
+ return null;
313
+ }
314
+ try {
315
+ const content = response.content.trim();
316
+ for (const candidate of extractJsonCandidates(content)) {
317
+ try {
318
+ const parsed = JSON.parse(candidate);
319
+ return {
320
+ bullets: Array.isArray(parsed.bullets) ? parsed.bullets : []
321
+ };
322
+ } catch {
323
+ }
324
+ }
325
+ return null;
326
+ } catch (err) {
327
+ log.warn("local LLM summary: failed to parse JSON response:", err);
328
+ return null;
329
+ }
330
+ }
331
+ // Save summary to file
332
+ async saveSummary(summary) {
333
+ const sessionDir = path.join(this.summariesDir, summary.sessionKey);
334
+ await mkdir(sessionDir, { recursive: true });
335
+ const dateStr = summary.hour.slice(0, 10);
336
+ const filePath = path.join(sessionDir, `${dateStr}.md`);
337
+ const hourStr = summary.hour.slice(11, 13);
338
+ const lines = [];
339
+ let existingContent = "";
340
+ try {
341
+ existingContent = await readFile(filePath, "utf-8");
342
+ } catch {
343
+ }
344
+ const hourHeader = `## ${hourStr}:00`;
345
+ if (existingContent.includes(hourHeader)) {
346
+ const beforeHour = existingContent.split(hourHeader)[0];
347
+ const afterMatch = existingContent.split(hourHeader)[1];
348
+ const afterHour = afterMatch ? afterMatch.split("\n## ")[1] : void 0;
349
+ const newSection = this.formatHourSection(summary, hourHeader);
350
+ if (afterHour) {
351
+ existingContent = beforeHour + newSection + "\n## " + afterHour;
352
+ } else {
353
+ existingContent = beforeHour + newSection;
354
+ }
355
+ await writeFile(filePath, existingContent, "utf-8");
356
+ log.debug(`updated hourly summary for ${summary.sessionKey} at ${hourStr}:00`);
357
+ } else {
358
+ const newSection = this.formatHourSection(summary, hourHeader);
359
+ if (existingContent) {
360
+ await writeFile(filePath, existingContent.trimEnd() + "\n\n" + newSection, "utf-8");
361
+ } else {
362
+ const header = `# Hourly Summaries \u2014 ${dateStr}
363
+
364
+ *Session: ${summary.sessionKey}*
365
+ `;
366
+ await writeFile(filePath, header + "\n" + newSection, "utf-8");
367
+ }
368
+ log.debug(`saved hourly summary for ${summary.sessionKey} at ${hourStr}:00`);
369
+ }
370
+ try {
371
+ await upsertSummarySnapshot(this.config.memoryDir, summary);
372
+ } catch (error) {
373
+ log.warn(
374
+ `hourly summarizer: failed to update summary snapshot for ${summary.sessionKey} (fail-open): ${String(error)}`
375
+ );
376
+ }
377
+ }
378
+ formatHourSection(summary, hourHeader) {
379
+ const ext = summary._extended;
380
+ const meta = summary._extendedMeta;
381
+ const lines = [hourHeader, ""];
382
+ if (this.config.hourlySummariesExtendedEnabled && ext) {
383
+ lines.push("### Topics Discussed");
384
+ for (const t of ext.topics) lines.push(`- ${t}`);
385
+ lines.push("");
386
+ lines.push("### Decisions Made");
387
+ for (const d of ext.decisions) lines.push(`- ${d}`);
388
+ lines.push("");
389
+ lines.push("### Action Items");
390
+ for (const a of ext.actionItems) lines.push(`- ${a}`);
391
+ lines.push("");
392
+ lines.push("### Rejected Ideas / Reversals");
393
+ for (const r of ext.rejected) lines.push(`- ${r}`);
394
+ lines.push("");
395
+ if (meta && Object.keys(meta.toolCounts).length > 0) {
396
+ lines.push("### Tools Used");
397
+ const top = Object.entries(meta.toolCounts).sort((a, b) => b[1] - a[1]).slice(0, 12);
398
+ for (const [name, count] of top) lines.push(`- ${name}: ${count}`);
399
+ lines.push("");
400
+ }
401
+ lines.push("### Stats");
402
+ lines.push(`- Turns: ${summary.turnCount}`);
403
+ if (meta) {
404
+ lines.push(`- User turns: ${meta.userTurns}`);
405
+ lines.push(`- Assistant turns: ${meta.assistantTurns}`);
406
+ lines.push(`- Tool calls: ${meta.toolCalls}`);
407
+ }
408
+ lines.push("");
409
+ return lines.join("\n");
410
+ }
411
+ for (const bullet of summary.bullets) lines.push(`- ${bullet}`);
412
+ lines.push(` *(${summary.turnCount} turns)*`);
413
+ lines.push("");
414
+ return lines.join("\n");
415
+ }
416
+ // Read recent summaries for recall injection
417
+ async readRecent(sessionKey, hours) {
418
+ try {
419
+ const cutoffTime = Date.now() - hours * 60 * 60 * 1e3;
420
+ const snapshot = await readSummarySnapshot(this.config.memoryDir, sessionKey);
421
+ if (snapshot) {
422
+ return snapshot.filter((s) => new Date(s.hour).getTime() >= cutoffTime).sort((a, b) => new Date(b.hour).getTime() - new Date(a.hour).getTime());
423
+ }
424
+ const sessionDir = path.join(this.summariesDir, sessionKey);
425
+ const files = await readdir(sessionDir);
426
+ const mdFiles = files.filter((f) => f.endsWith(".md"));
427
+ const summaries = [];
428
+ for (const file of mdFiles) {
429
+ const filePath = path.join(sessionDir, file);
430
+ const content = await readFile(filePath, "utf-8");
431
+ const parsed = this.parseSummaryFile(content, sessionKey, file);
432
+ summaries.push(...parsed);
433
+ }
434
+ const sortedSummaries = summaries.sort(
435
+ (a, b) => new Date(b.hour).getTime() - new Date(a.hour).getTime()
436
+ );
437
+ const recent = sortedSummaries.filter(
438
+ (s) => new Date(s.hour).getTime() >= cutoffTime
439
+ );
440
+ if (sortedSummaries.length > 0) {
441
+ try {
442
+ await writeSummarySnapshot(
443
+ this.config.memoryDir,
444
+ sessionKey,
445
+ sortedSummaries
446
+ );
447
+ } catch (error) {
448
+ log.warn(
449
+ `hourly summarizer: failed to materialize summary snapshot for ${sessionKey} (fail-open): ${String(error)}`
450
+ );
451
+ }
452
+ }
453
+ return recent;
454
+ } catch {
455
+ return [];
456
+ }
457
+ }
458
+ parseSummaryFile(content, sessionKey, filename) {
459
+ const summaries = [];
460
+ const dateMatch = filename.match(/^(\d{4}-\d{2}-\d{2})\.md$/);
461
+ if (!dateMatch) return summaries;
462
+ const dateStr = dateMatch[1];
463
+ const hourSections = content.split(/\n## (\d{2}):00\n/);
464
+ for (let i = 1; i < hourSections.length; i += 2) {
465
+ const hourStr = hourSections[i];
466
+ const sectionContent = hourSections[i + 1] || "";
467
+ const bullets = [];
468
+ const lines = sectionContent.split("\n");
469
+ let turnCount = 0;
470
+ let inTopics = false;
471
+ let sawExtendedTopicsHeader = false;
472
+ for (const line of lines) {
473
+ if (line.startsWith("### Topics")) {
474
+ inTopics = true;
475
+ sawExtendedTopicsHeader = true;
476
+ continue;
477
+ }
478
+ if (line.startsWith("### ") && !line.startsWith("### Topics")) {
479
+ inTopics = false;
480
+ }
481
+ const bulletMatch = line.match(/^- (.+)$/);
482
+ if (bulletMatch) {
483
+ if (!sawExtendedTopicsHeader || inTopics) bullets.push(bulletMatch[1]);
484
+ }
485
+ const turnMatch = line.match(/\((\d+) turns?\)/);
486
+ if (turnMatch) turnCount = parseInt(turnMatch[1], 10);
487
+ }
488
+ if (bullets.length > 0) {
489
+ summaries.push({
490
+ hour: `${dateStr}T${hourStr}:00:00.000Z`,
491
+ sessionKey,
492
+ bullets,
493
+ turnCount,
494
+ generatedAt: ""
495
+ // Not stored in file, not needed for recall
496
+ });
497
+ }
498
+ }
499
+ return summaries;
500
+ }
501
+ // Format summaries for recall injection
502
+ formatForRecall(summaries, maxCount) {
503
+ if (summaries.length === 0) return "";
504
+ const limited = summaries.slice(0, maxCount);
505
+ const lines = [`## Recent Activity (last ${limited.length} hours)`];
506
+ for (const summary of limited) {
507
+ const hourStr = summary.hour.slice(11, 16);
508
+ for (const bullet of summary.bullets) {
509
+ lines.push(`- ${hourStr}: ${bullet}`);
510
+ }
511
+ }
512
+ return lines.join("\n");
513
+ }
514
+ // Main entry point for cron job
515
+ async runHourly() {
516
+ log.debug("running hourly summary generation");
517
+ const sessions = await this.getActiveSessions();
518
+ for (const sessionKey of sessions) {
519
+ const now = /* @__PURE__ */ new Date();
520
+ const hourStart = new Date(now.getTime() - 60 * 60 * 1e3);
521
+ hourStart.setMinutes(0, 0, 0);
522
+ const hourEnd = new Date(hourStart.getTime() + 60 * 60 * 1e3);
523
+ const entries = await this.getTranscriptEntries(sessionKey, hourStart, hourEnd);
524
+ if (entries.length === 0) {
525
+ log.debug(`no transcript entries for ${sessionKey} at ${hourStart.toISOString()}`);
526
+ continue;
527
+ }
528
+ const summary = await this.generateSummary(sessionKey, hourStart, entries);
529
+ if (summary) {
530
+ await this.saveSummary(summary);
531
+ log.info(`generated hourly summary for ${sessionKey} (${entries.length} turns)`);
532
+ }
533
+ }
534
+ }
535
+ // Get list of active sessions from transcript directory
536
+ async getActiveSessions() {
537
+ const transcriptDir = path.join(this.config.memoryDir, "transcripts");
538
+ try {
539
+ const sessionKeys = /* @__PURE__ */ new Set();
540
+ const typeEntries = await readdir(transcriptDir, { withFileTypes: true });
541
+ for (const typeEnt of typeEntries) {
542
+ if (!typeEnt.isDirectory()) continue;
543
+ const typeDir = path.join(transcriptDir, typeEnt.name);
544
+ const idEntries = await readdir(typeDir, { withFileTypes: true });
545
+ for (const idEnt of idEntries) {
546
+ if (!idEnt.isDirectory()) continue;
547
+ const chanDir = path.join(typeDir, idEnt.name);
548
+ const files = (await readdir(chanDir)).filter((f) => f.endsWith(".jsonl")).sort();
549
+ const last = files[files.length - 1];
550
+ if (!last) continue;
551
+ try {
552
+ const raw = await readFile(path.join(chanDir, last), "utf-8");
553
+ const firstLine = raw.split("\n").find((l) => l.trim().length > 0);
554
+ if (!firstLine) continue;
555
+ const entry = JSON.parse(firstLine);
556
+ if (typeof entry.sessionKey === "string" && entry.sessionKey.length > 0) {
557
+ sessionKeys.add(entry.sessionKey);
558
+ }
559
+ } catch {
560
+ }
561
+ }
562
+ }
563
+ return Array.from(sessionKeys);
564
+ } catch {
565
+ return [];
566
+ }
567
+ }
568
+ // Get transcript entries for a session within a time range
569
+ async getTranscriptEntries(sessionKey, startTime, endTime) {
570
+ const parts = sessionKey.split(":");
571
+ let channelType = "other";
572
+ let channelId = "default";
573
+ if (parts.length >= 3) {
574
+ channelType = parts[2];
575
+ if (channelType === "main") {
576
+ channelId = "default";
577
+ } else if (channelType === "discord" && parts.length >= 5 && parts[3] === "channel") {
578
+ channelId = parts[4];
579
+ } else if (channelType === "slack" && parts.length >= 5 && parts[3] === "channel") {
580
+ channelId = parts[4];
581
+ } else if (channelType === "cron" && parts.length >= 4) {
582
+ channelId = parts[3];
583
+ } else if (parts.length >= 4) {
584
+ channelId = parts[3];
585
+ }
586
+ }
587
+ const transcriptDir = path.join(this.config.memoryDir, "transcripts", channelType, channelId);
588
+ try {
589
+ const files = await readdir(transcriptDir);
590
+ const entries = [];
591
+ for (const file of files) {
592
+ if (!file.endsWith(".jsonl")) continue;
593
+ const transcriptPath = path.join(transcriptDir, file);
594
+ try {
595
+ const content = await readFile(transcriptPath, "utf-8");
596
+ const lines = content.trim().split("\n");
597
+ for (const line of lines) {
598
+ if (!line.trim()) continue;
599
+ try {
600
+ const entry = JSON.parse(line);
601
+ const entryTime = new Date(entry.timestamp).getTime();
602
+ if (entryTime >= startTime.getTime() && entryTime < endTime.getTime()) {
603
+ entries.push(entry);
604
+ }
605
+ } catch {
606
+ }
607
+ }
608
+ } catch {
609
+ }
610
+ }
611
+ return entries;
612
+ } catch {
613
+ return [];
614
+ }
615
+ }
616
+ };
617
+
618
+ export {
619
+ HourlySummarizer
620
+ };
621
+ //# sourceMappingURL=chunk-CDW777AI.js.map