@remnic/core 9.44.0 → 9.45.1
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 +10 -10
- package/dist/access-admin-ops-surface.js +26 -25
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +10 -10
- package/dist/access-authorization-probe.js +27 -26
- package/dist/access-boundary.d.ts +10 -10
- package/dist/access-boundary.js +26 -25
- package/dist/access-cli.js +70 -68
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.d.ts +10 -10
- package/dist/access-extraction-force-flush.js +26 -25
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +10 -10
- package/dist/access-http-lifecycle-flush.d.ts +10 -10
- package/dist/access-http-query.js +26 -25
- package/dist/access-http.d.ts +10 -10
- package/dist/access-http.js +34 -33
- package/dist/access-identity-continuity-surface.d.ts +8 -8
- package/dist/access-identity-continuity-surface.js +26 -25
- package/dist/access-lcm-surface.d.ts +10 -10
- package/dist/access-lcm-surface.js +26 -25
- package/dist/access-mcp.d.ts +10 -10
- package/dist/access-mcp.js +30 -29
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-47dOyty9.d.ts → access-namespace-preflight-5yZ4g6F8.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +26 -25
- package/dist/access-observe-write-surface.d.ts +10 -10
- package/dist/access-observe-write-surface.js +26 -25
- package/dist/access-operations-batch.js +28 -27
- package/dist/access-operations.d.ts +10 -10
- package/dist/access-operations.js +29 -28
- package/dist/access-recall-concurrency.d.ts +10 -10
- package/dist/access-recall-concurrency.js +26 -25
- package/dist/access-recall-response.d.ts +10 -10
- package/dist/access-recall-response.js +26 -25
- package/dist/access-recall-surface.d.ts +10 -10
- package/dist/access-recall-surface.js +26 -25
- package/dist/{access-service-BCZJbX0f.d.ts → access-service-CiJRsgAB.d.ts} +7 -7
- package/dist/access-service-helpers.d.ts +10 -10
- package/dist/access-service.d.ts +10 -10
- package/dist/access-service.js +26 -25
- package/dist/access-surface-catalog.d.ts +10 -10
- package/dist/access-wearables-meetings-surface.d.ts +3 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +3 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +8 -8
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +10 -9
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-DPQynQZG.d.ts → catalog-scBmy0sO.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +1 -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 +1 -1
- package/dist/causal-trajectory-graph.js +2 -2
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-CH2WTP6R.js → chunk-33PLLLL7.js} +2 -2
- package/dist/{chunk-TXBU7YDV.js → chunk-3TBLDMJA.js} +2 -2
- package/dist/{chunk-MUKLQDJP.js → chunk-4UH4BTGK.js} +35 -35
- package/dist/{chunk-N7LPS4Z3.js → chunk-5SM35XZR.js} +2 -2
- package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
- package/dist/{chunk-YUOKZ3LJ.js → chunk-A5OJCXZL.js} +2 -2
- package/dist/{chunk-I22U5YYD.js → chunk-AAIUERNB.js} +2 -2
- package/dist/{chunk-UUQLB2HJ.js → chunk-BJKPPZ6Z.js} +2 -2
- package/dist/{chunk-EUVPB5TA.js → chunk-CJ2ZR7UA.js} +17 -17
- package/dist/{chunk-TM72UOX2.js → chunk-CUM2BBPN.js} +5 -1
- package/dist/chunk-CUM2BBPN.js.map +1 -0
- package/dist/{chunk-WMHO3WLC.js → chunk-D3J5SLQK.js} +2 -2
- package/dist/{chunk-PJUHQC4T.js → chunk-DL7ZD3JH.js} +2 -2
- package/dist/{chunk-O4BADU6R.js → chunk-DNWXFTLD.js} +2 -2
- package/dist/{chunk-IXFI6E3Q.js → chunk-E53DSZEN.js} +2 -2
- package/dist/{chunk-WX6KOVVK.js → chunk-E5UK4VPE.js} +2 -2
- package/dist/{chunk-OHLNFI6Z.js → chunk-E6PNLPGJ.js} +25 -23
- package/dist/{chunk-OHLNFI6Z.js.map → chunk-E6PNLPGJ.js.map} +1 -1
- package/dist/{chunk-Z54EM5YZ.js → chunk-GF22HWS2.js} +4 -4
- package/dist/chunk-HBVPYRDW.js +39 -0
- package/dist/chunk-HBVPYRDW.js.map +1 -0
- package/dist/{chunk-W6ROK2KU.js → chunk-HNZKVLAN.js} +2 -2
- package/dist/{chunk-GDC4INBF.js → chunk-HO3QBJEY.js} +2 -2
- package/dist/{chunk-J43XN7N3.js → chunk-HREE4JHI.js} +50 -50
- package/dist/{chunk-GSL47NPM.js → chunk-J7VGGECD.js} +1 -1
- package/dist/chunk-J7VGGECD.js.map +1 -0
- package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
- package/dist/{chunk-WUDWRUGK.js → chunk-JE7EK33X.js} +2 -2
- package/dist/{chunk-IADUAH35.js → chunk-JVLCVFQ4.js} +2 -2
- package/dist/{chunk-UZGJFIIG.js → chunk-JYIFGGEM.js} +2 -2
- package/dist/chunk-K442KOID.js +443 -0
- package/dist/chunk-K442KOID.js.map +1 -0
- package/dist/{chunk-3SHB4YAW.js → chunk-L2DPF4DF.js} +4 -4
- package/dist/{chunk-JDDTNK5P.js → chunk-LZ4LDKHZ.js} +2 -2
- package/dist/{chunk-PO5LSKQO.js → chunk-MU7ZHSZE.js} +2 -2
- package/dist/{chunk-CAGPP5NB.js → chunk-NRV4Y3PM.js} +1 -1
- package/dist/{chunk-7PLHD7EO.js → chunk-OAEQLRCY.js} +2 -2
- package/dist/{chunk-HGFILS2Q.js → chunk-OQ5PRDDS.js} +2 -2
- package/dist/{chunk-E6JYVPBK.js → chunk-P4DRWEYC.js} +2 -2
- package/dist/{chunk-MYFFOPO2.js → chunk-PDLBLTOK.js} +2 -2
- package/dist/{chunk-EMC5GT4H.js → chunk-PKNLM44P.js} +4 -4
- package/dist/{chunk-35IC3EVP.js → chunk-QN25OCUF.js} +2 -2
- package/dist/{chunk-OZL7KB6B.js → chunk-RN7DY3FC.js} +5 -5
- package/dist/{chunk-2FTRRQKZ.js → chunk-RVLJEII5.js} +30 -511
- package/dist/chunk-RVLJEII5.js.map +1 -0
- package/dist/{chunk-G24HJJ67.js → chunk-S2NCTZGJ.js} +6 -6
- package/dist/chunk-S5SLVSVY.js +517 -0
- package/dist/chunk-S5SLVSVY.js.map +1 -0
- package/dist/{chunk-R4Q7CQGZ.js → chunk-TDHTVMPG.js} +2 -2
- package/dist/{chunk-FXGLFGIG.js → chunk-TIHMZFIV.js} +3 -3
- package/dist/{chunk-U5SX74DV.js → chunk-U7GW7NE7.js} +7 -7
- package/dist/{chunk-PLQCPMJA.js → chunk-UVIKWC7M.js} +10 -10
- package/dist/{chunk-2QR2RRH6.js → chunk-UYLMNVY6.js} +4 -4
- package/dist/{chunk-OPVOUBHT.js → chunk-VUPTKTDV.js} +2 -2
- package/dist/{chunk-HXTUA7QM.js → chunk-VWAXN2BN.js} +7 -7
- package/dist/{chunk-TRBIJS2T.js → chunk-XYTOI63Z.js} +2 -2
- package/dist/{cli-U30A3jyx.d.ts → cli-BUGN3d6_.d.ts} +5 -5
- package/dist/cli.d.ts +12 -12
- package/dist/cli.js +53 -51
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +10 -9
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +10 -9
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +10 -9
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/converge-config.d.ts +11 -0
- package/dist/converge-config.js +12 -0
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +12 -11
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +12 -11
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +10 -9
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +8 -8
- package/dist/explicit-capture.js +3 -2
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +12 -11
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/{graph-edge-decay-GF3ZSGSP.js → graph-edge-decay-Z6ENALU2.js} +4 -4
- package/dist/graph-edge-decay-Z6ENALU2.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph-snapshot.js +3 -3
- package/dist/graph.d.ts +1 -1
- package/dist/graph.js +2 -2
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +20 -19
- package/dist/index.js +78 -71
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +4 -4
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +10 -9
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -9
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +11 -10
- package/dist/{maintenance-DVBLXkFw.d.ts → maintenance-LbuS2rUA.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +10 -10
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +11 -10
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +10 -9
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +13 -12
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +21 -19
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +15 -14
- package/dist/{orchestrator-DUxbhhqO.d.ts → orchestrator-rHiWt32X.d.ts} +7 -7
- package/dist/orchestrator.d.ts +8 -8
- package/dist/orchestrator.js +70 -68
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-Cs76XC-p.d.ts → pipeline-W_97O8BV.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{qmd-WJwvBgiF.d.ts → qmd-LWtMofAf.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/manifest.d.ts +33 -0
- package/dist/reconcile/manifest.js +249 -0
- package/dist/reconcile/manifest.js.map +1 -0
- package/dist/reconcile/plan.d.ts +19 -24
- package/dist/reconcile/plan.js +9 -404
- package/dist/reconcile/plan.js.map +1 -1
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +4 -3
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/{scope-profiles-CQ0NAleS.d.ts → scope-profiles-BiQKOE-p.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-BWxOBMtz.d.ts → semantic-consolidation-dHYCyqgh.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +11 -10
- package/dist/semantic-rule-promotion.js +10 -9
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +10 -9
- package/dist/{service-CLuMO-pa.d.ts → service-DJG3KCQ4.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +10 -9
- package/dist/{storage-Blr71GpS.d.ts → storage-F9FVh-w9.d.ts} +13 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +9 -8
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-CqWwMPr_.d.ts → types-rEwubvim.d.ts} +6 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +10 -9
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +12 -2
- package/src/config.test.ts +24 -0
- package/src/config.ts +3 -0
- package/src/converge-config.ts +39 -0
- package/src/index.ts +1 -2
- package/src/reconcile/manifest.test.ts +261 -0
- package/src/reconcile/manifest.ts +278 -0
- package/src/reconcile/plan.test.ts +40 -52
- package/src/reconcile/plan.ts +79 -63
- package/src/storage/content-hash-index.ts +26 -0
- package/src/types.ts +5 -0
- package/dist/chunk-2FTRRQKZ.js.map +0 -1
- package/dist/chunk-GSL47NPM.js.map +0 -1
- package/dist/chunk-TM72UOX2.js.map +0 -1
- /package/dist/{chunk-CH2WTP6R.js.map → chunk-33PLLLL7.js.map} +0 -0
- /package/dist/{chunk-TXBU7YDV.js.map → chunk-3TBLDMJA.js.map} +0 -0
- /package/dist/{chunk-MUKLQDJP.js.map → chunk-4UH4BTGK.js.map} +0 -0
- /package/dist/{chunk-N7LPS4Z3.js.map → chunk-5SM35XZR.js.map} +0 -0
- /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
- /package/dist/{chunk-YUOKZ3LJ.js.map → chunk-A5OJCXZL.js.map} +0 -0
- /package/dist/{chunk-I22U5YYD.js.map → chunk-AAIUERNB.js.map} +0 -0
- /package/dist/{chunk-UUQLB2HJ.js.map → chunk-BJKPPZ6Z.js.map} +0 -0
- /package/dist/{chunk-EUVPB5TA.js.map → chunk-CJ2ZR7UA.js.map} +0 -0
- /package/dist/{chunk-WMHO3WLC.js.map → chunk-D3J5SLQK.js.map} +0 -0
- /package/dist/{chunk-PJUHQC4T.js.map → chunk-DL7ZD3JH.js.map} +0 -0
- /package/dist/{chunk-O4BADU6R.js.map → chunk-DNWXFTLD.js.map} +0 -0
- /package/dist/{chunk-IXFI6E3Q.js.map → chunk-E53DSZEN.js.map} +0 -0
- /package/dist/{chunk-WX6KOVVK.js.map → chunk-E5UK4VPE.js.map} +0 -0
- /package/dist/{chunk-Z54EM5YZ.js.map → chunk-GF22HWS2.js.map} +0 -0
- /package/dist/{chunk-W6ROK2KU.js.map → chunk-HNZKVLAN.js.map} +0 -0
- /package/dist/{chunk-GDC4INBF.js.map → chunk-HO3QBJEY.js.map} +0 -0
- /package/dist/{chunk-J43XN7N3.js.map → chunk-HREE4JHI.js.map} +0 -0
- /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
- /package/dist/{chunk-WUDWRUGK.js.map → chunk-JE7EK33X.js.map} +0 -0
- /package/dist/{chunk-IADUAH35.js.map → chunk-JVLCVFQ4.js.map} +0 -0
- /package/dist/{chunk-UZGJFIIG.js.map → chunk-JYIFGGEM.js.map} +0 -0
- /package/dist/{chunk-3SHB4YAW.js.map → chunk-L2DPF4DF.js.map} +0 -0
- /package/dist/{chunk-JDDTNK5P.js.map → chunk-LZ4LDKHZ.js.map} +0 -0
- /package/dist/{chunk-PO5LSKQO.js.map → chunk-MU7ZHSZE.js.map} +0 -0
- /package/dist/{chunk-CAGPP5NB.js.map → chunk-NRV4Y3PM.js.map} +0 -0
- /package/dist/{chunk-7PLHD7EO.js.map → chunk-OAEQLRCY.js.map} +0 -0
- /package/dist/{chunk-HGFILS2Q.js.map → chunk-OQ5PRDDS.js.map} +0 -0
- /package/dist/{chunk-E6JYVPBK.js.map → chunk-P4DRWEYC.js.map} +0 -0
- /package/dist/{chunk-MYFFOPO2.js.map → chunk-PDLBLTOK.js.map} +0 -0
- /package/dist/{chunk-EMC5GT4H.js.map → chunk-PKNLM44P.js.map} +0 -0
- /package/dist/{chunk-35IC3EVP.js.map → chunk-QN25OCUF.js.map} +0 -0
- /package/dist/{chunk-OZL7KB6B.js.map → chunk-RN7DY3FC.js.map} +0 -0
- /package/dist/{chunk-G24HJJ67.js.map → chunk-S2NCTZGJ.js.map} +0 -0
- /package/dist/{chunk-R4Q7CQGZ.js.map → chunk-TDHTVMPG.js.map} +0 -0
- /package/dist/{chunk-FXGLFGIG.js.map → chunk-TIHMZFIV.js.map} +0 -0
- /package/dist/{chunk-U5SX74DV.js.map → chunk-U7GW7NE7.js.map} +0 -0
- /package/dist/{chunk-PLQCPMJA.js.map → chunk-UVIKWC7M.js.map} +0 -0
- /package/dist/{chunk-2QR2RRH6.js.map → chunk-UYLMNVY6.js.map} +0 -0
- /package/dist/{chunk-OPVOUBHT.js.map → chunk-VUPTKTDV.js.map} +0 -0
- /package/dist/{chunk-HXTUA7QM.js.map → chunk-VWAXN2BN.js.map} +0 -0
- /package/dist/{chunk-TRBIJS2T.js.map → chunk-XYTOI63Z.js.map} +0 -0
- /package/dist/{graph-edge-decay-GF3ZSGSP.js.map → converge-config.js.map} +0 -0
|
@@ -1227,6 +1227,10 @@ interface DreamsRunResult {
|
|
|
1227
1227
|
|
|
1228
1228
|
type ReasoningEffort = "none" | "low" | "medium" | "high";
|
|
1229
1229
|
type TriggerMode = "smart" | "every_n" | "time_based";
|
|
1230
|
+
type ConvergeConflictPolicy = "newest-wins" | "manual";
|
|
1231
|
+
interface ConvergeConfig {
|
|
1232
|
+
conflictPolicy: ConvergeConflictPolicy;
|
|
1233
|
+
}
|
|
1230
1234
|
type SignalLevel = "none" | "low" | "medium" | "high";
|
|
1231
1235
|
type MemoryCategory = "fact" | "preference" | "correction" | "entity" | "decision" | "relationship" | "principle" | "commitment" | "moment" | "skill" | "rule" | "procedure" | "reasoning_trace";
|
|
1232
1236
|
type ConsolidationAction = "ADD" | "MERGE" | "UPDATE" | "INVALIDATE" | "SKIP";
|
|
@@ -2320,6 +2324,7 @@ interface PluginConfig extends BoundedJsonlStateConfig {
|
|
|
2320
2324
|
procedural: ProceduralConfig;
|
|
2321
2325
|
extractionLiveness: ExtractionLivenessConfig;
|
|
2322
2326
|
replicaPeers: ReplicaPeersConfig;
|
|
2327
|
+
converge: ConvergeConfig;
|
|
2323
2328
|
/** Claim-level provenance spans (#1575); see `ProvenanceConfig` for defaults. */
|
|
2324
2329
|
provenance: ProvenanceConfig;
|
|
2325
2330
|
/**
|
|
@@ -4672,4 +4677,4 @@ interface HourlySummary {
|
|
|
4672
4677
|
generatedAt: string;
|
|
4673
4678
|
}
|
|
4674
4679
|
|
|
4675
|
-
export { type ExtractionFailureClass as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CalendarSource as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type ExtractionResult as J, type ConsolidationResult as K, type LiveConnectorsConfig as L, type MemoryFile as M, type DaySummaryResult as N, type ProvenanceSource as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type TrustWeights as U, type ConversationThread as V, type LifecycleState as W, type VerificationState as X, type PolicyClass as Y, type ReplicaPeersConfig as Z, type ReplicaPeerConfig as _, type DreamsRunResult as a, type
|
|
4680
|
+
export { type ExtractionFailureClass as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CalendarSource as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type ExtractionResult as J, type ConsolidationResult as K, type LiveConnectorsConfig as L, type MemoryFile as M, type DaySummaryResult as N, type ProvenanceSource as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type TrustWeights as U, type ConversationThread as V, type LifecycleState as W, type VerificationState as X, type PolicyClass as Y, type ReplicaPeersConfig as Z, type ReplicaPeerConfig as _, type DreamsRunResult as a, type WearablesConfig as a$, type ImportanceLevel as a0, type ActiveRecallChatType as a1, type ActiveRecallQueryMode as a2, type ActiveRecallPromptStyle as a3, type ActiveRecallThinking as a4, type ActiveRecallModelFallbackPolicy as a5, type BehaviorSignalEvent as a6, type BufferSurpriseEvent as a7, type ImportTurn as a8, type BulkImportOptions as a9, type RetrievalTier as aA, type SignalScanResult as aB, type TopicScore as aC, type QmdSearchExplain as aD, type ActivitySnapshot as aE, type ActivityConfig as aF, type ActivitySourceConfig as aG, type ActivitySourceClient as aH, type FusedWearableConversation as aI, type FusedDayMeta as aJ, type FusedDayFile as aK, type MeetingRecord as aL, type MeetingDetectionSource as aM, type FusedMeeting as aN, type EntityTimelineEntry as aO, type MemoryLink as aP, type BufferState as aQ, type FileHygieneConfig as aR, type EntityRelationship as aS, type EntityActivityEntry as aT, type AccessTrackingEntry as aU, type MemorySummary as aV, type WearableConversation as aW, type WearableSourceSettings as aX, type WearableNativeMemory as aY, type WearableMemoryMode as aZ, type WearableSourceConnector as a_, type BulkImportSource as aa, type BulkImportResult as ab, type CompressionGuidelineOptimizerEventCounts as ac, type CompressionGuidelineOptimizerActionSummary as ad, type CompressionGuidelineOptimizerRuleUpdate as ae, type MemoryActionType as af, type MemoryActionEvent as ag, type CompressionGuidelineOptimizerState as ah, type ConvergeConflictPolicy as ai, type ConvergeConfig as aj, type EntityMention as ak, type EntitySchemaDefinition as al, type EntitySchemaSectionDefinition as am, type EntityStructuredSection as an, type ProvenanceConfig as ao, type ImportanceScore as ap, type MemoryIntent as aq, type MemoryActionEligibilityContext as ar, type MemoryActionPolicyResult as as, type MemoryLifecycleEventType as at, type MemoryLifecycleStateSummary as au, type ModelProviderConfig as av, type NativeKnowledgeConfig as aw, type ExtractionBufferSource as ax, type MetaState as ay, summarizeExtractionLiveness as az, type RecallDisclosure as b, parseIsoTimestamp as b$, type WearableSyncSummary as b0, type WearableSourceStatus as b1, type WearableDayTranscript as b2, type WearableCorrectionRule as b3, type MeetingBuildInput as b4, type MeetingsConfig as b5, type MeetingsDetectionInput as b6, type FusionConversationInput as b7, type MeetingActivitySnapshot as b8, type DetectedMeeting as b9, type BriefingWindow as bA, type BulkImportError as bB, type BulkImportSourceAdapter as bC, type CodexCompatConfig as bD, DEFAULT_RECALL_DISCLOSURE as bE, type DisagreementKind as bF, type ExtractedFact as bG, type FusedContribution as bH, type FusedConversationProvenance as bI, type FusedSegmentProvenance as bJ, type FusionSegmentInput as bK, type ImportSourceRole as bL, type ImportTurnValidationIssue as bM, type MeetingScreenContextEvent as bN, type MeetingSummaryMode as bO, type MemoryActionEligibilitySource as bP, type MemoryObservation as bQ, type MemoryScope as bR, RECALL_DISCLOSURE_LEVELS as bS, type SegmentPickReason as bT, type WearableAuthCheck as bU, type WearableFetchOptions as bV, type WearableFetchPage as bW, type WearableNativeMemoryPage as bX, type WearableTranscriptSegment as bY, isImportRole as bZ, isRecallDisclosure as b_, type CodingContext as ba, type DreamsStatusResult as bb, type RecallSectionConfig as bc, type BootstrapOptions as bd, type BootstrapResult as be, type ConsolidationObservation as bf, type CodingModeConfig as bg, type FusedSpeaker as bh, type FusedSegment as bi, type FusedDisagreement as bj, type FusionOptions as bk, type FusionDayResult as bl, type CodingKnowledgeConfig as bm, type WearableCleanupSettings as bn, type WearableFusionConfig as bo, type WearableDayTranscriptMeta as bp, type ActivityDayMeta as bq, type ActivityDayDigest as br, type ActivitySourceCheck as bs, type ActivitySnapshotPage as bt, type MeetingsDetectionConfig as bu, type MeetingAudioWindow as bv, type MeetingAppSpan as bw, type ActivityExtractionMode as bx, type BriefingConfig as by, type BriefingOpenCommitment as bz, type RecallTierExplain as c, type GoogleDriveLiveConnectorConfig as c$, validateImportTurn as c0, type ExtractionLivenessConfig as c1, ExtractionLivenessWarnThrottle as c2, type ExtractionRootStats as c3, type ExtractionWatermarkOrStorage as c4, type ExtractionWatermarkRead as c5, coerceExtractionWatermark as c6, computeExtractionLivenessStatus as c7, evaluateExtractionLiveness as c8, formatAgeMs as c9, type CodexCompactionFlushMode as cA, type CodexConnectorConfig as cB, type CodingGraphLspConfig as cC, type CompressionGuidelineActivationState as cD, type CompressionGuidelineOptimizerSourceWindow as cE, type ConfidenceTier as cF, type ConsolidationAction as cG, type ConsolidationItem as cH, type ContradictionScanConfig as cI, type CronConversationRecallMode as cJ, type CronRecallMode as cK, type DreamingConfig as cL, type DreamingNarrativePromptStyle as cM, type DreamsDeepSleepConfig as cN, type DreamsLightSleepConfig as cO, type DreamsPhaseStatus as cP, type DreamsPhasesConfig as cQ, type DreamsRemConfig as cR, type EngramTraceEvent as cS, type ExtractedProcedureStep as cT, type ExtractedQuestion as cU, type ExtractedReasoningTrace as cV, type ExtractedReasoningTraceStep as cW, type ExtractedRelationship as cX, type ExtractionPassSource as cY, type GitHubLiveConnectorConfig as cZ, type GmailLiveConnectorConfig as c_, gatherExtractionLivenessStatus as ca, parseExtractionLivenessConfig as cb, renderExtractionLivenessStats as cc, resolveExtractionLivenessConfig as cd, parseReplicaPeersConfig as ce, resolveReplicaPeersConfig as cf, type BufferTurnOwner as cg, ProbeTimeoutError as ch, bufferTurnArrayIsSuffixOfSnapshot as ci, bufferTurnArraysEqual as cj, bufferTurnsEqual as ck, copyBufferTurn as cl, describeError as cm, liveTurnsFromExtractionSnapshot as cn, matchingQueuedExtractionPrefixLength as co, probeWithTimeout as cp, type AgentAccessHttpConfig as cq, type AgentDefaultsConfig as cr, type AgentPersona as cs, type BehaviorLoopAdjustment as ct, type BehaviorSignalDirection as cu, type BehaviorSignalType as cv, type BriefingCalendarSourceError as cw, type BufferEntryState as cx, type ChatConfig as cy, type CodexCliReasoningEffort as cz, type BriefingFollowup as d, type HeartbeatConfig as d0, type HeartbeatDetectionMode as d1, type LlmTraceCallback as d2, type LlmTraceEvent as d3, type MemoryActionOutcome as d4, type MemoryActionPolicyDecision as d5, type MemoryActionStatus as d6, type MemoryLinkType as d7, type MemoryOsPresetName as d8, type ModelApi as d9, confidenceTier as dA, type ModelDefinitionConfig as da, type ModelProviderAuthMode as db, type NamespacePolicy as dc, type NativeKnowledgeFolderRuleConfig as dd, type NativeKnowledgeObsidianVaultConfig as de, type NativeKnowledgeOpenClawWorkspaceConfig as df, type NotionLiveConnectorConfig as dg, type PrincipalFromSessionKeyMode as dh, type PrincipalRule as di, type ProceduralConfig as dj, type QuestionEntry as dk, type ReasoningEffort as dl, type RecallPipelineConfig as dm, type RecallTraceEvent as dn, type RelevanceFeedback as dp, SPECULATIVE_TTL_DAYS as dq, type ScopeProfileAutoPromoteConfig as dr, type ScopeProfileTeamProjectConfig as ds, type ScopeTeamConfig as dt, type ScoredEntity as du, type SemanticChunkingConfigShape as dv, type SignalLevel as dw, type SlotBehaviorConfig as dx, type SlotMismatchMode as dy, type TriggerMode as dz, type BriefingFocus as e, type CalendarEvent as f, type BriefingActiveThread as g, type BriefingResult as h, type BriefingRecentEntity as i, type BufferTurn as j, type ExtractionBufferSnapshot as k, type MemoryFrontmatter as l, type Checkpoint as m, type SourceConnectorProvenance as n, type ScopeProfileConfig as o, type ScopeProfileLayerId as p, type ScopeProfilePromotionTarget as q, type BehaviorLoopPolicyState as r, type SecretRef as s, type AgentAccessAuthToken as t, type ExtractionLivenessStatus as u, type MemoryCategory as v, type CaptureMode as w, type MemoryStatus as x, type MemoryProjectionCurrentState as y, type MemoryLifecycleEvent as z };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { aU as AccessTrackingEntry, a1 as ActiveRecallChatType, a5 as ActiveRecallModelFallbackPolicy, a3 as ActiveRecallPromptStyle, a2 as ActiveRecallQueryMode, a4 as ActiveRecallThinking, t as AgentAccessAuthToken, cq as AgentAccessHttpConfig, cr as AgentDefaultsConfig, cs as AgentPersona, A as AgentPersonaModelConfig, ct as BehaviorLoopAdjustment, r as BehaviorLoopPolicyState, cu as BehaviorSignalDirection, a6 as BehaviorSignalEvent, cv as BehaviorSignalType, bd as BootstrapOptions, be as BootstrapResult, g as BriefingActiveThread, cw as BriefingCalendarSourceError, by as BriefingConfig, e as BriefingFocus, d as BriefingFollowup, bz as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, bA as BriefingWindow, cx as BufferEntryState, aQ as BufferState, a7 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, C as CalendarSource, w as CaptureMode, cy as ChatConfig, m as Checkpoint, cz as CodexCliReasoningEffort, cA as CodexCompactionFlushMode, bD as CodexCompatConfig, cB as CodexConnectorConfig, ba as CodingContext, cC as CodingGraphLspConfig, bm as CodingKnowledgeConfig, bg as CodingModeConfig, cD as CompressionGuidelineActivationState, ad as CompressionGuidelineOptimizerActionSummary, ac as CompressionGuidelineOptimizerEventCounts, ae as CompressionGuidelineOptimizerRuleUpdate, cE as CompressionGuidelineOptimizerSourceWindow, ah as CompressionGuidelineOptimizerState, cF as ConfidenceTier, cG as ConsolidationAction, cH as ConsolidationItem, bf as ConsolidationObservation, K as ConsolidationResult, cI as ContradictionScanConfig, aj as ConvergeConfig, ai as ConvergeConflictPolicy, V as ConversationThread, cJ as CronConversationRecallMode, cK as CronRecallMode, bE as DEFAULT_RECALL_DISCLOSURE, N as DaySummaryResult, cL as DreamingConfig, cM as DreamingNarrativePromptStyle, cN as DreamsDeepSleepConfig, cO as DreamsLightSleepConfig, D as DreamsPhase, cP as DreamsPhaseStatus, cQ as DreamsPhasesConfig, cR as DreamsRemConfig, a as DreamsRunResult, bb as DreamsStatusResult, cS as EngramTraceEvent, aT as EntityActivityEntry, E as EntityFile, ak as EntityMention, aS as EntityRelationship, al as EntitySchemaDefinition, am as EntitySchemaSectionDefinition, an as EntityStructuredSection, aO as EntityTimelineEntry, bG as ExtractedFact, cT as ExtractedProcedureStep, cU as ExtractedQuestion, cV as ExtractedReasoningTrace, cW as ExtractedReasoningTraceStep, cX as ExtractedRelationship, $ as ExtractionFailureClass, cY as ExtractionPassSource, J as ExtractionResult, F as FaithfulnessFrontmatter, aR as FileHygieneConfig, G as GatewayConfig, cZ as GitHubLiveConnectorConfig, c_ as GmailLiveConnectorConfig, c$ as GoogleDriveLiveConnectorConfig, d0 as HeartbeatConfig, d1 as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, a0 as ImportanceLevel, ap as ImportanceScore, W as LifecycleState, L as LiveConnectorsConfig, d2 as LlmTraceCallback, d3 as LlmTraceEvent, ar as MemoryActionEligibilityContext, bP as MemoryActionEligibilitySource, ag as MemoryActionEvent, d4 as MemoryActionOutcome, d5 as MemoryActionPolicyDecision, as as MemoryActionPolicyResult, d6 as MemoryActionStatus, af as MemoryActionType, v as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, aq as MemoryIntent, z as MemoryLifecycleEvent, at as MemoryLifecycleEventType, au as MemoryLifecycleStateSummary, aP as MemoryLink, d7 as MemoryLinkType, bQ as MemoryObservation, d8 as MemoryOsPresetName, y as MemoryProjectionCurrentState, bR as MemoryScope, x as MemoryStatus, aV as MemorySummary, ay as MetaState, d9 as ModelApi, da as ModelDefinitionConfig, db as ModelProviderAuthMode, av as ModelProviderConfig, dc as NamespacePolicy, aw as NativeKnowledgeConfig, dd as NativeKnowledgeFolderRuleConfig, de as NativeKnowledgeObsidianVaultConfig, df as NativeKnowledgeOpenClawWorkspaceConfig, dg as NotionLiveConnectorConfig, P as PluginConfig, Y as PolicyClass, dh as PrincipalFromSessionKeyMode, di as PrincipalRule, dj as ProceduralConfig, ao as ProvenanceConfig, O as ProvenanceSource, aD as QmdSearchExplain, Q as QmdSearchResult, dk as QuestionEntry, bS as RECALL_DISCLOSURE_LEVELS, dl as ReasoningEffort, b as RecallDisclosure, dm as RecallPipelineConfig, R as RecallPlanMode, bc as RecallSectionConfig, c as RecallTierExplain, dn as RecallTraceEvent, dp as RelevanceFeedback, aA as RetrievalTier, dq as SPECULATIVE_TTL_DAYS, dr as ScopeProfileAutoPromoteConfig, o as ScopeProfileConfig, p as ScopeProfileLayerId, q as ScopeProfilePromotionTarget, ds as ScopeProfileTeamProjectConfig, dt as ScopeTeamConfig, du as ScoredEntity, s as SecretRef, dv as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dw as SignalLevel, aB as SignalScanResult, dx as SlotBehaviorConfig, dy as SlotMismatchMode, n as SourceConnectorProvenance, aC as TopicScore, T as TranscriptEntry, dz as TriggerMode, U as TrustWeights, X as VerificationState, dA as confidenceTier, b_ as isRecallDisclosure } from './types-rEwubvim.js';
|
|
2
2
|
import './message-parts/index.js';
|
|
3
3
|
import './bounded-jsonl-state.js';
|
|
4
4
|
export { ContinuityImprovementLoop, ContinuityIncidentCloseInput, ContinuityIncidentOpenInput, ContinuityIncidentRecord, ContinuityIncidentState, ContinuityLoopCadence, ContinuityLoopReviewInput, ContinuityLoopStatus, ContinuityLoopUpsertInput } from './types-continuity.js';
|
package/dist/types.js
CHANGED
package/dist/verified-recall.js
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compareVerifiedEpisodeResults,
|
|
3
3
|
searchVerifiedEpisodes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-OQ5PRDDS.js";
|
|
5
5
|
import "./chunk-B7RWBZXW.js";
|
|
6
6
|
import "./chunk-ZBJMUXZH.js";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-ENTCVTQR.js";
|
|
7
|
+
import "./chunk-E6PNLPGJ.js";
|
|
9
8
|
import "./chunk-UHVXE24Y.js";
|
|
9
|
+
import "./chunk-ENTCVTQR.js";
|
|
10
10
|
import "./chunk-WIPEXG6R.js";
|
|
11
11
|
import "./chunk-J6A3CX5N.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-J7VGGECD.js";
|
|
13
13
|
import "./chunk-WUNIWKY4.js";
|
|
14
14
|
import "./chunk-EGGE52UU.js";
|
|
15
15
|
import "./chunk-ZA53AZND.js";
|
|
16
|
+
import "./chunk-SCU65EZI.js";
|
|
16
17
|
import "./chunk-WRJVB3C2.js";
|
|
17
18
|
import "./chunk-GCASGYIO.js";
|
|
18
19
|
import "./chunk-7RJUVTVF.js";
|
|
19
|
-
import "./chunk-SCU65EZI.js";
|
|
20
20
|
import "./chunk-DM2T26WE.js";
|
|
21
21
|
import "./chunk-LDXUBPMO.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-JYIJNNN3.js";
|
|
23
|
+
import "./chunk-AAD2ZS6P.js";
|
|
24
|
+
import "./chunk-RVLJEII5.js";
|
|
25
|
+
import "./chunk-S5SLVSVY.js";
|
|
23
26
|
import "./chunk-CGASUJVP.js";
|
|
24
27
|
import "./chunk-R3DJVOSM.js";
|
|
25
28
|
import "./chunk-BT7NVCML.js";
|
|
26
29
|
import "./chunk-3CSX3ETE.js";
|
|
27
30
|
import "./chunk-RL6NEVXT.js";
|
|
28
|
-
import "./chunk-JYIJNNN3.js";
|
|
29
|
-
import "./chunk-AAD2ZS6P.js";
|
|
30
31
|
import "./chunk-YXZG5TVN.js";
|
|
31
32
|
import "./chunk-W5H6ZRPT.js";
|
|
32
33
|
import "./chunk-G7D6GZ5J.js";
|
|
@@ -46,8 +47,8 @@ import "./chunk-45GF7Y3V.js";
|
|
|
46
47
|
import "./chunk-RGMVMVMF.js";
|
|
47
48
|
import "./chunk-N7RWREIQ.js";
|
|
48
49
|
import "./chunk-5I4M26Q7.js";
|
|
49
|
-
import "./chunk-5GKPFL3S.js";
|
|
50
50
|
import "./chunk-ZIKENA2C.js";
|
|
51
|
+
import "./chunk-5GKPFL3S.js";
|
|
51
52
|
import "./chunk-PQVCH2AE.js";
|
|
52
53
|
import "./chunk-EYIEWJNI.js";
|
|
53
54
|
import "./chunk-JUC24CTX.js";
|
package/dist/write-envelope.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.45.1",
|
|
4
4
|
"description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -166,6 +166,16 @@
|
|
|
166
166
|
"remnic-source": "./src/reconcile/plan.ts",
|
|
167
167
|
"import": "./dist/reconcile/plan.js"
|
|
168
168
|
},
|
|
169
|
+
"./reconcile/manifest": {
|
|
170
|
+
"types": "./dist/reconcile/manifest.d.ts",
|
|
171
|
+
"remnic-source": "./src/reconcile/manifest.ts",
|
|
172
|
+
"import": "./dist/reconcile/manifest.js"
|
|
173
|
+
},
|
|
174
|
+
"./reconcile/manifest.js": {
|
|
175
|
+
"types": "./dist/reconcile/manifest.d.ts",
|
|
176
|
+
"remnic-source": "./src/reconcile/manifest.ts",
|
|
177
|
+
"import": "./dist/reconcile/manifest.js"
|
|
178
|
+
},
|
|
169
179
|
"./reconcile/cursor": {
|
|
170
180
|
"types": "./dist/reconcile/cursor.d.ts",
|
|
171
181
|
"remnic-source": "./src/reconcile/cursor.ts",
|
|
@@ -3096,7 +3106,7 @@
|
|
|
3096
3106
|
"core"
|
|
3097
3107
|
],
|
|
3098
3108
|
"peerDependencies": {
|
|
3099
|
-
"@remnic/coding-graph": "^9.
|
|
3109
|
+
"@remnic/coding-graph": "^9.45.1"
|
|
3100
3110
|
},
|
|
3101
3111
|
"peerDependenciesMeta": {
|
|
3102
3112
|
"@remnic/coding-graph": {
|
package/src/config.test.ts
CHANGED
|
@@ -2416,3 +2416,27 @@ test("parseConfig forwards bridgeMode as a raw passthrough (validation is in res
|
|
|
2416
2416
|
test("parseConfig leaves the OpenClaw delegate timeout to the plugin parser", () => {
|
|
2417
2417
|
assert.equal("bridgeHealthTimeoutMs" in parseConfig({ bridgeHealthTimeoutMs: 7_500 }), false);
|
|
2418
2418
|
});
|
|
2419
|
+
|
|
2420
|
+
test("parseConfig validates converge conflict policy and defaults to newest-wins", () => {
|
|
2421
|
+
assert.deepEqual(parseConfig({}).converge, { conflictPolicy: "newest-wins" });
|
|
2422
|
+
|
|
2423
|
+
for (const conflictPolicy of ["newest-wins", "manual"] as const) {
|
|
2424
|
+
assert.equal(parseConfig({ converge: { conflictPolicy } }).converge.conflictPolicy, conflictPolicy);
|
|
2425
|
+
}
|
|
2426
|
+
|
|
2427
|
+
for (const conflictPolicy of ["keep-both", "", "unknown", 0, false, null]) {
|
|
2428
|
+
assert.throws(
|
|
2429
|
+
() => parseConfig({ converge: { conflictPolicy } }),
|
|
2430
|
+
/converge\.conflictPolicy.*newest-wins.*manual/,
|
|
2431
|
+
);
|
|
2432
|
+
}
|
|
2433
|
+
|
|
2434
|
+
for (const converge of [0, null, [], new Date(), new Map()]) {
|
|
2435
|
+
assert.throws(() => parseConfig({ converge }), /converge must be a plain object/);
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
assert.throws(
|
|
2439
|
+
() => parseConfig({ converge: { conflictPolciy: "manual" } }),
|
|
2440
|
+
/converge contains unknown key "conflictPolciy"/,
|
|
2441
|
+
);
|
|
2442
|
+
});
|
package/src/config.ts
CHANGED
|
@@ -26,6 +26,7 @@ import type {
|
|
|
26
26
|
TriggerMode,
|
|
27
27
|
TrustWeights,
|
|
28
28
|
} from "./types.js";
|
|
29
|
+
import { parseConvergeConfig } from "./converge-config.js";
|
|
29
30
|
import { log } from "./logger.js";
|
|
30
31
|
import { cloneDefaultSessionObserverBands } from "./session-observer-bands.js";
|
|
31
32
|
import { readEnvVar, resolveHomeDir } from "./runtime/env.js";
|
|
@@ -80,6 +81,7 @@ const DEFAULT_WORKSPACE_DIR = path.join(
|
|
|
80
81
|
);
|
|
81
82
|
|
|
82
83
|
const DEFAULT_INIT_GATE_TIMEOUT_MS = 30_000;
|
|
84
|
+
|
|
83
85
|
const CLIENT_SECRET_FIELD = ["client", "Secret"].join("") as "clientSecret";
|
|
84
86
|
const REFRESH_TOKEN_FIELD = ["refresh", "Token"].join("") as "refreshToken";
|
|
85
87
|
const LEGACY_ACTIVE_RECALL_CUSTOM_FIELD = [
|
|
@@ -2332,6 +2334,7 @@ export function parseConfig(
|
|
|
2332
2334
|
procedural,
|
|
2333
2335
|
extractionLiveness: parseExtractionLivenessConfig(cfg),
|
|
2334
2336
|
replicaPeers: parseReplicaPeersConfig(cfg),
|
|
2337
|
+
converge: parseConvergeConfig(cfg.converge),
|
|
2335
2338
|
wearables,
|
|
2336
2339
|
meetings,
|
|
2337
2340
|
activity,
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ConvergeConfig, ConvergeConflictPolicy } from "./types.js";
|
|
2
|
+
|
|
3
|
+
export const CONVERGE_CONFLICT_POLICIES = [
|
|
4
|
+
"newest-wins",
|
|
5
|
+
"manual",
|
|
6
|
+
] as const satisfies readonly ConvergeConflictPolicy[];
|
|
7
|
+
|
|
8
|
+
export const DEFAULT_CONVERGE_CONFLICT_POLICY: ConvergeConflictPolicy = "newest-wins";
|
|
9
|
+
|
|
10
|
+
export function parseConvergeConfig(block: unknown): ConvergeConfig {
|
|
11
|
+
if (block === undefined) {
|
|
12
|
+
return { conflictPolicy: DEFAULT_CONVERGE_CONFLICT_POLICY };
|
|
13
|
+
}
|
|
14
|
+
if (block === null || typeof block !== "object" || Array.isArray(block)) {
|
|
15
|
+
throw new Error("converge must be a plain object");
|
|
16
|
+
}
|
|
17
|
+
const prototype = Object.getPrototypeOf(block);
|
|
18
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
19
|
+
throw new Error("converge must be a plain object");
|
|
20
|
+
}
|
|
21
|
+
const { conflictPolicy, ...unknown } = block as Record<string, unknown>;
|
|
22
|
+
const unknownKey = Object.keys(unknown)[0];
|
|
23
|
+
if (unknownKey !== undefined) {
|
|
24
|
+
throw new Error(`converge contains unknown key ${JSON.stringify(unknownKey)}`);
|
|
25
|
+
}
|
|
26
|
+
if (conflictPolicy === undefined) {
|
|
27
|
+
return { conflictPolicy: DEFAULT_CONVERGE_CONFLICT_POLICY };
|
|
28
|
+
}
|
|
29
|
+
if (
|
|
30
|
+
typeof conflictPolicy === "string" &&
|
|
31
|
+
CONVERGE_CONFLICT_POLICIES.includes(conflictPolicy as ConvergeConflictPolicy)
|
|
32
|
+
) {
|
|
33
|
+
return { conflictPolicy: conflictPolicy as ConvergeConflictPolicy };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
throw new Error(
|
|
37
|
+
`converge.conflictPolicy must be one of ${CONVERGE_CONFLICT_POLICIES.join(", ")}; got ${JSON.stringify(conflictPolicy)}`
|
|
38
|
+
);
|
|
39
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1394,8 +1394,7 @@ export type {
|
|
|
1394
1394
|
CalendarSource,
|
|
1395
1395
|
RecallDisclosure,
|
|
1396
1396
|
} from "./types.js";
|
|
1397
|
-
|
|
1398
|
-
// Recall disclosure depth (issue #677).
|
|
1397
|
+
export { CONVERGE_CONFLICT_POLICIES, DEFAULT_CONVERGE_CONFLICT_POLICY } from "./converge-config.js";
|
|
1399
1398
|
export {
|
|
1400
1399
|
DEFAULT_RECALL_DISCLOSURE,
|
|
1401
1400
|
RECALL_DISCLOSURE_LEVELS,
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import * as assert from "node:assert/strict";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { test } from "node:test";
|
|
4
|
+
import { ContentHashIndex } from "../storage/content-hash-index.js";
|
|
5
|
+
import { type ReconcileManifest, buildReconcileManifest, collapseActiveFactDuplicates } from "./manifest.js";
|
|
6
|
+
import { planReconciliation } from "./plan.js";
|
|
7
|
+
|
|
8
|
+
const fileHash = (content: string): string => createHash("sha256").update(content).digest("hex");
|
|
9
|
+
|
|
10
|
+
function memoryFile(options: {
|
|
11
|
+
id: string;
|
|
12
|
+
content: string;
|
|
13
|
+
contentHash?: string;
|
|
14
|
+
status?: string;
|
|
15
|
+
}): string {
|
|
16
|
+
return [
|
|
17
|
+
"---",
|
|
18
|
+
`id: ${options.id}`,
|
|
19
|
+
"category: fact",
|
|
20
|
+
"created: 2026-01-01T00:00:00.000Z",
|
|
21
|
+
"updated: 2026-01-01T00:00:00.000Z",
|
|
22
|
+
...(options.contentHash ? [`contentHash: ${options.contentHash}`] : []),
|
|
23
|
+
...(options.status ? [`status: ${options.status}`] : []),
|
|
24
|
+
"---",
|
|
25
|
+
options.content,
|
|
26
|
+
].join("\n");
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
test("reconcile manifest keeps file identity separate from canonical semantic identity", async () => {
|
|
30
|
+
const content = "The deployment uses a durable queue with an enrichment suffix.";
|
|
31
|
+
const semanticHash = ContentHashIndex.computeHash("The deployment uses a durable queue.");
|
|
32
|
+
const serialized = memoryFile({ id: "fact-a", content, contentHash: semanticHash, status: "active" });
|
|
33
|
+
const serializedHash = fileHash(serialized);
|
|
34
|
+
|
|
35
|
+
const manifest = await buildReconcileManifest({
|
|
36
|
+
files: [{ path: "facts/fact-a.md", sha256: serializedHash, bytes: Buffer.byteLength(serialized) }],
|
|
37
|
+
readFile: async () => Buffer.from(serialized),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
assert.equal(manifest.format, "remnic-reconcile-manifest");
|
|
41
|
+
assert.equal(manifest.schemaVersion, 1);
|
|
42
|
+
assert.equal(manifest.files[0]?.sha256, serializedHash);
|
|
43
|
+
assert.notEqual(serializedHash, semanticHash);
|
|
44
|
+
assert.deepEqual(manifest.files[0]?.memory, {
|
|
45
|
+
id: "fact-a",
|
|
46
|
+
category: "fact",
|
|
47
|
+
contentHash: semanticHash,
|
|
48
|
+
status: "active",
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("reconcile manifest hashes parsed legacy content and uses effective lifecycle status", async () => {
|
|
53
|
+
const active = memoryFile({ id: "legacy", content: "Legacy fact body" });
|
|
54
|
+
const archived = memoryFile({ id: "archived", content: "Archived fact body", status: "active" });
|
|
55
|
+
const rawByPath = new Map([
|
|
56
|
+
["facts/legacy.md", Buffer.from(active)],
|
|
57
|
+
["archive/facts/archived.md", Buffer.from(archived)],
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
const manifest = await buildReconcileManifest({
|
|
61
|
+
files: [...rawByPath].map(([path, raw]) => ({ path, sha256: fileHash(raw.toString()) })),
|
|
62
|
+
readFile: async (file) => rawByPath.get(file.path) ?? null,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
assert.equal(manifest.files[0]?.memory?.contentHash, ContentHashIndex.computeHash("Archived fact body"));
|
|
66
|
+
assert.equal(manifest.files[0]?.memory?.status, "archived");
|
|
67
|
+
assert.equal(manifest.files[1]?.memory?.contentHash, ContentHashIndex.computeHash("Legacy fact body"));
|
|
68
|
+
assert.equal(manifest.files[1]?.memory?.status, "active");
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("reconcile manifest keeps file identity when memory bytes cannot be trusted", async () => {
|
|
72
|
+
const readable = memoryFile({ id: "readable", content: "Readable fact" });
|
|
73
|
+
const changed = memoryFile({ id: "changed", content: "Changed after census" });
|
|
74
|
+
const files = [
|
|
75
|
+
{ path: "facts/readable.md", sha256: fileHash(readable) },
|
|
76
|
+
{ path: "facts/locked.md", sha256: "f".repeat(64) },
|
|
77
|
+
{ path: "facts/changed.md", sha256: fileHash("bytes from census") },
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
const manifest = await buildReconcileManifest({
|
|
81
|
+
files,
|
|
82
|
+
readFile: async (file) => {
|
|
83
|
+
if (file.path === "facts/locked.md") throw new Error("locked");
|
|
84
|
+
return file.path === "facts/changed.md" ? changed : readable;
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
assert.equal(manifest.files.length, 3);
|
|
89
|
+
assert.equal(manifest.files.find((file) => file.path === "facts/readable.md")?.memory?.id, "readable");
|
|
90
|
+
assert.equal(manifest.files.find((file) => file.path === "facts/locked.md")?.memory, undefined);
|
|
91
|
+
assert.equal(manifest.files.find((file) => file.path === "facts/changed.md")?.memory, undefined);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test("ContentHashIndex resolves a semantic hash to a stable canonical path without changing membership", () => {
|
|
95
|
+
const semanticHash = ContentHashIndex.computeHash("same fact");
|
|
96
|
+
const entries = [
|
|
97
|
+
{ path: "facts/z.md", contentHash: semanticHash },
|
|
98
|
+
{ path: "facts/a.md", contentHash: semanticHash },
|
|
99
|
+
{ path: "facts/other.md", contentHash: ContentHashIndex.computeHash("other fact") },
|
|
100
|
+
];
|
|
101
|
+
const index = new ContentHashIndex("unused");
|
|
102
|
+
|
|
103
|
+
assert.equal(ContentHashIndex.resolvePathByHash(semanticHash, entries), "facts/a.md");
|
|
104
|
+
assert.equal(ContentHashIndex.resolvePathByHash("f".repeat(64), entries), undefined);
|
|
105
|
+
assert.equal(index.has("same fact"), false);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("semantic collapse prevents different active fact paths from transferring both directions", () => {
|
|
109
|
+
const semanticHash = ContentHashIndex.computeHash("same active fact");
|
|
110
|
+
const localFile = { path: "facts/local-id.md", sha256: "a".repeat(64) };
|
|
111
|
+
const peerFile = { path: "facts/peer-id.md", sha256: "b".repeat(64) };
|
|
112
|
+
const plan = planReconciliation([{ namespace: "default", local: [localFile], peer: [peerFile] }]);
|
|
113
|
+
const local: ReconcileManifest = {
|
|
114
|
+
format: "remnic-reconcile-manifest",
|
|
115
|
+
schemaVersion: 1,
|
|
116
|
+
files: [
|
|
117
|
+
{ ...localFile, memory: { id: "local-id", category: "fact", contentHash: semanticHash, status: "active" } },
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
const peer: ReconcileManifest = {
|
|
121
|
+
format: "remnic-reconcile-manifest",
|
|
122
|
+
schemaVersion: 1,
|
|
123
|
+
files: [{ ...peerFile, memory: { id: "peer-id", category: "fact", contentHash: semanticHash, status: "active" } }],
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const collapsed = collapseActiveFactDuplicates(plan, new Map([["default", local]]), new Map([["default", peer]]));
|
|
127
|
+
|
|
128
|
+
assert.equal(collapsed.converged, true);
|
|
129
|
+
assert.deepEqual(collapsed.entries, [
|
|
130
|
+
{
|
|
131
|
+
path: "facts/local-id.md",
|
|
132
|
+
namespace: "default",
|
|
133
|
+
action: "identical",
|
|
134
|
+
reason: "semantic_duplicate",
|
|
135
|
+
localSha256: localFile.sha256,
|
|
136
|
+
peerSha256: peerFile.sha256,
|
|
137
|
+
},
|
|
138
|
+
]);
|
|
139
|
+
assert.equal(collapsed.byNamespace[0]?.identical, 1);
|
|
140
|
+
assert.equal(collapsed.byNamespace[0]?.pull, 0);
|
|
141
|
+
assert.equal(collapsed.byNamespace[0]?.push, 0);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
test("semantic collapse does not fold non-active facts or unrelated path conflicts", () => {
|
|
145
|
+
const semanticHash = ContentHashIndex.computeHash("same inactive fact");
|
|
146
|
+
const localFile = { path: "facts/local.md", sha256: "a".repeat(64) };
|
|
147
|
+
const peerFile = { path: "facts/peer.md", sha256: "b".repeat(64) };
|
|
148
|
+
const plan = planReconciliation([{ namespace: "default", local: [localFile], peer: [peerFile] }]);
|
|
149
|
+
const manifest = (file: typeof localFile, id: string, status: "active" | "archived"): ReconcileManifest => ({
|
|
150
|
+
format: "remnic-reconcile-manifest",
|
|
151
|
+
schemaVersion: 1,
|
|
152
|
+
files: [{ ...file, memory: { id, category: "fact", contentHash: semanticHash, status } }],
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
const collapsed = collapseActiveFactDuplicates(
|
|
156
|
+
plan,
|
|
157
|
+
new Map([["default", manifest(localFile, "local", "active")]]),
|
|
158
|
+
new Map([["default", manifest(peerFile, "peer", "archived")]])
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
assert.deepEqual(collapsed, plan);
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test("semantic collapse leaves tombstone suppression authoritative", () => {
|
|
165
|
+
const semanticHash = ContentHashIndex.computeHash("retracted fact");
|
|
166
|
+
const localFile = { path: "facts/local.md", sha256: "a".repeat(64) };
|
|
167
|
+
const peerFile = { path: "facts/peer.md", sha256: "b".repeat(64) };
|
|
168
|
+
const plan = planReconciliation([
|
|
169
|
+
{
|
|
170
|
+
namespace: "default",
|
|
171
|
+
local: [localFile],
|
|
172
|
+
peer: [peerFile],
|
|
173
|
+
tombstonedFileSha256: [localFile.sha256],
|
|
174
|
+
},
|
|
175
|
+
]);
|
|
176
|
+
const manifest = (file: typeof localFile, id: string): ReconcileManifest => ({
|
|
177
|
+
format: "remnic-reconcile-manifest",
|
|
178
|
+
schemaVersion: 1,
|
|
179
|
+
files: [{ ...file, memory: { id, category: "fact", contentHash: semanticHash, status: "active" } }],
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const collapsed = collapseActiveFactDuplicates(
|
|
183
|
+
plan,
|
|
184
|
+
new Map([["default", manifest(localFile, "local")]]),
|
|
185
|
+
new Map([["default", manifest(peerFile, "peer")]])
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
assert.deepEqual(collapsed, plan);
|
|
189
|
+
assert.equal(
|
|
190
|
+
collapsed.entries.some((entry) => entry.action === "suppress"),
|
|
191
|
+
true
|
|
192
|
+
);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test("semantic collapse preserves same-path metadata updates", () => {
|
|
196
|
+
const path = "facts/shared.md";
|
|
197
|
+
const localFile = { path, sha256: "a".repeat(64) };
|
|
198
|
+
const peerFile = { path, sha256: "b".repeat(64) };
|
|
199
|
+
const baseFile = { path, sha256: peerFile.sha256 };
|
|
200
|
+
const semanticHash = ContentHashIndex.computeHash("same raw fact");
|
|
201
|
+
const plan = planReconciliation([{ namespace: "default", local: [localFile], peer: [peerFile], base: [baseFile] }]);
|
|
202
|
+
const manifest = (file: typeof localFile, id: string): ReconcileManifest => ({
|
|
203
|
+
format: "remnic-reconcile-manifest",
|
|
204
|
+
schemaVersion: 1,
|
|
205
|
+
files: [{ ...file, memory: { id, category: "fact", contentHash: semanticHash, status: "active" } }],
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
const collapsed = collapseActiveFactDuplicates(
|
|
209
|
+
plan,
|
|
210
|
+
new Map([["default", manifest(localFile, "local")]]),
|
|
211
|
+
new Map([["default", manifest(peerFile, "peer")]])
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
assert.deepEqual(collapsed, plan);
|
|
215
|
+
assert.equal(collapsed.entries[0]?.action, "push");
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test("semantic collapse remains converged after transferring the canonical one-sided duplicate", () => {
|
|
219
|
+
const semanticHash = ContentHashIndex.computeHash("same one-sided fact");
|
|
220
|
+
const canonical = { path: "facts/a.md", sha256: "a".repeat(64) };
|
|
221
|
+
const duplicate = { path: "facts/b.md", sha256: "b".repeat(64) };
|
|
222
|
+
const manifest = (files: Array<{ path: string; sha256: string }>): ReconcileManifest => ({
|
|
223
|
+
format: "remnic-reconcile-manifest",
|
|
224
|
+
schemaVersion: 1,
|
|
225
|
+
files: files.map((file) => ({
|
|
226
|
+
...file,
|
|
227
|
+
memory: {
|
|
228
|
+
id: file.path,
|
|
229
|
+
category: "fact",
|
|
230
|
+
contentHash: semanticHash,
|
|
231
|
+
status: "active",
|
|
232
|
+
},
|
|
233
|
+
})),
|
|
234
|
+
});
|
|
235
|
+
const localManifest = manifest([canonical, duplicate]);
|
|
236
|
+
const firstPlan = planReconciliation([{ namespace: "default", local: [canonical, duplicate], peer: [] }]);
|
|
237
|
+
|
|
238
|
+
const firstCollapsed = collapseActiveFactDuplicates(
|
|
239
|
+
firstPlan,
|
|
240
|
+
new Map([["default", localManifest]]),
|
|
241
|
+
new Map([["default", manifest([])]])
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
assert.deepEqual(
|
|
245
|
+
firstCollapsed.entries.map((entry) => [entry.path, entry.action]),
|
|
246
|
+
[[canonical.path, "push"]]
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
const rerunPlan = planReconciliation([{ namespace: "default", local: [canonical, duplicate], peer: [canonical] }]);
|
|
250
|
+
const rerunCollapsed = collapseActiveFactDuplicates(
|
|
251
|
+
rerunPlan,
|
|
252
|
+
new Map([["default", localManifest]]),
|
|
253
|
+
new Map([["default", manifest([canonical])]])
|
|
254
|
+
);
|
|
255
|
+
|
|
256
|
+
assert.equal(rerunCollapsed.converged, true, JSON.stringify(rerunCollapsed));
|
|
257
|
+
assert.deepEqual(
|
|
258
|
+
rerunCollapsed.entries.map((entry) => [entry.path, entry.action]),
|
|
259
|
+
[[canonical.path, "identical"]]
|
|
260
|
+
);
|
|
261
|
+
});
|