@remnic/core 9.27.0 → 9.29.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 -10
- package/dist/access-admin-ops-surface.js +46 -41
- package/dist/access-audit.js +2 -2
- package/dist/access-authorization-probe.d.ts +13 -10
- package/dist/access-authorization-probe.js +47 -42
- package/dist/access-boundary.d.ts +13 -10
- package/dist/access-boundary.js +46 -41
- package/dist/access-cli.js +105 -96
- package/dist/access-cli.js.map +1 -1
- package/dist/access-health-types.d.ts +10 -1
- package/dist/access-http-lcm-compaction.d.ts +13 -10
- package/dist/access-http.d.ts +13 -10
- package/dist/access-http.js +56 -51
- package/dist/access-identity-continuity-surface.d.ts +9 -8
- package/dist/access-identity-continuity-surface.js +46 -41
- package/dist/access-lcm-surface.d.ts +13 -10
- package/dist/access-lcm-surface.js +46 -41
- package/dist/access-mcp.d.ts +13 -10
- package/dist/access-mcp.js +51 -46
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/access-memory-search-fanout.js +3 -3
- package/dist/{access-namespace-preflight-wRSZEO5V.d.ts → access-namespace-preflight-DCXBkDp0.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +46 -41
- package/dist/access-observe-write-surface.d.ts +13 -10
- package/dist/access-observe-write-surface.js +46 -41
- package/dist/access-operations-batch.js +48 -43
- package/dist/access-operations.d.ts +16 -13
- package/dist/access-operations.js +50 -45
- package/dist/access-recall-concurrency.d.ts +13 -10
- package/dist/access-recall-concurrency.js +46 -41
- package/dist/access-recall-response.d.ts +13 -10
- package/dist/access-recall-response.js +46 -41
- package/dist/access-recall-surface.d.ts +13 -10
- package/dist/access-recall-surface.js +46 -41
- package/dist/access-schema.d.ts +80 -80
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-B4-Fu9x2.d.ts → access-service-DvPW_M5j.d.ts} +12 -8
- package/dist/access-service.d.ts +13 -10
- package/dist/access-service.js +46 -41
- package/dist/access-surface-catalog.d.ts +13 -10
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-memory-bridge.js +3 -3
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +4 -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 +9 -8
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +14 -12
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +3 -2
- package/dist/buffer.js +2 -2
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +3 -2
- package/dist/capabilities.js +1 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-GWVG7LGC.js} +2 -2
- package/dist/{catalog-BLLxZ5L5.d.ts → catalog-BIVgftWu.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +15 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-CI26JDZA.js → chunk-2HNUMF5V.js} +6 -4
- package/dist/{chunk-CI26JDZA.js.map → chunk-2HNUMF5V.js.map} +1 -1
- package/dist/{chunk-NUWMZIYZ.js → chunk-2XC73SHY.js} +61 -43
- package/dist/chunk-2XC73SHY.js.map +1 -0
- package/dist/{chunk-RDQGLJRR.js → chunk-2XRE6FLM.js} +2 -1
- package/dist/{chunk-RDQGLJRR.js.map → chunk-2XRE6FLM.js.map} +1 -1
- package/dist/{chunk-2H7OEVPO.js → chunk-3GD2HFR6.js} +2 -2
- package/dist/{chunk-4TFIRMTE.js → chunk-4A6YGWQN.js} +2 -2
- package/dist/{chunk-JDOJZTFF.js → chunk-4PBVXX7L.js} +2 -2
- package/dist/{chunk-IKMAO55B.js → chunk-55MDBZLC.js} +2 -2
- package/dist/{chunk-VDX2J7OX.js → chunk-5W7CTZ2E.js} +4 -4
- package/dist/{chunk-B7GROTXD.js → chunk-6LKEUCEM.js} +2 -2
- package/dist/{chunk-2AJ72VVS.js → chunk-7BZOBA5J.js} +3 -3
- package/dist/{chunk-44DUJETW.js → chunk-7HXCF4RE.js} +2 -2
- package/dist/{chunk-X3SQYAPP.js → chunk-ACXPX4AG.js} +2 -2
- package/dist/{chunk-AJ7QCSIS.js → chunk-ALSGMEJR.js} +5 -5
- package/dist/{chunk-JGUXPJUQ.js → chunk-AS7YMSL6.js} +2 -2
- package/dist/{chunk-77CNV7DY.js → chunk-BLAKS3CP.js} +4 -4
- package/dist/{chunk-5BRT4Z2I.js → chunk-CMRQ34J5.js} +2 -2
- package/dist/{chunk-HEXSNYJD.js → chunk-CSMCNOPH.js} +8 -8
- package/dist/chunk-CVILPI77.js +432 -0
- package/dist/chunk-CVILPI77.js.map +1 -0
- package/dist/{chunk-SK3EYPKC.js → chunk-D2ANTDGO.js} +3 -3
- package/dist/{chunk-JCVQV6QX.js → chunk-D3LMYTBV.js} +7 -7
- package/dist/{chunk-GJJBPI6I.js → chunk-DRBXHRXE.js} +7 -3
- package/dist/chunk-DRBXHRXE.js.map +1 -0
- package/dist/{chunk-XY7QPJDA.js → chunk-E6EE5B67.js} +2 -2
- package/dist/{chunk-LLISELSY.js → chunk-EP5BVCRI.js} +2 -2
- package/dist/{chunk-PTN6UAUA.js → chunk-ES36HTSC.js} +4 -4
- package/dist/{chunk-WEAO45M4.js → chunk-ESBQWC3U.js} +4 -4
- package/dist/{chunk-EUSLKI4X.js → chunk-EVX44I7C.js} +5 -5
- package/dist/{chunk-CIQXI47W.js → chunk-FCDWWCLX.js} +1195 -271
- package/dist/chunk-FCDWWCLX.js.map +1 -0
- package/dist/{chunk-X6ROIHFE.js → chunk-G5R3D5UP.js} +2 -2
- package/dist/{chunk-MG6MNSP4.js → chunk-G6LBWZRF.js} +7 -7
- package/dist/{chunk-TKBDJTXG.js → chunk-GBJ4RDFR.js} +94 -20
- package/dist/chunk-GBJ4RDFR.js.map +1 -0
- package/dist/{chunk-FRVTCCGD.js → chunk-GGUBDXRR.js} +2 -2
- package/dist/{chunk-QH6CS6XJ.js → chunk-H24WNPA2.js} +2 -2
- package/dist/{chunk-V25OWXAC.js → chunk-HUHX2OCX.js} +1 -1
- package/dist/chunk-HUHX2OCX.js.map +1 -0
- package/dist/{chunk-TGQ2NTWH.js → chunk-IJ6WHMFB.js} +16 -2
- package/dist/{chunk-TGQ2NTWH.js.map → chunk-IJ6WHMFB.js.map} +1 -1
- package/dist/{chunk-EOLC6EXV.js → chunk-IMA2EWLV.js} +24 -3
- package/dist/chunk-IMA2EWLV.js.map +1 -0
- package/dist/{chunk-MQVINOJQ.js → chunk-IYZ5K7MU.js} +3 -3
- package/dist/{chunk-RPA2RX5P.js → chunk-JDZRYH2N.js} +2 -2
- package/dist/{chunk-M5EPMNS4.js → chunk-K5GB36ME.js} +2 -2
- package/dist/{chunk-UT3OQPFA.js → chunk-KUJQHXPH.js} +2 -2
- package/dist/{chunk-7RZJWZ46.js → chunk-LEPOP46W.js} +5 -5
- package/dist/{chunk-EYJSW2RV.js → chunk-NBDCZWP4.js} +4 -4
- package/dist/{chunk-XKGPIWGI.js → chunk-OFHFH655.js} +6 -6
- package/dist/{chunk-FGBJBYWP.js → chunk-OVRQLAYR.js} +3 -3
- package/dist/{chunk-BXLOS5AJ.js → chunk-OWHERGF2.js} +2 -2
- package/dist/chunk-P2BM76KT.js +528 -0
- package/dist/chunk-P2BM76KT.js.map +1 -0
- package/dist/{chunk-U3TH5Q2Q.js → chunk-P3MH72CI.js} +2 -2
- package/dist/{chunk-P2OZKKYP.js → chunk-PHWUFPCO.js} +2 -2
- package/dist/{chunk-KGTD2KZJ.js → chunk-PKRIQL3V.js} +2 -2
- package/dist/{chunk-BNGPHGVZ.js → chunk-Q6VFVAKZ.js} +13 -6
- package/dist/{chunk-BNGPHGVZ.js.map → chunk-Q6VFVAKZ.js.map} +1 -1
- package/dist/{chunk-4MJZTF42.js → chunk-QAOGGNE3.js} +3 -3
- package/dist/{chunk-RGJBM7Z3.js → chunk-QMBNMPQM.js} +84 -84
- package/dist/{chunk-RGJBM7Z3.js.map → chunk-QMBNMPQM.js.map} +1 -1
- package/dist/{chunk-2QSZNTDO.js → chunk-RKNJBZ55.js} +4 -4
- package/dist/chunk-RMMVQQA6.js +70 -0
- package/dist/chunk-RMMVQQA6.js.map +1 -0
- package/dist/{chunk-FCCMFVS6.js → chunk-RPSYDM6C.js} +2 -2
- package/dist/chunk-RPW2NOU6.js +33 -0
- package/dist/chunk-RPW2NOU6.js.map +1 -0
- package/dist/{chunk-RYHWZ52A.js → chunk-S2BBISHU.js} +4 -4
- package/dist/{chunk-RSYJV25N.js → chunk-SG265CVF.js} +10 -10
- package/dist/{chunk-UGH6VPPO.js → chunk-SH6YO3LT.js} +3 -3
- package/dist/{chunk-2RAC4JIG.js → chunk-T3GCXULH.js} +16 -16
- package/dist/chunk-T3GCXULH.js.map +1 -0
- package/dist/{chunk-FMLKOL2Z.js → chunk-TC3VNKGX.js} +4 -4
- package/dist/{chunk-7K5Q6COX.js → chunk-TVVEYCNW.js} +4 -4
- package/dist/{chunk-BJJAX3IZ.js → chunk-UTRO5UJU.js} +2 -2
- package/dist/{chunk-DQEMWVMT.js → chunk-UVYI6VIX.js} +1 -1
- package/dist/chunk-VNA7W7QF.js +134 -0
- package/dist/chunk-VNA7W7QF.js.map +1 -0
- package/dist/{chunk-BHLN7L7M.js → chunk-VVIW3PTA.js} +17 -17
- package/dist/chunk-WNIUPHWV.js +152 -0
- package/dist/chunk-WNIUPHWV.js.map +1 -0
- package/dist/chunk-WOCNN776.js +742 -0
- package/dist/chunk-WOCNN776.js.map +1 -0
- package/dist/{chunk-XQ4EH6DI.js → chunk-WONS4RZ2.js} +3 -3
- package/dist/chunk-WRJVB3C2.js +118 -0
- package/dist/chunk-WRJVB3C2.js.map +1 -0
- package/dist/{chunk-HORJVJ6K.js → chunk-WZ7UB7XQ.js} +42 -37
- package/dist/chunk-WZ7UB7XQ.js.map +1 -0
- package/dist/{chunk-MEBQFQ26.js → chunk-XEQ7OT7U.js} +8 -6
- package/dist/chunk-XEQ7OT7U.js.map +1 -0
- package/dist/{chunk-CSXHRAJJ.js → chunk-XOZ4ALGB.js} +3 -3
- package/dist/{chunk-XKO7BM2C.js → chunk-YGHMSDLK.js} +187 -26
- package/dist/chunk-YGHMSDLK.js.map +1 -0
- package/dist/chunk-YXZG5TVN.js +40 -0
- package/dist/chunk-YXZG5TVN.js.map +1 -0
- package/dist/{chunk-6NNNURLK.js → chunk-Z54EM5YZ.js} +4 -4
- package/dist/{chunk-YSGBD3QN.js → chunk-ZGOQTOYA.js} +3 -3
- package/dist/{chunk-4DJQYKMN.js → chunk-ZIKENA2C.js} +2 -2
- package/dist/chunk-ZIKENA2C.js.map +1 -0
- package/dist/{chunk-RNY3BO35.js → chunk-ZXAGJFHJ.js} +4 -4
- package/dist/{cli-Bz7X7dGx.d.ts → cli-CxoSOiG0.d.ts} +5 -5
- package/dist/cli.d.ts +14 -12
- package/dist/cli.js +73 -68
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +15 -13
- 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 +4 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +14 -12
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +15 -13
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +3 -2
- package/dist/contradiction/index.js +6 -6
- package/dist/{contradiction-scan-HMF7CNKD.js → contradiction-scan-HYLIRMJ2.js} +3 -3
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/backend.js +2 -2
- 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 +15 -2
- package/dist/corpus-watermark.js +27 -23
- package/dist/day-summary.d.ts +1 -1
- package/dist/day-summary.js +2 -2
- 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/embedding-fallback.js +2 -2
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-id-normalization.d.ts +4 -0
- package/dist/entity-id-normalization.js +10 -0
- package/dist/entity-id-normalization.js.map +1 -0
- package/dist/entity-retrieval-boundaries.d.ts +3 -0
- package/dist/entity-retrieval-boundaries.js +8 -0
- package/dist/entity-retrieval-boundaries.js.map +1 -0
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +15 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/entity-schema.js +1 -1
- package/dist/explicit-capture.d.ts +9 -8
- package/dist/explicit-capture.js +2 -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-helpers.d.ts +34 -0
- package/dist/extraction-source-grounding-helpers.js +62 -0
- package/dist/extraction-source-grounding-helpers.js.map +1 -0
- package/dist/extraction-source-grounding-rules.d.ts +18 -0
- package/dist/extraction-source-grounding-rules.js +12 -0
- package/dist/extraction-source-grounding-rules.js.map +1 -0
- package/dist/extraction-source-grounding.d.ts +11 -0
- package/dist/extraction-source-grounding.js +13 -0
- package/dist/extraction-source-grounding.js.map +1 -0
- package/dist/extraction.d.ts +3 -1
- package/dist/extraction.js +7 -4
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{first-start-migration-LEXL3XYL.js → first-start-migration-F2QJD66E.js} +2 -2
- 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-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- 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 +407 -405
- package/dist/index.js +154 -145
- 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 +2 -2
- 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-llm.js +2 -2
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +14 -12
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -12
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +15 -13
- package/dist/{maintenance-DgnD2z8S.d.ts → maintenance-Cb-PjxQd.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +13 -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-mutations.d.ts +4 -0
- package/dist/memory-projection-mutations.js +15 -0
- package/dist/memory-projection-mutations.js.map +1 -0
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +24 -22
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/principal.js +2 -2
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +10 -10
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +14 -12
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/offline-sync-impression-drain.js +7 -7
- package/dist/operator-doctor-corpus.d.ts +22 -3
- package/dist/operator-doctor-corpus.js +34 -24
- package/dist/operator-doctor-replica.d.ts +52 -0
- package/dist/operator-doctor-replica.js +15 -0
- package/dist/operator-doctor-replica.js.map +1 -0
- package/dist/operator-toolkit.d.ts +7 -3
- package/dist/operator-toolkit.js +37 -31
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/compression-guideline-coordinator.js +2 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +21 -19
- package/dist/{orchestrator-rIHmHpv1.d.ts → orchestrator-5GKqb_HL.d.ts} +7 -7
- package/dist/orchestrator.d.ts +9 -8
- package/dist/orchestrator.js +105 -96
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-Bq5zU6Bp.d.ts → pipeline-3Qi1TpRo.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-3ILJkC70.d.ts → qmd-D9JqzzRX.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-state.js +2 -2
- 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/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 +279 -0
- package/dist/replica-divergence.js +28 -0
- package/dist/replica-divergence.js.map +1 -0
- package/dist/replica-peers-config.d.ts +5 -0
- package/dist/replica-peers-config.js +13 -0
- package/dist/replica-peers-config.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +21 -2
- package/dist/resolve-auth-token.js +5 -1
- package/dist/resume-bundles.js +5 -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/schemas.d.ts +54 -54
- package/dist/{scope-profiles-D0-ff4xT.d.ts → scope-profiles-C4g6_UdP.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/embed-helper.js +2 -2
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +9 -9
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +9 -9
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-4Tfh7c1g.d.ts → semantic-consolidation-BrxqnzTW.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +15 -13
- package/dist/semantic-rule-promotion.js +14 -12
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +14 -12
- package/dist/{service-cTvil7D_.d.ts → service-Bi1JgxdP.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 +9 -9
- package/dist/shared-context/manager.js +2 -2
- package/dist/signal.d.ts +1 -1
- package/dist/{storage-C9ibpTme.d.ts → storage-CcH6yPk2.d.ts} +13 -19
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +15 -12
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -3
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +3 -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 +3 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/{tier-stats-XKD7SXYY.js → tier-stats-OPTSBNRH.js} +2 -2
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-DHBxIF0s.d.ts → types-Dg0w9ADr.d.ts} +54 -4
- 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 +14 -12
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/access-health-types.ts +8 -0
- package/src/access-http.test.ts +4 -0
- package/src/access-service-health.test.ts +23 -0
- package/src/access-service.ts +27 -4
- package/src/capabilities.test.ts +1 -0
- package/src/capabilities.ts +7 -7
- package/src/cli.ts +9 -7
- package/src/config.test.ts +5 -0
- package/src/config.ts +3 -2
- package/src/corpus-watermark.test.ts +21 -0
- package/src/corpus-watermark.ts +25 -3
- package/src/entity-id-normalization.ts +55 -0
- package/src/entity-retrieval-boundaries.ts +134 -0
- package/src/entity-retrieval.ts +253 -27
- package/src/entity-schema.ts +2 -1
- package/src/extraction-source-grounding-helpers.ts +603 -0
- package/src/extraction-source-grounding-rules.ts +1031 -0
- package/src/extraction-source-grounding.test.ts +2337 -0
- package/src/extraction-source-grounding.ts +50 -0
- package/src/extraction.ts +120 -15
- package/src/memory-projection-mutations.ts +132 -0
- package/src/namespaces/storage.ts +5 -3
- package/src/operator-doctor-corpus.ts +41 -0
- package/src/operator-doctor-replica.test.ts +261 -0
- package/src/operator-doctor-replica.ts +129 -0
- package/src/operator-toolkit.ts +5 -4
- package/src/orchestration/orchestrator-init.ts +2 -2
- package/src/replica-divergence.test.ts +1475 -0
- package/src/replica-divergence.ts +910 -0
- package/src/replica-peers-config.ts +250 -0
- package/src/resolve-auth-token.ts +38 -0
- package/src/storage/entity-canonical-id-migration-adapter.ts +72 -0
- package/src/storage/entity-canonical-id-migration-runner.ts +68 -0
- package/src/storage/entity-canonical-id-migration.ts +904 -0
- package/src/storage/entity-store.ts +44 -0
- package/src/storage/memory-frontmatter-metadata.ts +17 -0
- package/src/storage/memory-migration-serialization.ts +37 -0
- package/src/storage/memory-read-store.ts +3 -2
- package/src/storage/profile-header.ts +8 -7
- package/src/storage-profile-timestamp.test.ts +68 -0
- package/src/storage.ts +68 -69
- package/src/types.ts +5 -5
- package/dist/chunk-2RAC4JIG.js.map +0 -1
- package/dist/chunk-4DJQYKMN.js.map +0 -1
- package/dist/chunk-CIQXI47W.js.map +0 -1
- package/dist/chunk-EOLC6EXV.js.map +0 -1
- package/dist/chunk-GJJBPI6I.js.map +0 -1
- package/dist/chunk-HORJVJ6K.js.map +0 -1
- package/dist/chunk-MEBQFQ26.js.map +0 -1
- package/dist/chunk-NUWMZIYZ.js.map +0 -1
- package/dist/chunk-TKBDJTXG.js.map +0 -1
- package/dist/chunk-V25OWXAC.js.map +0 -1
- package/dist/chunk-XKO7BM2C.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-GWVG7LGC.js.map} +0 -0
- /package/dist/{chunk-2H7OEVPO.js.map → chunk-3GD2HFR6.js.map} +0 -0
- /package/dist/{chunk-4TFIRMTE.js.map → chunk-4A6YGWQN.js.map} +0 -0
- /package/dist/{chunk-JDOJZTFF.js.map → chunk-4PBVXX7L.js.map} +0 -0
- /package/dist/{chunk-IKMAO55B.js.map → chunk-55MDBZLC.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-5W7CTZ2E.js.map} +0 -0
- /package/dist/{chunk-B7GROTXD.js.map → chunk-6LKEUCEM.js.map} +0 -0
- /package/dist/{chunk-2AJ72VVS.js.map → chunk-7BZOBA5J.js.map} +0 -0
- /package/dist/{chunk-44DUJETW.js.map → chunk-7HXCF4RE.js.map} +0 -0
- /package/dist/{chunk-X3SQYAPP.js.map → chunk-ACXPX4AG.js.map} +0 -0
- /package/dist/{chunk-AJ7QCSIS.js.map → chunk-ALSGMEJR.js.map} +0 -0
- /package/dist/{chunk-JGUXPJUQ.js.map → chunk-AS7YMSL6.js.map} +0 -0
- /package/dist/{chunk-77CNV7DY.js.map → chunk-BLAKS3CP.js.map} +0 -0
- /package/dist/{chunk-5BRT4Z2I.js.map → chunk-CMRQ34J5.js.map} +0 -0
- /package/dist/{chunk-HEXSNYJD.js.map → chunk-CSMCNOPH.js.map} +0 -0
- /package/dist/{chunk-SK3EYPKC.js.map → chunk-D2ANTDGO.js.map} +0 -0
- /package/dist/{chunk-JCVQV6QX.js.map → chunk-D3LMYTBV.js.map} +0 -0
- /package/dist/{chunk-XY7QPJDA.js.map → chunk-E6EE5B67.js.map} +0 -0
- /package/dist/{chunk-LLISELSY.js.map → chunk-EP5BVCRI.js.map} +0 -0
- /package/dist/{chunk-PTN6UAUA.js.map → chunk-ES36HTSC.js.map} +0 -0
- /package/dist/{chunk-WEAO45M4.js.map → chunk-ESBQWC3U.js.map} +0 -0
- /package/dist/{chunk-EUSLKI4X.js.map → chunk-EVX44I7C.js.map} +0 -0
- /package/dist/{chunk-X6ROIHFE.js.map → chunk-G5R3D5UP.js.map} +0 -0
- /package/dist/{chunk-MG6MNSP4.js.map → chunk-G6LBWZRF.js.map} +0 -0
- /package/dist/{chunk-FRVTCCGD.js.map → chunk-GGUBDXRR.js.map} +0 -0
- /package/dist/{chunk-QH6CS6XJ.js.map → chunk-H24WNPA2.js.map} +0 -0
- /package/dist/{chunk-MQVINOJQ.js.map → chunk-IYZ5K7MU.js.map} +0 -0
- /package/dist/{chunk-RPA2RX5P.js.map → chunk-JDZRYH2N.js.map} +0 -0
- /package/dist/{chunk-M5EPMNS4.js.map → chunk-K5GB36ME.js.map} +0 -0
- /package/dist/{chunk-UT3OQPFA.js.map → chunk-KUJQHXPH.js.map} +0 -0
- /package/dist/{chunk-7RZJWZ46.js.map → chunk-LEPOP46W.js.map} +0 -0
- /package/dist/{chunk-EYJSW2RV.js.map → chunk-NBDCZWP4.js.map} +0 -0
- /package/dist/{chunk-XKGPIWGI.js.map → chunk-OFHFH655.js.map} +0 -0
- /package/dist/{chunk-FGBJBYWP.js.map → chunk-OVRQLAYR.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-OWHERGF2.js.map} +0 -0
- /package/dist/{chunk-U3TH5Q2Q.js.map → chunk-P3MH72CI.js.map} +0 -0
- /package/dist/{chunk-P2OZKKYP.js.map → chunk-PHWUFPCO.js.map} +0 -0
- /package/dist/{chunk-KGTD2KZJ.js.map → chunk-PKRIQL3V.js.map} +0 -0
- /package/dist/{chunk-4MJZTF42.js.map → chunk-QAOGGNE3.js.map} +0 -0
- /package/dist/{chunk-2QSZNTDO.js.map → chunk-RKNJBZ55.js.map} +0 -0
- /package/dist/{chunk-FCCMFVS6.js.map → chunk-RPSYDM6C.js.map} +0 -0
- /package/dist/{chunk-RYHWZ52A.js.map → chunk-S2BBISHU.js.map} +0 -0
- /package/dist/{chunk-RSYJV25N.js.map → chunk-SG265CVF.js.map} +0 -0
- /package/dist/{chunk-UGH6VPPO.js.map → chunk-SH6YO3LT.js.map} +0 -0
- /package/dist/{chunk-FMLKOL2Z.js.map → chunk-TC3VNKGX.js.map} +0 -0
- /package/dist/{chunk-7K5Q6COX.js.map → chunk-TVVEYCNW.js.map} +0 -0
- /package/dist/{chunk-BJJAX3IZ.js.map → chunk-UTRO5UJU.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-UVYI6VIX.js.map} +0 -0
- /package/dist/{chunk-BHLN7L7M.js.map → chunk-VVIW3PTA.js.map} +0 -0
- /package/dist/{chunk-XQ4EH6DI.js.map → chunk-WONS4RZ2.js.map} +0 -0
- /package/dist/{chunk-CSXHRAJJ.js.map → chunk-XOZ4ALGB.js.map} +0 -0
- /package/dist/{chunk-6NNNURLK.js.map → chunk-Z54EM5YZ.js.map} +0 -0
- /package/dist/{chunk-YSGBD3QN.js.map → chunk-ZGOQTOYA.js.map} +0 -0
- /package/dist/{chunk-RNY3BO35.js.map → chunk-ZXAGJFHJ.js.map} +0 -0
- /package/dist/{contradiction-scan-HMF7CNKD.js.map → contradiction-scan-HYLIRMJ2.js.map} +0 -0
- /package/dist/{first-start-migration-LEXL3XYL.js.map → first-start-migration-F2QJD66E.js.map} +0 -0
- /package/dist/{tier-stats-XKD7SXYY.js.map → tier-stats-OPTSBNRH.js.map} +0 -0
|
@@ -4,28 +4,17 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
loadPersistedNativeKnowledgeChunks
|
|
6
6
|
} from "./chunk-2DQ2XREU.js";
|
|
7
|
-
import {
|
|
8
|
-
commitPreparedFileAtomically
|
|
9
|
-
} from "./chunk-R6YJI3HE.js";
|
|
10
7
|
import {
|
|
11
8
|
listMemoryGovernanceRuns,
|
|
12
9
|
readMemoryGovernanceRunArtifact
|
|
13
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GGUBDXRR.js";
|
|
11
|
+
import {
|
|
12
|
+
commitPreparedFileAtomically
|
|
13
|
+
} from "./chunk-R6YJI3HE.js";
|
|
14
14
|
import {
|
|
15
15
|
StorageManager,
|
|
16
16
|
assertInjectedStorageRooted
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import {
|
|
19
|
-
MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
|
|
20
|
-
buildLifecycleEventsForMemory,
|
|
21
|
-
inferMemoryStatus,
|
|
22
|
-
sortMemoryLifecycleEvents,
|
|
23
|
-
toMemoryPathRel
|
|
24
|
-
} from "./chunk-ILGC6JH6.js";
|
|
25
|
-
import {
|
|
26
|
-
normalizeProjectionPreview,
|
|
27
|
-
normalizeProjectionTags
|
|
28
|
-
} from "./chunk-SCU65EZI.js";
|
|
17
|
+
} from "./chunk-FCDWWCLX.js";
|
|
29
18
|
import {
|
|
30
19
|
MEMORY_PROJECTION_SCHEMA_VERSION,
|
|
31
20
|
getMemoryProjectionPath,
|
|
@@ -41,6 +30,17 @@ import {
|
|
|
41
30
|
import {
|
|
42
31
|
openBetterSqlite3
|
|
43
32
|
} from "./chunk-RL6NEVXT.js";
|
|
33
|
+
import {
|
|
34
|
+
MEMORY_LIFECYCLE_EVENT_SORT_ORDER,
|
|
35
|
+
buildLifecycleEventsForMemory,
|
|
36
|
+
inferMemoryStatus,
|
|
37
|
+
sortMemoryLifecycleEvents,
|
|
38
|
+
toMemoryPathRel
|
|
39
|
+
} from "./chunk-ILGC6JH6.js";
|
|
40
|
+
import {
|
|
41
|
+
normalizeProjectionPreview,
|
|
42
|
+
normalizeProjectionTags
|
|
43
|
+
} from "./chunk-SCU65EZI.js";
|
|
44
44
|
import {
|
|
45
45
|
log
|
|
46
46
|
} from "./chunk-3WCASNQZ.js";
|
|
@@ -1024,4 +1024,4 @@ export {
|
|
|
1024
1024
|
verifyMemoryProjection,
|
|
1025
1025
|
repairMemoryProjection
|
|
1026
1026
|
};
|
|
1027
|
-
//# sourceMappingURL=chunk-
|
|
1027
|
+
//# sourceMappingURL=chunk-VVIW3PTA.js.map
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isAgentAccessSecretRef
|
|
3
|
+
} from "./chunk-IJ6WHMFB.js";
|
|
4
|
+
import {
|
|
5
|
+
coerceBool,
|
|
6
|
+
coerceNumber
|
|
7
|
+
} from "./chunk-PQVCH2AE.js";
|
|
8
|
+
|
|
9
|
+
// src/replica-peers-config.ts
|
|
10
|
+
var DEFAULT_POLL_INTERVAL_MS = 3e5;
|
|
11
|
+
var DEFAULT_REQUEST_TIMEOUT_MS = 1e4;
|
|
12
|
+
var DEFAULT_MAX_FILE_COUNT_DELTA = 100;
|
|
13
|
+
var DEFAULT_MAX_WATERMARK_AGE_DELTA_MS = 9e5;
|
|
14
|
+
var MAX_TIMER_DELAY_MS = 2147483647;
|
|
15
|
+
function expandEnvValue(value) {
|
|
16
|
+
const resolved = value.replace(/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_match, name) => {
|
|
17
|
+
const envValue = process.env[name];
|
|
18
|
+
if (envValue === void 0 || envValue === "") {
|
|
19
|
+
throw new Error(`replicaPeers: environment variable ${name} is not set`);
|
|
20
|
+
}
|
|
21
|
+
return envValue;
|
|
22
|
+
});
|
|
23
|
+
const unterminated = resolved.match(/\$\{[^}]*$/);
|
|
24
|
+
if (unterminated) {
|
|
25
|
+
throw new Error(`replicaPeers: unterminated environment variable placeholder: ${unterminated[0]}`);
|
|
26
|
+
}
|
|
27
|
+
const remaining = resolved.match(/\$\{[^}]*\}/);
|
|
28
|
+
if (remaining) {
|
|
29
|
+
throw new Error(`replicaPeers: malformed environment variable placeholder: ${remaining[0]}`);
|
|
30
|
+
}
|
|
31
|
+
return resolved;
|
|
32
|
+
}
|
|
33
|
+
function parseIntegerAtLeast(value, min, dflt, label, max = Number.MAX_SAFE_INTEGER) {
|
|
34
|
+
if (value === void 0) return dflt;
|
|
35
|
+
const coerced = coerceNumber(value);
|
|
36
|
+
if (coerced === void 0 || !Number.isFinite(coerced) || !Number.isInteger(coerced) || coerced < min) {
|
|
37
|
+
throw new Error(`${label} must be an integer greater than or equal to ${min}; got ${JSON.stringify(value)}`);
|
|
38
|
+
}
|
|
39
|
+
if (coerced > max) {
|
|
40
|
+
throw new Error(`${label} must be an integer no greater than ${max}; got ${JSON.stringify(value)}`);
|
|
41
|
+
}
|
|
42
|
+
return coerced;
|
|
43
|
+
}
|
|
44
|
+
function asRecord(value, label) {
|
|
45
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
46
|
+
throw new Error(`${label} must be an object`);
|
|
47
|
+
}
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
function parseReplicaPeerToken(raw, index) {
|
|
51
|
+
if (raw === void 0) return void 0;
|
|
52
|
+
if (typeof raw === "string") {
|
|
53
|
+
const trimmed = raw.trim();
|
|
54
|
+
if (trimmed.length === 0) {
|
|
55
|
+
throw new Error(`replicaPeers.peers[${index}].token must be a non-empty string or a SecretRef object`);
|
|
56
|
+
}
|
|
57
|
+
const expanded = expandEnvValue(trimmed);
|
|
58
|
+
if (expanded.trim().length === 0) {
|
|
59
|
+
throw new Error(`replicaPeers.peers[${index}].token expanded to an empty value`);
|
|
60
|
+
}
|
|
61
|
+
return expanded;
|
|
62
|
+
}
|
|
63
|
+
if (isAgentAccessSecretRef(raw)) return raw;
|
|
64
|
+
throw new Error(`replicaPeers.peers[${index}].token must be a string or a SecretRef object`);
|
|
65
|
+
}
|
|
66
|
+
function parseReplicaPeer(value, index) {
|
|
67
|
+
const record = asRecord(value, `replicaPeers.peers[${index}]`);
|
|
68
|
+
if (typeof record.url !== "string" || record.url.trim().length === 0) {
|
|
69
|
+
throw new Error(`replicaPeers.peers[${index}].url must be a non-empty string`);
|
|
70
|
+
}
|
|
71
|
+
const url = expandEnvValue(record.url.trim());
|
|
72
|
+
let parsed;
|
|
73
|
+
try {
|
|
74
|
+
parsed = new URL(url);
|
|
75
|
+
} catch {
|
|
76
|
+
throw new Error(`replicaPeers.peers[${index}].url is not a valid URL`);
|
|
77
|
+
}
|
|
78
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
79
|
+
throw new Error(`replicaPeers.peers[${index}].url must be an http(s) URL (got ${parsed.protocol})`);
|
|
80
|
+
}
|
|
81
|
+
if (parsed.search.length > 0 || parsed.hash.length > 0 || parsed.username.length > 0 || parsed.password.length > 0) {
|
|
82
|
+
throw new Error(`replicaPeers.peers[${index}].url must be a clean base URL (no query, fragment, or embedded credentials)`);
|
|
83
|
+
}
|
|
84
|
+
const token = parseReplicaPeerToken(record.token, index);
|
|
85
|
+
const canonical = parsed.toString().replace(/\/+$/, "");
|
|
86
|
+
return token === void 0 ? { url: canonical } : { url: canonical, token };
|
|
87
|
+
}
|
|
88
|
+
function parseStrictBool(value, fallback, label) {
|
|
89
|
+
if (value === void 0) return fallback;
|
|
90
|
+
const coerced = coerceBool(value);
|
|
91
|
+
if (coerced === void 0) {
|
|
92
|
+
throw new Error(`${label} must be a boolean (got ${JSON.stringify(value)})`);
|
|
93
|
+
}
|
|
94
|
+
return coerced;
|
|
95
|
+
}
|
|
96
|
+
function parseReplicaPeersConfig(cfg) {
|
|
97
|
+
const raw = cfg.replicaPeers;
|
|
98
|
+
if (raw !== void 0 && (raw === null || typeof raw !== "object" || Array.isArray(raw))) {
|
|
99
|
+
throw new Error(`replicaPeers must be a plain object (got ${JSON.stringify(raw)})`);
|
|
100
|
+
}
|
|
101
|
+
const block = raw ?? {};
|
|
102
|
+
if (block.peers !== void 0 && !Array.isArray(block.peers)) {
|
|
103
|
+
throw new Error(`replicaPeers.peers must be an array (got ${JSON.stringify(block.peers)})`);
|
|
104
|
+
}
|
|
105
|
+
const peers = (block.peers ?? []).map(parseReplicaPeer);
|
|
106
|
+
return {
|
|
107
|
+
enabled: parseStrictBool(block.enabled, false, "replicaPeers.enabled"),
|
|
108
|
+
peers,
|
|
109
|
+
pollIntervalMs: parseIntegerAtLeast(block.pollIntervalMs, 1, DEFAULT_POLL_INTERVAL_MS, "replicaPeers.pollIntervalMs"),
|
|
110
|
+
requestTimeoutMs: parseIntegerAtLeast(block.requestTimeoutMs, 1, DEFAULT_REQUEST_TIMEOUT_MS, "replicaPeers.requestTimeoutMs", MAX_TIMER_DELAY_MS),
|
|
111
|
+
maxFileCountDelta: parseIntegerAtLeast(block.maxFileCountDelta, 0, DEFAULT_MAX_FILE_COUNT_DELTA, "replicaPeers.maxFileCountDelta"),
|
|
112
|
+
maxWatermarkAgeDeltaMs: parseIntegerAtLeast(
|
|
113
|
+
block.maxWatermarkAgeDeltaMs,
|
|
114
|
+
0,
|
|
115
|
+
DEFAULT_MAX_WATERMARK_AGE_DELTA_MS,
|
|
116
|
+
"replicaPeers.maxWatermarkAgeDeltaMs"
|
|
117
|
+
)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function resolveReplicaPeersConfig(block) {
|
|
121
|
+
const record = block !== null && typeof block === "object" && !Array.isArray(block) ? block : {};
|
|
122
|
+
return {
|
|
123
|
+
enabled: coerceBool(record.enabled) ?? false,
|
|
124
|
+
peers: resolveReplicaPeers(record.peers),
|
|
125
|
+
pollIntervalMs: resolveIntegerAtLeast(record.pollIntervalMs, 1, DEFAULT_POLL_INTERVAL_MS),
|
|
126
|
+
requestTimeoutMs: resolveIntegerAtLeast(record.requestTimeoutMs, 1, DEFAULT_REQUEST_TIMEOUT_MS, MAX_TIMER_DELAY_MS),
|
|
127
|
+
maxFileCountDelta: resolveIntegerAtLeast(record.maxFileCountDelta, 0, DEFAULT_MAX_FILE_COUNT_DELTA),
|
|
128
|
+
maxWatermarkAgeDeltaMs: resolveIntegerAtLeast(record.maxWatermarkAgeDeltaMs, 0, DEFAULT_MAX_WATERMARK_AGE_DELTA_MS)
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function resolveIntegerAtLeast(value, min, dflt, max = Number.MAX_SAFE_INTEGER) {
|
|
132
|
+
if (value === void 0) return dflt;
|
|
133
|
+
const coerced = coerceNumber(value);
|
|
134
|
+
return coerced !== void 0 && Number.isFinite(coerced) && Number.isInteger(coerced) && coerced >= min && coerced <= max ? coerced : dflt;
|
|
135
|
+
}
|
|
136
|
+
function resolveReplicaPeers(value) {
|
|
137
|
+
if (!Array.isArray(value)) return [];
|
|
138
|
+
const peers = [];
|
|
139
|
+
value.forEach((entry, index) => {
|
|
140
|
+
try {
|
|
141
|
+
peers.push(parseReplicaPeer(entry, index));
|
|
142
|
+
} catch {
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
return peers;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export {
|
|
149
|
+
parseReplicaPeersConfig,
|
|
150
|
+
resolveReplicaPeersConfig
|
|
151
|
+
};
|
|
152
|
+
//# sourceMappingURL=chunk-WNIUPHWV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/replica-peers-config.ts"],"sourcesContent":["/**\n * `replicaPeers` config surface (issue #2149) — types + parser.\n *\n * Deliberately split out of replica-divergence.ts as a LIGHT module: it imports\n * no heavy modules (no corpus-watermark, no access-token-capabilities). PluginConfig\n * carries `replicaPeers: ReplicaPeersConfig`, so types.ts imports ReplicaPeersConfig\n * from HERE. If that type instead lived in replica-divergence.ts (which pulls in the\n * corpus census graph), then types.ts -> replica-divergence.ts -> corpus-watermark.ts\n * -> types.ts would form a heavy import cycle that rollup-plugin-dts re-expands across\n * every PluginConfig-inlining entry, OOMing the default-heap DTS worker (the issue\n * #1562 heap cliff). Keeping the config surface corpus-free severs that cycle.\n */\n\nimport { coerceBool, coerceNumber } from \"./connectors/coerce.js\";\nimport { isAgentAccessSecretRef } from \"./resolve-auth-token.js\";\nimport type { AgentAccessAuthToken } from \"./types.js\";\n\nconst DEFAULT_POLL_INTERVAL_MS = 300_000; // 5 min\nconst DEFAULT_REQUEST_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_FILE_COUNT_DELTA = 100;\nconst DEFAULT_MAX_WATERMARK_AGE_DELTA_MS = 900_000; // 15 min\n/** Node clamps a `setTimeout`/`AbortSignal.timeout` delay above 2^31-1 ms to 1ms,\n * which would make `withDeadline` fire immediately and mark every peer unreachable. */\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nexport interface ReplicaPeerConfig {\n /** Base URL of the peer's agent-access HTTP server (http/https). */\n url: string;\n /**\n * Bearer token for the peer's authenticated `/health`. A literal string\n * (env-expanded) or an unresolved SecretRef preserved verbatim and resolved\n * at poll time — mirrors `agentAccessHttp.authToken` exactly.\n */\n token?: AgentAccessAuthToken;\n}\n\nexport interface ReplicaPeersConfig {\n /** Master gate. Default false — a daemon with no peers behaves exactly as before. */\n enabled: boolean;\n /** Peers to poll. Default []. */\n peers: ReplicaPeerConfig[];\n /** How often a peer is re-polled (SWR TTL), ms. Default 5 min. */\n pollIntervalMs: number;\n /** Per-peer request timeout, ms. Default 10s. */\n requestTimeoutMs: number;\n /** File-count delta (per namespace) beyond which a peer is flagged diverged. Default 100. */\n maxFileCountDelta: number;\n /** Newest-write timestamp gap (per namespace) beyond which a peer is flagged diverged, ms. Default 15 min. */\n maxWatermarkAgeDeltaMs: number;\n}\n\n/**\n * Expand `${ENV_VAR}` placeholders in a config string, matching config.ts's\n * `resolveEnvVars` semantics (throw on unset var / malformed placeholder).\n * Inlined rather than imported because config.ts imports THIS module for\n * `parseReplicaPeersConfig`, so importing back would be circular — the same\n * reason extraction-liveness.ts inlines its numeric validation.\n */\nfunction expandEnvValue(value: string): string {\n const resolved = value.replace(/\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g, (_match, name: string) => {\n const envValue = process.env[name];\n if (envValue === undefined || envValue === \"\") {\n throw new Error(`replicaPeers: environment variable ${name} is not set`);\n }\n return envValue;\n });\n // An UNTERMINATED `${NAME` matches neither the replacement regex nor the\n // balanced leftover check below, so the literal typo would be sent as the\n // bearer token and surface as a misleading `http_401` (round 8, codex P2).\n const unterminated = resolved.match(/\\$\\{[^}]*$/);\n if (unterminated) {\n throw new Error(`replicaPeers: unterminated environment variable placeholder: ${unterminated[0]}`);\n }\n const remaining = resolved.match(/\\$\\{[^}]*\\}/);\n if (remaining) {\n throw new Error(`replicaPeers: malformed environment variable placeholder: ${remaining[0]}`);\n }\n return resolved;\n}\n\n/**\n * An absent key falls back to the default; any PRESENT value (including an\n * explicit `null`) must coerce to an integer `>= min`, else THROW. A fractional\n * or out-of-range value is rejected, never floored/reinterpreted (§1/§17/§39).\n */\nfunction parseIntegerAtLeast(value: unknown, min: number, dflt: number, label: string, max = Number.MAX_SAFE_INTEGER): number {\n if (value === undefined) return dflt;\n const coerced = coerceNumber(value);\n if (coerced === undefined || !Number.isFinite(coerced) || !Number.isInteger(coerced) || coerced < min) {\n throw new Error(`${label} must be an integer greater than or equal to ${min}; got ${JSON.stringify(value)}`);\n }\n if (coerced > max) {\n throw new Error(`${label} must be an integer no greater than ${max}; got ${JSON.stringify(value)}`);\n }\n return coerced;\n}\n\nfunction asRecord(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new Error(`${label} must be an object`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseReplicaPeerToken(raw: unknown, index: number): AgentAccessAuthToken | undefined {\n // Only an OMITTED token selects unauthenticated polling. A present `null` (round\n // 4, codex P2) or an explicit empty/whitespace string (round 6, codex P2) is a\n // present-but-invalid credential: silently dropping it polls without the token\n // and surfaces a healthy peer as `http_401`, hiding the real config error.\n if (raw === undefined) return undefined;\n if (typeof raw === \"string\") {\n const trimmed = raw.trim();\n if (trimmed.length === 0) {\n throw new Error(`replicaPeers.peers[${index}].token must be a non-empty string or a SecretRef object`);\n }\n // Re-validate AFTER expansion: `${PEER_TOKEN}` pointing at a whitespace-only\n // env value clears the check above, then resolveAgentAccessAuthToken\n // normalizes it to undefined — silently downgrading an explicitly\n // authenticated peer to an unauthenticated poll read as http_401 (round 9).\n const expanded = expandEnvValue(trimmed);\n if (expanded.trim().length === 0) {\n throw new Error(`replicaPeers.peers[${index}].token expanded to an empty value`);\n }\n return expanded;\n }\n if (isAgentAccessSecretRef(raw)) return raw;\n throw new Error(`replicaPeers.peers[${index}].token must be a string or a SecretRef object`);\n}\n\nfunction parseReplicaPeer(value: unknown, index: number): ReplicaPeerConfig {\n const record = asRecord(value, `replicaPeers.peers[${index}]`);\n if (typeof record.url !== \"string\" || record.url.trim().length === 0) {\n throw new Error(`replicaPeers.peers[${index}].url must be a non-empty string`);\n }\n const url = expandEnvValue(record.url.trim());\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new Error(`replicaPeers.peers[${index}].url is not a valid URL`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(`replicaPeers.peers[${index}].url must be an http(s) URL (got ${parsed.protocol})`);\n }\n // The health path is appended to this base by string concatenation, so a query\n // or fragment would corrupt the request URL (`https://h?x` + `/engram/v1/health`\n // targets `/` with a mangled query; a fragment drops the path). Reject them at\n // parse time — a peer URL must be a clean base (round 6, codex). Embedded\n // credentials (`user:pass@host`) are rejected too: Node's fetch refuses to\n // construct a request from a URL with credentials, so a healthy peer would\n // falsely read as unreachable while redaction hid the config mistake.\n if (parsed.search.length > 0 || parsed.hash.length > 0 || parsed.username.length > 0 || parsed.password.length > 0) {\n throw new Error(`replicaPeers.peers[${index}].url must be a clean base URL (no query, fragment, or embedded credentials)`);\n }\n const token = parseReplicaPeerToken(record.token, index);\n // Store the CANONICAL form: `new URL()` tolerates surrounding whitespace that\n // the raw string keeps, and the health path is appended by concatenation - so\n // \" https://peer /engram/v1/health\" reads as an unreachable healthy peer.\n const canonical = parsed.toString().replace(/\\/+$/, \"\");\n return token === undefined ? { url: canonical } : { url: canonical, token };\n}\n\n/**\n * Parse the `replicaPeers` config block. Mirrors the nested-block validation of\n * the other config-block parsers; coerces string booleans (§24) and rejects\n * invalid numbers/urls/shapes (§1/§39).\n */\n/**\n * Strict boolean for the parse path: absent -> the default, present -> must be\n * a recognized boolean token. A value like `1` must NOT silently reinterpret as\n * `false`, which would leave monitoring off after an operator tried to enable\n * it (round 3, codex P2). The lenient read-boundary resolver still defaults.\n */\nfunction parseStrictBool(value: unknown, fallback: boolean, label: string): boolean {\n if (value === undefined) return fallback;\n const coerced = coerceBool(value);\n if (coerced === undefined) {\n throw new Error(`${label} must be a boolean (got ${JSON.stringify(value)})`);\n }\n return coerced;\n}\n\nexport function parseReplicaPeersConfig(cfg: Record<string, unknown>): ReplicaPeersConfig {\n const raw = cfg.replicaPeers;\n if (raw !== undefined && (raw === null || typeof raw !== \"object\" || Array.isArray(raw))) {\n throw new Error(`replicaPeers must be a plain object (got ${JSON.stringify(raw)})`);\n }\n const block = (raw ?? {}) as Record<string, unknown>;\n if (block.peers !== undefined && !Array.isArray(block.peers)) {\n throw new Error(`replicaPeers.peers must be an array (got ${JSON.stringify(block.peers)})`);\n }\n const peers = (block.peers ?? []).map(parseReplicaPeer);\n return {\n enabled: parseStrictBool(block.enabled, false, \"replicaPeers.enabled\"),\n peers,\n pollIntervalMs: parseIntegerAtLeast(block.pollIntervalMs, 1, DEFAULT_POLL_INTERVAL_MS, \"replicaPeers.pollIntervalMs\"),\n requestTimeoutMs: parseIntegerAtLeast(block.requestTimeoutMs, 1, DEFAULT_REQUEST_TIMEOUT_MS, \"replicaPeers.requestTimeoutMs\", MAX_TIMER_DELAY_MS),\n maxFileCountDelta: parseIntegerAtLeast(block.maxFileCountDelta, 0, DEFAULT_MAX_FILE_COUNT_DELTA, \"replicaPeers.maxFileCountDelta\"),\n maxWatermarkAgeDeltaMs: parseIntegerAtLeast(\n block.maxWatermarkAgeDeltaMs,\n 0,\n DEFAULT_MAX_WATERMARK_AGE_DELTA_MS,\n \"replicaPeers.maxWatermarkAgeDeltaMs\",\n ),\n };\n}\n\n/**\n * READ-boundary resolver (mirrors `resolveExtractionLivenessConfig`, issue #2155).\n * `parseConfig` always populates `replicaPeers`, but a host adapter, an older\n * persisted config, or a hand-built `PluginConfig` can hand a READ surface\n * (/health, doctor) an absent, partial, or loosely-typed block. Every replica\n * surface must degrade to the documented default (disabled, no peers, no polling)\n * rather than throw — `/health` must stay answerable. Unlike the strict parser, a\n * present-but-invalid field falls back to its default here instead of throwing, and\n * a malformed peer entry is dropped rather than aborting the whole block.\n */\nexport function resolveReplicaPeersConfig(block: unknown): ReplicaPeersConfig {\n const record =\n block !== null && typeof block === \"object\" && !Array.isArray(block) ? (block as Record<string, unknown>) : {};\n return {\n enabled: coerceBool(record.enabled) ?? false,\n peers: resolveReplicaPeers(record.peers),\n pollIntervalMs: resolveIntegerAtLeast(record.pollIntervalMs, 1, DEFAULT_POLL_INTERVAL_MS),\n requestTimeoutMs: resolveIntegerAtLeast(record.requestTimeoutMs, 1, DEFAULT_REQUEST_TIMEOUT_MS, MAX_TIMER_DELAY_MS),\n maxFileCountDelta: resolveIntegerAtLeast(record.maxFileCountDelta, 0, DEFAULT_MAX_FILE_COUNT_DELTA),\n maxWatermarkAgeDeltaMs: resolveIntegerAtLeast(record.maxWatermarkAgeDeltaMs, 0, DEFAULT_MAX_WATERMARK_AGE_DELTA_MS),\n };\n}\n\n/** Lenient sibling of {@link parseIntegerAtLeast}: a present-but-invalid value falls back, never throws. */\nfunction resolveIntegerAtLeast(value: unknown, min: number, dflt: number, max = Number.MAX_SAFE_INTEGER): number {\n if (value === undefined) return dflt;\n const coerced = coerceNumber(value);\n return coerced !== undefined && Number.isFinite(coerced) && Number.isInteger(coerced) && coerced >= min && coerced <= max ? coerced : dflt;\n}\n\n/** Lenient peer list: a non-array is empty; a malformed entry is dropped, never thrown (read boundary). */\nfunction resolveReplicaPeers(value: unknown): ReplicaPeerConfig[] {\n if (!Array.isArray(value)) return [];\n const peers: ReplicaPeerConfig[] = [];\n value.forEach((entry, index) => {\n try {\n peers.push(parseReplicaPeer(entry, index));\n } catch {\n // Read surfaces never throw on a bad peer — parseConfig is the enforcing boundary.\n }\n });\n return peers;\n}\n"],"mappings":"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","names":[]}
|