@remnic/core 1.1.12 → 1.1.13

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 (1324) hide show
  1. package/dist/access-cli.d.ts +2 -1
  2. package/dist/access-cli.js +263 -82
  3. package/dist/access-cli.js.map +1 -1
  4. package/dist/access-http.d.ts +26 -60
  5. package/dist/access-http.js +43 -29
  6. package/dist/access-mcp.d.ts +24 -6
  7. package/dist/access-mcp.js +35 -28
  8. package/dist/access-schema.d.ts +9 -6
  9. package/dist/access-schema.js +7 -5
  10. package/dist/access-service-DcCDmNYC.d.ts +1542 -0
  11. package/dist/access-service.d.ts +25 -7
  12. package/dist/access-service.js +33 -26
  13. package/dist/active-memory-bridge.js +2 -2
  14. package/dist/active-recall.js +11 -3
  15. package/dist/active-recall.js.map +1 -1
  16. package/dist/adapters/claude-code.d.ts +24 -0
  17. package/dist/adapters/claude-code.js +9 -0
  18. package/dist/adapters/codex.d.ts +25 -0
  19. package/dist/adapters/codex.js +9 -0
  20. package/dist/adapters/hermes.d.ts +35 -0
  21. package/dist/adapters/hermes.js +9 -0
  22. package/dist/adapters/index.d.ts +6 -0
  23. package/dist/adapters/index.js +26 -0
  24. package/dist/adapters/registry.d.ts +20 -0
  25. package/dist/adapters/registry.js +13 -0
  26. package/dist/adapters/replit.d.ts +28 -0
  27. package/dist/adapters/replit.js +9 -0
  28. package/dist/adapters/types.d.ts +43 -0
  29. package/dist/adapters/types.js +8 -0
  30. package/dist/bootstrap.d.ts +20 -5
  31. package/dist/boxes.d.ts +7 -0
  32. package/dist/boxes.js +1 -1
  33. package/dist/briefing.d.ts +5 -3
  34. package/dist/briefing.js +9 -6
  35. package/dist/buffer-surprise-report.js +1 -1
  36. package/dist/buffer.d.ts +18 -4
  37. package/dist/buffer.js +1 -1
  38. package/dist/calibration.js +4 -4
  39. package/dist/capsule-cli.d.ts +4 -4
  40. package/dist/capsule-cli.js +1 -1
  41. package/dist/capsule-crypto-5CYAGVC5.js +18 -0
  42. package/dist/capsule-merge-4MGKE7C5.js +189 -0
  43. package/dist/causal-behavior.d.ts +8 -28
  44. package/dist/causal-behavior.js +6 -3
  45. package/dist/causal-behavior.js.map +1 -1
  46. package/dist/causal-chain.js +3 -2
  47. package/dist/causal-consolidation.d.ts +1 -1
  48. package/dist/causal-consolidation.js +24 -13
  49. package/dist/causal-consolidation.js.map +1 -1
  50. package/dist/causal-retrieval.js +3 -3
  51. package/dist/causal-trajectory.js +1 -1
  52. package/dist/chunk-25MQ7IHJ.js +427 -0
  53. package/dist/chunk-25MQ7IHJ.js.map +1 -0
  54. package/dist/chunk-2F2W355T.js +256 -0
  55. package/dist/chunk-2F2W355T.js.map +1 -0
  56. package/dist/chunk-2KI4QFHU.js +228 -0
  57. package/dist/chunk-2KI4QFHU.js.map +1 -0
  58. package/dist/chunk-2PRQG7PV.js +86 -0
  59. package/dist/chunk-2PRQG7PV.js.map +1 -0
  60. package/dist/chunk-2QR3XXIC.js +2272 -0
  61. package/dist/chunk-2QR3XXIC.js.map +1 -0
  62. package/dist/chunk-2WWLHTZY.js +121 -0
  63. package/dist/chunk-326G7DJK.js +2185 -0
  64. package/dist/chunk-326G7DJK.js.map +1 -0
  65. package/dist/chunk-34DQE4KF.js +174 -0
  66. package/dist/chunk-34DQE4KF.js.map +1 -0
  67. package/dist/chunk-3APJ5EVB.js +601 -0
  68. package/dist/chunk-3APJ5EVB.js.map +1 -0
  69. package/dist/chunk-3HPAPHUK.js +51 -0
  70. package/dist/chunk-3HPAPHUK.js.map +1 -0
  71. package/dist/chunk-3JXBXXM2.js +69 -0
  72. package/dist/chunk-3JXBXXM2.js.map +1 -0
  73. package/dist/chunk-3KW65B36.js +681 -0
  74. package/dist/chunk-3KW65B36.js.map +1 -0
  75. package/dist/chunk-3UXOZBHV.js +20 -0
  76. package/dist/chunk-3UXOZBHV.js.map +1 -0
  77. package/dist/chunk-3VAL7ZL2.js +266 -0
  78. package/dist/chunk-3VAL7ZL2.js.map +1 -0
  79. package/dist/chunk-3Y4P7RXM.js +31 -0
  80. package/dist/chunk-3Y4P7RXM.js.map +1 -0
  81. package/dist/chunk-47VWKCAF.js +273 -0
  82. package/dist/chunk-47VWKCAF.js.map +1 -0
  83. package/dist/chunk-4CRG46BG.js +271 -0
  84. package/dist/chunk-5375UYTQ.js +914 -0
  85. package/dist/chunk-5375UYTQ.js.map +1 -0
  86. package/dist/chunk-56K5QLHX.js +506 -0
  87. package/dist/chunk-56K5QLHX.js.map +1 -0
  88. package/dist/chunk-5RGLBDQF.js +596 -0
  89. package/dist/chunk-5RGLBDQF.js.map +1 -0
  90. package/dist/chunk-5UZXUTVO.js +9 -0
  91. package/dist/chunk-5UZXUTVO.js.map +1 -0
  92. package/dist/chunk-65PG43EQ.js +105 -0
  93. package/dist/chunk-65PG43EQ.js.map +1 -0
  94. package/dist/chunk-66DHUKLO.js +57 -0
  95. package/dist/chunk-66DHUKLO.js.map +1 -0
  96. package/dist/chunk-6FC5EGNV.js +46 -0
  97. package/dist/chunk-6FC5EGNV.js.map +1 -0
  98. package/dist/chunk-6H2TESSP.js +62 -0
  99. package/dist/chunk-6H2TESSP.js.map +1 -0
  100. package/dist/chunk-6LVVDPJ4.js +32 -0
  101. package/dist/chunk-6LVVDPJ4.js.map +1 -0
  102. package/dist/chunk-6RVI47ZR.js +159 -0
  103. package/dist/chunk-6RVI47ZR.js.map +1 -0
  104. package/dist/chunk-7AAT6G4Q.js +5117 -0
  105. package/dist/chunk-7AAT6G4Q.js.map +1 -0
  106. package/dist/chunk-7DTASS5T.js +29 -0
  107. package/dist/chunk-7DTASS5T.js.map +1 -0
  108. package/dist/chunk-7IASACLB.js +596 -0
  109. package/dist/chunk-7MNMYOFP.js +32 -0
  110. package/dist/chunk-7MNMYOFP.js.map +1 -0
  111. package/dist/chunk-7N4KAIGN.js +133 -0
  112. package/dist/chunk-7N4KAIGN.js.map +1 -0
  113. package/dist/chunk-7OZ53EXP.js +101 -0
  114. package/dist/chunk-7OZ53EXP.js.map +1 -0
  115. package/dist/chunk-7XYTQGCC.js +134 -0
  116. package/dist/chunk-7XYTQGCC.js.map +1 -0
  117. package/dist/chunk-A2XUIMJ3.js +341 -0
  118. package/dist/chunk-A2XUIMJ3.js.map +1 -0
  119. package/dist/chunk-AGZQD76C.js +201 -0
  120. package/dist/chunk-AGZQD76C.js.map +1 -0
  121. package/dist/chunk-APO3DCMU.js +361 -0
  122. package/dist/chunk-APO3DCMU.js.map +1 -0
  123. package/dist/chunk-BFBF3XEF.js +283 -0
  124. package/dist/chunk-BFBF3XEF.js.map +1 -0
  125. package/dist/chunk-BJ3KMYTB.js +1974 -0
  126. package/dist/chunk-BJ3KMYTB.js.map +1 -0
  127. package/dist/chunk-CHEL3SKB.js +6758 -0
  128. package/dist/chunk-CHEL3SKB.js.map +1 -0
  129. package/dist/chunk-CQZRLNMV.js +1491 -0
  130. package/dist/chunk-CQZRLNMV.js.map +1 -0
  131. package/dist/chunk-D46YSIYX.js +892 -0
  132. package/dist/chunk-D46YSIYX.js.map +1 -0
  133. package/dist/chunk-DINWEURR.js +648 -0
  134. package/dist/chunk-DINWEURR.js.map +1 -0
  135. package/dist/chunk-DK5LDEQM.js +530 -0
  136. package/dist/chunk-DK5LDEQM.js.map +1 -0
  137. package/dist/chunk-DOM4GKSW.js +34 -0
  138. package/dist/chunk-DOM4GKSW.js.map +1 -0
  139. package/dist/chunk-EDTHC6UD.js +1075 -0
  140. package/dist/chunk-EFJ3MQ4V.js +721 -0
  141. package/dist/chunk-EHRTFRWW.js +89 -0
  142. package/dist/chunk-EHRTFRWW.js.map +1 -0
  143. package/dist/chunk-FAJ7FZYM.js +11 -0
  144. package/dist/chunk-FAJ7FZYM.js.map +1 -0
  145. package/dist/chunk-FBYESMQ2.js +570 -0
  146. package/dist/chunk-FDU6HUUL.js +147 -0
  147. package/dist/chunk-FF4KLI5W.js +99 -0
  148. package/dist/chunk-FF4KLI5W.js.map +1 -0
  149. package/dist/chunk-FIT6DMX6.js +310 -0
  150. package/dist/chunk-FIT6DMX6.js.map +1 -0
  151. package/dist/chunk-FJ43PRLT.js +272 -0
  152. package/dist/chunk-FJ43PRLT.js.map +1 -0
  153. package/dist/chunk-FKFMOY3N.js +32 -0
  154. package/dist/chunk-FKFMOY3N.js.map +1 -0
  155. package/dist/chunk-FLTNHQK6.js +262 -0
  156. package/dist/chunk-FLTNHQK6.js.map +1 -0
  157. package/dist/chunk-GA454ALV.js +12436 -0
  158. package/dist/chunk-GA454ALV.js.map +1 -0
  159. package/dist/chunk-GGKRUQOO.js +228 -0
  160. package/dist/chunk-GIF42EW3.js +63 -0
  161. package/dist/chunk-GIF42EW3.js.map +1 -0
  162. package/dist/chunk-GL6I6MEQ.js +647 -0
  163. package/dist/chunk-H3ME6L6D.js +709 -0
  164. package/dist/chunk-H3ME6L6D.js.map +1 -0
  165. package/dist/chunk-HHLLAQGZ.js +1 -0
  166. package/dist/chunk-HXXBL2KD.js +2040 -0
  167. package/dist/chunk-I5V2VDIW.js +219 -0
  168. package/dist/chunk-I5V2VDIW.js.map +1 -0
  169. package/dist/chunk-I6K5FBRQ.js +35 -0
  170. package/dist/chunk-I6K5FBRQ.js.map +1 -0
  171. package/dist/chunk-ICRIXAP2.js +121 -0
  172. package/dist/chunk-ICRIXAP2.js.map +1 -0
  173. package/dist/chunk-J4EB7DNW.js +11 -0
  174. package/dist/chunk-J4EB7DNW.js.map +1 -0
  175. package/dist/chunk-JLFA7DQG.js +62 -0
  176. package/dist/chunk-JLFA7DQG.js.map +1 -0
  177. package/dist/chunk-KJTKLXTH.js +9 -0
  178. package/dist/chunk-KJTKLXTH.js.map +1 -0
  179. package/dist/chunk-KLAO5DGL.js +917 -0
  180. package/dist/chunk-KLAO5DGL.js.map +1 -0
  181. package/dist/chunk-KNKUID7G.js +183 -0
  182. package/dist/chunk-KOSORCJG.js +624 -0
  183. package/dist/chunk-KOSORCJG.js.map +1 -0
  184. package/dist/chunk-KUJVMMZQ.js +1262 -0
  185. package/dist/chunk-KUJVMMZQ.js.map +1 -0
  186. package/dist/chunk-LCR46JY5.js +123 -0
  187. package/dist/chunk-LCR46JY5.js.map +1 -0
  188. package/dist/chunk-LLQ2LLWF.js +148 -0
  189. package/dist/chunk-LLQ2LLWF.js.map +1 -0
  190. package/dist/chunk-LPMVBPA3.js +236 -0
  191. package/dist/chunk-LT3NLYSI.js +50 -0
  192. package/dist/chunk-LT3NLYSI.js.map +1 -0
  193. package/dist/chunk-LUDTDZLK.js +287 -0
  194. package/dist/chunk-LUDTDZLK.js.map +1 -0
  195. package/dist/chunk-M23FSH32.js +3963 -0
  196. package/dist/chunk-M23FSH32.js.map +1 -0
  197. package/dist/chunk-MC26UJIM.js +118 -0
  198. package/dist/chunk-ME6ESPZU.js +119 -0
  199. package/dist/chunk-ME6ESPZU.js.map +1 -0
  200. package/dist/chunk-MGKYQQYF.js +272 -0
  201. package/dist/chunk-MJFNCJXV.js +66 -0
  202. package/dist/chunk-MJFNCJXV.js.map +1 -0
  203. package/dist/chunk-MSWG7JI6.js +237 -0
  204. package/dist/chunk-MSWG7JI6.js.map +1 -0
  205. package/dist/chunk-MT25YHYH.js +141 -0
  206. package/dist/chunk-MT25YHYH.js.map +1 -0
  207. package/dist/chunk-MT4HVDUZ.js +53 -0
  208. package/dist/chunk-MY6TPVXW.js +219 -0
  209. package/dist/chunk-N2D6GXBM.js +267 -0
  210. package/dist/chunk-N2D6GXBM.js.map +1 -0
  211. package/dist/chunk-NJ3MJQZX.js +46 -0
  212. package/dist/chunk-NJ3MJQZX.js.map +1 -0
  213. package/dist/chunk-NMZY542O.js +335 -0
  214. package/dist/chunk-NMZY542O.js.map +1 -0
  215. package/dist/chunk-NNVTUXEB.js +23 -0
  216. package/dist/chunk-NZL6GGQE.js +375 -0
  217. package/dist/chunk-NZL6GGQE.js.map +1 -0
  218. package/dist/chunk-P4NEIHUT.js +108 -0
  219. package/dist/chunk-P7FMDTKL.js +103 -0
  220. package/dist/chunk-P7FMDTKL.js.map +1 -0
  221. package/dist/chunk-PHK3HARR.js +32 -0
  222. package/dist/chunk-PHK3HARR.js.map +1 -0
  223. package/dist/chunk-PIRJPV5T.js +98 -0
  224. package/dist/chunk-PIRJPV5T.js.map +1 -0
  225. package/dist/chunk-PK7H5L6Y.js +159 -0
  226. package/dist/chunk-PK7H5L6Y.js.map +1 -0
  227. package/dist/chunk-PR5FBTFU.js +233 -0
  228. package/dist/chunk-PR5FBTFU.js.map +1 -0
  229. package/dist/chunk-PU63GXWS.js +174 -0
  230. package/dist/chunk-PU63GXWS.js.map +1 -0
  231. package/dist/chunk-PZIAX57I.js +124 -0
  232. package/dist/chunk-PZIAX57I.js.map +1 -0
  233. package/dist/chunk-Q7P4WJDP.js +26 -0
  234. package/dist/chunk-Q7P4WJDP.js.map +1 -0
  235. package/dist/chunk-QQUAB63I.js +63 -0
  236. package/dist/chunk-QQUAB63I.js.map +1 -0
  237. package/dist/chunk-QRNI5JBH.js +18 -0
  238. package/dist/chunk-RHY3HH7P.js +601 -0
  239. package/dist/chunk-RHY3HH7P.js.map +1 -0
  240. package/dist/chunk-RRF5UOBJ.js +91 -0
  241. package/dist/chunk-RXDLTSWT.js +124 -0
  242. package/dist/chunk-RXDLTSWT.js.map +1 -0
  243. package/dist/chunk-RYED3SPJ.js +42 -0
  244. package/dist/chunk-RYED3SPJ.js.map +1 -0
  245. package/dist/chunk-S7KDBTWT.js +106 -0
  246. package/dist/chunk-S7KDBTWT.js.map +1 -0
  247. package/dist/chunk-SEDEKFYQ.js +1 -0
  248. package/dist/chunk-TECVW3JP.js +36 -0
  249. package/dist/chunk-TECVW3JP.js.map +1 -0
  250. package/dist/chunk-TFO23QT4.js +88 -0
  251. package/dist/chunk-TFO23QT4.js.map +1 -0
  252. package/dist/chunk-TK4UEOSK.js +76 -0
  253. package/dist/chunk-TK4UEOSK.js.map +1 -0
  254. package/dist/chunk-TKWGAOLV.js +122 -0
  255. package/dist/chunk-TKWGAOLV.js.map +1 -0
  256. package/dist/chunk-TMM4S4IJ.js +597 -0
  257. package/dist/chunk-TMM4S4IJ.js.map +1 -0
  258. package/dist/chunk-TMQLARTH.js +188 -0
  259. package/dist/chunk-TMQLARTH.js.map +1 -0
  260. package/dist/chunk-TPDBFYEG.js +130 -0
  261. package/dist/chunk-TPDBFYEG.js.map +1 -0
  262. package/dist/chunk-TPMQ3G6Z.js +145 -0
  263. package/dist/chunk-TPMQ3G6Z.js.map +1 -0
  264. package/dist/chunk-TZOLIGIG.js +61 -0
  265. package/dist/chunk-TZOLIGIG.js.map +1 -0
  266. package/dist/chunk-U3PN77QT.js +113 -0
  267. package/dist/chunk-U3WSW6PZ.js +277 -0
  268. package/dist/chunk-U4SCL7B7.js +640 -0
  269. package/dist/chunk-U4SCL7B7.js.map +1 -0
  270. package/dist/chunk-UWK5OXUJ.js +156 -0
  271. package/dist/chunk-UWK5OXUJ.js.map +1 -0
  272. package/dist/chunk-UWVJF25J.js +74 -0
  273. package/dist/chunk-UXHQAFNA.js +1317 -0
  274. package/dist/chunk-UXHQAFNA.js.map +1 -0
  275. package/dist/chunk-V5OCT34X.js +1 -0
  276. package/dist/chunk-VLXA6PI2.js +304 -0
  277. package/dist/chunk-VLXA6PI2.js.map +1 -0
  278. package/dist/chunk-VNO6ZJ35.js +500 -0
  279. package/dist/chunk-VNO6ZJ35.js.map +1 -0
  280. package/dist/chunk-VW676BEI.js +827 -0
  281. package/dist/chunk-VW676BEI.js.map +1 -0
  282. package/dist/chunk-W3LR522O.js +2296 -0
  283. package/dist/chunk-W4L6CZKA.js +96 -0
  284. package/dist/chunk-W4L6CZKA.js.map +1 -0
  285. package/dist/chunk-W4RVMTHR.js +372 -0
  286. package/dist/chunk-W4RVMTHR.js.map +1 -0
  287. package/dist/chunk-WEHSQBFR.js +188 -0
  288. package/dist/chunk-WEHSQBFR.js.map +1 -0
  289. package/dist/chunk-WELDCG6C.js +380 -0
  290. package/dist/chunk-WELDCG6C.js.map +1 -0
  291. package/dist/chunk-WZYKANL3.js +2800 -0
  292. package/dist/chunk-WZYKANL3.js.map +1 -0
  293. package/dist/chunk-XIG5PDM7.js +48 -0
  294. package/dist/chunk-XJNBEDFE.js +193 -0
  295. package/dist/chunk-XJNBEDFE.js.map +1 -0
  296. package/dist/chunk-XVVIG67A.js +291 -0
  297. package/dist/chunk-XVVIG67A.js.map +1 -0
  298. package/dist/chunk-XVZ7B3HG.js +135 -0
  299. package/dist/chunk-YBPYIAA5.js +73 -0
  300. package/dist/chunk-YBPYIAA5.js.map +1 -0
  301. package/dist/chunk-Z734BLO3.js +21 -0
  302. package/dist/chunk-Z734BLO3.js.map +1 -0
  303. package/dist/chunk-ZKSK55RC.js +269 -0
  304. package/dist/chunk-ZKSK55RC.js.map +1 -0
  305. package/dist/chunk-ZTFCYYEZ.js +69 -0
  306. package/dist/chunk-ZTFCYYEZ.js.map +1 -0
  307. package/dist/chunk-ZY2MNJR6.js +329 -0
  308. package/dist/chunk-ZY2MNJR6.js.map +1 -0
  309. package/dist/cli-D3VpkVwB.d.ts +1136 -0
  310. package/dist/cli.d.ts +39 -10
  311. package/dist/cli.js +108 -49
  312. package/dist/commitment-ledger.js +1 -1
  313. package/dist/compat/checks.d.ts +5 -0
  314. package/dist/compat/checks.js +11 -0
  315. package/dist/compat/checks.js.map +1 -0
  316. package/dist/compat/types.d.ts +30 -0
  317. package/dist/compat/types.js +1 -0
  318. package/dist/compat/types.js.map +1 -0
  319. package/dist/compounding/engine.d.ts +221 -0
  320. package/dist/compounding/engine.js +32 -0
  321. package/dist/compounding/engine.js.map +1 -0
  322. package/dist/compounding/preference-consolidator.d.ts +92 -0
  323. package/dist/compounding/preference-consolidator.js +553 -0
  324. package/dist/compounding/preference-consolidator.js.map +1 -0
  325. package/dist/config.d.ts +4 -2
  326. package/dist/config.js +9 -4
  327. package/dist/conflict-policy-DyJ2wd-h.d.ts +4 -0
  328. package/dist/connectors/codex-materialize-runner.d.ts +64 -0
  329. package/dist/connectors/codex-materialize-runner.js +33 -0
  330. package/dist/connectors/codex-materialize-runner.js.map +1 -0
  331. package/dist/connectors/codex-materialize.d.ts +195 -0
  332. package/dist/connectors/codex-materialize.js +38 -0
  333. package/dist/connectors/codex-materialize.js.map +1 -0
  334. package/dist/connectors/index.d.ts +444 -0
  335. package/dist/connectors/index.js +115 -0
  336. package/dist/connectors/index.js.map +1 -0
  337. package/dist/connectors-cli-CwbyjGR7.d.ts +257 -0
  338. package/dist/connectors-cli.d.ts +1 -1
  339. package/dist/consolidation-provenance-check.d.ts +3 -1
  340. package/dist/consolidation-undo.d.ts +3 -1
  341. package/dist/contradiction/index.d.ts +258 -0
  342. package/dist/contradiction/index.js +43 -0
  343. package/dist/contradiction/index.js.map +1 -0
  344. package/dist/contradiction-review-ATP4S6IC.js +30 -0
  345. package/dist/contradiction-review-ATP4S6IC.js.map +1 -0
  346. package/dist/contradiction-scan-5A4IDZV5.js +13 -0
  347. package/dist/contradiction-scan-5A4IDZV5.js.map +1 -0
  348. package/dist/conversation-index/backend.d.ts +97 -0
  349. package/dist/conversation-index/backend.js +13 -0
  350. package/dist/conversation-index/backend.js.map +1 -0
  351. package/dist/conversation-index/chunker.d.ts +16 -0
  352. package/dist/conversation-index/chunker.js +8 -0
  353. package/dist/conversation-index/chunker.js.map +1 -0
  354. package/dist/conversation-index/cleanup.d.ts +11 -0
  355. package/dist/conversation-index/cleanup.js +9 -0
  356. package/dist/conversation-index/cleanup.js.map +1 -0
  357. package/dist/conversation-index/faiss-adapter.d.ts +6 -0
  358. package/dist/conversation-index/faiss-adapter.js +16 -0
  359. package/dist/conversation-index/faiss-adapter.js.map +1 -0
  360. package/dist/conversation-index/indexer.d.ts +23 -0
  361. package/dist/conversation-index/indexer.js +15 -0
  362. package/dist/conversation-index/indexer.js.map +1 -0
  363. package/dist/conversation-index/search.d.ts +6 -0
  364. package/dist/conversation-index/search.js +11 -0
  365. package/dist/conversation-index/search.js.map +1 -0
  366. package/dist/embedding-fallback.js +2 -2
  367. package/dist/enrichment/index.d.ts +163 -0
  368. package/dist/enrichment/index.js +18 -0
  369. package/dist/enrichment/index.js.map +1 -0
  370. package/dist/entity-retrieval.d.ts +4 -2
  371. package/dist/entity-retrieval.js +8 -5
  372. package/dist/evals.js +1 -1
  373. package/dist/explicit-capture.d.ts +20 -5
  374. package/dist/explicit-capture.js +2 -2
  375. package/dist/extraction-judge-training.js +1 -1
  376. package/dist/extraction.js +8 -8
  377. package/dist/faiss-adapter-CzPghc4C.d.ts +70 -0
  378. package/dist/fallback-llm.d.ts +2 -0
  379. package/dist/fallback-llm.js +4 -4
  380. package/dist/graph-edge-decay-5DI5GUNL.js +207 -0
  381. package/dist/index.d.ts +66 -711
  382. package/dist/index.js +556 -2680
  383. package/dist/index.js.map +1 -1
  384. package/dist/lcm/archive.d.ts +89 -0
  385. package/dist/lcm/archive.js +12 -0
  386. package/dist/lcm/archive.js.map +1 -0
  387. package/dist/lcm/dag.d.ts +48 -0
  388. package/dist/lcm/dag.js +8 -0
  389. package/dist/lcm/dag.js.map +1 -0
  390. package/dist/lcm/engine.d.ts +116 -0
  391. package/dist/lcm/engine.js +20 -0
  392. package/dist/lcm/engine.js.map +1 -0
  393. package/dist/lcm/index.d.ts +12 -0
  394. package/dist/lcm/index.js +44 -0
  395. package/dist/lcm/index.js.map +1 -0
  396. package/dist/lcm/queue.d.ts +62 -0
  397. package/dist/lcm/queue.js +8 -0
  398. package/dist/lcm/queue.js.map +1 -0
  399. package/dist/lcm/recall.d.ts +20 -0
  400. package/dist/lcm/recall.js +8 -0
  401. package/dist/lcm/recall.js.map +1 -0
  402. package/dist/lcm/schema.d.ts +16 -0
  403. package/dist/lcm/schema.js +14 -0
  404. package/dist/lcm/schema.js.map +1 -0
  405. package/dist/lcm/summarizer.d.ts +38 -0
  406. package/dist/lcm/summarizer.js +12 -0
  407. package/dist/lcm/summarizer.js.map +1 -0
  408. package/dist/lcm/tools.d.ts +29 -0
  409. package/dist/lcm/tools.js +8 -0
  410. package/dist/lcm/tools.js.map +1 -0
  411. package/dist/live-connectors-runner.js +5 -5
  412. package/dist/local-llm.js +3 -3
  413. package/dist/maintenance/archive-observations.d.ts +18 -0
  414. package/dist/maintenance/archive-observations.js +8 -0
  415. package/dist/maintenance/archive-observations.js.map +1 -0
  416. package/dist/maintenance/backup-stamp.d.ts +3 -0
  417. package/dist/maintenance/backup-stamp.js +8 -0
  418. package/dist/maintenance/backup-stamp.js.map +1 -0
  419. package/dist/maintenance/memory-governance-cron.d.ts +85 -0
  420. package/dist/maintenance/memory-governance-cron.js +22 -0
  421. package/dist/maintenance/memory-governance-cron.js.map +1 -0
  422. package/dist/maintenance/memory-governance.d.ts +137 -0
  423. package/dist/maintenance/memory-governance.js +40 -0
  424. package/dist/maintenance/memory-governance.js.map +1 -0
  425. package/dist/maintenance/migrate-observations.d.ts +18 -0
  426. package/dist/maintenance/migrate-observations.js +9 -0
  427. package/dist/maintenance/migrate-observations.js.map +1 -0
  428. package/dist/maintenance/observation-ledger-utils.d.ts +10 -0
  429. package/dist/maintenance/observation-ledger-utils.js +10 -0
  430. package/dist/maintenance/observation-ledger-utils.js.map +1 -0
  431. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +15 -0
  432. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +28 -0
  433. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js.map +1 -0
  434. package/dist/maintenance/rebuild-memory-projection.d.ts +77 -0
  435. package/dist/maintenance/rebuild-memory-projection.js +35 -0
  436. package/dist/maintenance/rebuild-memory-projection.js.map +1 -0
  437. package/dist/maintenance/rebuild-observations.d.ts +17 -0
  438. package/dist/maintenance/rebuild-observations.js +9 -0
  439. package/dist/maintenance/rebuild-observations.js.map +1 -0
  440. package/dist/mcp-memory-inspector-app.d.ts +24 -6
  441. package/dist/memory-projection-store.d.ts +108 -3
  442. package/dist/memory-projection-store.js +2 -1
  443. package/dist/memory-worth-outcomes.d.ts +4 -2
  444. package/dist/migrate/from-engram.d.ts +24 -0
  445. package/dist/migrate/from-engram.js +12 -0
  446. package/dist/migrate/from-engram.js.map +1 -0
  447. package/dist/namespaces/migrate.d.ts +50 -0
  448. package/dist/namespaces/migrate.js +50 -0
  449. package/dist/namespaces/migrate.js.map +1 -0
  450. package/dist/namespaces/principal.d.ts +17 -0
  451. package/dist/namespaces/principal.js +16 -0
  452. package/dist/namespaces/principal.js.map +1 -0
  453. package/dist/namespaces/search.d.ts +46 -0
  454. package/dist/namespaces/search.js +28 -0
  455. package/dist/namespaces/search.js.map +1 -0
  456. package/dist/namespaces/storage.d.ts +32 -0
  457. package/dist/namespaces/storage.js +28 -0
  458. package/dist/namespaces/storage.js.map +1 -0
  459. package/dist/network/tailscale.d.ts +41 -0
  460. package/dist/network/tailscale.js +9 -0
  461. package/dist/network/tailscale.js.map +1 -0
  462. package/dist/network/webdav.d.ts +39 -0
  463. package/dist/network/webdav.js +10 -0
  464. package/dist/network/webdav.js.map +1 -0
  465. package/dist/objective-state-writers.js +2 -2
  466. package/dist/operator-toolkit.d.ts +4 -2
  467. package/dist/operator-toolkit.js +32 -14
  468. package/dist/opik-exporter.js +2 -2
  469. package/dist/opik-exporter.js.map +1 -1
  470. package/dist/orchestrator-DuWl9Hwx.d.ts +1244 -0
  471. package/dist/orchestrator.d.ts +22 -7
  472. package/dist/orchestrator.js +79 -44
  473. package/dist/path-MR5JPYOP.js +9 -0
  474. package/dist/path-MR5JPYOP.js.map +1 -0
  475. package/dist/qmd-recall-cache.d.ts +1 -1
  476. package/dist/qmd.d.ts +102 -3
  477. package/dist/qmd.js +23 -5
  478. package/dist/recall-explain-renderer.js +3 -3
  479. package/dist/recall-xray-cli.js +4 -4
  480. package/dist/recall-xray-renderer.js +3 -3
  481. package/dist/recall-xray.js +2 -2
  482. package/dist/replay/normalizers/chatgpt.d.ts +6 -0
  483. package/dist/replay/normalizers/chatgpt.js +11 -0
  484. package/dist/replay/normalizers/chatgpt.js.map +1 -0
  485. package/dist/replay/normalizers/claude.d.ts +6 -0
  486. package/dist/replay/normalizers/claude.js +11 -0
  487. package/dist/replay/normalizers/claude.js.map +1 -0
  488. package/dist/replay/normalizers/openclaw.d.ts +6 -0
  489. package/dist/replay/normalizers/openclaw.js +11 -0
  490. package/dist/replay/normalizers/openclaw.js.map +1 -0
  491. package/dist/replay/normalizers/shared.d.ts +16 -0
  492. package/dist/replay/normalizers/shared.js +14 -0
  493. package/dist/replay/normalizers/shared.js.map +1 -0
  494. package/dist/replay/runner.d.ts +35 -0
  495. package/dist/replay/runner.js +16 -0
  496. package/dist/replay/runner.js.map +1 -0
  497. package/dist/replay/types.d.ts +57 -0
  498. package/dist/replay/types.js +19 -0
  499. package/dist/replay/types.js.map +1 -0
  500. package/dist/resolution-B7FNQSSP.js +12 -0
  501. package/dist/resolution-B7FNQSSP.js.map +1 -0
  502. package/dist/resolve-provider-secret.js +2 -2
  503. package/dist/resume-bundles.js +8 -6
  504. package/dist/retrieval-agents.d.ts +1 -1
  505. package/dist/routing/engine.d.ts +35 -0
  506. package/dist/routing/engine.js +16 -0
  507. package/dist/routing/engine.js.map +1 -0
  508. package/dist/routing/store.d.ts +27 -0
  509. package/dist/routing/store.js +10 -0
  510. package/dist/routing/store.js.map +1 -0
  511. package/dist/runtime/better-sqlite.d.ts +8 -0
  512. package/dist/runtime/better-sqlite.js +10 -0
  513. package/dist/runtime/better-sqlite.js.map +1 -0
  514. package/dist/runtime/child-process.d.ts +32 -0
  515. package/dist/runtime/child-process.js +10 -0
  516. package/dist/runtime/child-process.js.map +1 -0
  517. package/dist/runtime/env.d.ts +5 -0
  518. package/dist/runtime/env.js +12 -0
  519. package/dist/runtime/env.js.map +1 -0
  520. package/dist/schemas.d.ts +22 -22
  521. package/dist/sdk-compat.js +1 -1
  522. package/dist/search/document-scanner.d.ts +22 -0
  523. package/dist/search/document-scanner.js +8 -0
  524. package/dist/search/document-scanner.js.map +1 -0
  525. package/dist/search/embed-helper.d.ts +35 -0
  526. package/dist/search/embed-helper.js +9 -0
  527. package/dist/search/embed-helper.js.map +1 -0
  528. package/dist/search/factory.d.ts +32 -0
  529. package/dist/search/factory.js +29 -0
  530. package/dist/search/factory.js.map +1 -0
  531. package/dist/search/index.d.ts +15 -0
  532. package/dist/search/index.js +50 -0
  533. package/dist/search/index.js.map +1 -0
  534. package/dist/search/lancedb-backend.d.ts +51 -0
  535. package/dist/search/lancedb-backend.js +10 -0
  536. package/dist/search/lancedb-backend.js.map +1 -0
  537. package/dist/search/meilisearch-backend.d.ts +48 -0
  538. package/dist/search/meilisearch-backend.js +10 -0
  539. package/dist/search/meilisearch-backend.js.map +1 -0
  540. package/dist/search/noop-backend.d.ts +26 -0
  541. package/dist/search/noop-backend.js +8 -0
  542. package/dist/search/noop-backend.js.map +1 -0
  543. package/dist/search/orama-backend.d.ts +53 -0
  544. package/dist/search/orama-backend.js +10 -0
  545. package/dist/search/orama-backend.js.map +1 -0
  546. package/dist/search/port.d.ts +61 -0
  547. package/dist/search/port.js +1 -0
  548. package/dist/search/port.js.map +1 -0
  549. package/dist/search/remote-backend.d.ts +39 -0
  550. package/dist/search/remote-backend.js +9 -0
  551. package/dist/search/remote-backend.js.map +1 -0
  552. package/dist/secure-store/index.d.ts +890 -0
  553. package/dist/secure-store/index.js +156 -0
  554. package/dist/secure-store/index.js.map +1 -0
  555. package/dist/semantic-VwGI14Ok.d.ts +69 -0
  556. package/dist/semantic-consolidation-4HkHWgeI.d.ts +180 -0
  557. package/dist/semantic-consolidation.d.ts +2 -2
  558. package/dist/semantic-consolidation.js +13 -6
  559. package/dist/semantic-rule-promotion.js +8 -5
  560. package/dist/semantic-rule-verifier.js +8 -5
  561. package/dist/shared-context/manager.d.ts +131 -0
  562. package/dist/shared-context/manager.js +15 -0
  563. package/dist/shared-context/manager.js.map +1 -0
  564. package/dist/skills-registry.js +13 -1
  565. package/dist/skills-registry.js.map +1 -1
  566. package/dist/state-store-VZU2IA53.js +16 -0
  567. package/dist/state-store-VZU2IA53.js.map +1 -0
  568. package/dist/storage-paths.d.ts +9 -0
  569. package/dist/storage-paths.js +20 -0
  570. package/dist/storage-paths.js.map +1 -0
  571. package/dist/storage.d.ts +3 -1
  572. package/dist/storage.js +7 -4
  573. package/dist/summarizer.d.ts +5 -0
  574. package/dist/summarizer.js +9 -8
  575. package/dist/summary-snapshot.js +2 -1
  576. package/dist/surfaces/dreams.d.ts +16 -0
  577. package/dist/surfaces/dreams.js +282 -0
  578. package/dist/surfaces/dreams.js.map +1 -0
  579. package/dist/surfaces/heartbeat.d.ts +17 -0
  580. package/dist/surfaces/heartbeat.js +265 -0
  581. package/dist/surfaces/heartbeat.js.map +1 -0
  582. package/dist/temporal-supersession.d.ts +3 -1
  583. package/dist/threading.d.ts +5 -0
  584. package/dist/threading.js +2 -1
  585. package/dist/tier-migration.d.ts +4 -2
  586. package/dist/tokens.js +2 -2
  587. package/dist/transcript.d.ts +15 -1
  588. package/dist/transcript.js +2 -1
  589. package/dist/transfer/autodetect.d.ts +4 -0
  590. package/dist/transfer/autodetect.js +15 -0
  591. package/dist/transfer/autodetect.js.map +1 -0
  592. package/dist/transfer/backup.d.ts +21 -0
  593. package/dist/transfer/backup.js +17 -0
  594. package/dist/transfer/backup.js.map +1 -0
  595. package/dist/transfer/capsule-export.d.ts +113 -0
  596. package/dist/transfer/capsule-export.js +19 -0
  597. package/dist/transfer/capsule-export.js.map +1 -0
  598. package/dist/transfer/capsule-import.d.ts +124 -0
  599. package/dist/transfer/capsule-import.js +16 -0
  600. package/dist/transfer/capsule-import.js.map +1 -0
  601. package/dist/transfer/constants.d.ts +13 -0
  602. package/dist/transfer/constants.js +12 -0
  603. package/dist/transfer/constants.js.map +1 -0
  604. package/dist/transfer/export-json.d.ts +11 -0
  605. package/dist/transfer/export-json.js +11 -0
  606. package/dist/transfer/export-json.js.map +1 -0
  607. package/dist/transfer/export-md.d.ts +10 -0
  608. package/dist/transfer/export-md.js +13 -0
  609. package/dist/transfer/export-md.js.map +1 -0
  610. package/dist/transfer/export-sqlite.d.ts +9 -0
  611. package/dist/transfer/export-sqlite.js +12 -0
  612. package/dist/transfer/export-sqlite.js.map +1 -0
  613. package/dist/transfer/fs-utils.d.ts +61 -0
  614. package/dist/transfer/fs-utils.js +40 -0
  615. package/dist/transfer/fs-utils.js.map +1 -0
  616. package/dist/transfer/import-json.d.ts +16 -0
  617. package/dist/transfer/import-json.js +13 -0
  618. package/dist/transfer/import-json.js.map +1 -0
  619. package/dist/transfer/import-md.d.ts +14 -0
  620. package/dist/transfer/import-md.js +11 -0
  621. package/dist/transfer/import-md.js.map +1 -0
  622. package/dist/transfer/import-sqlite.d.ts +14 -0
  623. package/dist/transfer/import-sqlite.js +12 -0
  624. package/dist/transfer/import-sqlite.js.map +1 -0
  625. package/dist/transfer/sqlite-schema.d.ts +4 -0
  626. package/dist/transfer/sqlite-schema.js +10 -0
  627. package/dist/transfer/sqlite-schema.js.map +1 -0
  628. package/dist/transfer/types.d.ts +916 -0
  629. package/dist/transfer/types.js +30 -0
  630. package/dist/transfer/types.js.map +1 -0
  631. package/dist/types.d.ts +28 -1
  632. package/dist/types.js +1 -1
  633. package/dist/verified-recall.js +9 -6
  634. package/dist/work/board.d.ts +43 -0
  635. package/dist/work/board.js +14 -0
  636. package/dist/work/board.js.map +1 -0
  637. package/dist/work/boundary.d.ts +8 -0
  638. package/dist/work/boundary.js +14 -0
  639. package/dist/work/boundary.js.map +1 -0
  640. package/dist/work/storage.d.ts +39 -0
  641. package/dist/work/storage.js +11 -0
  642. package/dist/work/storage.js.map +1 -0
  643. package/dist/work/types.d.ts +75 -0
  644. package/dist/work/types.js +1 -0
  645. package/dist/work/types.js.map +1 -0
  646. package/package.json +2767 -6
  647. package/scripts/faiss_index.py +816 -0
  648. package/scripts/faiss_requirements.txt +3 -0
  649. package/skills/remnic-entities/SKILL.md +51 -0
  650. package/skills/remnic-memory-workflow/SKILL.md +61 -0
  651. package/skills/remnic-recall/SKILL.md +51 -0
  652. package/skills/remnic-remember/SKILL.md +56 -0
  653. package/skills/remnic-search/SKILL.md +51 -0
  654. package/skills/remnic-status/SKILL.md +51 -0
  655. package/src/abort-error.test.ts +49 -0
  656. package/src/abort-error.ts +46 -0
  657. package/src/abstraction-nodes.ts +162 -0
  658. package/src/access-audit.test.ts +178 -0
  659. package/src/access-audit.ts +125 -0
  660. package/src/access-cli.test.ts +439 -0
  661. package/src/access-cli.ts +438 -0
  662. package/src/access-http.test.ts +225 -0
  663. package/src/access-http.ts +1899 -0
  664. package/src/access-idempotency.ts +232 -0
  665. package/src/access-mcp.test.ts +568 -0
  666. package/src/access-mcp.ts +3056 -0
  667. package/src/access-schema-pi.test.ts +60 -0
  668. package/src/access-schema.ts +522 -0
  669. package/src/access-service-namespace.test.ts +123 -0
  670. package/src/access-service.ts +5629 -0
  671. package/src/action-confidence.test.ts +206 -0
  672. package/src/action-confidence.ts +466 -0
  673. package/src/active-memory-bridge.test.ts +285 -0
  674. package/src/active-memory-bridge.ts +217 -0
  675. package/src/active-recall.test.ts +484 -0
  676. package/src/active-recall.ts +459 -0
  677. package/src/adapters/claude-code.ts +56 -0
  678. package/src/adapters/codex.ts +57 -0
  679. package/src/adapters/hermes.ts +64 -0
  680. package/src/adapters/index.ts +6 -0
  681. package/src/adapters/registry.ts +41 -0
  682. package/src/adapters/replit.ts +55 -0
  683. package/src/adapters/types.ts +51 -0
  684. package/src/behavior-learner.ts +144 -0
  685. package/src/behavior-signals.ts +73 -0
  686. package/src/binary-lifecycle/backend.ts +117 -0
  687. package/src/binary-lifecycle/index.ts +35 -0
  688. package/src/binary-lifecycle/manifest.ts +79 -0
  689. package/src/binary-lifecycle/pipeline.ts +352 -0
  690. package/src/binary-lifecycle/scanner.ts +89 -0
  691. package/src/binary-lifecycle/types.ts +89 -0
  692. package/src/bootstrap.ts +178 -0
  693. package/src/boxes.ts +521 -0
  694. package/src/briefing.test.ts +1535 -0
  695. package/src/briefing.ts +1382 -0
  696. package/src/buffer-session.test.ts +443 -0
  697. package/src/buffer-surprise-report.ts +176 -0
  698. package/src/buffer-surprise-telemetry.test.ts +606 -0
  699. package/src/buffer-surprise-trigger.test.ts +766 -0
  700. package/src/buffer-surprise.test.ts +339 -0
  701. package/src/buffer-surprise.ts +203 -0
  702. package/src/buffer.ts +900 -0
  703. package/src/bulk-import/cli-command.test.ts +204 -0
  704. package/src/bulk-import/index.ts +34 -0
  705. package/src/bulk-import/pipeline.test.ts +445 -0
  706. package/src/bulk-import/pipeline.ts +178 -0
  707. package/src/bulk-import/registry.test.ts +151 -0
  708. package/src/bulk-import/registry.ts +72 -0
  709. package/src/bulk-import/types.test.ts +272 -0
  710. package/src/bulk-import/types.ts +145 -0
  711. package/src/calibration.ts +394 -0
  712. package/src/capsule-cli.test.ts +398 -0
  713. package/src/capsule-cli.ts +565 -0
  714. package/src/causal-behavior.ts +308 -0
  715. package/src/causal-chain.ts +419 -0
  716. package/src/causal-consolidation.ts +370 -0
  717. package/src/causal-retrieval.ts +286 -0
  718. package/src/causal-trajectory-graph.ts +60 -0
  719. package/src/causal-trajectory.ts +303 -0
  720. package/src/chunking.ts +220 -0
  721. package/src/citations.ts +232 -0
  722. package/src/cli.ts +9403 -0
  723. package/src/codex-cli-fallback.ts +162 -0
  724. package/src/codex-thread-key.ts +1 -0
  725. package/src/coding/access-coding-context.test.ts +197 -0
  726. package/src/coding/coding-branch-scope.test.ts +281 -0
  727. package/src/coding/coding-namespace.test.ts +360 -0
  728. package/src/coding/coding-namespace.ts +412 -0
  729. package/src/coding/coding-orchestrator.test.ts +249 -0
  730. package/src/coding/git-context.test.ts +507 -0
  731. package/src/coding/git-context.ts +336 -0
  732. package/src/coding/mcp-set-coding-context.test.ts +174 -0
  733. package/src/coding/review-context.test.ts +316 -0
  734. package/src/coding/review-context.ts +349 -0
  735. package/src/coding/wire-coding-context.test.ts +468 -0
  736. package/src/commitment-ledger.test.ts +78 -0
  737. package/src/commitment-ledger.ts +337 -0
  738. package/src/compat/checks.test.ts +206 -0
  739. package/src/compat/checks.ts +716 -0
  740. package/src/compat/types.ts +33 -0
  741. package/src/compounding/engine.ts +1686 -0
  742. package/src/compounding/preference-consolidator.ts +778 -0
  743. package/src/compression-optimizer.ts +312 -0
  744. package/src/config.test.ts +930 -0
  745. package/src/config.ts +3807 -0
  746. package/src/connectors/codex/instructions.md +160 -0
  747. package/src/connectors/codex/resources/namespace-cheatsheet.md +48 -0
  748. package/src/connectors/codex-marketplace.ts +500 -0
  749. package/src/connectors/codex-materialize-runner.ts +212 -0
  750. package/src/connectors/codex-materialize.ts +983 -0
  751. package/src/connectors/coerce.ts +62 -0
  752. package/src/connectors/index.test.ts +1570 -0
  753. package/src/connectors/index.ts +3222 -0
  754. package/src/connectors/live/framework.ts +164 -0
  755. package/src/connectors/live/github.test.ts +1218 -0
  756. package/src/connectors/live/github.ts +1068 -0
  757. package/src/connectors/live/gmail.test.ts +1706 -0
  758. package/src/connectors/live/gmail.ts +1293 -0
  759. package/src/connectors/live/google-drive.test.ts +696 -0
  760. package/src/connectors/live/google-drive.ts +724 -0
  761. package/src/connectors/live/index.ts +101 -0
  762. package/src/connectors/live/live-connectors.test.ts +689 -0
  763. package/src/connectors/live/notion.test.ts +1109 -0
  764. package/src/connectors/live/notion.ts +978 -0
  765. package/src/connectors/live/registry.ts +103 -0
  766. package/src/connectors/live/state-store.ts +399 -0
  767. package/src/connectors/live/transient-errors.ts +150 -0
  768. package/src/connectors/weclone-installer.test.ts +850 -0
  769. package/src/connectors-cli.ts +513 -0
  770. package/src/console/state.test.ts +224 -0
  771. package/src/console/state.ts +514 -0
  772. package/src/console/trace.test.ts +813 -0
  773. package/src/console/trace.ts +603 -0
  774. package/src/console/tui.test.ts +582 -0
  775. package/src/console/tui.ts +508 -0
  776. package/src/consolidation-operator.ts +182 -0
  777. package/src/consolidation-provenance-check.ts +551 -0
  778. package/src/consolidation-undo.ts +718 -0
  779. package/src/contradiction/contradiction-judge.test.ts +189 -0
  780. package/src/contradiction/contradiction-judge.ts +333 -0
  781. package/src/contradiction/contradiction-review.ts +574 -0
  782. package/src/contradiction/contradiction-scan.ts +504 -0
  783. package/src/contradiction/contradiction.test.ts +2230 -0
  784. package/src/contradiction/index.ts +37 -0
  785. package/src/contradiction/resolution.ts +383 -0
  786. package/src/conversation-index/backend.ts +323 -0
  787. package/src/conversation-index/chunker.ts +47 -0
  788. package/src/conversation-index/cleanup.ts +53 -0
  789. package/src/conversation-index/faiss-adapter.ts +384 -0
  790. package/src/conversation-index/indexer.test.ts +164 -0
  791. package/src/conversation-index/indexer.ts +192 -0
  792. package/src/conversation-index/search.ts +37 -0
  793. package/src/cross-namespace-budget.test.ts +275 -0
  794. package/src/cross-namespace-budget.ts +365 -0
  795. package/src/cue-anchors.ts +163 -0
  796. package/src/curation/index.ts +544 -0
  797. package/src/dashboard-runtime.ts +337 -0
  798. package/src/day-summary.ts +122 -0
  799. package/src/dedup/index.ts +330 -0
  800. package/src/dedup/semantic.test.ts +1577 -0
  801. package/src/dedup/semantic.ts +148 -0
  802. package/src/delinearize.ts +193 -0
  803. package/src/direct-answer-wiring.test.ts +473 -0
  804. package/src/direct-answer-wiring.ts +180 -0
  805. package/src/direct-answer.test.ts +484 -0
  806. package/src/direct-answer.ts +273 -0
  807. package/src/embedding-fallback.ts +565 -0
  808. package/src/enrichment/audit.ts +89 -0
  809. package/src/enrichment/index.ts +27 -0
  810. package/src/enrichment/pipeline.ts +197 -0
  811. package/src/enrichment/provider-registry.ts +85 -0
  812. package/src/enrichment/types.ts +100 -0
  813. package/src/enrichment/web-search-provider.ts +63 -0
  814. package/src/entity-retrieval.ts +774 -0
  815. package/src/entity-schema.ts +239 -0
  816. package/src/evals.ts +1312 -0
  817. package/src/event-order-recall.test.ts +4164 -0
  818. package/src/event-order-recall.ts +2802 -0
  819. package/src/evidence-pack.test.ts +89 -0
  820. package/src/evidence-pack.ts +388 -0
  821. package/src/explicit-capture.ts +530 -0
  822. package/src/explicit-cue-recall.test.ts +3019 -0
  823. package/src/explicit-cue-recall.ts +5545 -0
  824. package/src/extraction-judge-telemetry.ts +234 -0
  825. package/src/extraction-judge-training.ts +221 -0
  826. package/src/extraction-judge.ts +846 -0
  827. package/src/extraction-timeout.test.ts +265 -0
  828. package/src/extraction.ts +2719 -0
  829. package/src/fallback-llm.test.ts +1060 -0
  830. package/src/fallback-llm.ts +918 -0
  831. package/src/focused-list-recall.test.ts +734 -0
  832. package/src/focused-list-recall.ts +1160 -0
  833. package/src/graph-dashboard-diff.ts +35 -0
  834. package/src/graph-dashboard-key.ts +5 -0
  835. package/src/graph-dashboard-parser.ts +104 -0
  836. package/src/graph-edge-reinforcement.ts +192 -0
  837. package/src/graph-events.ts +151 -0
  838. package/src/graph-recall.test.ts +164 -0
  839. package/src/graph-recall.ts +189 -0
  840. package/src/graph-retrieval.test.ts +809 -0
  841. package/src/graph-retrieval.ts +823 -0
  842. package/src/graph-snapshot.ts +329 -0
  843. package/src/graph.ts +813 -0
  844. package/src/harmonic-retrieval.ts +223 -0
  845. package/src/himem.ts +154 -0
  846. package/src/hygiene.ts +87 -0
  847. package/src/identity-continuity.ts +333 -0
  848. package/src/importance.ts +328 -0
  849. package/src/importers/base.test.ts +294 -0
  850. package/src/importers/base.ts +436 -0
  851. package/src/importers/index.ts +21 -0
  852. package/src/index.ts +1204 -0
  853. package/src/intent.ts +154 -0
  854. package/src/json-extract.ts +85 -0
  855. package/src/json-store.ts +42 -0
  856. package/src/lcm/archive.ts +617 -0
  857. package/src/lcm/dag.ts +199 -0
  858. package/src/lcm/engine.ts +645 -0
  859. package/src/lcm/index.ts +7 -0
  860. package/src/lcm/queue.test.ts +178 -0
  861. package/src/lcm/queue.ts +200 -0
  862. package/src/lcm/recall.ts +117 -0
  863. package/src/lcm/schema.ts +154 -0
  864. package/src/lcm/summarizer.ts +235 -0
  865. package/src/lcm/tools.ts +191 -0
  866. package/src/lcm-engine.test.ts +660 -0
  867. package/src/legacy-hook-compat.test.ts +20 -0
  868. package/src/legacy-hook-compat.ts +45 -0
  869. package/src/lifecycle.ts +289 -0
  870. package/src/live-connectors-runner.ts +385 -0
  871. package/src/local-llm-qos.test.ts +303 -0
  872. package/src/local-llm-thinking.test.ts +292 -0
  873. package/src/local-llm.ts +1464 -0
  874. package/src/logger.ts +49 -0
  875. package/src/maintenance/archive-observations.ts +147 -0
  876. package/src/maintenance/backup-stamp.ts +3 -0
  877. package/src/maintenance/dreams-ledger.ts +516 -0
  878. package/src/maintenance/first-start-migration.ts +362 -0
  879. package/src/maintenance/forget.test.ts +206 -0
  880. package/src/maintenance/forget.ts +126 -0
  881. package/src/maintenance/graph-edge-decay.test.ts +409 -0
  882. package/src/maintenance/graph-edge-decay.ts +394 -0
  883. package/src/maintenance/memory-governance-cron.ts +447 -0
  884. package/src/maintenance/memory-governance.ts +1039 -0
  885. package/src/maintenance/migrate-observations.ts +216 -0
  886. package/src/maintenance/observation-ledger-utils.ts +54 -0
  887. package/src/maintenance/pattern-reinforcement.test.ts +875 -0
  888. package/src/maintenance/pattern-reinforcement.ts +369 -0
  889. package/src/maintenance/purge.ts +334 -0
  890. package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +78 -0
  891. package/src/maintenance/rebuild-memory-projection.ts +1234 -0
  892. package/src/maintenance/rebuild-observations.ts +178 -0
  893. package/src/maintenance/tier-stats.test.ts +378 -0
  894. package/src/maintenance/tier-stats.ts +222 -0
  895. package/src/mcp-memory-inspector-app.ts +421 -0
  896. package/src/memory-action-policy.ts +80 -0
  897. package/src/memory-cache.ts +208 -0
  898. package/src/memory-extension/claude-code-publisher.ts +51 -0
  899. package/src/memory-extension/codex-publisher.ts +149 -0
  900. package/src/memory-extension/hermes-publisher.ts +51 -0
  901. package/src/memory-extension/index.ts +100 -0
  902. package/src/memory-extension/shared-instructions.ts +133 -0
  903. package/src/memory-extension/types.ts +86 -0
  904. package/src/memory-extension-host/host-discovery.ts +276 -0
  905. package/src/memory-extension-host/index.ts +14 -0
  906. package/src/memory-extension-host/render-extensions-block.ts +73 -0
  907. package/src/memory-extension-host/types.ts +21 -0
  908. package/src/memory-lifecycle-ledger-utils.ts +116 -0
  909. package/src/memory-projection-format.ts +11 -0
  910. package/src/memory-projection-store.ts +951 -0
  911. package/src/memory-provenance.test.ts +196 -0
  912. package/src/memory-provenance.ts +484 -0
  913. package/src/memory-worth-bench.test.ts +71 -0
  914. package/src/memory-worth-bench.ts +265 -0
  915. package/src/memory-worth-filter.test.ts +209 -0
  916. package/src/memory-worth-filter.ts +204 -0
  917. package/src/memory-worth-frontmatter.test.ts +311 -0
  918. package/src/memory-worth-outcomes.test.ts +316 -0
  919. package/src/memory-worth-outcomes.ts +286 -0
  920. package/src/memory-worth.test.ts +317 -0
  921. package/src/memory-worth.ts +215 -0
  922. package/src/message-parts/index.ts +806 -0
  923. package/src/message-parts/message-parts.test.ts +421 -0
  924. package/src/migrate/from-engram.ts +789 -0
  925. package/src/model-registry.ts +313 -0
  926. package/src/models-json.ts +76 -0
  927. package/src/namespaces/migrate.ts +187 -0
  928. package/src/namespaces/path.ts +25 -0
  929. package/src/namespaces/principal.test.ts +195 -0
  930. package/src/namespaces/principal.ts +86 -0
  931. package/src/namespaces/search.test.ts +105 -0
  932. package/src/namespaces/search.ts +233 -0
  933. package/src/namespaces/storage.ts +74 -0
  934. package/src/native-knowledge.ts +1823 -0
  935. package/src/negative.ts +72 -0
  936. package/src/network/tailscale.ts +179 -0
  937. package/src/network/webdav.ts +385 -0
  938. package/src/objective-state-writers.ts +951 -0
  939. package/src/objective-state.ts +320 -0
  940. package/src/onboarding/index.ts +529 -0
  941. package/src/openai-chat-compat.ts +56 -0
  942. package/src/operator-toolkit.ts +2132 -0
  943. package/src/opik-exporter.test.ts +72 -0
  944. package/src/opik-exporter.ts +587 -0
  945. package/src/orchestrator-extraction-queue.test.ts +197 -0
  946. package/src/orchestrator-flush.test.ts +1171 -0
  947. package/src/orchestrator-pattern-reinforcement.test.ts +128 -0
  948. package/src/orchestrator-source-attribution.test.ts +701 -0
  949. package/src/orchestrator.ts +16368 -0
  950. package/src/page-versioning.ts +450 -0
  951. package/src/patterns-cli.ts +574 -0
  952. package/src/peers/index.ts +54 -0
  953. package/src/peers/migrate-from-identity-anchor.test.ts +291 -0
  954. package/src/peers/migrate-from-identity-anchor.ts +350 -0
  955. package/src/peers/peers.test.ts +419 -0
  956. package/src/peers/profile-reasoner.ts +694 -0
  957. package/src/peers/storage.ts +1350 -0
  958. package/src/peers/types.ts +138 -0
  959. package/src/plugin-id.ts +84 -0
  960. package/src/policy-runtime.ts +209 -0
  961. package/src/procedural/procedure-miner.ts +150 -0
  962. package/src/procedural/procedure-recall.ts +93 -0
  963. package/src/procedural/procedure-stats.ts +213 -0
  964. package/src/procedural/procedure-types.ts +132 -0
  965. package/src/procedural/reinforcement-core.test.ts +132 -0
  966. package/src/procedural/reinforcement-core.ts +73 -0
  967. package/src/profiling.test.ts +263 -0
  968. package/src/profiling.ts +435 -0
  969. package/src/projection/index.ts +398 -0
  970. package/src/qmd-recall-cache.test.ts +138 -0
  971. package/src/qmd-recall-cache.ts +111 -0
  972. package/src/qmd.test.ts +257 -0
  973. package/src/qmd.ts +2614 -0
  974. package/src/reasoning-trace-recall.ts +201 -0
  975. package/src/reasoning-trace-types.ts +235 -0
  976. package/src/recall-audit-anomaly.test.ts +246 -0
  977. package/src/recall-audit-anomaly.ts +297 -0
  978. package/src/recall-audit.test.ts +51 -0
  979. package/src/recall-audit.ts +72 -0
  980. package/src/recall-budget-config.test.ts +87 -0
  981. package/src/recall-disclosure-escalation.test.ts +196 -0
  982. package/src/recall-disclosure-escalation.ts +158 -0
  983. package/src/recall-disclosure-shaping.test.ts +146 -0
  984. package/src/recall-disclosure.test.ts +214 -0
  985. package/src/recall-explain-renderer.test.ts +140 -0
  986. package/src/recall-explain-renderer.ts +356 -0
  987. package/src/recall-mmr.test.ts +808 -0
  988. package/src/recall-mmr.ts +607 -0
  989. package/src/recall-qos.test.ts +85 -0
  990. package/src/recall-qos.ts +82 -0
  991. package/src/recall-query-policy.ts +221 -0
  992. package/src/recall-state.test.ts +233 -0
  993. package/src/recall-state.ts +456 -0
  994. package/src/recall-tag-filter.ts +143 -0
  995. package/src/recall-tokenization.ts +35 -0
  996. package/src/recall-xray-cli.test.ts +118 -0
  997. package/src/recall-xray-cli.ts +100 -0
  998. package/src/recall-xray-disclosure-telemetry.test.ts +183 -0
  999. package/src/recall-xray-renderer.test.ts +539 -0
  1000. package/src/recall-xray-renderer.ts +487 -0
  1001. package/src/recall-xray.test.ts +503 -0
  1002. package/src/recall-xray.ts +621 -0
  1003. package/src/reconstruct.ts +41 -0
  1004. package/src/release-changelog.ts +35 -0
  1005. package/src/relevance.ts +67 -0
  1006. package/src/replay/normalizers/chatgpt.ts +133 -0
  1007. package/src/replay/normalizers/claude.ts +102 -0
  1008. package/src/replay/normalizers/openclaw.ts +119 -0
  1009. package/src/replay/normalizers/shared.ts +69 -0
  1010. package/src/replay/runner.ts +197 -0
  1011. package/src/replay/types.ts +143 -0
  1012. package/src/rerank.test.ts +48 -0
  1013. package/src/rerank.ts +176 -0
  1014. package/src/resolve-auth-token.test.ts +226 -0
  1015. package/src/resolve-auth-token.ts +151 -0
  1016. package/src/resolve-provider-secret.test.ts +187 -0
  1017. package/src/resolve-provider-secret.ts +410 -0
  1018. package/src/response-guidance-recall.test.ts +3952 -0
  1019. package/src/response-guidance-recall.ts +4431 -0
  1020. package/src/resume-bundles.ts +415 -0
  1021. package/src/retrieval-agents.ts +623 -0
  1022. package/src/retrieval-tiers.ts +25 -0
  1023. package/src/retrieval.ts +104 -0
  1024. package/src/review/index.test.ts +201 -0
  1025. package/src/review/index.ts +536 -0
  1026. package/src/routing/engine.ts +162 -0
  1027. package/src/routing/store.ts +321 -0
  1028. package/src/runtime/better-sqlite.test.ts +32 -0
  1029. package/src/runtime/better-sqlite.ts +76 -0
  1030. package/src/runtime/child-process.ts +67 -0
  1031. package/src/runtime/env.ts +48 -0
  1032. package/src/sanitize.ts +58 -0
  1033. package/src/schemas.ts +449 -0
  1034. package/src/sdk-compat.ts +87 -0
  1035. package/src/search/document-scanner.ts +96 -0
  1036. package/src/search/embed-helper.ts +142 -0
  1037. package/src/search/factory.ts +189 -0
  1038. package/src/search/index.ts +10 -0
  1039. package/src/search/lancedb-backend.ts +342 -0
  1040. package/src/search/meilisearch-backend.ts +232 -0
  1041. package/src/search/noop-backend.ts +57 -0
  1042. package/src/search/orama-backend.ts +358 -0
  1043. package/src/search/port.ts +86 -0
  1044. package/src/search/remote-backend.ts +124 -0
  1045. package/src/secure-store/cipher.ts +271 -0
  1046. package/src/secure-store/cli-handlers.ts +355 -0
  1047. package/src/secure-store/cli-renderer.ts +131 -0
  1048. package/src/secure-store/header.ts +373 -0
  1049. package/src/secure-store/index.ts +137 -0
  1050. package/src/secure-store/kdf.ts +263 -0
  1051. package/src/secure-store/keyring.ts +106 -0
  1052. package/src/secure-store/metadata.ts +394 -0
  1053. package/src/secure-store/passphrase-reader.ts +252 -0
  1054. package/src/secure-store/secure-fs.ts +571 -0
  1055. package/src/secure-store/secure-store.test.ts +755 -0
  1056. package/src/semantic-chunking.ts +545 -0
  1057. package/src/semantic-consolidation.test.ts +182 -0
  1058. package/src/semantic-consolidation.ts +432 -0
  1059. package/src/semantic-rule-promotion.ts +183 -0
  1060. package/src/semantic-rule-verifier.ts +160 -0
  1061. package/src/session-integrity.ts +569 -0
  1062. package/src/session-observer-bands.ts +11 -0
  1063. package/src/session-observer-state.ts +346 -0
  1064. package/src/session-toggles.test.ts +96 -0
  1065. package/src/session-toggles.ts +159 -0
  1066. package/src/shared-context/manager.ts +810 -0
  1067. package/src/signal.ts +84 -0
  1068. package/src/skills-registry.test.ts +277 -0
  1069. package/src/skills-registry.ts +120 -0
  1070. package/src/source-attribution-roundtrip.test.ts +215 -0
  1071. package/src/source-attribution.test.ts +1425 -0
  1072. package/src/source-attribution.ts +639 -0
  1073. package/src/spaces/index.ts +627 -0
  1074. package/src/storage-paths.ts +117 -0
  1075. package/src/storage.ts +6657 -0
  1076. package/src/store-contract.ts +55 -0
  1077. package/src/summarizer.ts +844 -0
  1078. package/src/summary-snapshot.test.ts +681 -0
  1079. package/src/summary-snapshot.ts +238 -0
  1080. package/src/surfaces/dreams.test.ts +394 -0
  1081. package/src/surfaces/dreams.ts +346 -0
  1082. package/src/surfaces/heartbeat.test.ts +415 -0
  1083. package/src/surfaces/heartbeat.ts +325 -0
  1084. package/src/sync/index.ts +308 -0
  1085. package/src/targeted-fact-recall.test.ts +1694 -0
  1086. package/src/targeted-fact-recall.ts +2905 -0
  1087. package/src/taxonomy/default-taxonomy.ts +87 -0
  1088. package/src/taxonomy/index.ts +26 -0
  1089. package/src/taxonomy/resolver-doc-generator.ts +57 -0
  1090. package/src/taxonomy/resolver.ts +184 -0
  1091. package/src/taxonomy/taxonomy-loader.ts +186 -0
  1092. package/src/taxonomy/types.ts +48 -0
  1093. package/src/telemetry-transcript.ts +70 -0
  1094. package/src/temporal-index.ts +890 -0
  1095. package/src/temporal-supersession.test.ts +2703 -0
  1096. package/src/temporal-supersession.ts +493 -0
  1097. package/src/temporal-validity.test.ts +448 -0
  1098. package/src/temporal-validity.ts +123 -0
  1099. package/src/threading.ts +395 -0
  1100. package/src/tier-migration.ts +124 -0
  1101. package/src/tier-routing.ts +102 -0
  1102. package/src/tmt.ts +462 -0
  1103. package/src/tokens.test.ts +178 -0
  1104. package/src/tokens.ts +279 -0
  1105. package/src/topics.ts +147 -0
  1106. package/src/training-export/cli-date-validation.test.ts +258 -0
  1107. package/src/training-export/converter.test.ts +452 -0
  1108. package/src/training-export/converter.ts +319 -0
  1109. package/src/training-export/date-parse.ts +117 -0
  1110. package/src/training-export/index.ts +26 -0
  1111. package/src/training-export/registry.test.ts +85 -0
  1112. package/src/training-export/registry.ts +57 -0
  1113. package/src/training-export/types.ts +31 -0
  1114. package/src/transcript.ts +1179 -0
  1115. package/src/transfer/autodetect.ts +30 -0
  1116. package/src/transfer/backup.ts +138 -0
  1117. package/src/transfer/capsule-crypto.ts +485 -0
  1118. package/src/transfer/capsule-encrypt.test.ts +690 -0
  1119. package/src/transfer/capsule-export.ts +543 -0
  1120. package/src/transfer/capsule-fork.ts +375 -0
  1121. package/src/transfer/capsule-import.ts +564 -0
  1122. package/src/transfer/capsule-merge.ts +433 -0
  1123. package/src/transfer/conflict-policy.ts +16 -0
  1124. package/src/transfer/constants.ts +13 -0
  1125. package/src/transfer/exclusions.ts +37 -0
  1126. package/src/transfer/export-json.ts +65 -0
  1127. package/src/transfer/export-md.ts +59 -0
  1128. package/src/transfer/export-sqlite.ts +52 -0
  1129. package/src/transfer/fs-utils.ts +269 -0
  1130. package/src/transfer/import-json.ts +108 -0
  1131. package/src/transfer/import-md.ts +84 -0
  1132. package/src/transfer/import-sqlite.ts +100 -0
  1133. package/src/transfer/integrity.ts +71 -0
  1134. package/src/transfer/sqlite-schema.ts +16 -0
  1135. package/src/transfer/types.ts +297 -0
  1136. package/src/trust-zones.ts +1186 -0
  1137. package/src/types.ts +3074 -0
  1138. package/src/user-model.test.ts +124 -0
  1139. package/src/user-model.ts +162 -0
  1140. package/src/utility-learner.ts +353 -0
  1141. package/src/utility-runtime.ts +88 -0
  1142. package/src/utility-telemetry.ts +215 -0
  1143. package/src/utils/category-dir.ts +44 -0
  1144. package/src/utils/errno.ts +6 -0
  1145. package/src/utils/iso-timestamp.test.ts +37 -0
  1146. package/src/utils/iso-timestamp.ts +164 -0
  1147. package/src/utils/path.ts +26 -0
  1148. package/src/verified-recall.ts +138 -0
  1149. package/src/version-utils.test.ts +10 -0
  1150. package/src/version-utils.ts +9 -0
  1151. package/src/whitespace.ts +10 -0
  1152. package/src/work/board.ts +359 -0
  1153. package/src/work/boundary.ts +107 -0
  1154. package/src/work/storage.ts +436 -0
  1155. package/src/work/types.ts +82 -0
  1156. package/src/work-product-ledger.ts +265 -0
  1157. package/dist/access-service-DDjzFALq.d.ts +0 -2088
  1158. package/dist/capsule-crypto-SJS5VVAP.js +0 -18
  1159. package/dist/capsule-export-7QNCBZOQ.js +0 -17
  1160. package/dist/capsule-import-EPBHD2EN.js +0 -16
  1161. package/dist/capsule-merge-DI7PNQ2H.js +0 -189
  1162. package/dist/chunk-23ZZK64Y.js +0 -26
  1163. package/dist/chunk-23ZZK64Y.js.map +0 -1
  1164. package/dist/chunk-242S3I2A.js +0 -647
  1165. package/dist/chunk-2LGMW3DJ.js +0 -111
  1166. package/dist/chunk-3B6KIRBH.js +0 -5213
  1167. package/dist/chunk-3B6KIRBH.js.map +0 -1
  1168. package/dist/chunk-457A4P3L.js +0 -119
  1169. package/dist/chunk-457A4P3L.js.map +0 -1
  1170. package/dist/chunk-4IS4SXIQ.js +0 -2040
  1171. package/dist/chunk-4YM32CRU.js +0 -721
  1172. package/dist/chunk-6TBWYBJ3.js +0 -236
  1173. package/dist/chunk-74EMIVE4.js +0 -329
  1174. package/dist/chunk-74EMIVE4.js.map +0 -1
  1175. package/dist/chunk-767ODGE6.js +0 -183
  1176. package/dist/chunk-7V22HTMD.js +0 -623
  1177. package/dist/chunk-7V22HTMD.js.map +0 -1
  1178. package/dist/chunk-7ZM3BFKK.js +0 -9705
  1179. package/dist/chunk-7ZM3BFKK.js.map +0 -1
  1180. package/dist/chunk-AQJNPMOA.js +0 -643
  1181. package/dist/chunk-AQJNPMOA.js.map +0 -1
  1182. package/dist/chunk-ASAITVLA.js +0 -64
  1183. package/dist/chunk-ASAITVLA.js.map +0 -1
  1184. package/dist/chunk-BBE34QBJ.js +0 -275
  1185. package/dist/chunk-BBE34QBJ.js.map +0 -1
  1186. package/dist/chunk-BZSQEPRW.js +0 -14710
  1187. package/dist/chunk-BZSQEPRW.js.map +0 -1
  1188. package/dist/chunk-CPKTBRS2.js +0 -891
  1189. package/dist/chunk-CPKTBRS2.js.map +0 -1
  1190. package/dist/chunk-D4GAOFF6.js +0 -562
  1191. package/dist/chunk-D4GAOFF6.js.map +0 -1
  1192. package/dist/chunk-D54LZC5L.js +0 -147
  1193. package/dist/chunk-DF3RVK3X.js +0 -119
  1194. package/dist/chunk-DF3RVK3X.js.map +0 -1
  1195. package/dist/chunk-DZZPC36E.js +0 -1451
  1196. package/dist/chunk-DZZPC36E.js.map +0 -1
  1197. package/dist/chunk-E2UCDP5S.js +0 -570
  1198. package/dist/chunk-E6K4NIEU.js +0 -747
  1199. package/dist/chunk-E6K4NIEU.js.map +0 -1
  1200. package/dist/chunk-EEQLFRUM.js +0 -89
  1201. package/dist/chunk-ETOW6ACV.js +0 -158
  1202. package/dist/chunk-ETOW6ACV.js.map +0 -1
  1203. package/dist/chunk-FMEBPEAO.js +0 -347
  1204. package/dist/chunk-FMEBPEAO.js.map +0 -1
  1205. package/dist/chunk-FQDPCE3I.js +0 -1837
  1206. package/dist/chunk-FQDPCE3I.js.map +0 -1
  1207. package/dist/chunk-FYIYMQ5N.js +0 -221
  1208. package/dist/chunk-FYIYMQ5N.js.map +0 -1
  1209. package/dist/chunk-G2WADRQ3.js +0 -219
  1210. package/dist/chunk-G4SK7DSQ.js +0 -121
  1211. package/dist/chunk-GVPWB7EY.js +0 -390
  1212. package/dist/chunk-GVPWB7EY.js.map +0 -1
  1213. package/dist/chunk-HELQZFZO.js +0 -1075
  1214. package/dist/chunk-HL5LRPNA.js +0 -1914
  1215. package/dist/chunk-HL5LRPNA.js.map +0 -1
  1216. package/dist/chunk-HQZVVSVB.js +0 -147
  1217. package/dist/chunk-HQZVVSVB.js.map +0 -1
  1218. package/dist/chunk-HY3L4WKC.js +0 -2195
  1219. package/dist/chunk-HY3L4WKC.js.map +0 -1
  1220. package/dist/chunk-IB3BFHGN.js +0 -228
  1221. package/dist/chunk-IXEJRKCZ.js +0 -18
  1222. package/dist/chunk-JBMSGZEQ.js +0 -441
  1223. package/dist/chunk-JBMSGZEQ.js.map +0 -1
  1224. package/dist/chunk-JESOB2HO.js +0 -108
  1225. package/dist/chunk-JKDVIE52.js +0 -272
  1226. package/dist/chunk-JRNQ3RNA.js +0 -284
  1227. package/dist/chunk-JRNQ3RNA.js.map +0 -1
  1228. package/dist/chunk-K6WK37A6.js +0 -865
  1229. package/dist/chunk-K6WK37A6.js.map +0 -1
  1230. package/dist/chunk-MARWOCVP.js +0 -48
  1231. package/dist/chunk-MNU6ZBWT.js +0 -4454
  1232. package/dist/chunk-MNU6ZBWT.js.map +0 -1
  1233. package/dist/chunk-N5AKDXAI.js +0 -74
  1234. package/dist/chunk-OA3L7BFR.js +0 -183
  1235. package/dist/chunk-OA3L7BFR.js.map +0 -1
  1236. package/dist/chunk-OR64ZGRZ.js +0 -23
  1237. package/dist/chunk-P77UEOU2.js +0 -1521
  1238. package/dist/chunk-P77UEOU2.js.map +0 -1
  1239. package/dist/chunk-PH4C2U43.js +0 -239
  1240. package/dist/chunk-PH4C2U43.js.map +0 -1
  1241. package/dist/chunk-RVPLBATS.js +0 -1586
  1242. package/dist/chunk-RVPLBATS.js.map +0 -1
  1243. package/dist/chunk-U5JMRGKX.js +0 -340
  1244. package/dist/chunk-U5JMRGKX.js.map +0 -1
  1245. package/dist/chunk-URB2WSKZ.js +0 -350
  1246. package/dist/chunk-URB2WSKZ.js.map +0 -1
  1247. package/dist/chunk-UVMUAWVT.js +0 -596
  1248. package/dist/chunk-WEJG4TB5.js +0 -118
  1249. package/dist/chunk-X7HPGUVG.js +0 -271
  1250. package/dist/chunk-XAMBKFQS.js +0 -2777
  1251. package/dist/chunk-XAMBKFQS.js.map +0 -1
  1252. package/dist/chunk-XJKFSSDW.js +0 -726
  1253. package/dist/chunk-XJKFSSDW.js.map +0 -1
  1254. package/dist/chunk-XMHBH5H6.js +0 -283
  1255. package/dist/chunk-XMHBH5H6.js.map +0 -1
  1256. package/dist/chunk-XMVFHBHT.js +0 -277
  1257. package/dist/chunk-Y3VMVTYX.js +0 -53
  1258. package/dist/chunk-YNB73F22.js +0 -137
  1259. package/dist/chunk-YNB73F22.js.map +0 -1
  1260. package/dist/chunk-Z2E7VW55.js +0 -335
  1261. package/dist/chunk-Z2E7VW55.js.map +0 -1
  1262. package/dist/chunk-ZG7PTKBK.js +0 -2296
  1263. package/dist/chunk-ZNQN6ZTA.js +0 -135
  1264. package/dist/chunk-ZVTKDVVM.js +0 -827
  1265. package/dist/chunk-ZVTKDVVM.js.map +0 -1
  1266. package/dist/cli-BR8KpIU0.d.ts +0 -1259
  1267. package/dist/codex-materialize-CQlLTzke.d.ts +0 -139
  1268. package/dist/connectors-cli-DFGtY2DB.d.ts +0 -257
  1269. package/dist/contradiction-review-5LTTVDQV.js +0 -22
  1270. package/dist/contradiction-scan-QTXAMBUA.js +0 -414
  1271. package/dist/contradiction-scan-QTXAMBUA.js.map +0 -1
  1272. package/dist/engine-35M5BKQ7.js +0 -28
  1273. package/dist/fs-utils-IRVUFB6G.js +0 -30
  1274. package/dist/graph-edge-decay-PWB63GRE.js +0 -207
  1275. package/dist/memory-governance-IMPQZXFC.js +0 -37
  1276. package/dist/memory-projection-store-CY8TU40w.d.ts +0 -222
  1277. package/dist/orchestrator-DDMPqU6R.d.ts +0 -1792
  1278. package/dist/path-RMTY5Y5A.js +0 -9
  1279. package/dist/port-B6VEDIkC.d.ts +0 -53
  1280. package/dist/resolution-YGIBORXI.js +0 -101
  1281. package/dist/resolution-YGIBORXI.js.map +0 -1
  1282. package/dist/secure-store-4R2GSO7S.js +0 -156
  1283. package/dist/semantic-consolidation-ByBXb-sf.d.ts +0 -180
  1284. package/dist/state-store-3EH7HYIN.js +0 -16
  1285. package/dist/types-V3FJ26TF.js +0 -30
  1286. /package/dist/{capsule-crypto-SJS5VVAP.js.map → adapters/claude-code.js.map} +0 -0
  1287. /package/dist/{capsule-export-7QNCBZOQ.js.map → adapters/codex.js.map} +0 -0
  1288. /package/dist/{capsule-import-EPBHD2EN.js.map → adapters/hermes.js.map} +0 -0
  1289. /package/dist/{contradiction-review-5LTTVDQV.js.map → adapters/index.js.map} +0 -0
  1290. /package/dist/{engine-35M5BKQ7.js.map → adapters/registry.js.map} +0 -0
  1291. /package/dist/{fs-utils-IRVUFB6G.js.map → adapters/replit.js.map} +0 -0
  1292. /package/dist/{memory-governance-IMPQZXFC.js.map → adapters/types.js.map} +0 -0
  1293. /package/dist/{path-RMTY5Y5A.js.map → capsule-crypto-5CYAGVC5.js.map} +0 -0
  1294. /package/dist/{capsule-merge-DI7PNQ2H.js.map → capsule-merge-4MGKE7C5.js.map} +0 -0
  1295. /package/dist/{chunk-G4SK7DSQ.js.map → chunk-2WWLHTZY.js.map} +0 -0
  1296. /package/dist/{chunk-X7HPGUVG.js.map → chunk-4CRG46BG.js.map} +0 -0
  1297. /package/dist/{chunk-UVMUAWVT.js.map → chunk-7IASACLB.js.map} +0 -0
  1298. /package/dist/{chunk-HELQZFZO.js.map → chunk-EDTHC6UD.js.map} +0 -0
  1299. /package/dist/{chunk-4YM32CRU.js.map → chunk-EFJ3MQ4V.js.map} +0 -0
  1300. /package/dist/{chunk-E2UCDP5S.js.map → chunk-FBYESMQ2.js.map} +0 -0
  1301. /package/dist/{chunk-D54LZC5L.js.map → chunk-FDU6HUUL.js.map} +0 -0
  1302. /package/dist/{chunk-IB3BFHGN.js.map → chunk-GGKRUQOO.js.map} +0 -0
  1303. /package/dist/{chunk-242S3I2A.js.map → chunk-GL6I6MEQ.js.map} +0 -0
  1304. /package/dist/{secure-store-4R2GSO7S.js.map → chunk-HHLLAQGZ.js.map} +0 -0
  1305. /package/dist/{chunk-4IS4SXIQ.js.map → chunk-HXXBL2KD.js.map} +0 -0
  1306. /package/dist/{chunk-767ODGE6.js.map → chunk-KNKUID7G.js.map} +0 -0
  1307. /package/dist/{chunk-6TBWYBJ3.js.map → chunk-LPMVBPA3.js.map} +0 -0
  1308. /package/dist/{chunk-WEJG4TB5.js.map → chunk-MC26UJIM.js.map} +0 -0
  1309. /package/dist/{chunk-JKDVIE52.js.map → chunk-MGKYQQYF.js.map} +0 -0
  1310. /package/dist/{chunk-Y3VMVTYX.js.map → chunk-MT4HVDUZ.js.map} +0 -0
  1311. /package/dist/{chunk-G2WADRQ3.js.map → chunk-MY6TPVXW.js.map} +0 -0
  1312. /package/dist/{chunk-OR64ZGRZ.js.map → chunk-NNVTUXEB.js.map} +0 -0
  1313. /package/dist/{chunk-JESOB2HO.js.map → chunk-P4NEIHUT.js.map} +0 -0
  1314. /package/dist/{chunk-IXEJRKCZ.js.map → chunk-QRNI5JBH.js.map} +0 -0
  1315. /package/dist/{chunk-EEQLFRUM.js.map → chunk-RRF5UOBJ.js.map} +0 -0
  1316. /package/dist/{state-store-3EH7HYIN.js.map → chunk-SEDEKFYQ.js.map} +0 -0
  1317. /package/dist/{chunk-2LGMW3DJ.js.map → chunk-U3PN77QT.js.map} +0 -0
  1318. /package/dist/{chunk-XMVFHBHT.js.map → chunk-U3WSW6PZ.js.map} +0 -0
  1319. /package/dist/{chunk-N5AKDXAI.js.map → chunk-UWVJF25J.js.map} +0 -0
  1320. /package/dist/{types-V3FJ26TF.js.map → chunk-V5OCT34X.js.map} +0 -0
  1321. /package/dist/{chunk-ZG7PTKBK.js.map → chunk-W3LR522O.js.map} +0 -0
  1322. /package/dist/{chunk-MARWOCVP.js.map → chunk-XIG5PDM7.js.map} +0 -0
  1323. /package/dist/{chunk-ZNQN6ZTA.js.map → chunk-XVZ7B3HG.js.map} +0 -0
  1324. /package/dist/{graph-edge-decay-PWB63GRE.js.map → graph-edge-decay-5DI5GUNL.js.map} +0 -0
