@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,143 @@
1
+ import {
2
+ scanSignals
3
+ } from "./chunk-XYIK4LF6.js";
4
+ import {
5
+ log
6
+ } from "./chunk-KWBU5S5U.js";
7
+
8
+ // src/bootstrap.ts
9
+ import path from "path";
10
+ import { readdir, readFile } from "fs/promises";
11
+ var BootstrapEngine = class {
12
+ constructor(config, orchestrator) {
13
+ this.config = config;
14
+ this.orchestrator = orchestrator;
15
+ }
16
+ config;
17
+ orchestrator;
18
+ async run(options) {
19
+ const dryRun = options.dryRun === true;
20
+ const since = options.since ?? /* @__PURE__ */ new Date(0);
21
+ const end = /* @__PURE__ */ new Date();
22
+ const limit = Math.max(0, options.limit ?? Number.POSITIVE_INFINITY);
23
+ const sessions = await this.resolveSessions(options.sessionsDir, since, end);
24
+ const selected = sessions.slice(0, Number.isFinite(limit) ? limit : sessions.length);
25
+ const beforeCount = dryRun ? 0 : (await this.orchestrator.storage.readAllMemories()).length;
26
+ let turnsProcessed = 0;
27
+ let highSignalTurns = 0;
28
+ let skipped = 0;
29
+ for (const session of selected) {
30
+ for (const entry of session.entries) {
31
+ if (entry.role !== "user") continue;
32
+ turnsProcessed += 1;
33
+ const content = typeof entry.content === "string" ? entry.content.trim() : "";
34
+ if (!content) {
35
+ skipped += 1;
36
+ continue;
37
+ }
38
+ const signal = scanSignals(content, this.config.highSignalPatterns);
39
+ if (signal.level !== "high") {
40
+ skipped += 1;
41
+ continue;
42
+ }
43
+ highSignalTurns += 1;
44
+ if (!dryRun) {
45
+ await this.orchestrator.processTurn("user", content, session.sessionKey);
46
+ }
47
+ }
48
+ }
49
+ let memoriesCreated = 0;
50
+ if (!dryRun && highSignalTurns > 0) {
51
+ await this.orchestrator.waitForExtractionIdle();
52
+ const afterCount = (await this.orchestrator.storage.readAllMemories()).length;
53
+ memoriesCreated = Math.max(0, afterCount - beforeCount);
54
+ }
55
+ const result = {
56
+ sessionsScanned: selected.length,
57
+ turnsProcessed,
58
+ highSignalTurns,
59
+ memoriesCreated,
60
+ skipped
61
+ };
62
+ log.info(
63
+ `bootstrap complete: sessions=${result.sessionsScanned}, turns=${result.turnsProcessed}, high=${result.highSignalTurns}, created=${result.memoriesCreated}, skipped=${result.skipped}, dryRun=${dryRun}`
64
+ );
65
+ return result;
66
+ }
67
+ async resolveSessions(sessionsDir, since, until) {
68
+ if (sessionsDir && sessionsDir.trim().length > 0) {
69
+ return this.readSessionsFromDir(sessionsDir, since, until);
70
+ }
71
+ const keys = await this.orchestrator.transcript.listSessionKeys();
72
+ const sessions = [];
73
+ for (const key of keys) {
74
+ const entries = await this.orchestrator.transcript.readRange(
75
+ since.toISOString(),
76
+ until.toISOString(),
77
+ key
78
+ );
79
+ if (entries.length > 0) {
80
+ sessions.push({ sessionKey: key, entries });
81
+ }
82
+ }
83
+ return sessions;
84
+ }
85
+ async readSessionsFromDir(baseDir, since, until) {
86
+ const files = await this.listJsonlFiles(baseDir);
87
+ const bySession = /* @__PURE__ */ new Map();
88
+ for (const filePath of files) {
89
+ let raw = "";
90
+ try {
91
+ raw = await readFile(filePath, "utf-8");
92
+ } catch {
93
+ continue;
94
+ }
95
+ const lines = raw.split("\n").filter((line) => line.trim().length > 0);
96
+ for (const line of lines) {
97
+ let parsed;
98
+ try {
99
+ parsed = JSON.parse(line);
100
+ } catch {
101
+ continue;
102
+ }
103
+ const ts = new Date(String(parsed?.timestamp ?? ""));
104
+ if (Number.isNaN(ts.getTime())) continue;
105
+ if (ts < since || ts > until) continue;
106
+ const role = String(parsed?.role ?? "");
107
+ const content = typeof parsed?.content === "string" ? parsed.content : "";
108
+ if (!role || !content) continue;
109
+ const sessionKey = typeof parsed?.sessionKey === "string" && parsed.sessionKey.length > 0 ? parsed.sessionKey : path.relative(baseDir, filePath);
110
+ const list = bySession.get(sessionKey) ?? [];
111
+ list.push({
112
+ role,
113
+ content,
114
+ timestamp: ts.toISOString(),
115
+ sessionKey
116
+ });
117
+ bySession.set(sessionKey, list);
118
+ }
119
+ }
120
+ return Array.from(bySession.entries()).map(([sessionKey, entries]) => ({
121
+ sessionKey,
122
+ entries: entries.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime())
123
+ }));
124
+ }
125
+ async listJsonlFiles(dir) {
126
+ const out = [];
127
+ const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);
128
+ for (const entry of entries) {
129
+ const full = path.join(dir, entry.name);
130
+ if (entry.isDirectory()) {
131
+ out.push(...await this.listJsonlFiles(full));
132
+ } else if (entry.isFile() && full.endsWith(".jsonl")) {
133
+ out.push(full);
134
+ }
135
+ }
136
+ return out;
137
+ }
138
+ };
139
+
140
+ export {
141
+ BootstrapEngine
142
+ };
143
+ //# sourceMappingURL=chunk-YNI4S5WT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bootstrap.ts"],"sourcesContent":["import path from \"node:path\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { scanSignals } from \"./signal.js\";\nimport { log } from \"./logger.js\";\nimport type { PluginConfig } from \"./types.js\";\nimport type { Orchestrator } from \"./orchestrator.js\";\n\nexport type BootstrapResult = {\n sessionsScanned: number;\n turnsProcessed: number;\n highSignalTurns: number;\n memoriesCreated: number;\n skipped: number;\n};\n\nexport type BootstrapOptions = {\n dryRun?: boolean;\n sessionsDir?: string;\n limit?: number;\n since?: Date;\n};\n\ntype BootstrapEntry = {\n role: string;\n content: string;\n timestamp: string;\n sessionKey?: string;\n};\n\nexport class BootstrapEngine {\n constructor(private config: PluginConfig, private orchestrator: Orchestrator) {}\n\n async run(options: BootstrapOptions): Promise<BootstrapResult> {\n const dryRun = options.dryRun === true;\n const since = options.since ?? new Date(0);\n const end = new Date();\n const limit = Math.max(0, options.limit ?? Number.POSITIVE_INFINITY);\n\n const sessions = await this.resolveSessions(options.sessionsDir, since, end);\n const selected = sessions.slice(0, Number.isFinite(limit) ? limit : sessions.length);\n\n const beforeCount = dryRun ? 0 : (await this.orchestrator.storage.readAllMemories()).length;\n let turnsProcessed = 0;\n let highSignalTurns = 0;\n let skipped = 0;\n\n for (const session of selected) {\n for (const entry of session.entries) {\n if (entry.role !== \"user\") continue;\n turnsProcessed += 1;\n\n const content = typeof entry.content === \"string\" ? entry.content.trim() : \"\";\n if (!content) {\n skipped += 1;\n continue;\n }\n\n const signal = scanSignals(content, this.config.highSignalPatterns);\n if (signal.level !== \"high\") {\n skipped += 1;\n continue;\n }\n\n highSignalTurns += 1;\n if (!dryRun) {\n await this.orchestrator.processTurn(\"user\", content, session.sessionKey);\n }\n }\n }\n\n let memoriesCreated = 0;\n if (!dryRun && highSignalTurns > 0) {\n await this.orchestrator.waitForExtractionIdle();\n const afterCount = (await this.orchestrator.storage.readAllMemories()).length;\n memoriesCreated = Math.max(0, afterCount - beforeCount);\n }\n\n const result: BootstrapResult = {\n sessionsScanned: selected.length,\n turnsProcessed,\n highSignalTurns,\n memoriesCreated,\n skipped,\n };\n log.info(\n `bootstrap complete: sessions=${result.sessionsScanned}, turns=${result.turnsProcessed}, high=${result.highSignalTurns}, created=${result.memoriesCreated}, skipped=${result.skipped}, dryRun=${dryRun}`,\n );\n return result;\n }\n\n private async resolveSessions(\n sessionsDir: string | undefined,\n since: Date,\n until: Date,\n ): Promise<Array<{ sessionKey: string; entries: BootstrapEntry[] }>> {\n if (sessionsDir && sessionsDir.trim().length > 0) {\n return this.readSessionsFromDir(sessionsDir, since, until);\n }\n\n const keys = await this.orchestrator.transcript.listSessionKeys();\n const sessions: Array<{ sessionKey: string; entries: BootstrapEntry[] }> = [];\n for (const key of keys) {\n const entries = await this.orchestrator.transcript.readRange(\n since.toISOString(),\n until.toISOString(),\n key,\n );\n if (entries.length > 0) {\n sessions.push({ sessionKey: key, entries });\n }\n }\n return sessions;\n }\n\n private async readSessionsFromDir(\n baseDir: string,\n since: Date,\n until: Date,\n ): Promise<Array<{ sessionKey: string; entries: BootstrapEntry[] }>> {\n const files = await this.listJsonlFiles(baseDir);\n const bySession = new Map<string, BootstrapEntry[]>();\n\n for (const filePath of files) {\n let raw = \"\";\n try {\n raw = await readFile(filePath, \"utf-8\");\n } catch {\n continue;\n }\n const lines = raw.split(\"\\n\").filter((line) => line.trim().length > 0);\n for (const line of lines) {\n let parsed: any;\n try {\n parsed = JSON.parse(line);\n } catch {\n continue;\n }\n const ts = new Date(String(parsed?.timestamp ?? \"\"));\n if (Number.isNaN(ts.getTime())) continue;\n if (ts < since || ts > until) continue;\n const role = String(parsed?.role ?? \"\");\n const content = typeof parsed?.content === \"string\" ? parsed.content : \"\";\n if (!role || !content) continue;\n const sessionKey = typeof parsed?.sessionKey === \"string\" && parsed.sessionKey.length > 0\n ? parsed.sessionKey\n : path.relative(baseDir, filePath);\n const list = bySession.get(sessionKey) ?? [];\n list.push({\n role,\n content,\n timestamp: ts.toISOString(),\n sessionKey,\n });\n bySession.set(sessionKey, list);\n }\n }\n\n return Array.from(bySession.entries()).map(([sessionKey, entries]) => ({\n sessionKey,\n entries: entries.sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime()),\n }));\n }\n\n private async listJsonlFiles(dir: string): Promise<string[]> {\n const out: string[] = [];\n const entries = await readdir(dir, { withFileTypes: true }).catch(() => []);\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n out.push(...(await this.listJsonlFiles(full)));\n } else if (entry.isFile() && full.endsWith(\".jsonl\")) {\n out.push(full);\n }\n }\n return out;\n }\n}\n\n"],"mappings":"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","names":[]}
@@ -0,0 +1,406 @@
1
+ // src/session-integrity.ts
2
+ import path from "path";
3
+ import { readFile, readdir, unlink, writeFile } from "fs/promises";
4
+ function isObjectRecord(input) {
5
+ return Boolean(input) && typeof input === "object";
6
+ }
7
+ function isTranscriptEntry(raw) {
8
+ if (!isObjectRecord(raw)) return false;
9
+ if (raw.role !== "user" && raw.role !== "assistant") return false;
10
+ return typeof raw.timestamp === "string" && raw.timestamp.length > 0 && typeof raw.content === "string" && typeof raw.sessionKey === "string" && raw.sessionKey.length > 0 && typeof raw.turnId === "string" && raw.turnId.length > 0;
11
+ }
12
+ async function listTranscriptFiles(memoryDir) {
13
+ const transcriptsDir = path.join(memoryDir, "transcripts");
14
+ const out = [];
15
+ const stack = [transcriptsDir];
16
+ while (stack.length > 0) {
17
+ const dir = stack.pop();
18
+ if (!dir) continue;
19
+ let entries;
20
+ try {
21
+ entries = await readdir(dir, { withFileTypes: true });
22
+ } catch {
23
+ continue;
24
+ }
25
+ for (const entry of entries) {
26
+ const fullPath = path.join(dir, entry.name);
27
+ if (entry.isDirectory()) {
28
+ stack.push(fullPath);
29
+ } else if (entry.isFile() && entry.name.endsWith(".jsonl")) {
30
+ out.push(fullPath);
31
+ }
32
+ }
33
+ }
34
+ return out.sort((a, b) => a.localeCompare(b));
35
+ }
36
+ async function parseTranscriptFile(filePath) {
37
+ const bySession = /* @__PURE__ */ new Map();
38
+ const malformed = [];
39
+ const invalid = [];
40
+ const invalidBySession = /* @__PURE__ */ new Map();
41
+ let raw = "";
42
+ try {
43
+ raw = await readFile(filePath, "utf-8");
44
+ } catch {
45
+ return { bySession, malformed, invalid, invalidBySession };
46
+ }
47
+ const lines = raw.split("\n");
48
+ for (let index = 0; index < lines.length; index += 1) {
49
+ const line = lines[index]?.trim() ?? "";
50
+ if (!line) continue;
51
+ let parsed;
52
+ try {
53
+ parsed = JSON.parse(line);
54
+ } catch {
55
+ malformed.push({
56
+ code: "transcript_malformed_line",
57
+ severity: "warn",
58
+ message: "Transcript line is not valid JSON.",
59
+ filePath,
60
+ line: index + 1
61
+ });
62
+ continue;
63
+ }
64
+ if (!isTranscriptEntry(parsed)) {
65
+ const sessionKey = isObjectRecord(parsed) && typeof parsed.sessionKey === "string" && parsed.sessionKey.length > 0 ? parsed.sessionKey : void 0;
66
+ invalid.push({
67
+ code: "transcript_invalid_entry",
68
+ severity: "warn",
69
+ message: "Transcript entry is missing required fields.",
70
+ filePath,
71
+ line: index + 1,
72
+ sessionKey
73
+ });
74
+ if (sessionKey) {
75
+ invalidBySession.set(sessionKey, (invalidBySession.get(sessionKey) ?? 0) + 1);
76
+ }
77
+ continue;
78
+ }
79
+ const list = bySession.get(parsed.sessionKey) ?? [];
80
+ list.push({ filePath, lineNumber: index + 1, entry: parsed });
81
+ bySession.set(parsed.sessionKey, list);
82
+ }
83
+ return { bySession, malformed, invalid, invalidBySession };
84
+ }
85
+ function analyzeSessionEntries(sessionKey, refs) {
86
+ function parseTimestampForSort(timestamp) {
87
+ const parsed = Date.parse(timestamp);
88
+ if (Number.isFinite(parsed)) return parsed;
89
+ return Number.MAX_SAFE_INTEGER;
90
+ }
91
+ const issues = [];
92
+ const sorted = [...refs].sort((a, b) => {
93
+ const tsA = parseTimestampForSort(a.entry.timestamp);
94
+ const tsB = parseTimestampForSort(b.entry.timestamp);
95
+ if (tsA !== tsB) return tsA - tsB;
96
+ const rawTimestampCmp = a.entry.timestamp.localeCompare(b.entry.timestamp);
97
+ if (rawTimestampCmp !== 0) return rawTimestampCmp;
98
+ return a.entry.turnId.localeCompare(b.entry.turnId);
99
+ });
100
+ const turnIdSeen = /* @__PURE__ */ new Set();
101
+ let duplicateTurnIds = 0;
102
+ let brokenChains = 0;
103
+ for (let i = 0; i < sorted.length; i += 1) {
104
+ const current = sorted[i];
105
+ if (turnIdSeen.has(current.entry.turnId)) {
106
+ duplicateTurnIds += 1;
107
+ issues.push({
108
+ code: "transcript_duplicate_turn_id",
109
+ severity: "warn",
110
+ message: `Duplicate turnId detected: ${current.entry.turnId}`,
111
+ sessionKey,
112
+ filePath: current.filePath,
113
+ line: current.lineNumber
114
+ });
115
+ } else {
116
+ turnIdSeen.add(current.entry.turnId);
117
+ }
118
+ if (i > 0) {
119
+ const previous = sorted[i - 1];
120
+ if (previous && previous.entry.role === current.entry.role) {
121
+ brokenChains += 1;
122
+ issues.push({
123
+ code: "transcript_broken_chain",
124
+ severity: "warn",
125
+ message: `Adjacent turns have the same role (${current.entry.role}).`,
126
+ sessionKey,
127
+ filePath: current.filePath,
128
+ line: current.lineNumber
129
+ });
130
+ }
131
+ }
132
+ }
133
+ let incompleteTurns = 0;
134
+ if (sorted.length > 0 && sorted[sorted.length - 1]?.entry.role === "user") {
135
+ incompleteTurns = 1;
136
+ const last = sorted[sorted.length - 1];
137
+ issues.push({
138
+ code: "transcript_incomplete_turn",
139
+ severity: "warn",
140
+ message: "Session ends on a user turn without assistant response.",
141
+ sessionKey,
142
+ filePath: last?.filePath,
143
+ line: last?.lineNumber
144
+ });
145
+ }
146
+ return {
147
+ stats: {
148
+ sessionKey,
149
+ entries: sorted.length,
150
+ malformedLines: 0,
151
+ invalidEntries: 0,
152
+ duplicateTurnIds,
153
+ brokenChains,
154
+ incompleteTurns
155
+ },
156
+ issues
157
+ };
158
+ }
159
+ function validateCheckpointRaw(checkpoint) {
160
+ if (!isObjectRecord(checkpoint)) return false;
161
+ return typeof checkpoint.sessionKey === "string" && checkpoint.sessionKey.length > 0 && typeof checkpoint.capturedAt === "string" && typeof checkpoint.ttl === "string" && Array.isArray(checkpoint.turns);
162
+ }
163
+ async function analyzeCheckpoint(memoryDir) {
164
+ const checkpointPath = path.join(memoryDir, "state", "checkpoint.json");
165
+ const issues = [];
166
+ const checkpoint = {
167
+ present: false,
168
+ healthy: true,
169
+ path: checkpointPath
170
+ };
171
+ let raw = "";
172
+ try {
173
+ raw = await readFile(checkpointPath, "utf-8");
174
+ } catch {
175
+ issues.push({
176
+ code: "checkpoint_missing",
177
+ severity: "info",
178
+ message: "No checkpoint file present.",
179
+ filePath: checkpointPath
180
+ });
181
+ return { checkpoint, issues };
182
+ }
183
+ checkpoint.present = true;
184
+ let parsed;
185
+ try {
186
+ parsed = JSON.parse(raw);
187
+ } catch {
188
+ checkpoint.healthy = false;
189
+ issues.push({
190
+ code: "checkpoint_invalid_json",
191
+ severity: "error",
192
+ message: "Checkpoint file is invalid JSON.",
193
+ filePath: checkpointPath
194
+ });
195
+ return { checkpoint, issues };
196
+ }
197
+ if (!validateCheckpointRaw(parsed)) {
198
+ checkpoint.healthy = false;
199
+ issues.push({
200
+ code: "checkpoint_invalid_metadata",
201
+ severity: "error",
202
+ message: "Checkpoint file is missing required metadata fields.",
203
+ filePath: checkpointPath
204
+ });
205
+ return { checkpoint, issues };
206
+ }
207
+ checkpoint.sessionKey = parsed.sessionKey;
208
+ checkpoint.expiresAt = parsed.ttl;
209
+ const ttlMs = Date.parse(parsed.ttl);
210
+ const capturedAtMs = Date.parse(parsed.capturedAt);
211
+ if (!Number.isFinite(ttlMs) || !Number.isFinite(capturedAtMs) || ttlMs <= capturedAtMs) {
212
+ checkpoint.healthy = false;
213
+ issues.push({
214
+ code: "checkpoint_invalid_metadata",
215
+ severity: "error",
216
+ message: "Checkpoint timestamps are invalid or inconsistent.",
217
+ filePath: checkpointPath,
218
+ sessionKey: parsed.sessionKey
219
+ });
220
+ return { checkpoint, issues };
221
+ }
222
+ if (ttlMs < Date.now()) {
223
+ checkpoint.healthy = false;
224
+ issues.push({
225
+ code: "checkpoint_expired",
226
+ severity: "warn",
227
+ message: "Checkpoint TTL has expired.",
228
+ filePath: checkpointPath,
229
+ sessionKey: parsed.sessionKey
230
+ });
231
+ }
232
+ for (const turn of parsed.turns) {
233
+ if (!isTranscriptEntry(turn)) {
234
+ checkpoint.healthy = false;
235
+ issues.push({
236
+ code: "checkpoint_invalid_metadata",
237
+ severity: "error",
238
+ message: "Checkpoint contains invalid turn entries.",
239
+ filePath: checkpointPath,
240
+ sessionKey: parsed.sessionKey
241
+ });
242
+ break;
243
+ }
244
+ }
245
+ return { checkpoint, issues };
246
+ }
247
+ async function analyzeSessionIntegrity(options) {
248
+ const memoryDir = options.memoryDir;
249
+ const reportIssues = [];
250
+ const allSessionRefs = /* @__PURE__ */ new Map();
251
+ const invalidBySession = /* @__PURE__ */ new Map();
252
+ const sessions = /* @__PURE__ */ new Map();
253
+ const files = await listTranscriptFiles(memoryDir);
254
+ for (const filePath of files) {
255
+ const parsed = await parseTranscriptFile(filePath);
256
+ reportIssues.push(...parsed.malformed, ...parsed.invalid);
257
+ for (const [sessionKey, count] of parsed.invalidBySession.entries()) {
258
+ invalidBySession.set(sessionKey, (invalidBySession.get(sessionKey) ?? 0) + count);
259
+ }
260
+ for (const [sessionKey, refs] of parsed.bySession.entries()) {
261
+ const existing = allSessionRefs.get(sessionKey) ?? [];
262
+ existing.push(...refs);
263
+ allSessionRefs.set(sessionKey, existing);
264
+ }
265
+ }
266
+ for (const [sessionKey, refs] of allSessionRefs.entries()) {
267
+ const analyzed = analyzeSessionEntries(sessionKey, refs);
268
+ reportIssues.push(...analyzed.issues);
269
+ sessions.set(sessionKey, {
270
+ ...analyzed.stats,
271
+ malformedLines: 0,
272
+ invalidEntries: invalidBySession.get(sessionKey) ?? 0
273
+ });
274
+ }
275
+ const checkpoint = await analyzeCheckpoint(memoryDir);
276
+ reportIssues.push(...checkpoint.issues);
277
+ const severeIssueCount = reportIssues.filter((issue) => issue.severity !== "info").length;
278
+ return {
279
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
280
+ memoryDir,
281
+ healthy: severeIssueCount === 0,
282
+ sessions: [...sessions.values()].sort((a, b) => a.sessionKey.localeCompare(b.sessionKey)),
283
+ checkpoint: checkpoint.checkpoint,
284
+ issues: reportIssues
285
+ };
286
+ }
287
+ function collectTranscriptRewriteTargets(report) {
288
+ const set = /* @__PURE__ */ new Set();
289
+ for (const issue of report.issues) {
290
+ if (!issue.filePath) continue;
291
+ if (issue.code === "transcript_malformed_line" || issue.code === "transcript_invalid_entry") {
292
+ set.add(issue.filePath);
293
+ }
294
+ }
295
+ return [...set].sort((a, b) => a.localeCompare(b));
296
+ }
297
+ function planSessionRepair(options) {
298
+ const actions = [];
299
+ const transcriptTargets = collectTranscriptRewriteTargets(options.report);
300
+ for (const targetPath of transcriptTargets) {
301
+ actions.push({
302
+ kind: "rewrite_transcript",
303
+ targetPath,
304
+ description: "Rewrite transcript file with only valid JSON transcript entries."
305
+ });
306
+ }
307
+ const checkpointNeedsRepair = options.report.issues.some(
308
+ (issue) => issue.code === "checkpoint_invalid_json" || issue.code === "checkpoint_invalid_metadata" || issue.code === "checkpoint_expired"
309
+ );
310
+ if (checkpointNeedsRepair && options.report.checkpoint.present) {
311
+ actions.push({
312
+ kind: "remove_checkpoint",
313
+ targetPath: options.report.checkpoint.path,
314
+ description: "Remove invalid or expired checkpoint file."
315
+ });
316
+ }
317
+ if (options.sessionFilesDir && options.allowSessionFileRepair === true) {
318
+ actions.push({
319
+ kind: "repair_session_files",
320
+ targetPath: options.sessionFilesDir,
321
+ description: "Session file repair was requested; no automatic rewiring is performed.",
322
+ details: "No-op by design. OpenClaw session files require explicit manual review."
323
+ });
324
+ }
325
+ return {
326
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
327
+ dryRun: options.dryRun,
328
+ allowSessionFileRepair: options.allowSessionFileRepair === true,
329
+ actions
330
+ };
331
+ }
332
+ async function rewriteTranscriptFile(targetPath) {
333
+ let raw = "";
334
+ try {
335
+ raw = await readFile(targetPath, "utf-8");
336
+ } catch {
337
+ return;
338
+ }
339
+ const lines = raw.split("\n");
340
+ const validLines = [];
341
+ for (const line of lines) {
342
+ const trimmed = line.trim();
343
+ if (!trimmed) continue;
344
+ try {
345
+ const parsed = JSON.parse(trimmed);
346
+ if (!isTranscriptEntry(parsed)) continue;
347
+ validLines.push(JSON.stringify(parsed));
348
+ } catch {
349
+ }
350
+ }
351
+ const body = validLines.length > 0 ? `${validLines.join("\n")}
352
+ ` : "";
353
+ await writeFile(targetPath, body, "utf-8");
354
+ }
355
+ async function applySessionRepair(options) {
356
+ const { plan } = options;
357
+ if (plan.dryRun) {
358
+ return {
359
+ applied: false,
360
+ actionsAttempted: plan.actions.length,
361
+ actionsApplied: 0,
362
+ errors: []
363
+ };
364
+ }
365
+ let actionsApplied = 0;
366
+ const errors = [];
367
+ for (const action of plan.actions) {
368
+ try {
369
+ if (action.kind === "rewrite_transcript") {
370
+ await rewriteTranscriptFile(action.targetPath);
371
+ actionsApplied += 1;
372
+ continue;
373
+ }
374
+ if (action.kind === "remove_checkpoint") {
375
+ try {
376
+ await unlink(action.targetPath);
377
+ } catch (err) {
378
+ const code = typeof err === "object" && err && "code" in err ? String(err.code ?? "") : "";
379
+ if (code !== "ENOENT") {
380
+ throw err;
381
+ }
382
+ }
383
+ actionsApplied += 1;
384
+ continue;
385
+ }
386
+ if (action.kind === "repair_session_files") {
387
+ actionsApplied += 1;
388
+ }
389
+ } catch (err) {
390
+ errors.push(`Failed ${action.kind} ${action.targetPath}: ${err instanceof Error ? err.message : String(err)}`);
391
+ }
392
+ }
393
+ return {
394
+ applied: true,
395
+ actionsAttempted: plan.actions.length,
396
+ actionsApplied,
397
+ errors
398
+ };
399
+ }
400
+
401
+ export {
402
+ analyzeSessionIntegrity,
403
+ planSessionRepair,
404
+ applySessionRepair
405
+ };
406
+ //# sourceMappingURL=chunk-YRMVARQP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/session-integrity.ts"],"sourcesContent":["import path from \"node:path\";\nimport { readFile, readdir, unlink, writeFile } from \"node:fs/promises\";\nimport type { Checkpoint, TranscriptEntry } from \"./types.js\";\n\nexport type SessionIntegrityIssueCode =\n | \"transcript_malformed_line\"\n | \"transcript_invalid_entry\"\n | \"transcript_duplicate_turn_id\"\n | \"transcript_broken_chain\"\n | \"transcript_incomplete_turn\"\n | \"checkpoint_missing\"\n | \"checkpoint_invalid_json\"\n | \"checkpoint_invalid_metadata\"\n | \"checkpoint_expired\";\n\nexport interface SessionIntegrityIssue {\n code: SessionIntegrityIssueCode;\n severity: \"info\" | \"warn\" | \"error\";\n message: string;\n filePath?: string;\n line?: number;\n sessionKey?: string;\n}\n\nexport interface SessionTranscriptStats {\n sessionKey: string;\n entries: number;\n malformedLines: number;\n invalidEntries: number;\n duplicateTurnIds: number;\n brokenChains: number;\n incompleteTurns: number;\n}\n\nexport interface SessionIntegrityReport {\n generatedAt: string;\n memoryDir: string;\n healthy: boolean;\n sessions: SessionTranscriptStats[];\n checkpoint: {\n present: boolean;\n healthy: boolean;\n path: string;\n sessionKey?: string;\n expiresAt?: string;\n };\n issues: SessionIntegrityIssue[];\n}\n\ntype SessionEntryRef = {\n filePath: string;\n lineNumber: number;\n entry: TranscriptEntry;\n};\n\ntype FileSessionParse = {\n bySession: Map<string, SessionEntryRef[]>;\n malformed: SessionIntegrityIssue[];\n invalid: SessionIntegrityIssue[];\n invalidBySession: Map<string, number>;\n};\n\nexport interface SessionRepairAction {\n kind: \"rewrite_transcript\" | \"remove_checkpoint\" | \"repair_session_files\";\n description: string;\n targetPath: string;\n details?: string;\n}\n\nexport interface SessionRepairPlan {\n generatedAt: string;\n dryRun: boolean;\n allowSessionFileRepair: boolean;\n actions: SessionRepairAction[];\n}\n\nexport interface SessionRepairApplyResult {\n applied: boolean;\n actionsAttempted: number;\n actionsApplied: number;\n errors: string[];\n}\n\nexport interface AnalyzeSessionIntegrityOptions {\n memoryDir: string;\n}\n\nexport interface PlanSessionRepairOptions {\n report: SessionIntegrityReport;\n dryRun: boolean;\n allowSessionFileRepair?: boolean;\n sessionFilesDir?: string;\n}\n\nexport interface ApplySessionRepairOptions {\n plan: SessionRepairPlan;\n}\n\nfunction isObjectRecord(input: unknown): input is Record<string, unknown> {\n return Boolean(input) && typeof input === \"object\";\n}\n\nfunction isTranscriptEntry(raw: unknown): raw is TranscriptEntry {\n if (!isObjectRecord(raw)) return false;\n if (raw.role !== \"user\" && raw.role !== \"assistant\") return false;\n return (\n typeof raw.timestamp === \"string\" &&\n raw.timestamp.length > 0 &&\n typeof raw.content === \"string\" &&\n typeof raw.sessionKey === \"string\" &&\n raw.sessionKey.length > 0 &&\n typeof raw.turnId === \"string\" &&\n raw.turnId.length > 0\n );\n}\n\nasync function listTranscriptFiles(memoryDir: string): Promise<string[]> {\n const transcriptsDir = path.join(memoryDir, \"transcripts\");\n const out: string[] = [];\n const stack = [transcriptsDir];\n while (stack.length > 0) {\n const dir = stack.pop();\n if (!dir) continue;\n let entries: Array<{ name: string; isDirectory(): boolean; isFile(): boolean }>;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n continue;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n stack.push(fullPath);\n } else if (entry.isFile() && entry.name.endsWith(\".jsonl\")) {\n out.push(fullPath);\n }\n }\n }\n return out.sort((a, b) => a.localeCompare(b));\n}\n\nasync function parseTranscriptFile(filePath: string): Promise<FileSessionParse> {\n const bySession = new Map<string, SessionEntryRef[]>();\n const malformed: SessionIntegrityIssue[] = [];\n const invalid: SessionIntegrityIssue[] = [];\n const invalidBySession = new Map<string, number>();\n\n let raw = \"\";\n try {\n raw = await readFile(filePath, \"utf-8\");\n } catch {\n return { bySession, malformed, invalid, invalidBySession };\n }\n\n const lines = raw.split(\"\\n\");\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]?.trim() ?? \"\";\n if (!line) continue;\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n malformed.push({\n code: \"transcript_malformed_line\",\n severity: \"warn\",\n message: \"Transcript line is not valid JSON.\",\n filePath,\n line: index + 1,\n });\n continue;\n }\n if (!isTranscriptEntry(parsed)) {\n const sessionKey =\n isObjectRecord(parsed) &&\n typeof parsed.sessionKey === \"string\" &&\n parsed.sessionKey.length > 0\n ? parsed.sessionKey\n : undefined;\n invalid.push({\n code: \"transcript_invalid_entry\",\n severity: \"warn\",\n message: \"Transcript entry is missing required fields.\",\n filePath,\n line: index + 1,\n sessionKey,\n });\n if (sessionKey) {\n invalidBySession.set(sessionKey, (invalidBySession.get(sessionKey) ?? 0) + 1);\n }\n continue;\n }\n\n const list = bySession.get(parsed.sessionKey) ?? [];\n list.push({ filePath, lineNumber: index + 1, entry: parsed });\n bySession.set(parsed.sessionKey, list);\n }\n return { bySession, malformed, invalid, invalidBySession };\n}\n\nfunction analyzeSessionEntries(\n sessionKey: string,\n refs: SessionEntryRef[],\n): { stats: SessionTranscriptStats; issues: SessionIntegrityIssue[] } {\n function parseTimestampForSort(timestamp: string): number {\n const parsed = Date.parse(timestamp);\n if (Number.isFinite(parsed)) return parsed;\n return Number.MAX_SAFE_INTEGER;\n }\n\n const issues: SessionIntegrityIssue[] = [];\n const sorted = [...refs].sort((a, b) => {\n const tsA = parseTimestampForSort(a.entry.timestamp);\n const tsB = parseTimestampForSort(b.entry.timestamp);\n if (tsA !== tsB) return tsA - tsB;\n const rawTimestampCmp = a.entry.timestamp.localeCompare(b.entry.timestamp);\n if (rawTimestampCmp !== 0) return rawTimestampCmp;\n return a.entry.turnId.localeCompare(b.entry.turnId);\n });\n const turnIdSeen = new Set<string>();\n let duplicateTurnIds = 0;\n let brokenChains = 0;\n\n for (let i = 0; i < sorted.length; i += 1) {\n const current = sorted[i];\n if (turnIdSeen.has(current.entry.turnId)) {\n duplicateTurnIds += 1;\n issues.push({\n code: \"transcript_duplicate_turn_id\",\n severity: \"warn\",\n message: `Duplicate turnId detected: ${current.entry.turnId}`,\n sessionKey,\n filePath: current.filePath,\n line: current.lineNumber,\n });\n } else {\n turnIdSeen.add(current.entry.turnId);\n }\n\n if (i > 0) {\n const previous = sorted[i - 1];\n if (previous && previous.entry.role === current.entry.role) {\n brokenChains += 1;\n issues.push({\n code: \"transcript_broken_chain\",\n severity: \"warn\",\n message: `Adjacent turns have the same role (${current.entry.role}).`,\n sessionKey,\n filePath: current.filePath,\n line: current.lineNumber,\n });\n }\n }\n }\n\n let incompleteTurns = 0;\n if (sorted.length > 0 && sorted[sorted.length - 1]?.entry.role === \"user\") {\n incompleteTurns = 1;\n const last = sorted[sorted.length - 1];\n issues.push({\n code: \"transcript_incomplete_turn\",\n severity: \"warn\",\n message: \"Session ends on a user turn without assistant response.\",\n sessionKey,\n filePath: last?.filePath,\n line: last?.lineNumber,\n });\n }\n\n return {\n stats: {\n sessionKey,\n entries: sorted.length,\n malformedLines: 0,\n invalidEntries: 0,\n duplicateTurnIds,\n brokenChains,\n incompleteTurns,\n },\n issues,\n };\n}\n\nfunction validateCheckpointRaw(checkpoint: unknown): checkpoint is Checkpoint {\n if (!isObjectRecord(checkpoint)) return false;\n return (\n typeof checkpoint.sessionKey === \"string\" &&\n checkpoint.sessionKey.length > 0 &&\n typeof checkpoint.capturedAt === \"string\" &&\n typeof checkpoint.ttl === \"string\" &&\n Array.isArray(checkpoint.turns)\n );\n}\n\nasync function analyzeCheckpoint(memoryDir: string): Promise<{\n checkpoint: SessionIntegrityReport[\"checkpoint\"];\n issues: SessionIntegrityIssue[];\n}> {\n const checkpointPath = path.join(memoryDir, \"state\", \"checkpoint.json\");\n const issues: SessionIntegrityIssue[] = [];\n const checkpoint: SessionIntegrityReport[\"checkpoint\"] = {\n present: false,\n healthy: true,\n path: checkpointPath,\n };\n\n let raw = \"\";\n try {\n raw = await readFile(checkpointPath, \"utf-8\");\n } catch {\n issues.push({\n code: \"checkpoint_missing\",\n severity: \"info\",\n message: \"No checkpoint file present.\",\n filePath: checkpointPath,\n });\n return { checkpoint, issues };\n }\n\n checkpoint.present = true;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n checkpoint.healthy = false;\n issues.push({\n code: \"checkpoint_invalid_json\",\n severity: \"error\",\n message: \"Checkpoint file is invalid JSON.\",\n filePath: checkpointPath,\n });\n return { checkpoint, issues };\n }\n\n if (!validateCheckpointRaw(parsed)) {\n checkpoint.healthy = false;\n issues.push({\n code: \"checkpoint_invalid_metadata\",\n severity: \"error\",\n message: \"Checkpoint file is missing required metadata fields.\",\n filePath: checkpointPath,\n });\n return { checkpoint, issues };\n }\n\n checkpoint.sessionKey = parsed.sessionKey;\n checkpoint.expiresAt = parsed.ttl;\n\n const ttlMs = Date.parse(parsed.ttl);\n const capturedAtMs = Date.parse(parsed.capturedAt);\n if (!Number.isFinite(ttlMs) || !Number.isFinite(capturedAtMs) || ttlMs <= capturedAtMs) {\n checkpoint.healthy = false;\n issues.push({\n code: \"checkpoint_invalid_metadata\",\n severity: \"error\",\n message: \"Checkpoint timestamps are invalid or inconsistent.\",\n filePath: checkpointPath,\n sessionKey: parsed.sessionKey,\n });\n return { checkpoint, issues };\n }\n\n if (ttlMs < Date.now()) {\n checkpoint.healthy = false;\n issues.push({\n code: \"checkpoint_expired\",\n severity: \"warn\",\n message: \"Checkpoint TTL has expired.\",\n filePath: checkpointPath,\n sessionKey: parsed.sessionKey,\n });\n }\n\n for (const turn of parsed.turns) {\n if (!isTranscriptEntry(turn)) {\n checkpoint.healthy = false;\n issues.push({\n code: \"checkpoint_invalid_metadata\",\n severity: \"error\",\n message: \"Checkpoint contains invalid turn entries.\",\n filePath: checkpointPath,\n sessionKey: parsed.sessionKey,\n });\n break;\n }\n }\n\n return { checkpoint, issues };\n}\n\nexport async function analyzeSessionIntegrity(\n options: AnalyzeSessionIntegrityOptions,\n): Promise<SessionIntegrityReport> {\n const memoryDir = options.memoryDir;\n const reportIssues: SessionIntegrityIssue[] = [];\n const allSessionRefs = new Map<string, SessionEntryRef[]>();\n const invalidBySession = new Map<string, number>();\n const sessions = new Map<string, SessionTranscriptStats>();\n\n const files = await listTranscriptFiles(memoryDir);\n for (const filePath of files) {\n const parsed = await parseTranscriptFile(filePath);\n reportIssues.push(...parsed.malformed, ...parsed.invalid);\n for (const [sessionKey, count] of parsed.invalidBySession.entries()) {\n invalidBySession.set(sessionKey, (invalidBySession.get(sessionKey) ?? 0) + count);\n }\n\n for (const [sessionKey, refs] of parsed.bySession.entries()) {\n const existing = allSessionRefs.get(sessionKey) ?? [];\n existing.push(...refs);\n allSessionRefs.set(sessionKey, existing);\n }\n }\n\n for (const [sessionKey, refs] of allSessionRefs.entries()) {\n const analyzed = analyzeSessionEntries(sessionKey, refs);\n reportIssues.push(...analyzed.issues);\n sessions.set(sessionKey, {\n ...analyzed.stats,\n malformedLines: 0,\n invalidEntries: invalidBySession.get(sessionKey) ?? 0,\n });\n }\n\n const checkpoint = await analyzeCheckpoint(memoryDir);\n reportIssues.push(...checkpoint.issues);\n\n const severeIssueCount = reportIssues.filter((issue) => issue.severity !== \"info\").length;\n\n return {\n generatedAt: new Date().toISOString(),\n memoryDir,\n healthy: severeIssueCount === 0,\n sessions: [...sessions.values()].sort((a, b) => a.sessionKey.localeCompare(b.sessionKey)),\n checkpoint: checkpoint.checkpoint,\n issues: reportIssues,\n };\n}\n\nfunction collectTranscriptRewriteTargets(report: SessionIntegrityReport): string[] {\n const set = new Set<string>();\n for (const issue of report.issues) {\n if (!issue.filePath) continue;\n if (\n issue.code === \"transcript_malformed_line\" ||\n issue.code === \"transcript_invalid_entry\"\n ) {\n set.add(issue.filePath);\n }\n }\n return [...set].sort((a, b) => a.localeCompare(b));\n}\n\nexport function planSessionRepair(options: PlanSessionRepairOptions): SessionRepairPlan {\n const actions: SessionRepairAction[] = [];\n const transcriptTargets = collectTranscriptRewriteTargets(options.report);\n for (const targetPath of transcriptTargets) {\n actions.push({\n kind: \"rewrite_transcript\",\n targetPath,\n description: \"Rewrite transcript file with only valid JSON transcript entries.\",\n });\n }\n\n const checkpointNeedsRepair = options.report.issues.some((issue) =>\n issue.code === \"checkpoint_invalid_json\" ||\n issue.code === \"checkpoint_invalid_metadata\" ||\n issue.code === \"checkpoint_expired\"\n );\n if (checkpointNeedsRepair && options.report.checkpoint.present) {\n actions.push({\n kind: \"remove_checkpoint\",\n targetPath: options.report.checkpoint.path,\n description: \"Remove invalid or expired checkpoint file.\",\n });\n }\n\n if (options.sessionFilesDir && options.allowSessionFileRepair === true) {\n actions.push({\n kind: \"repair_session_files\",\n targetPath: options.sessionFilesDir,\n description: \"Session file repair was requested; no automatic rewiring is performed.\",\n details: \"No-op by design. OpenClaw session files require explicit manual review.\",\n });\n }\n\n return {\n generatedAt: new Date().toISOString(),\n dryRun: options.dryRun,\n allowSessionFileRepair: options.allowSessionFileRepair === true,\n actions,\n };\n}\n\nasync function rewriteTranscriptFile(targetPath: string): Promise<void> {\n let raw = \"\";\n try {\n raw = await readFile(targetPath, \"utf-8\");\n } catch {\n return;\n }\n const lines = raw.split(\"\\n\");\n const validLines: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed);\n if (!isTranscriptEntry(parsed)) continue;\n validLines.push(JSON.stringify(parsed));\n } catch {\n // drop malformed lines\n }\n }\n const body = validLines.length > 0 ? `${validLines.join(\"\\n\")}\\n` : \"\";\n await writeFile(targetPath, body, \"utf-8\");\n}\n\nexport async function applySessionRepair(\n options: ApplySessionRepairOptions,\n): Promise<SessionRepairApplyResult> {\n const { plan } = options;\n if (plan.dryRun) {\n return {\n applied: false,\n actionsAttempted: plan.actions.length,\n actionsApplied: 0,\n errors: [],\n };\n }\n\n let actionsApplied = 0;\n const errors: string[] = [];\n\n for (const action of plan.actions) {\n try {\n if (action.kind === \"rewrite_transcript\") {\n await rewriteTranscriptFile(action.targetPath);\n actionsApplied += 1;\n continue;\n }\n if (action.kind === \"remove_checkpoint\") {\n try {\n await unlink(action.targetPath);\n } catch (err) {\n const code = typeof err === \"object\" && err && \"code\" in err ? String((err as { code?: unknown }).code ?? \"\") : \"\";\n if (code !== \"ENOENT\") {\n throw err;\n }\n }\n actionsApplied += 1;\n continue;\n }\n if (action.kind === \"repair_session_files\") {\n // intentionally no-op; pointer/session rewiring is explicitly forbidden here.\n actionsApplied += 1;\n }\n } catch (err) {\n errors.push(`Failed ${action.kind} ${action.targetPath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n return {\n applied: true,\n actionsAttempted: plan.actions.length,\n actionsApplied,\n errors,\n };\n}\n"],"mappings":"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","names":[]}