@remnic/core 9.3.613 → 9.3.615

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 (386) hide show
  1. package/dist/access-cli.js +59 -58
  2. package/dist/access-cli.js.map +1 -1
  3. package/dist/access-http.d.ts +4 -2
  4. package/dist/access-http.js +23 -23
  5. package/dist/access-mcp.d.ts +9 -2
  6. package/dist/access-mcp.js +20 -20
  7. package/dist/access-schema.d.ts +26 -14
  8. package/dist/access-schema.js +3 -3
  9. package/dist/{access-service-D2J9dh_9.d.ts → access-service-CBNEKjzN.d.ts} +71 -6
  10. package/dist/access-service.d.ts +2 -2
  11. package/dist/access-service.js +17 -17
  12. package/dist/active-recall.js +20 -3
  13. package/dist/active-recall.js.map +1 -1
  14. package/dist/adapters/index.js +4 -4
  15. package/dist/adapters/registry.js +2 -2
  16. package/dist/behavior-learner.js +2 -3
  17. package/dist/behavior-learner.js.map +1 -1
  18. package/dist/bootstrap.d.ts +1 -1
  19. package/dist/briefing.js +3 -3
  20. package/dist/buffer.d.ts +1 -1
  21. package/dist/buffer.js +1 -1
  22. package/dist/calibration.d.ts +5 -2
  23. package/dist/calibration.js +7 -5
  24. package/dist/calibration.js.map +1 -1
  25. package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
  26. package/dist/causal-consolidation.d.ts +8 -2
  27. package/dist/causal-consolidation.js +13 -11
  28. package/dist/causal-consolidation.js.map +1 -1
  29. package/dist/{chunk-3BP57I6J.js → chunk-2F6NP3NT.js} +2 -1
  30. package/dist/{chunk-3BP57I6J.js.map → chunk-2F6NP3NT.js.map} +1 -1
  31. package/dist/{chunk-AU7Q3LSC.js → chunk-2QSZNTDO.js} +4 -4
  32. package/dist/{chunk-HSVJGWYS.js → chunk-2ROPI5OE.js} +2 -2
  33. package/dist/{chunk-C4SQJZAF.js → chunk-2SGJY2UY.js} +6 -3
  34. package/dist/chunk-2SGJY2UY.js.map +1 -0
  35. package/dist/{chunk-ZDTVJXIP.js → chunk-3MAONBX3.js} +13 -5
  36. package/dist/chunk-3MAONBX3.js.map +1 -0
  37. package/dist/{chunk-G3Z3QEF5.js → chunk-3PY7VHV7.js} +2 -2
  38. package/dist/chunk-3PY7VHV7.js.map +1 -0
  39. package/dist/{chunk-CF3ZF2YU.js → chunk-3QSU4NFF.js} +3 -3
  40. package/dist/{chunk-AJA46VX5.js → chunk-3T74IZB3.js} +11 -2
  41. package/dist/chunk-3T74IZB3.js.map +1 -0
  42. package/dist/{chunk-KVEVLBKC.js → chunk-4HFJQCJZ.js} +13 -8
  43. package/dist/chunk-4HFJQCJZ.js.map +1 -0
  44. package/dist/{chunk-KGK2QKWL.js → chunk-4R4KTDIE.js} +1 -1
  45. package/dist/chunk-4R4KTDIE.js.map +1 -0
  46. package/dist/{chunk-OI27U2HT.js → chunk-5BTCT236.js} +2 -2
  47. package/dist/{chunk-TH67Q46T.js → chunk-5OHHEORR.js} +64 -21
  48. package/dist/chunk-5OHHEORR.js.map +1 -0
  49. package/dist/{chunk-CO7ZO4TU.js → chunk-5VDJMYTF.js} +2 -2
  50. package/dist/{chunk-BFBF3XEF.js → chunk-6BDVBBBY.js} +33 -25
  51. package/dist/{chunk-BFBF3XEF.js.map → chunk-6BDVBBBY.js.map} +1 -1
  52. package/dist/{chunk-EAZGEEG2.js → chunk-6L46YAEZ.js} +45 -9
  53. package/dist/chunk-6L46YAEZ.js.map +1 -0
  54. package/dist/{chunk-YFS5OEKO.js → chunk-7MLB4NCL.js} +2 -2
  55. package/dist/{chunk-LZ3VEOU5.js → chunk-AL4RAJL5.js} +22 -5
  56. package/dist/chunk-AL4RAJL5.js.map +1 -0
  57. package/dist/{chunk-557IAFPD.js → chunk-APRRL26Q.js} +2 -2
  58. package/dist/{chunk-QDDHYAKV.js → chunk-AZDOWD2L.js} +2 -2
  59. package/dist/{chunk-MLT75J5S.js → chunk-B6SU7YSE.js} +3 -3
  60. package/dist/{chunk-FXKPZ3H6.js → chunk-BPSGLMQ4.js} +2 -2
  61. package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
  62. package/dist/{chunk-NOMEVTUD.js → chunk-C6C7XVKG.js} +5 -4
  63. package/dist/chunk-C6C7XVKG.js.map +1 -0
  64. package/dist/{chunk-XKIQZXUB.js → chunk-CI7RKSRE.js} +7 -1
  65. package/dist/chunk-CI7RKSRE.js.map +1 -0
  66. package/dist/{chunk-IK34DVAC.js → chunk-CIOMS6DI.js} +2 -2
  67. package/dist/{chunk-2I5JGH3M.js → chunk-CYEPCZN5.js} +2 -2
  68. package/dist/{chunk-2I5JGH3M.js.map → chunk-CYEPCZN5.js.map} +1 -1
  69. package/dist/{chunk-JHMFYY7L.js → chunk-DCGT4FPP.js} +13 -5
  70. package/dist/chunk-DCGT4FPP.js.map +1 -0
  71. package/dist/{chunk-7DZRO2DC.js → chunk-DEPRLVLK.js} +2 -2
  72. package/dist/{chunk-CSKLPDN6.js → chunk-DEVUWMME.js} +52 -19
  73. package/dist/chunk-DEVUWMME.js.map +1 -0
  74. package/dist/{chunk-DHGSZ3UD.js → chunk-DGNQRNLL.js} +2 -2
  75. package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
  76. package/dist/{chunk-HJNQQICM.js → chunk-EXUAP5LH.js} +108 -51
  77. package/dist/chunk-EXUAP5LH.js.map +1 -0
  78. package/dist/chunk-FAV25DUZ.js +12 -0
  79. package/dist/chunk-FAV25DUZ.js.map +1 -0
  80. package/dist/{chunk-ETUPBUHB.js → chunk-GDASG7NC.js} +2 -2
  81. package/dist/{chunk-L227SKTB.js → chunk-GDB4J2H3.js} +17 -1
  82. package/dist/chunk-GDB4J2H3.js.map +1 -0
  83. package/dist/{chunk-IP73YCZP.js → chunk-GLPBYIXN.js} +4 -2
  84. package/dist/chunk-GLPBYIXN.js.map +1 -0
  85. package/dist/{chunk-4HP7HIE3.js → chunk-HP5FMB6L.js} +2 -2
  86. package/dist/{chunk-EVZFIAPG.js → chunk-IBTZEBUD.js} +23 -10
  87. package/dist/chunk-IBTZEBUD.js.map +1 -0
  88. package/dist/{chunk-DOX2CG6Y.js → chunk-IEUU7O4F.js} +2 -2
  89. package/dist/{chunk-EUML3N6B.js → chunk-IMA6GU4Y.js} +3 -3
  90. package/dist/chunk-IMA6GU4Y.js.map +1 -0
  91. package/dist/{chunk-JNANKJLN.js → chunk-JOASJWQR.js} +2 -2
  92. package/dist/chunk-JOASJWQR.js.map +1 -0
  93. package/dist/{chunk-WSGF57U2.js → chunk-JQDZQ4TB.js} +2 -2
  94. package/dist/{chunk-HINSGUA7.js → chunk-KBL3JJR6.js} +9 -13
  95. package/dist/chunk-KBL3JJR6.js.map +1 -0
  96. package/dist/{chunk-IOTENEVL.js → chunk-KGLPJROV.js} +57 -50
  97. package/dist/chunk-KGLPJROV.js.map +1 -0
  98. package/dist/{chunk-W7L6HXUC.js → chunk-LXOM6IQU.js} +2 -2
  99. package/dist/{chunk-G6R5UD3Q.js → chunk-MGN7VHWQ.js} +42 -1
  100. package/dist/{chunk-G6R5UD3Q.js.map → chunk-MGN7VHWQ.js.map} +1 -1
  101. package/dist/{chunk-DLJ4IR6M.js → chunk-MHQC2WU2.js} +2 -2
  102. package/dist/chunk-MHQC2WU2.js.map +1 -0
  103. package/dist/{chunk-5RPTH6AU.js → chunk-NM5NQYJE.js} +20 -19
  104. package/dist/chunk-NM5NQYJE.js.map +1 -0
  105. package/dist/{chunk-6JGNHWCI.js → chunk-OBIRVF36.js} +3 -3
  106. package/dist/{chunk-CHCA44C3.js → chunk-ODPLEWB6.js} +3 -3
  107. package/dist/chunk-ODPLEWB6.js.map +1 -0
  108. package/dist/{chunk-HENLZHIT.js → chunk-OIF36KGD.js} +7 -4
  109. package/dist/chunk-OIF36KGD.js.map +1 -0
  110. package/dist/{chunk-GUPISBV2.js → chunk-PP2JH3GP.js} +2 -2
  111. package/dist/{chunk-OXJBNGBK.js → chunk-PSUB67YB.js} +2 -2
  112. package/dist/{chunk-UWY7GIVS.js → chunk-PYIFUBRK.js} +45 -13
  113. package/dist/chunk-PYIFUBRK.js.map +1 -0
  114. package/dist/{chunk-KIB7SDIJ.js → chunk-Q6YIJGXJ.js} +2 -2
  115. package/dist/{chunk-ZT3EGNLR.js → chunk-QPD426WT.js} +2 -2
  116. package/dist/{chunk-RLV3PQGH.js → chunk-QVO4YOB7.js} +6 -6
  117. package/dist/{chunk-GMAG2HS4.js → chunk-RG3LBSGH.js} +46 -9
  118. package/dist/chunk-RG3LBSGH.js.map +1 -0
  119. package/dist/{chunk-XSWKORGM.js → chunk-S53OYO3F.js} +3 -1
  120. package/dist/chunk-S53OYO3F.js.map +1 -0
  121. package/dist/{chunk-YCN4BVDK.js → chunk-SCPFRKIT.js} +4 -2
  122. package/dist/chunk-SCPFRKIT.js.map +1 -0
  123. package/dist/{chunk-NZPF2SYV.js → chunk-T7N6KQGS.js} +138 -5
  124. package/dist/chunk-T7N6KQGS.js.map +1 -0
  125. package/dist/{chunk-VJXSUAO7.js → chunk-TNOWU6RP.js} +13 -10
  126. package/dist/chunk-TNOWU6RP.js.map +1 -0
  127. package/dist/{chunk-PCI747N2.js → chunk-TZVQQTG4.js} +48 -19
  128. package/dist/chunk-TZVQQTG4.js.map +1 -0
  129. package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
  130. package/dist/{chunk-IK7DCC5H.js → chunk-VMGLYN42.js} +2 -2
  131. package/dist/{chunk-KM2A35EO.js → chunk-WB3LYXC5.js} +11 -7
  132. package/dist/chunk-WB3LYXC5.js.map +1 -0
  133. package/dist/{chunk-PPPZY2EU.js → chunk-WD2W4234.js} +9 -3
  134. package/dist/chunk-WD2W4234.js.map +1 -0
  135. package/dist/{chunk-NSKYFGDL.js → chunk-X4QQB7O6.js} +2 -2
  136. package/dist/{chunk-HPWVAEET.js → chunk-X6IRLNOO.js} +3 -7
  137. package/dist/chunk-X6IRLNOO.js.map +1 -0
  138. package/dist/{chunk-46GJIW5M.js → chunk-XAZOWLW4.js} +5 -5
  139. package/dist/{chunk-46GJIW5M.js.map → chunk-XAZOWLW4.js.map} +1 -1
  140. package/dist/{chunk-XPSVGJYA.js → chunk-YRMKDTKF.js} +12 -9
  141. package/dist/chunk-YRMKDTKF.js.map +1 -0
  142. package/dist/{chunk-6ZZP4EJF.js → chunk-ZJR7VG5L.js} +3 -3
  143. package/dist/{chunk-6ZZP4EJF.js.map → chunk-ZJR7VG5L.js.map} +1 -1
  144. package/dist/{chunk-2QANQKSQ.js → chunk-ZK32E74R.js} +156 -45
  145. package/dist/chunk-ZK32E74R.js.map +1 -0
  146. package/dist/{cli-OrfKXNU4.d.ts → cli-Cw729yLf.d.ts} +6 -2
  147. package/dist/cli.d.ts +3 -3
  148. package/dist/cli.js +61 -60
  149. package/dist/compounding/engine.js +3 -3
  150. package/dist/compounding/preference-consolidator.js +39 -11
  151. package/dist/compounding/preference-consolidator.js.map +1 -1
  152. package/dist/config.js +1 -1
  153. package/dist/connectors/codex-materialize-runner.js +3 -3
  154. package/dist/connectors/index.js +3 -3
  155. package/dist/consolidation-provenance-check.js +1 -1
  156. package/dist/contradiction/index.js +4 -4
  157. package/dist/conversation-index/backend.js +2 -2
  158. package/dist/conversation-index/indexer.js +1 -1
  159. package/dist/cross-namespace-budget.js +1 -1
  160. package/dist/enrichment/index.js +1 -1
  161. package/dist/entity-retrieval.js +3 -3
  162. package/dist/evals.js +1 -1
  163. package/dist/explicit-capture.d.ts +11 -1
  164. package/dist/explicit-capture.js +1 -1
  165. package/dist/extraction-judge.js +8 -1
  166. package/dist/extraction.js +2 -2
  167. package/dist/fallback-llm.d.ts +23 -6
  168. package/dist/fallback-llm.js +5 -3
  169. package/dist/{first-start-migration-GYJWIH36.js → first-start-migration-FF7YFGRP.js} +6 -6
  170. package/dist/index.d.ts +3 -3
  171. package/dist/index.js +95 -94
  172. package/dist/index.js.map +1 -1
  173. package/dist/lcm/archive.js +2 -2
  174. package/dist/lcm/engine.js +5 -5
  175. package/dist/lcm/index.js +7 -7
  176. package/dist/lcm/summarizer.js +3 -3
  177. package/dist/maintenance/memory-governance-cron.d.ts +6 -4
  178. package/dist/maintenance/memory-governance-cron.js +1 -1
  179. package/dist/maintenance/memory-governance.js +3 -3
  180. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  181. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  182. package/dist/mcp-memory-inspector-app.d.ts +2 -2
  183. package/dist/mcp-memory-inspector-app.js +1 -1
  184. package/dist/migrate/from-engram.js +1 -1
  185. package/dist/namespaces/migrate.js +16 -15
  186. package/dist/namespaces/search.js +12 -11
  187. package/dist/namespaces/storage.js +3 -3
  188. package/dist/network/webdav.d.ts +2 -0
  189. package/dist/network/webdav.js +1 -1
  190. package/dist/objective-state-writers.js +2 -2
  191. package/dist/operator-toolkit.d.ts +3 -1
  192. package/dist/operator-toolkit.js +21 -20
  193. package/dist/{orchestrator-DTRQG75J.d.ts → orchestrator-CqWOjfgl.d.ts} +46 -3
  194. package/dist/orchestrator.d.ts +1 -1
  195. package/dist/orchestrator.js +48 -45
  196. package/dist/patterns-cli.js +1 -1
  197. package/dist/qmd-recall-cache.d.ts +2 -0
  198. package/dist/qmd-recall-cache.js +1 -1
  199. package/dist/qmd.d.ts +37 -2
  200. package/dist/qmd.js +4 -1
  201. package/dist/recall-explain-renderer.js +3 -3
  202. package/dist/recall-planner-llm.d.ts +57 -0
  203. package/dist/recall-planner-llm.js +167 -0
  204. package/dist/recall-planner-llm.js.map +1 -0
  205. package/dist/recall-xray-cli.js +4 -4
  206. package/dist/recall-xray-renderer.js +3 -3
  207. package/dist/recall-xray.js +2 -2
  208. package/dist/resume-bundles.js +2 -2
  209. package/dist/retrieval-agents.js +2 -2
  210. package/dist/routing/store.js +1 -1
  211. package/dist/schemas.d.ts +22 -22
  212. package/dist/search/factory.js +11 -10
  213. package/dist/search/index.js +11 -10
  214. package/dist/search/lancedb-backend.d.ts +1 -1
  215. package/dist/search/lancedb-backend.js +3 -2
  216. package/dist/search/meilisearch-backend.d.ts +1 -1
  217. package/dist/search/meilisearch-backend.js +3 -2
  218. package/dist/search/noop-backend.d.ts +1 -1
  219. package/dist/search/noop-backend.js +1 -1
  220. package/dist/search/orama-backend.d.ts +1 -1
  221. package/dist/search/orama-backend.js +3 -2
  222. package/dist/search/port.d.ts +6 -1
  223. package/dist/search/port.js +7 -0
  224. package/dist/search/remote-backend.d.ts +1 -1
  225. package/dist/search/remote-backend.js +1 -1
  226. package/dist/semantic-consolidation.js +4 -4
  227. package/dist/semantic-rule-promotion.js +3 -3
  228. package/dist/semantic-rule-verifier.js +3 -3
  229. package/dist/session-observer-state.js +1 -1
  230. package/dist/storage.js +2 -2
  231. package/dist/summarizer.js +2 -2
  232. package/dist/temporal-index.js +1 -1
  233. package/dist/{tier-stats-SKML2OSF.js → tier-stats-3LYQ3VV5.js} +3 -3
  234. package/dist/transfer/backup.js +2 -2
  235. package/dist/transfer/capsule-export.js +2 -2
  236. package/dist/transfer/capsule-import.js +2 -2
  237. package/dist/transfer/export-sqlite.js +1 -1
  238. package/dist/transfer/types.d.ts +12 -12
  239. package/dist/types.d.ts +32 -0
  240. package/dist/types.js +1 -1
  241. package/dist/utility-learner.js +1 -1
  242. package/dist/utility-runtime.js +2 -2
  243. package/dist/verified-recall.js +3 -3
  244. package/dist/work/board.js +2 -2
  245. package/dist/work/storage.d.ts +2 -0
  246. package/dist/work/storage.js +1 -1
  247. package/package.json +1 -1
  248. package/src/access-http.ts +24 -10
  249. package/src/access-mcp.test.ts +160 -0
  250. package/src/access-mcp.ts +72 -7
  251. package/src/access-schema.ts +11 -0
  252. package/src/access-service-coding-write.test.ts +478 -0
  253. package/src/access-service.ts +237 -32
  254. package/src/active-recall.test.ts +40 -0
  255. package/src/active-recall.ts +19 -2
  256. package/src/behavior-learner.ts +5 -3
  257. package/src/buffer-session.test.ts +58 -0
  258. package/src/buffer-surprise-trigger.test.ts +4 -18
  259. package/src/buffer.ts +39 -11
  260. package/src/calibration.ts +10 -4
  261. package/src/causal-consolidation.test.ts +47 -2
  262. package/src/causal-consolidation.ts +13 -9
  263. package/src/cli.ts +19 -4
  264. package/src/compounding/engine.ts +2 -0
  265. package/src/compounding/preference-consolidator.test.ts +292 -0
  266. package/src/compounding/preference-consolidator.ts +55 -19
  267. package/src/config.test.ts +213 -0
  268. package/src/config.ts +175 -4
  269. package/src/connectors/codex-materialize-runner.ts +7 -4
  270. package/src/consolidation-provenance-check.ts +24 -5
  271. package/src/conversation-index/indexer.test.ts +22 -0
  272. package/src/conversation-index/indexer.ts +7 -3
  273. package/src/cross-namespace-budget.test.ts +44 -21
  274. package/src/cross-namespace-budget.ts +2 -2
  275. package/src/enrichment/pipeline.ts +11 -16
  276. package/src/evals.ts +1 -1
  277. package/src/explicit-capture.ts +19 -2
  278. package/src/extraction-judge-chain.test.ts +55 -0
  279. package/src/extraction-judge.ts +7 -9
  280. package/src/extraction.ts +16 -5
  281. package/src/fallback-llm.test.ts +600 -1
  282. package/src/fallback-llm.ts +91 -22
  283. package/src/maintenance/memory-governance-cron.ts +39 -29
  284. package/src/mcp-memory-inspector-app.ts +54 -12
  285. package/src/message-parts/index.ts +6 -0
  286. package/src/message-parts/message-parts.test.ts +30 -0
  287. package/src/migrate/from-engram.ts +19 -5
  288. package/src/namespaces/search.test.ts +15 -2
  289. package/src/namespaces/search.ts +1 -1
  290. package/src/network/webdav.ts +61 -21
  291. package/src/operator-toolkit.ts +6 -2
  292. package/src/orchestrator.ts +173 -20
  293. package/src/qmd-client.test.ts +85 -0
  294. package/src/qmd-recall-cache.test.ts +16 -0
  295. package/src/qmd-recall-cache.ts +7 -0
  296. package/src/qmd.test.ts +54 -0
  297. package/src/qmd.ts +119 -19
  298. package/src/recall-planner-llm.test.ts +224 -0
  299. package/src/recall-planner-llm.ts +289 -0
  300. package/src/routing/store.ts +4 -8
  301. package/src/search/factory.ts +3 -0
  302. package/src/search/lancedb-backend.ts +15 -3
  303. package/src/search/meilisearch-backend.ts +70 -7
  304. package/src/search/noop-backend.ts +5 -1
  305. package/src/search/orama-backend.ts +15 -3
  306. package/src/search/port.ts +15 -0
  307. package/src/search/remote-backend.ts +5 -1
  308. package/src/session-observer-state.ts +1 -1
  309. package/src/summarizer.ts +3 -3
  310. package/src/temporal-index.test.ts +18 -0
  311. package/src/temporal-index.ts +45 -0
  312. package/src/training-export/cli-date-validation.test.ts +36 -0
  313. package/src/training-export/date-parse.ts +21 -2
  314. package/src/transfer/export-sqlite.ts +3 -0
  315. package/src/types.ts +35 -0
  316. package/src/utility-learner.ts +1 -0
  317. package/src/work/storage.ts +23 -0
  318. package/dist/chunk-2QANQKSQ.js.map +0 -1
  319. package/dist/chunk-5RPTH6AU.js.map +0 -1
  320. package/dist/chunk-AJA46VX5.js.map +0 -1
  321. package/dist/chunk-C4SQJZAF.js.map +0 -1
  322. package/dist/chunk-CHCA44C3.js.map +0 -1
  323. package/dist/chunk-CSKLPDN6.js.map +0 -1
  324. package/dist/chunk-DLJ4IR6M.js.map +0 -1
  325. package/dist/chunk-EAZGEEG2.js.map +0 -1
  326. package/dist/chunk-EUML3N6B.js.map +0 -1
  327. package/dist/chunk-EVZFIAPG.js.map +0 -1
  328. package/dist/chunk-G3Z3QEF5.js.map +0 -1
  329. package/dist/chunk-GMAG2HS4.js.map +0 -1
  330. package/dist/chunk-HENLZHIT.js.map +0 -1
  331. package/dist/chunk-HINSGUA7.js.map +0 -1
  332. package/dist/chunk-HJNQQICM.js.map +0 -1
  333. package/dist/chunk-HPWVAEET.js.map +0 -1
  334. package/dist/chunk-IOTENEVL.js.map +0 -1
  335. package/dist/chunk-IP73YCZP.js.map +0 -1
  336. package/dist/chunk-JHMFYY7L.js.map +0 -1
  337. package/dist/chunk-JNANKJLN.js.map +0 -1
  338. package/dist/chunk-KGK2QKWL.js.map +0 -1
  339. package/dist/chunk-KM2A35EO.js.map +0 -1
  340. package/dist/chunk-KVEVLBKC.js.map +0 -1
  341. package/dist/chunk-L227SKTB.js.map +0 -1
  342. package/dist/chunk-LZ3VEOU5.js.map +0 -1
  343. package/dist/chunk-NOMEVTUD.js.map +0 -1
  344. package/dist/chunk-NZPF2SYV.js.map +0 -1
  345. package/dist/chunk-PCI747N2.js.map +0 -1
  346. package/dist/chunk-PPPZY2EU.js.map +0 -1
  347. package/dist/chunk-TH67Q46T.js.map +0 -1
  348. package/dist/chunk-UWY7GIVS.js.map +0 -1
  349. package/dist/chunk-VJXSUAO7.js.map +0 -1
  350. package/dist/chunk-XKIQZXUB.js.map +0 -1
  351. package/dist/chunk-XPSVGJYA.js.map +0 -1
  352. package/dist/chunk-XSWKORGM.js.map +0 -1
  353. package/dist/chunk-YCN4BVDK.js.map +0 -1
  354. package/dist/chunk-ZDTVJXIP.js.map +0 -1
  355. /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
  356. /package/dist/{chunk-AU7Q3LSC.js.map → chunk-2QSZNTDO.js.map} +0 -0
  357. /package/dist/{chunk-HSVJGWYS.js.map → chunk-2ROPI5OE.js.map} +0 -0
  358. /package/dist/{chunk-CF3ZF2YU.js.map → chunk-3QSU4NFF.js.map} +0 -0
  359. /package/dist/{chunk-OI27U2HT.js.map → chunk-5BTCT236.js.map} +0 -0
  360. /package/dist/{chunk-CO7ZO4TU.js.map → chunk-5VDJMYTF.js.map} +0 -0
  361. /package/dist/{chunk-YFS5OEKO.js.map → chunk-7MLB4NCL.js.map} +0 -0
  362. /package/dist/{chunk-557IAFPD.js.map → chunk-APRRL26Q.js.map} +0 -0
  363. /package/dist/{chunk-QDDHYAKV.js.map → chunk-AZDOWD2L.js.map} +0 -0
  364. /package/dist/{chunk-MLT75J5S.js.map → chunk-B6SU7YSE.js.map} +0 -0
  365. /package/dist/{chunk-FXKPZ3H6.js.map → chunk-BPSGLMQ4.js.map} +0 -0
  366. /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
  367. /package/dist/{chunk-IK34DVAC.js.map → chunk-CIOMS6DI.js.map} +0 -0
  368. /package/dist/{chunk-7DZRO2DC.js.map → chunk-DEPRLVLK.js.map} +0 -0
  369. /package/dist/{chunk-DHGSZ3UD.js.map → chunk-DGNQRNLL.js.map} +0 -0
  370. /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
  371. /package/dist/{chunk-ETUPBUHB.js.map → chunk-GDASG7NC.js.map} +0 -0
  372. /package/dist/{chunk-4HP7HIE3.js.map → chunk-HP5FMB6L.js.map} +0 -0
  373. /package/dist/{chunk-DOX2CG6Y.js.map → chunk-IEUU7O4F.js.map} +0 -0
  374. /package/dist/{chunk-WSGF57U2.js.map → chunk-JQDZQ4TB.js.map} +0 -0
  375. /package/dist/{chunk-W7L6HXUC.js.map → chunk-LXOM6IQU.js.map} +0 -0
  376. /package/dist/{chunk-6JGNHWCI.js.map → chunk-OBIRVF36.js.map} +0 -0
  377. /package/dist/{chunk-GUPISBV2.js.map → chunk-PP2JH3GP.js.map} +0 -0
  378. /package/dist/{chunk-OXJBNGBK.js.map → chunk-PSUB67YB.js.map} +0 -0
  379. /package/dist/{chunk-KIB7SDIJ.js.map → chunk-Q6YIJGXJ.js.map} +0 -0
  380. /package/dist/{chunk-ZT3EGNLR.js.map → chunk-QPD426WT.js.map} +0 -0
  381. /package/dist/{chunk-RLV3PQGH.js.map → chunk-QVO4YOB7.js.map} +0 -0
  382. /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
  383. /package/dist/{chunk-IK7DCC5H.js.map → chunk-VMGLYN42.js.map} +0 -0
  384. /package/dist/{chunk-NSKYFGDL.js.map → chunk-X4QQB7O6.js.map} +0 -0
  385. /package/dist/{first-start-migration-GYJWIH36.js.map → first-start-migration-FF7YFGRP.js.map} +0 -0
  386. /package/dist/{tier-stats-SKML2OSF.js.map → tier-stats-3LYQ3VV5.js.map} +0 -0
