@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,1048 @@
1
+ import {
2
+ NamespaceStorageRouter,
3
+ namespaceCollectionName
4
+ } from "./chunk-IZME7KW2.js";
5
+ import {
6
+ analyzeSessionIntegrity,
7
+ applySessionRepair,
8
+ planSessionRepair
9
+ } from "./chunk-YRMVARQP.js";
10
+ import {
11
+ resolveCuratedIncludeFilesStatePath,
12
+ resolveNativeKnowledgeStatePath,
13
+ resolveOpenClawWorkspaceStatePath
14
+ } from "./chunk-Q6FETXJA.js";
15
+ import {
16
+ createEvalBaselineSnapshot,
17
+ getEvalHarnessStatus,
18
+ runEvalBaselineDeltaReport,
19
+ runEvalBenchmarkCiGate,
20
+ validateEvalBenchmarkPack
21
+ } from "./chunk-K6WK37A6.js";
22
+ import {
23
+ analyzeGraphHealth
24
+ } from "./chunk-SCHEKPYH.js";
25
+ import {
26
+ parseConfig
27
+ } from "./chunk-ISY75RLM.js";
28
+ import {
29
+ readEnvVar,
30
+ resolveHomeDir
31
+ } from "./chunk-MARWOCVP.js";
32
+ import {
33
+ listMemoryGovernanceRuns,
34
+ readMemoryGovernanceRunArtifact
35
+ } from "./chunk-J3BT33K7.js";
36
+ import {
37
+ StorageManager
38
+ } from "./chunk-QWUUMMIK.js";
39
+ import {
40
+ lintWorkspaceFiles
41
+ } from "./chunk-DM2T26WE.js";
42
+ import {
43
+ isSafeRouteNamespace
44
+ } from "./chunk-HLXVTBF3.js";
45
+
46
+ // src/operator-toolkit.ts
47
+ import path2 from "path";
48
+ import { constants as fsConstants } from "fs";
49
+ import { access as access2, mkdir as mkdir2, readFile, readdir as readdir2, stat, unlink, writeFile } from "fs/promises";
50
+
51
+ // src/namespaces/migrate.ts
52
+ import path from "path";
53
+ import { access, mkdir, readdir, rename } from "fs/promises";
54
+ var LEGACY_NAMESPACE_CHILDREN = [
55
+ "facts",
56
+ "corrections",
57
+ "entities",
58
+ "questions",
59
+ "artifacts",
60
+ "identity",
61
+ "state",
62
+ "config",
63
+ "summaries",
64
+ "profile.md"
65
+ ];
66
+ async function exists(p) {
67
+ try {
68
+ await access(p);
69
+ return true;
70
+ } catch {
71
+ return false;
72
+ }
73
+ }
74
+ async function hasAnyLegacyData(rootDir) {
75
+ for (const child of LEGACY_NAMESPACE_CHILDREN) {
76
+ if (await exists(path.join(rootDir, child))) return true;
77
+ }
78
+ return false;
79
+ }
80
+ async function discoverConfiguredNamespaces(config) {
81
+ const discovered = /* @__PURE__ */ new Set([
82
+ config.defaultNamespace,
83
+ config.sharedNamespace,
84
+ ...config.namespacePolicies.map((policy) => policy.name)
85
+ ]);
86
+ const namespacesDir = path.join(config.memoryDir, "namespaces");
87
+ try {
88
+ const entries = await readdir(namespacesDir, { withFileTypes: true });
89
+ for (const entry of entries) {
90
+ if (entry.isDirectory() && isSafeRouteNamespace(entry.name)) {
91
+ discovered.add(entry.name);
92
+ }
93
+ }
94
+ } catch {
95
+ }
96
+ return [...discovered];
97
+ }
98
+ async function listNamespaces(options) {
99
+ const storageRouter = options.storageRouter ?? new NamespaceStorageRouter(options.config);
100
+ const namespaces = await discoverConfiguredNamespaces(options.config);
101
+ const items = await Promise.all(
102
+ namespaces.map(async (namespace) => {
103
+ const storage = await storageRouter.storageFor(namespace);
104
+ const usesLegacyRoot = namespace === options.config.defaultNamespace && storage.dir === options.config.memoryDir;
105
+ return {
106
+ namespace,
107
+ rootDir: storage.dir,
108
+ exists: await exists(storage.dir),
109
+ usesLegacyRoot,
110
+ hasMemoryData: await hasAnyLegacyData(storage.dir),
111
+ collection: namespaceCollectionName(options.config.qmdCollection, namespace, {
112
+ defaultNamespace: options.config.defaultNamespace,
113
+ useLegacyDefaultCollection: usesLegacyRoot
114
+ })
115
+ };
116
+ })
117
+ );
118
+ return items.sort((a, b) => a.namespace.localeCompare(b.namespace));
119
+ }
120
+ async function verifyNamespaces(options) {
121
+ const namespaces = await listNamespaces(options);
122
+ const problems = [];
123
+ for (const entry of namespaces) {
124
+ if (entry.exists && !entry.hasMemoryData) {
125
+ problems.push(`${entry.namespace}: root exists but contains no Engram data`);
126
+ }
127
+ }
128
+ return {
129
+ ok: problems.length === 0,
130
+ problems,
131
+ namespaces
132
+ };
133
+ }
134
+ async function runNamespaceMigration(options) {
135
+ if (!options.config.namespacesEnabled) {
136
+ throw new Error("Namespaces are disabled.");
137
+ }
138
+ const targetNamespace = options.to.trim();
139
+ if (!isSafeRouteNamespace(targetNamespace)) {
140
+ throw new Error(`Invalid namespace: ${options.to}`);
141
+ }
142
+ const targetRoot = path.join(options.config.memoryDir, "namespaces", targetNamespace);
143
+ const moved = [];
144
+ for (const child of LEGACY_NAMESPACE_CHILDREN) {
145
+ const from = path.join(options.config.memoryDir, child);
146
+ if (!await exists(from)) continue;
147
+ const to = path.join(targetRoot, child);
148
+ if (await exists(to)) {
149
+ throw new Error(`Target already contains ${child}: ${to}`);
150
+ }
151
+ moved.push({ from, to });
152
+ }
153
+ if (!options.dryRun && moved.length > 0) {
154
+ await mkdir(targetRoot, { recursive: true });
155
+ for (const move of moved) {
156
+ await rename(move.from, move.to);
157
+ }
158
+ }
159
+ return {
160
+ dryRun: options.dryRun === true,
161
+ fromRoot: options.config.memoryDir,
162
+ targetRoot,
163
+ moved,
164
+ collection: namespaceCollectionName(options.config.qmdCollection, targetNamespace, {
165
+ defaultNamespace: options.config.defaultNamespace,
166
+ useLegacyDefaultCollection: false
167
+ })
168
+ };
169
+ }
170
+
171
+ // src/operator-toolkit.ts
172
+ function resolveConfigPath(explicitPath) {
173
+ if (explicitPath && explicitPath.trim().length > 0) return explicitPath.trim();
174
+ const configured = readEnvVar("OPENCLAW_ENGRAM_CONFIG_PATH") || readEnvVar("OPENCLAW_CONFIG_PATH");
175
+ if (configured && configured.trim().length > 0) return configured.trim();
176
+ return path2.join(resolveHomeDir(), ".openclaw", "openclaw.json");
177
+ }
178
+ async function loadCliPluginConfig(configPath) {
179
+ const resolvedPath = resolveConfigPath(configPath);
180
+ try {
181
+ const raw = JSON.parse(await readFile(resolvedPath, "utf-8"));
182
+ const pluginEntry = raw?.plugins && typeof raw.plugins === "object" ? raw.plugins.entries : void 0;
183
+ const config = pluginEntry && typeof pluginEntry === "object" ? pluginEntry["openclaw-engram"] : void 0;
184
+ const parsedConfig = parseConfig(
185
+ config && typeof config === "object" ? config.config ?? {} : {}
186
+ );
187
+ return {
188
+ found: true,
189
+ path: resolvedPath,
190
+ parsed: true,
191
+ memoryDir: parsedConfig.memoryDir,
192
+ workspaceDir: parsedConfig.workspaceDir
193
+ };
194
+ } catch (error) {
195
+ const message = error instanceof Error ? error.message : String(error);
196
+ return {
197
+ found: !/ENOENT/i.test(message),
198
+ path: resolvedPath,
199
+ parsed: false,
200
+ error: message
201
+ };
202
+ }
203
+ }
204
+ async function isWritable(targetPath) {
205
+ try {
206
+ await access2(targetPath, fsConstants.W_OK);
207
+ return true;
208
+ } catch {
209
+ return false;
210
+ }
211
+ }
212
+ async function pathExists(targetPath) {
213
+ try {
214
+ await access2(targetPath, fsConstants.F_OK);
215
+ return true;
216
+ } catch {
217
+ return false;
218
+ }
219
+ }
220
+ function formatConfigValue(value) {
221
+ if (value === void 0 || value === null) return "(unset)";
222
+ if (typeof value === "string") return value.length > 0 ? value : "(unset)";
223
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
224
+ return JSON.stringify(value);
225
+ }
226
+ async function gatherDirectoryStatus(paths) {
227
+ return Promise.all(paths.map(async (targetPath) => {
228
+ try {
229
+ await access2(targetPath, fsConstants.F_OK);
230
+ return {
231
+ path: targetPath,
232
+ exists: true,
233
+ writable: await isWritable(targetPath)
234
+ };
235
+ } catch {
236
+ return {
237
+ path: targetPath,
238
+ exists: false,
239
+ writable: false
240
+ };
241
+ }
242
+ }));
243
+ }
244
+ function getSetupPaths(config) {
245
+ return [
246
+ config.memoryDir,
247
+ config.workspaceDir,
248
+ path2.join(config.memoryDir, "facts"),
249
+ path2.join(config.memoryDir, "entities"),
250
+ path2.join(config.memoryDir, "state"),
251
+ path2.join(config.memoryDir, "questions"),
252
+ path2.join(config.memoryDir, "artifacts"),
253
+ path2.join(config.memoryDir, "config")
254
+ ];
255
+ }
256
+ async function readJsonIfExists(filePath) {
257
+ try {
258
+ return JSON.parse(await readFile(filePath, "utf-8"));
259
+ } catch {
260
+ return null;
261
+ }
262
+ }
263
+ async function summarizeNativeKnowledgeStatus(config) {
264
+ const nativeKnowledge = config.nativeKnowledge;
265
+ const nativeKnowledgeStateDir = nativeKnowledge?.stateDir ?? "state/native-knowledge";
266
+ const curatedStatePath = nativeKnowledge ? resolveCuratedIncludeFilesStatePath(config.memoryDir, nativeKnowledge) : path2.join(config.memoryDir, nativeKnowledgeStateDir, "curated-include-sync.json");
267
+ const obsidianStatePath = nativeKnowledge ? resolveNativeKnowledgeStatePath(config.memoryDir, nativeKnowledge) : path2.join(config.memoryDir, nativeKnowledgeStateDir, "obsidian-sync.json");
268
+ const openclawStatePath = nativeKnowledge ? resolveOpenClawWorkspaceStatePath(config.memoryDir, nativeKnowledge) : path2.join(config.memoryDir, nativeKnowledgeStateDir, "openclaw-workspace-sync.json");
269
+ const [curatedRaw, obsidianRaw, openclawRaw] = await Promise.all([
270
+ readJsonIfExists(curatedStatePath),
271
+ readJsonIfExists(obsidianStatePath),
272
+ readJsonIfExists(openclawStatePath)
273
+ ]);
274
+ const curatedFiles = curatedRaw && typeof curatedRaw === "object" && curatedRaw !== null && "files" in curatedRaw && typeof curatedRaw.files === "object" && curatedRaw.files !== null ? curatedRaw : null;
275
+ let curatedActiveChunkCount = 0;
276
+ let curatedDeletedFileCount = 0;
277
+ for (const file of Object.values(curatedFiles?.files ?? {})) {
278
+ if (file.deleted) {
279
+ curatedDeletedFileCount += 1;
280
+ continue;
281
+ }
282
+ curatedActiveChunkCount += Array.isArray(file.chunks) ? file.chunks.length : 0;
283
+ }
284
+ const obsidianVaults = obsidianRaw && typeof obsidianRaw === "object" && obsidianRaw !== null && "vaults" in obsidianRaw && typeof obsidianRaw.vaults === "object" && obsidianRaw.vaults !== null ? obsidianRaw : null;
285
+ let obsidianActiveChunkCount = 0;
286
+ let obsidianDeletedNoteCount = 0;
287
+ for (const vault of Object.values(obsidianVaults?.vaults ?? {})) {
288
+ for (const note of Object.values(vault.notes ?? {})) {
289
+ if (note.deleted) {
290
+ obsidianDeletedNoteCount += 1;
291
+ continue;
292
+ }
293
+ obsidianActiveChunkCount += Array.isArray(note.chunks) ? note.chunks.length : 0;
294
+ }
295
+ }
296
+ const openclawFiles = openclawRaw && typeof openclawRaw === "object" && openclawRaw !== null && "files" in openclawRaw && typeof openclawRaw.files === "object" && openclawRaw.files !== null ? openclawRaw : null;
297
+ let openclawActiveChunkCount = 0;
298
+ let openclawDeletedFileCount = 0;
299
+ for (const file of Object.values(openclawFiles?.files ?? {})) {
300
+ if (file.deleted) {
301
+ openclawDeletedFileCount += 1;
302
+ continue;
303
+ }
304
+ openclawActiveChunkCount += Array.isArray(file.chunks) ? file.chunks.length : 0;
305
+ }
306
+ return {
307
+ enabled: nativeKnowledge?.enabled === true,
308
+ includeFiles: nativeKnowledge?.includeFiles ?? [],
309
+ curatedIncludeSync: {
310
+ statePath: curatedStatePath,
311
+ exists: curatedFiles !== null,
312
+ updatedAt: typeof curatedFiles?.updatedAt === "string" ? curatedFiles.updatedAt : null,
313
+ fileCount: Object.keys(curatedFiles?.files ?? {}).length,
314
+ activeChunkCount: curatedActiveChunkCount,
315
+ deletedFileCount: curatedDeletedFileCount
316
+ },
317
+ openclawWorkspaceAdapterEnabled: nativeKnowledge?.openclawWorkspace?.enabled === true,
318
+ obsidianVaultAdapterEnabled: (nativeKnowledge?.obsidianVaults?.length ?? 0) > 0,
319
+ obsidianSync: {
320
+ statePath: obsidianStatePath,
321
+ exists: obsidianVaults !== null,
322
+ updatedAt: typeof obsidianVaults?.updatedAt === "string" ? obsidianVaults.updatedAt : null,
323
+ vaultCount: Object.keys(obsidianVaults?.vaults ?? {}).length,
324
+ activeChunkCount: obsidianActiveChunkCount,
325
+ deletedNoteCount: obsidianDeletedNoteCount
326
+ },
327
+ openclawWorkspaceSync: {
328
+ statePath: openclawStatePath,
329
+ exists: openclawFiles !== null,
330
+ updatedAt: typeof openclawFiles?.updatedAt === "string" ? openclawFiles.updatedAt : null,
331
+ fileCount: Object.keys(openclawFiles?.files ?? {}).length,
332
+ activeChunkCount: openclawActiveChunkCount,
333
+ deletedFileCount: openclawDeletedFileCount
334
+ }
335
+ };
336
+ }
337
+ var CAPTURE_INSTRUCTIONS_START = "<!-- BEGIN ENGRAM EXPLICIT CAPTURE INSTRUCTIONS -->";
338
+ var CAPTURE_INSTRUCTIONS_END = "<!-- END ENGRAM EXPLICIT CAPTURE INSTRUCTIONS -->";
339
+ function buildCaptureInstructions() {
340
+ return [
341
+ CAPTURE_INSTRUCTIONS_START,
342
+ "# Memory",
343
+ "",
344
+ "Use this file for explicit memory capture notes when Engram runs in explicit or hybrid mode.",
345
+ "",
346
+ "## Suggested format",
347
+ "",
348
+ "- Write durable facts, decisions, commitments, or corrections.",
349
+ "- Keep entries concise and specific.",
350
+ "- Avoid secrets, tokens, and private credentials.",
351
+ "",
352
+ "## Example",
353
+ "",
354
+ "- Decision: recall benchmark packs live under `state/evals/benchmarks/`.",
355
+ "- Commitment: rerun `openclaw engram doctor --json` after changing retrieval settings.",
356
+ "",
357
+ CAPTURE_INSTRUCTIONS_END
358
+ ].join("\n");
359
+ }
360
+ function upsertManagedCaptureInstructions(existing, snippet) {
361
+ if (!existing || existing.trim().length === 0) {
362
+ return { content: `${snippet}
363
+ `, updated: false, installed: true };
364
+ }
365
+ if (existing.includes(CAPTURE_INSTRUCTIONS_START) && existing.includes(CAPTURE_INSTRUCTIONS_END)) {
366
+ const next = existing.replace(
367
+ new RegExp(`${CAPTURE_INSTRUCTIONS_START}[\\s\\S]*?${CAPTURE_INSTRUCTIONS_END}`),
368
+ snippet
369
+ );
370
+ return { content: next.endsWith("\n") ? next : `${next}
371
+ `, updated: next !== existing, installed: false };
372
+ }
373
+ const trimmed = existing.trimEnd();
374
+ return {
375
+ content: `${trimmed}
376
+
377
+ ${snippet}
378
+ `,
379
+ updated: false,
380
+ installed: true
381
+ };
382
+ }
383
+ function removeManagedCaptureInstructions(existing) {
384
+ if (!existing.includes(CAPTURE_INSTRUCTIONS_START) || !existing.includes(CAPTURE_INSTRUCTIONS_END)) {
385
+ return { content: existing, removed: false };
386
+ }
387
+ const stripped = existing.replace(new RegExp(`\\n*${CAPTURE_INSTRUCTIONS_START}[\\s\\S]*?${CAPTURE_INSTRUCTIONS_END}\\n*`), "\n").replace(/\n{3,}/g, "\n\n").trim();
388
+ return {
389
+ content: stripped.length > 0 ? `${stripped}
390
+ ` : "",
391
+ removed: true
392
+ };
393
+ }
394
+ async function runOperatorSetup(options) {
395
+ const now = options.now ?? /* @__PURE__ */ new Date();
396
+ const configStatus = await loadCliPluginConfig(options.configPath);
397
+ const storage = new StorageManager(options.orchestrator.config.memoryDir);
398
+ await storage.ensureDirectories();
399
+ await mkdir2(options.orchestrator.config.workspaceDir, { recursive: true });
400
+ const qmdAvailable = await options.orchestrator.qmd.probe();
401
+ const collectionState = options.orchestrator.config.qmdEnabled ? await options.orchestrator.qmd.ensureCollection(options.orchestrator.config.memoryDir) : "skipped";
402
+ const nativeKnowledgeStatus = await summarizeNativeKnowledgeStatus(options.orchestrator.config);
403
+ const memoryDocPath = path2.join(options.orchestrator.config.workspaceDir, "MEMORY.md");
404
+ const captureInstructionsMode = options.captureInstructionsMode ?? (options.installCaptureInstructions ? "install" : void 0);
405
+ let memoryDocExists = false;
406
+ try {
407
+ await access2(memoryDocPath, fsConstants.F_OK);
408
+ memoryDocExists = true;
409
+ } catch {
410
+ memoryDocExists = false;
411
+ }
412
+ let memoryDocInstalled = false;
413
+ let memoryDocUpdated = false;
414
+ let memoryDocRemoved = false;
415
+ const explicitCaptureEnabled = options.orchestrator.config.captureMode === "explicit" || options.orchestrator.config.captureMode === "hybrid";
416
+ const captureInstructionsPreview = captureInstructionsMode ? buildCaptureInstructions() : null;
417
+ if (captureInstructionsMode) {
418
+ if (captureInstructionsMode === "preview") {
419
+ } else if (captureInstructionsMode === "install") {
420
+ const existing = memoryDocExists ? await readFile(memoryDocPath, "utf-8") : null;
421
+ const next = upsertManagedCaptureInstructions(existing, captureInstructionsPreview ?? "");
422
+ if (!existing || next.content !== existing) {
423
+ await writeFile(memoryDocPath, next.content, "utf-8");
424
+ }
425
+ memoryDocExists = true;
426
+ memoryDocInstalled = next.installed;
427
+ memoryDocUpdated = next.updated;
428
+ } else if (captureInstructionsMode === "remove" && memoryDocExists) {
429
+ const existing = await readFile(memoryDocPath, "utf-8");
430
+ const next = removeManagedCaptureInstructions(existing);
431
+ if (next.removed) {
432
+ if (next.content.length === 0) {
433
+ await unlink(memoryDocPath);
434
+ memoryDocExists = false;
435
+ } else {
436
+ await writeFile(memoryDocPath, next.content, "utf-8");
437
+ memoryDocExists = true;
438
+ }
439
+ memoryDocRemoved = true;
440
+ }
441
+ }
442
+ }
443
+ const directories = await gatherDirectoryStatus(getSetupPaths(options.orchestrator.config));
444
+ const nextSteps = [
445
+ `Run \`openclaw engram doctor${options.installCaptureInstructions ? "" : " --json"}\` to verify runtime health.`,
446
+ "Run `openclaw engram inventory --json` to capture a baseline footprint.",
447
+ "If QMD is enabled and the collection is missing, add the collection to `~/.config/qmd/index.yml` and run `qmd update && qmd embed`."
448
+ ];
449
+ if (explicitCaptureEnabled && !memoryDocExists) {
450
+ nextSteps.push("Run `openclaw engram setup --preview-capture-instructions` to review the managed explicit-capture snippet, then `--install-capture-instructions` to write it.");
451
+ }
452
+ return {
453
+ schemaVersion: 1,
454
+ generatedAt: now.toISOString(),
455
+ config: configStatus,
456
+ memoryDir: options.orchestrator.config.memoryDir,
457
+ workspaceDir: options.orchestrator.config.workspaceDir,
458
+ directories,
459
+ qmd: {
460
+ enabled: options.orchestrator.config.qmdEnabled,
461
+ available: qmdAvailable,
462
+ collectionState,
463
+ debugStatus: options.orchestrator.qmd.debugStatus()
464
+ },
465
+ nativeKnowledge: nativeKnowledgeStatus,
466
+ explicitCapture: {
467
+ captureMode: options.orchestrator.config.captureMode,
468
+ enabled: explicitCaptureEnabled,
469
+ memoryDocPath,
470
+ memoryDocExists,
471
+ memoryDocInstalled,
472
+ memoryDocUpdated,
473
+ memoryDocRemoved,
474
+ preview: captureInstructionsMode === "preview" ? captureInstructionsPreview : null
475
+ },
476
+ nextSteps,
477
+ verificationCommands: [
478
+ "openclaw engram doctor --json",
479
+ "openclaw engram inventory --json",
480
+ "openclaw engram benchmark recall --json"
481
+ ]
482
+ };
483
+ }
484
+ function summarizeHygieneWarnings(warnings, hygiene) {
485
+ if (!hygiene?.enabled || hygiene.lintEnabled !== true) {
486
+ return {
487
+ key: "file_hygiene",
488
+ status: "warn",
489
+ summary: "File hygiene linting is disabled; bootstrap file truncation warnings are not active.",
490
+ remediation: "Enable `fileHygiene.enabled` and `fileHygiene.lintEnabled` if large workspace bootstrap files are common.",
491
+ details: {
492
+ enabled: hygiene?.enabled === true,
493
+ lintEnabled: hygiene?.lintEnabled === true
494
+ }
495
+ };
496
+ }
497
+ if (warnings.length > 0) {
498
+ return {
499
+ key: "file_hygiene",
500
+ status: "warn",
501
+ summary: `${warnings.length} bootstrap file(s) are near or above the configured budget.`,
502
+ remediation: "Archive/split the listed files or adjust `fileHygiene` budgets.",
503
+ details: { warnings }
504
+ };
505
+ }
506
+ return {
507
+ key: "file_hygiene",
508
+ status: "ok",
509
+ summary: "Bootstrap file hygiene is within budget.",
510
+ details: {
511
+ enabled: true,
512
+ lintPaths: hygiene.lintPaths,
513
+ budgetBytes: hygiene.lintBudgetBytes
514
+ }
515
+ };
516
+ }
517
+ function buildConfigReviewFinding(input) {
518
+ return {
519
+ key: input.key,
520
+ status: input.status,
521
+ setting: input.setting,
522
+ currentValue: formatConfigValue(input.currentValue),
523
+ defaultValue: formatConfigValue(input.defaultValue),
524
+ recommendedValue: formatConfigValue(input.recommendedValue),
525
+ summary: input.summary,
526
+ rationale: input.rationale
527
+ };
528
+ }
529
+ async function runOperatorConfigReview(options) {
530
+ const now = options.now ?? /* @__PURE__ */ new Date();
531
+ const configStatus = await loadCliPluginConfig(options.configPath);
532
+ return buildOperatorConfigReviewReport({
533
+ now,
534
+ configStatus,
535
+ config: options.orchestrator.config
536
+ });
537
+ }
538
+ async function buildOperatorConfigReviewReport(input) {
539
+ const { now, configStatus, config } = input;
540
+ const findings = [];
541
+ const searchBackend = config.searchBackend ?? "qmd";
542
+ const workspaceBootstrapFiles = [
543
+ path2.join(config.workspaceDir, "IDENTITY.md"),
544
+ path2.join(config.workspaceDir, "MEMORY.md"),
545
+ path2.join(config.workspaceDir, "USER.md")
546
+ ];
547
+ const workspaceBootstrapExists = (await Promise.all(workspaceBootstrapFiles.map(pathExists))).some(Boolean);
548
+ if (config.memoryOsPreset !== "conservative" && config.memoryOsPreset !== "balanced" && config.memoryOsPreset !== "research-max" && config.memoryOsPreset !== "local-llm-heavy" && config.queryAwareIndexingEnabled === false && config.verbatimArtifactsEnabled === false && config.rerankEnabled === false) {
549
+ findings.push(buildConfigReviewFinding({
550
+ key: "balanced_preset",
551
+ status: "recommend",
552
+ setting: "memoryOsPreset",
553
+ currentValue: config.memoryOsPreset,
554
+ defaultValue: "(unset)",
555
+ recommendedValue: "balanced",
556
+ summary: "Adopt the balanced preset as the baseline configuration profile.",
557
+ rationale: "The balanced preset enables the recommended indexing, reranking, and artifact defaults without turning on the higher-churn graph and learning loops."
558
+ }));
559
+ }
560
+ if (config.qmdEnabled && config.qmdDaemonEnabled === false) {
561
+ findings.push(buildConfigReviewFinding({
562
+ key: "qmd_daemon",
563
+ status: "recommend",
564
+ setting: "qmdDaemonEnabled",
565
+ currentValue: config.qmdDaemonEnabled,
566
+ defaultValue: true,
567
+ recommendedValue: true,
568
+ summary: "Enable the QMD daemon path when QMD powers recall.",
569
+ rationale: "The daemon path reduces recall/search contention by preferring the MCP transport instead of repeated subprocess calls when QMD is available."
570
+ }));
571
+ }
572
+ if (workspaceBootstrapExists && config.nativeKnowledge?.enabled !== true) {
573
+ findings.push(buildConfigReviewFinding({
574
+ key: "native_knowledge_enabled",
575
+ status: "recommend",
576
+ setting: "nativeKnowledge.enabled",
577
+ currentValue: config.nativeKnowledge?.enabled,
578
+ defaultValue: false,
579
+ recommendedValue: true,
580
+ summary: "Enable native knowledge recall for workspace bootstrap documents.",
581
+ rationale: "When files like IDENTITY.md or MEMORY.md already exist, native knowledge recall can chunk and inject them directly instead of relying only on extracted memories."
582
+ }));
583
+ }
584
+ if (workspaceBootstrapExists && config.fileHygiene?.enabled !== true) {
585
+ findings.push(buildConfigReviewFinding({
586
+ key: "file_hygiene_enabled",
587
+ status: "recommend",
588
+ setting: "fileHygiene.enabled",
589
+ currentValue: config.fileHygiene?.enabled,
590
+ defaultValue: false,
591
+ recommendedValue: true,
592
+ summary: "Enable file hygiene to avoid silent workspace-file truncation.",
593
+ rationale: "OpenClaw bootstrap files can grow quietly; file hygiene warns before oversized files are truncated during prompt bootstrap."
594
+ }));
595
+ }
596
+ if (searchBackend === "qmd" && config.qmdEnabled === false) {
597
+ findings.push(buildConfigReviewFinding({
598
+ key: "qmd_search_backend_disabled",
599
+ status: "problem",
600
+ setting: "qmdEnabled",
601
+ currentValue: config.qmdEnabled,
602
+ defaultValue: true,
603
+ recommendedValue: true,
604
+ summary: "QMD search is selected but QMD is disabled.",
605
+ rationale: "When searchBackend resolves to qmd while qmdEnabled is false, Engram falls back to the noop backend and disables the primary search path."
606
+ }));
607
+ }
608
+ if (config.qmdColdTierEnabled === true && config.qmdEnabled === false) {
609
+ findings.push(buildConfigReviewFinding({
610
+ key: "qmd_cold_tier_requires_qmd",
611
+ status: "problem",
612
+ setting: "qmdEnabled",
613
+ currentValue: config.qmdEnabled,
614
+ defaultValue: true,
615
+ recommendedValue: true,
616
+ summary: "Cold-tier QMD recall is enabled while QMD itself is disabled.",
617
+ rationale: "The cold tier depends on the same QMD runtime as the hot tier, so turning QMD off leaves the extra tiering path unusable."
618
+ }));
619
+ }
620
+ if (config.qmdTierMigrationEnabled && config.qmdColdTierEnabled !== true) {
621
+ findings.push(buildConfigReviewFinding({
622
+ key: "qmd_tier_migration_requires_cold_tier",
623
+ status: "problem",
624
+ setting: "qmdColdTierEnabled",
625
+ currentValue: config.qmdColdTierEnabled,
626
+ defaultValue: false,
627
+ recommendedValue: true,
628
+ summary: "Hot/cold tier migration is enabled without the cold tier itself.",
629
+ rationale: "Tier migration depends on the cold-tier collection and recall path, so enabling migration while the cold tier is off leaves the feature in a contradictory state."
630
+ }));
631
+ }
632
+ if (config.conversationIndexEnabled && config.conversationIndexBackend === "qmd" && config.qmdEnabled === false) {
633
+ findings.push(buildConfigReviewFinding({
634
+ key: "conversation_index_qmd_requires_qmd",
635
+ status: "problem",
636
+ setting: "qmdEnabled",
637
+ currentValue: config.qmdEnabled,
638
+ defaultValue: true,
639
+ recommendedValue: true,
640
+ summary: "The conversation index is configured for QMD while QMD is disabled.",
641
+ rationale: "A QMD-backed conversation index cannot rebuild or serve queries when the underlying QMD runtime is disabled."
642
+ }));
643
+ }
644
+ const summary = findings.reduce(
645
+ (acc, finding) => {
646
+ acc[finding.status] += 1;
647
+ return acc;
648
+ },
649
+ { recommend: 0, problem: 0 }
650
+ );
651
+ return {
652
+ schemaVersion: 1,
653
+ generatedAt: now.toISOString(),
654
+ ok: configStatus.parsed && summary.problem === 0,
655
+ config: configStatus,
656
+ profile: {
657
+ memoryOsPreset: config.memoryOsPreset,
658
+ searchBackend,
659
+ qmdEnabled: config.qmdEnabled,
660
+ qmdDaemonEnabled: config.qmdDaemonEnabled,
661
+ nativeKnowledgeEnabled: config.nativeKnowledge?.enabled === true,
662
+ fileHygieneEnabled: config.fileHygiene?.enabled === true,
663
+ conversationIndexEnabled: config.conversationIndexEnabled
664
+ },
665
+ summary,
666
+ findings
667
+ };
668
+ }
669
+ async function runOperatorDoctor(options) {
670
+ const now = options.now ?? /* @__PURE__ */ new Date();
671
+ const configStatus = await loadCliPluginConfig(options.configPath);
672
+ const checks = [];
673
+ const config = options.orchestrator.config;
674
+ const configReview = await buildOperatorConfigReviewReport({
675
+ now,
676
+ configStatus,
677
+ config
678
+ });
679
+ const nativeKnowledgeStatus = await summarizeNativeKnowledgeStatus(config);
680
+ const setupPaths = await gatherDirectoryStatus(getSetupPaths(config));
681
+ const missingPaths = setupPaths.filter((entry) => !entry.exists).map((entry) => entry.path);
682
+ checks.push({
683
+ key: "config",
684
+ status: configStatus.parsed ? "ok" : options.configPath ? "error" : "warn",
685
+ summary: configStatus.parsed ? "OpenClaw config loaded and Engram config parsed successfully." : "Config file could not be parsed.",
686
+ remediation: configStatus.parsed ? void 0 : "Fix the config file or set OPENCLAW_ENGRAM_CONFIG_PATH/OPENCLAW_CONFIG_PATH.",
687
+ details: configStatus
688
+ });
689
+ checks.push({
690
+ key: "memory_dir",
691
+ status: missingPaths.length === 0 ? "ok" : "warn",
692
+ summary: missingPaths.length === 0 ? "Expected Engram directories exist." : `${missingPaths.length} expected directory path(s) are missing.`,
693
+ remediation: missingPaths.length === 0 ? void 0 : "Run `openclaw engram setup` to create missing directories.",
694
+ details: { directories: setupPaths }
695
+ });
696
+ checks.push({
697
+ key: "config_review",
698
+ status: configReview.summary.problem > 0 ? "error" : configReview.summary.recommend > 0 ? "warn" : "ok",
699
+ summary: configReview.summary.problem > 0 ? `${configReview.summary.problem} configuration problem(s) detected.` : configReview.summary.recommend > 0 ? `No configuration problems detected; ${configReview.summary.recommend} optional recommendation(s) are available.` : "No configuration problems detected.",
700
+ remediation: configReview.summary.problem > 0 || configReview.summary.recommend > 0 ? "Run `openclaw engram config-review` to inspect and fix the flagged configuration combinations." : void 0,
701
+ details: configReview
702
+ });
703
+ const qmdAvailable = await options.orchestrator.qmd.probe();
704
+ const collectionState = config.qmdEnabled ? await options.orchestrator.qmd.ensureCollection(config.memoryDir) : "skipped";
705
+ checks.push({
706
+ key: "qmd",
707
+ status: !config.qmdEnabled ? "warn" : !qmdAvailable ? "error" : collectionState === "present" ? "ok" : collectionState === "missing" ? "error" : "warn",
708
+ summary: !config.qmdEnabled ? "QMD is disabled in config." : qmdAvailable ? `QMD is reachable (${collectionState}).` : "QMD is not currently reachable.",
709
+ remediation: !config.qmdEnabled ? "Enable `qmdEnabled` if you expect hybrid search." : !qmdAvailable ? "Ensure the `qmd` binary is installed and on PATH, or set `qmdPath`." : collectionState === "missing" ? "Add the configured collection to `~/.config/qmd/index.yml`." : collectionState === "present" ? void 0 : "Re-run `openclaw engram setup` after restoring QMD access.",
710
+ details: {
711
+ available: qmdAvailable,
712
+ collectionState,
713
+ debugStatus: options.orchestrator.qmd.debugStatus()
714
+ }
715
+ });
716
+ const conversationIndex = await options.orchestrator.getConversationIndexHealth();
717
+ checks.push({
718
+ key: "conversation_index",
719
+ status: conversationIndex.status === "ok" ? "ok" : conversationIndex.enabled ? "error" : "warn",
720
+ summary: conversationIndex.enabled ? `Conversation index backend is ${conversationIndex.status}.` : "Conversation index is disabled.",
721
+ remediation: conversationIndex.enabled && conversationIndex.status !== "ok" ? "Run `openclaw engram rebuild-index` to refresh the conversation index artifacts." : void 0,
722
+ details: conversationIndex
723
+ });
724
+ const meta = await new StorageManager(config.memoryDir).loadMeta();
725
+ checks.push({
726
+ key: "maintenance",
727
+ status: meta.lastExtractionAt || meta.lastConsolidationAt ? "ok" : "warn",
728
+ summary: meta.lastExtractionAt || meta.lastConsolidationAt ? "Extraction/consolidation metadata is present." : "No extraction or consolidation metadata found yet.",
729
+ remediation: meta.lastExtractionAt || meta.lastConsolidationAt ? void 0 : "Run a normal agent turn or `openclaw engram consolidate` after seeding memory.",
730
+ details: meta
731
+ });
732
+ const syncedChunkCount = nativeKnowledgeStatus.curatedIncludeSync.activeChunkCount + nativeKnowledgeStatus.obsidianSync.activeChunkCount + nativeKnowledgeStatus.openclawWorkspaceSync.activeChunkCount;
733
+ const hasSyncState = nativeKnowledgeStatus.curatedIncludeSync.exists || nativeKnowledgeStatus.obsidianSync.exists || nativeKnowledgeStatus.openclawWorkspaceSync.exists;
734
+ checks.push({
735
+ key: "native_knowledge",
736
+ status: !nativeKnowledgeStatus.enabled ? "warn" : hasSyncState ? "ok" : "warn",
737
+ summary: !nativeKnowledgeStatus.enabled ? "Native knowledge sync is disabled." : hasSyncState ? `Native knowledge sync state is present (${syncedChunkCount} active chunks).` : "Native knowledge sync is enabled but no sync state has been written yet.",
738
+ remediation: !nativeKnowledgeStatus.enabled ? "Enable `nativeKnowledge.enabled` if curated workspace recall should participate in retrieval." : hasSyncState ? void 0 : "Run a recall, sync, or setup flow that touches native knowledge sources, then rerun `openclaw engram doctor --json`.",
739
+ details: nativeKnowledgeStatus
740
+ });
741
+ const agentAccessEnabled = config.agentAccessHttp?.enabled === true;
742
+ checks.push({
743
+ key: "access_http_auth",
744
+ status: !agentAccessEnabled ? "warn" : config.agentAccessHttp?.authToken ? "ok" : "error",
745
+ summary: !agentAccessEnabled ? "Agent access HTTP bridge is disabled." : config.agentAccessHttp?.authToken ? "Agent access HTTP bridge has an auth token configured." : "Agent access HTTP bridge is enabled without an auth token.",
746
+ remediation: !agentAccessEnabled ? "Ignore unless you plan to enable the HTTP bridge." : config.agentAccessHttp?.authToken ? void 0 : "Set `agentAccessHttp.authToken` before exposing the bridge."
747
+ });
748
+ const warnings = config.fileHygiene?.lintEnabled ? await lintWorkspaceFiles({
749
+ workspaceDir: config.workspaceDir,
750
+ paths: config.fileHygiene.lintPaths,
751
+ budgetBytes: config.fileHygiene.lintBudgetBytes,
752
+ warnRatio: config.fileHygiene.lintWarnRatio
753
+ }) : [];
754
+ checks.push(summarizeHygieneWarnings(warnings, config.fileHygiene));
755
+ const summary = checks.reduce(
756
+ (acc, check) => {
757
+ acc[check.status] += 1;
758
+ return acc;
759
+ },
760
+ { ok: 0, warn: 0, error: 0 }
761
+ );
762
+ return {
763
+ schemaVersion: 1,
764
+ generatedAt: now.toISOString(),
765
+ ok: summary.error === 0,
766
+ summary,
767
+ config: configStatus,
768
+ checks
769
+ };
770
+ }
771
+ function getMemoryAgeBand(memory, now) {
772
+ const created = Date.parse(memory.frontmatter.created ?? "");
773
+ if (!Number.isFinite(created)) return "unknown";
774
+ const ageDays = Math.max(0, Math.floor((now.getTime() - created) / 864e5));
775
+ if (ageDays < 7) return "0_6d";
776
+ if (ageDays < 30) return "7_29d";
777
+ if (ageDays < 90) return "30_89d";
778
+ return "90d_plus";
779
+ }
780
+ async function dirSize(targetPath) {
781
+ try {
782
+ const info = await stat(targetPath);
783
+ if (info.isFile()) return info.size;
784
+ if (!info.isDirectory()) return 0;
785
+ } catch {
786
+ return 0;
787
+ }
788
+ let total = 0;
789
+ let entries;
790
+ try {
791
+ entries = await readdir2(targetPath, { withFileTypes: true });
792
+ } catch {
793
+ return 0;
794
+ }
795
+ for (const entry of entries) {
796
+ total += await dirSize(path2.join(targetPath, entry.name));
797
+ }
798
+ return total;
799
+ }
800
+ async function summarizeStorageFootprint(memoryDir) {
801
+ const topLevel = [
802
+ "facts",
803
+ "entities",
804
+ "questions",
805
+ "corrections",
806
+ "artifacts",
807
+ "state",
808
+ "identity",
809
+ "namespaces",
810
+ "summaries",
811
+ "profile.md"
812
+ ];
813
+ const byTopLevel = {};
814
+ let bytes = 0;
815
+ for (const name of topLevel) {
816
+ const size = await dirSize(path2.join(memoryDir, name));
817
+ if (size > 0) {
818
+ byTopLevel[name] = size;
819
+ bytes += size;
820
+ }
821
+ }
822
+ return { bytes, byTopLevel };
823
+ }
824
+ async function runOperatorInventory(options) {
825
+ const now = options.now ?? /* @__PURE__ */ new Date();
826
+ const config = options.orchestrator.config;
827
+ const namespaceEntries = await listNamespaces({ config });
828
+ const uniqueRootEntries = /* @__PURE__ */ new Map();
829
+ for (const entry of namespaceEntries) {
830
+ if (!uniqueRootEntries.has(entry.rootDir)) {
831
+ uniqueRootEntries.set(entry.rootDir, { namespace: entry.namespace, rootDir: entry.rootDir });
832
+ }
833
+ }
834
+ const categories = {};
835
+ const statuses = {};
836
+ const ageBands = {
837
+ "0_6d": 0,
838
+ "7_29d": 0,
839
+ "30_89d": 0,
840
+ "90d_plus": 0,
841
+ unknown: 0
842
+ };
843
+ const namespaces = [];
844
+ let totalMemories = 0;
845
+ let totalEntities = 0;
846
+ let archived = 0;
847
+ let pendingReview = 0;
848
+ let quarantined = 0;
849
+ let rejected = 0;
850
+ for (const entry of uniqueRootEntries.values()) {
851
+ const storage = new StorageManager(entry.rootDir);
852
+ const memories = await storage.readAllMemories();
853
+ const entities = await storage.readAllEntityFiles();
854
+ namespaces.push({
855
+ namespace: entry.namespace,
856
+ memoryCount: memories.length,
857
+ entityCount: entities.length
858
+ });
859
+ totalMemories += memories.length;
860
+ totalEntities += entities.length;
861
+ for (const memory of memories) {
862
+ const category = memory.frontmatter.category;
863
+ categories[category] = (categories[category] ?? 0) + 1;
864
+ const status = memory.frontmatter.status ?? "active";
865
+ statuses[status] = (statuses[status] ?? 0) + 1;
866
+ ageBands[getMemoryAgeBand(memory, now)] += 1;
867
+ if (status === "archived") archived += 1;
868
+ if (status === "pending_review") pendingReview += 1;
869
+ if (status === "quarantined") quarantined += 1;
870
+ if (status === "rejected") rejected += 1;
871
+ }
872
+ }
873
+ const defaultStorage = new StorageManager(config.memoryDir);
874
+ const profile = await defaultStorage.readProfile();
875
+ const footprint = await summarizeStorageFootprint(config.memoryDir);
876
+ const reviewRunId = (await listMemoryGovernanceRuns(config.memoryDir))[0];
877
+ let reviewQueue = 0;
878
+ if (reviewRunId) {
879
+ try {
880
+ reviewQueue = (await readMemoryGovernanceRunArtifact(config.memoryDir, reviewRunId)).reviewQueue.length;
881
+ } catch {
882
+ reviewQueue = 0;
883
+ }
884
+ }
885
+ const conversationIndex = await options.orchestrator.getConversationIndexHealth();
886
+ const nativeKnowledgeStatus = await summarizeNativeKnowledgeStatus(config);
887
+ return {
888
+ schemaVersion: 1,
889
+ generatedAt: now.toISOString(),
890
+ memoryDir: config.memoryDir,
891
+ totals: {
892
+ memories: totalMemories,
893
+ entities: totalEntities,
894
+ namespaces: namespaceEntries.length,
895
+ reviewQueue,
896
+ storageBytes: footprint.bytes
897
+ },
898
+ categories,
899
+ statuses,
900
+ namespaces,
901
+ ageBands,
902
+ profile: {
903
+ exists: profile.length > 0,
904
+ chars: profile.length,
905
+ lines: profile.length > 0 ? profile.split("\n").length : 0
906
+ },
907
+ storageFootprint: footprint,
908
+ archivePressure: {
909
+ archived,
910
+ pendingReview,
911
+ quarantined,
912
+ rejected
913
+ },
914
+ conversationIndex: {
915
+ enabled: conversationIndex.enabled,
916
+ backend: conversationIndex.backend,
917
+ status: conversationIndex.status,
918
+ chunkDocCount: conversationIndex.chunkDocCount,
919
+ lastUpdateAt: conversationIndex.lastUpdateAt
920
+ },
921
+ nativeKnowledge: {
922
+ enabled: nativeKnowledgeStatus.enabled,
923
+ curatedIncludeSync: nativeKnowledgeStatus.curatedIncludeSync,
924
+ obsidianSync: nativeKnowledgeStatus.obsidianSync,
925
+ openclawWorkspaceSync: nativeKnowledgeStatus.openclawWorkspaceSync
926
+ }
927
+ };
928
+ }
929
+ async function runBenchmarkRecall(options) {
930
+ const now = options.now ?? /* @__PURE__ */ new Date();
931
+ const status = await getEvalHarnessStatus({
932
+ memoryDir: options.config.memoryDir,
933
+ evalStoreDir: options.config.evalStoreDir,
934
+ enabled: options.config.evalHarnessEnabled,
935
+ shadowModeEnabled: options.config.evalShadowModeEnabled,
936
+ baselineSnapshotsEnabled: options.config.benchmarkBaselineSnapshotsEnabled,
937
+ memoryRedTeamBenchEnabled: options.config.memoryRedTeamBenchEnabled
938
+ });
939
+ if (options.createSnapshot && options.snapshotId) {
940
+ const snapshot = await createEvalBaselineSnapshot({
941
+ memoryDir: options.config.memoryDir,
942
+ evalStoreDir: options.config.evalStoreDir,
943
+ baselineSnapshotsEnabled: options.config.benchmarkBaselineSnapshotsEnabled,
944
+ snapshotId: options.snapshotId,
945
+ notes: options.snapshotNotes,
946
+ gitRef: options.gitRef,
947
+ createdAt: options.createdAt
948
+ });
949
+ return {
950
+ schemaVersion: 1,
951
+ generatedAt: now.toISOString(),
952
+ mode: "snapshot",
953
+ status,
954
+ snapshot: {
955
+ targetPath: snapshot.targetPath,
956
+ snapshotId: snapshot.snapshot.snapshotId
957
+ }
958
+ };
959
+ }
960
+ if (options.baseEvalStoreDir && options.candidateEvalStoreDir) {
961
+ const ciGate = await runEvalBenchmarkCiGate({
962
+ baseEvalStoreDir: options.baseEvalStoreDir,
963
+ candidateEvalStoreDir: options.candidateEvalStoreDir
964
+ });
965
+ return {
966
+ schemaVersion: 1,
967
+ generatedAt: now.toISOString(),
968
+ mode: "ci-gate",
969
+ status,
970
+ ciGate
971
+ };
972
+ }
973
+ if (options.snapshotId) {
974
+ const baselineReport = await runEvalBaselineDeltaReport({
975
+ memoryDir: options.config.memoryDir,
976
+ evalStoreDir: options.config.evalStoreDir,
977
+ benchmarkDeltaReporterEnabled: options.config.benchmarkDeltaReporterEnabled,
978
+ snapshotId: options.snapshotId
979
+ });
980
+ return {
981
+ schemaVersion: 1,
982
+ generatedAt: now.toISOString(),
983
+ mode: "baseline-report",
984
+ status,
985
+ baselineReport
986
+ };
987
+ }
988
+ if (options.validatePath) {
989
+ const validate = await validateEvalBenchmarkPack(options.validatePath, {
990
+ memoryRedTeamBenchEnabled: options.config.memoryRedTeamBenchEnabled
991
+ });
992
+ return {
993
+ schemaVersion: 1,
994
+ generatedAt: now.toISOString(),
995
+ mode: "validate",
996
+ status,
997
+ validate
998
+ };
999
+ }
1000
+ return {
1001
+ schemaVersion: 1,
1002
+ generatedAt: now.toISOString(),
1003
+ mode: "status",
1004
+ status
1005
+ };
1006
+ }
1007
+ async function runOperatorRepair(options) {
1008
+ const now = options.now ?? /* @__PURE__ */ new Date();
1009
+ const dryRun = options.dryRun === true || options.apply !== true;
1010
+ const sessionCheck = await analyzeSessionIntegrity({ memoryDir: options.config.memoryDir });
1011
+ const sessionRepairPlan = planSessionRepair({
1012
+ report: sessionCheck,
1013
+ dryRun,
1014
+ allowSessionFileRepair: options.allowSessionFileRepair,
1015
+ sessionFilesDir: options.sessionFilesDir
1016
+ });
1017
+ const sessionRepairApply = await applySessionRepair({
1018
+ plan: sessionRepairPlan
1019
+ });
1020
+ const graphHealth = await analyzeGraphHealth(options.config.memoryDir, {
1021
+ entityGraphEnabled: options.config.entityGraphEnabled,
1022
+ timeGraphEnabled: options.config.timeGraphEnabled,
1023
+ causalGraphEnabled: options.config.causalGraphEnabled,
1024
+ includeRepairGuidance: true
1025
+ });
1026
+ return {
1027
+ schemaVersion: 1,
1028
+ generatedAt: now.toISOString(),
1029
+ dryRun,
1030
+ sessionCheck,
1031
+ sessionRepairPlan,
1032
+ sessionRepairApply,
1033
+ graphHealth
1034
+ };
1035
+ }
1036
+
1037
+ export {
1038
+ listNamespaces,
1039
+ verifyNamespaces,
1040
+ runNamespaceMigration,
1041
+ runOperatorSetup,
1042
+ runOperatorConfigReview,
1043
+ runOperatorDoctor,
1044
+ runOperatorInventory,
1045
+ runBenchmarkRecall,
1046
+ runOperatorRepair
1047
+ };
1048
+ //# sourceMappingURL=chunk-QDOSNLB4.js.map