@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,403 @@
1
+ // src/tmt.ts
2
+ import * as fs from "fs";
3
+ import * as path from "path";
4
+ import { mkdir, readFile, writeFile, readdir } from "fs/promises";
5
+ var TMT_DIR = "tmt";
6
+ var TMT_LEVEL_INPUT_LIMITS = {
7
+ hour: { totalChars: 48e3, itemChars: 2e3, maxItems: 64 },
8
+ day: { totalChars: 64e3, itemChars: 1800, maxItems: 96 },
9
+ week: { totalChars: 72e3, itemChars: 1600, maxItems: 120 },
10
+ persona: { totalChars: 8e4, itemChars: 1600, maxItems: 120 }
11
+ };
12
+ function capTmtSummaryInputs(inputs, level) {
13
+ const { totalChars, itemChars, maxItems } = TMT_LEVEL_INPUT_LIMITS[level];
14
+ if (inputs.length === 0) return [];
15
+ const capped = [];
16
+ let usedChars = 0;
17
+ for (const raw of inputs) {
18
+ if (capped.length >= maxItems || usedChars >= totalChars) break;
19
+ const trimmed = raw.trim();
20
+ if (!trimmed) continue;
21
+ const next = trimmed.length > itemChars ? `${trimmed.slice(0, itemChars - 1)}\u2026` : trimmed;
22
+ const separator = capped.length === 0 ? 0 : 2;
23
+ if (usedChars + separator + next.length > totalChars) break;
24
+ capped.push(next);
25
+ usedChars += separator + next.length;
26
+ }
27
+ if (capped.length > 0) return capped;
28
+ const fallback = inputs[0]?.trim() ?? "";
29
+ if (!fallback) return [];
30
+ return [fallback.length > itemChars ? `${fallback.slice(0, itemChars - 1)}\u2026` : fallback];
31
+ }
32
+ function tmtDir(baseDir) {
33
+ return path.join(baseDir, TMT_DIR);
34
+ }
35
+ function hourNodePath(baseDir, date, hour) {
36
+ return path.join(tmtDir(baseDir), date, `hour-${hour}.md`);
37
+ }
38
+ function dayNodePath(baseDir, date) {
39
+ return path.join(tmtDir(baseDir), date, "day.md");
40
+ }
41
+ function weekNodePath(baseDir, weekKey) {
42
+ return path.join(tmtDir(baseDir), `week-${weekKey}.md`);
43
+ }
44
+ function personaNodePath(baseDir) {
45
+ return path.join(tmtDir(baseDir), "persona.md");
46
+ }
47
+ function serialiseTmtNode(fm, summary) {
48
+ const yaml = [
49
+ "---",
50
+ `level: ${fm.level}`,
51
+ `periodStart: "${fm.periodStart}"`,
52
+ `periodEnd: "${fm.periodEnd}"`,
53
+ `memoryCount: ${fm.memoryCount}`,
54
+ `sourceIds: [${fm.sourceIds.map((id) => `"${id}"`).join(", ")}]`,
55
+ `builtAt: "${fm.builtAt}"`,
56
+ "---"
57
+ ].join("\n");
58
+ return `${yaml}
59
+
60
+ ${summary}
61
+ `;
62
+ }
63
+ function parseIsoDate(iso) {
64
+ return iso.slice(0, 10);
65
+ }
66
+ function parseIsoHour(iso) {
67
+ return iso.slice(11, 13);
68
+ }
69
+ function isoWeekKey(date) {
70
+ const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
71
+ const dayNum = d.getUTCDay() || 7;
72
+ d.setUTCDate(d.getUTCDate() + 4 - dayNum);
73
+ const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
74
+ const weekNo = Math.ceil(((d.getTime() - yearStart.getTime()) / 864e5 + 1) / 7);
75
+ return `${d.getUTCFullYear()}-${String(weekNo).padStart(2, "0")}`;
76
+ }
77
+ var TmtBuilder = class {
78
+ constructor(baseDir, cfg) {
79
+ this.baseDir = baseDir;
80
+ this.cfg = cfg;
81
+ }
82
+ baseDir;
83
+ cfg;
84
+ /**
85
+ * Called after each consolidation pass.
86
+ * Groups memories by hour, builds any missing hour nodes,
87
+ * then rolls up to day → week → persona if needed.
88
+ * All errors are caught and logged; never throws.
89
+ */
90
+ async maybeRebuildNodes(memories, summarize) {
91
+ if (!this.cfg.temporalMemoryTreeEnabled || memories.length === 0) return;
92
+ try {
93
+ await mkdir(tmtDir(this.baseDir), { recursive: true });
94
+ await this.buildHourNodes(memories, summarize);
95
+ await this.buildDayNodes(memories, summarize);
96
+ await this.buildWeekNodes(memories, summarize);
97
+ await this.buildPersonaNode(summarize);
98
+ } catch (err) {
99
+ console.warn(`[engram] tmt: rebuild failed (ignored): ${err}`);
100
+ }
101
+ }
102
+ async buildHourNodes(memories, summarize) {
103
+ const byHour = /* @__PURE__ */ new Map();
104
+ for (const m of memories) {
105
+ const date = parseIsoDate(m.created);
106
+ const hour = parseIsoHour(m.created);
107
+ const key = `${date}::${hour}`;
108
+ if (!byHour.has(key)) byHour.set(key, []);
109
+ byHour.get(key).push(m);
110
+ }
111
+ for (const [key, entries] of byHour) {
112
+ if (entries.length < this.cfg.tmtHourlyMinMemories) continue;
113
+ const [date, hour] = key.split("::");
114
+ const nodePath = hourNodePath(this.baseDir, date, hour);
115
+ let shouldBuild = !fs.existsSync(nodePath);
116
+ if (!shouldBuild) {
117
+ try {
118
+ const existing = await readFile(nodePath, "utf8");
119
+ const countMatch = existing.match(/memoryCount: (\d+)/);
120
+ if (!countMatch || parseInt(countMatch[1], 10) < entries.length) {
121
+ shouldBuild = true;
122
+ }
123
+ } catch {
124
+ shouldBuild = true;
125
+ }
126
+ }
127
+ if (!shouldBuild) continue;
128
+ let summary;
129
+ try {
130
+ summary = await summarize(capTmtSummaryInputs(entries.map((e) => e.content), "hour"), "hour");
131
+ } catch (err) {
132
+ console.warn(`[engram] tmt: hour node summarize failed for ${key} (ignored): ${err}`);
133
+ continue;
134
+ }
135
+ const sortedCreated = entries.map((e) => e.created).sort();
136
+ const fm = {
137
+ level: "hour",
138
+ periodStart: sortedCreated[0],
139
+ periodEnd: sortedCreated[sortedCreated.length - 1],
140
+ memoryCount: entries.length,
141
+ sourceIds: entries.map((e) => e.id),
142
+ builtAt: (/* @__PURE__ */ new Date()).toISOString()
143
+ };
144
+ await mkdir(path.dirname(nodePath), { recursive: true });
145
+ await writeFile(nodePath, serialiseTmtNode(fm, summary), "utf8");
146
+ }
147
+ }
148
+ async buildDayNodes(memories, summarize) {
149
+ const byDate = /* @__PURE__ */ new Map();
150
+ for (const m of memories) {
151
+ const date = parseIsoDate(m.created);
152
+ if (!byDate.has(date)) byDate.set(date, []);
153
+ byDate.get(date).push(m);
154
+ }
155
+ for (const [date, entries] of byDate) {
156
+ const nodePath = dayNodePath(this.baseDir, date);
157
+ let shouldBuild = !fs.existsSync(nodePath);
158
+ if (!shouldBuild) {
159
+ try {
160
+ const existing = await readFile(nodePath, "utf8");
161
+ const countMatch = existing.match(/memoryCount: (\d+)/);
162
+ if (!countMatch || parseInt(countMatch[1], 10) < entries.length) {
163
+ shouldBuild = true;
164
+ }
165
+ } catch {
166
+ shouldBuild = true;
167
+ }
168
+ }
169
+ if (!shouldBuild) continue;
170
+ const inputs = [];
171
+ const hourToEntries = /* @__PURE__ */ new Map();
172
+ for (const e of entries) {
173
+ const h = parseIsoHour(e.created);
174
+ if (!hourToEntries.has(h)) hourToEntries.set(h, []);
175
+ hourToEntries.get(h).push(e);
176
+ }
177
+ for (const [h, hourEntries] of hourToEntries) {
178
+ const hPath = hourNodePath(this.baseDir, date, h);
179
+ if (fs.existsSync(hPath)) {
180
+ try {
181
+ const hContent = await readFile(hPath, "utf8");
182
+ const hSummary = hContent.replace(/^---[\s\S]*?---\n\n?/, "").trim();
183
+ if (hSummary) {
184
+ inputs.push(hSummary);
185
+ continue;
186
+ }
187
+ } catch {
188
+ }
189
+ }
190
+ inputs.push(...hourEntries.map((e) => e.content));
191
+ }
192
+ if (inputs.length === 0) inputs.push(...entries.map((e) => e.content));
193
+ let summary;
194
+ try {
195
+ summary = await summarize(capTmtSummaryInputs(inputs, "day"), "day");
196
+ } catch (err) {
197
+ console.warn(`[engram] tmt: day node summarize failed for ${date} (ignored): ${err}`);
198
+ continue;
199
+ }
200
+ const sortedCreated = entries.map((e) => e.created).sort();
201
+ const fm = {
202
+ level: "day",
203
+ periodStart: sortedCreated[0],
204
+ periodEnd: sortedCreated[sortedCreated.length - 1],
205
+ memoryCount: entries.length,
206
+ sourceIds: entries.map((e) => e.id),
207
+ builtAt: (/* @__PURE__ */ new Date()).toISOString()
208
+ };
209
+ await mkdir(path.dirname(nodePath), { recursive: true });
210
+ await writeFile(nodePath, serialiseTmtNode(fm, summary), "utf8");
211
+ }
212
+ }
213
+ /**
214
+ * Build or update week-level nodes from the day nodes already on disk.
215
+ * Groups memories by ISO week; for each week that has a day node but no
216
+ * (or stale) week node, reads day node summaries and builds a week node.
217
+ * Fail-open: errors per week are caught and skipped.
218
+ */
219
+ async buildWeekNodes(memories, summarize) {
220
+ const weekToEntries = /* @__PURE__ */ new Map();
221
+ for (const m of memories) {
222
+ const week = isoWeekKey(new Date(m.created));
223
+ if (!weekToEntries.has(week)) weekToEntries.set(week, []);
224
+ weekToEntries.get(week).push(m);
225
+ }
226
+ for (const [week, entries] of weekToEntries) {
227
+ const nodePath = weekNodePath(this.baseDir, week);
228
+ let shouldBuild = !fs.existsSync(nodePath);
229
+ if (!shouldBuild) {
230
+ try {
231
+ const existing = await readFile(nodePath, "utf8");
232
+ const countMatch = existing.match(/memoryCount: (\d+)/);
233
+ if (!countMatch || parseInt(countMatch[1], 10) < entries.length) {
234
+ shouldBuild = true;
235
+ }
236
+ } catch {
237
+ shouldBuild = true;
238
+ }
239
+ }
240
+ if (!shouldBuild) continue;
241
+ try {
242
+ const dir = tmtDir(this.baseDir);
243
+ let allDirs = [];
244
+ try {
245
+ allDirs = await readdir(dir);
246
+ } catch {
247
+ continue;
248
+ }
249
+ const dateDirs = allDirs.filter((d) => /^\d{4}-\d{2}-\d{2}$/.test(d));
250
+ const daySummaries = [];
251
+ for (const dateDir of dateDirs) {
252
+ const w = isoWeekKey(/* @__PURE__ */ new Date(dateDir + "T00:00:00Z"));
253
+ if (w !== week) continue;
254
+ const dayPath = dayNodePath(this.baseDir, dateDir);
255
+ if (fs.existsSync(dayPath)) {
256
+ try {
257
+ const content = await readFile(dayPath, "utf8");
258
+ const summary2 = content.replace(/^---[\s\S]*?---\n\n?/, "").trim();
259
+ if (summary2) daySummaries.push(summary2);
260
+ } catch {
261
+ }
262
+ }
263
+ }
264
+ const inputs = daySummaries.length > 0 ? daySummaries : entries.map((e) => e.content);
265
+ const summary = await summarize(capTmtSummaryInputs(inputs, "week"), "week");
266
+ const sortedCreated = entries.map((e) => e.created).sort();
267
+ const fm = {
268
+ level: "week",
269
+ periodStart: sortedCreated[0],
270
+ periodEnd: sortedCreated[sortedCreated.length - 1],
271
+ memoryCount: entries.length,
272
+ sourceIds: entries.map((e) => e.id),
273
+ builtAt: (/* @__PURE__ */ new Date()).toISOString()
274
+ };
275
+ await mkdir(path.dirname(nodePath), { recursive: true });
276
+ await writeFile(nodePath, serialiseTmtNode(fm, summary), "utf8");
277
+ } catch (err) {
278
+ console.warn(`[engram] tmt: week node build failed for ${week} (ignored): ${err}`);
279
+ }
280
+ }
281
+ }
282
+ /**
283
+ * Build or update the persona node from the most recent week-level summaries.
284
+ * Reads up to 4 recent week nodes and synthesizes a persona-level narrative.
285
+ * Fail-open: skips silently if no week nodes exist or summarize fails.
286
+ */
287
+ async buildPersonaNode(summarize) {
288
+ try {
289
+ const dir = tmtDir(this.baseDir);
290
+ let allFiles = [];
291
+ try {
292
+ allFiles = await readdir(dir);
293
+ } catch {
294
+ return;
295
+ }
296
+ const weekFiles = allFiles.filter((f) => /^week-\d{4}-\d{2}\.md$/.test(f)).sort().reverse().slice(0, 4);
297
+ if (weekFiles.length === 0) return;
298
+ const weekSummaries = [];
299
+ let totalCount = 0;
300
+ let earliestStart;
301
+ let latestEnd;
302
+ for (const f of weekFiles) {
303
+ try {
304
+ const content = await readFile(path.join(dir, f), "utf8");
305
+ const summary2 = content.replace(/^---[\s\S]*?---\n\n?/, "").trim();
306
+ if (summary2) weekSummaries.push(summary2);
307
+ const countMatch = content.match(/memoryCount: (\d+)/);
308
+ if (countMatch) totalCount += parseInt(countMatch[1], 10);
309
+ const startMatch = content.match(/periodStart: "([^"]+)"/);
310
+ const endMatch = content.match(/periodEnd: "([^"]+)"/);
311
+ if (startMatch) {
312
+ if (!earliestStart || startMatch[1] < earliestStart) earliestStart = startMatch[1];
313
+ }
314
+ if (endMatch) {
315
+ if (!latestEnd || endMatch[1] > latestEnd) latestEnd = endMatch[1];
316
+ }
317
+ } catch {
318
+ }
319
+ }
320
+ if (weekSummaries.length === 0) return;
321
+ const nodePath = personaNodePath(this.baseDir);
322
+ let shouldBuild = !fs.existsSync(nodePath);
323
+ if (!shouldBuild) {
324
+ try {
325
+ const existing = await readFile(nodePath, "utf8");
326
+ const countMatch = existing.match(/memoryCount: (\d+)/);
327
+ if (!countMatch || parseInt(countMatch[1], 10) !== totalCount) {
328
+ shouldBuild = true;
329
+ }
330
+ } catch {
331
+ shouldBuild = true;
332
+ }
333
+ }
334
+ if (!shouldBuild) return;
335
+ const summary = await summarize(capTmtSummaryInputs(weekSummaries, "persona"), "persona");
336
+ const now = (/* @__PURE__ */ new Date()).toISOString();
337
+ const fm = {
338
+ level: "persona",
339
+ periodStart: earliestStart ?? now,
340
+ periodEnd: latestEnd ?? now,
341
+ memoryCount: totalCount,
342
+ sourceIds: [],
343
+ builtAt: now
344
+ };
345
+ await writeFile(nodePath, serialiseTmtNode(fm, summary), "utf8");
346
+ } catch (err) {
347
+ console.warn(`[engram] tmt: persona node build failed (ignored): ${err}`);
348
+ }
349
+ }
350
+ /**
351
+ * Return the summary text of the most relevant TMT node for a given prompt.
352
+ * Preference: day node for today > most recent day node.
353
+ * Returns null if no nodes exist or feature is disabled.
354
+ */
355
+ async getMostRelevantNode() {
356
+ if (!this.cfg.temporalMemoryTreeEnabled) return null;
357
+ try {
358
+ const dir = tmtDir(this.baseDir);
359
+ if (!fs.existsSync(dir)) return null;
360
+ const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
361
+ const todayDay = dayNodePath(this.baseDir, today);
362
+ if (fs.existsSync(todayDay)) {
363
+ const content = await readFile(todayDay, "utf8");
364
+ const summary = content.replace(/^---[\s\S]*?---\n\n?/, "").trim();
365
+ if (summary) return { level: "day", summary };
366
+ }
367
+ let entries = [];
368
+ try {
369
+ entries = await readdir(dir);
370
+ } catch {
371
+ return null;
372
+ }
373
+ const dateDirs = entries.filter((e) => /^\d{4}-\d{2}-\d{2}$/.test(e)).sort().reverse();
374
+ for (const dateDir of dateDirs) {
375
+ const dayPath = dayNodePath(this.baseDir, dateDir);
376
+ if (fs.existsSync(dayPath)) {
377
+ const content = await readFile(dayPath, "utf8");
378
+ const summary = content.replace(/^---[\s\S]*?---\n\n?/, "").trim();
379
+ if (summary) return { level: "day", summary };
380
+ }
381
+ }
382
+ return null;
383
+ } catch {
384
+ return null;
385
+ }
386
+ }
387
+ };
388
+
389
+ export {
390
+ TMT_DIR,
391
+ capTmtSummaryInputs,
392
+ tmtDir,
393
+ hourNodePath,
394
+ dayNodePath,
395
+ weekNodePath,
396
+ personaNodePath,
397
+ serialiseTmtNode,
398
+ parseIsoDate,
399
+ parseIsoHour,
400
+ isoWeekKey,
401
+ TmtBuilder
402
+ };
403
+ //# sourceMappingURL=chunk-TPB3I2AC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tmt.ts"],"sourcesContent":["/**\n * Temporal Memory Tree (TiMem-inspired, v8.2)\n *\n * Builds a hierarchy of summarised memory nodes:\n * hour-HH.md → day.md → week-YYYY-WW.md → persona.md\n *\n * Stored under `<baseDir>/tmt/`.\n * All writes are fail-open: errors are caught and logged, never thrown.\n */\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { mkdir, readFile, writeFile, readdir } from \"node:fs/promises\";\n\nexport const TMT_DIR = \"tmt\";\n\nexport type TmtLevel = \"hour\" | \"day\" | \"week\" | \"persona\";\n\nexport interface TmtNodeFrontmatter {\n level: TmtLevel;\n periodStart: string; // ISO date-time\n periodEnd: string; // ISO date-time\n memoryCount: number;\n sourceIds: string[];\n builtAt: string; // ISO date-time\n}\n\nexport interface TmtConfig {\n temporalMemoryTreeEnabled: boolean;\n tmtHourlyMinMemories: number; // default 3\n tmtSummaryMaxTokens: number; // default 300\n}\n\nexport interface MemoryEntry {\n path: string;\n id: string;\n created: string; // ISO date-time\n content: string;\n}\n\nconst TMT_LEVEL_INPUT_LIMITS: Record<TmtLevel, { totalChars: number; itemChars: number; maxItems: number }> = {\n hour: { totalChars: 48_000, itemChars: 2_000, maxItems: 64 },\n day: { totalChars: 64_000, itemChars: 1_800, maxItems: 96 },\n week: { totalChars: 72_000, itemChars: 1_600, maxItems: 120 },\n persona: { totalChars: 80_000, itemChars: 1_600, maxItems: 120 },\n};\n\nexport function capTmtSummaryInputs(inputs: string[], level: TmtLevel): string[] {\n const { totalChars, itemChars, maxItems } = TMT_LEVEL_INPUT_LIMITS[level];\n if (inputs.length === 0) return [];\n\n const capped: string[] = [];\n let usedChars = 0;\n\n for (const raw of inputs) {\n if (capped.length >= maxItems || usedChars >= totalChars) break;\n const trimmed = raw.trim();\n if (!trimmed) continue;\n\n const next = trimmed.length > itemChars ? `${trimmed.slice(0, itemChars - 1)}…` : trimmed;\n const separator = capped.length === 0 ? 0 : 2;\n if (usedChars + separator + next.length > totalChars) break;\n capped.push(next);\n usedChars += separator + next.length;\n }\n\n if (capped.length > 0) return capped;\n const fallback = inputs[0]?.trim() ?? \"\";\n if (!fallback) return [];\n return [fallback.length > itemChars ? `${fallback.slice(0, itemChars - 1)}…` : fallback];\n}\n\n// ── Path helpers ────────────────────────────────────────────────────────────\n\nexport function tmtDir(baseDir: string): string {\n return path.join(baseDir, TMT_DIR);\n}\n\nexport function hourNodePath(baseDir: string, date: string, hour: string): string {\n return path.join(tmtDir(baseDir), date, `hour-${hour}.md`);\n}\n\nexport function dayNodePath(baseDir: string, date: string): string {\n return path.join(tmtDir(baseDir), date, \"day.md\");\n}\n\nexport function weekNodePath(baseDir: string, weekKey: string): string {\n return path.join(tmtDir(baseDir), `week-${weekKey}.md`);\n}\n\nexport function personaNodePath(baseDir: string): string {\n return path.join(tmtDir(baseDir), \"persona.md\");\n}\n\n// ── Frontmatter helpers ─────────────────────────────────────────────────────\n\nexport function serialiseTmtNode(fm: TmtNodeFrontmatter, summary: string): string {\n const yaml = [\n \"---\",\n `level: ${fm.level}`,\n `periodStart: \"${fm.periodStart}\"`,\n `periodEnd: \"${fm.periodEnd}\"`,\n `memoryCount: ${fm.memoryCount}`,\n `sourceIds: [${fm.sourceIds.map((id) => `\"${id}\"`).join(\", \")}]`,\n `builtAt: \"${fm.builtAt}\"`,\n \"---\",\n ].join(\"\\n\");\n return `${yaml}\\n\\n${summary}\\n`;\n}\n\nexport function parseIsoDate(iso: string): string {\n return iso.slice(0, 10); // YYYY-MM-DD\n}\n\nexport function parseIsoHour(iso: string): string {\n return iso.slice(11, 13); // HH\n}\n\n// Returns ISO week key: YYYY-WW\nexport function isoWeekKey(date: Date): string {\n const d = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n const weekNo = Math.ceil((((d.getTime() - yearStart.getTime()) / 86400000) + 1) / 7);\n return `${d.getUTCFullYear()}-${String(weekNo).padStart(2, \"0\")}`;\n}\n\n// ── TmtBuilder ──────────────────────────────────────────────────────────────\n\nexport type SummarizeFn = (memories: string[], level: TmtLevel) => Promise<string>;\n\nexport class TmtBuilder {\n constructor(\n private readonly baseDir: string,\n private readonly cfg: TmtConfig,\n ) {}\n\n /**\n * Called after each consolidation pass.\n * Groups memories by hour, builds any missing hour nodes,\n * then rolls up to day → week → persona if needed.\n * All errors are caught and logged; never throws.\n */\n async maybeRebuildNodes(\n memories: MemoryEntry[],\n summarize: SummarizeFn,\n ): Promise<void> {\n if (!this.cfg.temporalMemoryTreeEnabled || memories.length === 0) return;\n try {\n await mkdir(tmtDir(this.baseDir), { recursive: true });\n await this.buildHourNodes(memories, summarize);\n await this.buildDayNodes(memories, summarize);\n await this.buildWeekNodes(memories, summarize);\n await this.buildPersonaNode(summarize);\n } catch (err) {\n console.warn(`[engram] tmt: rebuild failed (ignored): ${err}`);\n }\n }\n\n private async buildHourNodes(memories: MemoryEntry[], summarize: SummarizeFn): Promise<void> {\n // Group by date+hour\n const byHour = new Map<string, MemoryEntry[]>();\n for (const m of memories) {\n const date = parseIsoDate(m.created);\n const hour = parseIsoHour(m.created);\n const key = `${date}::${hour}`;\n if (!byHour.has(key)) byHour.set(key, []);\n byHour.get(key)!.push(m);\n }\n\n for (const [key, entries] of byHour) {\n if (entries.length < this.cfg.tmtHourlyMinMemories) continue;\n const [date, hour] = key.split(\"::\");\n const nodePath = hourNodePath(this.baseDir, date, hour);\n\n // Rebuild if missing or if more memories arrived for this hour\n let shouldBuild = !fs.existsSync(nodePath);\n if (!shouldBuild) {\n try {\n const existing = await readFile(nodePath, \"utf8\");\n const countMatch = existing.match(/memoryCount: (\\d+)/);\n if (!countMatch || parseInt(countMatch[1], 10) < entries.length) {\n shouldBuild = true; // more memories now — rebuild\n }\n } catch { shouldBuild = true; }\n }\n if (!shouldBuild) continue;\n\n let summary: string;\n try {\n summary = await summarize(capTmtSummaryInputs(entries.map((e) => e.content), \"hour\"), \"hour\");\n } catch (err) {\n console.warn(`[engram] tmt: hour node summarize failed for ${key} (ignored): ${err}`);\n continue;\n }\n const sortedCreated = entries.map((e) => e.created).sort();\n const fm: TmtNodeFrontmatter = {\n level: \"hour\",\n periodStart: sortedCreated[0],\n periodEnd: sortedCreated[sortedCreated.length - 1],\n memoryCount: entries.length,\n sourceIds: entries.map((e) => e.id),\n builtAt: new Date().toISOString(),\n };\n await mkdir(path.dirname(nodePath), { recursive: true });\n await writeFile(nodePath, serialiseTmtNode(fm, summary), \"utf8\");\n }\n }\n\n private async buildDayNodes(memories: MemoryEntry[], summarize: SummarizeFn): Promise<void> {\n // Group by date\n const byDate = new Map<string, MemoryEntry[]>();\n for (const m of memories) {\n const date = parseIsoDate(m.created);\n if (!byDate.has(date)) byDate.set(date, []);\n byDate.get(date)!.push(m);\n }\n\n for (const [date, entries] of byDate) {\n const nodePath = dayNodePath(this.baseDir, date);\n // Rebuild day node if it doesn't exist or if memory count changed\n let shouldBuild = !fs.existsSync(nodePath);\n if (!shouldBuild) {\n try {\n const existing = await readFile(nodePath, \"utf8\");\n const countMatch = existing.match(/memoryCount: (\\d+)/);\n if (!countMatch || parseInt(countMatch[1], 10) < entries.length) {\n shouldBuild = true; // more memories now — rebuild\n }\n } catch { shouldBuild = true; }\n }\n if (!shouldBuild) continue;\n\n // Per-hour: use hour node summary if available, raw content otherwise\n const inputs: string[] = [];\n const hourToEntries = new Map<string, MemoryEntry[]>();\n for (const e of entries) {\n const h = parseIsoHour(e.created);\n if (!hourToEntries.has(h)) hourToEntries.set(h, []);\n hourToEntries.get(h)!.push(e);\n }\n for (const [h, hourEntries] of hourToEntries) {\n const hPath = hourNodePath(this.baseDir, date, h);\n if (fs.existsSync(hPath)) {\n try {\n const hContent = await readFile(hPath, \"utf8\");\n const hSummary = hContent.replace(/^---[\\s\\S]*?---\\n\\n?/, \"\").trim();\n if (hSummary) { inputs.push(hSummary); continue; }\n } catch { /* fall through to raw content */ }\n }\n inputs.push(...hourEntries.map((e) => e.content));\n }\n if (inputs.length === 0) inputs.push(...entries.map((e) => e.content));\n\n let summary: string;\n try {\n summary = await summarize(capTmtSummaryInputs(inputs, \"day\"), \"day\");\n } catch (err) {\n console.warn(`[engram] tmt: day node summarize failed for ${date} (ignored): ${err}`);\n continue;\n }\n const sortedCreated = entries.map((e) => e.created).sort();\n const fm: TmtNodeFrontmatter = {\n level: \"day\",\n periodStart: sortedCreated[0],\n periodEnd: sortedCreated[sortedCreated.length - 1],\n memoryCount: entries.length,\n sourceIds: entries.map((e) => e.id),\n builtAt: new Date().toISOString(),\n };\n await mkdir(path.dirname(nodePath), { recursive: true });\n await writeFile(nodePath, serialiseTmtNode(fm, summary), \"utf8\");\n }\n }\n\n /**\n * Build or update week-level nodes from the day nodes already on disk.\n * Groups memories by ISO week; for each week that has a day node but no\n * (or stale) week node, reads day node summaries and builds a week node.\n * Fail-open: errors per week are caught and skipped.\n */\n private async buildWeekNodes(memories: MemoryEntry[], summarize: SummarizeFn): Promise<void> {\n // Determine which ISO weeks appear in this memory batch\n const weekToEntries = new Map<string, MemoryEntry[]>();\n for (const m of memories) {\n const week = isoWeekKey(new Date(m.created));\n if (!weekToEntries.has(week)) weekToEntries.set(week, []);\n weekToEntries.get(week)!.push(m);\n }\n\n for (const [week, entries] of weekToEntries) {\n const nodePath = weekNodePath(this.baseDir, week);\n\n // Rebuild if missing or if memory count grew\n let shouldBuild = !fs.existsSync(nodePath);\n if (!shouldBuild) {\n try {\n const existing = await readFile(nodePath, \"utf8\");\n const countMatch = existing.match(/memoryCount: (\\d+)/);\n if (!countMatch || parseInt(countMatch[1], 10) < entries.length) {\n shouldBuild = true;\n }\n } catch { shouldBuild = true; }\n }\n if (!shouldBuild) continue;\n\n try {\n // Collect day-node summaries for days that fall in this week\n const dir = tmtDir(this.baseDir);\n let allDirs: string[] = [];\n try { allDirs = await readdir(dir); } catch { continue; }\n const dateDirs = allDirs.filter((d) => /^\\d{4}-\\d{2}-\\d{2}$/.test(d));\n\n const daySummaries: string[] = [];\n for (const dateDir of dateDirs) {\n const w = isoWeekKey(new Date(dateDir + \"T00:00:00Z\"));\n if (w !== week) continue;\n const dayPath = dayNodePath(this.baseDir, dateDir);\n if (fs.existsSync(dayPath)) {\n try {\n const content = await readFile(dayPath, \"utf8\");\n const summary = content.replace(/^---[\\s\\S]*?---\\n\\n?/, \"\").trim();\n if (summary) daySummaries.push(summary);\n } catch { /* skip */ }\n }\n }\n\n // Fall back to raw memory content if no day summaries available\n const inputs = daySummaries.length > 0 ? daySummaries : entries.map((e) => e.content);\n const summary = await summarize(capTmtSummaryInputs(inputs, \"week\"), \"week\");\n const sortedCreated = entries.map((e) => e.created).sort();\n const fm: TmtNodeFrontmatter = {\n level: \"week\",\n periodStart: sortedCreated[0],\n periodEnd: sortedCreated[sortedCreated.length - 1],\n memoryCount: entries.length,\n sourceIds: entries.map((e) => e.id),\n builtAt: new Date().toISOString(),\n };\n await mkdir(path.dirname(nodePath), { recursive: true });\n await writeFile(nodePath, serialiseTmtNode(fm, summary), \"utf8\");\n } catch (err) {\n console.warn(`[engram] tmt: week node build failed for ${week} (ignored): ${err}`);\n }\n }\n }\n\n /**\n * Build or update the persona node from the most recent week-level summaries.\n * Reads up to 4 recent week nodes and synthesizes a persona-level narrative.\n * Fail-open: skips silently if no week nodes exist or summarize fails.\n */\n private async buildPersonaNode(summarize: SummarizeFn): Promise<void> {\n try {\n const dir = tmtDir(this.baseDir);\n let allFiles: string[] = [];\n try { allFiles = await readdir(dir); } catch { return; }\n\n const weekFiles = allFiles\n .filter((f) => /^week-\\d{4}-\\d{2}\\.md$/.test(f))\n .sort()\n .reverse()\n .slice(0, 4); // Use at most 4 recent weeks\n\n if (weekFiles.length === 0) return;\n\n const weekSummaries: string[] = [];\n let totalCount = 0;\n let earliestStart: string | undefined;\n let latestEnd: string | undefined;\n for (const f of weekFiles) {\n try {\n const content = await readFile(path.join(dir, f), \"utf8\");\n const summary = content.replace(/^---[\\s\\S]*?---\\n\\n?/, \"\").trim();\n if (summary) weekSummaries.push(summary);\n const countMatch = content.match(/memoryCount: (\\d+)/);\n if (countMatch) totalCount += parseInt(countMatch[1], 10);\n const startMatch = content.match(/periodStart: \"([^\"]+)\"/);\n const endMatch = content.match(/periodEnd: \"([^\"]+)\"/);\n if (startMatch) {\n if (!earliestStart || startMatch[1] < earliestStart) earliestStart = startMatch[1];\n }\n if (endMatch) {\n if (!latestEnd || endMatch[1] > latestEnd) latestEnd = endMatch[1];\n }\n } catch { /* skip */ }\n }\n\n if (weekSummaries.length === 0) return;\n\n const nodePath = personaNodePath(this.baseDir);\n\n // Skip rebuild if persona node already reflects current week data\n let shouldBuild = !fs.existsSync(nodePath);\n if (!shouldBuild) {\n try {\n const existing = await readFile(nodePath, \"utf8\");\n const countMatch = existing.match(/memoryCount: (\\d+)/);\n if (!countMatch || parseInt(countMatch[1], 10) !== totalCount) {\n shouldBuild = true;\n }\n } catch { shouldBuild = true; }\n }\n if (!shouldBuild) return;\n\n const summary = await summarize(capTmtSummaryInputs(weekSummaries, \"persona\"), \"persona\");\n\n const now = new Date().toISOString();\n const fm: TmtNodeFrontmatter = {\n level: \"persona\",\n periodStart: earliestStart ?? now,\n periodEnd: latestEnd ?? now,\n memoryCount: totalCount,\n sourceIds: [],\n builtAt: now,\n };\n await writeFile(nodePath, serialiseTmtNode(fm, summary), \"utf8\");\n } catch (err) {\n console.warn(`[engram] tmt: persona node build failed (ignored): ${err}`);\n }\n }\n\n /**\n * Return the summary text of the most relevant TMT node for a given prompt.\n * Preference: day node for today > most recent day node.\n * Returns null if no nodes exist or feature is disabled.\n */\n async getMostRelevantNode(): Promise<{ level: TmtLevel; summary: string } | null> {\n if (!this.cfg.temporalMemoryTreeEnabled) return null;\n try {\n const dir = tmtDir(this.baseDir);\n if (!fs.existsSync(dir)) return null;\n\n // Try today's day node first\n const today = new Date().toISOString().slice(0, 10);\n const todayDay = dayNodePath(this.baseDir, today);\n if (fs.existsSync(todayDay)) {\n const content = await readFile(todayDay, \"utf8\");\n const summary = content.replace(/^---[\\s\\S]*?---\\n\\n?/, \"\").trim();\n if (summary) return { level: \"day\", summary };\n }\n\n // Find most recent date directory\n let entries: string[] = [];\n try { entries = await readdir(dir); } catch { return null; }\n const dateDirs = entries.filter((e) => /^\\d{4}-\\d{2}-\\d{2}$/.test(e)).sort().reverse();\n\n for (const dateDir of dateDirs) {\n const dayPath = dayNodePath(this.baseDir, dateDir);\n if (fs.existsSync(dayPath)) {\n const content = await readFile(dayPath, \"utf8\");\n const summary = content.replace(/^---[\\s\\S]*?---\\n\\n?/, \"\").trim();\n if (summary) return { level: \"day\", summary };\n }\n }\n return null;\n } catch {\n return null;\n }\n }\n}\n"],"mappings":"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","names":["summary"]}