@@ -322,6 +322,12 @@ function removePathFromSet(record: Record<string, string[]>, key: string, p: str
322
322
  }
323
323
  }
324
324
 
325
+ function removePathFromAllSets(record: Record<string, string[]>, p: string): void {
326
+ for (const key of Object.keys(record)) {
327
+ removePathFromSet(record, key, p);
328
+ }
329
+ }
330
+
325
331
  function normalizeTagSegment(segment: string): string {
326
332
  return segment
327
333
  .trim()
@@ -499,6 +505,41 @@ function removeTagGraphEntry(index: TagIndex, rawTag: string, memoryPath: string
499
505
  node.paths = node.paths.filter((value) => value !== memoryPath);
500
506
  if (node.paths.length === 0) {
501
507
  delete index.tags[canonical];
508
+ pruneTagAliases(index);
509
+ }
510
+ }
511
+
512
+ function removePathFromAllTagEntries(index: TagIndex, memoryPath: string): void {
513
+ for (const [canonical, nodeOrPaths] of Object.entries(index.tags)) {
514
+ if (Array.isArray(nodeOrPaths)) {
515
+ const paths = nodeOrPaths.filter((value) => value !== memoryPath);
516
+ if (paths.length === 0) {
517
+ delete index.tags[canonical];
518
+ } else {
519
+ index.tags[canonical] = paths;
520
+ }
521
+ continue;
522
+ }
523
+
524
+ nodeOrPaths.paths = nodeOrPaths.paths.filter((value) => value !== memoryPath);
525
+ if (nodeOrPaths.paths.length === 0) {
526
+ delete index.tags[canonical];
527
+ }
528
+ }
529
+ pruneTagAliases(index);
530
+ }
531
+
532
+ function pruneTagAliases(index: TagIndex): void {
533
+ if (!index.aliases) return;
534
+ for (const [alias, canonicals] of Object.entries(index.aliases)) {
535
+ const filtered = [...new Set(canonicals.map(normalizeCanonicalTag))].filter(
536
+ (canonical) => canonical.length > 0 && index.tags[canonical] !== undefined
537
+ );
538
+ if (filtered.length === 0) {
539
+ delete index.aliases[alias];
540
+ } else {
541
+ index.aliases[alias] = filtered;
542
+ }
502
543
  }
503
544
  }
504
545
 
@@ -555,10 +596,12 @@ export function indexMemory(memoryDir: string, memoryPath: string, createdAt: st
555
596
 
556
597
  const dateKey = isoDateFromTimestamp(createdAt);
557
598
  updateTemporalIndex(memoryDir, (index) => {
599
+ removePathFromAllSets(index.dates, memoryPath);
558
600
  addPathToSet(index.dates, dateKey, memoryPath);
559
601
  });
560
602
 
561
603
  updateTagIndex(memoryDir, (index) => {
604
+ removePathFromAllTagEntries(index, memoryPath);
562
605
  for (const tag of tags) {
563
606
  if (tag && typeof tag === "string") {
564
607
  addTagGraphEntry(index, tag, memoryPath);
@@ -645,12 +688,14 @@ export function indexMemoriesBatch(
645
688
  updateTemporalIndex(memoryDir, (index) => {
646
689
  for (const entry of entries) {
647
690
  const dateKey = isoDateFromTimestamp(entry.createdAt);
691
+ removePathFromAllSets(index.dates, entry.path);
648
692
  addPathToSet(index.dates, dateKey, entry.path);
649
693
  }
650
694
  });
651
695
 
652
696
  updateTagIndex(memoryDir, (index) => {
653
697
  for (const entry of entries) {
698
+ removePathFromAllTagEntries(index, entry.path);
654
699
  for (const tag of entry.tags) {
655
700
  if (tag && typeof tag === "string") {
656
701
  addTagGraphEntry(index, tag, entry.path);
@@ -135,6 +135,42 @@ describe("parseStrictCliDate", () => {
135
135
  assert.equal(d.getUTCHours(), 9);
136
136
  });
137
137
 
138
+ it("accepts ISO datetime with ordinary negative timezone offset", () => {
139
+ const d = parseStrictCliDate("2026-01-15T23:00:00-08:00", "--since");
140
+ // 2026-01-15T23:00:00-08:00 => 2026-01-16T07:00:00Z
141
+ assert.equal(d.getUTCFullYear(), 2026);
142
+ assert.equal(d.getUTCDate(), 16);
143
+ assert.equal(d.getUTCHours(), 7);
144
+ });
145
+
146
+ it("rejects timezone offset hour beyond UTC+14", () => {
147
+ assert.throws(
148
+ () => parseStrictCliDate("2024-01-15T10:00:00+15:00", "--since"),
149
+ /timezone offset out of range/,
150
+ );
151
+ });
152
+
153
+ it("rejects timezone offset minute beyond 59", () => {
154
+ assert.throws(
155
+ () => parseStrictCliDate("2024-01-15T10:00:00+05:61", "--since"),
156
+ /timezone offset out of range/,
157
+ );
158
+ });
159
+
160
+ it("rejects timezone offset minutes at the UTC+14 boundary", () => {
161
+ assert.throws(
162
+ () => parseStrictCliDate("2024-01-15T10:00:00+14:01", "--until"),
163
+ /timezone offset out of range/,
164
+ );
165
+ });
166
+
167
+ it("rejects timezone offset minutes at the UTC-14 boundary", () => {
168
+ assert.throws(
169
+ () => parseStrictCliDate("2024-01-15T10:00:00-14:01", "--until"),
170
+ /timezone offset out of range/,
171
+ );
172
+ });
173
+
138
174
  it("still rejects overflow dates in UTC form (Z suffix)", () => {
139
175
  assert.throws(
140
176
  () => parseStrictCliDate("2026-02-31T00:00:00Z", "--since"),
@@ -10,6 +10,7 @@
10
10
  * - Calendar overflows (Feb 30, Feb 29 in non-leap years, Apr 31, etc.)
11
11
  * regardless of timezone suffix
12
12
  * - Out-of-range time components (hour >= 24, minute >= 60, second >= 60)
13
+ * - Out-of-range timezone offsets (beyond ±14:00, or offset minute >= 60)
13
14
  *
14
15
  * Calendar overflow is validated structurally on the Y-M-D components, so
15
16
  * results are independent of the host's local timezone.
@@ -65,7 +66,7 @@ export function parseStrictCliDate(value: string, flagName: string): Date {
65
66
  // 1. Shape check: must begin YYYY-MM-DD and use ISO 8601 structure.
66
67
  // This rejects "12/25/2026", "December 25, 2026", RFC 2822, etc.
67
68
  const shape =
68
- /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,9}))?)?(Z|[+-]\d{2}:\d{2})?)?$/;
69
+ /^(\d{4})-(\d{2})-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,9}))?)?(?:Z|([+-])(\d{2}):(\d{2}))?)?$/;
69
70
  const match = value.match(shape);
70
71
  if (!match) {
71
72
  throw new Error(
@@ -103,7 +104,25 @@ export function parseStrictCliDate(value: string, flagName: string): Date {
103
104
  }
104
105
  }
105
106
 
106
- // 4. Finally parse via Date for the actual timestamp value. At this point
107
+ // 4. Timezone offset validation.
108
+ // Date accepts offset hours beyond the real-world UTC offset range and
109
+ // normalizes impossible offsets into a shifted instant. Reject those
110
+ // before constructing the Date so the CLI cannot silently apply them.
111
+ if (match[8] !== undefined) {
112
+ const offsetHour = Number(match[9]);
113
+ const offsetMinute = Number(match[10]);
114
+ if (
115
+ offsetHour > 14 ||
116
+ offsetMinute > 59 ||
117
+ (offsetHour === 14 && offsetMinute !== 0)
118
+ ) {
119
+ throw new Error(
120
+ `Invalid ${flagName} value "${value}": timezone offset out of range.`,
121
+ );
122
+ }
123
+ }
124
+
125
+ // 5. Finally parse via Date for the actual timestamp value. At this point
107
126
  // we've already validated structure and calendar correctness, so any
108
127
  // remaining NaN (extremely unlikely) still fails closed.
109
128
  const d = new Date(value);
@@ -1,4 +1,5 @@
1
1
  import path from "node:path";
2
+ import { mkdir } from "node:fs/promises";
2
3
  import { SQLITE_SCHEMA_VERSION, SQLITE_TABLES_SQL } from "./sqlite-schema.js";
3
4
  import { listFilesRecursive, readUtf8FileStrict, toPosixRelPath } from "./fs-utils.js";
4
5
  import { openBetterSqlite3 } from "../runtime/better-sqlite.js";
@@ -26,6 +27,8 @@ export async function exportSqlite(opts: ExportSqliteOptions): Promise<void> {
26
27
  rows.push({ rel: relPosix, bytes, sha256, content });
27
28
  }
28
29
 
30
+ await mkdir(path.dirname(outAbs), { recursive: true });
31
+
29
32
  const db = openBetterSqlite3(outAbs);
30
33
  try {
31
34
  db.exec("PRAGMA journal_mode=WAL;");
package/src/types.ts CHANGED
@@ -576,6 +576,12 @@ export interface PluginConfig {
576
576
  qmdChunkStrategy: "auto" | "regex";
577
577
  qmdCandidateLimit?: number;
578
578
  qmdQueryRerankEnabled: boolean;
579
+ // Daemon search plan; "hybrid" (default) = lex+vec+hyde. Issue #1335.
580
+ qmdSearchStrategy: "hybrid" | "lex-vec" | "lex";
581
+ // Subprocess fallback command; "query" (default) keeps LLM expansion. Issue #1335.
582
+ qmdSubprocessStrategy: "query" | "search";
583
+ // Per-call daemon search timeout in ms; default 8000. Issue #1335.
584
+ qmdDaemonTimeoutMs: number;
579
585
  qmdIndexName?: string;
580
586
  qmdForceCpu: boolean;
581
587
  qmdGpuBackend?: "auto" | "metal" | "cuda" | "vulkan" | "false";
@@ -1262,6 +1268,18 @@ export interface PluginConfig {
1262
1268
  modelSource: "plugin" | "gateway";
1263
1269
  gatewayAgentId: string;
1264
1270
  fastGatewayAgentId: string;
1271
+ /**
1272
+ * Optional task-specific model chain for Remnic's background LLM work —
1273
+ * extraction, the extraction judge, fact/profile/identity consolidation,
1274
+ * summarization, semantic consolidation, calibration, and causal
1275
+ * consolidation. When set, this chain is resolved through gateway providers
1276
+ * instead of using gatewayAgentId or agents.defaults.model. All task paths
1277
+ * route through the shared `gatewayTaskChainOptions` helper.
1278
+ *
1279
+ * Only takes effect when `modelSource: "gateway"`; ignored (with a startup
1280
+ * warning) under `modelSource: "plugin"`. See issue #1365 / PR #1370.
1281
+ */
1282
+ taskModelChain?: AgentPersonaModelConfig;
1265
1283
 
1266
1284
  // v3.0 Multi-agent memory (namespaces)
1267
1285
  namespacesEnabled: boolean;
@@ -1453,6 +1471,15 @@ export interface PluginConfig {
1453
1471
  behaviorLoopProtectedParams: string[];
1454
1472
  // v8.0 Phase 1: recall planner + intent routing + verbatim artifacts
1455
1473
  recallPlannerEnabled: boolean;
1474
+ /**
1475
+ * Opt-in gate for LLM-based recall planning (issue #1367 / Option C). When
1476
+ * false (the default) recall mode is decided by the regex heuristic
1477
+ * `planRecallMode()`. When true, the planner consults an LLM (routed through
1478
+ * the gateway/fallback chain — provider-agnostic) and falls back to the
1479
+ * heuristic on timeout/error/unavailable. `recallPlannerShadowMode` runs the
1480
+ * LLM for telemetry only without changing the effective mode.
1481
+ */
1482
+ recallPlannerLlmEnabled: boolean;
1456
1483
  recallPlannerModel: string;
1457
1484
  recallPlannerTimeoutMs: number;
1458
1485
  recallPlannerUseResponsesApi: boolean;
@@ -1732,6 +1759,14 @@ export interface PluginConfig {
1732
1759
  /** Base path for the filesystem backend. Required when backendType is "filesystem". */
1733
1760
  binaryLifecycleBackendPath: string;
1734
1761
 
1762
+ /**
1763
+ * Advertise legacy `engram_*` / `engram.*` MCP tool aliases alongside the
1764
+ * canonical `remnic_*` names (issue #1427). Default true for backward
1765
+ * compatibility. Set false to halve the advertised MCP `tools/list` surface;
1766
+ * tools stay callable under both names regardless. Also settable via
1767
+ * `REMNIC_EMIT_LEGACY_TOOLS` (falls back to `ENGRAM_EMIT_LEGACY_TOOLS`).
1768
+ */
1769
+ emitLegacyTools: boolean;
1735
1770
  // Codex citation parity (issue #379)
1736
1771
  /** Enable oai-mem-citation blocks in recall responses. Default false. */
1737
1772
  citationsEnabled: boolean;
@@ -293,6 +293,7 @@ export async function learnUtilityPromotionWeights(options: {
293
293
  };
294
294
 
295
295
  if (weights.length === 0) {
296
+ await writeUtilityLearningSnapshot(statePath, snapshot);
296
297
  return {
297
298
  applied: false,
298
299
  reason: "insufficient_events",
@@ -23,6 +23,7 @@ const TASK_TRANSITIONS: Record<WorkTaskStatus, Set<WorkTaskStatus>> = {
23
23
  };
24
24
 
25
25
  const PROJECT_MUTATION_CHAINS = new Map<string, Promise<unknown>>();
26
+ const TASK_MUTATION_CHAINS = new Map<string, Promise<unknown>>();
26
27
 
27
28
  function serializeFrontmatter(values: object): string {
28
29
  const lines = Object.entries(values).map(([k, v]) => `${k}: ${JSON.stringify(v)}`);
@@ -179,6 +180,19 @@ export class WorkStorage {
179
180
  return run;
180
181
  }
181
182
 
183
+ private async enqueueTaskMutation<T>(taskId: string, op: () => Promise<T>): Promise<T> {
184
+ const mutationKey = this.taskPath(taskId);
185
+ const previous = TASK_MUTATION_CHAINS.get(mutationKey) ?? Promise.resolve();
186
+ const run = previous.catch(() => undefined).then(op);
187
+ const cleanup = run.then(() => undefined, () => undefined).then(() => {
188
+ if (TASK_MUTATION_CHAINS.get(mutationKey) === cleanup) {
189
+ TASK_MUTATION_CHAINS.delete(mutationKey);
190
+ }
191
+ });
192
+ TASK_MUTATION_CHAINS.set(mutationKey, cleanup);
193
+ return run;
194
+ }
195
+
182
196
  private parseTask(raw: string): WorkTask | null {
183
197
  const parsed = parseFrontmatter(raw);
184
198
  if (!parsed) return null;
@@ -293,6 +307,15 @@ export class WorkStorage {
293
307
  patch: UpdateWorkTaskInput,
294
308
  now = new Date(),
295
309
  options?: { skipStatusTransitionValidation?: boolean },
310
+ ): Promise<WorkTask | null> {
311
+ return this.enqueueTaskMutation(id, async () => this.updateTaskUnlocked(id, patch, now, options));
312
+ }
313
+
314
+ private async updateTaskUnlocked(
315
+ id: string,
316
+ patch: UpdateWorkTaskInput,
317
+ now = new Date(),
318
+ options?: { skipStatusTransitionValidation?: boolean },
296
319
  ): Promise<WorkTask | null> {
297
320
  const existing = await this.getTask(id);
298
321
  if (!existing) return null;