@remnic/core 9.65.2 → 9.65.3
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 +44 -44
- package/dist/access-admin-ops-surface.js +14 -14
- package/dist/access-authorization-probe.d.ts +38 -38
- package/dist/access-authorization-probe.js +15 -15
- package/dist/access-boundary.d.ts +40 -40
- package/dist/access-boundary.js +14 -14
- package/dist/access-cli.js +52 -52
- package/dist/access-coding-context-resolution.d.ts +3 -1
- package/dist/access-extraction-force-flush.d.ts +25 -25
- package/dist/access-extraction-force-flush.js +14 -14
- package/dist/access-health-types.d.ts +3 -1
- package/dist/access-http-lcm-compaction.d.ts +39 -39
- package/dist/access-http-lifecycle-flush.d.ts +39 -39
- package/dist/access-http-offline-stream.d.ts +25 -25
- package/dist/access-http-query.d.ts +4 -2
- package/dist/access-http-query.js +16 -16
- package/dist/access-http.d.ts +51 -44
- package/dist/access-http.js +30 -30
- package/dist/access-identity-continuity-surface.d.ts +12 -12
- package/dist/access-identity-continuity-surface.js +14 -14
- package/dist/access-lcm-surface.d.ts +27 -27
- package/dist/access-lcm-surface.js +14 -14
- package/dist/access-mcp-admin-tools.d.ts +9 -1
- package/dist/access-mcp-admin-tools.js +3 -1
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +39 -39
- package/dist/access-mcp.js +24 -24
- package/dist/access-memory-search-fanout.d.ts +4 -2
- package/dist/{access-namespace-preflight-Dhvcl-T0.d.ts → access-namespace-preflight-B7Usyz-K.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +5 -3
- package/dist/access-namespace-preflight.js +14 -14
- package/dist/access-observe-write-surface.d.ts +39 -39
- package/dist/access-observe-write-surface.js +14 -14
- package/dist/access-offline-manifest.d.ts +12 -12
- package/dist/access-operations-batch.js +18 -18
- package/dist/access-operations.d.ts +40 -40
- package/dist/access-operations.js +21 -21
- package/dist/access-recall-concurrency.d.ts +40 -40
- package/dist/access-recall-concurrency.js +14 -14
- package/dist/access-recall-response.d.ts +24 -24
- package/dist/access-recall-response.js +14 -14
- package/dist/access-recall-surface.d.ts +24 -24
- package/dist/access-recall-surface.js +14 -14
- package/dist/access-schema.d.ts +45 -45
- package/dist/{access-service-Bke1alZO.d.ts → access-service-DkaIG3n8.d.ts} +219 -75
- package/dist/access-service-helpers.d.ts +40 -40
- package/dist/access-service.d.ts +47 -47
- package/dist/access-service.js +14 -14
- package/dist/access-surface-catalog.d.ts +40 -40
- package/dist/access-surface-catalog.js +20 -16
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +5 -3
- package/dist/action-confidence.d.ts +3 -1
- package/dist/active-memory-bridge.d.ts +3 -1
- package/dist/active-recall.d.ts +3 -1
- package/dist/active-recall.js +6 -1
- package/dist/active-recall.js.map +1 -1
- package/dist/ambient-provenance.d.ts +3 -1
- package/dist/artifact-search.d.ts +3 -1
- package/dist/behavior-learner.d.ts +3 -1
- package/dist/behavior-signals.d.ts +3 -1
- package/dist/bootstrap.d.ts +12 -12
- package/dist/briefing-window.d.ts +4 -2
- package/dist/briefing.d.ts +4 -2
- package/dist/briefing.js +3 -3
- package/dist/buffer-surprise-report.d.ts +3 -1
- package/dist/buffer-turn-helpers.d.ts +3 -1
- package/dist/buffer.d.ts +4 -2
- package/dist/bulk-import/index.d.ts +5 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/capabilities.d.ts +3 -1
- package/dist/{catalog-DV6qnbr7.d.ts → catalog-CX2BZEJh.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +3 -1
- package/dist/causal-consolidation.js +7 -7
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-R7JAM2XF.js → chunk-2VXWFYJE.js} +3 -3
- package/dist/{chunk-UXO5IMBK.js → chunk-4XDGYCZI.js} +2 -2
- package/dist/{chunk-OTHZWLUD.js → chunk-57HVIG5U.js} +2 -2
- package/dist/{chunk-EILZG5VC.js → chunk-6TAX66IA.js} +2 -2
- package/dist/{chunk-NKKD4ZAU.js → chunk-6VALIZKG.js} +2 -2
- package/dist/{chunk-BWLRUMOG.js → chunk-76PL4XLG.js} +435 -1
- package/dist/chunk-76PL4XLG.js.map +1 -0
- package/dist/{chunk-2E36UXVW.js → chunk-7KFIMGMP.js} +2 -2
- package/dist/{chunk-LGO6A7GJ.js → chunk-7QOO4LGC.js} +28 -28
- package/dist/{chunk-TBOJ76ER.js → chunk-AB3A7EFH.js} +18 -2
- package/dist/{chunk-TBOJ76ER.js.map → chunk-AB3A7EFH.js.map} +1 -1
- package/dist/{chunk-DZUJ46DO.js → chunk-AUO2LJ3K.js} +2 -2
- package/dist/{chunk-ZO6AXLEH.js → chunk-AYDDB3XI.js} +2 -2
- package/dist/{chunk-NTWN6HB2.js → chunk-AYYGRVRP.js} +2 -2
- package/dist/{chunk-7YQ4IYS2.js → chunk-AZAA5DNP.js} +2 -2
- package/dist/{chunk-4KYOLI6M.js → chunk-BKYPJUQL.js} +120 -14
- package/dist/chunk-BKYPJUQL.js.map +1 -0
- package/dist/{chunk-Z7PBQPJ4.js → chunk-BQUEAVNW.js} +2 -2
- package/dist/{chunk-35NN3ZFA.js → chunk-CTVWELNK.js} +21 -3
- package/dist/chunk-CTVWELNK.js.map +1 -0
- package/dist/{chunk-5YQ63T4B.js → chunk-D27J626P.js} +2 -2
- package/dist/{chunk-LZH5FR2W.js → chunk-DHTQP334.js} +2 -2
- package/dist/{chunk-Y7DK7HHJ.js → chunk-E4MVQQVX.js} +2 -2
- package/dist/{chunk-JYYBA7TF.js → chunk-EIVIB73I.js} +2 -2
- package/dist/{chunk-S2DPMJXH.js → chunk-EV3YFLCB.js} +2 -2
- package/dist/{chunk-TZNQUNKL.js → chunk-FC7TIRFS.js} +15 -1
- package/dist/chunk-FC7TIRFS.js.map +1 -0
- package/dist/{chunk-3I7ASZN3.js → chunk-G57LQRP6.js} +2 -2
- package/dist/{chunk-UIN2BWDD.js → chunk-GN55KU2P.js} +2 -2
- package/dist/{chunk-PE255F4T.js → chunk-GUXS322H.js} +2 -2
- package/dist/{chunk-V3MXUL3D.js → chunk-H5FW4S5Q.js} +319 -643
- package/dist/chunk-H5FW4S5Q.js.map +1 -0
- package/dist/chunk-I32NKXE2.js +879 -0
- package/dist/chunk-I32NKXE2.js.map +1 -0
- package/dist/{chunk-YB42WZCY.js → chunk-IQSC3V2E.js} +2 -2
- package/dist/{chunk-MN4KB2A4.js → chunk-MBDJJTAT.js} +3 -3
- package/dist/{chunk-SQI57UCJ.js → chunk-MRTUN665.js} +2 -2
- package/dist/{chunk-SBDCZ2AX.js → chunk-NXKJHSDN.js} +1 -1
- package/dist/chunk-NXKJHSDN.js.map +1 -0
- package/dist/{chunk-SPUJNJJC.js → chunk-NZWEEALH.js} +2 -2
- package/dist/{chunk-2XDWWPTN.js → chunk-OJD4WS2E.js} +2 -2
- package/dist/{chunk-ZWXJBFZU.js → chunk-OLWTCWQ2.js} +8 -8
- package/dist/{chunk-XRYZRW54.js → chunk-P4DHENRE.js} +2 -2
- package/dist/{chunk-J275IYMG.js → chunk-PAYGC3BD.js} +29 -2
- package/dist/chunk-PAYGC3BD.js.map +1 -0
- package/dist/{chunk-IID2CMUU.js → chunk-PDVQ5JU3.js} +2 -2
- package/dist/{chunk-7BY7V4YX.js → chunk-Q4WONDMJ.js} +4 -3
- package/dist/{chunk-7BY7V4YX.js.map → chunk-Q4WONDMJ.js.map} +1 -1
- package/dist/{chunk-5NM4OH4P.js → chunk-QFMO32TO.js} +3 -3
- package/dist/{chunk-SIHSCCUQ.js → chunk-QXIQPCCN.js} +1 -1
- package/dist/{chunk-2YI72KM3.js → chunk-R47WINCY.js} +2 -2
- package/dist/{chunk-ZQHI2BZB.js → chunk-RK4WXUI2.js} +2 -2
- package/dist/{chunk-QOS5LBZN.js → chunk-S7Q5CM7E.js} +2 -2
- package/dist/{chunk-GDFVPUJ5.js → chunk-TDKSCV62.js} +2 -2
- package/dist/{chunk-OCZIYAE5.js → chunk-TYUS5TLG.js} +3 -3
- package/dist/{chunk-GNCCUR6K.js → chunk-URHCUXKI.js} +2 -2
- package/dist/{chunk-TF77C7SV.js → chunk-VA5KMSAE.js} +7 -5
- package/dist/chunk-VA5KMSAE.js.map +1 -0
- package/dist/{chunk-SB7D4BT7.js → chunk-WN5FSGLE.js} +1545 -105
- package/dist/chunk-WN5FSGLE.js.map +1 -0
- package/dist/{chunk-YLDXWCZP.js → chunk-YF6UHWOV.js} +14 -9
- package/dist/chunk-YF6UHWOV.js.map +1 -0
- package/dist/{chunk-CT56C22C.js → chunk-Z4RPXHJH.js} +4 -4
- package/dist/{cli-cShQ13XG.d.ts → cli-ChKeYMZv.d.ts} +5 -5
- package/dist/cli.d.ts +25 -25
- package/dist/cli.js +44 -43
- package/dist/coding/pre-action-gate.d.ts +2 -60
- package/dist/compounding/engine.d.ts +4 -2
- package/dist/compounding/engine.js +3 -3
- package/dist/compounding/preference-consolidator.d.ts +3 -1
- package/dist/compression-optimizer.d.ts +3 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.js +6 -1
- package/dist/connectors/codex-materialize-runner.d.ts +3 -1
- package/dist/connectors/codex-materialize-runner.js +3 -3
- package/dist/connectors/codex-materialize.d.ts +3 -1
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.js +3 -3
- package/dist/consolidation-provenance-check.d.ts +4 -2
- package/dist/consolidation-undo.d.ts +4 -2
- package/dist/contradiction/index.d.ts +10 -270
- package/dist/contradiction/index.js +11 -6
- package/dist/{contradiction-review-QKJH5DKD.js → contradiction-review-WRVLRWHS.js} +6 -2
- package/dist/{contradiction-scan-VOTQRRSX.js → contradiction-scan-AKUWPX5N.js} +5 -3
- package/dist/converge-config.d.ts +3 -1
- package/dist/convergence-refresh.d.ts +4 -2
- package/dist/convergence-refresh.js +5 -5
- package/dist/conversation-index/backend.d.ts +3 -1
- package/dist/conversation-index/chunker.d.ts +3 -1
- package/dist/conversation-index/faiss-adapter.d.ts +3 -1
- package/dist/conversation-index/indexer.d.ts +3 -1
- package/dist/conversation-index/search.d.ts +3 -1
- package/dist/corpus-watermark.d.ts +3 -1
- package/dist/corpus-watermark.js +5 -5
- package/dist/cross-lingual-recall.d.ts +3 -1
- package/dist/day-summary.d.ts +3 -1
- package/dist/delinearize.d.ts +3 -1
- package/dist/dependency-propagation-config.d.ts +3 -1
- package/dist/{dependency-propagation-delivery-CsGg-VwS.d.ts → dependency-propagation-delivery-B8ZMBBCY.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +3 -1
- package/dist/direct-answer.d.ts +3 -1
- package/dist/embedding-fallback.d.ts +3 -1
- package/dist/enrichment/index.d.ts +3 -1
- package/dist/entity-origin-fields.d.ts +3 -1
- package/dist/entity-retrieval.d.ts +4 -2
- package/dist/entity-retrieval.js +3 -3
- package/dist/entity-schema.d.ts +3 -1
- package/dist/episodic-context.d.ts +3 -1
- package/dist/explicit-capture.d.ts +12 -12
- package/dist/external-wiki-access.d.ts +40 -40
- package/dist/external-wiki-access.js +15 -15
- package/dist/external-wiki-collection-registration.d.ts +3 -1
- package/dist/external-wiki-collection.d.ts +3 -1
- package/dist/external-wiki-mcp-tools.d.ts +40 -40
- package/dist/extraction-error-classification.d.ts +3 -1
- package/dist/extraction-faithfulness.d.ts +3 -1
- package/dist/extraction-judge-telemetry.d.ts +3 -1
- package/dist/extraction-judge-training.d.ts +3 -1
- package/dist/extraction-judge.d.ts +3 -1
- package/dist/extraction-liveness.d.ts +3 -1
- package/dist/extraction-normalization.d.ts +3 -1
- package/dist/extraction-prompt.d.ts +3 -1
- package/dist/extraction-source-grounding-rules.d.ts +3 -1
- package/dist/extraction-source-grounding.d.ts +3 -1
- package/dist/extraction.d.ts +3 -1
- package/dist/extraction.js +3 -3
- package/dist/fallback-llm.d.ts +3 -1
- package/dist/graph-dashboard-diff.d.ts +3 -1
- package/dist/graph-dashboard-key.d.ts +3 -1
- package/dist/graph-dashboard-parser.d.ts +3 -1
- package/dist/graph-edge-reinforcement.d.ts +3 -1
- package/dist/graph-path-reconstruction.d.ts +3 -1
- package/dist/graph-path-scoring.d.ts +3 -1
- package/dist/graph-snapshot.d.ts +3 -1
- package/dist/graph.d.ts +3 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +3 -1
- package/dist/importers/index.d.ts +3 -1
- package/dist/in-flight-reads.d.ts +3 -1
- package/dist/index-CexDrJzC.d.ts +284 -0
- package/dist/index.d.ts +251 -29
- package/dist/index.js +129 -75
- package/dist/intent.d.ts +3 -1
- package/dist/lcm/engine.d.ts +3 -1
- package/dist/lcm/index.d.ts +3 -1
- package/dist/lcm/tools.d.ts +3 -1
- package/dist/lifecycle.d.ts +3 -1
- package/dist/live-connectors-runner.d.ts +3 -1
- package/dist/local-llm.d.ts +3 -1
- package/dist/local-model-endpoint.d.ts +3 -1
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +3 -3
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
- package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-projection.js +4 -4
- package/dist/{maintenance-jhMpeGne.d.ts → maintenance-nkdtSrVr.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +37 -37
- package/dist/memory-action-policy.d.ts +3 -1
- package/dist/memory-cache.d.ts +3 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +3 -1
- package/dist/memory-projection-store.d.ts +3 -1
- package/dist/memory-provenance.d.ts +3 -1
- package/dist/memory-snapshot.d.ts +3 -1
- package/dist/memory-subject-cli.d.ts +40 -40
- package/dist/memory-subject.d.ts +42 -42
- package/dist/memory-worth-outcomes.d.ts +4 -2
- package/dist/models-json.d.ts +3 -1
- package/dist/namespaces/migrate.d.ts +5 -3
- package/dist/namespaces/migrate.js +4 -4
- package/dist/namespaces/principal.d.ts +3 -1
- package/dist/namespaces/search.d.ts +3 -1
- package/dist/namespaces/storage.d.ts +5 -3
- package/dist/namespaces/storage.js +3 -3
- package/dist/native-knowledge.d.ts +3 -1
- package/dist/offline-sync-impression-drain.d.ts +3 -1
- package/dist/operator-doctor-corpus.d.ts +3 -1
- package/dist/operator-doctor-corpus.js +6 -6
- package/dist/operator-doctor-replica.d.ts +3 -1
- package/dist/operator-toolkit.d.ts +5 -3
- package/dist/operator-toolkit.js +15 -12
- package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
- package/dist/orchestration/maintenance.d.ts +6 -4
- package/dist/orchestration/maintenance.js +9 -9
- package/dist/{orchestrator-DyGUC7re.d.ts → orchestrator-Bvq1-RQs.d.ts} +23 -9
- package/dist/orchestrator.d.ts +12 -12
- package/dist/orchestrator.js +52 -52
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-C25Oxtp1.d.ts → pipeline-C8vfIiTX.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +3 -1
- package/dist/proactive-contention.d.ts +3 -1
- package/dist/provenance.d.ts +3 -1
- package/dist/{public-http-CMe7NQzj.d.ts → public-http-Cy0aYbys.d.ts} +1 -1
- package/dist/{qmd-DkDVCbgF.d.ts → qmd-B9p1SZTZ.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +4 -2
- package/dist/qmd-recall-cache.d.ts +3 -1
- package/dist/qmd.d.ts +4 -2
- package/dist/recall-concurrency-config.d.ts +3 -1
- package/dist/recall-disclosure-escalation.d.ts +3 -1
- package/dist/recall-explain-renderer.d.ts +3 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +3 -1
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-state.d.ts +3 -1
- package/dist/recall-tag-filter.d.ts +3 -1
- package/dist/recall-timings.d.ts +3 -1
- package/dist/recall-xray-cli.d.ts +3 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +3 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +3 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +3 -1
- package/dist/reconcile/manifest.d.ts +3 -1
- package/dist/reconcile/plan.d.ts +3 -1
- package/dist/replay/normalizers/chatgpt.d.ts +3 -1
- package/dist/replay/normalizers/claude.d.ts +3 -1
- package/dist/replay/normalizers/openclaw.d.ts +3 -1
- package/dist/replay/normalizers/shared.d.ts +3 -1
- package/dist/replay/runner.d.ts +3 -1
- package/dist/replay/types.d.ts +3 -1
- package/dist/replica-divergence.d.ts +3 -1
- package/dist/replica-peers-config.d.ts +3 -1
- package/dist/{resolution-MFY72STR.js → resolution-4552BNRV.js} +13 -3
- package/dist/resolve-auth-token.d.ts +3 -1
- package/dist/resume-bundles.js +4 -2
- package/dist/retrieval-agents.d.ts +4 -2
- package/dist/retrieval-tiers.d.ts +3 -1
- package/dist/routing/engine.d.ts +3 -1
- package/dist/routing/store.d.ts +3 -1
- package/dist/salvage-envelope.d.ts +3 -1
- package/dist/schemas.d.ts +44 -44
- package/dist/{scope-profiles-B9xMoFO-.d.ts → scope-profiles-DLrRxFWR.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +3 -1
- package/dist/search/factory.d.ts +3 -1
- package/dist/search/index.d.ts +3 -1
- package/dist/search/lancedb-backend.d.ts +3 -1
- package/dist/search/meilisearch-backend.d.ts +3 -1
- package/dist/search/noop-backend.d.ts +3 -1
- package/dist/search/orama-backend.d.ts +3 -1
- package/dist/search/port.d.ts +3 -1
- package/dist/search/remote-backend.d.ts +3 -1
- package/dist/{semantic-TddhF0y7.d.ts → semantic-BalR6EXU.d.ts} +1 -1
- package/dist/{semantic-consolidation-C4uykW84.d.ts → semantic-consolidation-DlN6xe20.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +4 -4
- package/dist/semantic-rule-promotion.js +3 -3
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +3 -3
- package/dist/{service-DCZDZNcV.d.ts → service-GkYyVfm9.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +3 -1
- package/dist/session-observer-state.d.ts +3 -1
- package/dist/shared-context/manager.d.ts +3 -1
- package/dist/signal.d.ts +3 -1
- package/dist/source-agent-qualifier.d.ts +3 -1
- package/dist/source-agent-qualifier.js +3 -3
- package/dist/{storage-CcKmEjL8.d.ts → storage-BIDzuKIn.d.ts} +1 -1
- package/dist/storage.d.ts +4 -2
- package/dist/storage.js +2 -2
- package/dist/subject-config.d.ts +3 -1
- package/dist/summarizer.d.ts +3 -1
- package/dist/summary-snapshot.d.ts +3 -1
- package/dist/support-passport/index.d.ts +43 -43
- package/dist/support-passport/index.js +17 -17
- package/dist/temporal-supersession.d.ts +4 -2
- package/dist/temporal-timeline-recall.d.ts +3 -1
- package/dist/temporal-validity.d.ts +3 -1
- package/dist/threading.d.ts +3 -1
- package/dist/tier-migration.d.ts +4 -2
- package/dist/tier-routing.d.ts +3 -1
- package/dist/topics.d.ts +3 -1
- package/dist/transcript.d.ts +3 -1
- package/dist/transfer/types.d.ts +20 -20
- package/dist/trust-score-stage.d.ts +3 -1
- package/dist/trust-score.d.ts +3 -1
- package/dist/{types-Pi0lfaEt.d.ts → types-BxAcOl5Q.d.ts} +323 -4
- package/dist/types.d.ts +3 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +3 -1
- package/dist/verified-recall.js +3 -3
- package/dist/who-knows-cli.d.ts +40 -40
- package/dist/who-knows-cli.js +4 -4
- package/dist/who-knows.d.ts +42 -42
- package/dist/who-knows.js +3 -3
- package/dist/write-envelope.d.ts +3 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +4 -0
- package/src/access-http.ts +6 -5
- package/src/access-mcp-admin-tools.ts +24 -0
- package/src/access-mcp-output-schemas.ts +14 -0
- package/src/access-mcp.ts +2 -2
- package/src/access-operations-batch.ts +5 -0
- package/src/access-service.ts +27 -0
- package/src/access-surface-catalog.test.ts +24 -0
- package/src/access-surface-catalog.ts +4 -0
- package/src/coding/action-gate.test.ts +341 -0
- package/src/coding/action-gate.ts +556 -0
- package/src/config.ts +5 -0
- package/src/contradiction/contradiction-review.ts +50 -4
- package/src/contradiction/contradiction-scan.ts +14 -3
- package/src/contradiction/resolution.ts +50 -2
- package/src/index.ts +4 -3
- package/src/orchestration/recall-rerank-coordinator.ts +123 -4
- package/src/orchestration/recall-result-formatter.ts +6 -2
- package/src/orchestration/recall-search-pipeline.ts +14 -1
- package/src/preferences/drift-config.ts +118 -0
- package/src/preferences/drift-recall.ts +133 -0
- package/src/preferences/drift-types.ts +87 -0
- package/src/preferences/index.ts +12 -0
- package/src/preferences/preference-drift.test.ts +690 -0
- package/src/preferences/preference-drift.ts +724 -0
- package/src/review/review-deck-access.test.ts +325 -0
- package/src/review/review-deck-http-base.ts +133 -0
- package/src/review/review-deck-mutation.test.ts +417 -0
- package/src/review/review-deck-mutation.ts +677 -0
- package/src/review/review-deck-snapshot.ts +196 -0
- package/src/review/review-deck-surface.ts +117 -0
- package/src/review/review-deck.test.ts +347 -0
- package/src/review/review-deck.ts +311 -0
- package/src/storage.ts +4 -6
- package/src/types.ts +7 -3
- package/dist/chunk-35NN3ZFA.js.map +0 -1
- package/dist/chunk-4KYOLI6M.js.map +0 -1
- package/dist/chunk-BWLRUMOG.js.map +0 -1
- package/dist/chunk-J275IYMG.js.map +0 -1
- package/dist/chunk-SB7D4BT7.js.map +0 -1
- package/dist/chunk-SBDCZ2AX.js.map +0 -1
- package/dist/chunk-TF77C7SV.js.map +0 -1
- package/dist/chunk-TZNQUNKL.js.map +0 -1
- package/dist/chunk-V3MXUL3D.js.map +0 -1
- package/dist/chunk-XCTXS7VY.js +0 -402
- package/dist/chunk-XCTXS7VY.js.map +0 -1
- package/dist/chunk-YLDXWCZP.js.map +0 -1
- /package/dist/{chunk-R7JAM2XF.js.map → chunk-2VXWFYJE.js.map} +0 -0
- /package/dist/{chunk-UXO5IMBK.js.map → chunk-4XDGYCZI.js.map} +0 -0
- /package/dist/{chunk-OTHZWLUD.js.map → chunk-57HVIG5U.js.map} +0 -0
- /package/dist/{chunk-EILZG5VC.js.map → chunk-6TAX66IA.js.map} +0 -0
- /package/dist/{chunk-NKKD4ZAU.js.map → chunk-6VALIZKG.js.map} +0 -0
- /package/dist/{chunk-2E36UXVW.js.map → chunk-7KFIMGMP.js.map} +0 -0
- /package/dist/{chunk-LGO6A7GJ.js.map → chunk-7QOO4LGC.js.map} +0 -0
- /package/dist/{chunk-DZUJ46DO.js.map → chunk-AUO2LJ3K.js.map} +0 -0
- /package/dist/{chunk-ZO6AXLEH.js.map → chunk-AYDDB3XI.js.map} +0 -0
- /package/dist/{chunk-NTWN6HB2.js.map → chunk-AYYGRVRP.js.map} +0 -0
- /package/dist/{chunk-7YQ4IYS2.js.map → chunk-AZAA5DNP.js.map} +0 -0
- /package/dist/{chunk-Z7PBQPJ4.js.map → chunk-BQUEAVNW.js.map} +0 -0
- /package/dist/{chunk-5YQ63T4B.js.map → chunk-D27J626P.js.map} +0 -0
- /package/dist/{chunk-LZH5FR2W.js.map → chunk-DHTQP334.js.map} +0 -0
- /package/dist/{chunk-Y7DK7HHJ.js.map → chunk-E4MVQQVX.js.map} +0 -0
- /package/dist/{chunk-JYYBA7TF.js.map → chunk-EIVIB73I.js.map} +0 -0
- /package/dist/{chunk-S2DPMJXH.js.map → chunk-EV3YFLCB.js.map} +0 -0
- /package/dist/{chunk-3I7ASZN3.js.map → chunk-G57LQRP6.js.map} +0 -0
- /package/dist/{chunk-UIN2BWDD.js.map → chunk-GN55KU2P.js.map} +0 -0
- /package/dist/{chunk-PE255F4T.js.map → chunk-GUXS322H.js.map} +0 -0
- /package/dist/{chunk-YB42WZCY.js.map → chunk-IQSC3V2E.js.map} +0 -0
- /package/dist/{chunk-MN4KB2A4.js.map → chunk-MBDJJTAT.js.map} +0 -0
- /package/dist/{chunk-SQI57UCJ.js.map → chunk-MRTUN665.js.map} +0 -0
- /package/dist/{chunk-SPUJNJJC.js.map → chunk-NZWEEALH.js.map} +0 -0
- /package/dist/{chunk-2XDWWPTN.js.map → chunk-OJD4WS2E.js.map} +0 -0
- /package/dist/{chunk-ZWXJBFZU.js.map → chunk-OLWTCWQ2.js.map} +0 -0
- /package/dist/{chunk-XRYZRW54.js.map → chunk-P4DHENRE.js.map} +0 -0
- /package/dist/{chunk-IID2CMUU.js.map → chunk-PDVQ5JU3.js.map} +0 -0
- /package/dist/{chunk-5NM4OH4P.js.map → chunk-QFMO32TO.js.map} +0 -0
- /package/dist/{chunk-SIHSCCUQ.js.map → chunk-QXIQPCCN.js.map} +0 -0
- /package/dist/{chunk-2YI72KM3.js.map → chunk-R47WINCY.js.map} +0 -0
- /package/dist/{chunk-ZQHI2BZB.js.map → chunk-RK4WXUI2.js.map} +0 -0
- /package/dist/{chunk-QOS5LBZN.js.map → chunk-S7Q5CM7E.js.map} +0 -0
- /package/dist/{chunk-GDFVPUJ5.js.map → chunk-TDKSCV62.js.map} +0 -0
- /package/dist/{chunk-OCZIYAE5.js.map → chunk-TYUS5TLG.js.map} +0 -0
- /package/dist/{chunk-GNCCUR6K.js.map → chunk-URHCUXKI.js.map} +0 -0
- /package/dist/{chunk-CT56C22C.js.map → chunk-Z4RPXHJH.js.map} +0 -0
- /package/dist/{contradiction-review-QKJH5DKD.js.map → contradiction-review-WRVLRWHS.js.map} +0 -0
- /package/dist/{contradiction-scan-VOTQRRSX.js.map → contradiction-scan-AKUWPX5N.js.map} +0 -0
- /package/dist/{resolution-MFY72STR.js.map → resolution-4552BNRV.js.map} +0 -0
|
@@ -11,6 +11,11 @@ import {
|
|
|
11
11
|
import {
|
|
12
12
|
parseLocationConfig
|
|
13
13
|
} from "./chunk-7PHI6GUI.js";
|
|
14
|
+
import {
|
|
15
|
+
PRE_ACTION_GATE_DEFAULT_TIMEOUT_MS,
|
|
16
|
+
normalizeActionIntent,
|
|
17
|
+
sanitizePayloadString
|
|
18
|
+
} from "./chunk-D2YNNDML.js";
|
|
14
19
|
import {
|
|
15
20
|
parseSubjectRuntimeConfig
|
|
16
21
|
} from "./chunk-AAXJNINV.js";
|
|
@@ -167,6 +172,87 @@ function parseProceduralMaintenanceConfig(raw) {
|
|
|
167
172
|
};
|
|
168
173
|
}
|
|
169
174
|
|
|
175
|
+
// src/preferences/drift-config.ts
|
|
176
|
+
var DRIFT_DETECTION_DEFAULTS = {
|
|
177
|
+
enabled: false,
|
|
178
|
+
minAgeDays: 60,
|
|
179
|
+
lookbackDays: 45,
|
|
180
|
+
maxCandidatesPerRun: 25,
|
|
181
|
+
recallDamping: false,
|
|
182
|
+
stalePenalty: 0.8,
|
|
183
|
+
annotateAfterDays: 0
|
|
184
|
+
};
|
|
185
|
+
function parseFlag(src, key, fallback) {
|
|
186
|
+
const value = src[key];
|
|
187
|
+
if (value === void 0 || value === null) return fallback;
|
|
188
|
+
const coerced = coerceBool(value);
|
|
189
|
+
if (coerced === void 0) {
|
|
190
|
+
throw new Error(
|
|
191
|
+
`driftDetection.${key} must be a boolean or one of "true"/"false"/"1"/"0"/"yes"/"no"/"on"/"off" (got ${JSON.stringify(value)}).`
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
return coerced;
|
|
195
|
+
}
|
|
196
|
+
function parseDayCount(src, key, fallback) {
|
|
197
|
+
const value = src[key];
|
|
198
|
+
if (value === void 0 || value === null) return fallback;
|
|
199
|
+
const coerced = coerceNumber(value);
|
|
200
|
+
if (coerced === void 0 || !Number.isFinite(coerced)) {
|
|
201
|
+
throw new Error(`driftDetection.${key} must be a finite number (got ${JSON.stringify(value)}).`);
|
|
202
|
+
}
|
|
203
|
+
if (!Number.isInteger(coerced)) {
|
|
204
|
+
throw new Error(`driftDetection.${key} must be an integer (got ${JSON.stringify(value)}).`);
|
|
205
|
+
}
|
|
206
|
+
if (coerced < 0 || coerced > 36500) {
|
|
207
|
+
throw new Error(`driftDetection.${key} must be between 0 and 36500 (got ${JSON.stringify(value)}).`);
|
|
208
|
+
}
|
|
209
|
+
return coerced;
|
|
210
|
+
}
|
|
211
|
+
function parseDriftDetectionConfig(raw) {
|
|
212
|
+
if (raw === void 0 || raw === null) return { ...DRIFT_DETECTION_DEFAULTS };
|
|
213
|
+
if (typeof raw !== "object" || Array.isArray(raw)) {
|
|
214
|
+
throw new Error(
|
|
215
|
+
`driftDetection must be an object (got ${JSON.stringify(raw)}). Omit the key to keep drift detection disabled (issue #2371).`
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
const src = raw;
|
|
219
|
+
const rawMax = src.maxCandidatesPerRun;
|
|
220
|
+
let maxCandidatesPerRun = DRIFT_DETECTION_DEFAULTS.maxCandidatesPerRun;
|
|
221
|
+
if (rawMax !== void 0 && rawMax !== null) {
|
|
222
|
+
const coerced = coerceNumber(rawMax);
|
|
223
|
+
if (coerced === void 0 || !Number.isInteger(coerced) || coerced < 0) {
|
|
224
|
+
throw new Error(
|
|
225
|
+
`driftDetection.maxCandidatesPerRun must be an integer >= 0 (got ${JSON.stringify(rawMax)}). Use 0 to disable the scan.`
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
maxCandidatesPerRun = coerced;
|
|
229
|
+
}
|
|
230
|
+
const rawPenalty = src.stalePenalty;
|
|
231
|
+
let stalePenalty = DRIFT_DETECTION_DEFAULTS.stalePenalty;
|
|
232
|
+
if (rawPenalty !== void 0 && rawPenalty !== null) {
|
|
233
|
+
const coerced = coerceNumber(rawPenalty);
|
|
234
|
+
if (coerced === void 0 || !Number.isFinite(coerced) || coerced <= 0 || coerced > 1) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
`driftDetection.stalePenalty must be a number in (0, 1] (got ${JSON.stringify(rawPenalty)}). Use 1 to disable damping without changing the flag.`
|
|
237
|
+
);
|
|
238
|
+
}
|
|
239
|
+
stalePenalty = coerced;
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
enabled: parseFlag(src, "enabled", DRIFT_DETECTION_DEFAULTS.enabled),
|
|
243
|
+
minAgeDays: parseDayCount(src, "minAgeDays", DRIFT_DETECTION_DEFAULTS.minAgeDays),
|
|
244
|
+
lookbackDays: parseDayCount(src, "lookbackDays", DRIFT_DETECTION_DEFAULTS.lookbackDays),
|
|
245
|
+
maxCandidatesPerRun,
|
|
246
|
+
recallDamping: parseFlag(src, "recallDamping", DRIFT_DETECTION_DEFAULTS.recallDamping),
|
|
247
|
+
stalePenalty,
|
|
248
|
+
annotateAfterDays: parseDayCount(
|
|
249
|
+
src,
|
|
250
|
+
"annotateAfterDays",
|
|
251
|
+
DRIFT_DETECTION_DEFAULTS.annotateAfterDays
|
|
252
|
+
)
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
|
|
170
256
|
// src/wearables/config.ts
|
|
171
257
|
var KNOWN_WEARABLE_SOURCE_IDS = ["limitless", "bee", "omi"];
|
|
172
258
|
var MEMORY_MODES = ["off", "review", "auto", "smart"];
|
|
@@ -951,6 +1037,341 @@ function parseOkfConfig(raw) {
|
|
|
951
1037
|
};
|
|
952
1038
|
}
|
|
953
1039
|
|
|
1040
|
+
// src/coding/action-gate.ts
|
|
1041
|
+
var ACTION_GATE_DEFAULT_MAX_ADVISORIES_PER_TURN = 3;
|
|
1042
|
+
var MAX_ADVISORY_CHARS = 400;
|
|
1043
|
+
var MAX_ACTION_TERMS = 24;
|
|
1044
|
+
var MIN_TERM_CHARS = 3;
|
|
1045
|
+
var MIN_TERM_OVERLAP_RATIO = 0.6;
|
|
1046
|
+
var MAX_TRACKED_SESSIONS = 200;
|
|
1047
|
+
var MAX_TRACKED_IDS_PER_SESSION = 200;
|
|
1048
|
+
var ACTION_GATE_DEFAULTS = {
|
|
1049
|
+
enabled: false,
|
|
1050
|
+
timeoutMs: PRE_ACTION_GATE_DEFAULT_TIMEOUT_MS,
|
|
1051
|
+
maxAdvisoriesPerTurn: ACTION_GATE_DEFAULT_MAX_ADVISORIES_PER_TURN
|
|
1052
|
+
};
|
|
1053
|
+
function parseActionGateConfig(raw) {
|
|
1054
|
+
if (raw !== void 0 && (raw === null || typeof raw !== "object" || Array.isArray(raw))) {
|
|
1055
|
+
throw new Error(
|
|
1056
|
+
`actionGate must be an object (got ${JSON.stringify(raw)}). Use actionGate: { enabled: true } to opt in.`
|
|
1057
|
+
);
|
|
1058
|
+
}
|
|
1059
|
+
const block = raw ?? {};
|
|
1060
|
+
const rawEnabled = block.enabled;
|
|
1061
|
+
let enabled = ACTION_GATE_DEFAULTS.enabled;
|
|
1062
|
+
if (rawEnabled !== void 0) {
|
|
1063
|
+
const coerced = coerceBool(rawEnabled);
|
|
1064
|
+
if (coerced === void 0) {
|
|
1065
|
+
throw new Error(
|
|
1066
|
+
`actionGate.enabled must be a boolean or one of "true"/"false"/"1"/"0"/"yes"/"no"/"on"/"off" (got ${JSON.stringify(rawEnabled)}).`
|
|
1067
|
+
);
|
|
1068
|
+
}
|
|
1069
|
+
enabled = coerced;
|
|
1070
|
+
}
|
|
1071
|
+
const rawTimeout = coerceNumber(block.timeoutMs);
|
|
1072
|
+
const timeoutMs = rawTimeout !== void 0 && Number.isFinite(rawTimeout) ? Math.min(5e3, Math.max(1, Math.floor(rawTimeout))) : ACTION_GATE_DEFAULTS.timeoutMs;
|
|
1073
|
+
const rawMax = coerceNumber(block.maxAdvisoriesPerTurn);
|
|
1074
|
+
const maxAdvisoriesPerTurn = rawMax !== void 0 && Number.isFinite(rawMax) ? Math.min(20, Math.max(0, Math.floor(rawMax))) : ACTION_GATE_DEFAULTS.maxAdvisoriesPerTurn;
|
|
1075
|
+
return { enabled, timeoutMs, maxAdvisoriesPerTurn };
|
|
1076
|
+
}
|
|
1077
|
+
function actionTermsFor(intent) {
|
|
1078
|
+
const raw = intent.kind === "command" ? [intent.command, ...intent.args ?? []] : [intent.filePath, intent.editKind, intent.symbol ?? "", intent.range ?? ""];
|
|
1079
|
+
const terms = [];
|
|
1080
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1081
|
+
for (const piece of raw) {
|
|
1082
|
+
for (const token of sanitizePayloadString(piece ?? "").toLowerCase().split(/[^a-z0-9._-]+/)) {
|
|
1083
|
+
const term = token.replace(/^[._-]+|[._-]+$/g, "");
|
|
1084
|
+
if (term.length < MIN_TERM_CHARS || seen.has(term)) continue;
|
|
1085
|
+
seen.add(term);
|
|
1086
|
+
terms.push(term);
|
|
1087
|
+
if (terms.length >= MAX_ACTION_TERMS) return terms;
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
return terms;
|
|
1091
|
+
}
|
|
1092
|
+
function isFailureClassMemory(memory) {
|
|
1093
|
+
const fm = memory.frontmatter;
|
|
1094
|
+
if (fm.status !== void 0 && fm.status !== "active") return false;
|
|
1095
|
+
if (fm.category === "correction") return true;
|
|
1096
|
+
if (fm.structuredAttributes?.needsRepair === "true") return true;
|
|
1097
|
+
const failures = typeof fm.mw_fail === "number" ? fm.mw_fail : 0;
|
|
1098
|
+
const successes = typeof fm.mw_success === "number" ? fm.mw_success : 0;
|
|
1099
|
+
return failures > 0 && failures > successes;
|
|
1100
|
+
}
|
|
1101
|
+
function createFailureMemoryCandidateSource(deps) {
|
|
1102
|
+
return {
|
|
1103
|
+
id: "failure-memory",
|
|
1104
|
+
async find(query) {
|
|
1105
|
+
if (query.actionTerms.length === 0) return { ok: true, candidates: [] };
|
|
1106
|
+
let memories;
|
|
1107
|
+
try {
|
|
1108
|
+
memories = await deps.listMemories({
|
|
1109
|
+
namespace: query.namespace,
|
|
1110
|
+
memoryDir: query.memoryDir,
|
|
1111
|
+
signal: query.signal
|
|
1112
|
+
});
|
|
1113
|
+
} catch (error) {
|
|
1114
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
1115
|
+
}
|
|
1116
|
+
const required = Math.max(1, Math.ceil(query.actionTerms.length * MIN_TERM_OVERLAP_RATIO));
|
|
1117
|
+
const candidates = [];
|
|
1118
|
+
for (const memory of memories) {
|
|
1119
|
+
if (!isFailureClassMemory(memory)) continue;
|
|
1120
|
+
const haystack = `${memory.content} ${(memory.frontmatter.tags ?? []).join(" ")}`.toLowerCase();
|
|
1121
|
+
let hits = 0;
|
|
1122
|
+
for (const term of query.actionTerms) if (haystack.includes(term)) hits += 1;
|
|
1123
|
+
if (hits < required) continue;
|
|
1124
|
+
candidates.push({
|
|
1125
|
+
memoryId: memory.frontmatter.id,
|
|
1126
|
+
score: hits,
|
|
1127
|
+
advisoryText: `[ActionGate] A stored failure memory matches this action: "${memory.content}".`
|
|
1128
|
+
});
|
|
1129
|
+
}
|
|
1130
|
+
candidates.sort((left, right) => {
|
|
1131
|
+
const byScore = (right.score ?? 0) - (left.score ?? 0);
|
|
1132
|
+
return byScore !== 0 ? byScore : left.memoryId.localeCompare(right.memoryId);
|
|
1133
|
+
});
|
|
1134
|
+
return { ok: true, candidates };
|
|
1135
|
+
}
|
|
1136
|
+
};
|
|
1137
|
+
}
|
|
1138
|
+
function createTrajectoryCandidateSource(gate) {
|
|
1139
|
+
return {
|
|
1140
|
+
id: "causal-trajectory",
|
|
1141
|
+
async find(query) {
|
|
1142
|
+
const result = await gate.evaluate({
|
|
1143
|
+
sessionKey: query.sessionKey,
|
|
1144
|
+
strategyId: query.strategyId,
|
|
1145
|
+
intent: query.intent,
|
|
1146
|
+
codingContext: query.codingContext,
|
|
1147
|
+
memoryDir: query.memoryDir,
|
|
1148
|
+
causalTrajectoryStoreDir: query.causalTrajectoryStoreDir,
|
|
1149
|
+
signal: query.signal
|
|
1150
|
+
});
|
|
1151
|
+
if (result.status === "ERROR_FAIL_OPEN") {
|
|
1152
|
+
return { ok: false, reason: result.reason ?? "pre-action gate failed open" };
|
|
1153
|
+
}
|
|
1154
|
+
if (result.status !== "MATCH_WARN" || !result.matchedTrajectoryId || !result.advisoryText) {
|
|
1155
|
+
return { ok: true, candidates: [] };
|
|
1156
|
+
}
|
|
1157
|
+
return {
|
|
1158
|
+
ok: true,
|
|
1159
|
+
candidates: [
|
|
1160
|
+
{
|
|
1161
|
+
memoryId: result.matchedTrajectoryId,
|
|
1162
|
+
// Trajectory matches are exact fingerprint hits: rank above lexical ones.
|
|
1163
|
+
score: Number.MAX_SAFE_INTEGER,
|
|
1164
|
+
advisoryText: result.advisoryText
|
|
1165
|
+
}
|
|
1166
|
+
]
|
|
1167
|
+
};
|
|
1168
|
+
}
|
|
1169
|
+
};
|
|
1170
|
+
}
|
|
1171
|
+
var ActionGateService = class {
|
|
1172
|
+
config;
|
|
1173
|
+
sources;
|
|
1174
|
+
audit;
|
|
1175
|
+
clock;
|
|
1176
|
+
now;
|
|
1177
|
+
sessions = /* @__PURE__ */ new Map();
|
|
1178
|
+
constructor(config, deps = {}) {
|
|
1179
|
+
this.config = config;
|
|
1180
|
+
this.sources = deps.sources ?? [];
|
|
1181
|
+
this.audit = deps.audit;
|
|
1182
|
+
this.clock = deps.clock ?? Date.now;
|
|
1183
|
+
this.now = deps.now ?? (() => /* @__PURE__ */ new Date());
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1186
|
+
* Memory ids the gate already delivered in this session. Turn-start recall
|
|
1187
|
+
* filters these out before its own cap, honouring the filter-then-cap order.
|
|
1188
|
+
*/
|
|
1189
|
+
suppressedForTurnStart(sessionKey) {
|
|
1190
|
+
if (!this.config.enabled) return [];
|
|
1191
|
+
return [...this.sessions.get(sessionKey)?.deliveredByGate ?? []];
|
|
1192
|
+
}
|
|
1193
|
+
/** Record ids turn-start recall injected, so the gate will not repeat them. */
|
|
1194
|
+
noteTurnStartDelivery(sessionKey, memoryIds) {
|
|
1195
|
+
if (!this.config.enabled || memoryIds.length === 0) return;
|
|
1196
|
+
const state = this.sessionState(sessionKey, void 0);
|
|
1197
|
+
for (const id of memoryIds) this.addTracked(state.deliveredByTurnStart, id);
|
|
1198
|
+
}
|
|
1199
|
+
resetSession(sessionKey) {
|
|
1200
|
+
this.sessions.delete(sessionKey);
|
|
1201
|
+
}
|
|
1202
|
+
async evaluate(request) {
|
|
1203
|
+
const startedAt = this.clock();
|
|
1204
|
+
if (!this.config.enabled) {
|
|
1205
|
+
return {
|
|
1206
|
+
status: "DISABLED",
|
|
1207
|
+
advisories: [],
|
|
1208
|
+
suppressedIds: [],
|
|
1209
|
+
degradations: [],
|
|
1210
|
+
reason: "actionGate.enabled is false",
|
|
1211
|
+
latencyMs: 0
|
|
1212
|
+
};
|
|
1213
|
+
}
|
|
1214
|
+
if (this.config.maxAdvisoriesPerTurn === 0) {
|
|
1215
|
+
return this.finish(request, startedAt, {
|
|
1216
|
+
status: "DISABLED",
|
|
1217
|
+
advisories: [],
|
|
1218
|
+
suppressedIds: [],
|
|
1219
|
+
degradations: [],
|
|
1220
|
+
reason: "actionGate.maxAdvisoriesPerTurn is 0"
|
|
1221
|
+
});
|
|
1222
|
+
}
|
|
1223
|
+
let fingerprint;
|
|
1224
|
+
try {
|
|
1225
|
+
fingerprint = normalizeActionIntent(request.intent, request.strategyId, request.codingContext).fingerprint;
|
|
1226
|
+
} catch (error) {
|
|
1227
|
+
return this.finish(request, startedAt, {
|
|
1228
|
+
status: "ERROR_FAIL_OPEN",
|
|
1229
|
+
advisories: [],
|
|
1230
|
+
suppressedIds: [],
|
|
1231
|
+
degradations: [],
|
|
1232
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
1233
|
+
});
|
|
1234
|
+
}
|
|
1235
|
+
const deadline = startedAt + this.config.timeoutMs;
|
|
1236
|
+
const collected = await this.collect(request, fingerprint, deadline);
|
|
1237
|
+
const state = this.sessionState(request.sessionKey, request.turnId);
|
|
1238
|
+
const advisories = [];
|
|
1239
|
+
const suppressedIds = [];
|
|
1240
|
+
for (const { sourceId, candidate } of collected.candidates) {
|
|
1241
|
+
if (state.deliveredThisTurn.has(candidate.memoryId) || state.deliveredByTurnStart.has(candidate.memoryId)) {
|
|
1242
|
+
suppressedIds.push(candidate.memoryId);
|
|
1243
|
+
continue;
|
|
1244
|
+
}
|
|
1245
|
+
if (advisories.length >= this.config.maxAdvisoriesPerTurn) {
|
|
1246
|
+
suppressedIds.push(candidate.memoryId);
|
|
1247
|
+
continue;
|
|
1248
|
+
}
|
|
1249
|
+
advisories.push({
|
|
1250
|
+
memoryId: candidate.memoryId,
|
|
1251
|
+
sourceId,
|
|
1252
|
+
text: sanitizePayloadString(candidate.advisoryText).replace(/\s+/g, " ").slice(0, MAX_ADVISORY_CHARS)
|
|
1253
|
+
});
|
|
1254
|
+
this.addTracked(state.deliveredThisTurn, candidate.memoryId);
|
|
1255
|
+
this.addTracked(state.deliveredByGate, candidate.memoryId);
|
|
1256
|
+
}
|
|
1257
|
+
const status = advisories.length > 0 ? "MATCH_WARN" : collected.degradations.length > 0 ? "ERROR_FAIL_OPEN" : "NO_MATCH";
|
|
1258
|
+
return this.finish(request, startedAt, {
|
|
1259
|
+
status,
|
|
1260
|
+
advisories,
|
|
1261
|
+
suppressedIds,
|
|
1262
|
+
degradations: collected.degradations,
|
|
1263
|
+
fingerprint,
|
|
1264
|
+
reason: status === "ERROR_FAIL_OPEN" ? collected.degradations[0] : void 0
|
|
1265
|
+
});
|
|
1266
|
+
}
|
|
1267
|
+
async collect(request, fingerprint, deadline) {
|
|
1268
|
+
if (this.sources.length === 0) return { candidates: [], degradations: [] };
|
|
1269
|
+
const timeoutAbort = new AbortController();
|
|
1270
|
+
const signal = request.signal ? AbortSignal.any([request.signal, timeoutAbort.signal]) : timeoutAbort.signal;
|
|
1271
|
+
const query = {
|
|
1272
|
+
sessionKey: request.sessionKey,
|
|
1273
|
+
fingerprint,
|
|
1274
|
+
actionTerms: actionTermsFor(request.intent),
|
|
1275
|
+
strategyId: request.strategyId,
|
|
1276
|
+
intent: request.intent,
|
|
1277
|
+
codingContext: request.codingContext,
|
|
1278
|
+
memoryDir: request.memoryDir,
|
|
1279
|
+
namespace: request.namespace,
|
|
1280
|
+
causalTrajectoryStoreDir: request.causalTrajectoryStoreDir,
|
|
1281
|
+
signal
|
|
1282
|
+
};
|
|
1283
|
+
const remaining = Math.max(1, deadline - this.clock());
|
|
1284
|
+
let onTimeout;
|
|
1285
|
+
const timeoutResult = new Promise((resolve) => {
|
|
1286
|
+
onTimeout = resolve;
|
|
1287
|
+
});
|
|
1288
|
+
const timer = setTimeout(() => {
|
|
1289
|
+
timeoutAbort.abort();
|
|
1290
|
+
onTimeout({ ok: false, reason: `action gate timed out after ${this.config.timeoutMs}ms` });
|
|
1291
|
+
}, remaining);
|
|
1292
|
+
try {
|
|
1293
|
+
const settled = await Promise.all(
|
|
1294
|
+
this.sources.map(async (source) => {
|
|
1295
|
+
let result;
|
|
1296
|
+
try {
|
|
1297
|
+
result = await Promise.race([source.find(query), timeoutResult]);
|
|
1298
|
+
} catch (error) {
|
|
1299
|
+
result = { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
1300
|
+
}
|
|
1301
|
+
return { source, result };
|
|
1302
|
+
})
|
|
1303
|
+
);
|
|
1304
|
+
const candidates = [];
|
|
1305
|
+
const degradations = [];
|
|
1306
|
+
for (const { source, result } of settled) {
|
|
1307
|
+
if (!result.ok) {
|
|
1308
|
+
degradations.push(`${source.id}: ${result.reason}`);
|
|
1309
|
+
continue;
|
|
1310
|
+
}
|
|
1311
|
+
for (const candidate of result.candidates) candidates.push({ sourceId: source.id, candidate });
|
|
1312
|
+
}
|
|
1313
|
+
candidates.sort((left, right) => {
|
|
1314
|
+
const byScore = (right.candidate.score ?? 0) - (left.candidate.score ?? 0);
|
|
1315
|
+
if (byScore !== 0) return byScore;
|
|
1316
|
+
const bySource = left.sourceId.localeCompare(right.sourceId);
|
|
1317
|
+
return bySource !== 0 ? bySource : left.candidate.memoryId.localeCompare(right.candidate.memoryId);
|
|
1318
|
+
});
|
|
1319
|
+
return { candidates, degradations };
|
|
1320
|
+
} finally {
|
|
1321
|
+
clearTimeout(timer);
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
finish(request, startedAt, decision) {
|
|
1325
|
+
const latencyMs = Math.max(0, this.clock() - startedAt);
|
|
1326
|
+
const result = { ...decision, latencyMs };
|
|
1327
|
+
if (this.audit) {
|
|
1328
|
+
const record = {
|
|
1329
|
+
ts: this.now().toISOString(),
|
|
1330
|
+
sessionKey: request.sessionKey,
|
|
1331
|
+
turnId: request.turnId,
|
|
1332
|
+
status: result.status,
|
|
1333
|
+
latencyMs,
|
|
1334
|
+
fingerprint: result.fingerprint,
|
|
1335
|
+
deliveredIds: result.advisories.map((advisory) => advisory.memoryId),
|
|
1336
|
+
suppressedIds: result.suppressedIds,
|
|
1337
|
+
degradations: result.degradations,
|
|
1338
|
+
reason: result.reason
|
|
1339
|
+
};
|
|
1340
|
+
void Promise.resolve().then(() => this.audit?.(record)).catch(() => void 0);
|
|
1341
|
+
}
|
|
1342
|
+
return result;
|
|
1343
|
+
}
|
|
1344
|
+
sessionState(sessionKey, turnId) {
|
|
1345
|
+
let state = this.sessions.get(sessionKey);
|
|
1346
|
+
if (!state) {
|
|
1347
|
+
if (this.sessions.size >= MAX_TRACKED_SESSIONS) {
|
|
1348
|
+
const oldest = this.sessions.keys().next().value;
|
|
1349
|
+
if (oldest !== void 0) this.sessions.delete(oldest);
|
|
1350
|
+
}
|
|
1351
|
+
state = {
|
|
1352
|
+
turnId: turnId ?? "",
|
|
1353
|
+
deliveredThisTurn: /* @__PURE__ */ new Set(),
|
|
1354
|
+
deliveredByGate: /* @__PURE__ */ new Set(),
|
|
1355
|
+
deliveredByTurnStart: /* @__PURE__ */ new Set()
|
|
1356
|
+
};
|
|
1357
|
+
this.sessions.set(sessionKey, state);
|
|
1358
|
+
}
|
|
1359
|
+
if (turnId !== void 0 && state.turnId !== turnId) {
|
|
1360
|
+
state.turnId = turnId;
|
|
1361
|
+
state.deliveredThisTurn.clear();
|
|
1362
|
+
}
|
|
1363
|
+
return state;
|
|
1364
|
+
}
|
|
1365
|
+
addTracked(set, value) {
|
|
1366
|
+
if (set.has(value)) return;
|
|
1367
|
+
if (set.size >= MAX_TRACKED_IDS_PER_SESSION) {
|
|
1368
|
+
const oldest = set.values().next().value;
|
|
1369
|
+
if (oldest !== void 0) set.delete(oldest);
|
|
1370
|
+
}
|
|
1371
|
+
set.add(value);
|
|
1372
|
+
}
|
|
1373
|
+
};
|
|
1374
|
+
|
|
954
1375
|
// src/chat/chat-config.ts
|
|
955
1376
|
var DEFAULT_CHAT_CONFIG = {
|
|
956
1377
|
enabled: false,
|
|
@@ -2160,6 +2581,8 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
|
|
|
2160
2581
|
contradictionAutoResolve: cfg.contradictionAutoResolve !== false,
|
|
2161
2582
|
// Contradiction Scan cron (issue #520)
|
|
2162
2583
|
contradictionScan: parseContradictionScanConfig(cfg.contradictionScan),
|
|
2584
|
+
// Preference drift detection (issue #2371)
|
|
2585
|
+
driftDetection: parseDriftDetectionConfig(cfg.driftDetection),
|
|
2163
2586
|
dependencyPropagation: parseDependencyPropagationConfig(cfg),
|
|
2164
2587
|
// Temporal Supersession (issue #375)
|
|
2165
2588
|
temporalSupersessionEnabled: cfg.temporalSupersessionEnabled !== false,
|
|
@@ -2594,6 +3017,7 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
|
|
|
2594
3017
|
bridgeMode: cfg.bridgeMode === void 0 ? "embedded" : String(cfg.bridgeMode),
|
|
2595
3018
|
codexCompat,
|
|
2596
3019
|
codingKnowledge: parseCodingKnowledgeConfig(cfg.codingKnowledge),
|
|
3020
|
+
actionGate: parseActionGateConfig(cfg.actionGate),
|
|
2597
3021
|
chat: parseChatConfig(cfg.chat),
|
|
2598
3022
|
supportPassport: parseSupportPassportConfig(cfg.supportPassport),
|
|
2599
3023
|
hourlySummariesEnabled: cfg.hourlySummariesEnabled !== false,
|
|
@@ -3988,6 +4412,8 @@ function parseTrustScoreWeights(value) {
|
|
|
3988
4412
|
}
|
|
3989
4413
|
|
|
3990
4414
|
export {
|
|
4415
|
+
DRIFT_DETECTION_DEFAULTS,
|
|
4416
|
+
parseDriftDetectionConfig,
|
|
3991
4417
|
KNOWN_WEARABLE_SOURCE_IDS,
|
|
3992
4418
|
defaultWearableCleanupSettings,
|
|
3993
4419
|
defaultWearableSourceSettings,
|
|
@@ -4000,10 +4426,18 @@ export {
|
|
|
4000
4426
|
detectMeetings,
|
|
4001
4427
|
DEFAULT_MEETINGS_CONFIG,
|
|
4002
4428
|
parseMeetingsConfig,
|
|
4429
|
+
ACTION_GATE_DEFAULT_MAX_ADVISORIES_PER_TURN,
|
|
4430
|
+
ACTION_GATE_DEFAULTS,
|
|
4431
|
+
parseActionGateConfig,
|
|
4432
|
+
actionTermsFor,
|
|
4433
|
+
isFailureClassMemory,
|
|
4434
|
+
createFailureMemoryCandidateSource,
|
|
4435
|
+
createTrajectoryCandidateSource,
|
|
4436
|
+
ActionGateService,
|
|
4003
4437
|
isOpenaiApiKeyDisabled,
|
|
4004
4438
|
resolveEnvVars,
|
|
4005
4439
|
DEFAULT_REASONING_MODEL,
|
|
4006
4440
|
VALID_MEMORY_CATEGORIES,
|
|
4007
4441
|
parseConfig
|
|
4008
4442
|
};
|
|
4009
|
-
//# sourceMappingURL=chunk-
|
|
4443
|
+
//# sourceMappingURL=chunk-76PL4XLG.js.map
|