@remnic/core 9.3.612 → 9.3.614
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.
- package/dist/access-cli.js +58 -57
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +4 -2
- package/dist/access-http.js +22 -22
- package/dist/access-mcp.d.ts +9 -2
- package/dist/access-mcp.js +19 -19
- package/dist/access-schema.d.ts +12 -12
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-D2J9dh_9.d.ts → access-service-DGG_2xPK.d.ts} +1 -1
- package/dist/access-service.d.ts +2 -2
- package/dist/access-service.js +16 -16
- package/dist/active-recall.js +20 -3
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/behavior-learner.js +2 -3
- package/dist/behavior-learner.js.map +1 -1
- package/dist/bootstrap.d.ts +1 -1
- package/dist/briefing.js +3 -3
- package/dist/buffer.d.ts +1 -1
- package/dist/buffer.js +1 -1
- package/dist/calibration.d.ts +5 -2
- package/dist/calibration.js +7 -5
- package/dist/calibration.js.map +1 -1
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/causal-consolidation.d.ts +8 -2
- package/dist/causal-consolidation.js +13 -11
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/{chunk-3BP57I6J.js → chunk-2F6NP3NT.js} +2 -1
- package/dist/{chunk-3BP57I6J.js.map → chunk-2F6NP3NT.js.map} +1 -1
- package/dist/{chunk-AU7Q3LSC.js → chunk-2QSZNTDO.js} +4 -4
- package/dist/{chunk-HSVJGWYS.js → chunk-2ROPI5OE.js} +2 -2
- package/dist/{chunk-C4SQJZAF.js → chunk-2SGJY2UY.js} +6 -3
- package/dist/chunk-2SGJY2UY.js.map +1 -0
- package/dist/{chunk-ZDTVJXIP.js → chunk-3MAONBX3.js} +13 -5
- package/dist/chunk-3MAONBX3.js.map +1 -0
- package/dist/{chunk-G3Z3QEF5.js → chunk-3PY7VHV7.js} +2 -2
- package/dist/chunk-3PY7VHV7.js.map +1 -0
- package/dist/{chunk-CF3ZF2YU.js → chunk-3QSU4NFF.js} +3 -3
- package/dist/{chunk-AJA46VX5.js → chunk-3T74IZB3.js} +11 -2
- package/dist/chunk-3T74IZB3.js.map +1 -0
- package/dist/{chunk-KVEVLBKC.js → chunk-4HFJQCJZ.js} +13 -8
- package/dist/chunk-4HFJQCJZ.js.map +1 -0
- package/dist/{chunk-KGK2QKWL.js → chunk-4R4KTDIE.js} +1 -1
- package/dist/chunk-4R4KTDIE.js.map +1 -0
- package/dist/{chunk-OI27U2HT.js → chunk-5BTCT236.js} +2 -2
- package/dist/{chunk-CO7ZO4TU.js → chunk-5VDJMYTF.js} +2 -2
- package/dist/{chunk-BFBF3XEF.js → chunk-6BDVBBBY.js} +33 -25
- package/dist/{chunk-BFBF3XEF.js.map → chunk-6BDVBBBY.js.map} +1 -1
- package/dist/{chunk-EAZGEEG2.js → chunk-6L46YAEZ.js} +45 -9
- package/dist/chunk-6L46YAEZ.js.map +1 -0
- package/dist/{chunk-YFS5OEKO.js → chunk-7MLB4NCL.js} +2 -2
- package/dist/{chunk-IOTENEVL.js → chunk-7YQFWOF7.js} +57 -50
- package/dist/chunk-7YQFWOF7.js.map +1 -0
- package/dist/{chunk-2QANQKSQ.js → chunk-ADNZVFXG.js} +15 -15
- package/dist/{chunk-LZ3VEOU5.js → chunk-AL4RAJL5.js} +22 -5
- package/dist/chunk-AL4RAJL5.js.map +1 -0
- package/dist/{chunk-557IAFPD.js → chunk-APRRL26Q.js} +2 -2
- package/dist/{chunk-QDDHYAKV.js → chunk-AZDOWD2L.js} +2 -2
- package/dist/{chunk-TH67Q46T.js → chunk-B6FDZPCF.js} +17 -9
- package/dist/chunk-B6FDZPCF.js.map +1 -0
- package/dist/{chunk-MLT75J5S.js → chunk-B6SU7YSE.js} +3 -3
- package/dist/{chunk-FXKPZ3H6.js → chunk-BPSGLMQ4.js} +2 -2
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-NOMEVTUD.js → chunk-C6C7XVKG.js} +5 -4
- package/dist/chunk-C6C7XVKG.js.map +1 -0
- package/dist/{chunk-XKIQZXUB.js → chunk-CI7RKSRE.js} +7 -1
- package/dist/chunk-CI7RKSRE.js.map +1 -0
- package/dist/{chunk-IK34DVAC.js → chunk-CIOMS6DI.js} +2 -2
- package/dist/{chunk-2I5JGH3M.js → chunk-CYEPCZN5.js} +2 -2
- package/dist/{chunk-2I5JGH3M.js.map → chunk-CYEPCZN5.js.map} +1 -1
- package/dist/{chunk-JHMFYY7L.js → chunk-DCGT4FPP.js} +13 -5
- package/dist/chunk-DCGT4FPP.js.map +1 -0
- package/dist/{chunk-7DZRO2DC.js → chunk-DEPRLVLK.js} +2 -2
- package/dist/{chunk-CSKLPDN6.js → chunk-DEVUWMME.js} +52 -19
- package/dist/chunk-DEVUWMME.js.map +1 -0
- package/dist/{chunk-DHGSZ3UD.js → chunk-DGNQRNLL.js} +2 -2
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/chunk-FAV25DUZ.js +12 -0
- package/dist/chunk-FAV25DUZ.js.map +1 -0
- package/dist/{chunk-ETUPBUHB.js → chunk-GDASG7NC.js} +2 -2
- package/dist/{chunk-L227SKTB.js → chunk-GDB4J2H3.js} +17 -1
- package/dist/chunk-GDB4J2H3.js.map +1 -0
- package/dist/{chunk-IP73YCZP.js → chunk-GLPBYIXN.js} +4 -2
- package/dist/chunk-GLPBYIXN.js.map +1 -0
- package/dist/{chunk-4HP7HIE3.js → chunk-HP5FMB6L.js} +2 -2
- package/dist/{chunk-EVZFIAPG.js → chunk-IBTZEBUD.js} +23 -10
- package/dist/chunk-IBTZEBUD.js.map +1 -0
- package/dist/{chunk-DOX2CG6Y.js → chunk-IEUU7O4F.js} +2 -2
- package/dist/{chunk-JNANKJLN.js → chunk-JOASJWQR.js} +2 -2
- package/dist/chunk-JOASJWQR.js.map +1 -0
- package/dist/{chunk-WSGF57U2.js → chunk-JQDZQ4TB.js} +2 -2
- package/dist/{chunk-HINSGUA7.js → chunk-KBL3JJR6.js} +9 -13
- package/dist/chunk-KBL3JJR6.js.map +1 -0
- package/dist/{chunk-W7L6HXUC.js → chunk-LXOM6IQU.js} +2 -2
- package/dist/{chunk-G6R5UD3Q.js → chunk-MGN7VHWQ.js} +42 -1
- package/dist/{chunk-G6R5UD3Q.js.map → chunk-MGN7VHWQ.js.map} +1 -1
- package/dist/{chunk-DLJ4IR6M.js → chunk-MHQC2WU2.js} +2 -2
- package/dist/chunk-MHQC2WU2.js.map +1 -0
- package/dist/{chunk-6JGNHWCI.js → chunk-OBIRVF36.js} +3 -3
- package/dist/{chunk-CHCA44C3.js → chunk-ODPLEWB6.js} +3 -3
- package/dist/chunk-ODPLEWB6.js.map +1 -0
- package/dist/{chunk-HENLZHIT.js → chunk-OIF36KGD.js} +7 -4
- package/dist/chunk-OIF36KGD.js.map +1 -0
- package/dist/{chunk-GUPISBV2.js → chunk-PP2JH3GP.js} +2 -2
- package/dist/{chunk-OXJBNGBK.js → chunk-PSUB67YB.js} +2 -2
- package/dist/{chunk-UWY7GIVS.js → chunk-PYIFUBRK.js} +45 -13
- package/dist/chunk-PYIFUBRK.js.map +1 -0
- package/dist/{chunk-KIB7SDIJ.js → chunk-Q6YIJGXJ.js} +2 -2
- package/dist/{chunk-PPPZY2EU.js → chunk-QEMCQFDW.js} +2 -2
- package/dist/{chunk-ZT3EGNLR.js → chunk-QPD426WT.js} +2 -2
- package/dist/{chunk-RLV3PQGH.js → chunk-QVO4YOB7.js} +6 -6
- package/dist/{chunk-GMAG2HS4.js → chunk-RG3LBSGH.js} +46 -9
- package/dist/chunk-RG3LBSGH.js.map +1 -0
- package/dist/{chunk-XSWKORGM.js → chunk-S53OYO3F.js} +3 -1
- package/dist/chunk-S53OYO3F.js.map +1 -0
- package/dist/{chunk-YCN4BVDK.js → chunk-SCPFRKIT.js} +4 -2
- package/dist/chunk-SCPFRKIT.js.map +1 -0
- package/dist/{chunk-HJNQQICM.js → chunk-T5XWMMU2.js} +107 -50
- package/dist/chunk-T5XWMMU2.js.map +1 -0
- package/dist/{chunk-NZPF2SYV.js → chunk-T7N6KQGS.js} +138 -5
- package/dist/chunk-T7N6KQGS.js.map +1 -0
- package/dist/{chunk-VJXSUAO7.js → chunk-TNOWU6RP.js} +13 -10
- package/dist/chunk-TNOWU6RP.js.map +1 -0
- package/dist/{chunk-PCI747N2.js → chunk-TZVQQTG4.js} +48 -19
- package/dist/chunk-TZVQQTG4.js.map +1 -0
- package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-IK7DCC5H.js → chunk-VMGLYN42.js} +2 -2
- package/dist/{chunk-5RPTH6AU.js → chunk-VPGUMLBA.js} +8 -7
- package/dist/chunk-VPGUMLBA.js.map +1 -0
- package/dist/{chunk-KM2A35EO.js → chunk-WB3LYXC5.js} +11 -7
- package/dist/chunk-WB3LYXC5.js.map +1 -0
- package/dist/{chunk-NSKYFGDL.js → chunk-X4QQB7O6.js} +2 -2
- package/dist/{chunk-HPWVAEET.js → chunk-X6IRLNOO.js} +3 -7
- package/dist/chunk-X6IRLNOO.js.map +1 -0
- package/dist/{chunk-46GJIW5M.js → chunk-XAZOWLW4.js} +5 -5
- package/dist/{chunk-46GJIW5M.js.map → chunk-XAZOWLW4.js.map} +1 -1
- package/dist/{chunk-XPSVGJYA.js → chunk-YRMKDTKF.js} +12 -9
- package/dist/chunk-YRMKDTKF.js.map +1 -0
- package/dist/{chunk-6ZZP4EJF.js → chunk-ZJR7VG5L.js} +3 -3
- package/dist/{chunk-6ZZP4EJF.js.map → chunk-ZJR7VG5L.js.map} +1 -1
- package/dist/{cli-OrfKXNU4.d.ts → cli-DWeu7eTY.d.ts} +6 -2
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +60 -59
- package/dist/compounding/engine.js +3 -3
- package/dist/compounding/preference-consolidator.js +39 -11
- package/dist/compounding/preference-consolidator.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.js +3 -3
- package/dist/connectors/index.js +3 -3
- package/dist/consolidation-provenance-check.js +1 -1
- package/dist/contradiction/index.js +4 -4
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/indexer.js +1 -1
- package/dist/cross-namespace-budget.js +1 -1
- package/dist/enrichment/index.js +1 -1
- package/dist/entity-retrieval.js +3 -3
- package/dist/evals.js +1 -1
- package/dist/explicit-capture.d.ts +1 -1
- package/dist/extraction-judge.js +8 -1
- package/dist/extraction.js +2 -2
- package/dist/fallback-llm.d.ts +23 -6
- package/dist/fallback-llm.js +5 -3
- package/dist/{first-start-migration-GYJWIH36.js → first-start-migration-FF7YFGRP.js} +6 -6
- package/dist/index.d.ts +3 -3
- package/dist/index.js +94 -93
- package/dist/index.js.map +1 -1
- package/dist/lcm/archive.js +2 -2
- package/dist/lcm/engine.js +5 -5
- package/dist/lcm/index.js +7 -7
- package/dist/lcm/summarizer.js +3 -3
- package/dist/maintenance/memory-governance-cron.d.ts +6 -4
- package/dist/maintenance/memory-governance-cron.js +1 -1
- package/dist/maintenance/memory-governance.js +3 -3
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
- package/dist/maintenance/rebuild-memory-projection.js +4 -4
- package/dist/mcp-memory-inspector-app.d.ts +2 -2
- package/dist/mcp-memory-inspector-app.js +1 -1
- package/dist/migrate/from-engram.js +1 -1
- package/dist/namespaces/migrate.js +16 -15
- package/dist/namespaces/search.js +12 -11
- package/dist/namespaces/storage.js +3 -3
- package/dist/network/webdav.d.ts +2 -0
- package/dist/network/webdav.js +1 -1
- package/dist/objective-state-writers.js +2 -2
- package/dist/operator-toolkit.d.ts +3 -1
- package/dist/operator-toolkit.js +21 -20
- package/dist/{orchestrator-DTRQG75J.d.ts → orchestrator-CqWOjfgl.d.ts} +46 -3
- package/dist/orchestrator.d.ts +1 -1
- package/dist/orchestrator.js +47 -44
- package/dist/patterns-cli.js +1 -1
- package/dist/qmd-recall-cache.d.ts +2 -0
- package/dist/qmd-recall-cache.js +1 -1
- package/dist/qmd.d.ts +37 -2
- package/dist/qmd.js +4 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-planner-llm.d.ts +57 -0
- package/dist/recall-planner-llm.js +167 -0
- package/dist/recall-planner-llm.js.map +1 -0
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.js +2 -2
- package/dist/routing/store.js +1 -1
- package/dist/search/factory.js +11 -10
- package/dist/search/index.js +11 -10
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/lancedb-backend.js +3 -2
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.js +3 -2
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/noop-backend.js +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/orama-backend.js +3 -2
- package/dist/search/port.d.ts +6 -1
- package/dist/search/port.js +7 -0
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/search/remote-backend.js +1 -1
- package/dist/semantic-consolidation.js +4 -4
- package/dist/semantic-rule-promotion.js +3 -3
- package/dist/semantic-rule-verifier.js +3 -3
- package/dist/session-observer-state.js +1 -1
- package/dist/storage.js +2 -2
- package/dist/summarizer.js +2 -2
- package/dist/temporal-index.js +1 -1
- package/dist/{tier-stats-SKML2OSF.js → tier-stats-3LYQ3VV5.js} +3 -3
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-sqlite.js +1 -1
- package/dist/types.d.ts +32 -0
- package/dist/types.js +1 -1
- package/dist/utility-learner.js +1 -1
- package/dist/utility-runtime.js +2 -2
- package/dist/verified-recall.js +3 -3
- package/dist/work/board.js +2 -2
- package/dist/work/storage.d.ts +2 -0
- package/dist/work/storage.js +1 -1
- package/package.json +1 -1
- package/src/access-http.ts +3 -0
- package/src/access-mcp.test.ts +51 -0
- package/src/access-mcp.ts +26 -5
- package/src/active-recall.test.ts +40 -0
- package/src/active-recall.ts +19 -2
- package/src/behavior-learner.ts +5 -3
- package/src/buffer-session.test.ts +58 -0
- package/src/buffer-surprise-trigger.test.ts +4 -18
- package/src/buffer.ts +39 -11
- package/src/calibration.ts +10 -4
- package/src/causal-consolidation.test.ts +47 -2
- package/src/causal-consolidation.ts +13 -9
- package/src/cli.ts +19 -4
- package/src/compounding/engine.ts +2 -0
- package/src/compounding/preference-consolidator.test.ts +292 -0
- package/src/compounding/preference-consolidator.ts +55 -19
- package/src/config.test.ts +213 -0
- package/src/config.ts +175 -4
- package/src/connectors/codex-materialize-runner.ts +7 -4
- package/src/consolidation-provenance-check.ts +24 -5
- package/src/conversation-index/indexer.test.ts +22 -0
- package/src/conversation-index/indexer.ts +7 -3
- package/src/cross-namespace-budget.test.ts +44 -21
- package/src/cross-namespace-budget.ts +2 -2
- package/src/enrichment/pipeline.ts +11 -16
- package/src/evals.ts +1 -1
- package/src/extraction-judge-chain.test.ts +55 -0
- package/src/extraction-judge.ts +7 -9
- package/src/extraction.ts +16 -5
- package/src/fallback-llm.test.ts +600 -1
- package/src/fallback-llm.ts +91 -22
- package/src/maintenance/memory-governance-cron.ts +39 -29
- package/src/mcp-memory-inspector-app.ts +54 -12
- package/src/message-parts/index.ts +6 -0
- package/src/message-parts/message-parts.test.ts +30 -0
- package/src/migrate/from-engram.ts +19 -5
- package/src/namespaces/search.test.ts +15 -2
- package/src/namespaces/search.ts +1 -1
- package/src/network/webdav.ts +61 -21
- package/src/operator-toolkit.ts +6 -2
- package/src/orchestrator.ts +173 -20
- package/src/qmd-client.test.ts +85 -0
- package/src/qmd-recall-cache.test.ts +16 -0
- package/src/qmd-recall-cache.ts +7 -0
- package/src/qmd.test.ts +54 -0
- package/src/qmd.ts +119 -19
- package/src/recall-planner-llm.test.ts +224 -0
- package/src/recall-planner-llm.ts +289 -0
- package/src/routing/store.ts +4 -8
- package/src/search/factory.ts +3 -0
- package/src/search/lancedb-backend.ts +15 -3
- package/src/search/meilisearch-backend.ts +70 -7
- package/src/search/noop-backend.ts +5 -1
- package/src/search/orama-backend.ts +15 -3
- package/src/search/port.ts +15 -0
- package/src/search/remote-backend.ts +5 -1
- package/src/session-observer-state.ts +1 -1
- package/src/summarizer.ts +3 -3
- package/src/temporal-index.test.ts +18 -0
- package/src/temporal-index.ts +45 -0
- package/src/training-export/cli-date-validation.test.ts +36 -0
- package/src/training-export/date-parse.ts +21 -2
- package/src/transfer/export-sqlite.ts +3 -0
- package/src/types.ts +35 -0
- package/src/utility-learner.ts +1 -0
- package/src/work/storage.ts +23 -0
- package/dist/chunk-5RPTH6AU.js.map +0 -1
- package/dist/chunk-AJA46VX5.js.map +0 -1
- package/dist/chunk-C4SQJZAF.js.map +0 -1
- package/dist/chunk-CHCA44C3.js.map +0 -1
- package/dist/chunk-CSKLPDN6.js.map +0 -1
- package/dist/chunk-DLJ4IR6M.js.map +0 -1
- package/dist/chunk-EAZGEEG2.js.map +0 -1
- package/dist/chunk-EVZFIAPG.js.map +0 -1
- package/dist/chunk-G3Z3QEF5.js.map +0 -1
- package/dist/chunk-GMAG2HS4.js.map +0 -1
- package/dist/chunk-HENLZHIT.js.map +0 -1
- package/dist/chunk-HINSGUA7.js.map +0 -1
- package/dist/chunk-HJNQQICM.js.map +0 -1
- package/dist/chunk-HPWVAEET.js.map +0 -1
- package/dist/chunk-IOTENEVL.js.map +0 -1
- package/dist/chunk-IP73YCZP.js.map +0 -1
- package/dist/chunk-JHMFYY7L.js.map +0 -1
- package/dist/chunk-JNANKJLN.js.map +0 -1
- package/dist/chunk-KGK2QKWL.js.map +0 -1
- package/dist/chunk-KM2A35EO.js.map +0 -1
- package/dist/chunk-KVEVLBKC.js.map +0 -1
- package/dist/chunk-L227SKTB.js.map +0 -1
- package/dist/chunk-LZ3VEOU5.js.map +0 -1
- package/dist/chunk-NOMEVTUD.js.map +0 -1
- package/dist/chunk-NZPF2SYV.js.map +0 -1
- package/dist/chunk-PCI747N2.js.map +0 -1
- package/dist/chunk-TH67Q46T.js.map +0 -1
- package/dist/chunk-UWY7GIVS.js.map +0 -1
- package/dist/chunk-VJXSUAO7.js.map +0 -1
- package/dist/chunk-XKIQZXUB.js.map +0 -1
- package/dist/chunk-XPSVGJYA.js.map +0 -1
- package/dist/chunk-XSWKORGM.js.map +0 -1
- package/dist/chunk-YCN4BVDK.js.map +0 -1
- package/dist/chunk-ZDTVJXIP.js.map +0 -1
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{chunk-AU7Q3LSC.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-HSVJGWYS.js.map → chunk-2ROPI5OE.js.map} +0 -0
- /package/dist/{chunk-CF3ZF2YU.js.map → chunk-3QSU4NFF.js.map} +0 -0
- /package/dist/{chunk-OI27U2HT.js.map → chunk-5BTCT236.js.map} +0 -0
- /package/dist/{chunk-CO7ZO4TU.js.map → chunk-5VDJMYTF.js.map} +0 -0
- /package/dist/{chunk-YFS5OEKO.js.map → chunk-7MLB4NCL.js.map} +0 -0
- /package/dist/{chunk-2QANQKSQ.js.map → chunk-ADNZVFXG.js.map} +0 -0
- /package/dist/{chunk-557IAFPD.js.map → chunk-APRRL26Q.js.map} +0 -0
- /package/dist/{chunk-QDDHYAKV.js.map → chunk-AZDOWD2L.js.map} +0 -0
- /package/dist/{chunk-MLT75J5S.js.map → chunk-B6SU7YSE.js.map} +0 -0
- /package/dist/{chunk-FXKPZ3H6.js.map → chunk-BPSGLMQ4.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-IK34DVAC.js.map → chunk-CIOMS6DI.js.map} +0 -0
- /package/dist/{chunk-7DZRO2DC.js.map → chunk-DEPRLVLK.js.map} +0 -0
- /package/dist/{chunk-DHGSZ3UD.js.map → chunk-DGNQRNLL.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-ETUPBUHB.js.map → chunk-GDASG7NC.js.map} +0 -0
- /package/dist/{chunk-4HP7HIE3.js.map → chunk-HP5FMB6L.js.map} +0 -0
- /package/dist/{chunk-DOX2CG6Y.js.map → chunk-IEUU7O4F.js.map} +0 -0
- /package/dist/{chunk-WSGF57U2.js.map → chunk-JQDZQ4TB.js.map} +0 -0
- /package/dist/{chunk-W7L6HXUC.js.map → chunk-LXOM6IQU.js.map} +0 -0
- /package/dist/{chunk-6JGNHWCI.js.map → chunk-OBIRVF36.js.map} +0 -0
- /package/dist/{chunk-GUPISBV2.js.map → chunk-PP2JH3GP.js.map} +0 -0
- /package/dist/{chunk-OXJBNGBK.js.map → chunk-PSUB67YB.js.map} +0 -0
- /package/dist/{chunk-KIB7SDIJ.js.map → chunk-Q6YIJGXJ.js.map} +0 -0
- /package/dist/{chunk-PPPZY2EU.js.map → chunk-QEMCQFDW.js.map} +0 -0
- /package/dist/{chunk-ZT3EGNLR.js.map → chunk-QPD426WT.js.map} +0 -0
- /package/dist/{chunk-RLV3PQGH.js.map → chunk-QVO4YOB7.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-IK7DCC5H.js.map → chunk-VMGLYN42.js.map} +0 -0
- /package/dist/{chunk-NSKYFGDL.js.map → chunk-X4QQB7O6.js.map} +0 -0
- /package/dist/{first-start-migration-GYJWIH36.js.map → first-start-migration-FF7YFGRP.js.map} +0 -0
- /package/dist/{tier-stats-SKML2OSF.js.map → tier-stats-3LYQ3VV5.js.map} +0 -0
package/src/temporal-index.ts
CHANGED
|
@@ -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}
|
|
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.
|
|
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;
|
package/src/utility-learner.ts
CHANGED
package/src/work/storage.ts
CHANGED
|
@@ -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;
|