@remnic/core 9.69.33 → 9.69.34
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 +13 -11
- package/dist/access-admin-ops-surface.js +61 -56
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +62 -57
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +61 -56
- package/dist/access-cli.js +129 -125
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +2 -1
- package/dist/access-coding-context-resolution.js +3 -3
- package/dist/access-extraction-force-flush.d.ts +13 -11
- package/dist/access-extraction-force-flush.js +61 -56
- package/dist/access-health-types.d.ts +2 -1
- package/dist/access-http-briefing.d.ts +13 -11
- package/dist/access-http-briefing.js +62 -57
- package/dist/access-http-lcm-compaction.d.ts +13 -11
- package/dist/access-http-lifecycle-flush.d.ts +13 -11
- package/dist/access-http-offline-stream.d.ts +13 -11
- package/dist/access-http-query.d.ts +3 -2
- package/dist/access-http-query.js +63 -58
- package/dist/access-http.d.ts +14 -12
- package/dist/access-http.js +82 -78
- package/dist/access-identity-continuity-surface.d.ts +11 -9
- package/dist/access-identity-continuity-surface.js +61 -56
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +61 -56
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +70 -66
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-DMR-jOMS.d.ts → access-namespace-preflight-kXG8MvYx.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +61 -56
- package/dist/access-observe-transcript.d.ts +11 -9
- package/dist/access-observe-transcript.js +3 -3
- package/dist/access-observe-write-surface.d.ts +15 -13
- package/dist/access-observe-write-surface.js +61 -56
- package/dist/access-offline-manifest.d.ts +47 -11
- package/dist/access-offline-manifest.js +18 -16
- package/dist/access-operations-batch.js +64 -60
- package/dist/access-operations.d.ts +14 -12
- package/dist/access-operations.js +69 -65
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +61 -56
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +61 -56
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +61 -56
- package/dist/access-schema.d.ts +55 -13
- package/dist/access-schema.js +15 -1
- package/dist/{access-service-CJQoQvRa.d.ts → access-service-WUm2LnXZ.d.ts} +52 -50
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +61 -56
- package/dist/access-surface-catalog.d.ts +13 -11
- package/dist/access-surface-catalog.js +63 -58
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-memory-bridge.js +2 -2
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +12 -10
- package/dist/active-recall.js.map +1 -1
- package/dist/activity/digest.d.ts +2 -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 +2 -1
- package/dist/artifact-search.d.ts +2 -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 +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +11 -9
- package/dist/briefing-window.d.ts +3 -2
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +25 -24
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer-turn-helpers.d.ts +2 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +11 -10
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/calibration.js +3 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{capsule-merge-IPG4IOFP.js → capsule-merge-ZCXUPLNJ.js} +2 -2
- package/dist/{catalog-8O9KY9eA.d.ts → catalog-BaCx29iv.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +26 -25
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +2 -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-7BMXZCOT.js → chunk-2AU4D4HQ.js} +3 -3
- package/dist/{chunk-LTIZHLV7.js → chunk-2JCA2PQT.js} +2 -2
- package/dist/{chunk-XXIHX75O.js → chunk-2UZ5ZH6W.js} +3 -3
- package/dist/{chunk-QOIOACIE.js → chunk-326KUXIR.js} +15 -648
- package/dist/chunk-326KUXIR.js.map +1 -0
- package/dist/{chunk-P3SB5BNT.js → chunk-34QW2LK2.js} +2 -2
- package/dist/{chunk-EONF76DT.js → chunk-36UBSLFN.js} +2 -2
- package/dist/{chunk-DBQWVT2H.js → chunk-3CBI2ZSA.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-TCUKRAMK.js → chunk-4JVQRFZD.js} +7 -7
- package/dist/{chunk-22FVR2KE.js → chunk-4MIS4CQW.js} +6 -2
- package/dist/chunk-4MIS4CQW.js.map +1 -0
- package/dist/{chunk-PYLL63BF.js → chunk-4PB2MBY6.js} +9 -9
- package/dist/{chunk-UUQG7HAD.js → chunk-4WCNPQQ5.js} +4 -4
- package/dist/{chunk-UGPUYIET.js → chunk-5A7ZUOBA.js} +220 -399
- package/dist/chunk-5A7ZUOBA.js.map +1 -0
- package/dist/chunk-5HYUUFMQ.js +1280 -0
- package/dist/chunk-5HYUUFMQ.js.map +1 -0
- package/dist/{chunk-H4VH5VIB.js → chunk-5QBDLMGG.js} +2 -2
- package/dist/{chunk-RKBLRTNT.js → chunk-5SDSVX7N.js} +2 -2
- package/dist/{chunk-DGGB65KC.js → chunk-5THU7NFP.js} +3 -3
- package/dist/{chunk-N7RWREIQ.js → chunk-65RENJGB.js} +6 -1
- package/dist/chunk-65RENJGB.js.map +1 -0
- package/dist/{chunk-BPJNF7J2.js → chunk-6CCRSQWT.js} +2 -2
- package/dist/{chunk-XXE5P6HJ.js → chunk-6XYC7NM4.js} +2 -2
- package/dist/{chunk-J7HFPA6O.js → chunk-6YAIN5XJ.js} +2 -2
- package/dist/{chunk-I5DZ3WGR.js → chunk-757NP436.js} +3 -3
- package/dist/{chunk-2C3S7J2S.js → chunk-7CAY3YKP.js} +741 -28
- package/dist/chunk-7CAY3YKP.js.map +1 -0
- package/dist/{chunk-E6TDQRF6.js → chunk-7J2CGXG3.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-R3HKWWUB.js → chunk-A7WOWDZK.js} +2 -2
- package/dist/{chunk-6N3TQFZU.js → chunk-AIKTQVV3.js} +3 -3
- package/dist/{chunk-CGC5UQCF.js → chunk-AKE4GGQ3.js} +2 -2
- package/dist/{chunk-W27OW7AB.js → chunk-APFKZVJS.js} +2 -2
- package/dist/{chunk-B325AGLK.js → chunk-AQIRQUCP.js} +2 -2
- package/dist/{chunk-S7T2TY65.js → chunk-AXFR2NQ5.js} +3 -3
- package/dist/{chunk-FCSZ4K2X.js → chunk-BJJWRWER.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-N57A4KPV.js → chunk-C2BFTYD7.js} +2 -2
- package/dist/{chunk-3JVLGJCY.js → chunk-C6KRO3SU.js} +2 -2
- package/dist/{chunk-Q726HSJO.js → chunk-CRUFVJOX.js} +16 -15
- package/dist/chunk-CRUFVJOX.js.map +1 -0
- package/dist/{chunk-X35W4S3L.js → chunk-D3IZCN5P.js} +4 -4
- package/dist/{chunk-44T3Y7SZ.js → chunk-EJIEQOPB.js} +5 -5
- package/dist/{chunk-ET356KSB.js → chunk-F4TWWUMP.js} +2 -2
- package/dist/{chunk-CLLPJ6QT.js → chunk-FQXJAC3T.js} +2 -2
- package/dist/{chunk-DD5JFCWM.js → chunk-GCBIXUPT.js} +2 -2
- package/dist/{chunk-N2ZNPHA3.js → chunk-IFFLUCCU.js} +2 -2
- package/dist/{chunk-RHQMKJFG.js → chunk-ISYZ5DUI.js} +51 -47
- package/dist/{chunk-RHQMKJFG.js.map → chunk-ISYZ5DUI.js.map} +1 -1
- package/dist/{chunk-PFFZWDPE.js → chunk-JZDH2ZZK.js} +3 -3
- package/dist/{chunk-TX2UTLXC.js → chunk-K6IPSW5B.js} +2 -2
- package/dist/{chunk-4MHYKEOM.js → chunk-KDJHLOZP.js} +10 -10
- package/dist/{chunk-KCB7F4J7.js → chunk-KYGOQV37.js} +2 -2
- package/dist/{chunk-JEIXTYVG.js → chunk-L2QLDZJC.js} +46 -17
- package/dist/chunk-L2QLDZJC.js.map +1 -0
- package/dist/{chunk-A7XEPMQ6.js → chunk-LAVJC57X.js} +3 -3
- package/dist/chunk-LAVJC57X.js.map +1 -0
- package/dist/{chunk-VZWXFXLX.js → chunk-LMCD5W5B.js} +2 -2
- package/dist/{chunk-3QQTXYZ6.js → chunk-LSLCFCCQ.js} +2 -1
- package/dist/chunk-LSLCFCCQ.js.map +1 -0
- package/dist/{chunk-MKD3OMPS.js → chunk-M3MYMWXG.js} +2 -2
- package/dist/{chunk-PL7FYKHT.js → chunk-MMG5K6XJ.js} +2 -2
- package/dist/{chunk-VGXM5B4H.js → chunk-MNIPH6LD.js} +2 -2
- package/dist/{chunk-E6JA6XWY.js → chunk-ND2O2PVN.js} +1013 -1317
- package/dist/chunk-ND2O2PVN.js.map +1 -0
- package/dist/chunk-NPNSKE76.js +220 -0
- package/dist/chunk-NPNSKE76.js.map +1 -0
- package/dist/{chunk-XU6OEECT.js → chunk-OQQXGYMX.js} +3 -3
- package/dist/{chunk-DB5TGMLZ.js → chunk-OZUXKUPD.js} +6 -4
- package/dist/{chunk-DB5TGMLZ.js.map → chunk-OZUXKUPD.js.map} +1 -1
- package/dist/chunk-PCEYGOSL.js +66 -0
- package/dist/chunk-PCEYGOSL.js.map +1 -0
- package/dist/{chunk-LSYDG6MJ.js → chunk-PEXW2JCK.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-SO7SV523.js → chunk-Q6LCCIZN.js} +1 -1
- package/dist/chunk-Q6LCCIZN.js.map +1 -0
- package/dist/{chunk-MOZXTRC2.js → chunk-QF4J3KMV.js} +19 -19
- package/dist/{chunk-JGHXXQ2G.js → chunk-QLJ6762U.js} +2 -2
- package/dist/{chunk-XOVKXJEP.js → chunk-R3TLVTWW.js} +3 -3
- package/dist/{chunk-CETXNLEX.js → chunk-RQO3J4MR.js} +2 -2
- package/dist/{chunk-5NANRSCD.js → chunk-RR7G2X7C.js} +5 -5
- package/dist/{chunk-DCJ3YFIC.js → chunk-S2ULTQZR.js} +2 -2
- package/dist/{chunk-EQHDH4C2.js → chunk-S76KRJDG.js} +3 -3
- 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-MFDTVQJX.js → chunk-SZWEDG3H.js} +12 -6
- package/dist/chunk-SZWEDG3H.js.map +1 -0
- package/dist/{chunk-E2ZHGBAK.js → chunk-T2JSUEH6.js} +2 -2
- package/dist/{chunk-JSN44KIB.js → chunk-T2YFZ27G.js} +9 -9
- package/dist/{chunk-227UFSEQ.js → chunk-TFA6HPOA.js} +2 -2
- package/dist/{chunk-BA6WOZOT.js → chunk-TK4FHQRN.js} +4 -4
- package/dist/chunk-TLHNF6GA.js +647 -0
- package/dist/chunk-TLHNF6GA.js.map +1 -0
- package/dist/{chunk-NB5BCFUY.js → chunk-TWYTGIBR.js} +4 -4
- package/dist/{chunk-FDLDOEO6.js → chunk-UBG4GAEP.js} +51 -6
- package/dist/chunk-UBG4GAEP.js.map +1 -0
- package/dist/{chunk-MWFGUESQ.js → chunk-UEZKN6VR.js} +2 -2
- package/dist/{chunk-H5AFCNGA.js → chunk-UJX4I26O.js} +2 -2
- package/dist/{chunk-BLUYQFRH.js → chunk-VELCIWJZ.js} +15 -11
- package/dist/chunk-VELCIWJZ.js.map +1 -0
- package/dist/{chunk-PBGVVDLY.js → chunk-VIZR45AN.js} +2 -2
- package/dist/{chunk-ZG74PWRW.js → chunk-VZAKYDMJ.js} +2 -2
- package/dist/{chunk-JTH2SE6B.js → chunk-W5BLTZZJ.js} +8 -8
- package/dist/chunk-W6IJMWTZ.js +72 -0
- package/dist/chunk-W6IJMWTZ.js.map +1 -0
- package/dist/{chunk-H3TKENU4.js → chunk-WIKO4SCR.js} +5 -5
- package/dist/{chunk-YFLLGRXO.js → chunk-X2QPKLPL.js} +2 -2
- package/dist/{chunk-MN3LK3KN.js → chunk-X424T5JQ.js} +2 -2
- package/dist/{chunk-5BCNEBEN.js → chunk-XPJNT6PI.js} +4 -4
- package/dist/{chunk-2JVJ7UHC.js → chunk-XQU3CPF2.js} +4 -2
- package/dist/chunk-XQU3CPF2.js.map +1 -0
- package/dist/chunk-XW2T4QAW.js +1 -0
- 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-RC5DXXWC.js → chunk-YM7YN37H.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-OQDPBRQ6.js → chunk-Z7YDVHDI.js} +2 -2
- 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-HV7OY4DM.js → chunk-ZMKYCFJ7.js} +640 -199
- package/dist/chunk-ZMKYCFJ7.js.map +1 -0
- package/dist/{chunk-HK32G473.js → chunk-ZWEZXVYH.js} +2 -2
- package/dist/{cli-D57e2Mqt.d.ts → cli-5mTYh1Tn.d.ts} +5 -5
- package/dist/cli-fallback.d.ts +11 -4
- package/dist/cli-fallback.js +5 -1
- package/dist/cli.d.ts +15 -13
- package/dist/cli.js +102 -98
- package/dist/coding/export-okf-codegraph.d.ts +2 -1
- package/dist/coding/export-okf-codegraph.js +31 -29
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/coding/pre-action-gate.d.ts +2 -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 +3 -2
- package/dist/compounding/engine.js +26 -25
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +12 -10
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +25 -24
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +27 -26
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +4 -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 +2 -1
- package/dist/convergence-refresh.d.ts +3 -2
- package/dist/convergence-refresh.js +27 -26
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/backend.js +3 -3
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.js +2 -2
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +2 -1
- package/dist/corpus-watermark.js +28 -27
- package/dist/cross-lingual-recall.d.ts +2 -1
- package/dist/day-summary.d.ts +2 -1
- package/dist/deep-recall-http-glue.d.ts +13 -11
- package/dist/deep-recall-http-glue.js +12 -2
- package/dist/deep-recall-mcp-tools.d.ts +13 -11
- package/dist/deep-recall-policy-llm.d.ts +2 -1
- package/dist/deep-recall-policy-llm.js +4 -3
- package/dist/deep-recall-seeds.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/dependency-propagation-config.d.ts +2 -1
- package/dist/{dependency-propagation-delivery-CmniEsUK.d.ts → dependency-propagation-delivery-CDQCxNll.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-origin-fields.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +25 -24
- package/dist/entity-schema.d.ts +2 -1
- package/dist/episodic-context.d.ts +2 -1
- package/dist/eval-trajectory-contracts.d.ts +2 -1
- package/dist/eval-trajectory-store.d.ts +2 -1
- package/dist/eval-trajectory.d.ts +2 -1
- package/dist/explicit-capture.d.ts +11 -9
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +13 -11
- package/dist/external-wiki-access.js +62 -57
- package/dist/external-wiki-collection-registration.d.ts +2 -1
- package/dist/external-wiki-collection.d.ts +2 -1
- package/dist/external-wiki-mcp-tools.d.ts +13 -11
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-faithfulness.js +4 -3
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-judge.js +5 -4
- package/dist/extraction-liveness.d.ts +2 -1
- package/dist/extraction-normalization.d.ts +2 -1
- package/dist/extraction-prompt.d.ts +2 -1
- package/dist/extraction-source-grounding-rules.d.ts +2 -1
- package/dist/extraction-source-grounding.d.ts +2 -1
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +36 -34
- package/dist/fallback-llm.d.ts +2 -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-CqAZyXKX.d.ts +23 -0
- package/dist/graph-append-error.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-jsonl.d.ts +2 -1
- package/dist/graph-path-reconstruction.d.ts +2 -1
- package/dist/graph-path-scoring.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph.d.ts +2 -1
- package/dist/harmonic-retrieval.js +2 -2
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/importers/test-utils.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/{index-BTAsSkPG.d.ts → index-BNluTxBp.d.ts} +2 -2
- package/dist/index.d.ts +302 -245
- package/dist/index.js +307 -205
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +4 -4
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +4 -1
- package/dist/local-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/location/index.d.ts +4 -3
- package/dist/location/index.js +28 -27
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +25 -24
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +25 -24
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +26 -25
- package/dist/{maintenance-DCvQGTzL.d.ts → maintenance-8hmWOMY_.d.ts} +378 -4
- package/dist/mcp-memory-inspector-app.d.ts +13 -11
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-controller.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-snapshot.d.ts +2 -1
- package/dist/memory-subject-cli.d.ts +13 -11
- package/dist/memory-subject.d.ts +13 -11
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/migrate/from-engram.js +2 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +26 -25
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +25 -24
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/network/tailscale.js +2 -2
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +6 -6
- package/dist/operator-doctor-corpus.d.ts +2 -1
- package/dist/operator-doctor-corpus.js +29 -28
- package/dist/operator-doctor-replica.d.ts +2 -1
- package/dist/operator-toolkit.d.ts +4 -3
- package/dist/operator-toolkit.js +43 -41
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +43 -38
- package/dist/{orchestrator-CvCsp1tz.d.ts → orchestrator-BUd_3Q86.d.ts} +17 -29
- package/dist/orchestrator.d.ts +11 -9
- package/dist/orchestrator.js +133 -127
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-JAdwKBS7.d.ts → pipeline-Dv1Bv0ma.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/{public-http-h-yWu9rj.d.ts → public-http-L-IymRBN.d.ts} +1 -1
- package/dist/{qmd-Cvw9RWKr.d.ts → qmd-Mj508lHA.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-navigate-access.d.ts +2 -1
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.d.ts +2 -1
- package/dist/recall-navigate-disclosure.js +1 -1
- package/dist/recall-navigate.d.ts +2 -1
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-planner-llm.d.ts +2 -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 +56 -0
- package/dist/recall-state-view-admission.js +39 -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 +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +9 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +11 -2
- package/dist/reconcile/cursor.js +6 -4
- package/dist/reconcile/cursor.js.map +1 -1
- package/dist/reconcile/manifest.d.ts +37 -2
- package/dist/reconcile/manifest.js +15 -5
- package/dist/reconcile/plan.d.ts +2 -1
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/replica-divergence.d.ts +2 -1
- package/dist/replica-peers-config.d.ts +2 -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 +2 -1
- package/dist/resume-bundles.js +13 -11
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/runtime/child-process.d.ts +1 -1
- package/dist/runtime/child-process.js +1 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/salvage-envelope.js +2 -2
- package/dist/{scope-profiles-BShpTPeV.d.ts → scope-profiles-B6BGVbxm.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +7 -7
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +11 -11
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-CusOpe9F.d.ts → semantic-consolidation-J-598F5M.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +26 -25
- package/dist/semantic-rule-promotion.js +25 -24
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +25 -24
- package/dist/{service-BbuVh1eS.d.ts → service-ZQkJ52cz.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +2 -1
- package/dist/signal.d.ts +2 -1
- package/dist/source-agent-qualifier.d.ts +2 -1
- package/dist/source-agent-qualifier.js +34 -32
- package/dist/standup/build.js +25 -24
- package/dist/{storage-BBLLuVTF.d.ts → storage-CU_hZUgP.d.ts} +67 -6
- package/dist/storage.d.ts +4 -3
- package/dist/storage.js +24 -23
- package/dist/subject-config.d.ts +2 -1
- package/dist/subject-config.js +2 -2
- package/dist/summarizer.d.ts +2 -1
- package/dist/summarizer.js +5 -5
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/support-passport/index.d.ts +49 -15
- package/dist/support-passport/index.js +69 -60
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -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 +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/capsule-import.js +1 -1
- package/dist/transfer/export-okf.d.ts +2 -1
- package/dist/transfer/export-okf.js +26 -25
- package/dist/transfer/types.d.ts +24 -24
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-igV4-sbB.d.ts → types-BGxTvLBO.d.ts} +58 -13
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +25 -24
- package/dist/who-knows-cli.d.ts +13 -11
- package/dist/who-knows-cli.js +26 -25
- package/dist/who-knows.d.ts +13 -11
- package/dist/who-knows.js +25 -24
- package/dist/write-envelope.d.ts +4 -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 +3 -1
- package/src/config.ts +4 -0
- 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.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 +7 -7
- 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-7BMXZCOT.js.map → chunk-2AU4D4HQ.js.map} +0 -0
- /package/dist/{chunk-LTIZHLV7.js.map → chunk-2JCA2PQT.js.map} +0 -0
- /package/dist/{chunk-XXIHX75O.js.map → chunk-2UZ5ZH6W.js.map} +0 -0
- /package/dist/{chunk-P3SB5BNT.js.map → chunk-34QW2LK2.js.map} +0 -0
- /package/dist/{chunk-EONF76DT.js.map → chunk-36UBSLFN.js.map} +0 -0
- /package/dist/{chunk-DBQWVT2H.js.map → chunk-3CBI2ZSA.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-TCUKRAMK.js.map → chunk-4JVQRFZD.js.map} +0 -0
- /package/dist/{chunk-PYLL63BF.js.map → chunk-4PB2MBY6.js.map} +0 -0
- /package/dist/{chunk-UUQG7HAD.js.map → chunk-4WCNPQQ5.js.map} +0 -0
- /package/dist/{chunk-H4VH5VIB.js.map → chunk-5QBDLMGG.js.map} +0 -0
- /package/dist/{chunk-RKBLRTNT.js.map → chunk-5SDSVX7N.js.map} +0 -0
- /package/dist/{chunk-DGGB65KC.js.map → chunk-5THU7NFP.js.map} +0 -0
- /package/dist/{chunk-BPJNF7J2.js.map → chunk-6CCRSQWT.js.map} +0 -0
- /package/dist/{chunk-XXE5P6HJ.js.map → chunk-6XYC7NM4.js.map} +0 -0
- /package/dist/{chunk-J7HFPA6O.js.map → chunk-6YAIN5XJ.js.map} +0 -0
- /package/dist/{chunk-I5DZ3WGR.js.map → chunk-757NP436.js.map} +0 -0
- /package/dist/{chunk-E6TDQRF6.js.map → chunk-7J2CGXG3.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-R3HKWWUB.js.map → chunk-A7WOWDZK.js.map} +0 -0
- /package/dist/{chunk-6N3TQFZU.js.map → chunk-AIKTQVV3.js.map} +0 -0
- /package/dist/{chunk-CGC5UQCF.js.map → chunk-AKE4GGQ3.js.map} +0 -0
- /package/dist/{chunk-W27OW7AB.js.map → chunk-APFKZVJS.js.map} +0 -0
- /package/dist/{chunk-B325AGLK.js.map → chunk-AQIRQUCP.js.map} +0 -0
- /package/dist/{chunk-S7T2TY65.js.map → chunk-AXFR2NQ5.js.map} +0 -0
- /package/dist/{chunk-FCSZ4K2X.js.map → chunk-BJJWRWER.js.map} +0 -0
- /package/dist/{chunk-JT3EB7ZL.js.map → chunk-BNGHPYZU.js.map} +0 -0
- /package/dist/{chunk-N57A4KPV.js.map → chunk-C2BFTYD7.js.map} +0 -0
- /package/dist/{chunk-3JVLGJCY.js.map → chunk-C6KRO3SU.js.map} +0 -0
- /package/dist/{chunk-X35W4S3L.js.map → chunk-D3IZCN5P.js.map} +0 -0
- /package/dist/{chunk-44T3Y7SZ.js.map → chunk-EJIEQOPB.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-DD5JFCWM.js.map → chunk-GCBIXUPT.js.map} +0 -0
- /package/dist/{chunk-N2ZNPHA3.js.map → chunk-IFFLUCCU.js.map} +0 -0
- /package/dist/{chunk-PFFZWDPE.js.map → chunk-JZDH2ZZK.js.map} +0 -0
- /package/dist/{chunk-TX2UTLXC.js.map → chunk-K6IPSW5B.js.map} +0 -0
- /package/dist/{chunk-4MHYKEOM.js.map → chunk-KDJHLOZP.js.map} +0 -0
- /package/dist/{chunk-KCB7F4J7.js.map → chunk-KYGOQV37.js.map} +0 -0
- /package/dist/{chunk-VZWXFXLX.js.map → chunk-LMCD5W5B.js.map} +0 -0
- /package/dist/{chunk-MKD3OMPS.js.map → chunk-M3MYMWXG.js.map} +0 -0
- /package/dist/{chunk-PL7FYKHT.js.map → chunk-MMG5K6XJ.js.map} +0 -0
- /package/dist/{chunk-VGXM5B4H.js.map → chunk-MNIPH6LD.js.map} +0 -0
- /package/dist/{chunk-XU6OEECT.js.map → chunk-OQQXGYMX.js.map} +0 -0
- /package/dist/{chunk-LSYDG6MJ.js.map → chunk-PEXW2JCK.js.map} +0 -0
- /package/dist/{chunk-MOZXTRC2.js.map → chunk-QF4J3KMV.js.map} +0 -0
- /package/dist/{chunk-JGHXXQ2G.js.map → chunk-QLJ6762U.js.map} +0 -0
- /package/dist/{chunk-XOVKXJEP.js.map → chunk-R3TLVTWW.js.map} +0 -0
- /package/dist/{chunk-CETXNLEX.js.map → chunk-RQO3J4MR.js.map} +0 -0
- /package/dist/{chunk-5NANRSCD.js.map → chunk-RR7G2X7C.js.map} +0 -0
- /package/dist/{chunk-DCJ3YFIC.js.map → chunk-S2ULTQZR.js.map} +0 -0
- /package/dist/{chunk-EQHDH4C2.js.map → chunk-S76KRJDG.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-JSN44KIB.js.map → chunk-T2YFZ27G.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-NB5BCFUY.js.map → chunk-TWYTGIBR.js.map} +0 -0
- /package/dist/{chunk-MWFGUESQ.js.map → chunk-UEZKN6VR.js.map} +0 -0
- /package/dist/{chunk-H5AFCNGA.js.map → chunk-UJX4I26O.js.map} +0 -0
- /package/dist/{chunk-PBGVVDLY.js.map → chunk-VIZR45AN.js.map} +0 -0
- /package/dist/{chunk-ZG74PWRW.js.map → chunk-VZAKYDMJ.js.map} +0 -0
- /package/dist/{chunk-JTH2SE6B.js.map → chunk-W5BLTZZJ.js.map} +0 -0
- /package/dist/{chunk-H3TKENU4.js.map → chunk-WIKO4SCR.js.map} +0 -0
- /package/dist/{chunk-YFLLGRXO.js.map → chunk-X2QPKLPL.js.map} +0 -0
- /package/dist/{chunk-MN3LK3KN.js.map → chunk-X424T5JQ.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-D223ZDQV.js.map → chunk-YEDVOYL2.js.map} +0 -0
- /package/dist/{chunk-RC5DXXWC.js.map → chunk-YM7YN37H.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-OQDPBRQ6.js.map → chunk-Z7YDVHDI.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 → recall-state-view-admission.js.map} +0 -0
- /package/dist/{tier-stats-KA6OZX2C.js.map → tier-stats-VK5PCO2L.js.map} +0 -0
package/src/access-mcp.test.ts
CHANGED
|
@@ -263,6 +263,79 @@ test("MCP memory write tools reject malformed arguments before dispatch", async
|
|
|
263
263
|
}
|
|
264
264
|
});
|
|
265
265
|
|
|
266
|
+
test("MCP memory write tools admit project-shaped category aliases (#2780)", async () => {
|
|
267
|
+
for (const toolName of ["engram.memory_store", "engram.suggestion_submit"]) {
|
|
268
|
+
let received: Record<string, unknown> | undefined;
|
|
269
|
+
const service = {
|
|
270
|
+
...makeMockService(),
|
|
271
|
+
memoryStore: async (req: Record<string, unknown>) => {
|
|
272
|
+
received = req;
|
|
273
|
+
return {
|
|
274
|
+
schemaVersion: 1,
|
|
275
|
+
operation: "memory_store",
|
|
276
|
+
namespace: "default",
|
|
277
|
+
dryRun: true,
|
|
278
|
+
accepted: true,
|
|
279
|
+
queued: false,
|
|
280
|
+
status: "validated",
|
|
281
|
+
};
|
|
282
|
+
},
|
|
283
|
+
suggestionSubmit: async (req: Record<string, unknown>) => {
|
|
284
|
+
received = req;
|
|
285
|
+
return {
|
|
286
|
+
schemaVersion: 1,
|
|
287
|
+
operation: "suggestion_submit",
|
|
288
|
+
namespace: "default",
|
|
289
|
+
dryRun: true,
|
|
290
|
+
accepted: true,
|
|
291
|
+
queued: false,
|
|
292
|
+
status: "validated",
|
|
293
|
+
};
|
|
294
|
+
},
|
|
295
|
+
} as unknown as EngramAccessService;
|
|
296
|
+
const server = new EngramMcpServer(service);
|
|
297
|
+
|
|
298
|
+
const response = await server.handleRequest(
|
|
299
|
+
makeToolRequest(toolName, {
|
|
300
|
+
content: "valid durable content",
|
|
301
|
+
category: "project_state",
|
|
302
|
+
dryRun: true,
|
|
303
|
+
})
|
|
304
|
+
);
|
|
305
|
+
const result = (response as Record<string, unknown> & { result?: { isError?: boolean } }).result;
|
|
306
|
+
|
|
307
|
+
assert.equal(result?.isError, false, `${toolName} must admit project-shaped category aliases`);
|
|
308
|
+
assert.equal(
|
|
309
|
+
received?.category,
|
|
310
|
+
"project_state",
|
|
311
|
+
`${toolName} must forward the alias; the write surface coerces it to "fact"`
|
|
312
|
+
);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
test("MCP memory_store invalid category error names valid categories and the fact hint (#2780)", async () => {
|
|
317
|
+
const server = new EngramMcpServer(makeMockService());
|
|
318
|
+
|
|
319
|
+
for (const bad of ["vibe", "projection", "project_typo"]) {
|
|
320
|
+
const response = await server.handleRequest(
|
|
321
|
+
makeToolRequest("engram.memory_store", {
|
|
322
|
+
content: "valid durable content",
|
|
323
|
+
category: bad,
|
|
324
|
+
dryRun: true,
|
|
325
|
+
})
|
|
326
|
+
);
|
|
327
|
+
const result = (response as Record<string, unknown> & {
|
|
328
|
+
result?: { isError?: boolean; content?: Array<{ text?: string }> };
|
|
329
|
+
}).result;
|
|
330
|
+
|
|
331
|
+
assert.equal(result?.isError, true, `${bad} must reject, not coerce`);
|
|
332
|
+
const text = (result?.content ?? []).map((part) => part.text ?? "").join("\n");
|
|
333
|
+
assert.match(text, /must be one of: /, "error must name the valid categories");
|
|
334
|
+
assert.match(text, /reasoning_trace/, "the full valid list must be present");
|
|
335
|
+
assert.match(text, /for project state\/facts use "fact"/, "error must carry the fact hint");
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
|
|
266
339
|
test("MCP write tools accept and forward client-injected cwd/projectTag (#1434)", async () => {
|
|
267
340
|
for (const toolName of ["engram.memory_store", "engram.suggestion_submit"]) {
|
|
268
341
|
let received: Record<string, unknown> | undefined;
|
package/src/access-mcp.ts
CHANGED
|
@@ -543,10 +543,7 @@ export class EngramMcpServer {
|
|
|
543
543
|
topK: { type: "number" },
|
|
544
544
|
mode: { type: "string", enum: ["auto", "no_recall", "minimal", "full", "graph_mode"] },
|
|
545
545
|
includeDebug: { type: "boolean" },
|
|
546
|
-
//
|
|
547
|
-
// omitted. Section/raw payload shaping ships in PR 2; this PR
|
|
548
|
-
// wires the field end-to-end so clients can already pass it
|
|
549
|
-
// without it being silently dropped.
|
|
546
|
+
// Disclosure depth (issue #677); default `chunk` when omitted.
|
|
550
547
|
disclosure: { type: "string", enum: ["chunk", "section", "raw"] },
|
|
551
548
|
cwd: { type: "string", description: "Working directory for auto git-context resolution." },
|
|
552
549
|
projectTag: {
|
|
@@ -566,8 +563,11 @@ export class EngramMcpServer {
|
|
|
566
563
|
tagMatch: {
|
|
567
564
|
type: "string",
|
|
568
565
|
enum: ["any", "all"],
|
|
569
|
-
description:
|
|
570
|
-
|
|
566
|
+
description: "Tag-filter match mode; 'any' (default) or 'all'.",
|
|
567
|
+
},
|
|
568
|
+
stateView: {
|
|
569
|
+
type: "boolean",
|
|
570
|
+
description: "Opt in to state-aware recall views (issue #1952); ORs with the recallStateViews config flag.",
|
|
571
571
|
},
|
|
572
572
|
},
|
|
573
573
|
required: ["query"],
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
NamespaceNotWritableError,
|
|
31
31
|
} from "./access-service.js";
|
|
32
32
|
import { extractionForceFlush } from "./access-extraction-force-flush.js";
|
|
33
|
+
import { coerceProjectCategoryAlias, reapplyCategoryCoercion } from "./access-schema.js";
|
|
33
34
|
import { ObserveTranscriptPersister, observeTranscriptSessionKey } from "./access-observe-transcript.js";
|
|
34
35
|
import { FileCalendarSource, buildBriefing, parseBriefingFocus, parseBriefingWindow } from "./briefing.js";
|
|
35
36
|
import {
|
|
@@ -482,9 +483,13 @@ export class AccessObserveWriteSurface {
|
|
|
482
483
|
}
|
|
483
484
|
|
|
484
485
|
async memoryStore(
|
|
485
|
-
|
|
486
|
+
rawRequest: EngramAccessMemoryStoreRequest,
|
|
486
487
|
hooks?: { enforceWriteQuota?: () => void | Promise<void> }
|
|
487
488
|
): Promise<EngramAccessWriteResponse> {
|
|
489
|
+
// #2780: the boundary schema admits project-shaped category guesses;
|
|
490
|
+
// this funnel (MCP/HTTP/CLI all dispatch here) coerces them to the
|
|
491
|
+
// canonical "fact" once and reports the coercion on the response.
|
|
492
|
+
const { request, categoryCoercion } = coerceProjectCategoryAlias(rawRequest);
|
|
488
493
|
let namespace: string;
|
|
489
494
|
try {
|
|
490
495
|
namespace = await this.deps.resolveCodingScopedWriteNamespace(request);
|
|
@@ -513,6 +518,7 @@ export class AccessObserveWriteSurface {
|
|
|
513
518
|
queued: false,
|
|
514
519
|
status: "validated",
|
|
515
520
|
idempotencyKey: request.idempotencyKey?.trim() || undefined,
|
|
521
|
+
...(categoryCoercion ? { categoryCoercion } : {}),
|
|
516
522
|
};
|
|
517
523
|
}
|
|
518
524
|
const result = await persistExplicitCapture(this.deps.orchestrator, candidate, "memory_store");
|
|
@@ -539,13 +545,14 @@ export class AccessObserveWriteSurface {
|
|
|
539
545
|
memoryId: result.id,
|
|
540
546
|
duplicateOf: result.duplicateOf,
|
|
541
547
|
idempotencyKey: request.idempotencyKey?.trim() || undefined,
|
|
548
|
+
...(categoryCoercion ? { categoryCoercion } : {}),
|
|
542
549
|
};
|
|
543
550
|
log.info(
|
|
544
551
|
`access-write op=memory_store namespace=${namespace} dryRun=false status=${response.status} memoryId=${response.memoryId ?? "-"} idempotency=${response.idempotencyKey ? "yes" : "no"}`
|
|
545
552
|
);
|
|
546
553
|
return response;
|
|
547
554
|
};
|
|
548
|
-
|
|
555
|
+
const response = await this.deps.handleIdempotentWrite({
|
|
549
556
|
operation: "memory_store",
|
|
550
557
|
idempotencyKey: request.idempotencyKey,
|
|
551
558
|
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
@@ -566,12 +573,16 @@ export class AccessObserveWriteSurface {
|
|
|
566
573
|
beforeExecute: hooks?.enforceWriteQuota,
|
|
567
574
|
execute,
|
|
568
575
|
});
|
|
576
|
+
// #2780 fix B: rewrite a replayed coercion note from THIS request's raw category.
|
|
577
|
+
return reapplyCategoryCoercion(response, categoryCoercion);
|
|
569
578
|
}
|
|
570
579
|
|
|
571
580
|
async suggestionSubmit(
|
|
572
|
-
|
|
581
|
+
rawRequest: EngramAccessSuggestionSubmitRequest,
|
|
573
582
|
hooks?: { enforceWriteQuota?: () => void | Promise<void> }
|
|
574
583
|
): Promise<EngramAccessWriteResponse> {
|
|
584
|
+
// #2780: same alias funnel as memory_store — one shared coercion point.
|
|
585
|
+
const { request, categoryCoercion } = coerceProjectCategoryAlias(rawRequest);
|
|
575
586
|
let namespace: string;
|
|
576
587
|
try {
|
|
577
588
|
namespace = await this.deps.resolveCodingScopedWriteNamespace(request);
|
|
@@ -599,6 +610,7 @@ export class AccessObserveWriteSurface {
|
|
|
599
610
|
queued: true,
|
|
600
611
|
status: "validated",
|
|
601
612
|
idempotencyKey: request.idempotencyKey?.trim() || undefined,
|
|
613
|
+
...(categoryCoercion ? { categoryCoercion } : {}),
|
|
602
614
|
};
|
|
603
615
|
}
|
|
604
616
|
const result = await queueExplicitCaptureForReview(
|
|
@@ -622,13 +634,14 @@ export class AccessObserveWriteSurface {
|
|
|
622
634
|
memoryId: result.id,
|
|
623
635
|
duplicateOf: result.duplicateOf,
|
|
624
636
|
idempotencyKey: request.idempotencyKey?.trim() || undefined,
|
|
637
|
+
...(categoryCoercion ? { categoryCoercion } : {}),
|
|
625
638
|
};
|
|
626
639
|
log.info(
|
|
627
640
|
`access-write op=suggestion_submit namespace=${namespace} dryRun=false status=${response.status} memoryId=${response.memoryId ?? "-"} idempotency=${response.idempotencyKey ? "yes" : "no"}`
|
|
628
641
|
);
|
|
629
642
|
return response;
|
|
630
643
|
};
|
|
631
|
-
|
|
644
|
+
const replayed = await this.deps.handleIdempotentWrite({
|
|
632
645
|
operation: "suggestion_submit",
|
|
633
646
|
idempotencyKey: request.idempotencyKey,
|
|
634
647
|
// Shared builder (issue #1989 PR3): byte-parity with the historical
|
|
@@ -649,6 +662,8 @@ export class AccessObserveWriteSurface {
|
|
|
649
662
|
beforeExecute: hooks?.enforceWriteQuota,
|
|
650
663
|
execute,
|
|
651
664
|
});
|
|
665
|
+
// #2780 fix B: rewrite a replayed coercion note from THIS request's raw category.
|
|
666
|
+
return reapplyCategoryCoercion(replayed, categoryCoercion);
|
|
652
667
|
}
|
|
653
668
|
|
|
654
669
|
async runObserve(request: EngramAccessObserveRequest): Promise<EngramAccessObserveResponse> {
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import * as nodePath from "node:path";
|
|
2
|
-
import type { Orchestrator } from "./orchestrator.js";
|
|
3
|
-
import { iterateOfflineSyncSnapshotFileRecords } from "./offline-sync.js";
|
|
4
2
|
import { offlineSyncStorageForSnapshot } from "./offline-sync-impression-drain.js";
|
|
3
|
+
import { iterateOfflineSyncSnapshotFileRecords } from "./offline-sync.js";
|
|
4
|
+
import type { Orchestrator } from "./orchestrator.js";
|
|
5
5
|
import {
|
|
6
|
-
|
|
6
|
+
CONTENT_HASH_NORMALIZER_VERSION,
|
|
7
|
+
IDENTITY_RESOLUTION_VERSION,
|
|
7
8
|
RECONCILE_MANIFEST_FORMAT,
|
|
8
9
|
RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
9
10
|
type ReconcileManifest,
|
|
10
11
|
type ReconcileManifestFile,
|
|
12
|
+
type ReconcileMemoryIdentity,
|
|
11
13
|
type ReconcileMemoryParser,
|
|
14
|
+
buildReconcileManifestFile,
|
|
15
|
+
citationTemplateFingerprint,
|
|
16
|
+
isCachedIdentityReusable,
|
|
17
|
+
isReconcileMemoryIdentity,
|
|
12
18
|
} from "./reconcile/manifest.js";
|
|
13
|
-
import {
|
|
19
|
+
import { createPersistedSupportPassportPrivateFileExclusion } from "./support-passport/card-projection.js";
|
|
14
20
|
|
|
15
21
|
export interface OfflineSyncManifestRequest {
|
|
16
22
|
includeTranscripts?: boolean;
|
|
@@ -22,14 +28,179 @@ export interface OfflineSyncManifestStreamResponse extends Omit<ReconcileManifes
|
|
|
22
28
|
files: AsyncIterable<ReconcileManifestFile>;
|
|
23
29
|
}
|
|
24
30
|
|
|
31
|
+
export interface ServerIdentityCacheEntry {
|
|
32
|
+
path: string;
|
|
33
|
+
sha256: string;
|
|
34
|
+
memory?: ReconcileMemoryIdentity;
|
|
35
|
+
/** Stamped on sha-only entries so an upgrade re-parses them. */
|
|
36
|
+
normalizerVersion?: number;
|
|
37
|
+
identityResolutionVersion?: number;
|
|
38
|
+
/** Stat identity the exclusion classification was computed against. */
|
|
39
|
+
statIdentity?: string;
|
|
40
|
+
/** Persisted support-passport private-memory classification for statIdentity. */
|
|
41
|
+
excluded?: boolean;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Decide what the manifest stream should persist, and whether a write is
|
|
46
|
+
* needed at all.
|
|
47
|
+
*
|
|
48
|
+
* A write is required whenever the persisted set changed — an identity was
|
|
49
|
+
* rebuilt, or an entry was dropped because its file lost its identity — and
|
|
50
|
+
* also when a completed walk leaves entries for paths it never saw, which are
|
|
51
|
+
* files that have since been deleted. Skipping the write in that last case
|
|
52
|
+
* would strand those entries on disk forever.
|
|
53
|
+
*
|
|
54
|
+
* Pruning is gated on the walk completing: an aborted or partially consumed
|
|
55
|
+
* stream has simply not observed the remaining paths, so it may only add.
|
|
56
|
+
*/
|
|
57
|
+
export function planServerIdentityCacheWrite(input: {
|
|
58
|
+
persisted: ReadonlyMap<string, ServerIdentityCacheEntry>;
|
|
59
|
+
yieldedPaths: ReadonlySet<string>;
|
|
60
|
+
streamCompleted: boolean;
|
|
61
|
+
cacheDirty: boolean;
|
|
62
|
+
}): { shouldWrite: boolean; entries: ServerIdentityCacheEntry[] } {
|
|
63
|
+
const entries = input.streamCompleted
|
|
64
|
+
? [...input.persisted.values()].filter((entry) => input.yieldedPaths.has(entry.path))
|
|
65
|
+
: [...input.persisted.values()];
|
|
66
|
+
return { shouldWrite: input.cacheDirty || entries.length !== input.persisted.size, entries };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The cache lives under `.remnic/` rather than `state/`: snapshot enumeration
|
|
71
|
+
* excludes internal `.remnic/` paths structurally (`isInternalRemnicStatePath`),
|
|
72
|
+
* whereas `state/` is only filtered by an allowlist of known node-local
|
|
73
|
+
* artifacts. Under `state/` this node-local cache would be advertised as a peer
|
|
74
|
+
* file, so convergence would transfer the cache itself — and the stream rewrites
|
|
75
|
+
* it during finalization, so the advertised digest could go stale mid-transfer.
|
|
76
|
+
*/
|
|
77
|
+
function serverIdentityCachePath(storageDir: string): string {
|
|
78
|
+
return nodePath.join(storageDir, ".remnic", "state", "converge-identity-cache.json");
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function loadServerIdentityCache(
|
|
82
|
+
storageDir: string,
|
|
83
|
+
citationTemplate?: string
|
|
84
|
+
): Promise<Map<string, ServerIdentityCacheEntry>> {
|
|
85
|
+
const cache = new Map<string, ServerIdentityCacheEntry>();
|
|
86
|
+
try {
|
|
87
|
+
const raw = JSON.parse(
|
|
88
|
+
await import("node:fs/promises").then((fs) => fs.readFile(serverIdentityCachePath(storageDir), "utf8"))
|
|
89
|
+
) as {
|
|
90
|
+
citationTemplate?: string;
|
|
91
|
+
files?: unknown[];
|
|
92
|
+
};
|
|
93
|
+
// Identities are derived after stripping inline attribution for a specific
|
|
94
|
+
// citation template; entries written under a different one would produce
|
|
95
|
+
// wrong contentHash values for unchanged files.
|
|
96
|
+
if (raw.citationTemplate !== citationTemplateFingerprint(citationTemplate)) return cache;
|
|
97
|
+
for (const candidate of raw.files ?? []) {
|
|
98
|
+
const entry = candidate as Partial<ServerIdentityCacheEntry> | null;
|
|
99
|
+
if (typeof entry?.path !== "string" || typeof entry.sha256 !== "string") continue;
|
|
100
|
+
if (entry.memory !== undefined && !isReconcileMemoryIdentity(entry.memory)) continue;
|
|
101
|
+
if (entry.statIdentity !== undefined && typeof entry.statIdentity !== "string") continue;
|
|
102
|
+
if (entry.excluded !== undefined && typeof entry.excluded !== "boolean") continue;
|
|
103
|
+
if (entry.normalizerVersion !== undefined && typeof entry.normalizerVersion !== "number") continue;
|
|
104
|
+
if (entry.identityResolutionVersion !== undefined && typeof entry.identityResolutionVersion !== "number") {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
cache.set(entry.path, {
|
|
108
|
+
path: entry.path,
|
|
109
|
+
sha256: entry.sha256,
|
|
110
|
+
...(entry.memory ? { memory: entry.memory } : {}),
|
|
111
|
+
...(entry.memory
|
|
112
|
+
? {}
|
|
113
|
+
: {
|
|
114
|
+
...(typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {}),
|
|
115
|
+
...(typeof entry.identityResolutionVersion === "number"
|
|
116
|
+
? { identityResolutionVersion: entry.identityResolutionVersion }
|
|
117
|
+
: {}),
|
|
118
|
+
}),
|
|
119
|
+
...(entry.statIdentity !== undefined && entry.excluded !== undefined
|
|
120
|
+
? { statIdentity: entry.statIdentity, excluded: entry.excluded }
|
|
121
|
+
: {}),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
} catch {
|
|
125
|
+
// missing or corrupt cache: cold build
|
|
126
|
+
}
|
|
127
|
+
return cache;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const serverIdentityCacheWriteLocks = new Map<string, Promise<void>>();
|
|
131
|
+
|
|
132
|
+
/** Serialize cache replacements per path: overlapping manifest streams for one
|
|
133
|
+
* namespace would otherwise each publish a whole-file snapshot, and the slower
|
|
134
|
+
* stream built from older filesystem state would overwrite the newer one. */
|
|
135
|
+
async function withServerIdentityCacheWriteLock(cachePath: string, write: () => Promise<void>): Promise<void> {
|
|
136
|
+
const previous = serverIdentityCacheWriteLocks.get(cachePath) ?? Promise.resolve();
|
|
137
|
+
const next = previous.then(write, write);
|
|
138
|
+
serverIdentityCacheWriteLocks.set(cachePath, next);
|
|
139
|
+
try {
|
|
140
|
+
await next;
|
|
141
|
+
} finally {
|
|
142
|
+
if (serverIdentityCacheWriteLocks.get(cachePath) === next) {
|
|
143
|
+
serverIdentityCacheWriteLocks.delete(cachePath);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Union of the entries being written and the current on-disk set; on conflict
|
|
149
|
+
* the write wins (it reflects the newer run). Callers hold the write lock. */
|
|
150
|
+
async function mergeServerIdentityCacheEntries(
|
|
151
|
+
fs: typeof import("node:fs/promises"),
|
|
152
|
+
cachePath: string,
|
|
153
|
+
entries: readonly ServerIdentityCacheEntry[],
|
|
154
|
+
citationTemplate: string | undefined,
|
|
155
|
+
dropped: ReadonlySet<string> = new Set()
|
|
156
|
+
): Promise<ServerIdentityCacheEntry[]> {
|
|
157
|
+
const merged = new Map(entries.map((entry) => [entry.path, entry]));
|
|
158
|
+
try {
|
|
159
|
+
const raw = JSON.parse(await fs.readFile(cachePath, "utf8")) as {
|
|
160
|
+
citationTemplate?: string;
|
|
161
|
+
files?: unknown[];
|
|
162
|
+
};
|
|
163
|
+
if (raw.citationTemplate === citationTemplateFingerprint(citationTemplate)) {
|
|
164
|
+
for (const candidate of raw.files ?? []) {
|
|
165
|
+
const entry = candidate as Partial<ServerIdentityCacheEntry> | null;
|
|
166
|
+
if (typeof entry?.path !== "string" || typeof entry.sha256 !== "string") continue;
|
|
167
|
+
if (entry.memory !== undefined && !isReconcileMemoryIdentity(entry.memory)) continue;
|
|
168
|
+
if (dropped.has(entry.path) || merged.has(entry.path)) continue;
|
|
169
|
+
merged.set(entry.path, {
|
|
170
|
+
path: entry.path,
|
|
171
|
+
sha256: entry.sha256,
|
|
172
|
+
...(entry.memory ? { memory: entry.memory } : {}),
|
|
173
|
+
...(entry.memory
|
|
174
|
+
? {}
|
|
175
|
+
: {
|
|
176
|
+
...(typeof entry.normalizerVersion === "number" ? { normalizerVersion: entry.normalizerVersion } : {}),
|
|
177
|
+
...(typeof entry.identityResolutionVersion === "number"
|
|
178
|
+
? { identityResolutionVersion: entry.identityResolutionVersion }
|
|
179
|
+
: {}),
|
|
180
|
+
}),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
} catch {
|
|
185
|
+
// missing or unreadable current cache: the write set stands alone
|
|
186
|
+
}
|
|
187
|
+
return [...merged.values()];
|
|
188
|
+
}
|
|
189
|
+
|
|
25
190
|
export async function createOfflineSyncManifestStream(
|
|
26
191
|
orchestrator: Orchestrator,
|
|
27
192
|
namespace: string,
|
|
28
193
|
userExcludeRegexps: RegExp[],
|
|
29
194
|
options: OfflineSyncManifestRequest,
|
|
30
|
-
parseMemory: ReconcileMemoryParser
|
|
195
|
+
parseMemory: ReconcileMemoryParser
|
|
31
196
|
): Promise<OfflineSyncManifestStreamResponse> {
|
|
32
197
|
const storage = await offlineSyncStorageForSnapshot(orchestrator, namespace);
|
|
198
|
+
const citationTemplate = orchestrator.config.inlineSourceAttributionFormat;
|
|
199
|
+
const identityCache = await loadServerIdentityCache(storage.dir, citationTemplate);
|
|
200
|
+
// The exclusion callback runs before every yield; without the persisted
|
|
201
|
+
// classification it would read and parse every candidate file, defeating the
|
|
202
|
+
// warm-cache skip entirely.
|
|
203
|
+
const classificationUpdates = new Map<string, { statIdentity: string; excluded: boolean }>();
|
|
33
204
|
const snapshotFiles = iterateOfflineSyncSnapshotFileRecords({
|
|
34
205
|
root: storage.dir,
|
|
35
206
|
includeContent: false,
|
|
@@ -37,23 +208,133 @@ export async function createOfflineSyncManifestStream(
|
|
|
37
208
|
readFileDigest: async ({ filePath }) => storage.digestOfflineSyncFile(filePath),
|
|
38
209
|
signal: options.signal,
|
|
39
210
|
userExcludeRegexps,
|
|
40
|
-
excludeFile:
|
|
41
|
-
const memory = await storage.readMemoryByPath(filePath);
|
|
42
|
-
return memory ? isSupportPassportPrivateMemory(memory) : false;
|
|
43
|
-
},
|
|
211
|
+
excludeFile: createPersistedSupportPassportPrivateFileExclusion(storage, identityCache, classificationUpdates),
|
|
44
212
|
});
|
|
45
213
|
return {
|
|
46
214
|
namespace,
|
|
47
215
|
format: RECONCILE_MANIFEST_FORMAT,
|
|
48
216
|
schemaVersion: RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
49
217
|
files: (async function* () {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
218
|
+
// Any change to the persisted set, not just a rebuilt identity: a file
|
|
219
|
+
// that lost its identity, or a completed walk that must prune vanished
|
|
220
|
+
// paths, also has to reach disk or the removal is lost forever.
|
|
221
|
+
let cacheDirty = false;
|
|
222
|
+
let streamCompleted = false;
|
|
223
|
+
// Seeded with every previously cached entry so a partially consumed
|
|
224
|
+
// stream (client disconnect, abort) can only add to the cache. Writing
|
|
225
|
+
// just this run's rebuilds would drop every cache hit, so one edit to a
|
|
226
|
+
// large corpus would shrink the cache to that single entry and force a
|
|
227
|
+
// near-cold rebuild on the next request.
|
|
228
|
+
const persistedEntries = new Map(identityCache);
|
|
229
|
+
const yieldedPaths = new Set<string>();
|
|
230
|
+
const flush = async (): Promise<void> => {
|
|
231
|
+
const { shouldWrite, entries } = planServerIdentityCacheWrite({
|
|
232
|
+
persisted: persistedEntries,
|
|
233
|
+
yieldedPaths,
|
|
234
|
+
streamCompleted,
|
|
235
|
+
cacheDirty,
|
|
236
|
+
});
|
|
237
|
+
if (!shouldWrite) return;
|
|
238
|
+
try {
|
|
239
|
+
const fs = await import("node:fs/promises");
|
|
240
|
+
const cachePath = serverIdentityCachePath(storage.dir);
|
|
241
|
+
await withServerIdentityCacheWriteLock(cachePath, async () => {
|
|
242
|
+
// Merge with whatever is on disk NOW: a concurrent stream for the
|
|
243
|
+
// same namespace may have published newer entries after this
|
|
244
|
+
// request loaded its snapshot, and a blind whole-file replace
|
|
245
|
+
// would discard them.
|
|
246
|
+
const written = new Set(entries.map((entry) => entry.path));
|
|
247
|
+
const dropped = streamCompleted
|
|
248
|
+
? new Set([...identityCache.keys()].filter((pathName) => !written.has(pathName)))
|
|
249
|
+
: new Set<string>();
|
|
250
|
+
const merged = await mergeServerIdentityCacheEntries(
|
|
251
|
+
fs,
|
|
252
|
+
cachePath,
|
|
253
|
+
entries,
|
|
254
|
+
citationTemplate,
|
|
255
|
+
dropped
|
|
256
|
+
);
|
|
257
|
+
await fs.mkdir(nodePath.dirname(cachePath), { recursive: true });
|
|
258
|
+
const tmp = `${cachePath}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;
|
|
259
|
+
await fs.writeFile(
|
|
260
|
+
tmp,
|
|
261
|
+
JSON.stringify({ citationTemplate: citationTemplateFingerprint(citationTemplate), files: merged })
|
|
262
|
+
);
|
|
263
|
+
await fs.rename(tmp, cachePath);
|
|
264
|
+
});
|
|
265
|
+
} catch {
|
|
266
|
+
// cache persistence is best-effort
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
try {
|
|
270
|
+
const applyClassification = (path: string, sha256: string): void => {
|
|
271
|
+
const classification = classificationUpdates.get(path);
|
|
272
|
+
if (classification === undefined) return;
|
|
273
|
+
const entry = persistedEntries.get(path) ?? { path, sha256 };
|
|
274
|
+
if (entry.statIdentity === classification.statIdentity && entry.excluded === classification.excluded) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
persistedEntries.set(path, {
|
|
278
|
+
...entry,
|
|
279
|
+
...(entry.memory ? { memory: entry.memory } : {}),
|
|
280
|
+
statIdentity: classification.statIdentity,
|
|
281
|
+
excluded: classification.excluded,
|
|
282
|
+
});
|
|
283
|
+
cacheDirty = true;
|
|
284
|
+
};
|
|
285
|
+
for await (const file of snapshotFiles) {
|
|
286
|
+
yieldedPaths.add(file.path);
|
|
287
|
+
const cached = identityCache.get(file.path);
|
|
288
|
+
if (
|
|
289
|
+
cached !== undefined &&
|
|
290
|
+
cached.sha256.toLowerCase() === file.sha256.toLowerCase() &&
|
|
291
|
+
isCachedIdentityReusable(cached)
|
|
292
|
+
) {
|
|
293
|
+
applyClassification(file.path, file.sha256);
|
|
294
|
+
yield {
|
|
295
|
+
...file,
|
|
296
|
+
...(cached.memory
|
|
297
|
+
? { memory: cached.memory }
|
|
298
|
+
: {
|
|
299
|
+
normalizerVersion: cached.normalizerVersion,
|
|
300
|
+
identityResolutionVersion: cached.identityResolutionVersion,
|
|
301
|
+
}),
|
|
302
|
+
};
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const built = await buildReconcileManifestFile(
|
|
306
|
+
file,
|
|
307
|
+
async ({ path }) => storage.readOfflineSyncFile(nodePath.join(storage.dir, path)),
|
|
308
|
+
parseMemory,
|
|
309
|
+
citationTemplate
|
|
310
|
+
);
|
|
311
|
+
// Negative results persist too: a memory-shaped file that parses
|
|
312
|
+
// without an identity would otherwise be re-read on every warm run.
|
|
313
|
+
const previous = persistedEntries.get(built.path);
|
|
314
|
+
if (previous?.sha256 !== built.sha256 || (built.memory !== undefined && previous?.memory !== built.memory)) {
|
|
315
|
+
cacheDirty = true;
|
|
316
|
+
}
|
|
317
|
+
if (built.memory === undefined && built.normalizerVersion === undefined) {
|
|
318
|
+
// Read failed: do not persist a negative identity for this SHA.
|
|
319
|
+
yield built;
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
persistedEntries.set(built.path, {
|
|
323
|
+
path: built.path,
|
|
324
|
+
sha256: built.sha256,
|
|
325
|
+
...(built.memory !== undefined
|
|
326
|
+
? { memory: built.memory }
|
|
327
|
+
: {
|
|
328
|
+
normalizerVersion: built.normalizerVersion,
|
|
329
|
+
identityResolutionVersion: built.identityResolutionVersion,
|
|
330
|
+
}),
|
|
331
|
+
});
|
|
332
|
+
applyClassification(built.path, built.sha256);
|
|
333
|
+
yield built;
|
|
334
|
+
}
|
|
335
|
+
streamCompleted = true;
|
|
336
|
+
} finally {
|
|
337
|
+
await flush();
|
|
57
338
|
}
|
|
58
339
|
})(),
|
|
59
340
|
};
|
|
@@ -833,11 +833,10 @@ export class AccessRecallSurface {
|
|
|
833
833
|
this.deps.budget.gc();
|
|
834
834
|
}
|
|
835
835
|
const topK = Number.isFinite(request.topK) ? Math.max(0, Math.floor(request.topK ?? 0)) : undefined;
|
|
836
|
-
// Issue #680 — historical recall pin. Validate at the input
|
|
837
|
-
//
|
|
838
|
-
//
|
|
839
|
-
//
|
|
840
|
-
// means "no pin".
|
|
836
|
+
// Issue #680 — historical recall pin. Validate at the input boundary so
|
|
837
|
+
// a malformed `asOf` is rejected with a structured 400 instead of
|
|
838
|
+
// silently flooring at NaN inside the orchestrator (rule 51, gotcha #51).
|
|
839
|
+
// Empty / undefined is fine — means "no pin".
|
|
841
840
|
let asOf: string | undefined;
|
|
842
841
|
if (request.asOf !== undefined && request.asOf !== null) {
|
|
843
842
|
if (typeof request.asOf !== "string" || request.asOf.trim().length === 0) {
|
|
@@ -863,6 +862,7 @@ export class AccessRecallSurface {
|
|
|
863
862
|
},
|
|
864
863
|
...(authenticatedPrincipal ? { principalOverride: authenticatedPrincipal } : {}),
|
|
865
864
|
...(request.sourceConnector ? { sourceConnector: request.sourceConnector } : {}),
|
|
865
|
+
...(request.stateView !== undefined ? { stateView: request.stateView } : {}),
|
|
866
866
|
...(asOf !== undefined ? { asOf } : {}),
|
|
867
867
|
...(request.includeLowConfidence === true ? { includeLowConfidence: true } : {}),
|
|
868
868
|
...(request.abortSignal ? { abortSignal: request.abortSignal } : {}),
|