@remnic/core 1.0.1 → 1.0.3

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 (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +48 -0
  3. package/dist/access-cli.d.ts +13 -3
  4. package/dist/access-cli.js +90 -75
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-http.d.ts +10 -3
  7. package/dist/access-http.js +25 -18
  8. package/dist/access-mcp.d.ts +30 -3
  9. package/dist/access-mcp.js +16 -1
  10. package/dist/access-schema.d.ts +46 -46
  11. package/dist/access-schema.js +1 -1
  12. package/dist/access-service.d.ts +65 -4
  13. package/dist/access-service.js +21 -15
  14. package/dist/active-memory-bridge.d.ts +66 -0
  15. package/dist/active-memory-bridge.js +11 -0
  16. package/dist/active-recall.d.ts +96 -0
  17. package/dist/active-recall.js +308 -0
  18. package/dist/active-recall.js.map +1 -0
  19. package/dist/behavior-learner.js +1 -1
  20. package/dist/bootstrap.d.ts +6 -3
  21. package/dist/bootstrap.js +2 -2
  22. package/dist/boxes.js +2 -2
  23. package/dist/briefing.d.ts +169 -0
  24. package/dist/briefing.js +52 -0
  25. package/dist/briefing.js.map +1 -0
  26. package/dist/buffer.d.ts +19 -5
  27. package/dist/buffer.js +2 -2
  28. package/dist/calibration.js +6 -6
  29. package/dist/causal-behavior.js +5 -5
  30. package/dist/causal-chain.js +3 -3
  31. package/dist/causal-consolidation.d.ts +22 -2
  32. package/dist/causal-consolidation.js +36 -9
  33. package/dist/causal-consolidation.js.map +1 -1
  34. package/dist/causal-retrieval.js +6 -6
  35. package/dist/causal-trajectory-graph.js +1 -1
  36. package/dist/causal-trajectory.d.ts +14 -1
  37. package/dist/causal-trajectory.js +5 -1
  38. package/dist/{chunk-KWBU5S5U.js → chunk-2ODBA7MQ.js} +9 -3
  39. package/dist/chunk-2ODBA7MQ.js.map +1 -0
  40. package/dist/{chunk-6UJQNRIO.js → chunk-2VFW5K5U.js} +93 -36
  41. package/dist/chunk-2VFW5K5U.js.map +1 -0
  42. package/dist/chunk-3PG3H5TD.js +7 -0
  43. package/dist/chunk-3PG3H5TD.js.map +1 -0
  44. package/dist/{chunk-NTTLPF7F.js → chunk-3QFQGRHO.js} +5 -5
  45. package/dist/chunk-4DJQYKMN.js +187 -0
  46. package/dist/chunk-4DJQYKMN.js.map +1 -0
  47. package/dist/chunk-4KAN3GZ3.js +225 -0
  48. package/dist/chunk-4KAN3GZ3.js.map +1 -0
  49. package/dist/{chunk-ORZMT74A.js → chunk-4NRAJUDS.js} +11 -1
  50. package/dist/chunk-4NRAJUDS.js.map +1 -0
  51. package/dist/{chunk-B7LOFDVE.js → chunk-4WMCPJWX.js} +8 -3
  52. package/dist/chunk-4WMCPJWX.js.map +1 -0
  53. package/dist/{chunk-G3AG3KZN.js → chunk-5IZL4DCV.js} +2 -2
  54. package/dist/{chunk-BRK4ODMI.js → chunk-5NPGSAVB.js} +2 -2
  55. package/dist/chunk-6MKAMLQL.js +16 -0
  56. package/dist/chunk-6MKAMLQL.js.map +1 -0
  57. package/dist/{chunk-ESSMF2FR.js → chunk-6PFRXT4K.js} +15 -6
  58. package/dist/chunk-6PFRXT4K.js.map +1 -0
  59. package/dist/chunk-6ZH4TU6I.js +245 -0
  60. package/dist/chunk-6ZH4TU6I.js.map +1 -0
  61. package/dist/{chunk-V4YC4LUK.js → chunk-74JR4N5J.js} +175 -63
  62. package/dist/chunk-74JR4N5J.js.map +1 -0
  63. package/dist/{chunk-L5RPWGFK.js → chunk-7DHTMOND.js} +2 -2
  64. package/dist/{chunk-TVVVQQAK.js → chunk-7PA4OZEU.js} +53 -11
  65. package/dist/chunk-7PA4OZEU.js.map +1 -0
  66. package/dist/{chunk-Q6FETXJA.js → chunk-7SEAZFFB.js} +2 -2
  67. package/dist/chunk-ALXMCZEU.js +332 -0
  68. package/dist/chunk-ALXMCZEU.js.map +1 -0
  69. package/dist/{chunk-QANCTXQF.js → chunk-AYPYCLR7.js} +3 -3
  70. package/dist/{chunk-WWIQTB2Y.js → chunk-BKQJBXXX.js} +9 -2
  71. package/dist/chunk-BKQJBXXX.js.map +1 -0
  72. package/dist/{chunk-LP47L3ZX.js → chunk-BTY5RRRF.js} +7 -7
  73. package/dist/{chunk-SCHEKPYH.js → chunk-C2EFFULQ.js} +1 -1
  74. package/dist/{chunk-GJR6D6KC.js → chunk-D654IBA6.js} +2 -2
  75. package/dist/{chunk-UV2FO7J4.js → chunk-E6K4NIEU.js} +2 -2
  76. package/dist/{chunk-T4WRIV2C.js → chunk-EABGC2TL.js} +2 -2
  77. package/dist/chunk-ECKDIK5F.js +813 -0
  78. package/dist/chunk-ECKDIK5F.js.map +1 -0
  79. package/dist/chunk-EJI5XIBB.js +232 -0
  80. package/dist/chunk-EJI5XIBB.js.map +1 -0
  81. package/dist/{chunk-ONRU4L2N.js → chunk-FEMOX5AD.js} +2 -2
  82. package/dist/{chunk-IFFFR3MR.js → chunk-FSFEQI74.js} +3 -3
  83. package/dist/chunk-G4SK7DSQ.js +121 -0
  84. package/dist/chunk-G4SK7DSQ.js.map +1 -0
  85. package/dist/{chunk-UIYZ5T3I.js → chunk-GJQPH5G3.js} +8 -8
  86. package/dist/{chunk-2PO5ZRKV.js → chunk-GZCUW5IC.js} +16 -3
  87. package/dist/chunk-GZCUW5IC.js.map +1 -0
  88. package/dist/{chunk-IZME7KW2.js → chunk-HITJFT7E.js} +24 -10
  89. package/dist/{chunk-IZME7KW2.js.map → chunk-HITJFT7E.js.map} +1 -1
  90. package/dist/chunk-IQT3XTKW.js +121 -0
  91. package/dist/chunk-IQT3XTKW.js.map +1 -0
  92. package/dist/{chunk-BDFZXRSO.js → chunk-J4IYOZZ5.js} +15 -2
  93. package/dist/chunk-J4IYOZZ5.js.map +1 -0
  94. package/dist/{chunk-ZKYI7UVO.js → chunk-JR4ZC3G4.js} +2 -2
  95. package/dist/{chunk-UCYSTFZR.js → chunk-JRNQ3RNA.js} +2 -2
  96. package/dist/{chunk-UYSKNO6E.js → chunk-JROGC36Y.js} +15 -4
  97. package/dist/chunk-JROGC36Y.js.map +1 -0
  98. package/dist/{chunk-GPGBSNKM.js → chunk-K4FLSOR5.js} +2 -2
  99. package/dist/{chunk-M5ZBBBJI.js → chunk-KEG4GNGI.js} +2 -2
  100. package/dist/chunk-KVE7R4CG.js +320 -0
  101. package/dist/chunk-KVE7R4CG.js.map +1 -0
  102. package/dist/{chunk-L7WO3MZ4.js → chunk-KWP7T3DP.js} +2 -2
  103. package/dist/chunk-LAYN4LDC.js +267 -0
  104. package/dist/chunk-LAYN4LDC.js.map +1 -0
  105. package/dist/{chunk-PGK3VUHN.js → chunk-MTLYEMJB.js} +3 -2
  106. package/dist/chunk-MTLYEMJB.js.map +1 -0
  107. package/dist/{chunk-J47FNDR7.js → chunk-MYQWXITD.js} +7 -7
  108. package/dist/{chunk-YNI4S5WT.js → chunk-N53K2EXC.js} +2 -2
  109. package/dist/{chunk-763GUIOU.js → chunk-NBNN5GOB.js} +2 -2
  110. package/dist/{chunk-CXWFUJR2.js → chunk-NSB3WSYS.js} +125 -6
  111. package/dist/chunk-NSB3WSYS.js.map +1 -0
  112. package/dist/{chunk-KL4CP4SB.js → chunk-O5ETUNBT.js} +17 -5
  113. package/dist/chunk-O5ETUNBT.js.map +1 -0
  114. package/dist/{chunk-OOSWAUYB.js → chunk-ODWDQNRE.js} +2 -2
  115. package/dist/{chunk-ISY75RLM.js → chunk-OJFGVJS6.js} +288 -7
  116. package/dist/chunk-OJFGVJS6.js.map +1 -0
  117. package/dist/{chunk-HLBYLYRD.js → chunk-PAORGQRI.js} +70 -13
  118. package/dist/chunk-PAORGQRI.js.map +1 -0
  119. package/dist/{chunk-ZJLY4QSU.js → chunk-PMB3WGDL.js} +69 -6
  120. package/dist/chunk-PMB3WGDL.js.map +1 -0
  121. package/dist/{chunk-J3BT33K7.js → chunk-POBPGDWI.js} +5 -5
  122. package/dist/{chunk-QWUUMMIK.js → chunk-POMSFKTB.js} +1351 -76
  123. package/dist/chunk-POMSFKTB.js.map +1 -0
  124. package/dist/{chunk-OTAVQCSF.js → chunk-PYXS46O7.js} +2 -2
  125. package/dist/chunk-QDW3E4RD.js +108 -0
  126. package/dist/chunk-QDW3E4RD.js.map +1 -0
  127. package/dist/{chunk-YNCQ7E4M.js → chunk-QDYXG4CS.js} +4 -3
  128. package/dist/chunk-QDYXG4CS.js.map +1 -0
  129. package/dist/{chunk-XUHI52HK.js → chunk-QKAH5B6E.js} +4 -4
  130. package/dist/{chunk-HLXVTBF3.js → chunk-QNJMBKFK.js} +3 -2
  131. package/dist/chunk-QNJMBKFK.js.map +1 -0
  132. package/dist/chunk-RCICHSHL.js +789 -0
  133. package/dist/chunk-RCICHSHL.js.map +1 -0
  134. package/dist/{chunk-HG2NKWR2.js → chunk-S4LX5EBI.js} +2 -2
  135. package/dist/{chunk-4A24LIM2.js → chunk-S75M5ZRK.js} +2 -2
  136. package/dist/{chunk-QCCCQT3O.js → chunk-TBBDFYXW.js} +2 -2
  137. package/dist/chunk-TBBDFYXW.js.map +1 -0
  138. package/dist/{chunk-U4PV25RD.js → chunk-U2IQTSBY.js} +1 -1
  139. package/dist/chunk-U2IQTSBY.js.map +1 -0
  140. package/dist/chunk-U66YHYC7.js +31 -0
  141. package/dist/chunk-U66YHYC7.js.map +1 -0
  142. package/dist/{chunk-MWGVGUIS.js → chunk-UEYA6UC7.js} +36 -4
  143. package/dist/chunk-UEYA6UC7.js.map +1 -0
  144. package/dist/{chunk-MDDAA2AO.js → chunk-UPMD5XND.js} +2 -2
  145. package/dist/{chunk-M5KEYE5E.js → chunk-URB2WSKZ.js} +2 -2
  146. package/dist/chunk-UVJFDP7P.js +202 -0
  147. package/dist/chunk-UVJFDP7P.js.map +1 -0
  148. package/dist/{chunk-QY2BHY5O.js → chunk-V7XCAHIB.js} +265 -25
  149. package/dist/chunk-V7XCAHIB.js.map +1 -0
  150. package/dist/chunk-W6SL7OFG.js +180 -0
  151. package/dist/chunk-W6SL7OFG.js.map +1 -0
  152. package/dist/{chunk-QDOSNLB4.js → chunk-X4WESCKA.js} +17 -15
  153. package/dist/chunk-X4WESCKA.js.map +1 -0
  154. package/dist/{chunk-OTFNI3OO.js → chunk-XMGSSBFX.js} +1738 -383
  155. package/dist/chunk-XMGSSBFX.js.map +1 -0
  156. package/dist/chunk-YDBIWGNI.js +298 -0
  157. package/dist/chunk-YDBIWGNI.js.map +1 -0
  158. package/dist/chunk-YFYL2SIJ.js +7857 -0
  159. package/dist/chunk-YFYL2SIJ.js.map +1 -0
  160. package/dist/chunking.js +1 -1
  161. package/dist/citations.d.ts +67 -0
  162. package/dist/citations.js +13 -0
  163. package/dist/citations.js.map +1 -0
  164. package/dist/cli-DwIBnp2g.d.ts +1240 -0
  165. package/dist/cli.d.ts +31 -1147
  166. package/dist/cli.js +149 -7092
  167. package/dist/cli.js.map +1 -1
  168. package/dist/codex-materialize-CQlLTzke.d.ts +139 -0
  169. package/dist/codex-thread-key.d.ts +3 -0
  170. package/dist/codex-thread-key.js +7 -0
  171. package/dist/codex-thread-key.js.map +1 -0
  172. package/dist/config.js +3 -2
  173. package/dist/connectors/codex/instructions.md +160 -0
  174. package/dist/connectors/codex/resources/namespace-cheatsheet.md +48 -0
  175. package/dist/day-summary.d.ts +7 -2
  176. package/dist/day-summary.js +5 -2
  177. package/dist/embedding-fallback.d.ts +96 -2
  178. package/dist/embedding-fallback.js +6 -4
  179. package/dist/{engine-2A6J4XEX.js → engine-X7X3AAG3.js} +10 -7
  180. package/dist/engine-X7X3AAG3.js.map +1 -0
  181. package/dist/entity-retrieval.d.ts +3 -2
  182. package/dist/entity-retrieval.js +10 -7
  183. package/dist/entity-schema.d.ts +11 -0
  184. package/dist/entity-schema.js +19 -0
  185. package/dist/entity-schema.js.map +1 -0
  186. package/dist/explicit-capture.d.ts +6 -3
  187. package/dist/explicit-capture.js +2 -2
  188. package/dist/extraction-judge.d.ts +66 -0
  189. package/dist/extraction-judge.js +18 -0
  190. package/dist/extraction-judge.js.map +1 -0
  191. package/dist/extraction.d.ts +1 -0
  192. package/dist/extraction.js +12 -10
  193. package/dist/fallback-llm.js +4 -4
  194. package/dist/graph.js +1 -1
  195. package/dist/importance.d.ts +11 -1
  196. package/dist/importance.js +3 -1
  197. package/dist/index.d.ts +1140 -8
  198. package/dist/index.js +3350 -333
  199. package/dist/index.js.map +1 -1
  200. package/dist/intent.d.ts +2 -1
  201. package/dist/intent.js +3 -1
  202. package/dist/lifecycle.js +1 -1
  203. package/dist/local-llm.js +2 -2
  204. package/dist/logger.d.ts +1 -1
  205. package/dist/logger.js +1 -1
  206. package/dist/memory-cache.d.ts +2 -2
  207. package/dist/memory-cache.js +1 -1
  208. package/dist/{memory-projection-store-NxMkbocT.d.ts → memory-projection-store-DeSXPh1j.d.ts} +1 -1
  209. package/dist/memory-projection-store.d.ts +1 -1
  210. package/dist/model-registry.js +2 -2
  211. package/dist/models-json.js +2 -2
  212. package/dist/native-knowledge.js +2 -2
  213. package/dist/negative.js +2 -2
  214. package/dist/operator-toolkit.js +20 -16
  215. package/dist/{orchestrator-CIvLFHx3.d.ts → orchestrator-B9kwlCep.d.ts} +254 -9
  216. package/dist/orchestrator.d.ts +6 -3
  217. package/dist/orchestrator.js +70 -58
  218. package/dist/page-versioning.d.ts +77 -0
  219. package/dist/page-versioning.js +15 -0
  220. package/dist/page-versioning.js.map +1 -0
  221. package/dist/plugin-id.d.ts +37 -0
  222. package/dist/plugin-id.js +11 -0
  223. package/dist/plugin-id.js.map +1 -0
  224. package/dist/policy-runtime.js +2 -2
  225. package/dist/profiling.js +2 -2
  226. package/dist/qmd.d.ts +5 -2
  227. package/dist/qmd.js +3 -3
  228. package/dist/recall-audit.d.ts +20 -0
  229. package/dist/recall-audit.js +50 -0
  230. package/dist/recall-audit.js.map +1 -0
  231. package/dist/recall-mmr.d.ts +152 -0
  232. package/dist/recall-mmr.js +17 -0
  233. package/dist/recall-mmr.js.map +1 -0
  234. package/dist/recall-qos.js +2 -2
  235. package/dist/recall-state.js +2 -2
  236. package/dist/relevance.js +2 -2
  237. package/dist/resolve-provider-secret.js +2 -2
  238. package/dist/resume-bundles.js +5 -4
  239. package/dist/retrieval-agents.js +2 -2
  240. package/dist/retrieval.js +2 -2
  241. package/dist/schemas.d.ts +422 -64
  242. package/dist/schemas.js +3 -1
  243. package/dist/sdk-compat.d.ts +2 -0
  244. package/dist/sdk-compat.js +6 -3
  245. package/dist/sdk-compat.js.map +1 -1
  246. package/dist/semantic-chunking.d.ts +87 -0
  247. package/dist/semantic-chunking.js +20 -0
  248. package/dist/semantic-chunking.js.map +1 -0
  249. package/dist/semantic-consolidation-DrvSYRdB.d.ts +119 -0
  250. package/dist/semantic-consolidation.d.ts +4 -42
  251. package/dist/semantic-consolidation.js +23 -2
  252. package/dist/semantic-rule-promotion.js +9 -6
  253. package/dist/semantic-rule-verifier.js +10 -7
  254. package/dist/session-observer-state.js +2 -2
  255. package/dist/session-toggles.d.ts +22 -0
  256. package/dist/session-toggles.js +116 -0
  257. package/dist/session-toggles.js.map +1 -0
  258. package/dist/skills-registry.d.ts +47 -0
  259. package/dist/skills-registry.js +48 -0
  260. package/dist/skills-registry.js.map +1 -0
  261. package/dist/source-attribution.d.ts +169 -0
  262. package/dist/source-attribution.js +27 -0
  263. package/dist/source-attribution.js.map +1 -0
  264. package/dist/storage.d.ts +171 -10
  265. package/dist/storage.js +16 -5
  266. package/dist/summarizer.js +7 -7
  267. package/dist/temporal-supersession.d.ts +127 -0
  268. package/dist/temporal-supersession.js +20 -0
  269. package/dist/temporal-supersession.js.map +1 -0
  270. package/dist/threading.js +2 -2
  271. package/dist/tier-migration.d.ts +2 -1
  272. package/dist/tier-routing.js +2 -2
  273. package/dist/tokens.d.ts +21 -1
  274. package/dist/tokens.js +5 -1
  275. package/dist/transcript.js +2 -2
  276. package/dist/types.d.ts +497 -3
  277. package/dist/types.js +1 -1
  278. package/dist/utility-learner.js +2 -2
  279. package/dist/utility-runtime.js +3 -3
  280. package/dist/verified-recall.js +11 -8
  281. package/dist/whitespace.d.ts +4 -0
  282. package/dist/whitespace.js +9 -0
  283. package/dist/whitespace.js.map +1 -0
  284. package/package.json +14 -8
  285. package/dist/chunk-2CJCWDMR.js +0 -87
  286. package/dist/chunk-2CJCWDMR.js.map +0 -1
  287. package/dist/chunk-2PO5ZRKV.js.map +0 -1
  288. package/dist/chunk-6UJQNRIO.js.map +0 -1
  289. package/dist/chunk-B7LOFDVE.js.map +0 -1
  290. package/dist/chunk-BDFZXRSO.js.map +0 -1
  291. package/dist/chunk-CXWFUJR2.js.map +0 -1
  292. package/dist/chunk-DORBM6OB.js +0 -81
  293. package/dist/chunk-DORBM6OB.js.map +0 -1
  294. package/dist/chunk-ESSMF2FR.js.map +0 -1
  295. package/dist/chunk-HLBYLYRD.js.map +0 -1
  296. package/dist/chunk-HLXVTBF3.js.map +0 -1
  297. package/dist/chunk-ISY75RLM.js.map +0 -1
  298. package/dist/chunk-KL4CP4SB.js.map +0 -1
  299. package/dist/chunk-KWBU5S5U.js.map +0 -1
  300. package/dist/chunk-MWGVGUIS.js.map +0 -1
  301. package/dist/chunk-ORZMT74A.js.map +0 -1
  302. package/dist/chunk-OTFNI3OO.js.map +0 -1
  303. package/dist/chunk-PGK3VUHN.js.map +0 -1
  304. package/dist/chunk-QCCCQT3O.js.map +0 -1
  305. package/dist/chunk-QDOSNLB4.js.map +0 -1
  306. package/dist/chunk-QPKFPHOO.js +0 -178
  307. package/dist/chunk-QPKFPHOO.js.map +0 -1
  308. package/dist/chunk-QWUUMMIK.js.map +0 -1
  309. package/dist/chunk-QY2BHY5O.js.map +0 -1
  310. package/dist/chunk-TVVVQQAK.js.map +0 -1
  311. package/dist/chunk-U4PV25RD.js.map +0 -1
  312. package/dist/chunk-UYSKNO6E.js.map +0 -1
  313. package/dist/chunk-V4YC4LUK.js.map +0 -1
  314. package/dist/chunk-WWIQTB2Y.js.map +0 -1
  315. package/dist/chunk-YNCQ7E4M.js.map +0 -1
  316. package/dist/chunk-ZJLY4QSU.js.map +0 -1
  317. /package/dist/{engine-2A6J4XEX.js.map → active-memory-bridge.js.map} +0 -0
  318. /package/dist/{chunk-NTTLPF7F.js.map → chunk-3QFQGRHO.js.map} +0 -0
  319. /package/dist/{chunk-G3AG3KZN.js.map → chunk-5IZL4DCV.js.map} +0 -0
  320. /package/dist/{chunk-BRK4ODMI.js.map → chunk-5NPGSAVB.js.map} +0 -0
  321. /package/dist/{chunk-L5RPWGFK.js.map → chunk-7DHTMOND.js.map} +0 -0
  322. /package/dist/{chunk-Q6FETXJA.js.map → chunk-7SEAZFFB.js.map} +0 -0
  323. /package/dist/{chunk-QANCTXQF.js.map → chunk-AYPYCLR7.js.map} +0 -0
  324. /package/dist/{chunk-LP47L3ZX.js.map → chunk-BTY5RRRF.js.map} +0 -0
  325. /package/dist/{chunk-SCHEKPYH.js.map → chunk-C2EFFULQ.js.map} +0 -0
  326. /package/dist/{chunk-GJR6D6KC.js.map → chunk-D654IBA6.js.map} +0 -0
  327. /package/dist/{chunk-UV2FO7J4.js.map → chunk-E6K4NIEU.js.map} +0 -0
  328. /package/dist/{chunk-T4WRIV2C.js.map → chunk-EABGC2TL.js.map} +0 -0
  329. /package/dist/{chunk-ONRU4L2N.js.map → chunk-FEMOX5AD.js.map} +0 -0
  330. /package/dist/{chunk-IFFFR3MR.js.map → chunk-FSFEQI74.js.map} +0 -0
  331. /package/dist/{chunk-UIYZ5T3I.js.map → chunk-GJQPH5G3.js.map} +0 -0
  332. /package/dist/{chunk-ZKYI7UVO.js.map → chunk-JR4ZC3G4.js.map} +0 -0
  333. /package/dist/{chunk-UCYSTFZR.js.map → chunk-JRNQ3RNA.js.map} +0 -0
  334. /package/dist/{chunk-GPGBSNKM.js.map → chunk-K4FLSOR5.js.map} +0 -0
  335. /package/dist/{chunk-M5ZBBBJI.js.map → chunk-KEG4GNGI.js.map} +0 -0
  336. /package/dist/{chunk-L7WO3MZ4.js.map → chunk-KWP7T3DP.js.map} +0 -0
  337. /package/dist/{chunk-J47FNDR7.js.map → chunk-MYQWXITD.js.map} +0 -0
  338. /package/dist/{chunk-YNI4S5WT.js.map → chunk-N53K2EXC.js.map} +0 -0
  339. /package/dist/{chunk-763GUIOU.js.map → chunk-NBNN5GOB.js.map} +0 -0
  340. /package/dist/{chunk-OOSWAUYB.js.map → chunk-ODWDQNRE.js.map} +0 -0
  341. /package/dist/{chunk-J3BT33K7.js.map → chunk-POBPGDWI.js.map} +0 -0
  342. /package/dist/{chunk-OTAVQCSF.js.map → chunk-PYXS46O7.js.map} +0 -0
  343. /package/dist/{chunk-XUHI52HK.js.map → chunk-QKAH5B6E.js.map} +0 -0
  344. /package/dist/{chunk-HG2NKWR2.js.map → chunk-S4LX5EBI.js.map} +0 -0
  345. /package/dist/{chunk-4A24LIM2.js.map → chunk-S75M5ZRK.js.map} +0 -0
  346. /package/dist/{chunk-MDDAA2AO.js.map → chunk-UPMD5XND.js.map} +0 -0
  347. /package/dist/{chunk-M5KEYE5E.js.map → chunk-URB2WSKZ.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import path from \"node:path\";\nimport type {\n IdentityInjectionMode,\n MemoryOsPresetName,\n PluginConfig,\n PrincipalRule,\n RecallPipelineConfig,\n RecallSectionConfig,\n ReasoningEffort,\n SessionObserverBandConfig,\n TriggerMode,\n} from \"./types.js\";\nimport { log } from \"./logger.js\";\nimport { cloneDefaultSessionObserverBands } from \"./session-observer-bands.js\";\nimport { readEnvVar, resolveHomeDir } from \"./runtime/env.js\";\n\nconst DEFAULT_MEMORY_DIR = path.join(\n resolveHomeDir(),\n \".openclaw\",\n \"workspace\",\n \"memory\",\n \"local\",\n);\n\nconst DEFAULT_WORKSPACE_DIR = path.join(\n resolveHomeDir(),\n \".openclaw\",\n \"workspace\",\n);\n\nfunction resolveEnvVars(value: string): string {\n const resolved = value.replace(/\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g, (_, envVar: string) => {\n const envValue = readEnvVar(envVar);\n if (!envValue) {\n throw new Error(`Environment variable ${envVar} is not set`);\n }\n return envValue;\n });\n const remaining = resolved.match(/\\$\\{[^}]*\\}/);\n if (remaining) {\n throw new Error(`Malformed environment variable placeholder: ${remaining[0]}`);\n }\n return resolved;\n}\n\nfunction normalizeOpenaiBaseUrl(value: string | undefined, source: \"config\" | \"env\"): string | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (trimmed.length === 0) return undefined;\n\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n log.warn(`ignoring invalid openaiBaseUrl from ${source}: not a valid URL`);\n return undefined;\n }\n\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n log.warn(\n `ignoring openaiBaseUrl from ${source}: unsupported URL scheme (${parsed.protocol.replace(\":\", \"\")})`,\n );\n return undefined;\n }\n\n if (parsed.protocol === \"http:\") {\n log.warn(`openaiBaseUrl from ${source} is using insecure http; prefer https`);\n }\n\n // Avoid duplicate slash behavior in downstream baseURL path joins.\n let url = parsed.toString();\n while (url.endsWith(\"/\")) url = url.slice(0, -1);\n return url;\n}\n\nfunction normalizeMemoryRelativeDir(raw: unknown, fallback: string): string {\n if (typeof raw !== \"string\") return fallback;\n const trimmed = raw.trim();\n if (trimmed.length === 0) return fallback;\n\n const normalized = trimmed\n .replace(/\\\\/g, \"/\")\n .split(\"/\")\n .filter((segment) => segment.length > 0 && segment !== \".\" && segment !== \"..\")\n .join(\"/\");\n return normalized.length > 0 ? normalized : fallback;\n}\n\nconst VALID_EFFORTS: ReasoningEffort[] = [\"none\", \"low\", \"medium\", \"high\"];\nconst VALID_TRIGGERS: TriggerMode[] = [\"smart\", \"every_n\", \"time_based\"];\nconst VALID_IDENTITY_INJECTION_MODES: IdentityInjectionMode[] = [\"recovery_only\", \"minimal\", \"full\"];\nconst VALID_MEMORY_OS_PRESETS: MemoryOsPresetName[] = [\n \"conservative\",\n \"balanced\",\n \"research-max\",\n \"local-llm-heavy\",\n];\nexport const VALID_MEMORY_CATEGORIES = new Set([\n \"fact\",\n \"preference\",\n \"correction\",\n \"entity\",\n \"decision\",\n \"relationship\",\n \"principle\",\n \"commitment\",\n \"moment\",\n \"skill\",\n \"rule\",\n]);\n\nconst DEFAULT_BEHAVIOR_LOOP_PROTECTED_PARAMS = [\n \"maxMemoryTokens\",\n \"qmdMaxResults\",\n \"qmdColdMaxResults\",\n \"recallPlannerMaxQmdResultsMinimal\",\n \"verbatimArtifactsMaxRecall\",\n];\n\nconst MEMORY_OS_PRESET_ALIASES: Record<string, MemoryOsPresetName> = {\n research: \"research-max\",\n};\n\nconst MEMORY_OS_PRESETS: Record<MemoryOsPresetName, Record<string, unknown>> = {\n conservative: {\n maxMemoryTokens: 1500,\n recallPlannerMaxQmdResultsMinimal: 2,\n recallPlannerMaxQmdResultsFull: 5,\n queryAwareIndexingEnabled: false,\n verbatimArtifactsEnabled: false,\n verbatimArtifactsMaxRecall: 2,\n rerankEnabled: false,\n localLlmEnabled: false,\n localLlmFastEnabled: false,\n multiGraphMemoryEnabled: false,\n graphRecallEnabled: false,\n graphAssistInFullModeEnabled: false,\n proactiveExtractionEnabled: false,\n contextCompressionActionsEnabled: false,\n compressionGuidelineLearningEnabled: false,\n compressionGuidelineSemanticRefinementEnabled: false,\n maxProactiveQuestionsPerExtraction: 0,\n maxCompressionTokensPerHour: 0,\n behaviorLoopAutoTuneEnabled: false,\n },\n balanced: {\n maxMemoryTokens: 2000,\n recallPlannerMaxQmdResultsMinimal: 4,\n recallPlannerMaxQmdResultsFull: 8,\n queryAwareIndexingEnabled: true,\n verbatimArtifactsEnabled: true,\n verbatimArtifactsMaxRecall: 4,\n rerankEnabled: true,\n rerankProvider: \"local\",\n localLlmEnabled: false,\n localLlmFastEnabled: false,\n multiGraphMemoryEnabled: false,\n graphRecallEnabled: false,\n graphAssistInFullModeEnabled: false,\n proactiveExtractionEnabled: false,\n contextCompressionActionsEnabled: false,\n compressionGuidelineLearningEnabled: false,\n compressionGuidelineSemanticRefinementEnabled: false,\n maxProactiveQuestionsPerExtraction: 2,\n maxCompressionTokensPerHour: 1500,\n behaviorLoopAutoTuneEnabled: false,\n },\n \"research-max\": {\n maxMemoryTokens: 3200,\n recallPlannerMaxQmdResultsMinimal: 6,\n recallPlannerMaxQmdResultsFull: 12,\n queryAwareIndexingEnabled: true,\n verbatimArtifactsEnabled: true,\n verbatimArtifactsMaxRecall: 6,\n rerankEnabled: true,\n rerankProvider: \"local\",\n localLlmEnabled: false,\n localLlmFastEnabled: false,\n multiGraphMemoryEnabled: true,\n graphRecallEnabled: true,\n graphAssistInFullModeEnabled: true,\n proactiveExtractionEnabled: true,\n contextCompressionActionsEnabled: true,\n compressionGuidelineLearningEnabled: true,\n compressionGuidelineSemanticRefinementEnabled: true,\n maxProactiveQuestionsPerExtraction: 4,\n maxCompressionTokensPerHour: 3000,\n behaviorLoopAutoTuneEnabled: true,\n },\n \"local-llm-heavy\": {\n maxMemoryTokens: 2400,\n recallPlannerMaxQmdResultsMinimal: 4,\n recallPlannerMaxQmdResultsFull: 8,\n queryAwareIndexingEnabled: true,\n verbatimArtifactsEnabled: true,\n verbatimArtifactsMaxRecall: 4,\n rerankEnabled: true,\n rerankProvider: \"local\",\n localLlmEnabled: true,\n localLlmFastEnabled: true,\n embeddingFallbackProvider: \"local\",\n localLlmFallback: true,\n multiGraphMemoryEnabled: false,\n graphRecallEnabled: false,\n graphAssistInFullModeEnabled: false,\n proactiveExtractionEnabled: true,\n contextCompressionActionsEnabled: true,\n compressionGuidelineLearningEnabled: true,\n compressionGuidelineSemanticRefinementEnabled: false,\n maxProactiveQuestionsPerExtraction: 2,\n maxCompressionTokensPerHour: 1500,\n behaviorLoopAutoTuneEnabled: false,\n },\n};\n\nfunction resolveMemoryOsPreset(value: unknown): MemoryOsPresetName | undefined {\n if (typeof value !== \"string\") return undefined;\n const normalized = value.trim();\n if (VALID_MEMORY_OS_PRESETS.includes(normalized as MemoryOsPresetName)) {\n return normalized as MemoryOsPresetName;\n }\n return MEMORY_OS_PRESET_ALIASES[normalized];\n}\n\nexport function parseConfig(raw: unknown): PluginConfig {\n const baseCfg =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : {};\n const memoryOsPreset = resolveMemoryOsPreset(baseCfg.memoryOsPreset);\n const cfg = memoryOsPreset\n ? {\n ...MEMORY_OS_PRESETS[memoryOsPreset],\n ...baseCfg,\n memoryOsPreset,\n }\n : baseCfg;\n\n let apiKey: string | undefined;\n if (typeof cfg.openaiApiKey === \"string\" && cfg.openaiApiKey.length > 0) {\n apiKey = resolveEnvVars(cfg.openaiApiKey);\n } else {\n apiKey = process.env.OPENAI_API_KEY;\n }\n\n // API key is optional at load time — retrieval works without it.\n // Extraction will log a warning if called without a key.\n\n const model =\n typeof cfg.model === \"string\" && cfg.model.length > 0\n ? cfg.model\n : \"gpt-5.2\";\n const captureMode =\n cfg.captureMode === \"explicit\" || cfg.captureMode === \"hybrid\"\n ? cfg.captureMode\n : \"implicit\";\n\n const rawEffort = cfg.reasoningEffort as string | undefined;\n const reasoningEffort: ReasoningEffort =\n rawEffort && VALID_EFFORTS.includes(rawEffort as ReasoningEffort)\n ? (rawEffort as ReasoningEffort)\n : \"low\";\n\n const rawTrigger = cfg.triggerMode as string | undefined;\n const triggerMode: TriggerMode =\n rawTrigger && VALID_TRIGGERS.includes(rawTrigger as TriggerMode)\n ? (rawTrigger as TriggerMode)\n : \"smart\";\n\n const memoryDir =\n typeof cfg.memoryDir === \"string\" && cfg.memoryDir.length > 0\n ? cfg.memoryDir\n : DEFAULT_MEMORY_DIR;\n const rawIdentityInjectionMode = cfg.identityInjectionMode as string | undefined;\n const identityInjectionMode: IdentityInjectionMode =\n rawIdentityInjectionMode\n && VALID_IDENTITY_INJECTION_MODES.includes(rawIdentityInjectionMode as IdentityInjectionMode)\n ? (rawIdentityInjectionMode as IdentityInjectionMode)\n : \"recovery_only\";\n const identityContinuityEnabled = cfg.identityContinuityEnabled === true;\n const sessionObserverBands: SessionObserverBandConfig[] = Array.isArray(cfg.sessionObserverBands)\n ? (cfg.sessionObserverBands as Array<Record<string, unknown>>)\n .map((band) => ({\n maxBytes:\n typeof band?.maxBytes === \"number\" ? Math.max(0, Math.floor(band.maxBytes)) : 0,\n triggerDeltaBytes:\n typeof band?.triggerDeltaBytes === \"number\"\n ? Math.max(0, Math.floor(band.triggerDeltaBytes))\n : 0,\n triggerDeltaTokens:\n typeof band?.triggerDeltaTokens === \"number\"\n ? Math.max(0, Math.floor(band.triggerDeltaTokens))\n : 0,\n }))\n .filter((band) => band.maxBytes > 0)\n : cloneDefaultSessionObserverBands();\n\n const principalRules: PrincipalRule[] = Array.isArray(cfg.principalFromSessionKeyRules)\n ? (cfg.principalFromSessionKeyRules as any[]).map((r) => ({\n match: typeof r?.match === \"string\" ? r.match : \"\",\n principal: typeof r?.principal === \"string\" ? r.principal : \"\",\n })).filter((r) => r.match.length > 0 && r.principal.length > 0)\n : [];\n\n // Optional file hygiene (memory file limits / truncation risk mitigation)\n const rawHygiene =\n cfg.fileHygiene && typeof cfg.fileHygiene === \"object\" && !Array.isArray(cfg.fileHygiene)\n ? (cfg.fileHygiene as Record<string, unknown>)\n : undefined;\n const hygieneEnabled = rawHygiene?.enabled === true;\n const fileHygiene = hygieneEnabled\n ? {\n enabled: true,\n lintEnabled: rawHygiene?.lintEnabled !== false,\n lintBudgetBytes:\n typeof rawHygiene?.lintBudgetBytes === \"number\" ? rawHygiene.lintBudgetBytes : 20_000,\n lintWarnRatio:\n typeof rawHygiene?.lintWarnRatio === \"number\" ? rawHygiene.lintWarnRatio : 0.8,\n lintPaths: Array.isArray(rawHygiene?.lintPaths)\n ? (rawHygiene!.lintPaths as string[])\n : [\"IDENTITY.md\", \"MEMORY.md\"],\n rotateEnabled: rawHygiene?.rotateEnabled === true,\n rotateMaxBytes:\n typeof rawHygiene?.rotateMaxBytes === \"number\" ? rawHygiene.rotateMaxBytes : 18_000,\n rotateKeepTailChars:\n typeof rawHygiene?.rotateKeepTailChars === \"number\"\n ? rawHygiene.rotateKeepTailChars\n : 2000,\n rotatePaths: Array.isArray(rawHygiene?.rotatePaths)\n ? (rawHygiene!.rotatePaths as string[])\n : [\"IDENTITY.md\"],\n archiveDir:\n typeof rawHygiene?.archiveDir === \"string\" && rawHygiene.archiveDir.length > 0\n ? (rawHygiene.archiveDir as string)\n : \".engram-archive\",\n runMinIntervalMs:\n typeof rawHygiene?.runMinIntervalMs === \"number\" ? rawHygiene.runMinIntervalMs : 5 * 60 * 1000,\n warningsLogEnabled: rawHygiene?.warningsLogEnabled === true,\n warningsLogPath:\n typeof rawHygiene?.warningsLogPath === \"string\" && rawHygiene.warningsLogPath.length > 0\n ? (rawHygiene.warningsLogPath as string)\n : \"hygiene/warnings.md\",\n indexEnabled: rawHygiene?.indexEnabled === true,\n indexPath:\n typeof rawHygiene?.indexPath === \"string\" && rawHygiene.indexPath.length > 0\n ? (rawHygiene.indexPath as string)\n : \"ENGRAM_INDEX.md\",\n }\n : undefined;\n\n const rawNativeKnowledge =\n cfg.nativeKnowledge && typeof cfg.nativeKnowledge === \"object\" && !Array.isArray(cfg.nativeKnowledge)\n ? (cfg.nativeKnowledge as Record<string, unknown>)\n : undefined;\n const nativeKnowledge = rawNativeKnowledge?.enabled === true\n ? {\n enabled: true,\n includeFiles: Array.isArray(rawNativeKnowledge.includeFiles)\n ? (rawNativeKnowledge.includeFiles as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\"IDENTITY.md\", \"MEMORY.md\"],\n maxChunkChars:\n typeof rawNativeKnowledge.maxChunkChars === \"number\"\n ? Math.max(200, Math.floor(rawNativeKnowledge.maxChunkChars))\n : 900,\n maxResults:\n typeof rawNativeKnowledge.maxResults === \"number\"\n ? Math.max(0, Math.floor(rawNativeKnowledge.maxResults))\n : 4,\n maxChars:\n typeof rawNativeKnowledge.maxChars === \"number\"\n ? Math.max(0, Math.floor(rawNativeKnowledge.maxChars))\n : 2400,\n stateDir:\n normalizeMemoryRelativeDir(rawNativeKnowledge.stateDir, \"state/native-knowledge\"),\n openclawWorkspace:\n rawNativeKnowledge.openclawWorkspace &&\n typeof rawNativeKnowledge.openclawWorkspace === \"object\" &&\n !Array.isArray(rawNativeKnowledge.openclawWorkspace) &&\n (rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).enabled === true\n ? {\n enabled: true,\n bootstrapFiles: Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).bootstrapFiles)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).bootstrapFiles as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\"IDENTITY.md\", \"MEMORY.md\", \"USER.md\"],\n handoffGlobs: Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).handoffGlobs)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).handoffGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\"**/*handoff*.md\", \"handoffs/**/*.md\"],\n dailySummaryGlobs: Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).dailySummaryGlobs)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).dailySummaryGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\"**/*daily*summary*.md\", \"summaries/**/*.md\"],\n automationNoteGlobs: Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).automationNoteGlobs)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).automationNoteGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [],\n workspaceDocGlobs: Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).workspaceDocGlobs)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).workspaceDocGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [],\n excludeGlobs: [\n \".git/**\",\n \"node_modules/**\",\n \"dist/**\",\n \"build/**\",\n \"coverage/**\",\n \"**/*.log\",\n \"**/.env*\",\n \"**/*.pem\",\n \"**/*.key\",\n ...(Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).excludeGlobs)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).excludeGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : []),\n ].filter((value, index, array) => array.indexOf(value) === index),\n sharedSafeGlobs: Array.isArray((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).sharedSafeGlobs)\n ? ((rawNativeKnowledge.openclawWorkspace as Record<string, unknown>).sharedSafeGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [],\n }\n : undefined,\n obsidianVaults: Array.isArray(rawNativeKnowledge.obsidianVaults)\n ? (rawNativeKnowledge.obsidianVaults as unknown[])\n .filter((value): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value))\n .map((vault, index) => {\n const defaultId = `vault-${index + 1}`;\n return {\n id:\n typeof vault.id === \"string\" && vault.id.trim().length > 0\n ? vault.id.trim()\n : defaultId,\n rootDir:\n typeof vault.rootDir === \"string\" && vault.rootDir.trim().length > 0\n ? vault.rootDir.trim()\n : \"\",\n includeGlobs: Array.isArray(vault.includeGlobs)\n ? (vault.includeGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\"**/*.md\"],\n excludeGlobs: Array.isArray(vault.excludeGlobs)\n ? (vault.excludeGlobs as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\".obsidian/**\", \"**/*.canvas\", \"**/*.png\", \"**/*.jpg\", \"**/*.jpeg\", \"**/*.gif\", \"**/*.pdf\"],\n namespace:\n typeof vault.namespace === \"string\" && vault.namespace.trim().length > 0\n ? vault.namespace.trim()\n : undefined,\n privacyClass:\n typeof vault.privacyClass === \"string\" && vault.privacyClass.trim().length > 0\n ? vault.privacyClass.trim()\n : undefined,\n folderRules: Array.isArray(vault.folderRules)\n ? (vault.folderRules as unknown[])\n .filter((value): value is Record<string, unknown> => !!value && typeof value === \"object\" && !Array.isArray(value))\n .map((rule) => ({\n pathPrefix:\n typeof rule.pathPrefix === \"string\" && rule.pathPrefix.trim().length > 0\n ? rule.pathPrefix.trim()\n : \"\",\n namespace:\n typeof rule.namespace === \"string\" && rule.namespace.trim().length > 0\n ? rule.namespace.trim()\n : undefined,\n privacyClass:\n typeof rule.privacyClass === \"string\" && rule.privacyClass.trim().length > 0\n ? rule.privacyClass.trim()\n : undefined,\n }))\n .filter((rule) => rule.pathPrefix.length > 0)\n : [],\n dailyNotePatterns: Array.isArray(vault.dailyNotePatterns)\n ? (vault.dailyNotePatterns as unknown[])\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim())\n .filter(Boolean)\n : [\"YYYY-MM-DD\"],\n materializeBacklinks: vault.materializeBacklinks === true,\n };\n })\n .filter((vault) => vault.rootDir.length > 0)\n : [],\n }\n : undefined;\n\n const rawAgentAccessHttp =\n cfg.agentAccessHttp && typeof cfg.agentAccessHttp === \"object\" && !Array.isArray(cfg.agentAccessHttp)\n ? (cfg.agentAccessHttp as Record<string, unknown>)\n : undefined;\n const agentAccessHttp = {\n enabled: rawAgentAccessHttp?.enabled === true,\n host:\n typeof rawAgentAccessHttp?.host === \"string\" && rawAgentAccessHttp.host.trim().length > 0\n ? rawAgentAccessHttp.host.trim()\n : \"127.0.0.1\",\n port:\n typeof rawAgentAccessHttp?.port === \"number\"\n ? Math.max(0, Math.floor(rawAgentAccessHttp.port))\n : 4318,\n authToken:\n typeof rawAgentAccessHttp?.authToken === \"string\" && rawAgentAccessHttp.authToken.trim().length > 0\n ? resolveEnvVars(rawAgentAccessHttp.authToken)\n : process.env.OPENCLAW_REMNIC_ACCESS_TOKEN ?? process.env.OPENCLAW_ENGRAM_ACCESS_TOKEN,\n principal:\n typeof rawAgentAccessHttp?.principal === \"string\" && rawAgentAccessHttp.principal.trim().length > 0\n ? resolveEnvVars(rawAgentAccessHttp.principal)\n : process.env.OPENCLAW_ENGRAM_ACCESS_PRINCIPAL?.trim() || undefined,\n maxBodyBytes:\n typeof rawAgentAccessHttp?.maxBodyBytes === \"number\"\n ? Math.max(1, Math.floor(rawAgentAccessHttp.maxBodyBytes))\n : 131072,\n };\n\n let baseUrl: string | undefined;\n if (typeof cfg.openaiBaseUrl === \"string\" && cfg.openaiBaseUrl.length > 0) {\n baseUrl = normalizeOpenaiBaseUrl(resolveEnvVars(cfg.openaiBaseUrl), \"config\");\n } else {\n baseUrl = normalizeOpenaiBaseUrl(process.env.OPENAI_BASE_URL, \"env\");\n }\n\n const sharedCrossSignalSemanticEnabled =\n cfg.sharedCrossSignalSemanticEnabled === true || cfg.crossSignalsSemanticEnabled === true;\n const sharedCrossSignalSemanticTimeoutMs =\n typeof cfg.sharedCrossSignalSemanticTimeoutMs === \"number\"\n ? Math.max(1, Math.floor(cfg.sharedCrossSignalSemanticTimeoutMs))\n : typeof cfg.crossSignalsSemanticTimeoutMs === \"number\"\n ? Math.max(1, Math.floor(cfg.crossSignalsSemanticTimeoutMs))\n : 4000;\n const recallPipelineConfig = buildRecallPipelineConfig(cfg);\n\n return {\n openaiApiKey: apiKey,\n openaiBaseUrl: baseUrl,\n model,\n reasoningEffort,\n triggerMode,\n bufferMaxTurns:\n typeof cfg.bufferMaxTurns === \"number\" ? cfg.bufferMaxTurns : 5,\n bufferMaxMinutes:\n typeof cfg.bufferMaxMinutes === \"number\" ? cfg.bufferMaxMinutes : 15,\n consolidateEveryN:\n typeof cfg.consolidateEveryN === \"number\" ? cfg.consolidateEveryN : 3,\n highSignalPatterns: Array.isArray(cfg.highSignalPatterns)\n ? (cfg.highSignalPatterns as string[])\n : [],\n maxMemoryTokens:\n typeof cfg.maxMemoryTokens === \"number\" ? cfg.maxMemoryTokens : 2000,\n memoryOsPreset,\n qmdEnabled: cfg.qmdEnabled !== false,\n qmdCollection:\n typeof cfg.qmdCollection === \"string\"\n ? cfg.qmdCollection\n : \"openclaw-engram\",\n qmdMaxResults:\n typeof cfg.qmdMaxResults === \"number\" ? cfg.qmdMaxResults : 8,\n qmdColdTierEnabled: cfg.qmdColdTierEnabled === true,\n qmdColdCollection:\n typeof cfg.qmdColdCollection === \"string\" && cfg.qmdColdCollection.length > 0\n ? cfg.qmdColdCollection\n : \"openclaw-engram-cold\",\n qmdColdMaxResults:\n typeof cfg.qmdColdMaxResults === \"number\" ? cfg.qmdColdMaxResults : 8,\n qmdTierMigrationEnabled: cfg.qmdTierMigrationEnabled === true,\n qmdTierDemotionMinAgeDays:\n typeof cfg.qmdTierDemotionMinAgeDays === \"number\"\n ? Math.max(0, Math.floor(cfg.qmdTierDemotionMinAgeDays))\n : 14,\n qmdTierDemotionValueThreshold:\n typeof cfg.qmdTierDemotionValueThreshold === \"number\"\n ? Math.max(0, Math.min(1, cfg.qmdTierDemotionValueThreshold))\n : 0.35,\n qmdTierPromotionValueThreshold:\n typeof cfg.qmdTierPromotionValueThreshold === \"number\"\n ? Math.max(0, Math.min(1, cfg.qmdTierPromotionValueThreshold))\n : 0.7,\n qmdTierParityGraphEnabled: cfg.qmdTierParityGraphEnabled !== false,\n qmdTierParityHiMemEnabled: cfg.qmdTierParityHiMemEnabled !== false,\n qmdTierAutoBackfillEnabled: cfg.qmdTierAutoBackfillEnabled === true,\n embeddingFallbackEnabled: cfg.embeddingFallbackEnabled !== false,\n embeddingFallbackProvider:\n cfg.embeddingFallbackProvider === \"openai\"\n ? \"openai\"\n : cfg.embeddingFallbackProvider === \"local\"\n ? \"local\"\n : \"auto\",\n qmdPath:\n typeof cfg.qmdPath === \"string\" && cfg.qmdPath.length > 0\n ? cfg.qmdPath\n : undefined,\n memoryDir,\n debug: cfg.debug === true,\n identityEnabled: cfg.identityEnabled !== false,\n identityContinuityEnabled,\n identityInjectionMode,\n identityMaxInjectChars:\n typeof cfg.identityMaxInjectChars === \"number\"\n ? Math.max(0, Math.floor(cfg.identityMaxInjectChars))\n : 1200,\n continuityIncidentLoggingEnabled:\n typeof cfg.continuityIncidentLoggingEnabled === \"boolean\"\n ? cfg.continuityIncidentLoggingEnabled\n : identityContinuityEnabled,\n continuityAuditEnabled: cfg.continuityAuditEnabled === true,\n sessionObserverEnabled: cfg.sessionObserverEnabled === true,\n sessionObserverDebounceMs:\n typeof cfg.sessionObserverDebounceMs === \"number\"\n ? Math.max(0, Math.floor(cfg.sessionObserverDebounceMs))\n : 120_000,\n sessionObserverBands,\n injectQuestions: cfg.injectQuestions === true,\n commitmentDecayDays:\n typeof cfg.commitmentDecayDays === \"number\" ? cfg.commitmentDecayDays : 90,\n workspaceDir:\n typeof cfg.workspaceDir === \"string\" && cfg.workspaceDir.length > 0\n ? cfg.workspaceDir\n : DEFAULT_WORKSPACE_DIR,\n captureMode,\n fileHygiene,\n nativeKnowledge,\n agentAccessHttp,\n // Access tracking (Phase 1A)\n accessTrackingEnabled: cfg.accessTrackingEnabled !== false,\n accessTrackingBufferMaxSize:\n typeof cfg.accessTrackingBufferMaxSize === \"number\"\n ? cfg.accessTrackingBufferMaxSize\n : 100,\n // Retrieval options\n recencyWeight:\n typeof cfg.recencyWeight === \"number\" ? cfg.recencyWeight : 0.2,\n boostAccessCount: cfg.boostAccessCount !== false,\n recordEmptyRecallImpressions: cfg.recordEmptyRecallImpressions === true,\n // v2.2 Advanced Retrieval (safe defaults: off unless enabled)\n queryExpansionEnabled: cfg.queryExpansionEnabled === true,\n queryExpansionMaxQueries:\n typeof cfg.queryExpansionMaxQueries === \"number\"\n ? cfg.queryExpansionMaxQueries\n : 4,\n queryExpansionMinTokenLen:\n typeof cfg.queryExpansionMinTokenLen === \"number\"\n ? cfg.queryExpansionMinTokenLen\n : 3,\n rerankEnabled: cfg.rerankEnabled === true,\n rerankProvider:\n cfg.rerankProvider === \"cloud\" ? \"cloud\" : \"local\",\n rerankMaxCandidates:\n typeof cfg.rerankMaxCandidates === \"number\" ? cfg.rerankMaxCandidates : 20,\n rerankTimeoutMs:\n typeof cfg.rerankTimeoutMs === \"number\" ? cfg.rerankTimeoutMs : 8000,\n rerankCacheEnabled: cfg.rerankCacheEnabled !== false,\n rerankCacheTtlMs:\n typeof cfg.rerankCacheTtlMs === \"number\" ? cfg.rerankCacheTtlMs : 60 * 60 * 1000,\n feedbackEnabled: cfg.feedbackEnabled === true,\n // v2.2 Negative Examples (safe defaults: off unless enabled)\n negativeExamplesEnabled: cfg.negativeExamplesEnabled === true,\n negativeExamplesPenaltyPerHit:\n typeof cfg.negativeExamplesPenaltyPerHit === \"number\"\n ? cfg.negativeExamplesPenaltyPerHit\n : 0.05,\n negativeExamplesPenaltyCap:\n typeof cfg.negativeExamplesPenaltyCap === \"number\"\n ? cfg.negativeExamplesPenaltyCap\n : 0.25,\n // Chunking (Phase 2A)\n chunkingEnabled: cfg.chunkingEnabled === true, // Off by default initially\n chunkingTargetTokens:\n typeof cfg.chunkingTargetTokens === \"number\" ? cfg.chunkingTargetTokens : 200,\n chunkingMinTokens:\n typeof cfg.chunkingMinTokens === \"number\" ? cfg.chunkingMinTokens : 150,\n chunkingOverlapSentences:\n typeof cfg.chunkingOverlapSentences === \"number\" ? cfg.chunkingOverlapSentences : 2,\n // Contradiction Detection (Phase 2B)\n contradictionDetectionEnabled: cfg.contradictionDetectionEnabled === true, // Off by default initially\n contradictionSimilarityThreshold:\n typeof cfg.contradictionSimilarityThreshold === \"number\" ? cfg.contradictionSimilarityThreshold : 0.7,\n contradictionMinConfidence:\n typeof cfg.contradictionMinConfidence === \"number\" ? cfg.contradictionMinConfidence : 0.9,\n contradictionAutoResolve: cfg.contradictionAutoResolve !== false,\n // Memory Linking (Phase 3A)\n memoryLinkingEnabled: cfg.memoryLinkingEnabled === true, // Off by default initially\n // Conversation Threading (Phase 3B)\n threadingEnabled: cfg.threadingEnabled === true, // Off by default initially\n threadingGapMinutes:\n typeof cfg.threadingGapMinutes === \"number\" ? cfg.threadingGapMinutes : 30,\n // Memory Summarization (Phase 4A)\n summarizationEnabled: cfg.summarizationEnabled === true, // Off by default\n summarizationTriggerCount:\n typeof cfg.summarizationTriggerCount === \"number\" ? cfg.summarizationTriggerCount : 1000,\n summarizationRecentToKeep:\n typeof cfg.summarizationRecentToKeep === \"number\" ? cfg.summarizationRecentToKeep : 300,\n summarizationImportanceThreshold:\n typeof cfg.summarizationImportanceThreshold === \"number\" ? cfg.summarizationImportanceThreshold : 0.3,\n summarizationProtectedTags: Array.isArray(cfg.summarizationProtectedTags)\n ? (cfg.summarizationProtectedTags as string[])\n : [\"commitment\", \"preference\", \"decision\", \"principle\"],\n // Topic Extraction (Phase 4B)\n topicExtractionEnabled: cfg.topicExtractionEnabled !== false, // On by default\n topicExtractionTopN:\n typeof cfg.topicExtractionTopN === \"number\" ? cfg.topicExtractionTopN : 50,\n // Transcript & Context Preservation (v2.0)\n // Transcript archive\n transcriptEnabled: cfg.transcriptEnabled !== false, // default: true\n transcriptRetentionDays:\n typeof cfg.transcriptRetentionDays === \"number\" ? cfg.transcriptRetentionDays : 7,\n transcriptSkipChannelTypes: Array.isArray(cfg.transcriptSkipChannelTypes)\n ? (cfg.transcriptSkipChannelTypes as string[])\n : [\"cron\"], // default: skip cron transcripts\n // Transcript injection\n transcriptRecallHours:\n typeof cfg.transcriptRecallHours === \"number\" ? cfg.transcriptRecallHours : 12,\n maxTranscriptTurns:\n typeof cfg.maxTranscriptTurns === \"number\" ? cfg.maxTranscriptTurns : 50,\n maxTranscriptTokens:\n typeof cfg.maxTranscriptTokens === \"number\" ? cfg.maxTranscriptTokens : 1000,\n // Checkpoint\n checkpointEnabled: cfg.checkpointEnabled !== false, // default: true\n checkpointTurns:\n typeof cfg.checkpointTurns === \"number\" ? cfg.checkpointTurns : 15,\n // Compaction reset (opt-in, default: false)\n compactionResetEnabled: cfg.compactionResetEnabled === true,\n // Hourly summaries\n hourlySummariesEnabled: cfg.hourlySummariesEnabled !== false, // default: true\n daySummaryEnabled: cfg.daySummaryEnabled !== false, // default: true\n hourlySummaryCronAutoRegister: cfg.hourlySummaryCronAutoRegister === true,\n nightlyGovernanceCronAutoRegister: cfg.nightlyGovernanceCronAutoRegister === true,\n summaryRecallHours:\n typeof cfg.summaryRecallHours === \"number\" ? cfg.summaryRecallHours : 24,\n maxSummaryCount:\n typeof cfg.maxSummaryCount === \"number\" ? cfg.maxSummaryCount : 6,\n summaryModel:\n typeof cfg.summaryModel === \"string\" && cfg.summaryModel.length > 0\n ? cfg.summaryModel\n : model, // default: same as extraction model\n // v2.4 Extended hourly summaries (default off)\n hourlySummariesExtendedEnabled: cfg.hourlySummariesExtendedEnabled === true,\n hourlySummariesIncludeToolStats: cfg.hourlySummariesIncludeToolStats === true,\n hourlySummariesIncludeSystemMessages: cfg.hourlySummariesIncludeSystemMessages === true,\n hourlySummariesMaxTurnsPerRun:\n typeof cfg.hourlySummariesMaxTurnsPerRun === \"number\" ? cfg.hourlySummariesMaxTurnsPerRun : 200,\n // v2.4 Conversation index (default off)\n conversationIndexEnabled: cfg.conversationIndexEnabled === true,\n conversationIndexBackend: cfg.conversationIndexBackend === \"faiss\" ? \"faiss\" : \"qmd\",\n conversationIndexQmdCollection:\n typeof cfg.conversationIndexQmdCollection === \"string\" && cfg.conversationIndexQmdCollection.length > 0\n ? cfg.conversationIndexQmdCollection\n : \"openclaw-engram-conversations\",\n conversationIndexRetentionDays:\n typeof cfg.conversationIndexRetentionDays === \"number\" ? cfg.conversationIndexRetentionDays : 30,\n conversationIndexMinUpdateIntervalMs:\n typeof cfg.conversationIndexMinUpdateIntervalMs === \"number\"\n ? cfg.conversationIndexMinUpdateIntervalMs\n : 15 * 60_000,\n conversationIndexEmbedOnUpdate: cfg.conversationIndexEmbedOnUpdate === true,\n conversationIndexFaissScriptPath:\n typeof cfg.conversationIndexFaissScriptPath === \"string\" && cfg.conversationIndexFaissScriptPath.trim().length > 0\n ? cfg.conversationIndexFaissScriptPath.trim()\n : undefined,\n conversationIndexFaissPythonBin:\n typeof cfg.conversationIndexFaissPythonBin === \"string\" && cfg.conversationIndexFaissPythonBin.trim().length > 0\n ? cfg.conversationIndexFaissPythonBin.trim()\n : undefined,\n conversationIndexFaissModelId:\n typeof cfg.conversationIndexFaissModelId === \"string\" && cfg.conversationIndexFaissModelId.trim().length > 0\n ? cfg.conversationIndexFaissModelId.trim()\n : \"text-embedding-3-small\",\n conversationIndexFaissIndexDir:\n typeof cfg.conversationIndexFaissIndexDir === \"string\" && cfg.conversationIndexFaissIndexDir.trim().length > 0\n ? cfg.conversationIndexFaissIndexDir.trim()\n : \"state/conversation-index/faiss\",\n conversationIndexFaissUpsertTimeoutMs:\n typeof cfg.conversationIndexFaissUpsertTimeoutMs === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationIndexFaissUpsertTimeoutMs))\n : 30_000,\n conversationIndexFaissSearchTimeoutMs:\n typeof cfg.conversationIndexFaissSearchTimeoutMs === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationIndexFaissSearchTimeoutMs))\n : 5_000,\n conversationIndexFaissHealthTimeoutMs:\n typeof cfg.conversationIndexFaissHealthTimeoutMs === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationIndexFaissHealthTimeoutMs))\n : 2_000,\n conversationIndexFaissMaxBatchSize:\n typeof cfg.conversationIndexFaissMaxBatchSize === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationIndexFaissMaxBatchSize))\n : 512,\n conversationIndexFaissMaxSearchK:\n typeof cfg.conversationIndexFaissMaxSearchK === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationIndexFaissMaxSearchK))\n : 50,\n conversationRecallTopK:\n typeof cfg.conversationRecallTopK === \"number\" ? cfg.conversationRecallTopK : 3,\n conversationRecallMaxChars:\n typeof cfg.conversationRecallMaxChars === \"number\" ? cfg.conversationRecallMaxChars : 2500,\n conversationRecallTimeoutMs:\n typeof cfg.conversationRecallTimeoutMs === \"number\" ? cfg.conversationRecallTimeoutMs : 800,\n evalHarnessEnabled: cfg.evalHarnessEnabled === true,\n evalShadowModeEnabled: cfg.evalShadowModeEnabled === true,\n benchmarkBaselineSnapshotsEnabled: cfg.benchmarkBaselineSnapshotsEnabled === true,\n benchmarkDeltaReporterEnabled: cfg.benchmarkDeltaReporterEnabled === true,\n benchmarkStoredBaselineEnabled: cfg.benchmarkStoredBaselineEnabled === true,\n evalStoreDir:\n typeof cfg.evalStoreDir === \"string\" && cfg.evalStoreDir.trim().length > 0\n ? cfg.evalStoreDir.trim()\n : path.join(memoryDir, \"state\", \"evals\"),\n objectiveStateMemoryEnabled: cfg.objectiveStateMemoryEnabled === true,\n objectiveStateSnapshotWritesEnabled: cfg.objectiveStateSnapshotWritesEnabled === true,\n objectiveStateRecallEnabled: cfg.objectiveStateRecallEnabled === true,\n objectiveStateStoreDir:\n typeof cfg.objectiveStateStoreDir === \"string\" && cfg.objectiveStateStoreDir.trim().length > 0\n ? cfg.objectiveStateStoreDir.trim()\n : path.join(memoryDir, \"state\", \"objective-state\"),\n causalTrajectoryMemoryEnabled: cfg.causalTrajectoryMemoryEnabled === true,\n causalTrajectoryStoreDir:\n typeof cfg.causalTrajectoryStoreDir === \"string\" && cfg.causalTrajectoryStoreDir.trim().length > 0\n ? cfg.causalTrajectoryStoreDir.trim()\n : path.join(memoryDir, \"state\", \"causal-trajectories\"),\n causalTrajectoryRecallEnabled: cfg.causalTrajectoryRecallEnabled === true,\n actionGraphRecallEnabled: cfg.actionGraphRecallEnabled === true,\n trustZonesEnabled: cfg.trustZonesEnabled === true,\n quarantinePromotionEnabled: cfg.quarantinePromotionEnabled === true,\n trustZoneStoreDir:\n typeof cfg.trustZoneStoreDir === \"string\" && cfg.trustZoneStoreDir.trim().length > 0\n ? cfg.trustZoneStoreDir.trim()\n : path.join(memoryDir, \"state\", \"trust-zones\"),\n trustZoneRecallEnabled: cfg.trustZoneRecallEnabled === true,\n memoryPoisoningDefenseEnabled: cfg.memoryPoisoningDefenseEnabled === true,\n memoryRedTeamBenchEnabled: cfg.memoryRedTeamBenchEnabled === true,\n harmonicRetrievalEnabled: cfg.harmonicRetrievalEnabled === true,\n abstractionAnchorsEnabled: cfg.abstractionAnchorsEnabled === true,\n verifiedRecallEnabled: cfg.verifiedRecallEnabled === true,\n semanticRulePromotionEnabled: cfg.semanticRulePromotionEnabled === true,\n semanticRuleVerificationEnabled: cfg.semanticRuleVerificationEnabled === true,\n semanticConsolidationEnabled: cfg.semanticConsolidationEnabled === true,\n semanticConsolidationModel:\n typeof cfg.semanticConsolidationModel === \"string\" && cfg.semanticConsolidationModel.length > 0\n ? cfg.semanticConsolidationModel\n : \"auto\",\n semanticConsolidationThreshold:\n typeof cfg.semanticConsolidationThreshold === \"number\" ? cfg.semanticConsolidationThreshold : 0.8,\n semanticConsolidationMinClusterSize:\n typeof cfg.semanticConsolidationMinClusterSize === \"number\"\n ? Math.max(2, Math.floor(cfg.semanticConsolidationMinClusterSize))\n : 3,\n semanticConsolidationExcludeCategories: Array.isArray(cfg.semanticConsolidationExcludeCategories)\n ? (cfg.semanticConsolidationExcludeCategories as unknown[]).filter(\n (c): c is string => typeof c === \"string\" && c.length > 0,\n )\n : [\"correction\", \"commitment\"],\n semanticConsolidationIntervalHours:\n typeof cfg.semanticConsolidationIntervalHours === \"number\"\n ? Math.max(1, Math.floor(cfg.semanticConsolidationIntervalHours))\n : 168,\n semanticConsolidationMaxPerRun:\n typeof cfg.semanticConsolidationMaxPerRun === \"number\"\n ? Math.max(0, Math.floor(cfg.semanticConsolidationMaxPerRun))\n : 100,\n creationMemoryEnabled: cfg.creationMemoryEnabled === true,\n memoryUtilityLearningEnabled: cfg.memoryUtilityLearningEnabled === true,\n promotionByOutcomeEnabled: cfg.promotionByOutcomeEnabled === true,\n commitmentLedgerEnabled: cfg.commitmentLedgerEnabled === true,\n commitmentLifecycleEnabled: cfg.commitmentLifecycleEnabled === true,\n commitmentStaleDays:\n typeof cfg.commitmentStaleDays === \"number\" ? cfg.commitmentStaleDays : 14,\n commitmentLedgerDir:\n typeof cfg.commitmentLedgerDir === \"string\" && cfg.commitmentLedgerDir.trim().length > 0\n ? cfg.commitmentLedgerDir.trim()\n : path.join(memoryDir, \"state\", \"commitment-ledger\"),\n resumeBundlesEnabled: cfg.resumeBundlesEnabled === true,\n resumeBundleDir:\n typeof cfg.resumeBundleDir === \"string\" && cfg.resumeBundleDir.trim().length > 0\n ? cfg.resumeBundleDir.trim()\n : path.join(memoryDir, \"state\", \"resume-bundles\"),\n workProductRecallEnabled: cfg.workProductRecallEnabled === true,\n workTasksEnabled: cfg.workTasksEnabled === true,\n workProjectsEnabled: cfg.workProjectsEnabled === true,\n workTasksDir:\n typeof cfg.workTasksDir === \"string\" && cfg.workTasksDir.trim().length > 0\n ? cfg.workTasksDir.trim()\n : path.join(memoryDir, \"work\", \"tasks\"),\n workProjectsDir:\n typeof cfg.workProjectsDir === \"string\" && cfg.workProjectsDir.trim().length > 0\n ? cfg.workProjectsDir.trim()\n : path.join(memoryDir, \"work\", \"projects\"),\n workIndexEnabled: cfg.workIndexEnabled === true,\n workIndexDir:\n typeof cfg.workIndexDir === \"string\" && cfg.workIndexDir.trim().length > 0\n ? cfg.workIndexDir.trim()\n : path.join(memoryDir, \"work\", \"index\"),\n workTaskIndexEnabled: cfg.workTaskIndexEnabled === true,\n workProjectIndexEnabled: cfg.workProjectIndexEnabled === true,\n workIndexAutoRebuildEnabled: cfg.workIndexAutoRebuildEnabled === true,\n workIndexAutoRebuildDebounceMs:\n typeof cfg.workIndexAutoRebuildDebounceMs === \"number\" ? cfg.workIndexAutoRebuildDebounceMs : 1000,\n workProductLedgerDir:\n typeof cfg.workProductLedgerDir === \"string\" && cfg.workProductLedgerDir.trim().length > 0\n ? cfg.workProductLedgerDir.trim()\n : path.join(memoryDir, \"state\", \"work-product-ledger\"),\n abstractionNodeStoreDir:\n typeof cfg.abstractionNodeStoreDir === \"string\" && cfg.abstractionNodeStoreDir.trim().length > 0\n ? cfg.abstractionNodeStoreDir.trim()\n : path.join(memoryDir, \"state\", \"abstraction-nodes\"),\n // Local LLM Provider (v2.1)\n localLlmEnabled: cfg.localLlmEnabled === true || cfg.localLlmEnabled === \"true\", // default: false\n localLlmUrl:\n typeof cfg.localLlmUrl === \"string\" && cfg.localLlmUrl.length > 0\n ? cfg.localLlmUrl\n : \"http://localhost:1234/v1\",\n localLlmModel:\n typeof cfg.localLlmModel === \"string\" && cfg.localLlmModel.length > 0\n ? cfg.localLlmModel\n : \"local-model\",\n localLlmApiKey:\n typeof cfg.localLlmApiKey === \"string\" && cfg.localLlmApiKey.length > 0\n ? resolveEnvVars(cfg.localLlmApiKey)\n : undefined,\n localLlmHeaders:\n cfg.localLlmHeaders && typeof cfg.localLlmHeaders === \"object\" && !Array.isArray(cfg.localLlmHeaders)\n ? Object.fromEntries(\n Object.entries(cfg.localLlmHeaders as Record<string, unknown>)\n .filter(([, value]) => typeof value === \"string\")\n .map(([key, value]) => [key, String(value)]),\n )\n : undefined,\n localLlmAuthHeader: cfg.localLlmAuthHeader !== false,\n localLlmFallback: cfg.localLlmFallback !== false, // default: true\n localLlmHomeDir:\n typeof cfg.localLlmHomeDir === \"string\" && cfg.localLlmHomeDir.length > 0\n ? cfg.localLlmHomeDir\n : undefined,\n localLmsCliPath:\n typeof cfg.localLmsCliPath === \"string\" && cfg.localLmsCliPath.length > 0\n ? cfg.localLmsCliPath\n : undefined,\n localLmsBinDir:\n typeof cfg.localLmsBinDir === \"string\" && cfg.localLmsBinDir.length > 0\n ? cfg.localLmsBinDir\n : undefined,\n localLlmTimeoutMs:\n typeof cfg.localLlmTimeoutMs === \"number\" ? cfg.localLlmTimeoutMs : 180_000,\n localLlmMaxContext:\n typeof cfg.localLlmMaxContext === \"number\" ? cfg.localLlmMaxContext : undefined,\n // Observability (disabled by default to avoid log spam)\n slowLogEnabled: cfg.slowLogEnabled === true,\n slowLogThresholdMs:\n typeof cfg.slowLogThresholdMs === \"number\" ? cfg.slowLogThresholdMs : 30_000,\n // Trace recall content — disabled by default; enable to send recalled memory text to trace subscribers\n traceRecallContent: cfg.traceRecallContent === true,\n // Performance profiling (opt-in, disabled by default)\n profilingEnabled: cfg.profilingEnabled === true,\n profilingStorageDir:\n typeof cfg.profilingStorageDir === \"string\" && cfg.profilingStorageDir.length > 0\n ? cfg.profilingStorageDir\n : path.join(memoryDir, \"profiling\"),\n profilingMaxTraces:\n typeof cfg.profilingMaxTraces === \"number\" && Number.isFinite(cfg.profilingMaxTraces)\n ? Math.max(0, cfg.profilingMaxTraces)\n : 100,\n // Extraction stability guards (P0/P1)\n extractionDedupeEnabled: cfg.extractionDedupeEnabled !== false,\n extractionDedupeWindowMs:\n typeof cfg.extractionDedupeWindowMs === \"number\" ? cfg.extractionDedupeWindowMs : 5 * 60_000,\n extractionMinChars:\n typeof cfg.extractionMinChars === \"number\" ? cfg.extractionMinChars : 40,\n extractionMinUserTurns:\n typeof cfg.extractionMinUserTurns === \"number\" ? cfg.extractionMinUserTurns : 1,\n extractionMaxTurnChars:\n typeof cfg.extractionMaxTurnChars === \"number\" ? cfg.extractionMaxTurnChars : 4000,\n extractionMaxFactsPerRun:\n typeof cfg.extractionMaxFactsPerRun === \"number\" ? cfg.extractionMaxFactsPerRun : 12,\n extractionMaxEntitiesPerRun:\n typeof cfg.extractionMaxEntitiesPerRun === \"number\" ? cfg.extractionMaxEntitiesPerRun : 6,\n extractionMaxQuestionsPerRun:\n typeof cfg.extractionMaxQuestionsPerRun === \"number\" ? cfg.extractionMaxQuestionsPerRun : 3,\n extractionMaxProfileUpdatesPerRun:\n typeof cfg.extractionMaxProfileUpdatesPerRun === \"number\" ? cfg.extractionMaxProfileUpdatesPerRun : 4,\n consolidationRequireNonZeroExtraction: cfg.consolidationRequireNonZeroExtraction !== false,\n consolidationMinIntervalMs:\n typeof cfg.consolidationMinIntervalMs === \"number\" ? cfg.consolidationMinIntervalMs : 10 * 60_000,\n // QMD maintenance (debounced singleflight)\n qmdMaintenanceEnabled: cfg.qmdMaintenanceEnabled !== false,\n qmdMaintenanceDebounceMs:\n typeof cfg.qmdMaintenanceDebounceMs === \"number\" ? cfg.qmdMaintenanceDebounceMs : 30_000,\n qmdAutoEmbedEnabled: cfg.qmdAutoEmbedEnabled === true,\n qmdEmbedMinIntervalMs:\n typeof cfg.qmdEmbedMinIntervalMs === \"number\" ? cfg.qmdEmbedMinIntervalMs : 60 * 60_000,\n qmdUpdateTimeoutMs:\n typeof cfg.qmdUpdateTimeoutMs === \"number\" ? cfg.qmdUpdateTimeoutMs : 90_000,\n qmdUpdateMinIntervalMs:\n typeof cfg.qmdUpdateMinIntervalMs === \"number\" ? cfg.qmdUpdateMinIntervalMs : 15 * 60_000,\n // Local LLM resilience\n localLlmRetry5xxCount:\n typeof cfg.localLlmRetry5xxCount === \"number\" ? cfg.localLlmRetry5xxCount : 1,\n localLlmRetryBackoffMs:\n typeof cfg.localLlmRetryBackoffMs === \"number\" ? cfg.localLlmRetryBackoffMs : 400,\n localLlm400TripThreshold:\n typeof cfg.localLlm400TripThreshold === \"number\" ? cfg.localLlm400TripThreshold : 5,\n localLlm400CooldownMs:\n typeof cfg.localLlm400CooldownMs === \"number\" ? cfg.localLlm400CooldownMs : 120_000,\n // Local LLM fast tier (v9.1)\n localLlmFastEnabled: cfg.localLlmFastEnabled === true,\n localLlmFastModel:\n typeof cfg.localLlmFastModel === \"string\" && cfg.localLlmFastModel.length > 0\n ? cfg.localLlmFastModel\n : \"\",\n localLlmFastUrl:\n typeof cfg.localLlmFastUrl === \"string\" && cfg.localLlmFastUrl.length > 0\n ? cfg.localLlmFastUrl\n : typeof cfg.localLlmUrl === \"string\" && cfg.localLlmUrl.length > 0\n ? cfg.localLlmUrl\n : \"http://localhost:1234/v1\",\n localLlmFastTimeoutMs:\n typeof cfg.localLlmFastTimeoutMs === \"number\" ? cfg.localLlmFastTimeoutMs : 15_000,\n // Gateway config (passed from index.ts for fallback AI)\n gatewayConfig: cfg.gatewayConfig as PluginConfig[\"gatewayConfig\"],\n // Gateway model source (v9.2) — route LLM calls through gateway agent model chain\n modelSource:\n cfg.modelSource === \"gateway\" ? \"gateway\" : \"plugin\",\n gatewayAgentId:\n typeof cfg.gatewayAgentId === \"string\" && cfg.gatewayAgentId.length > 0\n ? cfg.gatewayAgentId\n : \"\",\n fastGatewayAgentId:\n typeof cfg.fastGatewayAgentId === \"string\" && cfg.fastGatewayAgentId.length > 0\n ? cfg.fastGatewayAgentId\n : \"\",\n\n // v3.0 namespaces (default off)\n namespacesEnabled: cfg.namespacesEnabled === true,\n defaultNamespace:\n typeof cfg.defaultNamespace === \"string\" && cfg.defaultNamespace.length > 0 ? cfg.defaultNamespace : \"default\",\n sharedNamespace:\n typeof cfg.sharedNamespace === \"string\" && cfg.sharedNamespace.length > 0 ? cfg.sharedNamespace : \"shared\",\n principalFromSessionKeyMode:\n cfg.principalFromSessionKeyMode === \"prefix\"\n ? \"prefix\"\n : cfg.principalFromSessionKeyMode === \"regex\"\n ? \"regex\"\n : \"map\",\n principalFromSessionKeyRules: principalRules,\n namespacePolicies: Array.isArray(cfg.namespacePolicies)\n ? (cfg.namespacePolicies as any[]).map((p) => ({\n name: typeof p?.name === \"string\" ? p.name : \"\",\n readPrincipals: Array.isArray(p?.readPrincipals) ? p.readPrincipals.filter((x: any) => typeof x === \"string\") : [],\n writePrincipals: Array.isArray(p?.writePrincipals) ? p.writePrincipals.filter((x: any) => typeof x === \"string\") : [],\n includeInRecallByDefault: p?.includeInRecallByDefault === true,\n })).filter((p) => p.name.length > 0)\n : [],\n defaultRecallNamespaces: Array.isArray(cfg.defaultRecallNamespaces) ? [\"self\", \"shared\"].filter((x) => (cfg.defaultRecallNamespaces as any[]).includes(x)) as any : [\"self\", \"shared\"],\n cronRecallMode:\n cfg.cronRecallMode === \"none\"\n ? \"none\"\n : cfg.cronRecallMode === \"allowlist\"\n ? \"allowlist\"\n : \"all\",\n cronRecallAllowlist: Array.isArray(cfg.cronRecallAllowlist)\n ? (cfg.cronRecallAllowlist as unknown[]).filter((v): v is string => typeof v === \"string\" && v.length > 0)\n : [],\n cronRecallPolicyEnabled: cfg.cronRecallPolicyEnabled !== false,\n cronRecallNormalizedQueryMaxChars:\n typeof cfg.cronRecallNormalizedQueryMaxChars === \"number\"\n ? cfg.cronRecallNormalizedQueryMaxChars\n : 480,\n cronRecallInstructionHeavyTokenCap:\n typeof cfg.cronRecallInstructionHeavyTokenCap === \"number\"\n ? cfg.cronRecallInstructionHeavyTokenCap\n : 36,\n cronConversationRecallMode:\n cfg.cronConversationRecallMode === \"always\"\n ? \"always\"\n : cfg.cronConversationRecallMode === \"never\"\n ? \"never\"\n : \"auto\",\n autoPromoteToSharedEnabled: cfg.autoPromoteToSharedEnabled === true,\n autoPromoteToSharedCategories: Array.isArray(cfg.autoPromoteToSharedCategories)\n ? (cfg.autoPromoteToSharedCategories as any[]).filter((c) => c === \"fact\" || c === \"correction\" || c === \"decision\" || c === \"preference\")\n : [\"fact\", \"correction\", \"decision\", \"preference\"],\n autoPromoteMinConfidenceTier:\n cfg.autoPromoteMinConfidenceTier === \"explicit\"\n ? \"explicit\"\n : cfg.autoPromoteMinConfidenceTier === \"implied\"\n ? \"implied\"\n : \"explicit\",\n routingRulesEnabled: cfg.routingRulesEnabled === true,\n routingRulesStateFile:\n typeof cfg.routingRulesStateFile === \"string\" && cfg.routingRulesStateFile.trim().length > 0\n ? cfg.routingRulesStateFile.trim()\n : \"state/routing-rules.json\",\n\n // v4.0 shared-context (default off)\n sharedContextEnabled: cfg.sharedContextEnabled === true,\n sharedContextDir:\n typeof cfg.sharedContextDir === \"string\" && cfg.sharedContextDir.length > 0 ? cfg.sharedContextDir : undefined,\n sharedContextMaxInjectChars:\n typeof cfg.sharedContextMaxInjectChars === \"number\" ? cfg.sharedContextMaxInjectChars : 4000,\n sharedCrossSignalSemanticEnabled,\n sharedCrossSignalSemanticTimeoutMs,\n sharedCrossSignalSemanticMaxCandidates:\n typeof cfg.sharedCrossSignalSemanticMaxCandidates === \"number\"\n ? Math.max(0, Math.floor(cfg.sharedCrossSignalSemanticMaxCandidates))\n : 120,\n // Backward-compatible aliases.\n crossSignalsSemanticEnabled: sharedCrossSignalSemanticEnabled,\n crossSignalsSemanticTimeoutMs: sharedCrossSignalSemanticTimeoutMs,\n\n // v5.0 compounding (default off)\n compoundingEnabled: cfg.compoundingEnabled === true,\n compoundingWeeklyCronEnabled: cfg.compoundingWeeklyCronEnabled === true,\n compoundingSemanticEnabled: cfg.compoundingSemanticEnabled === true,\n compoundingSynthesisTimeoutMs:\n typeof cfg.compoundingSynthesisTimeoutMs === \"number\" ? cfg.compoundingSynthesisTimeoutMs : 15_000,\n compoundingInjectEnabled: cfg.compoundingInjectEnabled !== false,\n\n // IRC (Inductive Rule Consolidation) — preference synthesis\n ircEnabled: cfg.ircEnabled !== false,\n ircMaxPreferences: typeof cfg.ircMaxPreferences === \"number\" ? cfg.ircMaxPreferences : 20,\n ircIncludeCorrections: cfg.ircIncludeCorrections !== false,\n ircMinConfidence: typeof cfg.ircMinConfidence === \"number\" ? cfg.ircMinConfidence : 0.3,\n\n // CMC (Causal Memory Consolidation) — cross-session causal reasoning\n cmcEnabled: cfg.cmcEnabled === true,\n cmcStitchLookbackDays: typeof cfg.cmcStitchLookbackDays === \"number\" ? cfg.cmcStitchLookbackDays : 7,\n cmcStitchMinScore: typeof cfg.cmcStitchMinScore === \"number\" ? cfg.cmcStitchMinScore : 2.5,\n cmcStitchMaxEdgesPerTrajectory: typeof cfg.cmcStitchMaxEdgesPerTrajectory === \"number\" ? cfg.cmcStitchMaxEdgesPerTrajectory : 3,\n cmcConsolidationEnabled: cfg.cmcConsolidationEnabled === true,\n cmcConsolidationMinRecurrence: typeof cfg.cmcConsolidationMinRecurrence === \"number\" ? cfg.cmcConsolidationMinRecurrence : 3,\n cmcConsolidationMinSessions: typeof cfg.cmcConsolidationMinSessions === \"number\" ? cfg.cmcConsolidationMinSessions : 2,\n cmcConsolidationSuccessThreshold: typeof cfg.cmcConsolidationSuccessThreshold === \"number\" ? cfg.cmcConsolidationSuccessThreshold : 0.7,\n cmcRetrievalEnabled: cfg.cmcRetrievalEnabled === true,\n cmcRetrievalMaxDepth: typeof cfg.cmcRetrievalMaxDepth === \"number\" ? cfg.cmcRetrievalMaxDepth : 3,\n cmcRetrievalMaxChars: typeof cfg.cmcRetrievalMaxChars === \"number\" ? cfg.cmcRetrievalMaxChars : 800,\n cmcRetrievalCounterfactualBoost: typeof cfg.cmcRetrievalCounterfactualBoost === \"number\" ? cfg.cmcRetrievalCounterfactualBoost : 0.4,\n cmcBehaviorLearningEnabled: cfg.cmcBehaviorLearningEnabled === true,\n cmcBehaviorMinFrequency: typeof cfg.cmcBehaviorMinFrequency === \"number\" ? cfg.cmcBehaviorMinFrequency : 3,\n cmcBehaviorMinSessions: typeof cfg.cmcBehaviorMinSessions === \"number\" ? cfg.cmcBehaviorMinSessions : 2,\n cmcBehaviorConfidenceThreshold: typeof cfg.cmcBehaviorConfidenceThreshold === \"number\" ? cfg.cmcBehaviorConfidenceThreshold : 0.6,\n cmcLifecycleCausalImpactWeight: typeof cfg.cmcLifecycleCausalImpactWeight === \"number\" ? cfg.cmcLifecycleCausalImpactWeight : 0.05,\n\n // PEDC (Prediction-Error-Driven Calibration) — model-user alignment\n calibrationEnabled: cfg.calibrationEnabled === true,\n calibrationMaxRulesPerRecall: typeof cfg.calibrationMaxRulesPerRecall === \"number\" ? cfg.calibrationMaxRulesPerRecall : 10,\n calibrationMaxChars: typeof cfg.calibrationMaxChars === \"number\" ? cfg.calibrationMaxChars : 1200,\n\n // v7.0 Knowledge Graph Enhancement\n knowledgeIndexEnabled: cfg.knowledgeIndexEnabled !== false,\n knowledgeIndexMaxEntities:\n typeof cfg.knowledgeIndexMaxEntities === \"number\" ? cfg.knowledgeIndexMaxEntities : 40,\n knowledgeIndexMaxChars:\n typeof cfg.knowledgeIndexMaxChars === \"number\" ? cfg.knowledgeIndexMaxChars : 4000,\n entityRetrievalEnabled: cfg.entityRetrievalEnabled !== false,\n entityRetrievalMaxChars:\n typeof cfg.entityRetrievalMaxChars === \"number\" ? cfg.entityRetrievalMaxChars : 2400,\n entityRetrievalMaxHints:\n typeof cfg.entityRetrievalMaxHints === \"number\" ? cfg.entityRetrievalMaxHints : 2,\n entityRetrievalMaxSupportingFacts:\n typeof cfg.entityRetrievalMaxSupportingFacts === \"number\" ? cfg.entityRetrievalMaxSupportingFacts : 6,\n entityRetrievalMaxRelatedEntities:\n typeof cfg.entityRetrievalMaxRelatedEntities === \"number\" ? cfg.entityRetrievalMaxRelatedEntities : 3,\n entityRetrievalRecentTurns:\n typeof cfg.entityRetrievalRecentTurns === \"number\" ? cfg.entityRetrievalRecentTurns : 6,\n recallBudgetChars: recallPipelineConfig.recallBudgetChars,\n recallOuterTimeoutMs:\n typeof cfg.recallOuterTimeoutMs === \"number\" ? Math.max(0, Math.floor(cfg.recallOuterTimeoutMs)) : 75_000,\n recallCoreDeadlineMs:\n typeof cfg.recallCoreDeadlineMs === \"number\" ? Math.max(0, Math.floor(cfg.recallCoreDeadlineMs)) : 75_000,\n recallEnrichmentDeadlineMs:\n typeof cfg.recallEnrichmentDeadlineMs === \"number\"\n ? Math.max(0, Math.floor(cfg.recallEnrichmentDeadlineMs))\n : 25_000,\n recallPipeline: recallPipelineConfig.pipeline,\n qmdRecallCacheTtlMs:\n typeof cfg.qmdRecallCacheTtlMs === \"number\" ? Math.max(0, Math.floor(cfg.qmdRecallCacheTtlMs)) : 60_000,\n qmdRecallCacheStaleTtlMs:\n typeof cfg.qmdRecallCacheStaleTtlMs === \"number\"\n ? Math.max(0, Math.floor(cfg.qmdRecallCacheStaleTtlMs))\n : 10 * 60_000,\n qmdRecallCacheMaxEntries:\n typeof cfg.qmdRecallCacheMaxEntries === \"number\"\n ? Math.max(0, Math.floor(cfg.qmdRecallCacheMaxEntries))\n : 128,\n entityRelationshipsEnabled: cfg.entityRelationshipsEnabled !== false,\n entityActivityLogEnabled: cfg.entityActivityLogEnabled !== false,\n entityActivityLogMaxEntries:\n typeof cfg.entityActivityLogMaxEntries === \"number\" ? cfg.entityActivityLogMaxEntries : 20,\n entityAliasesEnabled: cfg.entityAliasesEnabled !== false,\n entitySummaryEnabled: cfg.entitySummaryEnabled !== false,\n\n // Search backend abstraction\n searchBackend: ([\"qmd\", \"remote\", \"noop\", \"lancedb\", \"meilisearch\", \"orama\"] as const).includes(cfg.searchBackend as any)\n ? (cfg.searchBackend as \"qmd\" | \"remote\" | \"noop\" | \"lancedb\" | \"meilisearch\" | \"orama\")\n : \"qmd\",\n remoteSearchBaseUrl: typeof cfg.remoteSearchBaseUrl === \"string\" ? cfg.remoteSearchBaseUrl : undefined,\n remoteSearchApiKey: typeof cfg.remoteSearchApiKey === \"string\" ? cfg.remoteSearchApiKey : undefined,\n remoteSearchTimeoutMs: typeof cfg.remoteSearchTimeoutMs === \"number\" ? cfg.remoteSearchTimeoutMs : 30_000,\n\n // LanceDB backend\n lancedbEnabled: cfg.lancedbEnabled === true,\n lanceDbPath: typeof cfg.lanceDbPath === \"string\" ? cfg.lanceDbPath : path.join(memoryDir, \"lancedb\"),\n lanceEmbeddingDimension: typeof cfg.lanceEmbeddingDimension === \"number\" ? cfg.lanceEmbeddingDimension : 1536,\n\n // Meilisearch backend\n meilisearchEnabled: cfg.meilisearchEnabled === true,\n meilisearchHost: typeof cfg.meilisearchHost === \"string\" ? cfg.meilisearchHost : \"http://localhost:7700\",\n meilisearchApiKey: typeof cfg.meilisearchApiKey === \"string\" ? cfg.meilisearchApiKey : undefined,\n meilisearchTimeoutMs: typeof cfg.meilisearchTimeoutMs === \"number\" ? cfg.meilisearchTimeoutMs : 30_000,\n meilisearchAutoIndex: cfg.meilisearchAutoIndex === true,\n\n // Orama backend\n oramaEnabled: cfg.oramaEnabled === true,\n oramaDbPath: typeof cfg.oramaDbPath === \"string\" ? cfg.oramaDbPath : path.join(memoryDir, \"orama\"),\n oramaEmbeddingDimension: typeof cfg.oramaEmbeddingDimension === \"number\" ? cfg.oramaEmbeddingDimension : 1536,\n\n // QMD daemon mode\n qmdDaemonEnabled: cfg.qmdDaemonEnabled !== false,\n qmdDaemonUrl:\n typeof cfg.qmdDaemonUrl === \"string\" && cfg.qmdDaemonUrl.length > 0\n ? cfg.qmdDaemonUrl\n : \"http://localhost:8181/mcp\",\n qmdDaemonRecheckIntervalMs:\n typeof cfg.qmdDaemonRecheckIntervalMs === \"number\" ? cfg.qmdDaemonRecheckIntervalMs : 15_000,\n qmdIntentHintsEnabled: cfg.qmdIntentHintsEnabled === true,\n qmdExplainEnabled: cfg.qmdExplainEnabled === true,\n\n // v6.0 Fact deduplication & archival\n factDeduplicationEnabled: cfg.factDeduplicationEnabled !== false,\n factArchivalEnabled: cfg.factArchivalEnabled === true,\n factArchivalAgeDays:\n typeof cfg.factArchivalAgeDays === \"number\" ? cfg.factArchivalAgeDays : 90,\n factArchivalMaxImportance:\n typeof cfg.factArchivalMaxImportance === \"number\" ? cfg.factArchivalMaxImportance : 0.3,\n factArchivalMaxAccessCount:\n typeof cfg.factArchivalMaxAccessCount === \"number\" ? cfg.factArchivalMaxAccessCount : 2,\n factArchivalProtectedCategories: Array.isArray(cfg.factArchivalProtectedCategories)\n ? (cfg.factArchivalProtectedCategories as any[]).filter((c) => typeof c === \"string\")\n : [\"commitment\", \"preference\", \"decision\", \"principle\"],\n // v8.3 lifecycle policy engine (default off)\n lifecyclePolicyEnabled: cfg.lifecyclePolicyEnabled === true,\n lifecycleFilterStaleEnabled: cfg.lifecycleFilterStaleEnabled === true,\n lifecyclePromoteHeatThreshold:\n typeof cfg.lifecyclePromoteHeatThreshold === \"number\"\n ? Math.min(1, Math.max(0, cfg.lifecyclePromoteHeatThreshold))\n : 0.55,\n lifecycleStaleDecayThreshold:\n typeof cfg.lifecycleStaleDecayThreshold === \"number\"\n ? Math.min(1, Math.max(0, cfg.lifecycleStaleDecayThreshold))\n : 0.65,\n lifecycleArchiveDecayThreshold:\n typeof cfg.lifecycleArchiveDecayThreshold === \"number\"\n ? Math.min(1, Math.max(0, cfg.lifecycleArchiveDecayThreshold))\n : 0.85,\n lifecycleProtectedCategories: Array.isArray(cfg.lifecycleProtectedCategories)\n ? (cfg.lifecycleProtectedCategories as any[]).filter(\n (c): c is PluginConfig[\"lifecycleProtectedCategories\"][number] =>\n typeof c === \"string\" && VALID_MEMORY_CATEGORIES.has(c),\n )\n : [\"decision\", \"principle\", \"commitment\", \"preference\"],\n lifecycleMetricsEnabled:\n typeof cfg.lifecycleMetricsEnabled === \"boolean\"\n ? cfg.lifecycleMetricsEnabled\n : cfg.lifecyclePolicyEnabled === true,\n // v8.3 proactive + policy learning (default off)\n proactiveExtractionEnabled: cfg.proactiveExtractionEnabled === true,\n contextCompressionActionsEnabled: cfg.contextCompressionActionsEnabled === true,\n compressionGuidelineLearningEnabled: cfg.compressionGuidelineLearningEnabled === true,\n compressionGuidelineSemanticRefinementEnabled:\n cfg.compressionGuidelineSemanticRefinementEnabled === true,\n compressionGuidelineSemanticTimeoutMs:\n typeof cfg.compressionGuidelineSemanticTimeoutMs === \"number\"\n ? Math.max(1, Math.floor(cfg.compressionGuidelineSemanticTimeoutMs))\n : 2500,\n maxProactiveQuestionsPerExtraction:\n typeof cfg.maxProactiveQuestionsPerExtraction === \"number\"\n ? Math.max(0, Math.floor(cfg.maxProactiveQuestionsPerExtraction))\n : 2,\n proactiveExtractionTimeoutMs:\n typeof cfg.proactiveExtractionTimeoutMs === \"number\"\n ? Math.max(0, Math.floor(cfg.proactiveExtractionTimeoutMs))\n : 2500,\n proactiveExtractionMaxTokens:\n typeof cfg.proactiveExtractionMaxTokens === \"number\"\n ? Math.max(0, Math.floor(cfg.proactiveExtractionMaxTokens))\n : 900,\n extractionMaxOutputTokens:\n typeof cfg.extractionMaxOutputTokens === \"number\"\n ? Math.max(1, Math.floor(cfg.extractionMaxOutputTokens))\n : 16384,\n proactiveExtractionCategoryAllowlist: Array.isArray(cfg.proactiveExtractionCategoryAllowlist)\n ? (cfg.proactiveExtractionCategoryAllowlist as unknown[]).filter(\n (category): category is PluginConfig[\"lifecycleProtectedCategories\"][number] =>\n typeof category === \"string\" && VALID_MEMORY_CATEGORIES.has(category),\n )\n : undefined,\n maxCompressionTokensPerHour:\n typeof cfg.maxCompressionTokensPerHour === \"number\"\n ? Math.max(0, Math.floor(cfg.maxCompressionTokensPerHour))\n : 1500,\n behaviorLoopAutoTuneEnabled: cfg.behaviorLoopAutoTuneEnabled === true,\n behaviorLoopLearningWindowDays:\n typeof cfg.behaviorLoopLearningWindowDays === \"number\"\n ? Math.max(0, Math.floor(cfg.behaviorLoopLearningWindowDays))\n : 14,\n behaviorLoopMinSignalCount:\n typeof cfg.behaviorLoopMinSignalCount === \"number\"\n ? Math.max(0, Math.floor(cfg.behaviorLoopMinSignalCount))\n : 10,\n behaviorLoopMaxDeltaPerCycle:\n typeof cfg.behaviorLoopMaxDeltaPerCycle === \"number\"\n ? Math.min(1, Math.max(0, cfg.behaviorLoopMaxDeltaPerCycle))\n : 0.1,\n behaviorLoopProtectedParams: Array.isArray(cfg.behaviorLoopProtectedParams)\n ? (cfg.behaviorLoopProtectedParams as unknown[])\n .filter((param): param is string => typeof param === \"string\" && param.trim().length > 0)\n : [...DEFAULT_BEHAVIOR_LOOP_PROTECTED_PARAMS],\n // v8.0 phase 1\n recallPlannerEnabled: cfg.recallPlannerEnabled !== false,\n recallPlannerModel:\n typeof cfg.recallPlannerModel === \"string\" && cfg.recallPlannerModel.trim().length > 0\n ? cfg.recallPlannerModel.trim()\n : \"gpt-5.2-mini\",\n recallPlannerTimeoutMs:\n typeof cfg.recallPlannerTimeoutMs === \"number\" ? cfg.recallPlannerTimeoutMs : 1500,\n recallPlannerUseResponsesApi: cfg.recallPlannerUseResponsesApi !== false,\n recallPlannerMaxPromptChars:\n typeof cfg.recallPlannerMaxPromptChars === \"number\" ? cfg.recallPlannerMaxPromptChars : 4000,\n recallPlannerMaxMemoryHints:\n typeof cfg.recallPlannerMaxMemoryHints === \"number\" ? cfg.recallPlannerMaxMemoryHints : 24,\n recallPlannerShadowMode: cfg.recallPlannerShadowMode === true,\n recallPlannerTelemetryEnabled: cfg.recallPlannerTelemetryEnabled !== false,\n recallPlannerMaxQmdResultsMinimal:\n typeof cfg.recallPlannerMaxQmdResultsMinimal === \"number\"\n ? cfg.recallPlannerMaxQmdResultsMinimal\n : 4,\n recallPlannerMaxQmdResultsFull:\n typeof cfg.recallPlannerMaxQmdResultsFull === \"number\" ? cfg.recallPlannerMaxQmdResultsFull : 8,\n intentRoutingEnabled: cfg.intentRoutingEnabled === true,\n intentRoutingBoost:\n typeof cfg.intentRoutingBoost === \"number\" ? cfg.intentRoutingBoost : 0.12,\n verbatimArtifactsEnabled: cfg.verbatimArtifactsEnabled === true,\n verbatimArtifactsMinConfidence:\n typeof cfg.verbatimArtifactsMinConfidence === \"number\"\n ? cfg.verbatimArtifactsMinConfidence\n : 0.8,\n verbatimArtifactsMaxRecall:\n typeof cfg.verbatimArtifactsMaxRecall === \"number\" ? cfg.verbatimArtifactsMaxRecall : 5,\n verbatimArtifactCategories: Array.isArray(cfg.verbatimArtifactCategories)\n ? (cfg.verbatimArtifactCategories as any[]).filter(\n (c): c is PluginConfig[\"verbatimArtifactCategories\"][number] =>\n typeof c === \"string\" && VALID_MEMORY_CATEGORIES.has(c),\n )\n : [\"decision\", \"correction\", \"principle\", \"commitment\"],\n // v8.0 Phase 2A: Memory Boxes + Trace Weaving\n memoryBoxesEnabled: cfg.memoryBoxesEnabled === true,\n boxTopicShiftThreshold:\n typeof cfg.boxTopicShiftThreshold === \"number\" ? cfg.boxTopicShiftThreshold : 0.35,\n boxTimeGapMs:\n typeof cfg.boxTimeGapMs === \"number\" ? cfg.boxTimeGapMs : 30 * 60 * 1000,\n boxMaxMemories:\n typeof cfg.boxMaxMemories === \"number\" ? cfg.boxMaxMemories : 50,\n traceWeaverEnabled: cfg.traceWeaverEnabled === true,\n traceWeaverLookbackDays:\n typeof cfg.traceWeaverLookbackDays === \"number\" ? cfg.traceWeaverLookbackDays : 7,\n traceWeaverOverlapThreshold:\n typeof cfg.traceWeaverOverlapThreshold === \"number\" ? cfg.traceWeaverOverlapThreshold : 0.4,\n boxRecallDays:\n typeof cfg.boxRecallDays === \"number\" ? cfg.boxRecallDays : 3,\n // v8.0 Phase 2B: Episode/Note dual store (HiMem)\n episodeNoteModeEnabled: cfg.episodeNoteModeEnabled === true,\n // v8.1: Temporal + Tag Indexes (SwiftMem-inspired)\n queryAwareIndexingEnabled: cfg.queryAwareIndexingEnabled === true,\n queryAwareIndexingMaxCandidates:\n typeof cfg.queryAwareIndexingMaxCandidates === \"number\"\n ? Math.max(0, cfg.queryAwareIndexingMaxCandidates) // clamp: negative treated as 0 (no cap)\n : 200,\n temporalIndexWindowDays:\n typeof cfg.temporalIndexWindowDays === \"number\" ? cfg.temporalIndexWindowDays : 30,\n temporalIndexMaxEntries:\n typeof cfg.temporalIndexMaxEntries === \"number\" ? cfg.temporalIndexMaxEntries : 5000,\n temporalBoostRecentDays:\n typeof cfg.temporalBoostRecentDays === \"number\" ? cfg.temporalBoostRecentDays : 7,\n temporalBoostScore: typeof cfg.temporalBoostScore === \"number\" ? cfg.temporalBoostScore : 0.15,\n temporalDecayEnabled: cfg.temporalDecayEnabled !== false,\n tagMemoryEnabled: cfg.tagMemoryEnabled === true,\n tagMaxPerMemory: typeof cfg.tagMaxPerMemory === \"number\" ? cfg.tagMaxPerMemory : 5,\n tagIndexMaxEntries:\n typeof cfg.tagIndexMaxEntries === \"number\" ? cfg.tagIndexMaxEntries : 10000,\n tagRecallBoost: typeof cfg.tagRecallBoost === \"number\" ? cfg.tagRecallBoost : 0.15,\n tagRecallMaxMatches: typeof cfg.tagRecallMaxMatches === \"number\" ? cfg.tagRecallMaxMatches : 10,\n // v8.2: Multi-graph memory (PR 18)\n multiGraphMemoryEnabled: cfg.multiGraphMemoryEnabled === true,\n graphRecallEnabled: cfg.graphRecallEnabled === true,\n graphRecallMaxExpansions:\n typeof cfg.graphRecallMaxExpansions === \"number\" ? cfg.graphRecallMaxExpansions : 3,\n graphRecallMaxPerSeed:\n typeof cfg.graphRecallMaxPerSeed === \"number\" ? cfg.graphRecallMaxPerSeed : 5,\n graphRecallMinEdgeWeight:\n typeof cfg.graphRecallMinEdgeWeight === \"number\" ? cfg.graphRecallMinEdgeWeight : 0.1,\n graphRecallShadowEnabled: cfg.graphRecallShadowEnabled === true,\n graphRecallSnapshotEnabled: cfg.graphRecallSnapshotEnabled === true,\n graphRecallShadowSampleRate:\n typeof cfg.graphRecallShadowSampleRate === \"number\" ? cfg.graphRecallShadowSampleRate : 0.1,\n graphRecallExplainToolEnabled: cfg.graphRecallExplainToolEnabled === true,\n graphRecallStoreColdMirror: cfg.graphRecallStoreColdMirror === true,\n graphRecallColdMirrorCollection:\n typeof cfg.graphRecallColdMirrorCollection === \"string\" &&\n cfg.graphRecallColdMirrorCollection.trim().length > 0\n ? cfg.graphRecallColdMirrorCollection.trim()\n : undefined,\n graphRecallColdMirrorMinAgeDays:\n typeof cfg.graphRecallColdMirrorMinAgeDays === \"number\" ? cfg.graphRecallColdMirrorMinAgeDays : 7,\n graphRecallUseEntityPriors: cfg.graphRecallUseEntityPriors === true,\n graphRecallEntityPriorBoost:\n typeof cfg.graphRecallEntityPriorBoost === \"number\" ? cfg.graphRecallEntityPriorBoost : 0.2,\n graphRecallPreferHubSeeds: cfg.graphRecallPreferHubSeeds === true,\n graphRecallHubBias:\n typeof cfg.graphRecallHubBias === \"number\" ? cfg.graphRecallHubBias : 0.3,\n graphRecallRecencyHalfLifeDays:\n typeof cfg.graphRecallRecencyHalfLifeDays === \"number\" ? cfg.graphRecallRecencyHalfLifeDays : 30,\n graphRecallDampingFactor:\n typeof cfg.graphRecallDampingFactor === \"number\" ? cfg.graphRecallDampingFactor : 0.85,\n graphRecallMaxSeedNodes:\n typeof cfg.graphRecallMaxSeedNodes === \"number\" ? cfg.graphRecallMaxSeedNodes : 10,\n graphRecallMaxExpandedNodes:\n typeof cfg.graphRecallMaxExpandedNodes === \"number\" ? cfg.graphRecallMaxExpandedNodes : 30,\n graphRecallMaxTrailPerNode:\n typeof cfg.graphRecallMaxTrailPerNode === \"number\" ? cfg.graphRecallMaxTrailPerNode : 5,\n graphRecallMinSeedScore:\n typeof cfg.graphRecallMinSeedScore === \"number\" ? cfg.graphRecallMinSeedScore : 0.3,\n graphRecallExpansionScoreThreshold:\n typeof cfg.graphRecallExpansionScoreThreshold === \"number\"\n ? cfg.graphRecallExpansionScoreThreshold\n : 0.2,\n graphRecallExplainMaxPaths:\n typeof cfg.graphRecallExplainMaxPaths === \"number\" ? cfg.graphRecallExplainMaxPaths : 3,\n graphRecallExplainMaxChars:\n typeof cfg.graphRecallExplainMaxChars === \"number\" ? cfg.graphRecallExplainMaxChars : 500,\n graphRecallExplainEdgeLimit:\n typeof cfg.graphRecallExplainEdgeLimit === \"number\" ? cfg.graphRecallExplainEdgeLimit : 5,\n graphRecallExplainEnabled: cfg.graphRecallExplainEnabled === true,\n graphRecallEntityHintsEnabled: cfg.graphRecallEntityHintsEnabled === true,\n graphRecallEntityHintMax:\n typeof cfg.graphRecallEntityHintMax === \"number\" ? cfg.graphRecallEntityHintMax : 3,\n graphRecallEntityHintMaxChars:\n typeof cfg.graphRecallEntityHintMaxChars === \"number\" ? cfg.graphRecallEntityHintMaxChars : 200,\n graphRecallSnapshotDir:\n typeof cfg.graphRecallSnapshotDir === \"string\" && cfg.graphRecallSnapshotDir.trim().length > 0\n ? cfg.graphRecallSnapshotDir.trim()\n : path.join(memoryDir, \"state\", \"graph\"),\n graphRecallEnableTrace: cfg.graphRecallEnableTrace === true,\n graphRecallEnableDebug: cfg.graphRecallEnableDebug === true,\n graphExpandedIntentEnabled: cfg.graphExpandedIntentEnabled !== false,\n graphAssistInFullModeEnabled: cfg.graphAssistInFullModeEnabled !== false,\n graphAssistShadowEvalEnabled: cfg.graphAssistShadowEvalEnabled === true,\n graphAssistMinSeedResults:\n typeof cfg.graphAssistMinSeedResults === \"number\"\n ? Math.max(1, Math.floor(cfg.graphAssistMinSeedResults))\n : 3,\n entityGraphEnabled: cfg.entityGraphEnabled !== false,\n timeGraphEnabled: cfg.timeGraphEnabled !== false,\n graphWriteSessionAdjacencyEnabled: cfg.graphWriteSessionAdjacencyEnabled !== false,\n causalGraphEnabled: cfg.causalGraphEnabled !== false,\n maxGraphTraversalSteps:\n typeof cfg.maxGraphTraversalSteps === \"number\" ? Math.max(0, cfg.maxGraphTraversalSteps) : 3,\n graphActivationDecay:\n typeof cfg.graphActivationDecay === \"number\"\n ? Math.min(1, Math.max(0, cfg.graphActivationDecay))\n : 0.7,\n graphExpansionActivationWeight:\n typeof cfg.graphExpansionActivationWeight === \"number\"\n ? Math.min(1, Math.max(0, cfg.graphExpansionActivationWeight))\n : 0.65,\n graphExpansionBlendMin:\n typeof cfg.graphExpansionBlendMin === \"number\"\n ? Math.min(1, Math.max(0, cfg.graphExpansionBlendMin))\n : 0.05,\n graphExpansionBlendMax:\n typeof cfg.graphExpansionBlendMax === \"number\"\n ? Math.min(1, Math.max(0, cfg.graphExpansionBlendMax))\n : 0.95,\n maxEntityGraphEdgesPerMemory:\n typeof cfg.maxEntityGraphEdgesPerMemory === \"number\"\n ? Math.max(0, cfg.maxEntityGraphEdgesPerMemory)\n : 10,\n delinearizeEnabled: cfg.delinearizeEnabled !== false,\n recallConfidenceGateEnabled: cfg.recallConfidenceGateEnabled === true,\n recallConfidenceGateThreshold:\n typeof cfg.recallConfidenceGateThreshold === \"number\"\n ? Math.max(0, Math.min(1, cfg.recallConfidenceGateThreshold))\n : 0.12,\n causalRuleExtractionEnabled: cfg.causalRuleExtractionEnabled === true,\n memoryReconstructionEnabled: cfg.memoryReconstructionEnabled === true,\n memoryReconstructionMaxExpansions:\n typeof cfg.memoryReconstructionMaxExpansions === \"number\" ? Math.max(0, Math.round(cfg.memoryReconstructionMaxExpansions)) : 3,\n graphLateralInhibitionEnabled: cfg.graphLateralInhibitionEnabled !== false,\n graphLateralInhibitionBeta:\n typeof cfg.graphLateralInhibitionBeta === \"number\"\n ? Math.max(0, Math.min(1, cfg.graphLateralInhibitionBeta))\n : 0.15,\n graphLateralInhibitionTopM:\n typeof cfg.graphLateralInhibitionTopM === \"number\"\n ? Math.max(0, Math.round(cfg.graphLateralInhibitionTopM))\n : 7,\n // v8.2: Temporal Memory Tree\n temporalMemoryTreeEnabled: cfg.temporalMemoryTreeEnabled === true,\n tmtHourlyMinMemories:\n typeof cfg.tmtHourlyMinMemories === \"number\" ? cfg.tmtHourlyMinMemories : 3,\n tmtSummaryMaxTokens:\n typeof cfg.tmtSummaryMaxTokens === \"number\" ? cfg.tmtSummaryMaxTokens : 300,\n // Lossless Context Management (LCM)\n lcmEnabled: cfg.lcmEnabled === true,\n lcmLeafBatchSize:\n typeof cfg.lcmLeafBatchSize === \"number\" ? Math.max(2, Math.floor(cfg.lcmLeafBatchSize)) : 8,\n lcmRollupFanIn:\n typeof cfg.lcmRollupFanIn === \"number\" ? Math.max(2, Math.floor(cfg.lcmRollupFanIn)) : 4,\n lcmFreshTailTurns:\n typeof cfg.lcmFreshTailTurns === \"number\" ? Math.max(1, Math.floor(cfg.lcmFreshTailTurns)) : 16,\n lcmMaxDepth:\n typeof cfg.lcmMaxDepth === \"number\" ? Math.max(1, Math.floor(cfg.lcmMaxDepth)) : 5,\n lcmRecallBudgetShare:\n typeof cfg.lcmRecallBudgetShare === \"number\"\n ? Math.max(0, Math.min(1, cfg.lcmRecallBudgetShare))\n : 0.15,\n lcmDeterministicMaxTokens:\n typeof cfg.lcmDeterministicMaxTokens === \"number\"\n ? Math.max(64, Math.floor(cfg.lcmDeterministicMaxTokens))\n : 512,\n lcmArchiveRetentionDays:\n typeof cfg.lcmArchiveRetentionDays === \"number\"\n ? Math.max(1, Math.floor(cfg.lcmArchiveRetentionDays))\n : 90,\n\n // v9.1 Parallel Specialized Retrieval\n parallelRetrievalEnabled: cfg.parallelRetrievalEnabled === true,\n parallelAgentWeights: (() => {\n const w = cfg.parallelAgentWeights as Record<string, unknown> | undefined;\n return {\n direct: typeof w?.direct === \"number\" ? Math.max(0, w.direct) : 1.0,\n contextual: typeof w?.contextual === \"number\" ? Math.max(0, w.contextual) : 0.7,\n temporal: typeof w?.temporal === \"number\" ? Math.max(0, w.temporal) : 0.85,\n };\n })(),\n parallelMaxResultsPerAgent:\n typeof cfg.parallelMaxResultsPerAgent === \"number\"\n ? Math.max(0, Math.floor(cfg.parallelMaxResultsPerAgent))\n : 20,\n };\n}\n\nfunction clampNonNegativeNumber(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n return Math.max(0, Math.floor(value));\n}\n\nfunction parseRecallSectionEntry(raw: unknown): RecallSectionConfig {\n const entry =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : {};\n return {\n id: typeof entry.id === \"string\" ? entry.id.trim() : \"\",\n enabled: entry.enabled !== false,\n maxChars:\n entry.maxChars === null\n ? null\n : clampNonNegativeNumber(entry.maxChars),\n maxHints: clampNonNegativeNumber(entry.maxHints),\n maxSupportingFacts: clampNonNegativeNumber(entry.maxSupportingFacts),\n maxRelatedEntities: clampNonNegativeNumber(entry.maxRelatedEntities),\n consolidateTriggerLines: clampNonNegativeNumber(entry.consolidateTriggerLines),\n consolidateTargetLines: clampNonNegativeNumber(entry.consolidateTargetLines),\n maxEntities: clampNonNegativeNumber(entry.maxEntities),\n maxResults: clampNonNegativeNumber(entry.maxResults),\n recentTurns: clampNonNegativeNumber(entry.recentTurns),\n maxTurns: clampNonNegativeNumber(entry.maxTurns),\n maxTokens: clampNonNegativeNumber(entry.maxTokens),\n lookbackHours: clampNonNegativeNumber(entry.lookbackHours),\n maxCount: clampNonNegativeNumber(entry.maxCount),\n topK: clampNonNegativeNumber(entry.topK),\n timeoutMs: clampNonNegativeNumber(entry.timeoutMs),\n maxPatterns: clampNonNegativeNumber(entry.maxPatterns),\n maxRubrics: clampNonNegativeNumber(entry.maxRubrics),\n };\n}\n\nfunction buildDefaultRecallPipeline(cfg: Record<string, unknown>): RecallSectionConfig[] {\n return [\n {\n id: \"shared-context\",\n enabled: cfg.sharedContextEnabled === true,\n maxChars:\n typeof cfg.sharedContextMaxInjectChars === \"number\"\n ? Math.max(0, Math.floor(cfg.sharedContextMaxInjectChars))\n : 4000,\n },\n {\n id: \"profile\",\n enabled: true,\n consolidateTriggerLines: 100,\n consolidateTargetLines: 50,\n },\n {\n id: \"identity-continuity\",\n enabled: cfg.identityContinuityEnabled === true,\n },\n {\n id: \"entity-retrieval\",\n enabled: cfg.entityRetrievalEnabled !== false,\n maxChars:\n typeof cfg.entityRetrievalMaxChars === \"number\"\n ? Math.max(0, Math.floor(cfg.entityRetrievalMaxChars))\n : 2400,\n maxHints:\n typeof cfg.entityRetrievalMaxHints === \"number\"\n ? Math.max(0, Math.floor(cfg.entityRetrievalMaxHints))\n : 2,\n maxSupportingFacts:\n typeof cfg.entityRetrievalMaxSupportingFacts === \"number\"\n ? Math.max(0, Math.floor(cfg.entityRetrievalMaxSupportingFacts))\n : 6,\n maxRelatedEntities:\n typeof cfg.entityRetrievalMaxRelatedEntities === \"number\"\n ? Math.max(0, Math.floor(cfg.entityRetrievalMaxRelatedEntities))\n : 3,\n recentTurns:\n typeof cfg.entityRetrievalRecentTurns === \"number\"\n ? Math.max(0, Math.floor(cfg.entityRetrievalRecentTurns))\n : 6,\n },\n {\n id: \"knowledge-index\",\n enabled: cfg.knowledgeIndexEnabled !== false,\n maxChars:\n typeof cfg.knowledgeIndexMaxChars === \"number\"\n ? Math.max(0, Math.floor(cfg.knowledgeIndexMaxChars))\n : 4000,\n maxEntities:\n typeof cfg.knowledgeIndexMaxEntities === \"number\"\n ? Math.max(0, Math.floor(cfg.knowledgeIndexMaxEntities))\n : 40,\n },\n { id: \"verbatim-artifacts\", enabled: cfg.verbatimArtifactsEnabled === true },\n { id: \"memory-boxes\", enabled: cfg.memoryBoxesEnabled === true },\n { id: \"temporal-memory-tree\", enabled: cfg.temporalMemoryTreeEnabled === true },\n { id: \"lcm-compressed-history\", enabled: cfg.lcmEnabled === true },\n {\n id: \"objective-state\",\n enabled: cfg.objectiveStateRecallEnabled === true,\n maxResults: 4,\n maxChars: 1800,\n },\n {\n id: \"causal-trajectories\",\n enabled: cfg.causalTrajectoryRecallEnabled === true,\n maxResults: 3,\n maxChars: 2200,\n },\n {\n id: \"trust-zones\",\n enabled: cfg.trustZoneRecallEnabled === true,\n maxResults: 3,\n maxChars: 1800,\n },\n {\n id: \"harmonic-retrieval\",\n enabled: cfg.harmonicRetrievalEnabled === true,\n maxResults: 3,\n maxChars: 2200,\n },\n {\n id: \"verified-episodes\",\n enabled: cfg.verifiedRecallEnabled === true,\n maxResults: 3,\n maxChars: 1800,\n },\n {\n id: \"verified-rules\",\n enabled: cfg.semanticRuleVerificationEnabled === true,\n maxResults: 3,\n maxChars: 1800,\n },\n {\n id: \"work-products\",\n enabled: cfg.workProductRecallEnabled === true,\n maxResults: 3,\n maxChars: 1800,\n },\n {\n id: \"memories\",\n enabled: true,\n maxResults:\n typeof cfg.qmdMaxResults === \"number\"\n ? Math.max(0, Math.floor(cfg.qmdMaxResults))\n : 8,\n },\n {\n id: \"compression-guidelines\",\n enabled: cfg.compressionGuidelineLearningEnabled === true,\n },\n {\n id: \"native-knowledge\",\n enabled: cfg.nativeKnowledge && typeof cfg.nativeKnowledge === \"object\"\n ? (cfg.nativeKnowledge as Record<string, unknown>).enabled === true\n : false,\n maxResults:\n cfg.nativeKnowledge && typeof cfg.nativeKnowledge === \"object\" &&\n typeof (cfg.nativeKnowledge as Record<string, unknown>).maxResults === \"number\"\n ? Math.max(0, Math.floor((cfg.nativeKnowledge as Record<string, unknown>).maxResults as number))\n : 4,\n maxChars:\n cfg.nativeKnowledge && typeof cfg.nativeKnowledge === \"object\" &&\n typeof (cfg.nativeKnowledge as Record<string, unknown>).maxChars === \"number\"\n ? Math.max(0, Math.floor((cfg.nativeKnowledge as Record<string, unknown>).maxChars as number))\n : 2400,\n },\n {\n id: \"transcript\",\n enabled: cfg.transcriptEnabled !== false,\n maxTurns:\n typeof cfg.maxTranscriptTurns === \"number\"\n ? Math.max(0, Math.floor(cfg.maxTranscriptTurns))\n : 50,\n maxTokens:\n typeof cfg.maxTranscriptTokens === \"number\"\n ? Math.max(0, Math.floor(cfg.maxTranscriptTokens))\n : 1000,\n lookbackHours:\n typeof cfg.transcriptRecallHours === \"number\"\n ? Math.max(0, Math.floor(cfg.transcriptRecallHours))\n : 12,\n },\n {\n id: \"summaries\",\n enabled: cfg.hourlySummariesEnabled !== false,\n maxCount:\n typeof cfg.maxSummaryCount === \"number\"\n ? Math.max(0, Math.floor(cfg.maxSummaryCount))\n : 6,\n lookbackHours:\n typeof cfg.summaryRecallHours === \"number\"\n ? Math.max(0, Math.floor(cfg.summaryRecallHours))\n : 24,\n },\n {\n id: \"conversation-recall\",\n enabled: cfg.conversationIndexEnabled === true,\n topK:\n typeof cfg.conversationRecallTopK === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationRecallTopK))\n : 3,\n maxChars:\n typeof cfg.conversationRecallMaxChars === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationRecallMaxChars))\n : 2500,\n timeoutMs:\n typeof cfg.conversationRecallTimeoutMs === \"number\"\n ? Math.max(0, Math.floor(cfg.conversationRecallTimeoutMs))\n : 800,\n },\n {\n id: \"compounding\",\n enabled: cfg.compoundingEnabled === true && cfg.compoundingInjectEnabled !== false,\n maxPatterns: 40,\n maxRubrics: 4,\n },\n { id: \"questions\", enabled: cfg.injectQuestions === true },\n ];\n}\n\nfunction buildRecallPipelineConfig(cfg: Record<string, unknown>): RecallPipelineConfig {\n const maxMemoryTokens =\n typeof cfg.maxMemoryTokens === \"number\"\n ? Math.max(0, Math.floor(cfg.maxMemoryTokens))\n : 2000;\n const recallBudgetCharsRaw = clampNonNegativeNumber(cfg.recallBudgetChars);\n const recallBudgetChars = recallBudgetCharsRaw ?? maxMemoryTokens * 4;\n\n const rawPipeline = cfg.recallPipeline;\n const pipeline = Array.isArray(rawPipeline)\n ? rawPipeline.map(parseRecallSectionEntry).filter((entry) => entry.id.length > 0)\n : buildDefaultRecallPipeline(cfg);\n\n return { recallBudgetChars, pipeline };\n}\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,UAAU;AAgBjB,IAAM,qBAAqB,KAAK;AAAA,EAC9B,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,wBAAwB,KAAK;AAAA,EACjC,eAAe;AAAA,EACf;AAAA,EACA;AACF;AAEA,SAAS,eAAe,OAAuB;AAC7C,QAAM,WAAW,MAAM,QAAQ,mCAAmC,CAAC,GAAG,WAAmB;AACvF,UAAM,WAAW,WAAW,MAAM;AAClC,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,wBAAwB,MAAM,aAAa;AAAA,IAC7D;AACA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,YAAY,SAAS,MAAM,aAAa;AAC9C,MAAI,WAAW;AACb,UAAM,IAAI,MAAM,+CAA+C,UAAU,CAAC,CAAC,EAAE;AAAA,EAC/E;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,OAA2B,QAA8C;AACvG,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,MAAI;AACJ,MAAI;AACF,aAAS,IAAI,IAAI,OAAO;AAAA,EAC1B,QAAQ;AACN,QAAI,KAAK,uCAAuC,MAAM,mBAAmB;AACzE,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,aAAa,YAAY,OAAO,aAAa,SAAS;AAC/D,QAAI;AAAA,MACF,+BAA+B,MAAM,6BAA6B,OAAO,SAAS,QAAQ,KAAK,EAAE,CAAC;AAAA,IACpG;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,aAAa,SAAS;AAC/B,QAAI,KAAK,sBAAsB,MAAM,uCAAuC;AAAA,EAC9E;AAGA,MAAI,MAAM,OAAO,SAAS;AAC1B,SAAO,IAAI,SAAS,GAAG,EAAG,OAAM,IAAI,MAAM,GAAG,EAAE;AAC/C,SAAO;AACT;AAEA,SAAS,2BAA2B,KAAc,UAA0B;AAC1E,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAM,UAAU,IAAI,KAAK;AACzB,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,QAAM,aAAa,QAChB,QAAQ,OAAO,GAAG,EAClB,MAAM,GAAG,EACT,OAAO,CAAC,YAAY,QAAQ,SAAS,KAAK,YAAY,OAAO,YAAY,IAAI,EAC7E,KAAK,GAAG;AACX,SAAO,WAAW,SAAS,IAAI,aAAa;AAC9C;AAEA,IAAM,gBAAmC,CAAC,QAAQ,OAAO,UAAU,MAAM;AACzE,IAAM,iBAAgC,CAAC,SAAS,WAAW,YAAY;AACvE,IAAM,iCAA0D,CAAC,iBAAiB,WAAW,MAAM;AACnG,IAAM,0BAAgD;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACO,IAAM,0BAA0B,oBAAI,IAAI;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,yCAAyC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,2BAA+D;AAAA,EACnE,UAAU;AACZ;AAEA,IAAM,oBAAyE;AAAA,EAC7E,cAAc;AAAA,IACZ,iBAAiB;AAAA,IACjB,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,qCAAqC;AAAA,IACrC,+CAA+C;AAAA,IAC/C,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,EAC/B;AAAA,EACA,UAAU;AAAA,IACR,iBAAiB;AAAA,IACjB,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,qCAAqC;AAAA,IACrC,+CAA+C;AAAA,IAC/C,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,EAC/B;AAAA,EACA,gBAAgB;AAAA,IACd,iBAAiB;AAAA,IACjB,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,qCAAqC;AAAA,IACrC,+CAA+C;AAAA,IAC/C,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,EAC/B;AAAA,EACA,mBAAmB;AAAA,IACjB,iBAAiB;AAAA,IACjB,mCAAmC;AAAA,IACnC,gCAAgC;AAAA,IAChC,2BAA2B;AAAA,IAC3B,0BAA0B;AAAA,IAC1B,4BAA4B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,2BAA2B;AAAA,IAC3B,kBAAkB;AAAA,IAClB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,IACpB,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,qCAAqC;AAAA,IACrC,+CAA+C;AAAA,IAC/C,oCAAoC;AAAA,IACpC,6BAA6B;AAAA,IAC7B,6BAA6B;AAAA,EAC/B;AACF;AAEA,SAAS,sBAAsB,OAAgD;AAC7E,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,aAAa,MAAM,KAAK;AAC9B,MAAI,wBAAwB,SAAS,UAAgC,GAAG;AACtE,WAAO;AAAA,EACT;AACA,SAAO,yBAAyB,UAAU;AAC5C;AAEO,SAAS,YAAY,KAA4B;AACtD,QAAM,UACJ,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,IAC/C,MACD,CAAC;AACP,QAAM,iBAAiB,sBAAsB,QAAQ,cAAc;AACnE,QAAM,MAAM,iBACR;AAAA,IACE,GAAG,kBAAkB,cAAc;AAAA,IACnC,GAAG;AAAA,IACH;AAAA,EACF,IACA;AAEJ,MAAI;AACJ,MAAI,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,SAAS,GAAG;AACvE,aAAS,eAAe,IAAI,YAAY;AAAA,EAC1C,OAAO;AACL,aAAS,QAAQ,IAAI;AAAA,EACvB;AAKA,QAAM,QACJ,OAAO,IAAI,UAAU,YAAY,IAAI,MAAM,SAAS,IAChD,IAAI,QACJ;AACN,QAAM,cACJ,IAAI,gBAAgB,cAAc,IAAI,gBAAgB,WAClD,IAAI,cACJ;AAEN,QAAM,YAAY,IAAI;AACtB,QAAM,kBACJ,aAAa,cAAc,SAAS,SAA4B,IAC3D,YACD;AAEN,QAAM,aAAa,IAAI;AACvB,QAAM,cACJ,cAAc,eAAe,SAAS,UAAyB,IAC1D,aACD;AAEN,QAAM,YACJ,OAAO,IAAI,cAAc,YAAY,IAAI,UAAU,SAAS,IACxD,IAAI,YACJ;AACN,QAAM,2BAA2B,IAAI;AACrC,QAAM,wBACJ,4BACK,+BAA+B,SAAS,wBAAiD,IACzF,2BACD;AACN,QAAM,4BAA4B,IAAI,8BAA8B;AACpE,QAAM,uBAAoD,MAAM,QAAQ,IAAI,oBAAoB,IAC3F,IAAI,qBACF,IAAI,CAAC,UAAU;AAAA,IACd,UACE,OAAO,MAAM,aAAa,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,QAAQ,CAAC,IAAI;AAAA,IAChF,mBACE,OAAO,MAAM,sBAAsB,WAC/B,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,iBAAiB,CAAC,IAC9C;AAAA,IACN,oBACE,OAAO,MAAM,uBAAuB,WAChC,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,kBAAkB,CAAC,IAC/C;AAAA,EACR,EAAE,EACD,OAAO,CAAC,SAAS,KAAK,WAAW,CAAC,IACrC,iCAAiC;AAErC,QAAM,iBAAkC,MAAM,QAAQ,IAAI,4BAA4B,IACjF,IAAI,6BAAuC,IAAI,CAAC,OAAO;AAAA,IACtD,OAAO,OAAO,GAAG,UAAU,WAAW,EAAE,QAAQ;AAAA,IAChD,WAAW,OAAO,GAAG,cAAc,WAAW,EAAE,YAAY;AAAA,EAC9D,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,SAAS,KAAK,EAAE,UAAU,SAAS,CAAC,IAC9D,CAAC;AAGL,QAAM,aACJ,IAAI,eAAe,OAAO,IAAI,gBAAgB,YAAY,CAAC,MAAM,QAAQ,IAAI,WAAW,IACnF,IAAI,cACL;AACN,QAAM,iBAAiB,YAAY,YAAY;AAC/C,QAAM,cAAc,iBAChB;AAAA,IACE,SAAS;AAAA,IACT,aAAa,YAAY,gBAAgB;AAAA,IACzC,iBACE,OAAO,YAAY,oBAAoB,WAAW,WAAW,kBAAkB;AAAA,IACjF,eACE,OAAO,YAAY,kBAAkB,WAAW,WAAW,gBAAgB;AAAA,IAC7E,WAAW,MAAM,QAAQ,YAAY,SAAS,IACzC,WAAY,YACb,CAAC,eAAe,WAAW;AAAA,IAC/B,eAAe,YAAY,kBAAkB;AAAA,IAC7C,gBACE,OAAO,YAAY,mBAAmB,WAAW,WAAW,iBAAiB;AAAA,IAC/E,qBACE,OAAO,YAAY,wBAAwB,WACvC,WAAW,sBACX;AAAA,IACN,aAAa,MAAM,QAAQ,YAAY,WAAW,IAC7C,WAAY,cACb,CAAC,aAAa;AAAA,IAClB,YACE,OAAO,YAAY,eAAe,YAAY,WAAW,WAAW,SAAS,IACxE,WAAW,aACZ;AAAA,IACN,kBACE,OAAO,YAAY,qBAAqB,WAAW,WAAW,mBAAmB,IAAI,KAAK;AAAA,IAC5F,oBAAoB,YAAY,uBAAuB;AAAA,IACvD,iBACE,OAAO,YAAY,oBAAoB,YAAY,WAAW,gBAAgB,SAAS,IAClF,WAAW,kBACZ;AAAA,IACN,cAAc,YAAY,iBAAiB;AAAA,IAC3C,WACE,OAAO,YAAY,cAAc,YAAY,WAAW,UAAU,SAAS,IACtE,WAAW,YACZ;AAAA,EACR,IACA;AAEJ,QAAM,qBACJ,IAAI,mBAAmB,OAAO,IAAI,oBAAoB,YAAY,CAAC,MAAM,QAAQ,IAAI,eAAe,IAC/F,IAAI,kBACL;AACN,QAAM,kBAAkB,oBAAoB,YAAY,OACpD;AAAA,IACE,SAAS;AAAA,IACT,cAAc,MAAM,QAAQ,mBAAmB,YAAY,IACtD,mBAAmB,aACnB,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,eAAe,WAAW;AAAA,IAC/B,eACE,OAAO,mBAAmB,kBAAkB,WACxC,KAAK,IAAI,KAAK,KAAK,MAAM,mBAAmB,aAAa,CAAC,IAC1D;AAAA,IACN,YACE,OAAO,mBAAmB,eAAe,WACrC,KAAK,IAAI,GAAG,KAAK,MAAM,mBAAmB,UAAU,CAAC,IACrD;AAAA,IACN,UACE,OAAO,mBAAmB,aAAa,WACnC,KAAK,IAAI,GAAG,KAAK,MAAM,mBAAmB,QAAQ,CAAC,IACnD;AAAA,IACN,UACE,2BAA2B,mBAAmB,UAAU,wBAAwB;AAAA,IAClF,mBACE,mBAAmB,qBACjB,OAAO,mBAAmB,sBAAsB,YAChD,CAAC,MAAM,QAAQ,mBAAmB,iBAAiB,KAClD,mBAAmB,kBAA8C,YAAY,OAC5E;AAAA,MACA,SAAS;AAAA,MACT,gBAAgB,MAAM,QAAS,mBAAmB,kBAA8C,cAAc,IACxG,mBAAmB,kBAA8C,eAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,eAAe,aAAa,SAAS;AAAA,MAC1C,cAAc,MAAM,QAAS,mBAAmB,kBAA8C,YAAY,IACpG,mBAAmB,kBAA8C,aAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,mBAAmB,kBAAkB;AAAA,MAC1C,mBAAmB,MAAM,QAAS,mBAAmB,kBAA8C,iBAAiB,IAC9G,mBAAmB,kBAA8C,kBAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,yBAAyB,mBAAmB;AAAA,MACjD,qBAAqB,MAAM,QAAS,mBAAmB,kBAA8C,mBAAmB,IAClH,mBAAmB,kBAA8C,oBAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC;AAAA,MACL,mBAAmB,MAAM,QAAS,mBAAmB,kBAA8C,iBAAiB,IAC9G,mBAAmB,kBAA8C,kBAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC;AAAA,MACL,cAAc;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAI,MAAM,QAAS,mBAAmB,kBAA8C,YAAY,IAC1F,mBAAmB,kBAA8C,aAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC;AAAA,MACP,EAAE,OAAO,CAAC,OAAO,OAAO,UAAU,MAAM,QAAQ,KAAK,MAAM,KAAK;AAAA,MAChE,iBAAiB,MAAM,QAAS,mBAAmB,kBAA8C,eAAe,IAC1G,mBAAmB,kBAA8C,gBAClE,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC;AAAA,IACP,IACE;AAAA,IACN,gBAAgB,MAAM,QAAQ,mBAAmB,cAAc,IAC1D,mBAAmB,eACnB,OAAO,CAAC,UAA4C,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,CAAC,EACjH,IAAI,CAAC,OAAO,UAAU;AACrB,YAAM,YAAY,SAAS,QAAQ,CAAC;AACpC,aAAO;AAAA,QACL,IACE,OAAO,MAAM,OAAO,YAAY,MAAM,GAAG,KAAK,EAAE,SAAS,IACrD,MAAM,GAAG,KAAK,IACd;AAAA,QACN,SACE,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,KAAK,EAAE,SAAS,IAC/D,MAAM,QAAQ,KAAK,IACnB;AAAA,QACN,cAAc,MAAM,QAAQ,MAAM,YAAY,IACzC,MAAM,aACN,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,SAAS;AAAA,QACd,cAAc,MAAM,QAAQ,MAAM,YAAY,IACzC,MAAM,aACN,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,gBAAgB,eAAe,YAAY,YAAY,aAAa,YAAY,UAAU;AAAA,QAC/F,WACE,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,KAAK,EAAE,SAAS,IACnE,MAAM,UAAU,KAAK,IACrB;AAAA,QACN,cACE,OAAO,MAAM,iBAAiB,YAAY,MAAM,aAAa,KAAK,EAAE,SAAS,IACzE,MAAM,aAAa,KAAK,IACxB;AAAA,QACN,aAAa,MAAM,QAAQ,MAAM,WAAW,IACvC,MAAM,YACN,OAAO,CAAC,UAA4C,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,CAAC,EACjH,IAAI,CAAC,UAAU;AAAA,UACd,YACE,OAAO,KAAK,eAAe,YAAY,KAAK,WAAW,KAAK,EAAE,SAAS,IACnE,KAAK,WAAW,KAAK,IACrB;AAAA,UACN,WACE,OAAO,KAAK,cAAc,YAAY,KAAK,UAAU,KAAK,EAAE,SAAS,IACjE,KAAK,UAAU,KAAK,IACpB;AAAA,UACN,cACE,OAAO,KAAK,iBAAiB,YAAY,KAAK,aAAa,KAAK,EAAE,SAAS,IACvE,KAAK,aAAa,KAAK,IACvB;AAAA,QACR,EAAE,EACD,OAAO,CAAC,SAAS,KAAK,WAAW,SAAS,CAAC,IAC5C,CAAC;AAAA,QACL,mBAAmB,MAAM,QAAQ,MAAM,iBAAiB,IACnD,MAAM,kBACN,OAAO,CAAC,UAA2B,OAAO,UAAU,QAAQ,EAC5D,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,IACf,CAAC,YAAY;AAAA,QACjB,sBAAsB,MAAM,yBAAyB;AAAA,MACvD;AAAA,IACF,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,QAAQ,SAAS,CAAC,IAC3C,CAAC;AAAA,EACP,IACA;AAEJ,QAAM,qBACJ,IAAI,mBAAmB,OAAO,IAAI,oBAAoB,YAAY,CAAC,MAAM,QAAQ,IAAI,eAAe,IAC/F,IAAI,kBACL;AACN,QAAM,kBAAkB;AAAA,IACtB,SAAS,oBAAoB,YAAY;AAAA,IACzC,MACE,OAAO,oBAAoB,SAAS,YAAY,mBAAmB,KAAK,KAAK,EAAE,SAAS,IACpF,mBAAmB,KAAK,KAAK,IAC7B;AAAA,IACN,MACE,OAAO,oBAAoB,SAAS,WAChC,KAAK,IAAI,GAAG,KAAK,MAAM,mBAAmB,IAAI,CAAC,IAC/C;AAAA,IACN,WACE,OAAO,oBAAoB,cAAc,YAAY,mBAAmB,UAAU,KAAK,EAAE,SAAS,IAC9F,eAAe,mBAAmB,SAAS,IAC3C,QAAQ,IAAI,gCAAgC,QAAQ,IAAI;AAAA,IAC9D,WACE,OAAO,oBAAoB,cAAc,YAAY,mBAAmB,UAAU,KAAK,EAAE,SAAS,IAC9F,eAAe,mBAAmB,SAAS,IAC3C,QAAQ,IAAI,kCAAkC,KAAK,KAAK;AAAA,IAC9D,cACE,OAAO,oBAAoB,iBAAiB,WACxC,KAAK,IAAI,GAAG,KAAK,MAAM,mBAAmB,YAAY,CAAC,IACvD;AAAA,EACR;AAEA,MAAI;AACJ,MAAI,OAAO,IAAI,kBAAkB,YAAY,IAAI,cAAc,SAAS,GAAG;AACzE,cAAU,uBAAuB,eAAe,IAAI,aAAa,GAAG,QAAQ;AAAA,EAC9E,OAAO;AACL,cAAU,uBAAuB,QAAQ,IAAI,iBAAiB,KAAK;AAAA,EACrE;AAEA,QAAM,mCACJ,IAAI,qCAAqC,QAAQ,IAAI,gCAAgC;AACvF,QAAM,qCACJ,OAAO,IAAI,uCAAuC,WAC9C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,kCAAkC,CAAC,IAC9D,OAAO,IAAI,kCAAkC,WAC3C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,6BAA6B,CAAC,IACzD;AACR,QAAM,uBAAuB,0BAA0B,GAAG;AAE1D,SAAO;AAAA,IACL,cAAc;AAAA,IACd,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBACE,OAAO,IAAI,mBAAmB,WAAW,IAAI,iBAAiB;AAAA,IAChE,kBACE,OAAO,IAAI,qBAAqB,WAAW,IAAI,mBAAmB;AAAA,IACpE,mBACE,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACtE,oBAAoB,MAAM,QAAQ,IAAI,kBAAkB,IACnD,IAAI,qBACL,CAAC;AAAA,IACL,iBACE,OAAO,IAAI,oBAAoB,WAAW,IAAI,kBAAkB;AAAA,IAClE;AAAA,IACA,YAAY,IAAI,eAAe;AAAA,IAC/B,eACE,OAAO,IAAI,kBAAkB,WACzB,IAAI,gBACJ;AAAA,IACN,eACE,OAAO,IAAI,kBAAkB,WAAW,IAAI,gBAAgB;AAAA,IAC9D,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,mBACE,OAAO,IAAI,sBAAsB,YAAY,IAAI,kBAAkB,SAAS,IACxE,IAAI,oBACJ;AAAA,IACN,mBACE,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACtE,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,2BACE,OAAO,IAAI,8BAA8B,WACrC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,yBAAyB,CAAC,IACrD;AAAA,IACN,+BACE,OAAO,IAAI,kCAAkC,WACzC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,6BAA6B,CAAC,IAC1D;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAC1C,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,8BAA8B,CAAC,IAC3D;AAAA,IACN,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,2BACE,IAAI,8BAA8B,WAC9B,WACA,IAAI,8BAA8B,UAChC,UACA;AAAA,IACR,SACE,OAAO,IAAI,YAAY,YAAY,IAAI,QAAQ,SAAS,IACpD,IAAI,UACJ;AAAA,IACN;AAAA,IACA,OAAO,IAAI,UAAU;AAAA,IACrB,iBAAiB,IAAI,oBAAoB;AAAA,IACzC;AAAA,IACA;AAAA,IACA,wBACE,OAAO,IAAI,2BAA2B,WAClC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,sBAAsB,CAAC,IAClD;AAAA,IACN,kCACE,OAAO,IAAI,qCAAqC,YAC5C,IAAI,mCACJ;AAAA,IACN,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,2BACE,OAAO,IAAI,8BAA8B,WACrC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,yBAAyB,CAAC,IACrD;AAAA,IACN;AAAA,IACA,iBAAiB,IAAI,oBAAoB;AAAA,IACzC,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA,IAC1E,cACE,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,SAAS,IAC9D,IAAI,eACJ;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,6BACE,OAAO,IAAI,gCAAgC,WACvC,IAAI,8BACJ;AAAA;AAAA,IAEN,eACE,OAAO,IAAI,kBAAkB,WAAW,IAAI,gBAAgB;AAAA,IAC9D,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,8BAA8B,IAAI,iCAAiC;AAAA;AAAA,IAEnE,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,0BACE,OAAO,IAAI,6BAA6B,WACpC,IAAI,2BACJ;AAAA,IACN,2BACE,OAAO,IAAI,8BAA8B,WACrC,IAAI,4BACJ;AAAA,IACN,eAAe,IAAI,kBAAkB;AAAA,IACrC,gBACE,IAAI,mBAAmB,UAAU,UAAU;AAAA,IAC7C,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA,IAC1E,iBACE,OAAO,IAAI,oBAAoB,WAAW,IAAI,kBAAkB;AAAA,IAClE,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,kBACE,OAAO,IAAI,qBAAqB,WAAW,IAAI,mBAAmB,KAAK,KAAK;AAAA,IAC9E,iBAAiB,IAAI,oBAAoB;AAAA;AAAA,IAEzC,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,+BACE,OAAO,IAAI,kCAAkC,WACzC,IAAI,gCACJ;AAAA,IACN,4BACE,OAAO,IAAI,+BAA+B,WACtC,IAAI,6BACJ;AAAA;AAAA,IAEN,iBAAiB,IAAI,oBAAoB;AAAA;AAAA,IACzC,sBACE,OAAO,IAAI,yBAAyB,WAAW,IAAI,uBAAuB;AAAA,IAC5E,mBACE,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACtE,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA;AAAA,IAEpF,+BAA+B,IAAI,kCAAkC;AAAA;AAAA,IACrE,kCACE,OAAO,IAAI,qCAAqC,WAAW,IAAI,mCAAmC;AAAA,IACpG,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,0BAA0B,IAAI,6BAA6B;AAAA;AAAA,IAE3D,sBAAsB,IAAI,yBAAyB;AAAA;AAAA;AAAA,IAEnD,kBAAkB,IAAI,qBAAqB;AAAA;AAAA,IAC3C,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA;AAAA,IAE1E,sBAAsB,IAAI,yBAAyB;AAAA;AAAA,IACnD,2BACE,OAAO,IAAI,8BAA8B,WAAW,IAAI,4BAA4B;AAAA,IACtF,2BACE,OAAO,IAAI,8BAA8B,WAAW,IAAI,4BAA4B;AAAA,IACtF,kCACE,OAAO,IAAI,qCAAqC,WAAW,IAAI,mCAAmC;AAAA,IACpG,4BAA4B,MAAM,QAAQ,IAAI,0BAA0B,IACnE,IAAI,6BACL,CAAC,cAAc,cAAc,YAAY,WAAW;AAAA;AAAA,IAExD,wBAAwB,IAAI,2BAA2B;AAAA;AAAA,IACvD,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA;AAAA;AAAA,IAG1E,mBAAmB,IAAI,sBAAsB;AAAA;AAAA,IAC7C,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,4BAA4B,MAAM,QAAQ,IAAI,0BAA0B,IACnE,IAAI,6BACL,CAAC,MAAM;AAAA;AAAA;AAAA,IAEX,uBACE,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA,IAC9E,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA;AAAA,IAE1E,mBAAmB,IAAI,sBAAsB;AAAA;AAAA,IAC7C,iBACE,OAAO,IAAI,oBAAoB,WAAW,IAAI,kBAAkB;AAAA;AAAA,IAElE,wBAAwB,IAAI,2BAA2B;AAAA;AAAA,IAEvD,wBAAwB,IAAI,2BAA2B;AAAA;AAAA,IACvD,mBAAmB,IAAI,sBAAsB;AAAA;AAAA,IAC7C,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,mCAAmC,IAAI,sCAAsC;AAAA,IAC7E,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,iBACE,OAAO,IAAI,oBAAoB,WAAW,IAAI,kBAAkB;AAAA,IAClE,cACE,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,SAAS,IAC9D,IAAI,eACJ;AAAA;AAAA;AAAA,IAEN,gCAAgC,IAAI,mCAAmC;AAAA,IACvE,iCAAiC,IAAI,oCAAoC;AAAA,IACzE,sCAAsC,IAAI,yCAAyC;AAAA,IACnF,+BACE,OAAO,IAAI,kCAAkC,WAAW,IAAI,gCAAgC;AAAA;AAAA,IAE9F,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,0BAA0B,IAAI,6BAA6B,UAAU,UAAU;AAAA,IAC/E,gCACE,OAAO,IAAI,mCAAmC,YAAY,IAAI,+BAA+B,SAAS,IAClG,IAAI,iCACJ;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAChG,sCACE,OAAO,IAAI,yCAAyC,WAChD,IAAI,uCACJ,KAAK;AAAA,IACX,gCAAgC,IAAI,mCAAmC;AAAA,IACvE,kCACE,OAAO,IAAI,qCAAqC,YAAY,IAAI,iCAAiC,KAAK,EAAE,SAAS,IAC7G,IAAI,iCAAiC,KAAK,IAC1C;AAAA,IACN,iCACE,OAAO,IAAI,oCAAoC,YAAY,IAAI,gCAAgC,KAAK,EAAE,SAAS,IAC3G,IAAI,gCAAgC,KAAK,IACzC;AAAA,IACN,+BACE,OAAO,IAAI,kCAAkC,YAAY,IAAI,8BAA8B,KAAK,EAAE,SAAS,IACvG,IAAI,8BAA8B,KAAK,IACvC;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,YAAY,IAAI,+BAA+B,KAAK,EAAE,SAAS,IACzG,IAAI,+BAA+B,KAAK,IACxC;AAAA,IACN,uCACE,OAAO,IAAI,0CAA0C,WACjD,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,qCAAqC,CAAC,IACjE;AAAA,IACN,uCACE,OAAO,IAAI,0CAA0C,WACjD,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,qCAAqC,CAAC,IACjE;AAAA,IACN,uCACE,OAAO,IAAI,0CAA0C,WACjD,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,qCAAqC,CAAC,IACjE;AAAA,IACN,oCACE,OAAO,IAAI,uCAAuC,WAC9C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,kCAAkC,CAAC,IAC9D;AAAA,IACN,kCACE,OAAO,IAAI,qCAAqC,WAC5C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,gCAAgC,CAAC,IAC5D;AAAA,IACN,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,mCAAmC,IAAI,sCAAsC;AAAA,IAC7E,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,gCAAgC,IAAI,mCAAmC;AAAA,IACvE,cACE,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,KAAK,EAAE,SAAS,IACrE,IAAI,aAAa,KAAK,IACtB,KAAK,KAAK,WAAW,SAAS,OAAO;AAAA,IAC3C,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,qCAAqC,IAAI,wCAAwC;AAAA,IACjF,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,wBACE,OAAO,IAAI,2BAA2B,YAAY,IAAI,uBAAuB,KAAK,EAAE,SAAS,IACzF,IAAI,uBAAuB,KAAK,IAChC,KAAK,KAAK,WAAW,SAAS,iBAAiB;AAAA,IACrD,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,0BACE,OAAO,IAAI,6BAA6B,YAAY,IAAI,yBAAyB,KAAK,EAAE,SAAS,IAC7F,IAAI,yBAAyB,KAAK,IAClC,KAAK,KAAK,WAAW,SAAS,qBAAqB;AAAA,IACzD,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,mBAAmB,IAAI,sBAAsB;AAAA,IAC7C,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,mBACE,OAAO,IAAI,sBAAsB,YAAY,IAAI,kBAAkB,KAAK,EAAE,SAAS,IAC/E,IAAI,kBAAkB,KAAK,IAC3B,KAAK,KAAK,WAAW,SAAS,aAAa;AAAA,IACjD,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,iCAAiC,IAAI,oCAAoC;AAAA,IACzE,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,4BACE,OAAO,IAAI,+BAA+B,YAAY,IAAI,2BAA2B,SAAS,IAC1F,IAAI,6BACJ;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAChG,qCACE,OAAO,IAAI,wCAAwC,WAC/C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,mCAAmC,CAAC,IAC/D;AAAA,IACN,wCAAwC,MAAM,QAAQ,IAAI,sCAAsC,IAC3F,IAAI,uCAAqD;AAAA,MACxD,CAAC,MAAmB,OAAO,MAAM,YAAY,EAAE,SAAS;AAAA,IAC1D,IACA,CAAC,cAAc,YAAY;AAAA,IAC/B,oCACE,OAAO,IAAI,uCAAuC,WAC9C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,kCAAkC,CAAC,IAC9D;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAC1C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,8BAA8B,CAAC,IAC1D;AAAA,IACN,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA,IAC1E,qBACE,OAAO,IAAI,wBAAwB,YAAY,IAAI,oBAAoB,KAAK,EAAE,SAAS,IACnF,IAAI,oBAAoB,KAAK,IAC7B,KAAK,KAAK,WAAW,SAAS,mBAAmB;AAAA,IACvD,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,iBACE,OAAO,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,KAAK,EAAE,SAAS,IAC3E,IAAI,gBAAgB,KAAK,IACzB,KAAK,KAAK,WAAW,SAAS,gBAAgB;AAAA,IACpD,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,cACE,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,KAAK,EAAE,SAAS,IACrE,IAAI,aAAa,KAAK,IACtB,KAAK,KAAK,WAAW,QAAQ,OAAO;AAAA,IAC1C,iBACE,OAAO,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,KAAK,EAAE,SAAS,IAC3E,IAAI,gBAAgB,KAAK,IACzB,KAAK,KAAK,WAAW,QAAQ,UAAU;AAAA,IAC7C,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,cACE,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,KAAK,EAAE,SAAS,IACrE,IAAI,aAAa,KAAK,IACtB,KAAK,KAAK,WAAW,QAAQ,OAAO;AAAA,IAC1C,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,gCACE,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAChG,sBACE,OAAO,IAAI,yBAAyB,YAAY,IAAI,qBAAqB,KAAK,EAAE,SAAS,IACrF,IAAI,qBAAqB,KAAK,IAC9B,KAAK,KAAK,WAAW,SAAS,qBAAqB;AAAA,IACzD,yBACE,OAAO,IAAI,4BAA4B,YAAY,IAAI,wBAAwB,KAAK,EAAE,SAAS,IAC3F,IAAI,wBAAwB,KAAK,IACjC,KAAK,KAAK,WAAW,SAAS,mBAAmB;AAAA;AAAA,IAEvD,iBAAiB,IAAI,oBAAoB,QAAQ,IAAI,oBAAoB;AAAA;AAAA,IACzE,aACE,OAAO,IAAI,gBAAgB,YAAY,IAAI,YAAY,SAAS,IAC5D,IAAI,cACJ;AAAA,IACN,eACE,OAAO,IAAI,kBAAkB,YAAY,IAAI,cAAc,SAAS,IAChE,IAAI,gBACJ;AAAA,IACN,gBACE,OAAO,IAAI,mBAAmB,YAAY,IAAI,eAAe,SAAS,IAClE,eAAe,IAAI,cAAc,IACjC;AAAA,IACN,iBACE,IAAI,mBAAmB,OAAO,IAAI,oBAAoB,YAAY,CAAC,MAAM,QAAQ,IAAI,eAAe,IAChG,OAAO;AAAA,MACL,OAAO,QAAQ,IAAI,eAA0C,EAC1D,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,OAAO,UAAU,QAAQ,EAC/C,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,OAAO,KAAK,CAAC,CAAC;AAAA,IAC/C,IACA;AAAA,IACN,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,kBAAkB,IAAI,qBAAqB;AAAA;AAAA,IAC3C,iBACE,OAAO,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,SAAS,IACpE,IAAI,kBACJ;AAAA,IACN,iBACE,OAAO,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,SAAS,IACpE,IAAI,kBACJ;AAAA,IACN,gBACE,OAAO,IAAI,mBAAmB,YAAY,IAAI,eAAe,SAAS,IAClE,IAAI,iBACJ;AAAA,IACN,mBACE,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACtE,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA;AAAA,IAExE,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA;AAAA,IAExE,oBAAoB,IAAI,uBAAuB;AAAA;AAAA,IAE/C,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,qBACE,OAAO,IAAI,wBAAwB,YAAY,IAAI,oBAAoB,SAAS,IAC5E,IAAI,sBACJ,KAAK,KAAK,WAAW,WAAW;AAAA,IACtC,oBACE,OAAO,IAAI,uBAAuB,YAAY,OAAO,SAAS,IAAI,kBAAkB,IAChF,KAAK,IAAI,GAAG,IAAI,kBAAkB,IAClC;AAAA;AAAA,IAEN,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B,IAAI;AAAA,IACxF,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,8BACE,OAAO,IAAI,iCAAiC,WAAW,IAAI,+BAA+B;AAAA,IAC5F,mCACE,OAAO,IAAI,sCAAsC,WAAW,IAAI,oCAAoC;AAAA,IACtG,uCAAuC,IAAI,0CAA0C;AAAA,IACrF,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B,KAAK;AAAA;AAAA,IAE7F,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,uBACE,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB,KAAK;AAAA,IACnF,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB,KAAK;AAAA;AAAA,IAErF,uBACE,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA,IAC9E,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,uBACE,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA;AAAA,IAE9E,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,mBACE,OAAO,IAAI,sBAAsB,YAAY,IAAI,kBAAkB,SAAS,IACxE,IAAI,oBACJ;AAAA,IACN,iBACE,OAAO,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,SAAS,IACpE,IAAI,kBACJ,OAAO,IAAI,gBAAgB,YAAY,IAAI,YAAY,SAAS,IAC9D,IAAI,cACJ;AAAA,IACR,uBACE,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA;AAAA,IAE9E,eAAe,IAAI;AAAA;AAAA,IAEnB,aACE,IAAI,gBAAgB,YAAY,YAAY;AAAA,IAC9C,gBACE,OAAO,IAAI,mBAAmB,YAAY,IAAI,eAAe,SAAS,IAClE,IAAI,iBACJ;AAAA,IACN,oBACE,OAAO,IAAI,uBAAuB,YAAY,IAAI,mBAAmB,SAAS,IAC1E,IAAI,qBACJ;AAAA;AAAA,IAGN,mBAAmB,IAAI,sBAAsB;AAAA,IAC7C,kBACE,OAAO,IAAI,qBAAqB,YAAY,IAAI,iBAAiB,SAAS,IAAI,IAAI,mBAAmB;AAAA,IACvG,iBACE,OAAO,IAAI,oBAAoB,YAAY,IAAI,gBAAgB,SAAS,IAAI,IAAI,kBAAkB;AAAA,IACpG,6BACE,IAAI,gCAAgC,WAChC,WACA,IAAI,gCAAgC,UAClC,UACA;AAAA,IACR,8BAA8B;AAAA,IAC9B,mBAAmB,MAAM,QAAQ,IAAI,iBAAiB,IACjD,IAAI,kBAA4B,IAAI,CAAC,OAAO;AAAA,MAC3C,MAAM,OAAO,GAAG,SAAS,WAAW,EAAE,OAAO;AAAA,MAC7C,gBAAgB,MAAM,QAAQ,GAAG,cAAc,IAAI,EAAE,eAAe,OAAO,CAAC,MAAW,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,MACjH,iBAAiB,MAAM,QAAQ,GAAG,eAAe,IAAI,EAAE,gBAAgB,OAAO,CAAC,MAAW,OAAO,MAAM,QAAQ,IAAI,CAAC;AAAA,MACpH,0BAA0B,GAAG,6BAA6B;AAAA,IAC5D,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,CAAC,IACnC,CAAC;AAAA,IACL,yBAAyB,MAAM,QAAQ,IAAI,uBAAuB,IAAI,CAAC,QAAQ,QAAQ,EAAE,OAAO,CAAC,MAAO,IAAI,wBAAkC,SAAS,CAAC,CAAC,IAAW,CAAC,QAAQ,QAAQ;AAAA,IACrL,gBACE,IAAI,mBAAmB,SACnB,SACA,IAAI,mBAAmB,cACrB,cACA;AAAA,IACR,qBAAqB,MAAM,QAAQ,IAAI,mBAAmB,IACrD,IAAI,oBAAkC,OAAO,CAAC,MAAmB,OAAO,MAAM,YAAY,EAAE,SAAS,CAAC,IACvG,CAAC;AAAA,IACL,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,mCACE,OAAO,IAAI,sCAAsC,WAC7C,IAAI,oCACJ;AAAA,IACN,oCACE,OAAO,IAAI,uCAAuC,WAC9C,IAAI,qCACJ;AAAA,IACN,4BACE,IAAI,+BAA+B,WAC/B,WACA,IAAI,+BAA+B,UACjC,UACA;AAAA,IACR,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,+BAA+B,MAAM,QAAQ,IAAI,6BAA6B,IACzE,IAAI,8BAAwC,OAAO,CAAC,MAAM,MAAM,UAAU,MAAM,gBAAgB,MAAM,cAAc,MAAM,YAAY,IACvI,CAAC,QAAQ,cAAc,YAAY,YAAY;AAAA,IACnD,8BACE,IAAI,iCAAiC,aACjC,aACA,IAAI,iCAAiC,YACnC,YACA;AAAA,IACR,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,uBACE,OAAO,IAAI,0BAA0B,YAAY,IAAI,sBAAsB,KAAK,EAAE,SAAS,IACvF,IAAI,sBAAsB,KAAK,IAC/B;AAAA;AAAA,IAGN,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,kBACE,OAAO,IAAI,qBAAqB,YAAY,IAAI,iBAAiB,SAAS,IAAI,IAAI,mBAAmB;AAAA,IACvG,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,wCACE,OAAO,IAAI,2CAA2C,WAClD,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,sCAAsC,CAAC,IAClE;AAAA;AAAA,IAEN,6BAA6B;AAAA,IAC7B,+BAA+B;AAAA;AAAA,IAG/B,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,+BACE,OAAO,IAAI,kCAAkC,WAAW,IAAI,gCAAgC;AAAA,IAC9F,0BAA0B,IAAI,6BAA6B;AAAA;AAAA,IAG3D,YAAY,IAAI,eAAe;AAAA,IAC/B,mBAAmB,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACvF,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,kBAAkB,OAAO,IAAI,qBAAqB,WAAW,IAAI,mBAAmB;AAAA;AAAA,IAGpF,YAAY,IAAI,eAAe;AAAA,IAC/B,uBAAuB,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA,IACnG,mBAAmB,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACvF,gCAAgC,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAC9H,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,+BAA+B,OAAO,IAAI,kCAAkC,WAAW,IAAI,gCAAgC;AAAA,IAC3H,6BAA6B,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IACrH,kCAAkC,OAAO,IAAI,qCAAqC,WAAW,IAAI,mCAAmC;AAAA,IACpI,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,sBAAsB,OAAO,IAAI,yBAAyB,WAAW,IAAI,uBAAuB;AAAA,IAChG,sBAAsB,OAAO,IAAI,yBAAyB,WAAW,IAAI,uBAAuB;AAAA,IAChG,iCAAiC,OAAO,IAAI,oCAAoC,WAAW,IAAI,kCAAkC;AAAA,IACjI,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,yBAAyB,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IACzG,wBAAwB,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IACtG,gCAAgC,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAC9H,gCAAgC,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA;AAAA,IAG9H,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,8BAA8B,OAAO,IAAI,iCAAiC,WAAW,IAAI,+BAA+B;AAAA,IACxH,qBAAqB,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA;AAAA,IAG7F,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,2BACE,OAAO,IAAI,8BAA8B,WAAW,IAAI,4BAA4B;AAAA,IACtF,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,mCACE,OAAO,IAAI,sCAAsC,WAAW,IAAI,oCAAoC;AAAA,IACtG,mCACE,OAAO,IAAI,sCAAsC,WAAW,IAAI,oCAAoC;AAAA,IACtG,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,mBAAmB,qBAAqB;AAAA,IACxC,sBACE,OAAO,IAAI,yBAAyB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,oBAAoB,CAAC,IAAI;AAAA,IACrG,sBACE,OAAO,IAAI,yBAAyB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,oBAAoB,CAAC,IAAI;AAAA,IACrG,4BACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,0BAA0B,CAAC,IACtD;AAAA,IACN,gBAAgB,qBAAqB;AAAA,IACrC,qBACE,OAAO,IAAI,wBAAwB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,mBAAmB,CAAC,IAAI;AAAA,IACnG,0BACE,OAAO,IAAI,6BAA6B,WACpC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,wBAAwB,CAAC,IACpD,KAAK;AAAA,IACX,0BACE,OAAO,IAAI,6BAA6B,WACpC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,wBAAwB,CAAC,IACpD;AAAA,IACN,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,sBAAsB,IAAI,yBAAyB;AAAA;AAAA,IAGnD,eAAgB,CAAC,OAAO,UAAU,QAAQ,WAAW,eAAe,OAAO,EAAY,SAAS,IAAI,aAAoB,IACnH,IAAI,gBACL;AAAA,IACJ,qBAAqB,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA,IAC7F,oBAAoB,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IAC1F,uBAAuB,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA;AAAA,IAGnG,gBAAgB,IAAI,mBAAmB;AAAA,IACvC,aAAa,OAAO,IAAI,gBAAgB,WAAW,IAAI,cAAc,KAAK,KAAK,WAAW,SAAS;AAAA,IACnG,yBAAyB,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA;AAAA,IAGzG,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,iBAAiB,OAAO,IAAI,oBAAoB,WAAW,IAAI,kBAAkB;AAAA,IACjF,mBAAmB,OAAO,IAAI,sBAAsB,WAAW,IAAI,oBAAoB;AAAA,IACvF,sBAAsB,OAAO,IAAI,yBAAyB,WAAW,IAAI,uBAAuB;AAAA,IAChG,sBAAsB,IAAI,yBAAyB;AAAA;AAAA,IAGnD,cAAc,IAAI,iBAAiB;AAAA,IACnC,aAAa,OAAO,IAAI,gBAAgB,WAAW,IAAI,cAAc,KAAK,KAAK,WAAW,OAAO;AAAA,IACjG,yBAAyB,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA;AAAA,IAGzG,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,cACE,OAAO,IAAI,iBAAiB,YAAY,IAAI,aAAa,SAAS,IAC9D,IAAI,eACJ;AAAA,IACN,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,uBAAuB,IAAI,0BAA0B;AAAA,IACrD,mBAAmB,IAAI,sBAAsB;AAAA;AAAA,IAG7C,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,qBAAqB,IAAI,wBAAwB;AAAA,IACjD,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA,IAC1E,2BACE,OAAO,IAAI,8BAA8B,WAAW,IAAI,4BAA4B;AAAA,IACtF,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,iCAAiC,MAAM,QAAQ,IAAI,+BAA+B,IAC7E,IAAI,gCAA0C,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ,IAClF,CAAC,cAAc,cAAc,YAAY,WAAW;AAAA;AAAA,IAExD,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,+BACE,OAAO,IAAI,kCAAkC,WACzC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,6BAA6B,CAAC,IAC1D;AAAA,IACN,8BACE,OAAO,IAAI,iCAAiC,WACxC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,4BAA4B,CAAC,IACzD;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAC1C,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,8BAA8B,CAAC,IAC3D;AAAA,IACN,8BAA8B,MAAM,QAAQ,IAAI,4BAA4B,IACvE,IAAI,6BAAuC;AAAA,MAC1C,CAAC,MACC,OAAO,MAAM,YAAY,wBAAwB,IAAI,CAAC;AAAA,IAC1D,IACA,CAAC,YAAY,aAAa,cAAc,YAAY;AAAA,IACxD,yBACE,OAAO,IAAI,4BAA4B,YACnC,IAAI,0BACJ,IAAI,2BAA2B;AAAA;AAAA,IAErC,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,kCAAkC,IAAI,qCAAqC;AAAA,IAC3E,qCAAqC,IAAI,wCAAwC;AAAA,IACjF,+CACE,IAAI,kDAAkD;AAAA,IACxD,uCACE,OAAO,IAAI,0CAA0C,WACjD,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,qCAAqC,CAAC,IACjE;AAAA,IACN,oCACE,OAAO,IAAI,uCAAuC,WAC9C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,kCAAkC,CAAC,IAC9D;AAAA,IACN,8BACE,OAAO,IAAI,iCAAiC,WACxC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,4BAA4B,CAAC,IACxD;AAAA,IACN,8BACE,OAAO,IAAI,iCAAiC,WACxC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,4BAA4B,CAAC,IACxD;AAAA,IACN,2BACE,OAAO,IAAI,8BAA8B,WACrC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,yBAAyB,CAAC,IACrD;AAAA,IACN,sCAAsC,MAAM,QAAQ,IAAI,oCAAoC,IACvF,IAAI,qCAAmD;AAAA,MACtD,CAAC,aACC,OAAO,aAAa,YAAY,wBAAwB,IAAI,QAAQ;AAAA,IACxE,IACA;AAAA,IACJ,6BACE,OAAO,IAAI,gCAAgC,WACvC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,2BAA2B,CAAC,IACvD;AAAA,IACN,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,gCACE,OAAO,IAAI,mCAAmC,WAC1C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,8BAA8B,CAAC,IAC1D;AAAA,IACN,4BACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,0BAA0B,CAAC,IACtD;AAAA,IACN,8BACE,OAAO,IAAI,iCAAiC,WACxC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,4BAA4B,CAAC,IACzD;AAAA,IACN,6BAA6B,MAAM,QAAQ,IAAI,2BAA2B,IACrE,IAAI,4BACF,OAAO,CAAC,UAA2B,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,CAAC,IAC1F,CAAC,GAAG,sCAAsC;AAAA;AAAA,IAE9C,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,oBACE,OAAO,IAAI,uBAAuB,YAAY,IAAI,mBAAmB,KAAK,EAAE,SAAS,IACjF,IAAI,mBAAmB,KAAK,IAC5B;AAAA,IACN,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,mCACE,OAAO,IAAI,sCAAsC,WAC7C,IAAI,oCACJ;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAChG,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,gCACE,OAAO,IAAI,mCAAmC,WAC1C,IAAI,iCACJ;AAAA,IACN,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,4BAA4B,MAAM,QAAQ,IAAI,0BAA0B,IACnE,IAAI,2BAAqC;AAAA,MACxC,CAAC,MACC,OAAO,MAAM,YAAY,wBAAwB,IAAI,CAAC;AAAA,IAC1D,IACA,CAAC,YAAY,cAAc,aAAa,YAAY;AAAA;AAAA,IAExD,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,wBACE,OAAO,IAAI,2BAA2B,WAAW,IAAI,yBAAyB;AAAA,IAChF,cACE,OAAO,IAAI,iBAAiB,WAAW,IAAI,eAAe,KAAK,KAAK;AAAA,IACtE,gBACE,OAAO,IAAI,mBAAmB,WAAW,IAAI,iBAAiB;AAAA,IAChE,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,eACE,OAAO,IAAI,kBAAkB,WAAW,IAAI,gBAAgB;AAAA;AAAA,IAE9D,wBAAwB,IAAI,2BAA2B;AAAA;AAAA,IAEvD,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,iCACE,OAAO,IAAI,oCAAoC,WAC3C,KAAK,IAAI,GAAG,IAAI,+BAA+B,IAC/C;AAAA,IACN,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,oBAAoB,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IAC1F,sBAAsB,IAAI,yBAAyB;AAAA,IACnD,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,iBAAiB,OAAO,IAAI,oBAAoB,WAAW,IAAI,kBAAkB;AAAA,IACjF,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,gBAAgB,OAAO,IAAI,mBAAmB,WAAW,IAAI,iBAAiB;AAAA,IAC9E,qBAAqB,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA;AAAA,IAE7F,yBAAyB,IAAI,4BAA4B;AAAA,IACzD,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,uBACE,OAAO,IAAI,0BAA0B,WAAW,IAAI,wBAAwB;AAAA,IAC9E,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,iCACE,OAAO,IAAI,oCAAoC,YAC/C,IAAI,gCAAgC,KAAK,EAAE,SAAS,IAChD,IAAI,gCAAgC,KAAK,IACzC;AAAA,IACN,iCACE,OAAO,IAAI,oCAAoC,WAAW,IAAI,kCAAkC;AAAA,IAClG,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,oBACE,OAAO,IAAI,uBAAuB,WAAW,IAAI,qBAAqB;AAAA,IACxE,gCACE,OAAO,IAAI,mCAAmC,WAAW,IAAI,iCAAiC;AAAA,IAChG,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,yBACE,OAAO,IAAI,4BAA4B,WAAW,IAAI,0BAA0B;AAAA,IAClF,oCACE,OAAO,IAAI,uCAAuC,WAC9C,IAAI,qCACJ;AAAA,IACN,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,4BACE,OAAO,IAAI,+BAA+B,WAAW,IAAI,6BAA6B;AAAA,IACxF,6BACE,OAAO,IAAI,gCAAgC,WAAW,IAAI,8BAA8B;AAAA,IAC1F,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,0BACE,OAAO,IAAI,6BAA6B,WAAW,IAAI,2BAA2B;AAAA,IACpF,+BACE,OAAO,IAAI,kCAAkC,WAAW,IAAI,gCAAgC;AAAA,IAC9F,wBACE,OAAO,IAAI,2BAA2B,YAAY,IAAI,uBAAuB,KAAK,EAAE,SAAS,IACzF,IAAI,uBAAuB,KAAK,IAChC,KAAK,KAAK,WAAW,SAAS,OAAO;AAAA,IAC3C,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,wBAAwB,IAAI,2BAA2B;AAAA,IACvD,4BAA4B,IAAI,+BAA+B;AAAA,IAC/D,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,8BAA8B,IAAI,iCAAiC;AAAA,IACnE,2BACE,OAAO,IAAI,8BAA8B,WACrC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,yBAAyB,CAAC,IACrD;AAAA,IACN,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,kBAAkB,IAAI,qBAAqB;AAAA,IAC3C,mCAAmC,IAAI,sCAAsC;AAAA,IAC7E,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,wBACE,OAAO,IAAI,2BAA2B,WAAW,KAAK,IAAI,GAAG,IAAI,sBAAsB,IAAI;AAAA,IAC7F,sBACE,OAAO,IAAI,yBAAyB,WAChC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,oBAAoB,CAAC,IACjD;AAAA,IACN,gCACE,OAAO,IAAI,mCAAmC,WAC1C,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,8BAA8B,CAAC,IAC3D;AAAA,IACN,wBACE,OAAO,IAAI,2BAA2B,WAClC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,sBAAsB,CAAC,IACnD;AAAA,IACN,wBACE,OAAO,IAAI,2BAA2B,WAClC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,sBAAsB,CAAC,IACnD;AAAA,IACN,8BACE,OAAO,IAAI,iCAAiC,WACxC,KAAK,IAAI,GAAG,IAAI,4BAA4B,IAC5C;AAAA,IACN,oBAAoB,IAAI,uBAAuB;AAAA,IAC/C,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,+BACE,OAAO,IAAI,kCAAkC,WACzC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,6BAA6B,CAAC,IAC1D;AAAA,IACN,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,6BAA6B,IAAI,gCAAgC;AAAA,IACjE,mCACE,OAAO,IAAI,sCAAsC,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,iCAAiC,CAAC,IAAI;AAAA,IAC/H,+BAA+B,IAAI,kCAAkC;AAAA,IACrE,4BACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,0BAA0B,CAAC,IACvD;AAAA,IACN,4BACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,0BAA0B,CAAC,IACtD;AAAA;AAAA,IAEN,2BAA2B,IAAI,8BAA8B;AAAA,IAC7D,sBACE,OAAO,IAAI,yBAAyB,WAAW,IAAI,uBAAuB;AAAA,IAC5E,qBACE,OAAO,IAAI,wBAAwB,WAAW,IAAI,sBAAsB;AAAA;AAAA,IAE1E,YAAY,IAAI,eAAe;AAAA,IAC/B,kBACE,OAAO,IAAI,qBAAqB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,gBAAgB,CAAC,IAAI;AAAA,IAC7F,gBACE,OAAO,IAAI,mBAAmB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,cAAc,CAAC,IAAI;AAAA,IACzF,mBACE,OAAO,IAAI,sBAAsB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,iBAAiB,CAAC,IAAI;AAAA,IAC/F,aACE,OAAO,IAAI,gBAAgB,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,WAAW,CAAC,IAAI;AAAA,IACnF,sBACE,OAAO,IAAI,yBAAyB,WAChC,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,IAAI,oBAAoB,CAAC,IACjD;AAAA,IACN,2BACE,OAAO,IAAI,8BAA8B,WACrC,KAAK,IAAI,IAAI,KAAK,MAAM,IAAI,yBAAyB,CAAC,IACtD;AAAA,IACN,yBACE,OAAO,IAAI,4BAA4B,WACnC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,uBAAuB,CAAC,IACnD;AAAA;AAAA,IAGN,0BAA0B,IAAI,6BAA6B;AAAA,IAC3D,uBAAuB,MAAM;AAC3B,YAAM,IAAI,IAAI;AACd,aAAO;AAAA,QACL,QAAQ,OAAO,GAAG,WAAW,WAAW,KAAK,IAAI,GAAG,EAAE,MAAM,IAAI;AAAA,QAChE,YAAY,OAAO,GAAG,eAAe,WAAW,KAAK,IAAI,GAAG,EAAE,UAAU,IAAI;AAAA,QAC5E,UAAU,OAAO,GAAG,aAAa,WAAW,KAAK,IAAI,GAAG,EAAE,QAAQ,IAAI;AAAA,MACxE;AAAA,IACF,GAAG;AAAA,IACH,4BACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,0BAA0B,CAAC,IACtD;AAAA,EACR;AACF;AAEA,SAAS,uBAAuB,OAAoC;AAClE,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACjE,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;AAEA,SAAS,wBAAwB,KAAmC;AAClE,QAAM,QACJ,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,IAC/C,MACD,CAAC;AACP,SAAO;AAAA,IACL,IAAI,OAAO,MAAM,OAAO,WAAW,MAAM,GAAG,KAAK,IAAI;AAAA,IACrD,SAAS,MAAM,YAAY;AAAA,IAC3B,UACE,MAAM,aAAa,OACf,OACA,uBAAuB,MAAM,QAAQ;AAAA,IAC3C,UAAU,uBAAuB,MAAM,QAAQ;AAAA,IAC/C,oBAAoB,uBAAuB,MAAM,kBAAkB;AAAA,IACnE,oBAAoB,uBAAuB,MAAM,kBAAkB;AAAA,IACnE,yBAAyB,uBAAuB,MAAM,uBAAuB;AAAA,IAC7E,wBAAwB,uBAAuB,MAAM,sBAAsB;AAAA,IAC3E,aAAa,uBAAuB,MAAM,WAAW;AAAA,IACrD,YAAY,uBAAuB,MAAM,UAAU;AAAA,IACnD,aAAa,uBAAuB,MAAM,WAAW;AAAA,IACrD,UAAU,uBAAuB,MAAM,QAAQ;AAAA,IAC/C,WAAW,uBAAuB,MAAM,SAAS;AAAA,IACjD,eAAe,uBAAuB,MAAM,aAAa;AAAA,IACzD,UAAU,uBAAuB,MAAM,QAAQ;AAAA,IAC/C,MAAM,uBAAuB,MAAM,IAAI;AAAA,IACvC,WAAW,uBAAuB,MAAM,SAAS;AAAA,IACjD,aAAa,uBAAuB,MAAM,WAAW;AAAA,IACrD,YAAY,uBAAuB,MAAM,UAAU;AAAA,EACrD;AACF;AAEA,SAAS,2BAA2B,KAAqD;AACvF,SAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,yBAAyB;AAAA,MACtC,UACE,OAAO,IAAI,gCAAgC,WACvC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,2BAA2B,CAAC,IACvD;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,yBAAyB;AAAA,MACzB,wBAAwB;AAAA,IAC1B;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,8BAA8B;AAAA,IAC7C;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,2BAA2B;AAAA,MACxC,UACE,OAAO,IAAI,4BAA4B,WACnC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,uBAAuB,CAAC,IACnD;AAAA,MACN,UACE,OAAO,IAAI,4BAA4B,WACnC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,uBAAuB,CAAC,IACnD;AAAA,MACN,oBACE,OAAO,IAAI,sCAAsC,WAC7C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,iCAAiC,CAAC,IAC7D;AAAA,MACN,oBACE,OAAO,IAAI,sCAAsC,WAC7C,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,iCAAiC,CAAC,IAC7D;AAAA,MACN,aACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,0BAA0B,CAAC,IACtD;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,0BAA0B;AAAA,MACvC,UACE,OAAO,IAAI,2BAA2B,WAClC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,sBAAsB,CAAC,IAClD;AAAA,MACN,aACE,OAAO,IAAI,8BAA8B,WACrC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,yBAAyB,CAAC,IACrD;AAAA,IACR;AAAA,IACA,EAAE,IAAI,sBAAsB,SAAS,IAAI,6BAA6B,KAAK;AAAA,IAC3E,EAAE,IAAI,gBAAgB,SAAS,IAAI,uBAAuB,KAAK;AAAA,IAC/D,EAAE,IAAI,wBAAwB,SAAS,IAAI,8BAA8B,KAAK;AAAA,IAC9E,EAAE,IAAI,0BAA0B,SAAS,IAAI,eAAe,KAAK;AAAA,IACjE;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,gCAAgC;AAAA,MAC7C,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,kCAAkC;AAAA,MAC/C,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,2BAA2B;AAAA,MACxC,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,6BAA6B;AAAA,MAC1C,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,0BAA0B;AAAA,MACvC,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,oCAAoC;AAAA,MACjD,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,6BAA6B;AAAA,MAC1C,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,YACE,OAAO,IAAI,kBAAkB,WACzB,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,aAAa,CAAC,IACzC;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,wCAAwC;AAAA,IACvD;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,mBAAmB,OAAO,IAAI,oBAAoB,WAC1D,IAAI,gBAA4C,YAAY,OAC7D;AAAA,MACJ,YACE,IAAI,mBAAmB,OAAO,IAAI,oBAAoB,YACpD,OAAQ,IAAI,gBAA4C,eAAe,WACrE,KAAK,IAAI,GAAG,KAAK,MAAO,IAAI,gBAA4C,UAAoB,CAAC,IAC7F;AAAA,MACN,UACE,IAAI,mBAAmB,OAAO,IAAI,oBAAoB,YACpD,OAAQ,IAAI,gBAA4C,aAAa,WACnE,KAAK,IAAI,GAAG,KAAK,MAAO,IAAI,gBAA4C,QAAkB,CAAC,IAC3F;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,sBAAsB;AAAA,MACnC,UACE,OAAO,IAAI,uBAAuB,WAC9B,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,kBAAkB,CAAC,IAC9C;AAAA,MACN,WACE,OAAO,IAAI,wBAAwB,WAC/B,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,mBAAmB,CAAC,IAC/C;AAAA,MACN,eACE,OAAO,IAAI,0BAA0B,WACjC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,qBAAqB,CAAC,IACjD;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,2BAA2B;AAAA,MACxC,UACE,OAAO,IAAI,oBAAoB,WAC3B,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,eAAe,CAAC,IAC3C;AAAA,MACN,eACE,OAAO,IAAI,uBAAuB,WAC9B,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,kBAAkB,CAAC,IAC9C;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,6BAA6B;AAAA,MAC1C,MACE,OAAO,IAAI,2BAA2B,WAClC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,sBAAsB,CAAC,IAClD;AAAA,MACN,UACE,OAAO,IAAI,+BAA+B,WACtC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,0BAA0B,CAAC,IACtD;AAAA,MACN,WACE,OAAO,IAAI,gCAAgC,WACvC,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,2BAA2B,CAAC,IACvD;AAAA,IACR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,SAAS,IAAI,uBAAuB,QAAQ,IAAI,6BAA6B;AAAA,MAC7E,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,EAAE,IAAI,aAAa,SAAS,IAAI,oBAAoB,KAAK;AAAA,EAC3D;AACF;AAEA,SAAS,0BAA0B,KAAoD;AACrF,QAAM,kBACJ,OAAO,IAAI,oBAAoB,WAC3B,KAAK,IAAI,GAAG,KAAK,MAAM,IAAI,eAAe,CAAC,IAC3C;AACN,QAAM,uBAAuB,uBAAuB,IAAI,iBAAiB;AACzE,QAAM,oBAAoB,wBAAwB,kBAAkB;AAEpE,QAAM,cAAc,IAAI;AACxB,QAAM,WAAW,MAAM,QAAQ,WAAW,IACtC,YAAY,IAAI,uBAAuB,EAAE,OAAO,CAAC,UAAU,MAAM,GAAG,SAAS,CAAC,IAC9E,2BAA2B,GAAG;AAElC,SAAO,EAAE,mBAAmB,SAAS;AACvC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tokens.ts"],"sourcesContent":["/**\n * Token management for Remnic multi-connector auth.\n *\n * Manages per-connector tokens in ~/.remnic/tokens.json.\n * Each connector gets a unique token with a recognizable prefix.\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { randomBytes } from \"node:crypto\";\n\nexport interface TokenEntry {\n token: string;\n connector: string;\n createdAt: string;\n}\n\nexport interface TokenStore {\n tokens: TokenEntry[];\n}\n\nconst TOKEN_PREFIXES: Record<string, string> = {\n \"openclaw\": \"remnic_oc_\",\n \"claude-code\": \"remnic_cc_\",\n \"codex\": \"remnic_cx_\",\n \"hermes\": \"remnic_hm_\",\n \"replit\": \"remnic_rl_\",\n \"cursor\": \"remnic_cu_\",\n \"cline\": \"remnic_cl_\",\n \"github-copilot\": \"remnic_gh_\",\n \"roo-code\": \"remnic_rc_\",\n \"windsurf\": \"remnic_ws_\",\n \"amp\": \"remnic_am_\",\n \"generic-mcp\": \"remnic_gm_\",\n};\n\nfunction defaultTokensPath(): string {\n return path.join(process.env.HOME ?? \"~\", \".remnic\", \"tokens.json\");\n}\n\nfunction legacyTokensPath(): string {\n return path.join(process.env.HOME ?? \"~\", \".engram\", \"tokens.json\");\n}\n\nfunction resolveReadPath(tokensPath?: string): string {\n const primary = tokensPath ?? defaultTokensPath();\n if (tokensPath) return primary;\n if (fs.existsSync(primary)) return primary;\n const legacy = legacyTokensPath();\n return fs.existsSync(legacy) ? legacy : primary;\n}\n\nfunction ensureDir(filePath: string): void {\n const dir = path.dirname(filePath);\n fs.mkdirSync(dir, { recursive: true });\n}\n\nexport function loadTokenStore(tokensPath?: string): TokenStore {\n const p = resolveReadPath(tokensPath);\n try {\n const raw = JSON.parse(fs.readFileSync(p, \"utf8\"));\n if (Array.isArray(raw.tokens)) {\n return { tokens: raw.tokens };\n }\n // Migrate legacy flat-map format: { \"connector\": \"token_value\", ... }\n if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n const migrated: TokenEntry[] = [];\n for (const [key, value] of Object.entries(raw)) {\n if (key === \"tokens\") continue; // skip if tokens key exists but isn't array\n if (typeof value === \"string\" && value.length > 0) {\n migrated.push({ token: value, connector: key, createdAt: new Date().toISOString() });\n }\n }\n if (migrated.length > 0) {\n const store: TokenStore = { tokens: migrated };\n // Auto-migrate: rewrite in new format (best-effort, don't lose tokens on write failure)\n try {\n saveTokenStore(store, tokensPath);\n } catch {\n // Migration write failed (e.g., read-only fs) — still return parsed tokens\n }\n return store;\n }\n }\n return { tokens: [] };\n } catch {\n return { tokens: [] };\n }\n}\n\nexport function saveTokenStore(store: TokenStore, tokensPath?: string): void {\n const p = tokensPath ?? defaultTokensPath();\n ensureDir(p);\n fs.writeFileSync(p, JSON.stringify(store, null, 2) + \"\\n\", { mode: 0o600 });\n // Tighten permissions on pre-existing files (writeFileSync mode only applies to new files)\n try { fs.chmodSync(p, 0o600); } catch { /* ignore on platforms without chmod */ }\n}\n\nexport function generateToken(connector: string, tokensPath?: string): TokenEntry {\n const store = loadTokenStore(tokensPath);\n\n // Remove existing token for this connector\n store.tokens = store.tokens.filter((t) => t.connector !== connector);\n\n const prefix = TOKEN_PREFIXES[connector] ?? \"remnic_xx_\";\n const token = prefix + randomBytes(24).toString(\"hex\");\n const entry: TokenEntry = {\n token,\n connector,\n createdAt: new Date().toISOString(),\n };\n store.tokens.push(entry);\n saveTokenStore(store, tokensPath);\n return entry;\n}\n\nexport function listTokens(tokensPath?: string): TokenEntry[] {\n return loadTokenStore(tokensPath).tokens;\n}\n\nexport function revokeToken(connector: string, tokensPath?: string): boolean {\n const store = loadTokenStore(tokensPath);\n const before = store.tokens.length;\n store.tokens = store.tokens.filter((t) => t.connector !== connector);\n if (store.tokens.length < before) {\n saveTokenStore(store, tokensPath);\n return true;\n }\n return false;\n}\n\nexport function getAllValidTokens(tokensPath?: string): string[] {\n return loadTokenStore(tokensPath).tokens.map((t) => t.token);\n}\n\n// Cached token loader to avoid synchronous disk I/O on every HTTP request.\n// Re-reads tokens.json at most once per TTL interval (default 5s).\nconst TOKEN_CACHE_TTL_MS = 5_000;\nlet _cachedTokens: string[] = [];\nlet _cachedAt = 0;\nlet _cachedPath: string | undefined;\n\nexport function getAllValidTokensCached(tokensPath?: string): string[] {\n const now = Date.now();\n if (now - _cachedAt < TOKEN_CACHE_TTL_MS && tokensPath === _cachedPath) return _cachedTokens;\n _cachedTokens = getAllValidTokens(tokensPath);\n _cachedAt = now;\n _cachedPath = tokensPath;\n return _cachedTokens;\n}\n\nexport function resolveConnectorFromToken(token: string, tokensPath?: string): string | undefined {\n return loadTokenStore(tokensPath).tokens.find((t) => t.token === token)?.connector;\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/logger.ts"],"sourcesContent":["export interface LoggerBackend {\n info(msg: string, ...args: unknown[]): void;\n warn(msg: string, ...args: unknown[]): void;\n error(msg: string, ...args: unknown[]): void;\n debug?(msg: string, ...args: unknown[]): void;\n}\n\nconst NOOP_LOGGER: LoggerBackend = {\n info() {},\n warn() {},\n error() {},\n debug() {},\n};\n\nlet _backend: LoggerBackend = NOOP_LOGGER;\nlet _debug = false;\n\nexport function initLogger(backend: LoggerBackend, debug: boolean): void {\n _backend = backend;\n _debug = debug;\n}\n\nexport const log = {\n info(msg: string, ...args: unknown[]): void {\n _backend.info(`remnic: ${msg}`, ...args);\n },\n warn(msg: string, ...args: unknown[]): void {\n _backend.warn(`remnic: ${msg}`, ...args);\n },\n error(msg: string, err?: unknown): void {\n const detail =\n err instanceof Error ? err.message : err ? String(err) : \"\";\n _backend.error(\n `remnic: ${msg}${detail ? ` — ${detail}` : \"\"}`,\n );\n },\n debug(msg: string, ...args: unknown[]): void {\n if (!_debug) return;\n const fn = _backend.debug ?? _backend.info;\n fn(`remnic [debug]: ${msg}`, ...args);\n },\n};\n"],"mappings":";AAOA,IAAM,cAA6B;AAAA,EACjC,OAAO;AAAA,EAAC;AAAA,EACR,OAAO;AAAA,EAAC;AAAA,EACR,QAAQ;AAAA,EAAC;AAAA,EACT,QAAQ;AAAA,EAAC;AACX;AAEA,IAAI,WAA0B;AAC9B,IAAI,SAAS;AAEN,SAAS,WAAW,SAAwB,OAAsB;AACvE,aAAW;AACX,WAAS;AACX;AAEO,IAAM,MAAM;AAAA,EACjB,KAAK,QAAgB,MAAuB;AAC1C,aAAS,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI;AAAA,EACzC;AAAA,EACA,KAAK,QAAgB,MAAuB;AAC1C,aAAS,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI;AAAA,EACzC;AAAA,EACA,MAAM,KAAa,KAAqB;AACtC,UAAM,SACJ,eAAe,QAAQ,IAAI,UAAU,MAAM,OAAO,GAAG,IAAI;AAC3D,aAAS;AAAA,MACP,WAAW,GAAG,GAAG,SAAS,WAAM,MAAM,KAAK,EAAE;AAAA,IAC/C;AAAA,EACF;AAAA,EACA,MAAM,QAAgB,MAAuB;AAC3C,QAAI,CAAC,OAAQ;AACb,UAAM,KAAK,SAAS,SAAS,SAAS;AACtC,OAAG,mBAAmB,GAAG,IAAI,GAAG,IAAI;AAAA,EACtC;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schemas.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport const MemoryActionTypeSchema = z.enum([\n \"store_episode\",\n \"store_note\",\n \"update_note\",\n \"create_artifact\",\n \"summarize_node\",\n \"discard\",\n \"link_graph\",\n]);\n\nexport const MemoryActionEligibilityContextSchema = z\n .object({\n confidence: z.number().min(0).max(1),\n lifecycleState: z.enum([\"active\", \"validated\", \"candidate\", \"stale\", \"archived\"]),\n importance: z.number().min(0).max(1),\n source: z.enum([\"extraction\", \"consolidation\", \"replay\", \"manual\", \"unknown\"]),\n })\n .strict();\n\nexport function parseMemoryActionType(value: unknown): z.infer<typeof MemoryActionTypeSchema> {\n const parsed = MemoryActionTypeSchema.safeParse(value);\n return parsed.success ? parsed.data : \"discard\";\n}\n\nexport function parseMemoryActionEligibilityContext(\n value: unknown,\n): z.infer<typeof MemoryActionEligibilityContextSchema> {\n const parsed = MemoryActionEligibilityContextSchema.safeParse(value);\n if (parsed.success) return parsed.data;\n return {\n confidence: 0,\n lifecycleState: \"candidate\",\n importance: 0,\n source: \"unknown\",\n };\n}\n\nexport const ExtractedFactSchema = z.object({\n category: z.enum([\"fact\", \"preference\", \"correction\", \"entity\", \"decision\", \"relationship\", \"principle\", \"commitment\", \"moment\", \"skill\", \"rule\"]),\n content: z\n .string()\n .describe(\"The memory content — a clear, standalone statement\"),\n confidence: z\n .number()\n .min(0)\n .max(1)\n .describe(\"How confident are you this is correct (0-1)\"),\n tags: z.array(z.string()).describe(\"Relevant tags for categorization\"),\n entityRef: z\n .string()\n .optional()\n .nullable()\n .describe(\"If about an entity, its normalized name (e.g. person-jane-doe)\"),\n promptedByQuestion: z\n .string()\n .optional()\n .nullable()\n .describe(\"Optional proactive follow-up question that surfaced this fact.\"),\n structuredAttributes: z\n .record(z.string(), z.string())\n .optional()\n .nullable()\n .describe(\"Structured key-value attributes when the fact contains measurable or categorical data (e.g., {\\\"price\\\": \\\"29.99\\\", \\\"color\\\": \\\"blue\\\", \\\"date\\\": \\\"2024-03-15\\\"}).\"),\n});\n\nexport const EntityMentionSchema = z.object({\n name: z\n .string()\n .describe(\"Normalized entity name (e.g. jane-doe, acme-corp, my-project)\"),\n type: z.enum([\"person\", \"project\", \"tool\", \"company\", \"place\", \"other\"]),\n facts: z\n .array(z.string())\n .describe(\"New facts learned about this entity in this conversation\"),\n promptedByQuestion: z\n .string()\n .optional()\n .nullable()\n .describe(\"Optional proactive follow-up question that surfaced this entity.\"),\n});\n\nexport const ExtractedQuestionSchema = z.object({\n question: z.string().describe(\"A genuine question the AI is curious about based on this conversation\"),\n context: z.string().describe(\"Why this question matters or what prompted it\"),\n priority: z.number().min(0).max(1).describe(\"How important/urgent this question is (0-1)\"),\n});\n\nexport const ProactiveQuestionsResultSchema = z.object({\n questions: z\n .array(ExtractedQuestionSchema)\n .describe(\"Additional follow-up questions discovered in a proactive second-pass extraction.\"),\n});\n\nexport const ExtractedRelationshipSchema = z.object({\n source: z.string().describe(\"Source entity name (normalized, e.g. person-jane-doe)\"),\n target: z.string().describe(\"Target entity name (normalized, e.g. company-acme-corp)\"),\n label: z.string().describe(\"Relationship label (e.g. 'works at', 'created', 'manages')\"),\n promptedByQuestion: z\n .string()\n .optional()\n .nullable()\n .describe(\"Optional proactive follow-up question that surfaced this relationship.\"),\n});\n\nexport const ProactiveExtractionResultSchema = z.object({\n facts: z\n .array(ExtractedFactSchema)\n .describe(\n \"Additional high-confidence memories recovered only after answering proactive follow-up questions from the same buffered conversation.\",\n ),\n profileUpdates: z\n .array(z.string())\n .describe(\n \"Additional profile updates directly supported by the buffered conversation. Omit anything speculative.\",\n ),\n entities: z\n .array(EntityMentionSchema)\n .describe(\n \"Additional entities or entity facts surfaced by the proactive follow-up pass.\",\n ),\n relationships: z\n .array(ExtractedRelationshipSchema)\n .optional()\n .nullable()\n .describe(\n \"Additional relationships surfaced by the proactive follow-up pass.\",\n ),\n});\n\nexport const ExtractionResultSchema = z.object({\n facts: z\n .array(ExtractedFactSchema)\n .describe(\n \"Extracted memories from the conversation. Include facts, preferences, corrections, and decisions. Only extract genuinely new, durable information — skip transient task state.\",\n ),\n profileUpdates: z\n .array(z.string())\n .describe(\n \"Updates to the user's behavioral profile. Each string is a standalone statement about the user's preferences, habits, or personality. Only include genuinely new insights.\",\n ),\n entities: z\n .array(EntityMentionSchema)\n .describe(\n \"Entities mentioned in the conversation with new facts about them.\",\n ),\n questions: z\n .array(ExtractedQuestionSchema)\n .describe(\n \"1-3 genuine questions you're curious about from this conversation. These should be things you'd actually want to know the answer to in future sessions.\",\n ),\n identityReflection: z\n .string()\n .optional()\n .nullable()\n .describe(\n \"A brief reflection on what you learned about yourself as an agent in this interaction — patterns in your behavior, growth, things you did well or could improve.\",\n ),\n relationships: z\n .array(ExtractedRelationshipSchema)\n .optional()\n .nullable()\n .describe(\n \"Relationships between entities discovered in this conversation. Max 5 per extraction. Format: {source, target, label}.\",\n ),\n});\n\nexport const ConsolidationItemSchema = z.object({\n existingId: z\n .string()\n .describe(\"The ID of the existing memory being evaluated\"),\n action: z.enum([\"ADD\", \"MERGE\", \"UPDATE\", \"INVALIDATE\", \"SKIP\"]),\n mergeWith: z\n .string()\n .optional()\n .nullable()\n .describe(\"If MERGE, the ID of the memory to merge with\"),\n updatedContent: z\n .string()\n .optional()\n .nullable()\n .describe(\"If UPDATE or MERGE, the new content\"),\n reason: z.string().describe(\"Brief reason for this decision\"),\n});\n\nexport const ConsolidationResultSchema = z.object({\n items: z\n .array(ConsolidationItemSchema)\n .describe(\n \"Decisions for each existing memory: ADD (keep as-is), MERGE (combine with another), UPDATE (revise content), INVALIDATE (mark as outdated/wrong), SKIP (no action needed)\",\n ),\n profileUpdates: z\n .array(z.string())\n .describe(\"New profile statements to add or update\"),\n entityUpdates: z\n .array(EntityMentionSchema)\n .describe(\"Entity updates from consolidation analysis\"),\n});\n\nexport function buildProfileConsolidationResultSchema(targetLines: number) {\n return z.object({\n consolidatedProfile: z\n .string()\n .describe(\n `The full consolidated profile as markdown. Preserve all ## section headers. Merge duplicate or near-duplicate bullets into single clear statements. Remove stale or superseded information. Keep the most important and durable observations. Target roughly ${targetLines} lines.`,\n ),\n removedCount: z\n .number()\n .describe(\"Number of bullets removed or merged during consolidation\"),\n summary: z\n .string()\n .describe(\"Brief summary of what was consolidated\"),\n });\n}\n\nexport const ProfileConsolidationResultSchema = buildProfileConsolidationResultSchema(50);\n\nexport const IdentityConsolidationResultSchema = z.object({\n learnedPatterns: z\n .array(z.string())\n .describe(\n \"Consolidated behavioral patterns and lessons learned, each a concise standalone statement\",\n ),\n summary: z\n .string()\n .describe(\n \"A brief paragraph summarizing the agent's core identity insights\",\n ),\n});\n\nexport type IdentityConsolidationResultParsed = z.infer<\n typeof IdentityConsolidationResultSchema\n>;\n\n// Contradiction Verification (Phase 2B)\nexport const ContradictionVerificationSchema = z.object({\n isContradiction: z\n .boolean()\n .describe(\"Whether the two memories truly contradict each other\"),\n confidence: z\n .number()\n .min(0)\n .max(1)\n .describe(\"How confident are you in this assessment (0-1)\"),\n reasoning: z\n .string()\n .describe(\"Explanation of why these are or are not contradictory\"),\n whichIsNewer: z\n .enum([\"first\", \"second\", \"unclear\"])\n .describe(\"Which memory represents the more recent/current state\"),\n});\n\nexport type ContradictionVerificationResult = z.infer<\n typeof ContradictionVerificationSchema\n>;\n\n// Memory Linking (Phase 3A)\nexport const MemoryLinkSchema = z.object({\n targetId: z\n .string()\n .describe(\"The ID of the memory this links to\"),\n linkType: z\n .enum([\"follows\", \"references\", \"contradicts\", \"supports\", \"related\"])\n .describe(\"The type of relationship\"),\n strength: z\n .number()\n .min(0)\n .max(1)\n .describe(\"How strong is this relationship (0-1)\"),\n reason: z\n .string()\n .optional()\n .nullable()\n .describe(\"Why this link exists\"),\n});\n\nexport const SuggestedLinksSchema = z.object({\n links: z\n .array(MemoryLinkSchema)\n .describe(\"Suggested links between memories based on semantic analysis\"),\n});\n\nexport type MemoryLink = z.infer<typeof MemoryLinkSchema>;\nexport type SuggestedLinks = z.infer<typeof SuggestedLinksSchema>;\n\n// Memory Summarization (Phase 4A)\nexport const MemorySummarySchema = z.object({\n summaryText: z\n .string()\n .describe(\"A concise summary of the batch of memories\"),\n keyFacts: z\n .array(z.string())\n .describe(\"The most important facts extracted from these memories\"),\n keyEntities: z\n .array(z.string())\n .describe(\"Key entities mentioned across these memories\"),\n});\n\nexport type MemorySummaryResult = z.infer<typeof MemorySummarySchema>;\n\nexport const DaySummaryResultSchema = z.object({\n summary: z.string().min(1).describe(\"A concise end-of-day summary paragraph.\"),\n bullets: z.array(z.string()).default([]).describe(\"The most important moments from the day.\"),\n next_actions: z.array(z.string()).default([]).describe(\"Concrete next actions for tomorrow.\"),\n risks_or_open_loops: z.array(z.string()).default([]).describe(\"Open loops, blockers, or fragile assumptions still needing attention.\"),\n});\n\n// v8.15 behavior-loop auto-tuning state contracts\nexport const BehaviorLoopAdjustmentSchema = z.object({\n parameter: z.string().min(1),\n previousValue: z.number(),\n nextValue: z.number(),\n delta: z.number(),\n evidenceCount: z.number().int().min(0),\n confidence: z.number().min(0).max(1),\n reason: z.string(),\n appliedAt: z.string(),\n});\n\nexport const BehaviorLoopPolicyStateSchema = z.object({\n version: z.number().int().min(0),\n windowDays: z.number().int().min(0),\n minSignalCount: z.number().int().min(0),\n maxDeltaPerCycle: z.number().min(0).max(1),\n protectedParams: z.array(z.string()),\n adjustments: z.array(BehaviorLoopAdjustmentSchema),\n updatedAt: z.string(),\n});\n\nexport type BehaviorLoopAdjustmentParsed = z.infer<typeof BehaviorLoopAdjustmentSchema>;\nexport type BehaviorLoopPolicyStateParsed = z.infer<typeof BehaviorLoopPolicyStateSchema>;\n\nexport type MemoryActionTypeParsed = z.infer<typeof MemoryActionTypeSchema>;\nexport type MemoryActionEligibilityContextParsed = z.infer<typeof MemoryActionEligibilityContextSchema>;\nexport type ExtractedFactParsed = z.infer<typeof ExtractedFactSchema>;\nexport type EntityMentionParsed = z.infer<typeof EntityMentionSchema>;\nexport type ExtractedQuestionParsed = z.infer<typeof ExtractedQuestionSchema>;\nexport type ProactiveQuestionsResultParsed = z.infer<typeof ProactiveQuestionsResultSchema>;\nexport type ExtractionResultParsed = z.infer<typeof ExtractionResultSchema>;\nexport type ConsolidationItemParsed = z.infer<typeof ConsolidationItemSchema>;\nexport type ConsolidationResultParsed = z.infer<\n typeof ConsolidationResultSchema\n>;\n\n\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/causal-trajectory.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport type { ObjectiveStateOutcome } from \"./objective-state.js\";\nimport { countRecallTokenOverlap, normalizeRecallTokens } from \"./recall-tokenization.js\";\nimport {\n assertIsoRecordedAt,\n assertSafePathSegment,\n assertString,\n isRecord,\n optionalString,\n optionalStringArray,\n recordStoreDay,\n validateStringRecord,\n} from \"./store-contract.js\";\n\nexport interface CausalTrajectoryRecord {\n schemaVersion: 1;\n trajectoryId: string;\n recordedAt: string;\n sessionKey: string;\n goal: string;\n actionSummary: string;\n observationSummary: string;\n outcomeKind: ObjectiveStateOutcome;\n outcomeSummary: string;\n followUpSummary?: string;\n objectiveStateSnapshotRefs?: string[];\n entityRefs?: string[];\n tags?: string[];\n metadata?: Record<string, string>;\n}\n\nexport interface CausalTrajectoryStoreStatus {\n enabled: boolean;\n rootDir: string;\n trajectoriesDir: string;\n trajectories: {\n total: number;\n valid: number;\n invalid: number;\n byOutcome: Partial<Record<ObjectiveStateOutcome, number>>;\n latestTrajectoryId?: string;\n latestRecordedAt?: string;\n latestSessionKey?: string;\n };\n latestTrajectory?: CausalTrajectoryRecord;\n invalidTrajectories: Array<{\n path: string;\n error: string;\n }>;\n}\n\nexport interface CausalTrajectorySearchResult {\n record: CausalTrajectoryRecord;\n score: number;\n matchedFields: string[];\n}\n\nfunction validateMetadata(raw: unknown): Record<string, string> | undefined {\n return validateStringRecord(raw, \"metadata\");\n}\n\nexport function resolveCausalTrajectoryStoreDir(memoryDir: string, overrideDir?: string): string {\n if (typeof overrideDir === \"string\" && overrideDir.trim().length > 0) {\n return overrideDir.trim();\n }\n return path.join(memoryDir, \"state\", \"causal-trajectories\");\n}\n\nexport function validateCausalTrajectoryRecord(raw: unknown): CausalTrajectoryRecord {\n if (!isRecord(raw)) throw new Error(\"causal trajectory record must be an object\");\n if (raw.schemaVersion !== 1) throw new Error(\"schemaVersion must be 1\");\n\n const outcomeKind = assertString(raw.outcomeKind, \"outcomeKind\");\n if (![\"success\", \"failure\", \"partial\", \"unknown\"].includes(outcomeKind)) {\n throw new Error(\"outcomeKind must be one of success|failure|partial|unknown\");\n }\n\n return {\n schemaVersion: 1,\n trajectoryId: assertSafePathSegment(assertString(raw.trajectoryId, \"trajectoryId\"), \"trajectoryId\"),\n recordedAt: assertIsoRecordedAt(assertString(raw.recordedAt, \"recordedAt\")),\n sessionKey: assertString(raw.sessionKey, \"sessionKey\"),\n goal: assertString(raw.goal, \"goal\"),\n actionSummary: assertString(raw.actionSummary, \"actionSummary\"),\n observationSummary: assertString(raw.observationSummary, \"observationSummary\"),\n outcomeKind: outcomeKind as ObjectiveStateOutcome,\n outcomeSummary: assertString(raw.outcomeSummary, \"outcomeSummary\"),\n followUpSummary: optionalString(raw.followUpSummary),\n objectiveStateSnapshotRefs: optionalStringArray(raw.objectiveStateSnapshotRefs, \"objectiveStateSnapshotRefs\"),\n entityRefs: optionalStringArray(raw.entityRefs, \"entityRefs\"),\n tags: optionalStringArray(raw.tags, \"tags\"),\n metadata: validateMetadata(raw.metadata),\n };\n}\n\nexport async function recordCausalTrajectory(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n actionGraphRecallEnabled?: boolean;\n cmcEnabled?: boolean;\n cmcStitchLookbackDays?: number;\n cmcStitchMinScore?: number;\n cmcStitchMaxEdgesPerTrajectory?: number;\n record: CausalTrajectoryRecord;\n}): Promise<string> {\n const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const validated = validateCausalTrajectoryRecord(options.record);\n const day = recordStoreDay(validated.recordedAt);\n const trajectoriesDir = path.join(rootDir, \"trajectories\", day);\n const filePath = path.join(trajectoriesDir, `${validated.trajectoryId}.json`);\n await mkdir(trajectoriesDir, { recursive: true });\n await writeFile(filePath, JSON.stringify(validated, null, 2), \"utf8\");\n if (options.actionGraphRecallEnabled === true) {\n try {\n const { appendCausalTrajectoryGraphEdges } = await import(\"./causal-trajectory-graph.js\");\n await appendCausalTrajectoryGraphEdges({\n memoryDir: options.memoryDir,\n record: validated,\n });\n } catch (error) {\n const { log } = await import(\"./logger.js\");\n log.warn(\n `[causal-trajectory] action-conditioned graph write failed for ${validated.trajectoryId}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n if (options.cmcEnabled === true) {\n try {\n const { stitchCausalChain } = await import(\"./causal-chain.js\");\n await stitchCausalChain({\n memoryDir: options.memoryDir,\n causalTrajectoryStoreDir: options.causalTrajectoryStoreDir,\n newTrajectory: validated,\n config: {\n lookbackDays: options.cmcStitchLookbackDays ?? 7,\n minScore: options.cmcStitchMinScore ?? 2.5,\n maxEdgesPerTrajectory: options.cmcStitchMaxEdgesPerTrajectory ?? 3,\n },\n });\n } catch (error) {\n const { log } = await import(\"./logger.js\");\n log.warn(\n `[cmc] causal chain stitching failed for ${validated.trajectoryId}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n return filePath;\n}\n\nasync function readCausalTrajectoryRecords(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n}): Promise<{\n files: string[];\n trajectories: CausalTrajectoryRecord[];\n invalidTrajectories: Array<{ path: string; error: string }>;\n}> {\n const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const files = await listJsonFiles(path.join(rootDir, \"trajectories\"));\n const trajectories: CausalTrajectoryRecord[] = [];\n const invalidTrajectories: Array<{ path: string; error: string }> = [];\n for (const filePath of files) {\n try {\n trajectories.push(validateCausalTrajectoryRecord(await readJsonFile(filePath)));\n } catch (error) {\n invalidTrajectories.push({\n path: filePath,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return { files, trajectories, invalidTrajectories };\n}\n\nexport async function getCausalTrajectoryStoreStatus(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n enabled: boolean;\n}): Promise<CausalTrajectoryStoreStatus> {\n const rootDir = resolveCausalTrajectoryStoreDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const trajectoriesDir = path.join(rootDir, \"trajectories\");\n const { files, trajectories, invalidTrajectories } = await readCausalTrajectoryRecords(options);\n\n trajectories.sort((a, b) => b.recordedAt.localeCompare(a.recordedAt));\n const byOutcome: Partial<Record<ObjectiveStateOutcome, number>> = {};\n for (const trajectory of trajectories) {\n byOutcome[trajectory.outcomeKind] = (byOutcome[trajectory.outcomeKind] ?? 0) + 1;\n }\n\n return {\n enabled: options.enabled,\n rootDir,\n trajectoriesDir,\n trajectories: {\n total: files.length,\n valid: trajectories.length,\n invalid: invalidTrajectories.length,\n byOutcome,\n latestTrajectoryId: trajectories[0]?.trajectoryId,\n latestRecordedAt: trajectories[0]?.recordedAt,\n latestSessionKey: trajectories[0]?.sessionKey,\n },\n latestTrajectory: trajectories[0],\n invalidTrajectories,\n };\n}\n\nfunction lexicalScoreCausalTrajectoryRecord(\n record: CausalTrajectoryRecord,\n queryTokens: Set<string>,\n): { score: number; matchedFields: string[] } {\n const weightedFields: Array<[field: string, value: string | undefined, weight: number]> = [\n [\"goal\", record.goal, 4],\n [\"action\", record.actionSummary, 3],\n [\"observation\", record.observationSummary, 3],\n [\"outcome\", record.outcomeSummary, 3],\n [\"follow_up\", record.followUpSummary, 2],\n [\"outcome_kind\", record.outcomeKind, 1],\n [\"tags\", record.tags?.join(\" \"), 2],\n [\"entity_refs\", record.entityRefs?.join(\" \"), 2],\n [\"objective_state_refs\", record.objectiveStateSnapshotRefs?.join(\" \"), 1],\n ];\n\n let score = 0;\n const matchedFields: string[] = [];\n for (const [field, value, weight] of weightedFields) {\n const matches = countRecallTokenOverlap(queryTokens, value, [\"make\"]);\n if (matches > 0) matchedFields.push(field);\n score += matches * weight;\n }\n return { score, matchedFields };\n}\n\nfunction scoreCausalTrajectoryRecord(\n record: CausalTrajectoryRecord,\n lexicalScore: number,\n sessionKey?: string,\n): number {\n let score = lexicalScore;\n if (sessionKey && record.sessionKey === sessionKey) score += 1.5;\n\n const recordedAtMs = Date.parse(record.recordedAt);\n if (Number.isFinite(recordedAtMs)) {\n const ageHours = Math.max(0, (Date.now() - recordedAtMs) / 3_600_000);\n score += 1 / (1 + ageHours);\n }\n return score;\n}\n\nexport async function searchCausalTrajectories(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n query: string;\n maxResults: number;\n sessionKey?: string;\n}): Promise<CausalTrajectorySearchResult[]> {\n const maxResults = Math.max(0, Math.floor(options.maxResults));\n if (maxResults === 0) return [];\n\n const { trajectories } = await readCausalTrajectoryRecords(options);\n if (trajectories.length === 0) return [];\n\n const queryTokens = new Set(normalizeRecallTokens(options.query, [\"make\"]));\n if (queryTokens.size === 0) return [];\n const scored = trajectories.map((record) => {\n const lexical = lexicalScoreCausalTrajectoryRecord(record, queryTokens);\n return {\n record,\n matchedFields: lexical.matchedFields,\n lexicalScore: lexical.score,\n score: scoreCausalTrajectoryRecord(record, lexical.score, options.sessionKey),\n };\n });\n\n const filtered = scored.filter((result) => result.lexicalScore > 0);\n\n filtered.sort((left, right) => {\n if (right.score !== left.score) return right.score - left.score;\n return right.record.recordedAt.localeCompare(left.record.recordedAt);\n });\n\n return filtered.slice(0, maxResults).map(({ record, score, matchedFields }) => ({\n record,\n score,\n matchedFields,\n }));\n}\n"],"mappings":"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","names":[]}