@remnic/core 9.50.2 → 9.51.0
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 +41 -39
- package/dist/access-authorization-probe.d.ts +13 -11
- package/dist/access-authorization-probe.js +42 -40
- package/dist/access-boundary.d.ts +13 -11
- package/dist/access-boundary.js +41 -39
- package/dist/access-cli.js +109 -104
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +3 -1
- package/dist/access-extraction-force-flush.d.ts +13 -11
- package/dist/access-extraction-force-flush.js +41 -39
- package/dist/access-health-types.d.ts +3 -1
- 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.js +41 -39
- package/dist/access-http.d.ts +13 -11
- package/dist/access-http.js +52 -50
- package/dist/access-identity-continuity-surface.d.ts +11 -9
- package/dist/access-identity-continuity-surface.js +41 -39
- package/dist/access-lcm-surface.d.ts +13 -11
- package/dist/access-lcm-surface.js +41 -39
- package/dist/access-mcp.d.ts +13 -11
- package/dist/access-mcp.js +47 -45
- package/dist/access-memory-search-fanout.d.ts +4 -2
- package/dist/{access-namespace-preflight-Dj2QolFE.d.ts → access-namespace-preflight-Ds6CGlCP.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +5 -3
- package/dist/access-namespace-preflight.js +41 -39
- package/dist/access-observe-write-surface.d.ts +13 -11
- package/dist/access-observe-write-surface.js +41 -39
- package/dist/access-offline-manifest.d.ts +11 -9
- package/dist/access-operations-batch.js +43 -41
- package/dist/access-operations.d.ts +13 -11
- package/dist/access-operations.js +46 -44
- package/dist/access-recall-concurrency.d.ts +13 -11
- package/dist/access-recall-concurrency.js +41 -39
- package/dist/access-recall-response.d.ts +13 -11
- package/dist/access-recall-response.js +41 -39
- package/dist/access-recall-surface.d.ts +13 -11
- package/dist/access-recall-surface.js +41 -39
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-DesbnTSa.d.ts → access-service-BY0KJ44c.d.ts} +7 -7
- package/dist/access-service-helpers.d.ts +13 -11
- package/dist/access-service.d.ts +13 -11
- package/dist/access-service.js +41 -39
- package/dist/access-surface-catalog.d.ts +13 -11
- 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-recall.d.ts +3 -1
- package/dist/active-recall.js +5 -3
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +3 -1
- package/dist/archive-mutation-version.d.ts +9 -0
- package/dist/archive-mutation-version.js +20 -0
- package/dist/artifact-search.d.ts +3 -1
- package/dist/behavior-learner.d.ts +3 -1
- package/dist/behavior-signals.d.ts +3 -1
- package/dist/bootstrap.d.ts +11 -9
- package/dist/briefing.d.ts +4 -2
- package/dist/briefing.js +10 -9
- 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 +5 -5
- package/dist/bulk-import/index.d.ts +5 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/capabilities.d.ts +3 -1
- package/dist/{catalog-D-G7RgXR.d.ts → catalog-D3B4RDy1.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +3 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +3 -1
- package/dist/causal-consolidation.js +13 -12
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +4 -2
- package/dist/causal-trajectory-graph.js +2 -1
- package/dist/causal-trajectory-graph.js.map +1 -1
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-KDG2KTWW.js → chunk-33SV3E43.js} +4 -4
- package/dist/{chunk-2HGUDBRJ.js → chunk-37ZO6LLJ.js} +2 -2
- package/dist/{chunk-QW3WFHKU.js → chunk-45BRYON6.js} +2 -2
- package/dist/{chunk-GZICBRWK.js → chunk-4F6X3RXW.js} +2 -2
- package/dist/{chunk-7BAYBYY5.js → chunk-4PC4PRJE.js} +2 -2
- package/dist/{chunk-VJXY5ZCT.js → chunk-52UKFTUK.js} +2 -2
- package/dist/{chunk-ESG7Z255.js → chunk-5UDMFE3Q.js} +2 -2
- package/dist/{chunk-JPHEOE6Z.js → chunk-6MTSFX7A.js} +15 -15
- package/dist/chunk-6ZN34ISG.js +44 -0
- package/dist/chunk-6ZN34ISG.js.map +1 -0
- package/dist/{chunk-M4MP34AQ.js → chunk-AHZOMHWN.js} +1 -1
- package/dist/{chunk-Z3RHPGSY.js → chunk-AIUBBHSF.js} +3 -3
- package/dist/{chunk-S3AYIQCU.js → chunk-AXIDQG5A.js} +12 -12
- package/dist/{chunk-QN7NTKRC.js → chunk-AZ2QBGYB.js} +1 -1
- package/dist/{chunk-47J4EDGR.js → chunk-AZM4CCAC.js} +8 -8
- package/dist/{chunk-IXXABW5A.js → chunk-BHXYAVUM.js} +11 -5
- package/dist/chunk-BHXYAVUM.js.map +1 -0
- package/dist/{chunk-L2DPF4DF.js → chunk-BIJAWZYW.js} +54 -12
- package/dist/chunk-BIJAWZYW.js.map +1 -0
- package/dist/{chunk-LEJPSMKM.js → chunk-C5QLI33R.js} +3 -3
- package/dist/{chunk-SV3PSA7Y.js → chunk-CV6BBVYV.js} +5 -5
- package/dist/{chunk-V7X767RT.js → chunk-DCZBSE4F.js} +52 -52
- package/dist/chunk-FC67T4E6.js +70 -0
- package/dist/chunk-FC67T4E6.js.map +1 -0
- package/dist/{chunk-7PKFPLLZ.js → chunk-FXTYIA46.js} +2 -2
- package/dist/{chunk-64BHFFKZ.js → chunk-HLYR2TQL.js} +5 -5
- package/dist/{chunk-5C2HNJMO.js → chunk-J5LLX6IL.js} +32 -32
- package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
- package/dist/{chunk-PLKFO2HJ.js → chunk-JL43BVDE.js} +2 -2
- package/dist/{chunk-2S72LWKX.js → chunk-JYL3BVVZ.js} +2 -2
- package/dist/{chunk-IPLYGWQF.js → chunk-KQAFEZQX.js} +5 -5
- package/dist/chunk-LXY5VVGM.js +61 -0
- package/dist/chunk-LXY5VVGM.js.map +1 -0
- package/dist/{chunk-PYKKWQZ2.js → chunk-M7BXDKPR.js} +6 -6
- package/dist/{chunk-Z54EM5YZ.js → chunk-MAXVH44E.js} +7 -7
- package/dist/{chunk-LYMNZZIM.js → chunk-NIS256NW.js} +2 -2
- package/dist/{chunk-67QG75MJ.js → chunk-NLK2VZYZ.js} +2 -2
- package/dist/{chunk-A4QMKFFO.js → chunk-O5FFBO2M.js} +14 -28
- package/dist/chunk-O5FFBO2M.js.map +1 -0
- package/dist/{chunk-JYIFGGEM.js → chunk-OUKBMQ2O.js} +2 -2
- package/dist/{chunk-75XOWNRS.js → chunk-OYESWJ43.js} +4 -4
- package/dist/{chunk-TS4AJ2GI.js → chunk-PA45XCUD.js} +3 -3
- package/dist/{chunk-BJYET5TX.js → chunk-PRDJMOST.js} +7 -1
- package/dist/chunk-PRDJMOST.js.map +1 -0
- package/dist/{chunk-4MBPIL4V.js → chunk-PUSLMZBQ.js} +2 -2
- package/dist/{chunk-RVO6TCTU.js → chunk-QCECHYZL.js} +6 -6
- package/dist/{chunk-GFIKG4FR.js → chunk-QGR6OVGT.js} +2 -2
- package/dist/{chunk-NSGU76YO.js → chunk-QHFV6VNU.js} +6 -2
- package/dist/chunk-QHFV6VNU.js.map +1 -0
- package/dist/{chunk-PDEKQWDV.js → chunk-QT2FRYI4.js} +18 -2
- package/dist/chunk-QT2FRYI4.js.map +1 -0
- package/dist/{chunk-HNZKVLAN.js → chunk-S354QO4R.js} +2 -2
- package/dist/{chunk-NO37MR45.js → chunk-SOEN6KCF.js} +2 -2
- package/dist/{chunk-FXX6RQYC.js → chunk-TPTECFWR.js} +2 -2
- package/dist/{chunk-GDDGZVFI.js → chunk-UEVLYVNW.js} +2 -2
- package/dist/{chunk-YQ4IQ2GA.js → chunk-UT5BV5OG.js} +2 -2
- package/dist/{chunk-LAQ33B5D.js → chunk-UU3G6GUP.js} +1 -1
- package/dist/chunk-UU3G6GUP.js.map +1 -0
- package/dist/{chunk-LNTUXKBT.js → chunk-UYYW2KPU.js} +2 -2
- package/dist/{chunk-BOFVT6P3.js → chunk-VBHPOWBJ.js} +175 -98
- package/dist/chunk-VBHPOWBJ.js.map +1 -0
- package/dist/{chunk-QSYL5CXK.js → chunk-VKXWK44Q.js} +3 -3
- package/dist/{chunk-KMWYZTIE.js → chunk-VMMQDEN5.js} +2 -2
- package/dist/{chunk-JB6D7EFB.js → chunk-VVG2BOKA.js} +2 -2
- package/dist/chunk-W5BIQOAJ.js +69 -0
- package/dist/chunk-W5BIQOAJ.js.map +1 -0
- package/dist/{chunk-V5H6OJCR.js → chunk-W5XVQFLM.js} +2 -2
- package/dist/{chunk-OIOZ6MOP.js → chunk-W6FNX2LP.js} +2 -2
- package/dist/{chunk-6QPHF6RR.js → chunk-WQM326GS.js} +2 -2
- package/dist/{chunk-TQFHQPWD.js → chunk-XADV5IZ3.js} +8 -8
- package/dist/{chunk-DATDLJAO.js → chunk-XAPMEU3K.js} +2 -2
- package/dist/chunk-XXSOVESA.js +42 -0
- package/dist/chunk-XXSOVESA.js.map +1 -0
- package/dist/{chunk-IK6X5QPO.js → chunk-ZHY5TMJG.js} +1193 -443
- package/dist/chunk-ZHY5TMJG.js.map +1 -0
- package/dist/{chunk-N3LL5NEU.js → chunk-ZMYDYNI4.js} +2 -2
- package/dist/{cli-D4vvtxjY.d.ts → cli-CnOkH9hA.d.ts} +6 -6
- package/dist/cli.d.ts +15 -13
- package/dist/cli.js +74 -70
- package/dist/coding/pre-action-gate.d.ts +3 -1
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compounding/engine.d.ts +4 -2
- package/dist/compounding/engine.js +10 -9
- 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 +5 -3
- package/dist/connectors/codex-materialize-runner.d.ts +3 -1
- package/dist/connectors/codex-materialize-runner.js +10 -9
- package/dist/connectors/codex-materialize.d.ts +3 -1
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.js +10 -9
- package/dist/consolidation-provenance-check.d.ts +4 -2
- package/dist/consolidation-undo.d.ts +4 -2
- package/dist/contradiction/index.d.ts +4 -2
- package/dist/contradiction-config.d.ts +29 -0
- package/dist/contradiction-config.js +12 -0
- package/dist/contradiction-config.js.map +1 -0
- package/dist/converge-config.d.ts +3 -1
- package/dist/convergence-refresh.d.ts +4 -2
- package/dist/convergence-refresh.js +12 -11
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/chunker.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.d.ts +3 -1
- 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 +21 -20
- package/dist/day-summary.d.ts +3 -1
- package/dist/delinearize.d.ts +3 -1
- package/dist/dependency-propagation-config.d.ts +3 -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-retrieval.d.ts +4 -2
- package/dist/entity-retrieval.js +10 -9
- package/dist/entity-schema.d.ts +3 -1
- package/dist/explicit-capture.d.ts +11 -9
- package/dist/explicit-capture.js +3 -2
- package/dist/external-wiki-access.d.ts +13 -11
- package/dist/external-wiki-access.js +42 -40
- 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 +13 -11
- package/dist/extraction-error-classification.d.ts +3 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- 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-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 +22 -21
- package/dist/fallback-llm.d.ts +3 -1
- package/dist/graph-444E-DrF.d.ts +349 -0
- package/dist/graph-dashboard-diff.d.ts +4 -2
- package/dist/graph-dashboard-key.d.ts +4 -2
- package/dist/graph-dashboard-parser.d.ts +4 -2
- package/dist/{graph-edge-decay-Z6ENALU2.js → graph-edge-decay-65KMOJWY.js} +4 -3
- package/dist/graph-edge-decay-65KMOJWY.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +4 -2
- package/dist/graph-path-reconstruction.d.ts +10 -0
- package/dist/graph-path-reconstruction.js +12 -0
- package/dist/graph-path-reconstruction.js.map +1 -0
- package/dist/graph-path-scoring-config.d.ts +8 -0
- package/dist/graph-path-scoring-config.js +10 -0
- package/dist/graph-path-scoring-config.js.map +1 -0
- package/dist/graph-path-scoring.d.ts +36 -0
- package/dist/graph-path-scoring.js +11 -0
- package/dist/graph-path-scoring.js.map +1 -0
- package/dist/graph-snapshot.d.ts +4 -2
- package/dist/graph-snapshot.js +3 -2
- package/dist/graph.d.ts +5 -318
- package/dist/graph.js +5 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +3 -1
- package/dist/importers/index.d.ts +3 -1
- package/dist/in-flight-reads.d.ts +3 -1
- package/dist/index.d.ts +22 -20
- package/dist/index.js +149 -144
- package/dist/intent.d.ts +3 -1
- package/dist/lcm/engine.d.ts +3 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +3 -1
- package/dist/lcm/index.js +6 -6
- 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.d.ts +3 -1
- package/dist/local-model-endpoint.d.ts +3 -1
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +10 -9
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -9
- package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-projection.js +11 -10
- package/dist/{maintenance-ClmUVpGI.d.ts → maintenance-CKwxpdRx.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +13 -11
- package/dist/memory-action-policy.d.ts +3 -1
- package/dist/memory-cache.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-worth-outcomes.d.ts +4 -2
- package/dist/models-json.d.ts +3 -1
- package/dist/namespaces/migrate.d.ts +5 -3
- package/dist/namespaces/migrate.js +20 -19
- package/dist/namespaces/principal.d.ts +3 -1
- package/dist/namespaces/search.d.ts +3 -1
- package/dist/namespaces/search.js +7 -7
- package/dist/namespaces/storage.d.ts +5 -3
- package/dist/namespaces/storage.js +10 -9
- package/dist/native-knowledge.d.ts +3 -1
- package/dist/offline-sync-impression-drain.d.ts +3 -1
- package/dist/operator-doctor-corpus.d.ts +3 -1
- package/dist/operator-doctor-corpus.js +22 -21
- package/dist/operator-doctor-replica.d.ts +3 -1
- package/dist/operator-toolkit.d.ts +6 -4
- package/dist/operator-toolkit.js +33 -29
- package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
- package/dist/orchestration/maintenance.d.ts +6 -4
- package/dist/orchestration/maintenance.js +15 -14
- package/dist/{orchestrator-qJ07zI8H.d.ts → orchestrator-BshGam-o.d.ts} +45 -19
- package/dist/orchestrator.d.ts +11 -9
- package/dist/orchestrator.js +109 -104
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-WFCxhHOn.d.ts → pipeline-D21Rs6gW.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/{qmd-5tzkQ44y.d.ts → qmd-Dhle1P4X.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 +4 -4
- 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-planner-llm.d.ts +3 -1
- package/dist/recall-planner-llm.js +3 -3
- package/dist/recall-state.d.ts +7 -1
- package/dist/recall-state.js +1 -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 +7 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +3 -1
- package/dist/reconcile/manifest.d.ts +3 -1
- 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/resolve-auth-token.d.ts +3 -1
- package/dist/resume-bundles.js +6 -4
- 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/salvage-envelope.d.ts +3 -1
- package/dist/{scope-profiles--vfXPl3X.d.ts → scope-profiles-NzGPDXLn.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 +6 -6
- package/dist/search/index.d.ts +3 -1
- package/dist/search/index.js +12 -12
- 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-BBDuP9nJ.d.ts → semantic-consolidation-DLDKvyy5.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +11 -10
- package/dist/semantic-rule-promotion.js +10 -9
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +10 -9
- package/dist/{service-B8DtbpCM.d.ts → service-BIgVM7fL.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 +18 -17
- package/dist/{storage-BkYN1RIy.d.ts → storage-CVfGWqCI.d.ts} +7 -6
- package/dist/storage.d.ts +4 -2
- package/dist/storage.js +9 -8
- package/dist/summarizer.d.ts +3 -1
- package/dist/summary-snapshot.d.ts +3 -1
- 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/topics.d.ts +3 -1
- package/dist/transcript.d.ts +3 -1
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/trust-score-stage.d.ts +3 -1
- package/dist/trust-score.d.ts +3 -1
- package/dist/{types-u2s9j1uD.d.ts → types-CkiDUorT.d.ts} +10 -16
- 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 +10 -9
- package/dist/write-envelope.d.ts +3 -1
- package/package.json +2 -2
- package/src/archive-mutation-version.ts +59 -0
- package/src/config.test.ts +45 -0
- package/src/config.ts +10 -30
- package/src/contradiction/contradiction.test.ts +86 -1
- package/src/contradiction-config.ts +92 -0
- package/src/graph-path-reconstruction.ts +91 -0
- package/src/graph-path-scoring-config.ts +55 -0
- package/src/graph-path-scoring.test.ts +238 -0
- package/src/graph-path-scoring.ts +77 -0
- package/src/graph.test.ts +225 -5
- package/src/graph.ts +72 -5
- package/src/orchestration/contradiction-linking-coordinator.ts +246 -76
- package/src/orchestration/contradiction-localization.integration.test.ts +1953 -0
- package/src/orchestration/extraction-anchor-snapshot.ts +83 -0
- package/src/orchestration/extraction-persist-deps.ts +8 -2
- package/src/orchestration/extraction-persist.ts +43 -34
- package/src/orchestration/graph-path-state-loader.test.ts +801 -0
- package/src/orchestration/graph-path-state-loader.ts +318 -0
- package/src/orchestration/graph-recall-coordinator.integration.test.ts +1163 -0
- package/src/orchestration/graph-recall-coordinator.ts +206 -29
- package/src/orchestration/graph-recall-seam.ts +19 -0
- package/src/orchestration/recall-internal-deps.ts +7 -13
- package/src/orchestration/recall-internal.ts +5 -0
- package/src/orchestration/recall-introspection.ts +9 -1
- package/src/orchestration/recall-search-pipeline.ts +8 -13
- package/src/orchestration/update-localization.test.ts +784 -0
- package/src/orchestration/update-localization.ts +173 -0
- package/src/orchestrator.ts +19 -18
- package/src/recall-state.test.ts +29 -1
- package/src/recall-state.ts +13 -0
- package/src/recall-xray-renderer.test.ts +45 -0
- package/src/recall-xray-renderer.ts +16 -0
- package/src/recall-xray.ts +13 -0
- package/src/storage/supersession-side-effects.ts +97 -0
- package/src/storage/tombstone-blocked-capture-sync.ts +13 -5
- package/src/storage-contract/cache-coherence.test.ts +299 -0
- package/src/storage.ts +86 -88
- package/src/types.ts +12 -15
- package/dist/chunk-A4QMKFFO.js.map +0 -1
- package/dist/chunk-BJYET5TX.js.map +0 -1
- package/dist/chunk-BOFVT6P3.js.map +0 -1
- package/dist/chunk-IK6X5QPO.js.map +0 -1
- package/dist/chunk-IXXABW5A.js.map +0 -1
- package/dist/chunk-L2DPF4DF.js.map +0 -1
- package/dist/chunk-LAQ33B5D.js.map +0 -1
- package/dist/chunk-NSGU76YO.js.map +0 -1
- package/dist/chunk-PDEKQWDV.js.map +0 -1
- /package/dist/{graph-edge-decay-Z6ENALU2.js.map → archive-mutation-version.js.map} +0 -0
- /package/dist/{chunk-KDG2KTWW.js.map → chunk-33SV3E43.js.map} +0 -0
- /package/dist/{chunk-2HGUDBRJ.js.map → chunk-37ZO6LLJ.js.map} +0 -0
- /package/dist/{chunk-QW3WFHKU.js.map → chunk-45BRYON6.js.map} +0 -0
- /package/dist/{chunk-GZICBRWK.js.map → chunk-4F6X3RXW.js.map} +0 -0
- /package/dist/{chunk-7BAYBYY5.js.map → chunk-4PC4PRJE.js.map} +0 -0
- /package/dist/{chunk-VJXY5ZCT.js.map → chunk-52UKFTUK.js.map} +0 -0
- /package/dist/{chunk-ESG7Z255.js.map → chunk-5UDMFE3Q.js.map} +0 -0
- /package/dist/{chunk-JPHEOE6Z.js.map → chunk-6MTSFX7A.js.map} +0 -0
- /package/dist/{chunk-M4MP34AQ.js.map → chunk-AHZOMHWN.js.map} +0 -0
- /package/dist/{chunk-Z3RHPGSY.js.map → chunk-AIUBBHSF.js.map} +0 -0
- /package/dist/{chunk-S3AYIQCU.js.map → chunk-AXIDQG5A.js.map} +0 -0
- /package/dist/{chunk-QN7NTKRC.js.map → chunk-AZ2QBGYB.js.map} +0 -0
- /package/dist/{chunk-47J4EDGR.js.map → chunk-AZM4CCAC.js.map} +0 -0
- /package/dist/{chunk-LEJPSMKM.js.map → chunk-C5QLI33R.js.map} +0 -0
- /package/dist/{chunk-SV3PSA7Y.js.map → chunk-CV6BBVYV.js.map} +0 -0
- /package/dist/{chunk-V7X767RT.js.map → chunk-DCZBSE4F.js.map} +0 -0
- /package/dist/{chunk-7PKFPLLZ.js.map → chunk-FXTYIA46.js.map} +0 -0
- /package/dist/{chunk-64BHFFKZ.js.map → chunk-HLYR2TQL.js.map} +0 -0
- /package/dist/{chunk-5C2HNJMO.js.map → chunk-J5LLX6IL.js.map} +0 -0
- /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
- /package/dist/{chunk-PLKFO2HJ.js.map → chunk-JL43BVDE.js.map} +0 -0
- /package/dist/{chunk-2S72LWKX.js.map → chunk-JYL3BVVZ.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-PYKKWQZ2.js.map → chunk-M7BXDKPR.js.map} +0 -0
- /package/dist/{chunk-Z54EM5YZ.js.map → chunk-MAXVH44E.js.map} +0 -0
- /package/dist/{chunk-LYMNZZIM.js.map → chunk-NIS256NW.js.map} +0 -0
- /package/dist/{chunk-67QG75MJ.js.map → chunk-NLK2VZYZ.js.map} +0 -0
- /package/dist/{chunk-JYIFGGEM.js.map → chunk-OUKBMQ2O.js.map} +0 -0
- /package/dist/{chunk-75XOWNRS.js.map → chunk-OYESWJ43.js.map} +0 -0
- /package/dist/{chunk-TS4AJ2GI.js.map → chunk-PA45XCUD.js.map} +0 -0
- /package/dist/{chunk-4MBPIL4V.js.map → chunk-PUSLMZBQ.js.map} +0 -0
- /package/dist/{chunk-RVO6TCTU.js.map → chunk-QCECHYZL.js.map} +0 -0
- /package/dist/{chunk-GFIKG4FR.js.map → chunk-QGR6OVGT.js.map} +0 -0
- /package/dist/{chunk-HNZKVLAN.js.map → chunk-S354QO4R.js.map} +0 -0
- /package/dist/{chunk-NO37MR45.js.map → chunk-SOEN6KCF.js.map} +0 -0
- /package/dist/{chunk-FXX6RQYC.js.map → chunk-TPTECFWR.js.map} +0 -0
- /package/dist/{chunk-GDDGZVFI.js.map → chunk-UEVLYVNW.js.map} +0 -0
- /package/dist/{chunk-YQ4IQ2GA.js.map → chunk-UT5BV5OG.js.map} +0 -0
- /package/dist/{chunk-LNTUXKBT.js.map → chunk-UYYW2KPU.js.map} +0 -0
- /package/dist/{chunk-QSYL5CXK.js.map → chunk-VKXWK44Q.js.map} +0 -0
- /package/dist/{chunk-KMWYZTIE.js.map → chunk-VMMQDEN5.js.map} +0 -0
- /package/dist/{chunk-JB6D7EFB.js.map → chunk-VVG2BOKA.js.map} +0 -0
- /package/dist/{chunk-V5H6OJCR.js.map → chunk-W5XVQFLM.js.map} +0 -0
- /package/dist/{chunk-OIOZ6MOP.js.map → chunk-W6FNX2LP.js.map} +0 -0
- /package/dist/{chunk-6QPHF6RR.js.map → chunk-WQM326GS.js.map} +0 -0
- /package/dist/{chunk-TQFHQPWD.js.map → chunk-XADV5IZ3.js.map} +0 -0
- /package/dist/{chunk-DATDLJAO.js.map → chunk-XAPMEU3K.js.map} +0 -0
- /package/dist/{chunk-N3LL5NEU.js.map → chunk-ZMYDYNI4.js.map} +0 -0
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* Owns the write-path semantic-analysis subsystem: contradiction detection
|
|
5
5
|
* (QMD similarity search + LLM verification), deferred contradiction
|
|
6
6
|
* auto-resolve (#1645 — retires superseded memories only after the new write's
|
|
7
|
-
* tombstone status is known), and memory link suggestion.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* fact-write branches) continue to work.
|
|
7
|
+
* tombstone status is known), and memory link suggestion. The orchestrator
|
|
8
|
+
* constructs one instance and keeps thin delegating methods so existing call
|
|
9
|
+
* sites (writeMemory fact-write branches) continue to work.
|
|
11
10
|
*
|
|
12
11
|
* Config, storage, search, namespace resolution, and the extraction engine are
|
|
13
12
|
* accessed through getter callbacks (not captured at construction) so that
|
|
@@ -22,6 +21,7 @@ import type {
|
|
|
22
21
|
PluginConfig,
|
|
23
22
|
QmdSearchResult,
|
|
24
23
|
} from "../types.js";
|
|
24
|
+
import { coerceBool } from "../connectors/coerce.js";
|
|
25
25
|
// StorageManager type comes from the package barrel (type-only) so this
|
|
26
26
|
// module does not add a direct storage.ts import (ratchet #1533).
|
|
27
27
|
import type { StorageManager } from "../index.js";
|
|
@@ -29,6 +29,11 @@ import type { ExtractionEngine } from "../extraction.js";
|
|
|
29
29
|
import { log } from "../logger.js";
|
|
30
30
|
import { resolveIndexingCapabilities } from "../capabilities.js";
|
|
31
31
|
import { deindexMemoryAsync } from "../temporal-index.js";
|
|
32
|
+
import {
|
|
33
|
+
inferLocalizationMemoryStatus,
|
|
34
|
+
localizeUpdateCandidates,
|
|
35
|
+
mergeMemorySnapshots,
|
|
36
|
+
} from "./update-localization.js";
|
|
32
37
|
import { propagateInvalidation } from "./dependency-propagation.js";
|
|
33
38
|
|
|
34
39
|
/** Result type of {@link ContradictionLinkingCoordinator.checkForContradiction}. */
|
|
@@ -41,6 +46,15 @@ export interface ContradictionResult {
|
|
|
41
46
|
supersededTags: string[];
|
|
42
47
|
}
|
|
43
48
|
|
|
49
|
+
/** Outcome of the post-write contradiction retirement attempt. */
|
|
50
|
+
export type ContradictionResolveOutcome =
|
|
51
|
+
| "not_attempted"
|
|
52
|
+
| "blocked"
|
|
53
|
+
| "resolved"
|
|
54
|
+
| "lost_race"
|
|
55
|
+
| "supersede_failed"
|
|
56
|
+
| "supersedes_clear_failed";
|
|
57
|
+
|
|
44
58
|
/**
|
|
45
59
|
* Subset of {@link ContradictionResult} used by
|
|
46
60
|
* {@link ContradictionLinkingCoordinator.applyDeferredContradictionResolve}.
|
|
@@ -111,47 +125,156 @@ export class ContradictionLinkingCoordinator {
|
|
|
111
125
|
content: string,
|
|
112
126
|
category: string,
|
|
113
127
|
namespaceScope: string,
|
|
128
|
+
anchor?: {
|
|
129
|
+
entityRef?: string;
|
|
130
|
+
structuredAttributes?: Record<string, string>;
|
|
131
|
+
attributes?: Record<string, string>;
|
|
132
|
+
storageSnapshot?: MemoryFile[];
|
|
133
|
+
},
|
|
114
134
|
): Promise<ContradictionResult | null> {
|
|
115
|
-
if (!this.isSearchAvailable()) return null;
|
|
116
|
-
|
|
117
135
|
const config = this.getConfig();
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
136
|
+
const localization = config.contradictionLocalization;
|
|
137
|
+
const anchorEnabled = coerceBool(localization?.anchorEnabled) ?? true;
|
|
138
|
+
if (!anchorEnabled) {
|
|
139
|
+
if (!this.isSearchAvailable()) return null;
|
|
140
|
+
const results = await this.searchAcrossNamespaces({
|
|
141
|
+
query: content,
|
|
142
|
+
namespaces: [namespaceScope],
|
|
143
|
+
maxResults: 5,
|
|
144
|
+
mode: "search",
|
|
145
|
+
});
|
|
146
|
+
for (const result of results) {
|
|
147
|
+
if (result.score < config.contradictionSimilarityThreshold) continue;
|
|
148
|
+
const memoryId = this.extractMemoryIdsFromResults([result])[0];
|
|
149
|
+
if (!memoryId) continue;
|
|
150
|
+
const resultNamespace = this.namespaceFromPath(result.path);
|
|
151
|
+
if (resultNamespace !== namespaceScope) continue;
|
|
152
|
+
const resultStorage = await this.storageForNamespace(resultNamespace);
|
|
153
|
+
const existingMemory = await resultStorage.getMemoryById(memoryId);
|
|
154
|
+
if (!existingMemory) continue;
|
|
155
|
+
if (inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active") continue;
|
|
156
|
+
const verification = await this.getExtraction().verifyContradiction(
|
|
157
|
+
{ content, category },
|
|
158
|
+
{
|
|
159
|
+
id: existingMemory.frontmatter.id,
|
|
160
|
+
content: existingMemory.content,
|
|
161
|
+
category: existingMemory.frontmatter.category,
|
|
162
|
+
created: existingMemory.frontmatter.created,
|
|
163
|
+
},
|
|
164
|
+
);
|
|
165
|
+
if (!verification) continue;
|
|
166
|
+
if (
|
|
167
|
+
verification.isContradiction &&
|
|
168
|
+
verification.confidence >= config.contradictionMinConfidence
|
|
169
|
+
) {
|
|
170
|
+
if (verification.whichIsNewer === "first") {
|
|
171
|
+
log.info(
|
|
172
|
+
`detected contradiction (confidence: ${verification.confidence}): ${existingMemory.frontmatter.id} vs new memory — existing is newer, incoming fact is stale`,
|
|
173
|
+
);
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
log.info(
|
|
177
|
+
`detected contradiction (confidence: ${verification.confidence}): ${existingMemory.frontmatter.id} vs new memory${config.contradictionAutoResolve ? " (auto-resolved)" : " (queued for manual review)"}`,
|
|
178
|
+
);
|
|
179
|
+
return {
|
|
180
|
+
supersededId: existingMemory.frontmatter.id,
|
|
181
|
+
confidence: verification.confidence,
|
|
182
|
+
reason: verification.reasoning,
|
|
183
|
+
supersededPath: existingMemory.path,
|
|
184
|
+
supersededCreated: existingMemory.frontmatter.created,
|
|
185
|
+
supersededTags: existingMemory.frontmatter.tags ?? [],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
131
188
|
}
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
132
191
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
192
|
+
const localizationOptions = localization ?? {
|
|
193
|
+
anchorEnabled: true,
|
|
194
|
+
anchorCandidates: 5,
|
|
195
|
+
searchCandidates: 5,
|
|
196
|
+
maxCandidates: 8,
|
|
197
|
+
};
|
|
198
|
+
const resultStorage = await this.storageForNamespace(namespaceScope);
|
|
199
|
+
let anchorSnapshot = anchor?.storageSnapshot;
|
|
200
|
+
const anchorLimit = localizationOptions.anchorCandidates;
|
|
201
|
+
if (
|
|
202
|
+
!anchorSnapshot &&
|
|
203
|
+
Number.isInteger(anchorLimit) &&
|
|
204
|
+
anchorLimit > 0 &&
|
|
205
|
+
typeof anchor?.entityRef === "string" &&
|
|
206
|
+
anchor?.entityRef.trim().length > 0
|
|
207
|
+
) {
|
|
208
|
+
const [hot, cold] = await Promise.all([
|
|
209
|
+
resultStorage.readAllMemories(),
|
|
210
|
+
typeof resultStorage.readAllColdMemories === "function"
|
|
211
|
+
? resultStorage.readAllColdMemories()
|
|
212
|
+
: Promise.resolve([]),
|
|
213
|
+
]);
|
|
214
|
+
anchorSnapshot = mergeMemorySnapshots(hot, cold, resultStorage.dir);
|
|
215
|
+
}
|
|
216
|
+
const anchorMemoryById = anchorSnapshot
|
|
217
|
+
? new Map(anchorSnapshot.map((memory) => [memory.frontmatter.id, memory]))
|
|
218
|
+
: undefined;
|
|
219
|
+
const candidates = await localizeUpdateCandidates(
|
|
220
|
+
{
|
|
221
|
+
storage: anchorSnapshot
|
|
222
|
+
? {
|
|
223
|
+
dir: resultStorage.dir,
|
|
224
|
+
readAllMemories: async () => anchorSnapshot ?? [],
|
|
225
|
+
readAllColdMemories: async () => [],
|
|
226
|
+
}
|
|
227
|
+
: resultStorage,
|
|
228
|
+
qmdSearch: async (query, limit) => {
|
|
229
|
+
if (!this.isSearchAvailable()) {
|
|
230
|
+
log.warn("[contradiction-linking] QMD unavailable; continuing with anchor candidates");
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
233
|
+
const results = await this.searchAcrossNamespaces({
|
|
234
|
+
query,
|
|
235
|
+
namespaces: [namespaceScope],
|
|
236
|
+
maxResults: limit,
|
|
237
|
+
mode: "search",
|
|
238
|
+
});
|
|
239
|
+
const hits = [];
|
|
240
|
+
for (const result of results) {
|
|
241
|
+
if (result.score < config.contradictionSimilarityThreshold) continue;
|
|
242
|
+
const memoryId = this.extractMemoryIdsFromResults([result])[0];
|
|
243
|
+
if (!memoryId) continue;
|
|
244
|
+
if (this.namespaceFromPath(result.path) !== namespaceScope) continue;
|
|
245
|
+
const existingMemory =
|
|
246
|
+
anchorMemoryById?.get(memoryId) ?? (await resultStorage.getMemoryById(memoryId));
|
|
247
|
+
if (
|
|
248
|
+
!existingMemory ||
|
|
249
|
+
inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active"
|
|
250
|
+
) continue;
|
|
251
|
+
hits.push({
|
|
252
|
+
id: memoryId,
|
|
253
|
+
content: existingMemory.content,
|
|
254
|
+
category: existingMemory.frontmatter.category,
|
|
255
|
+
score: result.score,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
return hits;
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
entityRef: anchor?.entityRef,
|
|
263
|
+
category,
|
|
264
|
+
attributes: anchor?.structuredAttributes ?? anchor?.attributes,
|
|
265
|
+
},
|
|
266
|
+
content,
|
|
267
|
+
localizationOptions,
|
|
268
|
+
);
|
|
142
269
|
|
|
143
|
-
|
|
144
|
-
|
|
270
|
+
for (const candidate of candidates) {
|
|
271
|
+
const existingMemory =
|
|
272
|
+
anchorMemoryById?.get(candidate.id) ?? (await resultStorage.getMemoryById(candidate.id));
|
|
145
273
|
if (
|
|
146
|
-
existingMemory
|
|
147
|
-
existingMemory.
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Verify contradiction with LLM
|
|
153
|
-
const extraction = this.getExtraction();
|
|
154
|
-
const verification = await extraction.verifyContradiction(
|
|
274
|
+
!existingMemory ||
|
|
275
|
+
inferLocalizationMemoryStatus(existingMemory, resultStorage.dir) !== "active"
|
|
276
|
+
) continue;
|
|
277
|
+
const verification = await this.getExtraction().verifyContradiction(
|
|
155
278
|
{ content, category },
|
|
156
279
|
{
|
|
157
280
|
id: existingMemory.frontmatter.id,
|
|
@@ -160,38 +283,17 @@ export class ContradictionLinkingCoordinator {
|
|
|
160
283
|
created: existingMemory.frontmatter.created,
|
|
161
284
|
},
|
|
162
285
|
);
|
|
163
|
-
|
|
164
286
|
if (!verification) continue;
|
|
165
|
-
|
|
166
|
-
// Check if it's a real contradiction with high confidence
|
|
167
287
|
if (
|
|
168
288
|
verification.isContradiction &&
|
|
169
289
|
verification.confidence >= config.contradictionMinConfidence
|
|
170
290
|
) {
|
|
171
|
-
// When the LLM says the existing memory is newer (whichIsNewer ===
|
|
172
|
-
// "first") the incoming fact is the stale one in both resolve modes —
|
|
173
|
-
// log and continue so the caller never marks contradictionDetected and
|
|
174
|
-
// the semantic-skip gate can discard the outdated write normally.
|
|
175
291
|
if (verification.whichIsNewer === "first") {
|
|
176
292
|
log.info(
|
|
177
293
|
`detected contradiction (confidence: ${verification.confidence}): ${existingMemory.frontmatter.id} vs new memory — existing is newer, incoming fact is stale`,
|
|
178
294
|
);
|
|
179
295
|
continue;
|
|
180
296
|
}
|
|
181
|
-
|
|
182
|
-
// The new fact is newer than the existing one. When auto-resolve is
|
|
183
|
-
// enabled, the caller retires the old memory AFTER the new write lands
|
|
184
|
-
// and its tombstone status is known (#1645: defer auto-resolve until
|
|
185
|
-
// tombstone status is known — a tombstone-blocked new write must not
|
|
186
|
-
// retire the only active copy, leaving neither memory active). When
|
|
187
|
-
// disabled, the old memory stays active for manual review. The
|
|
188
|
-
// contradiction info is returned in both cases so the caller can apply
|
|
189
|
-
// the deferred retire post-write.
|
|
190
|
-
|
|
191
|
-
// Return the contradiction info regardless of auto-resolve setting.
|
|
192
|
-
// The caller uses this to set `contradictionDetected=true` which
|
|
193
|
-
// prevents the semantic-skip guard from silently dropping a
|
|
194
|
-
// legitimately contradictory update (the regression this fixes).
|
|
195
297
|
log.info(
|
|
196
298
|
`detected contradiction (confidence: ${verification.confidence}): ${existingMemory.frontmatter.id} vs new memory${config.contradictionAutoResolve ? " (auto-resolved)" : " (queued for manual review)"}`,
|
|
197
299
|
);
|
|
@@ -205,10 +307,8 @@ export class ContradictionLinkingCoordinator {
|
|
|
205
307
|
};
|
|
206
308
|
}
|
|
207
309
|
}
|
|
208
|
-
|
|
209
310
|
return null;
|
|
210
311
|
}
|
|
211
|
-
|
|
212
312
|
/**
|
|
213
313
|
* #1645: Complete the deferred contradiction auto-resolve after writeMemory
|
|
214
314
|
* returns and the new write's tombstone status is known. Retires the old
|
|
@@ -222,7 +322,7 @@ export class ContradictionLinkingCoordinator {
|
|
|
222
322
|
storage: StorageManager,
|
|
223
323
|
newMemoryId: string,
|
|
224
324
|
postWriteGuard: boolean,
|
|
225
|
-
): Promise<
|
|
325
|
+
): Promise<ContradictionResolveOutcome> {
|
|
226
326
|
const config = this.getConfig();
|
|
227
327
|
// #1645 yG2: clear the pre-write `supersedes` link from a blocked row so
|
|
228
328
|
// it doesn't claim to supersede a still-active memory (best-effort).
|
|
@@ -243,25 +343,87 @@ export class ContradictionLinkingCoordinator {
|
|
|
243
343
|
!config.contradictionAutoResolve ||
|
|
244
344
|
postWriteGuard
|
|
245
345
|
) {
|
|
246
|
-
return;
|
|
346
|
+
return postWriteGuard ? "blocked" : "not_attempted";
|
|
247
347
|
}
|
|
248
348
|
|
|
249
349
|
// Capture links before the primary supersession. The propagation hook is
|
|
250
350
|
// orchestration-owned, so its own supersessions cannot recurse.
|
|
251
351
|
let oldMemory: MemoryFile | null = null;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
352
|
+
if (coerceBool(config.dependencyPropagation?.enabled) === true) {
|
|
353
|
+
try {
|
|
354
|
+
const [hot, cold] = await Promise.all([
|
|
355
|
+
typeof storage.readAllMemories === "function"
|
|
356
|
+
? storage.readAllMemories()
|
|
357
|
+
: storage.getMemoryById(contradiction.supersededId).then((memory) =>
|
|
358
|
+
memory ? [memory] : [],
|
|
359
|
+
),
|
|
360
|
+
typeof storage.readAllColdMemories === "function"
|
|
361
|
+
? storage.readAllColdMemories()
|
|
362
|
+
: Promise.resolve([]),
|
|
363
|
+
]);
|
|
364
|
+
oldMemory = mergeMemorySnapshots(hot, cold, storage.dir).find(
|
|
365
|
+
(memory) => memory.frontmatter.id === contradiction.supersededId,
|
|
366
|
+
) ?? null;
|
|
367
|
+
} catch (err) {
|
|
368
|
+
log.warn(`contradiction propagation snapshot failed for ${contradiction.supersededId}: ${err}`);
|
|
369
|
+
}
|
|
256
370
|
}
|
|
257
|
-
|
|
258
371
|
try {
|
|
259
372
|
const superseded = await storage.supersedeMemory(
|
|
260
373
|
contradiction.supersededId,
|
|
261
374
|
newMemoryId,
|
|
262
375
|
contradiction.reason,
|
|
263
376
|
);
|
|
264
|
-
if (!superseded)
|
|
377
|
+
if (!superseded) {
|
|
378
|
+
let mergedSnapshot: MemoryFile[];
|
|
379
|
+
try {
|
|
380
|
+
const [hot, cold] = await Promise.all([
|
|
381
|
+
typeof storage.readAllMemories === "function"
|
|
382
|
+
? storage.readAllMemories()
|
|
383
|
+
: Promise.all([
|
|
384
|
+
storage.getMemoryById(contradiction.supersededId),
|
|
385
|
+
storage.getMemoryById(newMemoryId),
|
|
386
|
+
]).then((memories) =>
|
|
387
|
+
memories.filter((memory): memory is MemoryFile => memory !== null),
|
|
388
|
+
),
|
|
389
|
+
typeof storage.readAllColdMemories === "function"
|
|
390
|
+
? storage.readAllColdMemories()
|
|
391
|
+
: Promise.resolve([]),
|
|
392
|
+
]);
|
|
393
|
+
mergedSnapshot = mergeMemorySnapshots(hot, cold, storage.dir);
|
|
394
|
+
} catch (err) {
|
|
395
|
+
log.warn(
|
|
396
|
+
`contradiction auto-resolve race check failed for ${contradiction.supersededId}: ${err}`,
|
|
397
|
+
);
|
|
398
|
+
return "supersede_failed";
|
|
399
|
+
}
|
|
400
|
+
const target = mergedSnapshot.find(
|
|
401
|
+
(memory) => memory.frontmatter.id === contradiction.supersededId,
|
|
402
|
+
);
|
|
403
|
+
if (!target) return "supersede_failed";
|
|
404
|
+
const losingMemory = mergedSnapshot.find(
|
|
405
|
+
(memory) =>
|
|
406
|
+
memory.frontmatter.id === newMemoryId &&
|
|
407
|
+
inferLocalizationMemoryStatus(memory, storage.dir) === "active",
|
|
408
|
+
);
|
|
409
|
+
if (!losingMemory) return "supersede_failed";
|
|
410
|
+
try {
|
|
411
|
+
if (losingMemory.frontmatter.supersedes === contradiction.supersededId) {
|
|
412
|
+
const cleared = await storage.writeMemoryFrontmatter(losingMemory, {
|
|
413
|
+
supersedes: undefined,
|
|
414
|
+
});
|
|
415
|
+
if (cleared === false) return "supersedes_clear_failed";
|
|
416
|
+
}
|
|
417
|
+
} catch (err) {
|
|
418
|
+
log.warn(
|
|
419
|
+
`contradiction auto-resolve losing supersedes clear failed for ${newMemoryId}: ${err}`,
|
|
420
|
+
);
|
|
421
|
+
return "supersedes_clear_failed";
|
|
422
|
+
}
|
|
423
|
+
return inferLocalizationMemoryStatus(target, storage.dir) === "active"
|
|
424
|
+
? "supersede_failed"
|
|
425
|
+
: "lost_race";
|
|
426
|
+
}
|
|
265
427
|
if (oldMemory) {
|
|
266
428
|
try {
|
|
267
429
|
await propagateInvalidation(
|
|
@@ -287,17 +449,25 @@ export class ContradictionLinkingCoordinator {
|
|
|
287
449
|
resolveIndexingCapabilities(config).queryAwareIndexing &&
|
|
288
450
|
contradiction.supersededPath
|
|
289
451
|
) {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
452
|
+
try {
|
|
453
|
+
await deindexMemoryAsync(
|
|
454
|
+
config.memoryDir,
|
|
455
|
+
contradiction.supersededPath,
|
|
456
|
+
contradiction.supersededCreated,
|
|
457
|
+
contradiction.supersededTags,
|
|
458
|
+
);
|
|
459
|
+
} catch (err) {
|
|
460
|
+
log.warn(
|
|
461
|
+
`contradiction auto-resolve deindex failed for ${contradiction.supersededId}: ${err}`,
|
|
462
|
+
);
|
|
463
|
+
}
|
|
296
464
|
}
|
|
465
|
+
return "resolved";
|
|
297
466
|
} catch (err) {
|
|
298
467
|
log.warn(
|
|
299
468
|
`contradiction auto-resolve supersede failed for ${contradiction.supersededId}: ${err}`,
|
|
300
469
|
);
|
|
470
|
+
return "supersede_failed";
|
|
301
471
|
}
|
|
302
472
|
}
|
|
303
473
|
|