@@ -0,0 +1,930 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { parseConfig } from "./config.js";
5
+
6
+ // ── PR #394 Bug 2: parseConfig must coerce string "false" for installExtension
7
+
8
+ test('parseConfig codex.installExtension="false" (string) → false (boolean)', () => {
9
+ const result = parseConfig({ codex: { installExtension: "false" } });
10
+ assert.equal(
11
+ result.codex.installExtension,
12
+ false,
13
+ 'string "false" must be coerced to boolean false',
14
+ );
15
+ });
16
+
17
+ test('parseConfig codex.installExtension="0" (string) → false', () => {
18
+ const result = parseConfig({ codex: { installExtension: "0" } });
19
+ assert.equal(result.codex.installExtension, false);
20
+ });
21
+
22
+ test('parseConfig codex.installExtension="no" (string) → false', () => {
23
+ const result = parseConfig({ codex: { installExtension: "no" } });
24
+ assert.equal(result.codex.installExtension, false);
25
+ });
26
+
27
+ test('parseConfig codex.installExtension="FALSE" (uppercase string) → false', () => {
28
+ const result = parseConfig({ codex: { installExtension: "FALSE" } });
29
+ assert.equal(result.codex.installExtension, false);
30
+ });
31
+
32
+ test("parseConfig codex.installExtension=false (boolean) → false", () => {
33
+ const result = parseConfig({ codex: { installExtension: false } });
34
+ assert.equal(result.codex.installExtension, false);
35
+ });
36
+
37
+ test("parseConfig codex.installExtension=true (boolean) → true", () => {
38
+ const result = parseConfig({ codex: { installExtension: true } });
39
+ assert.equal(result.codex.installExtension, true);
40
+ });
41
+
42
+ test('parseConfig codex.installExtension="true" (string) → true', () => {
43
+ const result = parseConfig({ codex: { installExtension: "true" } });
44
+ assert.equal(result.codex.installExtension, true);
45
+ });
46
+
47
+ test("parseConfig codex.installExtension missing → defaults to true", () => {
48
+ const result = parseConfig({ codex: {} });
49
+ assert.equal(result.codex.installExtension, true);
50
+ });
51
+
52
+ test("parseConfig codex missing entirely → installExtension defaults to true", () => {
53
+ const result = parseConfig({});
54
+ assert.equal(result.codex.installExtension, true);
55
+ });
56
+
57
+ test("parseConfig dreaming.maxEntries=0 preserves the runtime disable switch", () => {
58
+ const result = parseConfig({ dreaming: { maxEntries: 0 } });
59
+ assert.equal(result.dreaming.maxEntries, 0);
60
+ });
61
+
62
+ test("parseConfig dreaming.maxEntries=5 falls back to the documented default", () => {
63
+ const result = parseConfig({ dreaming: { maxEntries: 5 } });
64
+ assert.equal(result.dreaming.maxEntries, 500);
65
+ });
66
+
67
+ test("parseConfig dreaming.maxEntries=-5 falls back to the documented default", () => {
68
+ const result = parseConfig({ dreaming: { maxEntries: -5 } });
69
+ assert.equal(result.dreaming.maxEntries, 500);
70
+ });
71
+
72
+ test("parseConfig activeRecallCacheTtlMs=0 disables the active-recall cache", () => {
73
+ const result = parseConfig({ activeRecallCacheTtlMs: 0 });
74
+ assert.equal(result.activeRecallCacheTtlMs, 0);
75
+ });
76
+
77
+ test("parseConfig activeRecallCacheTtlMs=500 preserves the explicit positive ttl", () => {
78
+ const result = parseConfig({ activeRecallCacheTtlMs: 500 });
79
+ assert.equal(result.activeRecallCacheTtlMs, 500);
80
+ });
81
+
82
+ test("parseConfig validates commitmentDecayDays as a positive integer", () => {
83
+ assert.equal(parseConfig({}).commitmentDecayDays, 90);
84
+ assert.equal(parseConfig({ commitmentDecayDays: 30 }).commitmentDecayDays, 30);
85
+ assert.equal(parseConfig({ commitmentDecayDays: "45" }).commitmentDecayDays, 45);
86
+
87
+ for (const value of [0, -1, 1.5, "1.5", "abc", Number.NaN, Infinity]) {
88
+ assert.throws(
89
+ () => parseConfig({ commitmentDecayDays: value }),
90
+ /commitmentDecayDays must be an integer greater than or equal to 1/,
91
+ `invalid commitmentDecayDays ${String(value)} should throw`,
92
+ );
93
+ }
94
+ });
95
+
96
+ test("parseConfig initGateTimeoutMs defaults to OpenClaw cold-start budget", () => {
97
+ const result = parseConfig({});
98
+ assert.equal(result.initGateTimeoutMs, 30_000);
99
+ });
100
+
101
+ test("parseConfig initGateTimeoutMs accepts CLI-style numeric strings", () => {
102
+ const result = parseConfig({ initGateTimeoutMs: "45000" });
103
+ assert.equal(result.initGateTimeoutMs, 45_000);
104
+ });
105
+
106
+ test("parseConfig initGateTimeoutMs clamps unsafe values", () => {
107
+ assert.equal(parseConfig({ initGateTimeoutMs: 0 }).initGateTimeoutMs, 1_000);
108
+ assert.equal(parseConfig({ initGateTimeoutMs: 300_000 }).initGateTimeoutMs, 120_000);
109
+ assert.equal(parseConfig({ initGateTimeoutMs: "abc" }).initGateTimeoutMs, 30_000);
110
+ });
111
+
112
+ test("parseConfig modelSource=gateway does not inherit OPENAI_API_KEY from the process env", () => {
113
+ const original = process.env.OPENAI_API_KEY;
114
+ process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
115
+ try {
116
+ const cfg = parseConfig({ modelSource: "gateway" });
117
+ assert.equal(cfg.modelSource, "gateway");
118
+ assert.equal(cfg.openaiApiKey, undefined);
119
+ } finally {
120
+ if (original === undefined) delete process.env.OPENAI_API_KEY;
121
+ else process.env.OPENAI_API_KEY = original;
122
+ }
123
+ });
124
+
125
+ test("parseConfig modelSource=gateway still honors an explicit openaiApiKey override", () => {
126
+ const original = process.env.OPENAI_API_KEY;
127
+ process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
128
+ try {
129
+ const cfg = parseConfig({
130
+ modelSource: "gateway",
131
+ openaiApiKey: "sk-explicit",
132
+ });
133
+ assert.equal(cfg.modelSource, "gateway");
134
+ assert.equal(cfg.openaiApiKey, "sk-explicit");
135
+ } finally {
136
+ if (original === undefined) delete process.env.OPENAI_API_KEY;
137
+ else process.env.OPENAI_API_KEY = original;
138
+ }
139
+ });
140
+
141
+ test("parseConfig separates local chat and embedding fallback models", () => {
142
+ const cfg = parseConfig({
143
+ localLlmEnabled: true,
144
+ localLlmModel: "google/gemma-4-26b-a4b",
145
+ embeddingFallbackProvider: "local",
146
+ embeddingFallbackModel: "text-embedding-nomic-embed-text-v1.5@q4_k_m",
147
+ });
148
+
149
+ assert.equal(cfg.localLlmModel, "google/gemma-4-26b-a4b");
150
+ assert.equal(
151
+ cfg.embeddingFallbackModel,
152
+ "text-embedding-nomic-embed-text-v1.5@q4_k_m",
153
+ );
154
+ });
155
+
156
+ test("parseConfig openaiApiKey=false disables implicit OPENAI_API_KEY inheritance", () => {
157
+ const original = process.env.OPENAI_API_KEY;
158
+ process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
159
+ try {
160
+ const cfg = parseConfig({
161
+ openaiApiKey: false,
162
+ localLlmEnabled: true,
163
+ });
164
+ assert.equal(cfg.modelSource, "plugin");
165
+ assert.equal(cfg.localLlmEnabled, true);
166
+ assert.equal(cfg.openaiApiKey, undefined);
167
+ } finally {
168
+ if (original === undefined) delete process.env.OPENAI_API_KEY;
169
+ else process.env.OPENAI_API_KEY = original;
170
+ }
171
+ });
172
+
173
+ test("parseConfig openaiApiKey string false disables implicit OPENAI_API_KEY inheritance", () => {
174
+ const original = process.env.OPENAI_API_KEY;
175
+ process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
176
+ try {
177
+ const cfg = parseConfig({
178
+ openaiApiKey: "false",
179
+ localLlmEnabled: "true",
180
+ });
181
+ assert.equal(cfg.localLlmEnabled, true);
182
+ assert.equal(cfg.openaiApiKey, undefined);
183
+ } finally {
184
+ if (original === undefined) delete process.env.OPENAI_API_KEY;
185
+ else process.env.OPENAI_API_KEY = original;
186
+ }
187
+ });
188
+
189
+ test("parseConfig openaiApiKey string 0 is not treated as a direct OpenAI opt-out", () => {
190
+ const original = process.env.OPENAI_API_KEY;
191
+ process.env.OPENAI_API_KEY = "sk-env-should-not-be-used";
192
+ try {
193
+ const cfg = parseConfig({
194
+ openaiApiKey: "0",
195
+ localLlmEnabled: "true",
196
+ });
197
+ assert.equal(cfg.localLlmEnabled, true);
198
+ assert.equal(cfg.openaiApiKey, "0");
199
+ } finally {
200
+ if (original === undefined) delete process.env.OPENAI_API_KEY;
201
+ else process.env.OPENAI_API_KEY = original;
202
+ }
203
+ });
204
+
205
+ test("parseConfig localLlmTimeoutMs accepts CLI-style numeric strings for gateway fallback", () => {
206
+ const cfg = parseConfig({ localLlmTimeoutMs: "600000" });
207
+ assert.equal(cfg.localLlmTimeoutMs, 600_000);
208
+ });
209
+
210
+ test("parseConfig localLlmTimeoutMs clamps invalid values to a positive timeout", () => {
211
+ assert.equal(parseConfig({ localLlmTimeoutMs: 0 }).localLlmTimeoutMs, 1);
212
+ assert.equal(parseConfig({ localLlmTimeoutMs: Number.NaN }).localLlmTimeoutMs, 180_000);
213
+ });
214
+ test("parseConfig extractionTelemetryPrefilterEnabled defaults on and accepts string false", () => {
215
+ assert.equal(parseConfig({}).extractionTelemetryPrefilterEnabled, true);
216
+ assert.equal(parseConfig({ extractionTelemetryPrefilterEnabled: "false" }).extractionTelemetryPrefilterEnabled, false);
217
+ });
218
+
219
+ test("parseConfig lcmTelemetryPrefilterEnabled defaults on and accepts string false", () => {
220
+ assert.equal(parseConfig({}).lcmTelemetryPrefilterEnabled, true);
221
+ assert.equal(parseConfig({ lcmTelemetryPrefilterEnabled: "false" }).lcmTelemetryPrefilterEnabled, false);
222
+ });
223
+
224
+ test("parseConfig keeps explicit cue recall opt-in and budgets configurable", () => {
225
+ const defaults = parseConfig({});
226
+ assert.equal(defaults.explicitCueRecallEnabled, false);
227
+ assert.equal(defaults.explicitCueRecallMaxChars, 2400);
228
+ assert.equal(defaults.explicitCueRecallMaxReferences, 24);
229
+ assert.equal(
230
+ defaults.recallPipeline.find((section) => section.id === "explicit-cue")
231
+ ?.enabled,
232
+ false,
233
+ );
234
+
235
+ const cfg = parseConfig({
236
+ explicitCueRecallEnabled: true,
237
+ explicitCueRecallMaxChars: 0,
238
+ explicitCueRecallMaxReferences: 0,
239
+ });
240
+ assert.equal(cfg.explicitCueRecallEnabled, true);
241
+ assert.equal(cfg.explicitCueRecallMaxChars, 0);
242
+ assert.equal(cfg.explicitCueRecallMaxReferences, 0);
243
+ const section = cfg.recallPipeline.find((entry) => entry.id === "explicit-cue");
244
+ assert.equal(section?.enabled, true);
245
+ assert.equal(section?.maxChars, 0);
246
+ assert.equal(section?.maxResults, 0);
247
+
248
+ const cliStyle = parseConfig({
249
+ explicitCueRecallEnabled: "true",
250
+ explicitCueRecallMaxChars: "3200",
251
+ explicitCueRecallMaxReferences: "12",
252
+ });
253
+ assert.equal(cliStyle.explicitCueRecallEnabled, true);
254
+ assert.equal(cliStyle.explicitCueRecallMaxChars, 3200);
255
+ assert.equal(cliStyle.explicitCueRecallMaxReferences, 12);
256
+ const cliSection = cliStyle.recallPipeline.find(
257
+ (entry) => entry.id === "explicit-cue",
258
+ );
259
+ assert.equal(cliSection?.enabled, true);
260
+ assert.equal(cliSection?.maxChars, 3200);
261
+ assert.equal(cliSection?.maxResults, 12);
262
+ });
263
+
264
+ test("research-max preset enables explicit cue recall for benchmark-grade runs", () => {
265
+ const cfg = parseConfig({ memoryOsPreset: "research-max" });
266
+ assert.equal(cfg.explicitCueRecallEnabled, true);
267
+ assert.equal(cfg.explicitCueRecallMaxChars, 3200);
268
+ assert.equal(cfg.lcmEnabled, true);
269
+ assert.equal(
270
+ cfg.recallPipeline.find((section) => section.id === "explicit-cue")
271
+ ?.enabled,
272
+ true,
273
+ );
274
+ });
275
+
276
+ test("parseConfig validates lcmObserveConcurrency", () => {
277
+ const cfg = parseConfig({ lcmObserveConcurrency: "4" });
278
+ assert.equal(cfg.lcmObserveConcurrency, 4);
279
+
280
+ assert.throws(
281
+ () => parseConfig({ lcmObserveConcurrency: 0 }),
282
+ /lcmObserveConcurrency must be an integer greater than or equal to 1/,
283
+ );
284
+ assert.throws(
285
+ () => parseConfig({ lcmObserveConcurrency: 1.5 }),
286
+ /lcmObserveConcurrency must be an integer greater than or equal to 1/,
287
+ );
288
+ });
289
+
290
+ test("parseConfig activeRecallCacheTtlMs=-1 falls back to the default ttl", () => {
291
+ const result = parseConfig({ activeRecallCacheTtlMs: -1 });
292
+ assert.equal(result.activeRecallCacheTtlMs, 15000);
293
+ });
294
+
295
+ test("parseConfig preserves custom entity schemas without code changes", () => {
296
+ const result = parseConfig({
297
+ entitySchemas: {
298
+ person: {
299
+ sections: [
300
+ { key: "beliefs", title: "Beliefs" },
301
+ { key: "working_on", title: "Working On" },
302
+ ],
303
+ },
304
+ },
305
+ });
306
+
307
+ assert.deepEqual((result as any).entitySchemas?.person?.sections, [
308
+ { key: "beliefs", title: "Beliefs", description: "" },
309
+ { key: "working_on", title: "Working On", description: "" },
310
+ ]);
311
+ });
312
+
313
+ // ── Issue #518: direct-answer retrieval tier config ─────────────────────────
314
+
315
+ test("parseConfig recallDirectAnswerEnabled defaults to true (slice 8a flip)", () => {
316
+ const result = parseConfig({});
317
+ assert.equal(result.recallDirectAnswerEnabled, true);
318
+ });
319
+
320
+ test('parseConfig recallDirectAnswerEnabled coerces string "true" to boolean true', () => {
321
+ const result = parseConfig({ recallDirectAnswerEnabled: "true" });
322
+ assert.equal(result.recallDirectAnswerEnabled, true);
323
+ });
324
+
325
+ test('parseConfig recallDirectAnswerEnabled coerces string "false" to boolean false (rule 36)', () => {
326
+ const result = parseConfig({ recallDirectAnswerEnabled: "false" });
327
+ assert.equal(result.recallDirectAnswerEnabled, false);
328
+ });
329
+
330
+ test("parseConfig recallDirectAnswerEnabled accepts boolean true", () => {
331
+ const result = parseConfig({ recallDirectAnswerEnabled: true });
332
+ assert.equal(result.recallDirectAnswerEnabled, true);
333
+ });
334
+
335
+ test("parseConfig recallDirectAnswerTokenOverlapFloor defaults to 0.55", () => {
336
+ const result = parseConfig({});
337
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
338
+ });
339
+
340
+ test("parseConfig recallDirectAnswerTokenOverlapFloor=0 is preserved as disable switch (rule 45)", () => {
341
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: 0 });
342
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0);
343
+ });
344
+
345
+ test("parseConfig recallDirectAnswerTokenOverlapFloor=0.8 preserves the explicit value", () => {
346
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: 0.8 });
347
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.8);
348
+ });
349
+
350
+ test("parseConfig recallDirectAnswerTokenOverlapFloor=-0.1 falls back to default", () => {
351
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: -0.1 });
352
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
353
+ });
354
+
355
+ test("parseConfig recallDirectAnswerTokenOverlapFloor=1.5 falls back to default", () => {
356
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: 1.5 });
357
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
358
+ });
359
+
360
+ test('parseConfig recallDirectAnswerTokenOverlapFloor="0.8" (string) coerces to 0.8 (rule 28)', () => {
361
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: "0.8" });
362
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.8);
363
+ });
364
+
365
+ test('parseConfig recallDirectAnswerTokenOverlapFloor="0" (string) coerces to 0', () => {
366
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: "0" });
367
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0);
368
+ });
369
+
370
+ test('parseConfig recallDirectAnswerTokenOverlapFloor="not-a-number" falls back to default', () => {
371
+ const result = parseConfig({ recallDirectAnswerTokenOverlapFloor: "not-a-number" });
372
+ assert.equal(result.recallDirectAnswerTokenOverlapFloor, 0.55);
373
+ });
374
+
375
+ test('parseConfig recallDirectAnswerImportanceFloor="0.9" (string) coerces to 0.9', () => {
376
+ const result = parseConfig({ recallDirectAnswerImportanceFloor: "0.9" });
377
+ assert.equal(result.recallDirectAnswerImportanceFloor, 0.9);
378
+ });
379
+
380
+ test('parseConfig recallDirectAnswerAmbiguityMargin="0.25" (string) coerces to 0.25', () => {
381
+ const result = parseConfig({ recallDirectAnswerAmbiguityMargin: "0.25" });
382
+ assert.equal(result.recallDirectAnswerAmbiguityMargin, 0.25);
383
+ });
384
+
385
+ test("parseConfig recallDirectAnswerImportanceFloor defaults to 0.7", () => {
386
+ const result = parseConfig({});
387
+ assert.equal(result.recallDirectAnswerImportanceFloor, 0.7);
388
+ });
389
+
390
+ test("parseConfig recallDirectAnswerImportanceFloor=0 is preserved as disable switch", () => {
391
+ const result = parseConfig({ recallDirectAnswerImportanceFloor: 0 });
392
+ assert.equal(result.recallDirectAnswerImportanceFloor, 0);
393
+ });
394
+
395
+ test("parseConfig recallDirectAnswerAmbiguityMargin defaults to 0.15", () => {
396
+ const result = parseConfig({});
397
+ assert.equal(result.recallDirectAnswerAmbiguityMargin, 0.15);
398
+ });
399
+
400
+ test("parseConfig recallDirectAnswerAmbiguityMargin=0.3 preserves explicit value", () => {
401
+ const result = parseConfig({ recallDirectAnswerAmbiguityMargin: 0.3 });
402
+ assert.equal(result.recallDirectAnswerAmbiguityMargin, 0.3);
403
+ });
404
+
405
+ test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets defaults to the documented list", () => {
406
+ const result = parseConfig({});
407
+ assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
408
+ "decisions",
409
+ "principles",
410
+ "conventions",
411
+ "runbooks",
412
+ "entities",
413
+ ]);
414
+ });
415
+
416
+ test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets preserves a custom array", () => {
417
+ const result = parseConfig({
418
+ recallDirectAnswerEligibleTaxonomyBuckets: ["decisions", "runbooks"],
419
+ });
420
+ assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
421
+ "decisions",
422
+ "runbooks",
423
+ ]);
424
+ });
425
+
426
+ test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets filters non-strings and empty strings", () => {
427
+ const result = parseConfig({
428
+ recallDirectAnswerEligibleTaxonomyBuckets: ["decisions", "", 42, null, "runbooks"],
429
+ });
430
+ assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
431
+ "decisions",
432
+ "runbooks",
433
+ ]);
434
+ });
435
+
436
+ test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets=[] is preserved as a disable-all state", () => {
437
+ const result = parseConfig({
438
+ recallDirectAnswerEligibleTaxonomyBuckets: [],
439
+ });
440
+ assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, []);
441
+ });
442
+
443
+ test("parseConfig recallDirectAnswerEligibleTaxonomyBuckets non-array value falls back to default", () => {
444
+ const result = parseConfig({
445
+ recallDirectAnswerEligibleTaxonomyBuckets: "decisions",
446
+ });
447
+ assert.deepEqual(result.recallDirectAnswerEligibleTaxonomyBuckets, [
448
+ "decisions",
449
+ "principles",
450
+ "conventions",
451
+ "runbooks",
452
+ "entities",
453
+ ]);
454
+ });
455
+
456
+ // ── Issue #548: local LLM thinking-mode suppression ─────────────────────────
457
+
458
+ test("parseConfig localLlmDisableThinking defaults to true (issue #548)", () => {
459
+ const result = parseConfig({});
460
+ assert.equal(result.localLlmDisableThinking, true);
461
+ });
462
+
463
+ test("parseConfig localLlmDisableThinking=false preserves operator opt-out", () => {
464
+ const result = parseConfig({ localLlmDisableThinking: false });
465
+ assert.equal(result.localLlmDisableThinking, false);
466
+ });
467
+
468
+ test('parseConfig localLlmDisableThinking="false" (CLI string) coerces to boolean false (rule 36)', () => {
469
+ // `--config localLlmDisableThinking=false` arrives as string; must
470
+ // coerce or the opt-out silently fails.
471
+ const result = parseConfig({ localLlmDisableThinking: "false" });
472
+ assert.equal(result.localLlmDisableThinking, false);
473
+ });
474
+
475
+ test('parseConfig localLlmDisableThinking="true" (CLI string) coerces to boolean true', () => {
476
+ const result = parseConfig({ localLlmDisableThinking: "true" });
477
+ assert.equal(result.localLlmDisableThinking, true);
478
+ });
479
+
480
+ test('parseConfig localLlmDisableThinking "0"/"no"/"off" all coerce to false', () => {
481
+ assert.equal(parseConfig({ localLlmDisableThinking: "0" }).localLlmDisableThinking, false);
482
+ assert.equal(parseConfig({ localLlmDisableThinking: "no" }).localLlmDisableThinking, false);
483
+ assert.equal(parseConfig({ localLlmDisableThinking: "off" }).localLlmDisableThinking, false);
484
+ });
485
+
486
+ test("parseConfig procedural numeric fields coerce from CLI-style strings (issue #519)", () => {
487
+ const result = parseConfig({
488
+ openaiApiKey: "sk-test",
489
+ procedural: {
490
+ enabled: true,
491
+ minOccurrences: "5",
492
+ successFloor: "0.82",
493
+ autoPromoteOccurrences: "12",
494
+ lookbackDays: "14",
495
+ recallMaxProcedures: "2",
496
+ },
497
+ });
498
+ assert.equal(result.procedural.minOccurrences, 5);
499
+ assert.equal(result.procedural.successFloor, 0.82);
500
+ assert.equal(result.procedural.autoPromoteOccurrences, 12);
501
+ assert.equal(result.procedural.lookbackDays, 14);
502
+ assert.equal(result.procedural.recallMaxProcedures, 2);
503
+ });
504
+
505
+ test("parseConfig applies safer-by-default procedural thresholds (issue #567 PR 3/5)", () => {
506
+ // When the user does not override procedural thresholds, the defaults
507
+ // MUST match the safer floor committed in #567 PR 3. This test locks in
508
+ // the values so a future refactor cannot silently regress them.
509
+ // Slice 4 flips `enabled` to true — asserted in the next test.
510
+ const result = parseConfig({ openaiApiKey: "sk-test" });
511
+ assert.equal(result.procedural.minOccurrences, 3);
512
+ assert.equal(result.procedural.successFloor, 0.75);
513
+ assert.equal(result.procedural.autoPromoteOccurrences, 8);
514
+ assert.equal(result.procedural.lookbackDays, 14);
515
+ assert.equal(result.procedural.recallMaxProcedures, 2);
516
+ });
517
+
518
+ test("buildDefaultRecallPipeline enables procedure-recall when procedural default-on (issue #567 PR 4/5)", () => {
519
+ // Codex P2 on #609: the master gate defaulting to `true` must also flip
520
+ // the default recall pipeline to include the `procedure-recall` section.
521
+ // Previously the pipeline check required `cfg.procedural?.enabled === true`
522
+ // on raw config, so an omitted key left the section disabled even
523
+ // though `parseConfig` reported enabled:true.
524
+ const cfg = parseConfig({ openaiApiKey: "sk-test" });
525
+ assert.equal(cfg.procedural.enabled, true);
526
+ const procSection = cfg.recallPipeline.find(
527
+ (s) => s.id === "procedure-recall",
528
+ );
529
+ assert.ok(procSection, "procedure-recall section must exist by default");
530
+ assert.equal(
531
+ procSection.enabled,
532
+ true,
533
+ "procedure-recall must be enabled when procedural default-on",
534
+ );
535
+
536
+ // Explicit opt-out disables both the master gate and the recall section.
537
+ const optOut = parseConfig({
538
+ openaiApiKey: "sk-test",
539
+ procedural: { enabled: false },
540
+ });
541
+ assert.equal(optOut.procedural.enabled, false);
542
+ const optOutSection = optOut.recallPipeline.find(
543
+ (s) => s.id === "procedure-recall",
544
+ );
545
+ assert.equal(optOutSection?.enabled, false);
546
+ });
547
+
548
+ test("parseConfig rejects non-object procedural shapes (Codex P2 on #609)", () => {
549
+ // `procedural: false` or `procedural: null` would previously normalize
550
+ // to `{}` and then the omitted-key branch would silently enable the
551
+ // feature — the opposite of the user's shorthand intent. Reject loudly.
552
+ for (const v of [false, true, null, 42, "disabled", []] as unknown[]) {
553
+ assert.throws(
554
+ () =>
555
+ parseConfig({ openaiApiKey: "sk-test", procedural: v } as Record<
556
+ string,
557
+ unknown
558
+ >),
559
+ /procedural must be an object/,
560
+ `invalid procedural shape ${JSON.stringify(v)} should throw`,
561
+ );
562
+ }
563
+ // Valid empty object still parses (means "use defaults").
564
+ const blank = parseConfig({ openaiApiKey: "sk-test", procedural: {} });
565
+ assert.equal(blank.procedural.enabled, true);
566
+ });
567
+
568
+ test("conservative memoryOsPreset keeps procedural.enabled off after default flip (issue #567 PR 4/5)", () => {
569
+ // Cursor Medium on #609: the `conservative` preset disables many
570
+ // features; the default flip must not silently opt it into procedural
571
+ // memory.
572
+ const cfg = parseConfig({
573
+ openaiApiKey: "sk-test",
574
+ memoryOsPreset: "conservative",
575
+ });
576
+ assert.equal(cfg.procedural.enabled, false);
577
+
578
+ // A user can still opt back in by setting the key explicitly — the
579
+ // preset is a default, not a ceiling.
580
+ const optedIn = parseConfig({
581
+ openaiApiKey: "sk-test",
582
+ memoryOsPreset: "conservative",
583
+ procedural: { enabled: true },
584
+ });
585
+ assert.equal(optedIn.procedural.enabled, true);
586
+
587
+ // Codex P1 on #609: a user-provided `procedural` block that does NOT
588
+ // set `enabled` must not clobber the preset's `enabled: false`. The
589
+ // preset's procedural object is deep-merged with the baseCfg's
590
+ // procedural object so partial overrides (minOccurrences, lookbackDays)
591
+ // preserve the opt-out.
592
+ const nestedOverride = parseConfig({
593
+ openaiApiKey: "sk-test",
594
+ memoryOsPreset: "conservative",
595
+ procedural: { minOccurrences: 5 },
596
+ });
597
+ assert.equal(
598
+ nestedOverride.procedural.enabled,
599
+ false,
600
+ "conservative opt-out must survive an unrelated procedural override",
601
+ );
602
+ assert.equal(nestedOverride.procedural.minOccurrences, 5);
603
+ });
604
+
605
+ test("parseConfig defaults procedural.enabled to true when omitted (issue #567 PR 4/5)", () => {
606
+ // Omitting `procedural.enabled` ships the feature ON. Users who were
607
+ // previously on the default-off branch get the new default automatically.
608
+ const omitted = parseConfig({ openaiApiKey: "sk-test" });
609
+ assert.equal(omitted.procedural.enabled, true);
610
+
611
+ // Omitting the `procedural` object entirely is equivalent — covers the
612
+ // "no procedural key at all" path which is distinct from
613
+ // `procedural: {}` as a runtime shape.
614
+ const bareConfig = parseConfig({
615
+ openaiApiKey: "sk-test",
616
+ procedural: {},
617
+ });
618
+ assert.equal(bareConfig.procedural.enabled, true);
619
+
620
+ // Explicit `false` (boolean) still honors opt-out.
621
+ const optOutBool = parseConfig({
622
+ openaiApiKey: "sk-test",
623
+ procedural: { enabled: false },
624
+ });
625
+ assert.equal(optOutBool.procedural.enabled, false);
626
+
627
+ // CLI-style `"false"` string must also coerce to off (CLAUDE.md rule 36).
628
+ const optOutFalseStr = parseConfig({
629
+ openaiApiKey: "sk-test",
630
+ procedural: { enabled: "false" },
631
+ });
632
+ assert.equal(optOutFalseStr.procedural.enabled, false);
633
+
634
+ // Other falsy-ish strings also opt out.
635
+ for (const v of ["0", "no", "off"]) {
636
+ const cfg = parseConfig({
637
+ openaiApiKey: "sk-test",
638
+ procedural: { enabled: v },
639
+ });
640
+ assert.equal(
641
+ cfg.procedural.enabled,
642
+ false,
643
+ `procedural.enabled="${v}" should opt out`,
644
+ );
645
+ }
646
+
647
+ // Explicit `true` keeps the feature on (idempotent with the new default).
648
+ const explicitOn = parseConfig({
649
+ openaiApiKey: "sk-test",
650
+ procedural: { enabled: true },
651
+ });
652
+ assert.equal(explicitOn.procedural.enabled, true);
653
+
654
+ // CLAUDE.md rule 51: when the key IS present but the value can't be
655
+ // understood, reject loudly instead of silently flipping the default.
656
+ // (Codex P1 review on #609.)
657
+ for (const v of ["maybe", "fales", "TRUE-ish", "", " "]) {
658
+ assert.throws(
659
+ () =>
660
+ parseConfig({
661
+ openaiApiKey: "sk-test",
662
+ procedural: { enabled: v },
663
+ }),
664
+ /procedural\.enabled must be a boolean/,
665
+ `invalid string ${JSON.stringify(v)} should throw`,
666
+ );
667
+ }
668
+ // Numeric 0/1 are not valid either — they silently became false/true via
669
+ // a truthiness check in earlier drafts. Reject with the same message.
670
+ for (const v of [0, 1, 2, null]) {
671
+ assert.throws(
672
+ () =>
673
+ parseConfig({
674
+ openaiApiKey: "sk-test",
675
+ procedural: { enabled: v },
676
+ }),
677
+ /procedural\.enabled must be a boolean/,
678
+ `invalid non-boolean ${JSON.stringify(v)} should throw`,
679
+ );
680
+ }
681
+ });
682
+
683
+ test("parseConfig codingMode: defaults projectScope=true, branchScope=false (issue #569)", () => {
684
+ const result = parseConfig({ openaiApiKey: "sk-test" });
685
+ assert.equal(result.codingMode.projectScope, true, "projectScope defaults to true");
686
+ assert.equal(result.codingMode.branchScope, false, "branchScope defaults to false (opt-in)");
687
+ });
688
+
689
+ test("parseConfig codingMode: accepts explicit booleans and CLI-style strings (issue #569)", () => {
690
+ // CLAUDE.md #36: string "false" must coerce to boolean false.
691
+ const result = parseConfig({
692
+ openaiApiKey: "sk-test",
693
+ codingMode: { projectScope: "false", branchScope: "true" },
694
+ });
695
+ assert.equal(result.codingMode.projectScope, false);
696
+ assert.equal(result.codingMode.branchScope, true);
697
+ });
698
+
699
+ test("parseConfig codingMode: unknown object shape falls back to defaults", () => {
700
+ const result = parseConfig({ openaiApiKey: "sk-test", codingMode: null });
701
+ assert.equal(result.codingMode.projectScope, true);
702
+ assert.equal(result.codingMode.branchScope, false);
703
+ });
704
+
705
+ // Pattern reinforcement (issue #687 PR 2/4)
706
+
707
+ test("parseConfig: pattern reinforcement defaults are off, weekly, minCount=3, std categories", () => {
708
+ const result = parseConfig({ openaiApiKey: "sk-test" });
709
+ assert.equal(result.patternReinforcementEnabled, false);
710
+ assert.equal(result.patternReinforcementCadenceMs, 7 * 24 * 60 * 60 * 1000);
711
+ assert.equal(result.patternReinforcementMinCount, 3);
712
+ assert.deepEqual(result.patternReinforcementCategories, [
713
+ "preference",
714
+ "fact",
715
+ "decision",
716
+ ]);
717
+ });
718
+
719
+ test("parseConfig: patternReinforcementEnabled accepts string-coerced booleans", () => {
720
+ const t = parseConfig({ openaiApiKey: "sk-test", patternReinforcementEnabled: "true" });
721
+ assert.equal(t.patternReinforcementEnabled, true);
722
+ const f = parseConfig({ openaiApiKey: "sk-test", patternReinforcementEnabled: "false" });
723
+ assert.equal(f.patternReinforcementEnabled, false);
724
+ });
725
+
726
+ test("parseConfig: patternReinforcementMinCount clamps to >= 2", () => {
727
+ const r0 = parseConfig({ openaiApiKey: "sk-test", patternReinforcementMinCount: 0 });
728
+ assert.equal(r0.patternReinforcementMinCount, 2);
729
+ const r1 = parseConfig({ openaiApiKey: "sk-test", patternReinforcementMinCount: 1 });
730
+ assert.equal(r1.patternReinforcementMinCount, 2);
731
+ const r5 = parseConfig({ openaiApiKey: "sk-test", patternReinforcementMinCount: 5 });
732
+ assert.equal(r5.patternReinforcementMinCount, 5);
733
+ });
734
+
735
+ test("parseConfig: patternReinforcementCadenceMs honors documented disable=0", () => {
736
+ const r = parseConfig({ openaiApiKey: "sk-test", patternReinforcementCadenceMs: 0 });
737
+ assert.equal(r.patternReinforcementCadenceMs, 0);
738
+ });
739
+
740
+ test("parseConfig: patternReinforcementCategories filters non-string entries", () => {
741
+ const r = parseConfig({
742
+ openaiApiKey: "sk-test",
743
+ patternReinforcementCategories: ["preference", 42, " ", "fact"],
744
+ });
745
+ assert.deepEqual(r.patternReinforcementCategories, ["preference", "fact"]);
746
+ });
747
+
748
+ test("parseConfig: non-array patternReinforcementCategories falls back to defaults", () => {
749
+ const r = parseConfig({
750
+ openaiApiKey: "sk-test",
751
+ patternReinforcementCategories: "preference,fact",
752
+ });
753
+ assert.deepEqual(r.patternReinforcementCategories, [
754
+ "preference",
755
+ "fact",
756
+ "decision",
757
+ ]);
758
+ });
759
+
760
+ // ── #683 PR 2/N: connectors.googleDrive parsing.
761
+
762
+ test("parseConfig connectors defaults: googleDrive disabled with empty creds", () => {
763
+ const result = parseConfig({ openaiApiKey: "sk-test" });
764
+ assert.equal(result.connectors.googleDrive.enabled, false);
765
+ assert.equal(result.connectors.googleDrive.clientId, "");
766
+ assert.equal(result.connectors.googleDrive.clientSecret, "");
767
+ assert.equal(result.connectors.googleDrive.refreshToken, "");
768
+ assert.equal(result.connectors.googleDrive.pollIntervalMs, 300_000);
769
+ assert.deepEqual(result.connectors.googleDrive.folderIds, []);
770
+ });
771
+
772
+ test("parseConfig connectors.googleDrive accepts valid overrides", () => {
773
+ const result = parseConfig({
774
+ openaiApiKey: "sk-test",
775
+ connectors: {
776
+ googleDrive: {
777
+ enabled: true,
778
+ clientId: "synthetic-client",
779
+ clientSecret: "synthetic-secret",
780
+ refreshToken: "synthetic-token",
781
+ pollIntervalMs: 60_000,
782
+ folderIds: [
783
+ "1AbCdEfGh_synthetic_folder_aaaaa",
784
+ "1AbCdEfGh_synthetic_folder_aaaaa", // dup — should dedupe
785
+ "1AbCdEfGh_synthetic_folder_bbbbb",
786
+ " ", // empty after trim — should drop
787
+ ],
788
+ },
789
+ },
790
+ });
791
+ assert.equal(result.connectors.googleDrive.enabled, true);
792
+ assert.equal(result.connectors.googleDrive.pollIntervalMs, 60_000);
793
+ assert.deepEqual(result.connectors.googleDrive.folderIds, [
794
+ "1AbCdEfGh_synthetic_folder_aaaaa",
795
+ "1AbCdEfGh_synthetic_folder_bbbbb",
796
+ ]);
797
+ });
798
+
799
+ test("parseConfig rejects malformed connectors top-level", () => {
800
+ assert.throws(
801
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: "nope" }),
802
+ /connectors must be an object/,
803
+ );
804
+ assert.throws(
805
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: null }),
806
+ /connectors must be an object/,
807
+ );
808
+ assert.throws(
809
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: [] }),
810
+ /connectors must be an object/,
811
+ );
812
+ });
813
+
814
+ test("parseConfig rejects malformed connectors.googleDrive shape", () => {
815
+ assert.throws(
816
+ () =>
817
+ parseConfig({
818
+ openaiApiKey: "sk-test",
819
+ connectors: { googleDrive: "nope" },
820
+ }),
821
+ /connectors\.googleDrive must be an object/,
822
+ );
823
+ });
824
+
825
+ test("parseConfig rejects out-of-range pollIntervalMs", () => {
826
+ assert.throws(
827
+ () =>
828
+ parseConfig({
829
+ openaiApiKey: "sk-test",
830
+ connectors: { googleDrive: { pollIntervalMs: 50 } },
831
+ }),
832
+ /pollIntervalMs must be an integer in/,
833
+ );
834
+ assert.throws(
835
+ () =>
836
+ parseConfig({
837
+ openaiApiKey: "sk-test",
838
+ connectors: { googleDrive: { pollIntervalMs: 9_999_999_999 } },
839
+ }),
840
+ /pollIntervalMs must be an integer in/,
841
+ );
842
+ });
843
+
844
+ test("parseConfig rejects malformed folderIds", () => {
845
+ assert.throws(
846
+ () =>
847
+ parseConfig({
848
+ openaiApiKey: "sk-test",
849
+ connectors: { googleDrive: { folderIds: "not-an-array" } },
850
+ }),
851
+ /folderIds must be an array/,
852
+ );
853
+ assert.throws(
854
+ () =>
855
+ parseConfig({
856
+ openaiApiKey: "sk-test",
857
+ connectors: { googleDrive: { folderIds: [42] } },
858
+ }),
859
+ /folderIds entries must be strings/,
860
+ );
861
+ });
862
+
863
+ // ── #683 PR 4/6: connectors.gmail.pollIntervalMs validation (Codex P2 PRRT_kwDORJXyws59se75)
864
+ // Per CLAUDE.md gotcha #51: invalid values must throw, not silently default.
865
+
866
+ test("parseConfig connectors.gmail accepts default pollIntervalMs when omitted", () => {
867
+ const result = parseConfig({ openaiApiKey: "sk-test" });
868
+ assert.equal(result.connectors.gmail.pollIntervalMs, 300_000, "default gmail pollIntervalMs must be 300000");
869
+ });
870
+
871
+ test("parseConfig connectors.gmail accepts valid pollIntervalMs", () => {
872
+ const result = parseConfig({
873
+ openaiApiKey: "sk-test",
874
+ connectors: { gmail: { pollIntervalMs: 60_000 } },
875
+ });
876
+ assert.equal(result.connectors.gmail.pollIntervalMs, 60_000);
877
+ });
878
+
879
+ test("parseConfig rejects connectors.gmail.pollIntervalMs = 0 (must be positive)", () => {
880
+ assert.throws(
881
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: 0 } } }),
882
+ /positive/,
883
+ "zero pollIntervalMs must be rejected",
884
+ );
885
+ });
886
+
887
+ test("parseConfig rejects connectors.gmail.pollIntervalMs < 0 (negative)", () => {
888
+ assert.throws(
889
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: -1 } } }),
890
+ /positive/,
891
+ );
892
+ });
893
+
894
+ test("parseConfig rejects connectors.gmail.pollIntervalMs as NaN (Codex P2)", () => {
895
+ assert.throws(
896
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: NaN } } }),
897
+ /finite/,
898
+ "NaN pollIntervalMs must be rejected with a message mentioning finite",
899
+ );
900
+ });
901
+
902
+ test("parseConfig rejects connectors.gmail.pollIntervalMs as non-numeric string (Codex P2)", () => {
903
+ assert.throws(
904
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: "not-a-number" } } }),
905
+ /finite/,
906
+ "non-numeric string pollIntervalMs must be rejected",
907
+ );
908
+ });
909
+
910
+ test("parseConfig rejects connectors.gmail.pollIntervalMs as Infinity (Codex P2)", () => {
911
+ assert.throws(
912
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: Infinity } } }),
913
+ /finite/,
914
+ "Infinity pollIntervalMs must be rejected",
915
+ );
916
+ });
917
+
918
+ test("parseConfig rejects connectors.gmail.pollIntervalMs below minimum (50ms)", () => {
919
+ assert.throws(
920
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: 50 } } }),
921
+ /pollIntervalMs/,
922
+ );
923
+ });
924
+
925
+ test("parseConfig rejects connectors.gmail.pollIntervalMs above maximum (25h)", () => {
926
+ assert.throws(
927
+ () => parseConfig({ openaiApiKey: "sk-test", connectors: { gmail: { pollIntervalMs: 25 * 60 * 60 * 1000 } } }),
928
+ /pollIntervalMs/,
929
+ );
930
+ });