@remnic/core 9.69.33 → 9.69.35
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-admin-ops-surface.d.ts +14 -11
- package/dist/access-admin-ops-surface.js +65 -60
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +14 -11
- package/dist/access-authorization-probe.js +66 -61
- package/dist/access-boundary.d.ts +14 -11
- package/dist/access-boundary.js +65 -60
- package/dist/access-cli.js +137 -133
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +3 -1
- package/dist/access-coding-context-resolution.js +3 -3
- package/dist/access-extraction-force-flush.d.ts +14 -11
- package/dist/access-extraction-force-flush.js +65 -60
- package/dist/access-health-types.d.ts +3 -1
- package/dist/access-http-briefing.d.ts +14 -11
- package/dist/access-http-briefing.js +66 -61
- package/dist/access-http-lcm-compaction.d.ts +14 -11
- package/dist/access-http-lifecycle-flush.d.ts +14 -11
- package/dist/access-http-offline-stream.d.ts +14 -11
- package/dist/access-http-query.d.ts +4 -2
- package/dist/access-http-query.js +67 -62
- package/dist/access-http.d.ts +15 -12
- package/dist/access-http.js +86 -82
- package/dist/access-identity-continuity-surface.d.ts +12 -9
- package/dist/access-identity-continuity-surface.js +65 -60
- package/dist/access-lcm-surface.d.ts +14 -11
- package/dist/access-lcm-surface.js +65 -60
- package/dist/access-mcp.d.ts +14 -11
- package/dist/access-mcp.js +74 -70
- package/dist/access-memory-search-fanout.d.ts +4 -2
- package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-D8qri11P.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +5 -3
- package/dist/access-namespace-preflight.js +65 -60
- package/dist/access-observe-transcript.d.ts +12 -9
- package/dist/access-observe-transcript.js +3 -3
- package/dist/access-observe-write-surface.d.ts +16 -13
- package/dist/access-observe-write-surface.js +65 -60
- package/dist/access-offline-manifest.d.ts +48 -11
- package/dist/access-offline-manifest.js +18 -16
- package/dist/access-operations-batch.js +68 -64
- package/dist/access-operations.d.ts +15 -12
- package/dist/access-operations.js +73 -69
- package/dist/access-recall-concurrency.d.ts +14 -11
- package/dist/access-recall-concurrency.js +65 -60
- package/dist/access-recall-response.d.ts +14 -11
- package/dist/access-recall-response.js +65 -60
- package/dist/access-recall-surface.d.ts +14 -11
- package/dist/access-recall-surface.js +65 -60
- package/dist/access-schema.d.ts +56 -13
- package/dist/access-schema.js +15 -1
- package/dist/{access-service-CJQoQvRa.d.ts → access-service-CKu5ixg9.d.ts} +52 -50
- package/dist/access-service-helpers.d.ts +14 -11
- package/dist/access-service.d.ts +14 -11
- package/dist/access-service.js +65 -60
- package/dist/access-surface-catalog.d.ts +14 -11
- package/dist/access-surface-catalog.js +67 -62
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -3
- package/dist/action-confidence.d.ts +3 -1
- package/dist/active-memory-bridge.d.ts +3 -1
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +3 -1
- package/dist/active-recall.js +12 -10
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +3 -1
- package/dist/adapters/index.d.ts +46 -1
- package/dist/adapters/index.js +10 -6
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +3 -1
- package/dist/artifact-search.d.ts +3 -1
- package/dist/{auto-sync-NSHLUAQI.js → auto-sync-4YFATLFQ.js} +10 -9
- package/dist/{auto-sync-NSHLUAQI.js.map → auto-sync-4YFATLFQ.js.map} +1 -1
- package/dist/behavior-learner.d.ts +3 -1
- package/dist/behavior-signals.d.ts +3 -1
- package/dist/bootstrap.d.ts +12 -9
- package/dist/briefing-window.d.ts +4 -2
- package/dist/briefing.d.ts +4 -2
- package/dist/briefing.js +26 -25
- package/dist/buffer-surprise-report.d.ts +3 -1
- package/dist/buffer-turn-helpers.d.ts +3 -1
- package/dist/buffer.d.ts +4 -2
- package/dist/buffer.js +11 -10
- package/dist/bulk-import/index.d.ts +5 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +3 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +3 -1
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
- package/dist/{catalog-8O9KY9eA.d.ts → catalog-Bq1AxZwF.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +3 -1
- package/dist/causal-consolidation.d.ts +3 -1
- package/dist/causal-consolidation.js +27 -26
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +3 -1
- package/dist/{chunk-CDKHKZL5.js → chunk-2524MOWK.js} +2 -2
- package/dist/{chunk-HVAEXYPL.js → chunk-255PC37A.js} +47 -25
- package/dist/chunk-255PC37A.js.map +1 -0
- package/dist/{chunk-2C3S7J2S.js → chunk-2BQ4ZIWC.js} +741 -28
- package/dist/chunk-2BQ4ZIWC.js.map +1 -0
- package/dist/{chunk-RKBLRTNT.js → chunk-2YLMUME2.js} +2 -2
- package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
- package/dist/chunk-326KUXIR.js.map +1 -0
- package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.js} +2 -2
- package/dist/{chunk-MWFGUESQ.js → chunk-3FJKJ5UZ.js} +2 -2
- package/dist/{chunk-NZXEK3UF.js → chunk-3Q3N35W7.js} +2 -2
- package/dist/{chunk-YYGZJPOK.js → chunk-42DJ235G.js} +2 -2
- package/dist/{chunk-SO7SV523.js → chunk-4MDKNUV4.js} +1 -1
- package/dist/chunk-4MDKNUV4.js.map +1 -0
- package/dist/chunk-5HYUUFMQ.js +1280 -0
- package/dist/chunk-5HYUUFMQ.js.map +1 -0
- package/dist/{chunk-2JVJ7UHC.js → chunk-5JG5EBVL.js} +4 -2
- package/dist/chunk-5JG5EBVL.js.map +1 -0
- package/dist/{chunk-HV7OY4DM.js → chunk-5VAF4ID4.js} +643 -202
- package/dist/chunk-5VAF4ID4.js.map +1 -0
- package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
- package/dist/chunk-65RENJGB.js.map +1 -0
- package/dist/{chunk-JTH2SE6B.js → chunk-6J6K3STG.js} +8 -8
- package/dist/{chunk-H4VH5VIB.js → chunk-776GVKL7.js} +2 -2
- package/dist/{chunk-BUTCAMJM.js → chunk-A2YQL2FF.js} +5 -5
- package/dist/chunk-A5UQ52YQ.js +211 -0
- package/dist/chunk-A5UQ52YQ.js.map +1 -0
- package/dist/{chunk-X2NFFBTO.js → chunk-A7GQBJP5.js} +4 -4
- package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
- package/dist/{chunk-B325AGLK.js → chunk-AZSKROVQ.js} +2 -2
- package/dist/{chunk-I5DZ3WGR.js → chunk-BJETIR53.js} +3 -3
- package/dist/{chunk-JT3EB7ZL.js → chunk-BNGHPYZU.js} +5 -5
- package/dist/chunk-BRZWWUCJ.js +13 -0
- package/dist/{chunk-FYDW33ZB.js.map → chunk-BRZWWUCJ.js.map} +1 -1
- package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
- package/dist/{chunk-5NANRSCD.js → chunk-CNV2A557.js} +5 -5
- package/dist/{chunk-PBGVVDLY.js → chunk-DK4X5B6I.js} +2 -2
- package/dist/{chunk-MFDTVQJX.js → chunk-DVOBLPSQ.js} +22 -7
- package/dist/chunk-DVOBLPSQ.js.map +1 -0
- package/dist/{chunk-N2ZNPHA3.js → chunk-ECKG5WSI.js} +2 -2
- package/dist/{chunk-PYLL63BF.js → chunk-EEBQFG5E.js} +9 -9
- package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
- package/dist/{chunk-RHQMKJFG.js → chunk-F6IVBYFS.js} +55 -51
- package/dist/{chunk-RHQMKJFG.js.map → chunk-F6IVBYFS.js.map} +1 -1
- package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
- package/dist/{chunk-JGHXXQ2G.js → chunk-FVJ4D6L7.js} +2 -2
- package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-MN3LK3KN.js → chunk-GLZH5VEN.js} +2 -2
- package/dist/{chunk-S7T2TY65.js → chunk-HC4GFLMQ.js} +3 -3
- package/dist/{chunk-EQHDH4C2.js → chunk-HUT2JR6I.js} +3 -3
- package/dist/{chunk-UUQG7HAD.js → chunk-HXSAWV3A.js} +4 -4
- package/dist/{chunk-XXIHX75O.js → chunk-J7PB5UQ4.js} +3 -3
- package/dist/{chunk-UGPUYIET.js → chunk-JHZCXUQI.js} +221 -400
- package/dist/chunk-JHZCXUQI.js.map +1 -0
- package/dist/{chunk-LTIZHLV7.js → chunk-JR6H5CYS.js} +2 -2
- package/dist/{chunk-FCSZ4K2X.js → chunk-JR6PP7UM.js} +3 -3
- package/dist/{chunk-TCUKRAMK.js → chunk-JRWW7GM6.js} +10 -10
- package/dist/{chunk-Q726HSJO.js → chunk-JSRVXI6E.js} +16 -15
- package/dist/chunk-JSRVXI6E.js.map +1 -0
- package/dist/{chunk-DB5TGMLZ.js → chunk-JZ2CHRLB.js} +6 -4
- package/dist/{chunk-DB5TGMLZ.js.map → chunk-JZ2CHRLB.js.map} +1 -1
- package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
- package/dist/chunk-L2QLDZJC.js.map +1 -0
- package/dist/{chunk-PL7FYKHT.js → chunk-L2WQVSKP.js} +2 -2
- package/dist/{chunk-JSN44KIB.js → chunk-LEMD7WZJ.js} +9 -9
- package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
- package/dist/{chunk-7BMXZCOT.js → chunk-LNDLXMH6.js} +3 -3
- package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
- package/dist/chunk-LSLCFCCQ.js.map +1 -0
- package/dist/{chunk-EONF76DT.js → chunk-LYDJRF45.js} +2 -2
- package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
- package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
- package/dist/{chunk-A7XEPMQ6.js → chunk-MVAQ2WM3.js} +6 -6
- package/dist/chunk-MVAQ2WM3.js.map +1 -0
- package/dist/{chunk-6N3TQFZU.js → chunk-NN4JEFON.js} +3 -3
- package/dist/chunk-NPNSKE76.js +220 -0
- package/dist/chunk-NPNSKE76.js.map +1 -0
- package/dist/{chunk-MOZXTRC2.js → chunk-OQ7SSRXP.js} +19 -19
- package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
- package/dist/{chunk-4MHYKEOM.js → chunk-OS2AT2JU.js} +10 -10
- package/dist/{chunk-N57A4KPV.js → chunk-P3ONDDIJ.js} +2 -2
- package/dist/chunk-PCEYGOSL.js +66 -0
- package/dist/chunk-PCEYGOSL.js.map +1 -0
- package/dist/{chunk-R3HKWWUB.js → chunk-PHP3MUGF.js} +2 -2
- package/dist/{chunk-EEOUMG3J.js → chunk-PWPIERBM.js} +38 -6
- package/dist/chunk-PWPIERBM.js.map +1 -0
- package/dist/chunk-Q4AUIFUA.js +111 -0
- package/dist/chunk-Q4AUIFUA.js.map +1 -0
- package/dist/{chunk-P3SB5BNT.js → chunk-QATYVTP7.js} +2 -2
- package/dist/{chunk-LSYDG6MJ.js → chunk-QBLDCI6E.js} +2 -2
- package/dist/{chunk-KCB7F4J7.js → chunk-QURNMKME.js} +2 -2
- package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
- package/dist/{chunk-XXE5P6HJ.js → chunk-RRZKTSFG.js} +2 -2
- package/dist/{chunk-44T3Y7SZ.js → chunk-RUXPVSML.js} +5 -5
- package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
- package/dist/{chunk-H272ZPQ3.js → chunk-SHEHQBCG.js} +124 -23
- package/dist/chunk-SHEHQBCG.js.map +1 -0
- package/dist/{chunk-EEC4PCG5.js → chunk-SZDLX763.js} +2 -2
- package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
- package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
- package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
- package/dist/{chunk-W27OW7AB.js → chunk-TKFSXDOB.js} +2 -2
- package/dist/chunk-TLHNF6GA.js +647 -0
- package/dist/chunk-TLHNF6GA.js.map +1 -0
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
- package/dist/chunk-UBG4GAEP.js.map +1 -0
- package/dist/{chunk-CETXNLEX.js → chunk-UDZYNIDJ.js} +2 -2
- package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
- package/dist/{chunk-E6TDQRF6.js → chunk-UYUCCQ46.js} +2 -2
- package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
- package/dist/chunk-VELCIWJZ.js.map +1 -0
- package/dist/{chunk-OQDPBRQ6.js → chunk-VYXDUPYE.js} +2 -2
- package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
- package/dist/chunk-W6IJMWTZ.js +72 -0
- package/dist/chunk-W6IJMWTZ.js.map +1 -0
- package/dist/{chunk-NB5BCFUY.js → chunk-WHHEPAO3.js} +4 -4
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-TX2UTLXC.js → chunk-WPDKBUWX.js} +2 -2
- package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-PFFZWDPE.js → chunk-XCOV45MO.js} +3 -3
- package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
- package/dist/chunk-XW2T4QAW.js +1 -0
- package/dist/{chunk-J7HFPA6O.js → chunk-Y63ZFP4X.js} +2 -2
- package/dist/{chunk-D223ZDQV.js → chunk-YEDVOYL2.js} +2 -2
- package/dist/{chunk-TLPZ6MKZ.js → chunk-YEN4TREG.js} +541 -5
- package/dist/chunk-YEN4TREG.js.map +1 -0
- package/dist/{chunk-22FVR2KE.js → chunk-YJ6VCDMZ.js} +6 -2
- package/dist/chunk-YJ6VCDMZ.js.map +1 -0
- package/dist/{chunk-RC5DXXWC.js → chunk-YM7YN37H.js} +2 -2
- package/dist/{chunk-BPJNF7J2.js → chunk-YNN26CIZ.js} +2 -2
- package/dist/{chunk-VLXBE57O.js → chunk-YVGXH72Y.js} +2 -2
- package/dist/{chunk-YQAXP5AC.js → chunk-YXLUTALO.js} +5 -5
- package/dist/{chunk-DGGB65KC.js → chunk-Z7ACR6MJ.js} +3 -3
- package/dist/{chunk-X35W4S3L.js → chunk-ZBEGS7OB.js} +4 -4
- package/dist/{chunk-O75CRYGF.js → chunk-ZEFVK7XC.js} +1 -1
- package/dist/chunk-ZEFVK7XC.js.map +1 -0
- package/dist/{chunk-XUE46UYW.js → chunk-ZLN7AROH.js} +6 -6
- package/dist/{chunk-E6JA6XWY.js → chunk-ZTG4P7NZ.js} +1013 -1317
- package/dist/chunk-ZTG4P7NZ.js.map +1 -0
- package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
- package/dist/{cli-D57e2Mqt.d.ts → cli-Bk7Ctql4.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +11 -4
- package/dist/cli-fallback.js +5 -1
- package/dist/cli.d.ts +16 -13
- package/dist/cli.js +107 -103
- package/dist/coding/export-okf-codegraph.d.ts +3 -1
- package/dist/coding/export-okf-codegraph.js +32 -30
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +3 -1
- package/dist/compat/checks.js +2 -2
- package/dist/compat/codex-cli-fallback.d.ts +1 -1
- package/dist/compat/codex-cli-fallback.js +5 -1
- package/dist/compat/codex-cli-fallback.js.map +1 -1
- package/dist/compounding/engine.d.ts +4 -2
- package/dist/compounding/engine.js +27 -26
- package/dist/compounding/preference-consolidator.d.ts +3 -1
- package/dist/compression-optimizer.d.ts +3 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.js +12 -10
- package/dist/connectors/codex-materialize-runner.d.ts +3 -1
- package/dist/connectors/codex-materialize-runner.js +26 -25
- package/dist/connectors/codex-materialize.d.ts +3 -1
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.js +28 -27
- package/dist/consolidation-provenance-check.d.ts +4 -2
- package/dist/consolidation-undo.d.ts +4 -2
- package/dist/contradiction/index.d.ts +5 -3
- package/dist/contradiction/index.js +5 -5
- package/dist/{contradiction-scan-NOYMFG66.js → contradiction-scan-GVD4JJ7B.js} +3 -3
- package/dist/converge-config.d.ts +3 -1
- package/dist/convergence-refresh.d.ts +4 -2
- package/dist/convergence-refresh.js +28 -27
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.js +2 -2
- package/dist/conversation-index/indexer.d.ts +3 -1
- package/dist/conversation-index/search.d.ts +3 -1
- package/dist/corpus-watermark.d.ts +3 -1
- package/dist/corpus-watermark.js +29 -28
- package/dist/cross-lingual-recall.d.ts +3 -1
- package/dist/day-summary.d.ts +3 -1
- package/dist/deep-recall-http-glue.d.ts +14 -11
- package/dist/deep-recall-http-glue.js +12 -2
- package/dist/deep-recall-mcp-tools.d.ts +14 -11
- package/dist/deep-recall-policy-llm.d.ts +3 -1
- package/dist/deep-recall-policy-llm.js +4 -3
- package/dist/deep-recall-seeds.d.ts +3 -1
- package/dist/delinearize.d.ts +3 -1
- package/dist/dependency-propagation-config.d.ts +3 -1
- package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-DLiAtj25.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +3 -1
- package/dist/direct-answer.d.ts +3 -1
- package/dist/embedding-fallback.d.ts +3 -1
- package/dist/enrichment/index.d.ts +3 -1
- package/dist/entity-origin-fields.d.ts +3 -1
- package/dist/entity-retrieval.d.ts +4 -2
- package/dist/entity-retrieval.js +26 -25
- package/dist/entity-schema.d.ts +3 -1
- package/dist/episodic-context.d.ts +3 -1
- package/dist/eval-trajectory-contracts.d.ts +3 -1
- package/dist/eval-trajectory-store.d.ts +3 -1
- package/dist/eval-trajectory.d.ts +3 -1
- package/dist/explicit-capture.d.ts +12 -9
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +14 -11
- package/dist/external-wiki-access.js +66 -61
- package/dist/external-wiki-collection-registration.d.ts +3 -1
- package/dist/external-wiki-collection.d.ts +3 -1
- package/dist/external-wiki-mcp-tools.d.ts +14 -11
- package/dist/extraction-error-classification.d.ts +3 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-faithfulness.js +4 -3
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-judge.js +5 -4
- package/dist/extraction-liveness.d.ts +3 -1
- package/dist/extraction-normalization.d.ts +3 -1
- package/dist/extraction-prompt.d.ts +3 -1
- package/dist/extraction-source-grounding-rules.d.ts +3 -1
- package/dist/extraction-source-grounding.d.ts +3 -1
- package/dist/extraction.d.ts +3 -1
- package/dist/extraction.js +38 -36
- package/dist/fallback-llm.d.ts +3 -1
- package/dist/fallback-llm.js +3 -2
- package/dist/{first-start-migration-RC345GPL.js → first-start-migration-L3UFX5CU.js} +3 -3
- package/dist/generic-recall-paths-DbitKJI5.d.ts +23 -0
- package/dist/graph-append-error.d.ts +3 -1
- package/dist/graph-dashboard-diff.d.ts +3 -1
- package/dist/graph-dashboard-key.d.ts +3 -1
- package/dist/graph-dashboard-parser.d.ts +3 -1
- package/dist/graph-edge-reinforcement.d.ts +3 -1
- package/dist/graph-jsonl.d.ts +3 -1
- package/dist/graph-path-reconstruction.d.ts +3 -1
- package/dist/graph-path-scoring.d.ts +3 -1
- package/dist/graph-snapshot.d.ts +3 -1
- package/dist/graph.d.ts +3 -1
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/importance.d.ts +3 -1
- package/dist/importers/index.d.ts +3 -1
- package/dist/importers/test-utils.d.ts +3 -1
- package/dist/in-flight-reads.d.ts +3 -1
- package/dist/{index-BTAsSkPG.d.ts → index-BINUgPFo.d.ts} +2 -2
- package/dist/index.d.ts +303 -245
- package/dist/index.js +316 -214
- package/dist/intent.d.ts +3 -1
- package/dist/lcm/engine.d.ts +3 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +3 -1
- package/dist/lcm/index.js +7 -7
- package/dist/lcm/tools.d.ts +3 -1
- package/dist/lifecycle.d.ts +3 -1
- package/dist/live-connectors-runner.d.ts +3 -1
- package/dist/local-llm-config.d.ts +26 -0
- package/dist/local-llm-config.js +1 -0
- package/dist/local-llm.d.ts +5 -1
- package/dist/local-llm.js +3 -3
- package/dist/local-model-endpoint.d.ts +3 -1
- package/dist/location/index.d.ts +5 -3
- package/dist/location/index.js +29 -28
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +26 -25
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +26 -25
- package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-projection.js +27 -26
- package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-ag1gYztC.d.ts} +378 -4
- package/dist/mcp-memory-inspector-app.d.ts +14 -11
- package/dist/memory-action-policy.d.ts +3 -1
- package/dist/memory-cache.d.ts +3 -1
- package/dist/memory-controller.d.ts +3 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +3 -1
- package/dist/memory-projection-store.d.ts +3 -1
- package/dist/memory-provenance.d.ts +3 -1
- package/dist/memory-snapshot.d.ts +3 -1
- package/dist/memory-subject-cli.d.ts +14 -11
- package/dist/memory-subject.d.ts +14 -11
- package/dist/memory-worth-outcomes.d.ts +4 -2
- package/dist/migrate/from-engram.js +2 -2
- package/dist/models-json.d.ts +3 -1
- package/dist/namespaces/migrate.d.ts +5 -3
- package/dist/namespaces/migrate.js +27 -26
- package/dist/namespaces/principal.d.ts +3 -1
- package/dist/namespaces/search.d.ts +3 -1
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +5 -3
- package/dist/namespaces/storage.js +26 -25
- package/dist/native-knowledge.d.ts +3 -1
- package/dist/network/tailscale.js +2 -2
- package/dist/offline-sync-impression-drain.d.ts +3 -1
- package/dist/offline-sync-impression-drain.js +6 -6
- package/dist/operator-doctor-corpus.d.ts +3 -1
- package/dist/operator-doctor-corpus.js +30 -29
- package/dist/operator-doctor-replica.d.ts +3 -1
- package/dist/operator-toolkit.d.ts +5 -3
- package/dist/operator-toolkit.js +44 -42
- package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
- package/dist/orchestration/maintenance.d.ts +6 -4
- package/dist/orchestration/maintenance.js +44 -39
- package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-Cf3G-3Ed.d.ts} +17 -29
- package/dist/orchestrator.d.ts +12 -9
- package/dist/orchestrator.js +141 -135
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-AwB03fw_.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +3 -1
- package/dist/proactive-contention.d.ts +3 -1
- package/dist/provenance.d.ts +3 -1
- package/dist/{public-http-h-yWu9rj.d.ts → public-http-BetSQn7q.d.ts} +1 -1
- package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Bfaydrfm.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +4 -2
- package/dist/qmd-recall-cache.d.ts +3 -1
- package/dist/qmd.d.ts +4 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-concurrency-config.d.ts +3 -1
- package/dist/recall-disclosure-escalation.d.ts +3 -1
- package/dist/recall-explain-renderer.d.ts +3 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +3 -1
- package/dist/recall-navigate-access.d.ts +3 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +3 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +3 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-planner-llm.js +3 -2
- package/dist/recall-planner-llm.js.map +1 -1
- package/dist/recall-state-view-admission.d.ts +57 -0
- package/dist/recall-state-view-admission.js +39 -0
- package/dist/recall-state-view-admission.js.map +1 -0
- package/dist/recall-state-view-inject.js +2 -2
- package/dist/recall-state-view-render.js +2 -2
- package/dist/recall-state-view-widen.d.ts +18 -1
- package/dist/recall-state-view-widen.js +2 -2
- package/dist/recall-state-view-wire.d.ts +1 -1
- package/dist/recall-state-view-wire.js +3 -3
- package/dist/recall-state-view.d.ts +1 -0
- package/dist/recall-state-view.js +1 -1
- package/dist/recall-state.d.ts +3 -1
- package/dist/recall-tag-filter.d.ts +3 -1
- package/dist/recall-timings.d.ts +3 -1
- package/dist/recall-xray-cli.d.ts +3 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +3 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +10 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +12 -2
- package/dist/reconcile/cursor.js +6 -4
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +38 -2
- package/dist/reconcile/manifest.js +15 -5
- package/dist/reconcile/plan.d.ts +3 -1
- package/dist/replay/normalizers/chatgpt.d.ts +3 -1
- package/dist/replay/normalizers/claude.d.ts +3 -1
- package/dist/replay/normalizers/openclaw.d.ts +3 -1
- package/dist/replay/normalizers/shared.d.ts +3 -1
- package/dist/replay/runner.d.ts +3 -1
- package/dist/replay/types.d.ts +3 -1
- package/dist/replica-divergence.d.ts +3 -1
- package/dist/replica-peers-config.d.ts +3 -1
- package/dist/{resolution-VKATP2HT.js → resolution-OHJZG45O.js} +6 -6
- package/dist/resolution-OHJZG45O.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +3 -1
- package/dist/resume-bundles.js +13 -11
- package/dist/retrieval-agents.d.ts +4 -2
- package/dist/retrieval-tiers.d.ts +3 -1
- package/dist/routing/engine.d.ts +3 -1
- package/dist/routing/store.d.ts +3 -1
- package/dist/runtime/child-process.d.ts +1 -1
- package/dist/runtime/child-process.js +1 -1
- package/dist/salvage-envelope.d.ts +3 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-nxTKvjE-.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +3 -1
- package/dist/search/factory.d.ts +3 -1
- package/dist/search/factory.js +7 -7
- package/dist/search/index.d.ts +3 -1
- package/dist/search/index.js +11 -11
- package/dist/search/lancedb-backend.d.ts +3 -1
- package/dist/search/meilisearch-backend.d.ts +3 -1
- package/dist/search/noop-backend.d.ts +3 -1
- package/dist/search/orama-backend.d.ts +3 -1
- package/dist/search/port.d.ts +3 -1
- package/dist/search/remote-backend.d.ts +3 -1
- package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-C83DVakV.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +27 -26
- package/dist/semantic-rule-promotion.js +26 -25
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +26 -25
- package/dist/{service-BbuVh1eS.d.ts → service-q-xtOoAr.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +3 -1
- package/dist/session-observer-state.d.ts +3 -1
- package/dist/shared-context/manager.d.ts +3 -1
- package/dist/signal.d.ts +3 -1
- package/dist/source-agent-qualifier.d.ts +3 -1
- package/dist/source-agent-qualifier.js +35 -33
- package/dist/standup/build.js +26 -25
- package/dist/{storage-BBLLuVTF.d.ts → storage-Ca0MbTfm.d.ts} +67 -6
- package/dist/storage.d.ts +5 -3
- package/dist/storage.js +25 -24
- package/dist/subject-config.d.ts +3 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +3 -1
- package/dist/summarizer.js +6 -6
- package/dist/summary-snapshot.d.ts +3 -1
- package/dist/support-passport/index.d.ts +50 -15
- package/dist/support-passport/index.js +73 -64
- package/dist/temporal-supersession.d.ts +4 -2
- package/dist/temporal-timeline-recall.d.ts +3 -1
- package/dist/temporal-validity.d.ts +3 -1
- package/dist/threading.d.ts +3 -1
- package/dist/tier-migration.d.ts +4 -2
- package/dist/tier-routing.d.ts +3 -1
- package/dist/tier-routing.js +2 -2
- package/dist/{tier-stats-KA6OZX2C.js → tier-stats-VK5PCO2L.js} +3 -3
- package/dist/topics.d.ts +3 -1
- package/dist/transcript.d.ts +3 -1
- package/dist/transfer/capsule-import.js +1 -1
- package/dist/transfer/export-okf.d.ts +3 -1
- package/dist/transfer/export-okf.js +27 -26
- package/dist/transfer/types.d.ts +24 -24
- package/dist/trust-score-stage.d.ts +3 -1
- package/dist/trust-score.d.ts +3 -1
- package/dist/{types-igV4-sbB.d.ts → types-yDgWDkrJ.d.ts} +60 -34
- package/dist/types.d.ts +3 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +3 -1
- package/dist/verified-recall.js +26 -25
- package/dist/who-knows-cli.d.ts +14 -11
- package/dist/who-knows-cli.js +27 -26
- package/dist/who-knows.d.ts +14 -11
- package/dist/who-knows.js +26 -25
- package/dist/write-envelope.d.ts +5 -2
- package/dist/write-envelope.js +3 -1
- package/package.json +2 -2
- package/src/access-category-alias.test.ts +216 -0
- package/src/access-mcp.test.ts +73 -0
- package/src/access-mcp.ts +6 -6
- package/src/access-observe-write-surface.ts +19 -4
- package/src/access-offline-manifest.ts +297 -16
- package/src/access-recall-surface.ts +5 -5
- package/src/access-schema.ts +76 -7
- package/src/access-service.ts +11 -2
- package/src/activity/config.test.ts +124 -1
- package/src/activity/config.ts +150 -18
- package/src/activity/index.ts +3 -0
- package/src/activity/journal-extract-storage.test.ts +129 -0
- package/src/activity/journal-extract.test.ts +314 -0
- package/src/activity/journal-extract.ts +247 -0
- package/src/activity/journal-heading.test.ts +24 -1
- package/src/activity/journal-heading.ts +36 -0
- package/src/activity/journal-read.test.ts +242 -0
- package/src/activity/journal-read.ts +183 -0
- package/src/activity/journal-source.test.ts +15 -15
- package/src/activity/journal-source.ts +21 -14
- package/src/activity/journal-state.lock-worker.ts +30 -0
- package/src/activity/journal-state.test.ts +144 -0
- package/src/activity/journal-state.ts +107 -0
- package/src/activity/journal-strip.test.ts +106 -52
- package/src/activity/journal-strip.ts +35 -10
- package/src/activity/journal-vault-integration.test.ts +230 -0
- package/src/activity/journal-vault-provenance.test.ts +9 -7
- package/src/activity/journal-vault-provenance.ts +4 -10
- package/src/activity/journal-vault-read.test.ts +3 -2
- package/src/activity/journal-vault-read.ts +9 -139
- package/src/activity/journal.test.ts +74 -23
- package/src/activity/runner.test.ts +116 -1
- package/src/activity/runner.ts +25 -0
- package/src/activity/scheduler.ts +4 -0
- package/src/activity/store.test.ts +18 -0
- package/src/activity/store.ts +14 -0
- package/src/activity/sync-registration.ts +4 -0
- package/src/activity/timeline/analysis-metadata.ts +2 -0
- package/src/activity/timeline/analysis-provider.ts +140 -0
- package/src/activity/timeline/analysis-run.test.ts +419 -0
- package/src/activity/timeline/analysis-run.ts +106 -0
- package/src/activity/timeline/analysis.ts +66 -37
- package/src/activity/timeline/corrections.ts +9 -0
- package/src/activity/timeline/index.ts +3 -0
- package/src/activity/timeline/query.test.ts +71 -0
- package/src/activity/timeline/query.ts +57 -8
- package/src/activity/timeline/regenerate.test.ts +505 -0
- package/src/activity/timeline/regenerate.ts +373 -0
- package/src/activity/types.ts +40 -5
- package/src/adapters/grok-opencode.test.ts +146 -0
- package/src/adapters/grok.ts +53 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/opencode.ts +52 -0
- package/src/adapters/registry.ts +4 -0
- package/src/cli-fallback.ts +13 -4
- package/src/config.test.ts +27 -1
- package/src/config.ts +17 -1
- package/src/dedup/merge.test.ts +732 -25
- package/src/fallback-llm.test.ts +53 -0
- package/src/fallback-llm.ts +12 -0
- package/src/index.ts +2 -0
- package/src/local-llm-config.ts +25 -0
- package/src/local-llm.ts +3 -1
- package/src/orchestration/dependency-propagation-recovery-replay.ts +1 -1
- package/src/orchestration/extraction-persist-deps.ts +9 -0
- package/src/orchestration/extraction-persist-promotion.test.ts +265 -6
- package/src/orchestration/extraction-persist-promotion.ts +42 -3
- package/src/orchestration/extraction-persist.ts +3 -3
- package/src/orchestration/harmonic-construction-persist.test.ts +115 -4
- package/src/orchestration/harmonic-construction-persist.ts +34 -6
- package/src/orchestration/maintenance.ts +1 -0
- package/src/orchestration/orchestrator-helpers.ts +6 -0
- package/src/orchestration/recall-entry.ts +16 -0
- package/src/orchestration/recall-internal-deps.ts +14 -0
- package/src/orchestration/recall-internal.ts +41 -58
- package/src/orchestration/recall-result-formatter.ts +11 -1
- package/src/orchestration/recall-search-pipeline.ts +121 -11
- package/src/orchestration/recall-state-view-pipeline.test.ts +211 -0
- package/src/orchestration/semantic-merge-commit-effects.ts +76 -17
- package/src/orchestration/semantic-merge-persist.ts +121 -16
- package/src/orchestration/semantic-merge-promotion-payload.ts +133 -54
- package/src/orchestrator.ts +7 -35
- package/src/providers/codex-subscription.test.ts +666 -0
- package/src/providers/codex-subscription.ts +743 -0
- package/src/recall-disclosure.test.ts +20 -0
- package/src/recall-state-view-admission.ts +114 -0
- package/src/recall-state-view-asof.test.ts +176 -0
- package/src/recall-state-view-call.test.ts +175 -0
- package/src/recall-state-view-config.test.ts +16 -0
- package/src/recall-state-view-widen.test.ts +70 -0
- package/src/recall-state-view-widen.ts +28 -7
- package/src/recall-state-view-wire.ts +3 -1
- package/src/recall-state-view-zero-diff.test.ts +20 -11
- package/src/recall-state-view.test.ts +142 -0
- package/src/recall-state-view.ts +72 -24
- package/src/recall-xray-renderer.test.ts +27 -0
- package/src/recall-xray-renderer.ts +4 -0
- package/src/recall-xray.ts +13 -0
- package/src/reconcile/cursor.ts +23 -33
- package/src/reconcile/manifest.ts +96 -11
- package/src/reconcile-identity-cache.test.ts +378 -0
- package/src/runtime/child-process.ts +1 -1
- package/src/storage/cas-revision-host.ts +75 -0
- package/src/storage/cas-revision-store.test.ts +459 -0
- package/src/storage/cas-revision-store.ts +661 -0
- package/src/storage/deletion-revision-store.ts +80 -6
- package/src/storage/tombstone-blocked-capture-index.ts +15 -0
- package/src/storage/tombstone-blocked-capture-mutation.ts +67 -7
- package/src/storage/tombstone-blocked-capture-sync.ts +55 -20
- package/src/storage-contract/failure-semantics.test.ts +1 -1
- package/src/storage-frontmatter-cas.test.ts +698 -1
- package/src/storage-replay.test.ts +166 -3
- package/src/storage.ts +41 -41
- package/src/support-passport/card-projection.ts +82 -33
- package/src/temporal-supersession.test.ts +10 -10
- package/src/types.ts +10 -29
- package/src/write-envelope.ts +1 -1
- package/dist/chunk-22FVR2KE.js.map +0 -1
- package/dist/chunk-2C3S7J2S.js.map +0 -1
- package/dist/chunk-2JVJ7UHC.js.map +0 -1
- package/dist/chunk-2QSZNTDO.js +0 -56
- package/dist/chunk-2QSZNTDO.js.map +0 -1
- package/dist/chunk-3QQTXYZ6.js.map +0 -1
- package/dist/chunk-5VCDKQWQ.js +0 -560
- package/dist/chunk-5VCDKQWQ.js.map +0 -1
- package/dist/chunk-A7XEPMQ6.js.map +0 -1
- package/dist/chunk-BLUYQFRH.js.map +0 -1
- package/dist/chunk-E6JA6XWY.js.map +0 -1
- package/dist/chunk-EEOUMG3J.js.map +0 -1
- package/dist/chunk-FDLDOEO6.js.map +0 -1
- package/dist/chunk-FYDW33ZB.js +0 -13
- package/dist/chunk-H272ZPQ3.js.map +0 -1
- package/dist/chunk-HV7OY4DM.js.map +0 -1
- package/dist/chunk-HVAEXYPL.js.map +0 -1
- package/dist/chunk-JEIXTYVG.js.map +0 -1
- package/dist/chunk-LRICZIGN.js +0 -52
- package/dist/chunk-LRICZIGN.js.map +0 -1
- package/dist/chunk-MFDTVQJX.js.map +0 -1
- package/dist/chunk-N7RWREIQ.js.map +0 -1
- package/dist/chunk-O75CRYGF.js.map +0 -1
- package/dist/chunk-Q726HSJO.js.map +0 -1
- package/dist/chunk-QOIOACIE.js.map +0 -1
- package/dist/chunk-SEDEKFYQ.js +0 -1
- package/dist/chunk-SO7SV523.js.map +0 -1
- package/dist/chunk-TLPZ6MKZ.js.map +0 -1
- package/dist/chunk-UGPUYIET.js.map +0 -1
- package/src/activity/journal-mode.test.ts +0 -32
- package/src/activity/journal-mode.ts +0 -20
- /package/dist/{capsule-merge-IPG4IOFP.js.map → capsule-merge-ZCXUPLNJ.js.map} +0 -0
- /package/dist/{chunk-CDKHKZL5.js.map → chunk-2524MOWK.js.map} +0 -0
- /package/dist/{chunk-RKBLRTNT.js.map → chunk-2YLMUME2.js.map} +0 -0
- /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.js.map} +0 -0
- /package/dist/{chunk-MWFGUESQ.js.map → chunk-3FJKJ5UZ.js.map} +0 -0
- /package/dist/{chunk-NZXEK3UF.js.map → chunk-3Q3N35W7.js.map} +0 -0
- /package/dist/{chunk-YYGZJPOK.js.map → chunk-42DJ235G.js.map} +0 -0
- /package/dist/{chunk-JTH2SE6B.js.map → chunk-6J6K3STG.js.map} +0 -0
- /package/dist/{chunk-H4VH5VIB.js.map → chunk-776GVKL7.js.map} +0 -0
- /package/dist/{chunk-BUTCAMJM.js.map → chunk-A2YQL2FF.js.map} +0 -0
- /package/dist/{chunk-X2NFFBTO.js.map → chunk-A7GQBJP5.js.map} +0 -0
- /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
- /package/dist/{chunk-B325AGLK.js.map → chunk-AZSKROVQ.js.map} +0 -0
- /package/dist/{chunk-I5DZ3WGR.js.map → chunk-BJETIR53.js.map} +0 -0
- /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
- /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
- /package/dist/{chunk-5NANRSCD.js.map → chunk-CNV2A557.js.map} +0 -0
- /package/dist/{chunk-PBGVVDLY.js.map → chunk-DK4X5B6I.js.map} +0 -0
- /package/dist/{chunk-N2ZNPHA3.js.map → chunk-ECKG5WSI.js.map} +0 -0
- /package/dist/{chunk-PYLL63BF.js.map → chunk-EEBQFG5E.js.map} +0 -0
- /package/dist/{chunk-ET356KSB.js.map → chunk-F4TWWUMP.js.map} +0 -0
- /package/dist/{chunk-CLLPJ6QT.js.map → chunk-FQXJAC3T.js.map} +0 -0
- /package/dist/{chunk-JGHXXQ2G.js.map → chunk-FVJ4D6L7.js.map} +0 -0
- /package/dist/{chunk-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-MN3LK3KN.js.map → chunk-GLZH5VEN.js.map} +0 -0
- /package/dist/{chunk-S7T2TY65.js.map → chunk-HC4GFLMQ.js.map} +0 -0
- /package/dist/{chunk-EQHDH4C2.js.map → chunk-HUT2JR6I.js.map} +0 -0
- /package/dist/{chunk-UUQG7HAD.js.map → chunk-HXSAWV3A.js.map} +0 -0
- /package/dist/{chunk-XXIHX75O.js.map → chunk-J7PB5UQ4.js.map} +0 -0
- /package/dist/{chunk-LTIZHLV7.js.map → chunk-JR6H5CYS.js.map} +0 -0
- /package/dist/{chunk-FCSZ4K2X.js.map → chunk-JR6PP7UM.js.map} +0 -0
- /package/dist/{chunk-TCUKRAMK.js.map → chunk-JRWW7GM6.js.map} +0 -0
- /package/dist/{chunk-PL7FYKHT.js.map → chunk-L2WQVSKP.js.map} +0 -0
- /package/dist/{chunk-JSN44KIB.js.map → chunk-LEMD7WZJ.js.map} +0 -0
- /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
- /package/dist/{chunk-7BMXZCOT.js.map → chunk-LNDLXMH6.js.map} +0 -0
- /package/dist/{chunk-EONF76DT.js.map → chunk-LYDJRF45.js.map} +0 -0
- /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
- /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
- /package/dist/{chunk-6N3TQFZU.js.map → chunk-NN4JEFON.js.map} +0 -0
- /package/dist/{chunk-MOZXTRC2.js.map → chunk-OQ7SSRXP.js.map} +0 -0
- /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
- /package/dist/{chunk-4MHYKEOM.js.map → chunk-OS2AT2JU.js.map} +0 -0
- /package/dist/{chunk-N57A4KPV.js.map → chunk-P3ONDDIJ.js.map} +0 -0
- /package/dist/{chunk-R3HKWWUB.js.map → chunk-PHP3MUGF.js.map} +0 -0
- /package/dist/{chunk-P3SB5BNT.js.map → chunk-QATYVTP7.js.map} +0 -0
- /package/dist/{chunk-LSYDG6MJ.js.map → chunk-QBLDCI6E.js.map} +0 -0
- /package/dist/{chunk-KCB7F4J7.js.map → chunk-QURNMKME.js.map} +0 -0
- /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
- /package/dist/{chunk-XXE5P6HJ.js.map → chunk-RRZKTSFG.js.map} +0 -0
- /package/dist/{chunk-44T3Y7SZ.js.map → chunk-RUXPVSML.js.map} +0 -0
- /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
- /package/dist/{chunk-EEC4PCG5.js.map → chunk-SZDLX763.js.map} +0 -0
- /package/dist/{chunk-E2ZHGBAK.js.map → chunk-T2JSUEH6.js.map} +0 -0
- /package/dist/{chunk-227UFSEQ.js.map → chunk-TFA6HPOA.js.map} +0 -0
- /package/dist/{chunk-BA6WOZOT.js.map → chunk-TK4FHQRN.js.map} +0 -0
- /package/dist/{chunk-W27OW7AB.js.map → chunk-TKFSXDOB.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-CETXNLEX.js.map → chunk-UDZYNIDJ.js.map} +0 -0
- /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
- /package/dist/{chunk-E6TDQRF6.js.map → chunk-UYUCCQ46.js.map} +0 -0
- /package/dist/{chunk-OQDPBRQ6.js.map → chunk-VYXDUPYE.js.map} +0 -0
- /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
- /package/dist/{chunk-NB5BCFUY.js.map → chunk-WHHEPAO3.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-TX2UTLXC.js.map → chunk-WPDKBUWX.js.map} +0 -0
- /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-PFFZWDPE.js.map → chunk-XCOV45MO.js.map} +0 -0
- /package/dist/{chunk-5BCNEBEN.js.map → chunk-XPJNT6PI.js.map} +0 -0
- /package/dist/{chunk-SEDEKFYQ.js.map → chunk-XW2T4QAW.js.map} +0 -0
- /package/dist/{chunk-J7HFPA6O.js.map → chunk-Y63ZFP4X.js.map} +0 -0
- /package/dist/{chunk-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
- /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.js.map} +0 -0
- /package/dist/{chunk-BPJNF7J2.js.map → chunk-YNN26CIZ.js.map} +0 -0
- /package/dist/{chunk-VLXBE57O.js.map → chunk-YVGXH72Y.js.map} +0 -0
- /package/dist/{chunk-YQAXP5AC.js.map → chunk-YXLUTALO.js.map} +0 -0
- /package/dist/{chunk-DGGB65KC.js.map → chunk-Z7ACR6MJ.js.map} +0 -0
- /package/dist/{chunk-X35W4S3L.js.map → chunk-ZBEGS7OB.js.map} +0 -0
- /package/dist/{chunk-XUE46UYW.js.map → chunk-ZLN7AROH.js.map} +0 -0
- /package/dist/{chunk-HK32G473.js.map → chunk-ZWEZXVYH.js.map} +0 -0
- /package/dist/{contradiction-scan-NOYMFG66.js.map → contradiction-scan-GVD4JJ7B.js.map} +0 -0
- /package/dist/{first-start-migration-RC345GPL.js.map → first-start-migration-L3UFX5CU.js.map} +0 -0
- /package/dist/{resolution-VKATP2HT.js.map → local-llm-config.js.map} +0 -0
- /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
|
@@ -226,3 +226,23 @@ test("MCP engram.recall inputSchema advertises the `disclosure` enum", () => {
|
|
|
226
226
|
assert.ok(props && "disclosure" in props, "engram.recall inputSchema must declare 'disclosure'");
|
|
227
227
|
assert.deepStrictEqual(props?.disclosure?.enum, ["chunk", "section", "raw"]);
|
|
228
228
|
});
|
|
229
|
+
|
|
230
|
+
test("recallRequestSchema and MCP inputSchema carry the #1952 stateView boolean", () => {
|
|
231
|
+
const base = { query: "when did the job change?", sessionKey: "s" };
|
|
232
|
+
const ok = recallRequestSchema.safeParse({ ...base, stateView: true });
|
|
233
|
+
assert.equal(ok.success, true, "stateView: true must validate");
|
|
234
|
+
assert.equal(ok.success && ok.data.stateView, true);
|
|
235
|
+
const off = recallRequestSchema.safeParse({ ...base, stateView: false });
|
|
236
|
+
assert.equal(off.success && off.data.stateView, false);
|
|
237
|
+
const absent = recallRequestSchema.safeParse(base);
|
|
238
|
+
assert.equal(absent.success && absent.data.stateView, undefined);
|
|
239
|
+
const bad = recallRequestSchema.safeParse({ ...base, stateView: "yes" });
|
|
240
|
+
assert.equal(bad.success, false, "non-boolean stateView must be rejected");
|
|
241
|
+
|
|
242
|
+
const { service } = makeMcpRecallSpyService();
|
|
243
|
+
const server = new EngramMcpServer(service);
|
|
244
|
+
const tools = (server as unknown as { tools: Array<{ name: string; inputSchema: { properties?: Record<string, unknown> } }> }).tools;
|
|
245
|
+
const recallTool = tools.find((t) => t.name === "engram.recall");
|
|
246
|
+
const props = recallTool?.inputSchema?.properties as Record<string, { type?: string }> | undefined;
|
|
247
|
+
assert.ok(props && props.stateView?.type === "boolean", "engram.recall inputSchema must declare stateView: boolean");
|
|
248
|
+
});
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recall-internal state-view admission (issue #1952).
|
|
3
|
+
*
|
|
4
|
+
* Flag resolution, recent-scan successor-anchor admission, and the X-ray
|
|
5
|
+
* inject-seam annotation live here so recall-internal.ts stays under its
|
|
6
|
+
* ratchet ceiling. Callers keep one-line sites.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { isGenericRecallExcludedPath, type GenericRecallPathPolicy } from "./orchestration/generic-recall-paths.js";
|
|
10
|
+
import { isChangeOrientedQuery, type StateViewResult } from "./recall-state-view.js";
|
|
11
|
+
import { applyRecallStateViews } from "./recall-state-view-wire.js";
|
|
12
|
+
import { shouldFilterSupersededFromRecall } from "./temporal-supersession.js";
|
|
13
|
+
import type { MemoryFile } from "./types.js";
|
|
14
|
+
|
|
15
|
+
/** Config flag OR per-call override, gated on change intent; computed once for all branches. */
|
|
16
|
+
export function resolveRecallStateViewActive(
|
|
17
|
+
options: { stateView?: boolean },
|
|
18
|
+
config: { recallStateViews?: boolean },
|
|
19
|
+
query: string,
|
|
20
|
+
): boolean {
|
|
21
|
+
return (options.stateView === true || config.recallStateViews === true) && isChangeOrientedQuery(query);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Superseded-status filtering delegates to shouldFilterSupersededFromRecall
|
|
26
|
+
* so recent-scan and the QMD safety filter share semantics (kill switch,
|
|
27
|
+
* audit mode, PR #402).
|
|
28
|
+
*
|
|
29
|
+
* #1952: an active state view admits a superseded memory whose successor
|
|
30
|
+
* ALSO survives this admission filter — a successor excluded by status or
|
|
31
|
+
* path can never anchor (mirrors the filterSearchResultsByRecallSafety
|
|
32
|
+
* fixpoint). Anchors grow through admitted chain links, so iterate to a
|
|
33
|
+
* fixpoint.
|
|
34
|
+
*
|
|
35
|
+
* PR #713: when `as_of` is active, pass superseded candidates through here
|
|
36
|
+
* — boostSearchResults's `[valid_at, invalid_at)` evaluation is the
|
|
37
|
+
* authoritative historical gate. Other non-active statuses stay excluded.
|
|
38
|
+
*/
|
|
39
|
+
export function filterRecentScanMemoriesForStateView(
|
|
40
|
+
memories: readonly MemoryFile[],
|
|
41
|
+
config: GenericRecallPathPolicy,
|
|
42
|
+
supersessionOptions: { enabled: boolean; includeInRecall: boolean },
|
|
43
|
+
stateViewActive: boolean,
|
|
44
|
+
asOfMs: number | undefined,
|
|
45
|
+
): MemoryFile[] {
|
|
46
|
+
const asOfActive = typeof asOfMs === "number" && Number.isFinite(asOfMs);
|
|
47
|
+
let stateViewAdmittedIds: Set<string> | null = null;
|
|
48
|
+
if (stateViewActive && !asOfActive) {
|
|
49
|
+
stateViewAdmittedIds = new Set(
|
|
50
|
+
memories
|
|
51
|
+
.filter(
|
|
52
|
+
(m) =>
|
|
53
|
+
!isGenericRecallExcludedPath(m.path, config) &&
|
|
54
|
+
m.frontmatter.status !== "superseded" &&
|
|
55
|
+
!shouldFilterSupersededFromRecall(m.frontmatter, supersessionOptions),
|
|
56
|
+
)
|
|
57
|
+
.map((m) => m.frontmatter.id)
|
|
58
|
+
.filter((id): id is string => typeof id === "string" && id.length > 0),
|
|
59
|
+
);
|
|
60
|
+
for (let progress = true; progress; ) {
|
|
61
|
+
progress = false;
|
|
62
|
+
for (const m of memories) {
|
|
63
|
+
const id = m.frontmatter.id;
|
|
64
|
+
if (typeof id !== "string" || id.length === 0) continue;
|
|
65
|
+
if (stateViewAdmittedIds.has(id)) continue;
|
|
66
|
+
if (isGenericRecallExcludedPath(m.path, config)) continue;
|
|
67
|
+
if (m.frontmatter.status !== "superseded") continue;
|
|
68
|
+
if (!shouldFilterSupersededFromRecall(m.frontmatter, supersessionOptions)) continue;
|
|
69
|
+
if (stateViewAdmittedIds.has(m.frontmatter.supersededBy ?? "")) {
|
|
70
|
+
stateViewAdmittedIds.add(id);
|
|
71
|
+
progress = true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return memories.filter((m) => {
|
|
77
|
+
if (isGenericRecallExcludedPath(m.path, config)) return false;
|
|
78
|
+
const status = m.frontmatter.status;
|
|
79
|
+
if (!status || status === "active") return true;
|
|
80
|
+
if (status === "superseded") {
|
|
81
|
+
if (asOfActive) return true;
|
|
82
|
+
const id = m.frontmatter.id;
|
|
83
|
+
if (
|
|
84
|
+
stateViewAdmittedIds !== null &&
|
|
85
|
+
typeof id === "string" &&
|
|
86
|
+
stateViewAdmittedIds.has(id)
|
|
87
|
+
) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
// Include superseded memory only if the canonical gate says
|
|
91
|
+
// NOT to filter it (kill switch off or audit mode on).
|
|
92
|
+
return !shouldFilterSupersededFromRecall(m.frontmatter, supersessionOptions);
|
|
93
|
+
}
|
|
94
|
+
// Other non-active statuses (archived, retired, etc.) are
|
|
95
|
+
// excluded from the recent-scan path by default.
|
|
96
|
+
return false;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** Label the captured X-ray branch through the same inject-seam annotator. */
|
|
101
|
+
export function indexStateViewAnnotatedResults<T extends StateViewResult & { path: string; namespace?: string }>(
|
|
102
|
+
results: T[],
|
|
103
|
+
query: string,
|
|
104
|
+
config: unknown,
|
|
105
|
+
stateViewActive?: boolean,
|
|
106
|
+
asOfMs?: number,
|
|
107
|
+
): Map<string, T> {
|
|
108
|
+
return new Map(
|
|
109
|
+
applyRecallStateViews(results, query, config, stateViewActive, asOfMs).map((xr) => [
|
|
110
|
+
`${xr.namespace ?? ""}\0${xr.path}`,
|
|
111
|
+
xr,
|
|
112
|
+
]),
|
|
113
|
+
);
|
|
114
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* recall-state-view-asof.test.ts — issue #1952 historical-pinned state views.
|
|
3
|
+
*
|
|
4
|
+
* Proves an `asOf` recall before the successor's validity keeps the
|
|
5
|
+
* predecessor: the inject seam must not discard a predecessor merely
|
|
6
|
+
* because its successor is absent under the same pin, and a valid asOf
|
|
7
|
+
* result is never emptied. Pinned after the successor's validity, the
|
|
8
|
+
* same corpus returns the successor instead.
|
|
9
|
+
*
|
|
10
|
+
* Pre-fix bug: publishRecallResults annotated without the pin, so the
|
|
11
|
+
* "superseded never appears without its successor" contract dropped the
|
|
12
|
+
* predecessor at the seam and the valid historical snapshot rendered
|
|
13
|
+
* empty.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import assert from "node:assert/strict";
|
|
17
|
+
import os from "node:os";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { mkdtemp, mkdir, writeFile, rm } from "node:fs/promises";
|
|
20
|
+
import test from "node:test";
|
|
21
|
+
|
|
22
|
+
import { parseConfig } from "./config.js";
|
|
23
|
+
import { Orchestrator } from "./orchestrator.js";
|
|
24
|
+
import type { PluginConfig } from "./types.js";
|
|
25
|
+
|
|
26
|
+
const QUERY = "when did the job title change";
|
|
27
|
+
|
|
28
|
+
async function makeOrchestrator(
|
|
29
|
+
overrides: Partial<PluginConfig> = {},
|
|
30
|
+
): Promise<{ orchestrator: Orchestrator; memoryDir: string }> {
|
|
31
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-asof-"));
|
|
32
|
+
const config = parseConfig({
|
|
33
|
+
openaiApiKey: "sk-test",
|
|
34
|
+
memoryDir,
|
|
35
|
+
workspaceDir: path.join(memoryDir, "workspace"),
|
|
36
|
+
qmdEnabled: false,
|
|
37
|
+
embeddingFallbackEnabled: false,
|
|
38
|
+
multiGraphMemoryEnabled: false,
|
|
39
|
+
entityGraphEnabled: false,
|
|
40
|
+
timeGraphEnabled: false,
|
|
41
|
+
causalGraphEnabled: false,
|
|
42
|
+
extractionJudgeEnabled: false,
|
|
43
|
+
temporalSupersessionEnabled: true,
|
|
44
|
+
temporalSupersessionIncludeInRecall: false,
|
|
45
|
+
contradictionDetectionEnabled: false,
|
|
46
|
+
chunkingEnabled: false,
|
|
47
|
+
extractionMinChars: 0,
|
|
48
|
+
extractionMinImportanceLevel: "trivial",
|
|
49
|
+
inlineSourceAttributionEnabled: false,
|
|
50
|
+
initGateTimeoutMs: 200,
|
|
51
|
+
...overrides,
|
|
52
|
+
});
|
|
53
|
+
return { orchestrator: new Orchestrator(config), memoryDir };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Write the supersession pair with explicit validity windows: the
|
|
58
|
+
* successor (`sv-new`) becomes valid one hour after the pin, and the
|
|
59
|
+
* predecessor (`sv-old`) is superseded at that same instant. At the pin
|
|
60
|
+
* the predecessor is the live fact; the successor is not yet valid.
|
|
61
|
+
*/
|
|
62
|
+
async function writeTimedPair(memoryDir: string): Promise<{ pin: string; afterFlip: string }> {
|
|
63
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
64
|
+
const factsDir = path.join(memoryDir, "facts", today);
|
|
65
|
+
await mkdir(factsDir, { recursive: true });
|
|
66
|
+
const now = Date.now();
|
|
67
|
+
const pin = new Date(now + 60_000).toISOString();
|
|
68
|
+
const flipAt = new Date(now + 3_600_000).toISOString();
|
|
69
|
+
const afterFlip = new Date(now + 3_660_000).toISOString();
|
|
70
|
+
const successor = [
|
|
71
|
+
"---",
|
|
72
|
+
"id: sv-new",
|
|
73
|
+
"category: fact",
|
|
74
|
+
`created: ${new Date(now).toISOString()}`,
|
|
75
|
+
`updated: ${new Date(now).toISOString()}`,
|
|
76
|
+
"source: extraction",
|
|
77
|
+
"confidence: 0.8",
|
|
78
|
+
"confidenceTier: high",
|
|
79
|
+
"tags: []",
|
|
80
|
+
"status: active",
|
|
81
|
+
`validAt: ${flipAt}`,
|
|
82
|
+
"---",
|
|
83
|
+
"",
|
|
84
|
+
"Current job title: Staff Engineer.",
|
|
85
|
+
"",
|
|
86
|
+
];
|
|
87
|
+
const predecessor = [
|
|
88
|
+
"---",
|
|
89
|
+
"id: sv-old",
|
|
90
|
+
"category: fact",
|
|
91
|
+
`created: ${new Date(now).toISOString()}`,
|
|
92
|
+
`updated: ${new Date(now).toISOString()}`,
|
|
93
|
+
"source: extraction",
|
|
94
|
+
"confidence: 0.8",
|
|
95
|
+
"confidenceTier: high",
|
|
96
|
+
"tags: []",
|
|
97
|
+
"status: superseded",
|
|
98
|
+
"supersededBy: sv-new",
|
|
99
|
+
`supersededAt: ${flipAt}`,
|
|
100
|
+
"---",
|
|
101
|
+
"",
|
|
102
|
+
"Job title history: the job title used to be Senior Engineer.",
|
|
103
|
+
"",
|
|
104
|
+
];
|
|
105
|
+
await writeFile(
|
|
106
|
+
path.join(factsDir, "sv-new.md"),
|
|
107
|
+
`${successor.join("\n")}\n`,
|
|
108
|
+
"utf-8",
|
|
109
|
+
);
|
|
110
|
+
await writeFile(
|
|
111
|
+
path.join(factsDir, "sv-old.md"),
|
|
112
|
+
`${predecessor.join("\n")}\n`,
|
|
113
|
+
"utf-8",
|
|
114
|
+
);
|
|
115
|
+
return { pin, afterFlip };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
test("asOf before the successor's validity keeps the predecessor and never empties the snapshot (#1952)", async () => {
|
|
119
|
+
const { orchestrator, memoryDir } = await makeOrchestrator();
|
|
120
|
+
try {
|
|
121
|
+
const { pin } = await writeTimedPair(memoryDir);
|
|
122
|
+
const out = await orchestrator.recall(QUERY, "sess-sv-asof-before", {
|
|
123
|
+
stateView: true,
|
|
124
|
+
asOf: pin,
|
|
125
|
+
xrayCapture: true,
|
|
126
|
+
});
|
|
127
|
+
assert.ok(out.length > 0, "a valid asOf result must never be emptied");
|
|
128
|
+
assert.ok(
|
|
129
|
+
out.includes("Senior Engineer"),
|
|
130
|
+
`the pin-valid predecessor must survive the state-view seam, got:\n${out}`,
|
|
131
|
+
);
|
|
132
|
+
assert.ok(
|
|
133
|
+
!out.includes("Staff Engineer"),
|
|
134
|
+
`the successor is not yet valid at the pin and must stay filtered, got:\n${out}`,
|
|
135
|
+
);
|
|
136
|
+
assert.ok(
|
|
137
|
+
!out.includes("[superseded "),
|
|
138
|
+
`a predecessor current at the snapshot renders unlabeled, got:\n${out}`,
|
|
139
|
+
);
|
|
140
|
+
const snapshot = orchestrator.getLastXraySnapshot();
|
|
141
|
+
assert.ok(snapshot, "X-ray snapshot must be captured");
|
|
142
|
+
const labels = (snapshot!.results ?? [])
|
|
143
|
+
.map((r) => r.stateView)
|
|
144
|
+
.filter((label) => label !== undefined);
|
|
145
|
+
assert.deepEqual(
|
|
146
|
+
labels,
|
|
147
|
+
["current"],
|
|
148
|
+
`X-ray must label the pin-valid predecessor current-at-snapshot, got: ${JSON.stringify(labels)}`,
|
|
149
|
+
);
|
|
150
|
+
} finally {
|
|
151
|
+
await orchestrator.destroy();
|
|
152
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
test("asOf after the successor's validity returns the successor instead (#1952)", async () => {
|
|
157
|
+
const { orchestrator, memoryDir } = await makeOrchestrator();
|
|
158
|
+
try {
|
|
159
|
+
const { afterFlip } = await writeTimedPair(memoryDir);
|
|
160
|
+
const out = await orchestrator.recall(QUERY, "sess-sv-asof-after", {
|
|
161
|
+
stateView: true,
|
|
162
|
+
asOf: afterFlip,
|
|
163
|
+
});
|
|
164
|
+
assert.ok(
|
|
165
|
+
out.includes("Staff Engineer"),
|
|
166
|
+
`after the flip the successor is the valid fact, got:\n${out}`,
|
|
167
|
+
);
|
|
168
|
+
assert.ok(
|
|
169
|
+
!out.includes("Senior Engineer"),
|
|
170
|
+
`after the flip the predecessor's interval has ended, got:\n${out}`,
|
|
171
|
+
);
|
|
172
|
+
} finally {
|
|
173
|
+
await orchestrator.destroy();
|
|
174
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
175
|
+
}
|
|
176
|
+
});
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* recall-state-view-call.test.ts — issue #1952 per-call wiring.
|
|
3
|
+
*
|
|
4
|
+
* Proves the per-call `stateView` boolean carries through the FINAL
|
|
5
|
+
* annotation (publish inject seam + X-ray capture) on a fallback recall
|
|
6
|
+
* path, even when the global `recallStateViews` flag is false. QMD and
|
|
7
|
+
* embedding fallback are disabled so recall settles on the recent-scan
|
|
8
|
+
* branch — the same "every fallback path" guarantee the trust-map
|
|
9
|
+
* parity tests pin (#1577).
|
|
10
|
+
*
|
|
11
|
+
* Pre-fix bug: recallInternal computed an effective per-request flag
|
|
12
|
+
* (options.stateView OR config) for admission, but publishRecallResults
|
|
13
|
+
* and the X-ray annotator reread `config.recallStateViews` directly, so
|
|
14
|
+
* per-call true + global false admitted the superseded row upstream and
|
|
15
|
+
* then dropped its label/prefix at the inject seam.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import assert from "node:assert/strict";
|
|
19
|
+
import os from "node:os";
|
|
20
|
+
import path from "node:path";
|
|
21
|
+
import { mkdtemp, mkdir, writeFile, rm } from "node:fs/promises";
|
|
22
|
+
import test from "node:test";
|
|
23
|
+
|
|
24
|
+
import { parseConfig } from "./config.js";
|
|
25
|
+
import { Orchestrator } from "./orchestrator.js";
|
|
26
|
+
import type { PluginConfig } from "./types.js";
|
|
27
|
+
|
|
28
|
+
const QUERY = "when did the job title change";
|
|
29
|
+
const PREFIX = "[superseded 2026-08-01 by sv-new]";
|
|
30
|
+
|
|
31
|
+
async function makeOrchestrator(
|
|
32
|
+
overrides: Partial<PluginConfig> = {},
|
|
33
|
+
): Promise<{ orchestrator: Orchestrator; memoryDir: string }> {
|
|
34
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-sv-call-"));
|
|
35
|
+
const config = parseConfig({
|
|
36
|
+
openaiApiKey: "sk-test",
|
|
37
|
+
memoryDir,
|
|
38
|
+
workspaceDir: path.join(memoryDir, "workspace"),
|
|
39
|
+
qmdEnabled: false,
|
|
40
|
+
embeddingFallbackEnabled: false,
|
|
41
|
+
multiGraphMemoryEnabled: false,
|
|
42
|
+
entityGraphEnabled: false,
|
|
43
|
+
timeGraphEnabled: false,
|
|
44
|
+
causalGraphEnabled: false,
|
|
45
|
+
extractionJudgeEnabled: false,
|
|
46
|
+
temporalSupersessionEnabled: true,
|
|
47
|
+
temporalSupersessionIncludeInRecall: false,
|
|
48
|
+
contradictionDetectionEnabled: false,
|
|
49
|
+
chunkingEnabled: false,
|
|
50
|
+
extractionMinChars: 0,
|
|
51
|
+
extractionMinImportanceLevel: "trivial",
|
|
52
|
+
inlineSourceAttributionEnabled: false,
|
|
53
|
+
initGateTimeoutMs: 200,
|
|
54
|
+
...overrides,
|
|
55
|
+
});
|
|
56
|
+
return { orchestrator: new Orchestrator(config), memoryDir };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Write the supersession pair directly into the facts dir: an active
|
|
61
|
+
* successor (sv-new) and a superseded predecessor (sv-old) pointing at
|
|
62
|
+
* it. temporalSupersession is ON with includeInRecall=false, so sv-old
|
|
63
|
+
* reaches the candidate pool ONLY when a state view is active.
|
|
64
|
+
*/
|
|
65
|
+
async function writePair(memoryDir: string): Promise<void> {
|
|
66
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
67
|
+
const factsDir = path.join(memoryDir, "facts", today);
|
|
68
|
+
await mkdir(factsDir, { recursive: true });
|
|
69
|
+
const now = new Date().toISOString();
|
|
70
|
+
const successor = [
|
|
71
|
+
"---",
|
|
72
|
+
"id: sv-new",
|
|
73
|
+
"category: fact",
|
|
74
|
+
`created: ${now}`,
|
|
75
|
+
`updated: ${now}`,
|
|
76
|
+
"source: extraction",
|
|
77
|
+
"confidence: 0.8",
|
|
78
|
+
"confidenceTier: high",
|
|
79
|
+
"tags: []",
|
|
80
|
+
"status: active",
|
|
81
|
+
"---",
|
|
82
|
+
"",
|
|
83
|
+
"Current job title: Staff Engineer.",
|
|
84
|
+
"",
|
|
85
|
+
];
|
|
86
|
+
const predecessor = [
|
|
87
|
+
"---",
|
|
88
|
+
"id: sv-old",
|
|
89
|
+
"category: fact",
|
|
90
|
+
`created: ${now}`,
|
|
91
|
+
`updated: ${now}`,
|
|
92
|
+
"source: extraction",
|
|
93
|
+
"confidence: 0.8",
|
|
94
|
+
"confidenceTier: high",
|
|
95
|
+
"tags: []",
|
|
96
|
+
"status: superseded",
|
|
97
|
+
"supersededBy: sv-new",
|
|
98
|
+
"supersededAt: 2026-08-01",
|
|
99
|
+
"---",
|
|
100
|
+
"",
|
|
101
|
+
"Job title history: the job title used to be Senior Engineer.",
|
|
102
|
+
"",
|
|
103
|
+
];
|
|
104
|
+
await writeFile(
|
|
105
|
+
path.join(factsDir, "sv-new.md"),
|
|
106
|
+
`${successor.join("\n")}\n`,
|
|
107
|
+
"utf-8",
|
|
108
|
+
);
|
|
109
|
+
await writeFile(
|
|
110
|
+
path.join(factsDir, "sv-old.md"),
|
|
111
|
+
`${predecessor.join("\n")}\n`,
|
|
112
|
+
"utf-8",
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
test("per-call stateView=true labels the fallback-path injection and X-ray even when the global flag is false (#1952)", async () => {
|
|
117
|
+
const { orchestrator, memoryDir } = await makeOrchestrator();
|
|
118
|
+
try {
|
|
119
|
+
await writePair(memoryDir);
|
|
120
|
+
const out = await orchestrator.recall(QUERY, "sess-sv-call-true", {
|
|
121
|
+
stateView: true,
|
|
122
|
+
xrayCapture: true,
|
|
123
|
+
});
|
|
124
|
+
assert.ok(
|
|
125
|
+
out.includes(PREFIX),
|
|
126
|
+
`per-call true + global false must render the historical prefix, got:\n${out}`,
|
|
127
|
+
);
|
|
128
|
+
const snapshot = orchestrator.getLastXraySnapshot();
|
|
129
|
+
assert.ok(snapshot, "X-ray snapshot must be captured");
|
|
130
|
+
const labels = (snapshot!.results ?? [])
|
|
131
|
+
.map((r) => r.stateView)
|
|
132
|
+
.filter((label) => label !== undefined);
|
|
133
|
+
assert.ok(
|
|
134
|
+
labels.includes("historical") && labels.includes("current"),
|
|
135
|
+
`X-ray must carry stateView labels through the per-call flag, got: ${JSON.stringify(labels)}`,
|
|
136
|
+
);
|
|
137
|
+
} finally {
|
|
138
|
+
await orchestrator.destroy();
|
|
139
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test("precedence is OR: per-call stateView=false never disables a global recallStateViews=true (#1952)", async () => {
|
|
144
|
+
const { orchestrator, memoryDir } = await makeOrchestrator({
|
|
145
|
+
recallStateViews: true,
|
|
146
|
+
});
|
|
147
|
+
try {
|
|
148
|
+
await writePair(memoryDir);
|
|
149
|
+
const out = await orchestrator.recall(QUERY, "sess-sv-call-false", {
|
|
150
|
+
stateView: false,
|
|
151
|
+
});
|
|
152
|
+
assert.ok(
|
|
153
|
+
out.includes(PREFIX),
|
|
154
|
+
`call false + global true must still label (documented OR semantics), got:\n${out}`,
|
|
155
|
+
);
|
|
156
|
+
} finally {
|
|
157
|
+
await orchestrator.destroy();
|
|
158
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
test("default stays zero-diff: no flags, no labels, no prefix (#1952)", async () => {
|
|
163
|
+
const { orchestrator, memoryDir } = await makeOrchestrator();
|
|
164
|
+
try {
|
|
165
|
+
await writePair(memoryDir);
|
|
166
|
+
const out = await orchestrator.recall(QUERY, "sess-sv-call-off");
|
|
167
|
+
assert.ok(
|
|
168
|
+
!out.includes("[superseded "),
|
|
169
|
+
`no flags must keep the injection byte-identical (superseded row stays filtered), got:\n${out}`,
|
|
170
|
+
);
|
|
171
|
+
} finally {
|
|
172
|
+
await orchestrator.destroy();
|
|
173
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
174
|
+
}
|
|
175
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import { parseConfig } from "./config.js";
|
|
5
|
+
|
|
6
|
+
test("parseConfig: recallStateViews defaults false and honors exact disable values", () => {
|
|
7
|
+
const base = { memoryDir: "/tmp/remnic-sv-config-test" };
|
|
8
|
+
assert.equal(parseConfig(base).recallStateViews, false, "absent → false");
|
|
9
|
+
assert.equal(parseConfig({ ...base, recallStateViews: false }).recallStateViews, false);
|
|
10
|
+
assert.equal(parseConfig({ ...base, recallStateViews: 0 }).recallStateViews, false, "0 disables");
|
|
11
|
+
assert.equal(parseConfig({ ...base, recallStateViews: "false" }).recallStateViews, false, '"false" disables');
|
|
12
|
+
assert.equal(parseConfig({ ...base, recallStateViews: "0" }).recallStateViews, false, '"0" disables');
|
|
13
|
+
assert.equal(parseConfig({ ...base, recallStateViews: true }).recallStateViews, true);
|
|
14
|
+
assert.equal(parseConfig({ ...base, recallStateViews: 1 }).recallStateViews, true);
|
|
15
|
+
assert.equal(parseConfig({ ...base, recallStateViews: "true" }).recallStateViews, true, "CLI string 'true' enables");
|
|
16
|
+
});
|
|
@@ -64,3 +64,73 @@ test("superseded without successor is dropped", () => {
|
|
|
64
64
|
]);
|
|
65
65
|
assert.deepEqual(applyRecallStateViews([ORPHAN], CHANGE, ON), []);
|
|
66
66
|
});
|
|
67
|
+
|
|
68
|
+
test("#1952 per-call override: stateViewActive=true labels even when config is false", () => {
|
|
69
|
+
const OFF = { recallStateViews: false } as const;
|
|
70
|
+
const labeled = widenRecallStateViews([CURRENT], CHANGE, OFF, [HISTORICAL], true);
|
|
71
|
+
assert.deepEqual(
|
|
72
|
+
labeled.map((row) => [row.id, row.stateLabel]),
|
|
73
|
+
[
|
|
74
|
+
["new-job", "current"],
|
|
75
|
+
["old-job", "historical"],
|
|
76
|
+
],
|
|
77
|
+
"per-call true must widen and label against a global false",
|
|
78
|
+
);
|
|
79
|
+
assert.deepEqual(
|
|
80
|
+
applyRecallStateViews([CURRENT, HISTORICAL], CHANGE, OFF, true).map((row) => [
|
|
81
|
+
row.id,
|
|
82
|
+
row.stateLabel,
|
|
83
|
+
]),
|
|
84
|
+
[
|
|
85
|
+
["new-job", "current"],
|
|
86
|
+
["old-job", "historical"],
|
|
87
|
+
],
|
|
88
|
+
"inject seam must label on the threaded flag, not the config reread",
|
|
89
|
+
);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
test("#1952 precedence is OR: per-call false never disables a global true", () => {
|
|
93
|
+
const input = [CURRENT];
|
|
94
|
+
const labeled = widenRecallStateViews(input, CHANGE, ON, [HISTORICAL], false);
|
|
95
|
+
assert.equal(labeled.length, 2, "config true + call false still widens");
|
|
96
|
+
assert.equal(labeled[1]?.stateLabel, "historical");
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test("#1952 override true on a non-change query stays identity (change gate applies)", () => {
|
|
100
|
+
const input = [CURRENT, HISTORICAL];
|
|
101
|
+
assert.equal(widenRecallStateViews(input, NON_CHANGE, { recallStateViews: false }, [], true), input);
|
|
102
|
+
assert.equal(applyRecallStateViews(input, NON_CHANGE, { recallStateViews: false }, true), input);
|
|
103
|
+
assert.equal(input[0]?.stateLabel, undefined);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test("asOf mode keeps a pin-filtered predecessor and never widens the pool (#1952)", () => {
|
|
107
|
+
const pin = Date.parse("2026-08-05T00:00:00.000Z");
|
|
108
|
+
const predecessor = fact("old-job", {
|
|
109
|
+
status: "superseded",
|
|
110
|
+
supersededBy: "new-job",
|
|
111
|
+
supersededAt: "2026-08-10T00:00:00.000Z",
|
|
112
|
+
});
|
|
113
|
+
const labeled = widenRecallStateViews(
|
|
114
|
+
[predecessor],
|
|
115
|
+
CHANGE,
|
|
116
|
+
ON,
|
|
117
|
+
[CURRENT, HISTORICAL],
|
|
118
|
+
undefined,
|
|
119
|
+
pin,
|
|
120
|
+
);
|
|
121
|
+
assert.equal(labeled.length, 1, "pool rows must not enter a historical snapshot");
|
|
122
|
+
assert.equal(labeled[0]?.id, "old-job");
|
|
123
|
+
assert.equal(labeled[0]?.stateLabel, "current");
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("asOf mode threads through applyRecallStateViews without emptying the result (#1952)", () => {
|
|
127
|
+
const pin = Date.parse("2026-08-05T00:00:00.000Z");
|
|
128
|
+
const predecessor = fact("old-job", {
|
|
129
|
+
status: "superseded",
|
|
130
|
+
supersededBy: "new-job",
|
|
131
|
+
supersededAt: "2026-08-10T00:00:00.000Z",
|
|
132
|
+
});
|
|
133
|
+
const labeled = applyRecallStateViews([predecessor], CHANGE, ON, true, pin);
|
|
134
|
+
assert.equal(labeled.length, 1);
|
|
135
|
+
assert.equal(labeled[0]?.stateLabel, "current");
|
|
136
|
+
});
|
|
@@ -19,13 +19,31 @@ export function widenRecallStateViews<T extends StateViewResult>(
|
|
|
19
19
|
query: string,
|
|
20
20
|
config: unknown,
|
|
21
21
|
pool: readonly T[] = [],
|
|
22
|
+
/**
|
|
23
|
+
* #1952 — per-request effective flag (per-call `stateView` OR config,
|
|
24
|
+
* gated on change intent), computed once at recall entry and threaded
|
|
25
|
+
* through. When `true` it wins over the config read so a per-call
|
|
26
|
+
* override survives a global `false` at the inject seam. Callers that
|
|
27
|
+
* omit it keep the legacy config-only behavior.
|
|
28
|
+
*/
|
|
29
|
+
stateViewActive?: boolean,
|
|
30
|
+
/**
|
|
31
|
+
* #1952 — historical recall pin (epoch ms). When set, the pool is
|
|
32
|
+
* never widened (pool rows did not survive the asOf validity filter,
|
|
33
|
+
* so pulling a not-yet-valid successor into a historical snapshot
|
|
34
|
+
* would be wrong) and annotation runs in asOf mode: a predecessor is
|
|
35
|
+
* kept and labeled relative to the snapshot without requiring its
|
|
36
|
+
* successor.
|
|
37
|
+
*/
|
|
38
|
+
asOfMs?: number,
|
|
22
39
|
): T[] {
|
|
23
40
|
const raw =
|
|
24
41
|
typeof config === "object" && config !== null && "recallStateViews" in config
|
|
25
42
|
? config.recallStateViews
|
|
26
43
|
: undefined;
|
|
27
|
-
const enabled = parseRecallStateViews(raw);
|
|
44
|
+
const enabled = stateViewActive === true || parseRecallStateViews(raw);
|
|
28
45
|
if (!enabled || !isChangeOrientedQuery(query)) return results;
|
|
46
|
+
const asOfActive = typeof asOfMs === "number" && Number.isFinite(asOfMs);
|
|
29
47
|
|
|
30
48
|
const candidateIds = new Set<string>();
|
|
31
49
|
for (const result of results) {
|
|
@@ -35,15 +53,18 @@ export function widenRecallStateViews<T extends StateViewResult>(
|
|
|
35
53
|
|
|
36
54
|
const seen = new Set(candidateIds);
|
|
37
55
|
const extra: T[] = [];
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
56
|
+
if (!asOfActive) {
|
|
57
|
+
for (const item of pool) {
|
|
58
|
+
const id = resultStateViewId(item);
|
|
59
|
+
if (!id || seen.has(id)) continue;
|
|
60
|
+
if (!shouldWidenSuperseded(item.supersededBy, candidateIds)) continue;
|
|
61
|
+
extra.push(item);
|
|
62
|
+
seen.add(id);
|
|
63
|
+
}
|
|
44
64
|
}
|
|
45
65
|
|
|
46
66
|
return annotateStateView(extra.length > 0 ? results.concat(extra) : results, query, [], {
|
|
47
67
|
enabled: true,
|
|
68
|
+
...(asOfActive ? { asOfMs } : {}),
|
|
48
69
|
});
|
|
49
70
|
}
|
|
@@ -13,6 +13,8 @@ export function applyRecallStateViews<T extends StateViewResult>(
|
|
|
13
13
|
results: T[],
|
|
14
14
|
query: string,
|
|
15
15
|
config: unknown,
|
|
16
|
+
stateViewActive?: boolean,
|
|
17
|
+
asOfMs?: number,
|
|
16
18
|
): T[] {
|
|
17
|
-
return widenRecallStateViews(results, query, config);
|
|
19
|
+
return widenRecallStateViews(results, query, config, [], stateViewActive, asOfMs);
|
|
18
20
|
}
|