@remnic/core 9.65.1 → 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 +36 -35
- package/dist/access-authorization-probe.d.ts +39 -40
- package/dist/access-authorization-probe.js +37 -36
- package/dist/access-boundary.d.ts +41 -185
- package/dist/access-boundary.js +36 -35
- package/dist/access-cli.js +110 -107
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +3 -1
- package/dist/access-extraction-force-flush.d.ts +25 -25
- package/dist/access-extraction-force-flush.js +36 -35
- 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 +40 -41
- 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 +38 -37
- package/dist/access-http.d.ts +51 -44
- package/dist/access-http.js +57 -56
- package/dist/access-identity-continuity-surface.d.ts +12 -12
- package/dist/access-identity-continuity-surface.js +36 -35
- package/dist/access-lcm-surface.d.ts +27 -27
- package/dist/access-lcm-surface.js +36 -35
- 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 +50 -47
- package/dist/access-memory-search-fanout.d.ts +4 -2
- package/dist/{access-namespace-preflight-BKUnKsBv.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 +36 -35
- package/dist/access-observe-write-surface.d.ts +39 -39
- package/dist/access-observe-write-surface.js +36 -35
- package/dist/access-offline-manifest.d.ts +12 -12
- package/dist/access-offline-manifest.js +5 -5
- package/dist/access-operations-batch.js +41 -40
- package/dist/access-operations.d.ts +46 -47
- package/dist/access-operations.js +44 -43
- package/dist/access-recall-concurrency.d.ts +40 -40
- package/dist/access-recall-concurrency.js +36 -35
- package/dist/access-recall-response.d.ts +24 -24
- package/dist/access-recall-response.js +36 -35
- package/dist/access-recall-surface.d.ts +24 -24
- package/dist/access-recall-surface.js +36 -35
- package/dist/access-schema.d.ts +139 -139
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-B1Lbb-nQ.d.ts → access-service-DkaIG3n8.d.ts} +688 -140
- package/dist/access-service-helpers.d.ts +40 -40
- package/dist/access-service.d.ts +47 -47
- package/dist/access-service.js +36 -35
- package/dist/access-surface-catalog.d.ts +41 -42
- package/dist/access-surface-catalog.js +44 -37
- 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 +11 -1
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +3 -1
- package/dist/artifact-search.d.ts +3 -1
- package/dist/{auto-sync-5L7EUZ27.js → auto-sync-H64ZCNIR.js} +13 -5
- package/dist/{auto-sync-5L7EUZ27.js.map → auto-sync-H64ZCNIR.js.map} +1 -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 +16 -15
- package/dist/buffer-surprise-report.d.ts +3 -1
- package/dist/buffer-turn-helpers.d.ts +3 -1
- package/dist/buffer.d.ts +4 -2
- package/dist/buffer.js +4 -4
- package/dist/bulk-import/index.d.ts +5 -3
- package/dist/calibration.d.ts +3 -1
- package/dist/calibration.js +1 -1
- package/dist/capabilities.d.ts +3 -1
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-YO5QJ6L3.js} +2 -2
- package/dist/{catalog-DjVhJoRM.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 +20 -19
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-MIBKEW7A.js → chunk-2VXWFYJE.js} +3 -3
- package/dist/{chunk-3YTTAGPB.js → chunk-3DVBKTSO.js} +2 -2
- package/dist/{chunk-EIR5VLIH.js → chunk-4K7IW3F7.js} +2 -2
- package/dist/chunk-4K7IW3F7.js.map +1 -0
- package/dist/{chunk-JTSVMJHV.js → chunk-4XDGYCZI.js} +3 -3
- package/dist/chunk-573TEZCD.js +88 -0
- package/dist/chunk-573TEZCD.js.map +1 -0
- package/dist/{chunk-HQSBYI5X.js → chunk-57HVIG5U.js} +2 -2
- package/dist/{chunk-PMVPCZJZ.js → chunk-6433HV72.js} +2 -2
- package/dist/{chunk-N6TRHP72.js → chunk-6TAX66IA.js} +2 -2
- package/dist/{chunk-AGKIG3YA.js → chunk-6VALIZKG.js} +2 -2
- package/dist/{chunk-YQ3CBLL4.js → chunk-76PL4XLG.js} +512 -8
- package/dist/chunk-76PL4XLG.js.map +1 -0
- package/dist/{chunk-4NZHHGVL.js → chunk-7BDZTALN.js} +4 -1
- package/dist/chunk-7BDZTALN.js.map +1 -0
- package/dist/{chunk-NS5ETDYD.js → chunk-7BEPVIH3.js} +3 -3
- package/dist/{chunk-JG22O53B.js → chunk-7CBKAQIG.js} +2 -1
- package/dist/chunk-7CBKAQIG.js.map +1 -0
- package/dist/{chunk-LYIZXQYY.js → chunk-7KFIMGMP.js} +2 -2
- package/dist/{chunk-LWVO2QZV.js → chunk-7QOO4LGC.js} +56 -56
- package/dist/chunk-AAXJNINV.js +55 -0
- package/dist/chunk-AAXJNINV.js.map +1 -0
- package/dist/{chunk-56BSXSHC.js → chunk-AB3A7EFH.js} +31 -2
- package/dist/{chunk-56BSXSHC.js.map → chunk-AB3A7EFH.js.map} +1 -1
- package/dist/{chunk-CCTVAVTT.js → chunk-AUO2LJ3K.js} +2 -2
- package/dist/{chunk-ALCJRQ72.js → chunk-AYDDB3XI.js} +2 -2
- package/dist/{chunk-3TMYV3LP.js → chunk-AYYGRVRP.js} +5 -5
- package/dist/{chunk-W6TSGWYS.js → chunk-AZAA5DNP.js} +2 -2
- package/dist/{chunk-WTOE7CW4.js → chunk-BKYPJUQL.js} +122 -16
- package/dist/chunk-BKYPJUQL.js.map +1 -0
- package/dist/{chunk-6JJT5AKI.js → chunk-BQUEAVNW.js} +2 -2
- package/dist/{chunk-2NLLXCJG.js → chunk-BXLOS5AJ.js} +2 -2
- package/dist/{chunk-CEH2AFXG.js → chunk-C24UZSFW.js} +6 -6
- package/dist/{chunk-ZPN7W3OP.js → chunk-CDUUDBWJ.js} +3 -3
- package/dist/{chunk-35NN3ZFA.js → chunk-CTVWELNK.js} +21 -3
- package/dist/chunk-CTVWELNK.js.map +1 -0
- package/dist/{chunk-Y23B2QXP.js → chunk-D27J626P.js} +2 -2
- package/dist/{chunk-2572MRP2.js → chunk-DHTQP334.js} +2 -2
- package/dist/{chunk-HJQZQUPC.js → chunk-DJZWNKFO.js} +5 -5
- package/dist/{chunk-X7Y7WX73.js → chunk-DQEMWVMT.js} +1 -1
- package/dist/{chunk-VJ6ECBIP.js → chunk-E4MVQQVX.js} +2 -2
- package/dist/{chunk-SYJ6EKKE.js → chunk-EIVIB73I.js} +2 -2
- package/dist/{chunk-HUNSEO5U.js → chunk-EV3YFLCB.js} +2 -2
- package/dist/{chunk-GEULB2VI.js → chunk-FC7TIRFS.js} +21 -1
- package/dist/chunk-FC7TIRFS.js.map +1 -0
- package/dist/{chunk-VPGRXEAB.js → chunk-G57LQRP6.js} +2 -2
- package/dist/{chunk-BC4QD3FM.js → chunk-GN55KU2P.js} +2 -2
- package/dist/{chunk-4W6INNXO.js → chunk-GUXS322H.js} +2 -2
- package/dist/{chunk-DBXZZIDU.js → chunk-H5FW4S5Q.js} +434 -693
- 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-3MADV4YC.js → chunk-IQSC3V2E.js} +2 -2
- package/dist/{chunk-UYCIS6V5.js → chunk-JCWY73FK.js} +2 -2
- package/dist/{chunk-T42L3S6A.js → chunk-LBWQ65SX.js} +4 -4
- package/dist/{chunk-MSTNSVXI.js → chunk-LDBFXD4F.js} +2 -1
- package/dist/chunk-LDBFXD4F.js.map +1 -0
- package/dist/{chunk-CEQF6L5K.js → chunk-LUNJ3WFO.js} +9 -7
- package/dist/chunk-LUNJ3WFO.js.map +1 -0
- package/dist/{chunk-256FBCVX.js → chunk-M4AHBM72.js} +7 -7
- package/dist/{chunk-YEQEGSJA.js → chunk-MBDJJTAT.js} +3 -3
- package/dist/{chunk-IAY7YBXS.js → chunk-MRTUN665.js} +2 -2
- package/dist/{chunk-JFJ3MHGV.js → chunk-NXKJHSDN.js} +1 -1
- package/dist/chunk-NXKJHSDN.js.map +1 -0
- package/dist/{chunk-R3AAOKR2.js → chunk-NZWEEALH.js} +2 -2
- package/dist/{chunk-I2HTKOOP.js → chunk-ODZG724P.js} +2 -2
- package/dist/{chunk-7QFBLYFP.js → chunk-OJD4WS2E.js} +3 -3
- package/dist/{chunk-CUS6S7PN.js → chunk-OLWTCWQ2.js} +9 -9
- package/dist/chunk-OLWTCWQ2.js.map +1 -0
- package/dist/{chunk-53ENM6F6.js → chunk-P4DHENRE.js} +2 -2
- package/dist/{chunk-DEFI2QBT.js → chunk-PAYGC3BD.js} +52 -22
- package/dist/chunk-PAYGC3BD.js.map +1 -0
- package/dist/{chunk-KPBLJCCV.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-ESCQ6LY7.js → chunk-QFMO32TO.js} +3 -3
- package/dist/{chunk-HQSPXTQO.js → chunk-QXIQPCCN.js} +1 -1
- package/dist/{chunk-CFRBTATE.js → chunk-R47WINCY.js} +3 -3
- package/dist/{chunk-G72IPMR7.js → chunk-R4OCGPSH.js} +2 -2
- package/dist/{chunk-LCU5R6TQ.js → chunk-RAIUTAZZ.js} +22 -3
- package/dist/chunk-RAIUTAZZ.js.map +1 -0
- package/dist/chunk-RIAM7DND.js +167 -0
- package/dist/chunk-RIAM7DND.js.map +1 -0
- package/dist/{chunk-VZVP2W4O.js → chunk-RK4WXUI2.js} +2 -2
- package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
- package/dist/{chunk-6L27N6YI.js → chunk-S7Q5CM7E.js} +2 -2
- package/dist/{chunk-CTQRPANJ.js → chunk-SVSRPG6M.js} +2 -2
- package/dist/{chunk-GXWDWOWP.js → chunk-TDKSCV62.js} +2 -2
- package/dist/{chunk-S2VBSTTA.js → chunk-THG4GYIE.js} +2 -2
- package/dist/{chunk-IXRC7EQG.js → chunk-TR7DGXGI.js} +2 -2
- package/dist/{chunk-63FHSH7E.js → chunk-TYUS5TLG.js} +4 -4
- package/dist/{chunk-7PWWGYGO.js → chunk-URHCUXKI.js} +2 -2
- package/dist/{chunk-Z54TXZ2F.js → chunk-VA5KMSAE.js} +16 -7
- package/dist/chunk-VA5KMSAE.js.map +1 -0
- package/dist/{chunk-KQAFEZQX.js → chunk-VDX2J7OX.js} +2 -2
- package/dist/{chunk-MUJ4QFUQ.js → chunk-W4BMEGQA.js} +4 -4
- package/dist/{chunk-5HK3CJAR.js → chunk-W675UJCZ.js} +2 -2
- package/dist/{chunk-3PXVYJMC.js → chunk-WN5FSGLE.js} +2077 -215
- package/dist/chunk-WN5FSGLE.js.map +1 -0
- package/dist/{chunk-3RHFGGI5.js → chunk-YF6UHWOV.js} +30 -10
- package/dist/chunk-YF6UHWOV.js.map +1 -0
- package/dist/{chunk-X5SDZMO7.js → chunk-YHCBJULX.js} +2 -2
- package/dist/{chunk-5UYSCYR7.js → chunk-Z4RPXHJH.js} +4 -4
- package/dist/{cli-Pulnz-qm.d.ts → cli-ChKeYMZv.d.ts} +5 -5
- package/dist/cli.d.ts +25 -25
- package/dist/cli.js +81 -78
- package/dist/coding/pre-action-gate.d.ts +2 -60
- package/dist/compounding/engine.d.ts +4 -2
- package/dist/compounding/engine.js +17 -16
- 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 +11 -1
- package/dist/connectors/codex-materialize-runner.d.ts +3 -1
- package/dist/connectors/codex-materialize-runner.js +16 -15
- package/dist/connectors/codex-materialize.d.ts +3 -1
- package/dist/connectors/index.d.ts +3 -1
- package/dist/connectors/index.js +16 -15
- 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 +20 -7
- 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 +18 -17
- 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 +18 -17
- 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-Co17gxYb.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 +16 -15
- 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/explicit-capture.js +7 -6
- package/dist/external-wiki-access.d.ts +41 -42
- package/dist/external-wiki-access.js +37 -36
- 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-judge.js +2 -2
- package/dist/extraction-liveness.d.ts +3 -1
- package/dist/extraction-normalization.d.ts +3 -1
- package/dist/extraction-normalization.js +2 -2
- package/dist/extraction-prompt.d.ts +4 -2
- package/dist/extraction-prompt.js +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +3 -1
- package/dist/extraction-source-grounding.d.ts +3 -1
- package/dist/extraction.d.ts +3 -1
- package/dist/extraction.js +22 -21
- package/dist/fallback-llm.d.ts +3 -1
- package/dist/graph-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 +946 -707
- package/dist/index.js +253 -151
- package/dist/intent.d.ts +3 -1
- package/dist/lcm/engine.d.ts +3 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +3 -1
- package/dist/lcm/index.js +6 -6
- package/dist/lcm/tools.d.ts +3 -1
- package/dist/lifecycle.d.ts +3 -1
- package/dist/live-connectors-runner.d.ts +3 -1
- package/dist/local-llm.d.ts +3 -1
- package/dist/local-model-endpoint.d.ts +3 -1
- package/dist/maintenance/memory-governance.d.ts +3 -1
- package/dist/maintenance/memory-governance.js +16 -15
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +16 -15
- package/dist/maintenance/rebuild-memory-projection.d.ts +4 -2
- package/dist/maintenance/rebuild-memory-projection.js +17 -16
- package/dist/{maintenance-DiSLtVN7.d.ts → maintenance-nkdtSrVr.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +37 -37
- package/dist/mcp-read-only-tools.js +1 -1
- 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 +177 -0
- package/dist/memory-subject-cli.js +16 -0
- package/dist/memory-subject.d.ts +128 -0
- package/dist/memory-subject.js +44 -0
- package/dist/memory-subject.js.map +1 -0
- package/dist/memory-worth-outcomes.d.ts +7 -4
- package/dist/memory-worth-outcomes.js +1 -1
- package/dist/models-json.d.ts +3 -1
- package/dist/namespaces/migrate.d.ts +5 -3
- package/dist/namespaces/migrate.js +17 -16
- package/dist/namespaces/principal.d.ts +3 -1
- package/dist/namespaces/search.d.ts +3 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +5 -3
- package/dist/namespaces/storage.js +16 -15
- 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 +19 -18
- package/dist/operator-doctor-replica.d.ts +3 -1
- package/dist/operator-toolkit.d.ts +5 -3
- package/dist/operator-toolkit.js +29 -24
- package/dist/orchestration/compression-guideline-coordinator.d.ts +4 -2
- package/dist/orchestration/maintenance.d.ts +6 -4
- package/dist/orchestration/maintenance.js +22 -21
- package/dist/{orchestrator-DzCaxNS4.d.ts → orchestrator-Bvq1-RQs.d.ts} +23 -9
- package/dist/orchestrator.d.ts +12 -12
- package/dist/orchestrator.js +111 -108
- package/dist/patterns-cli.d.ts +3 -1
- package/dist/{pipeline-HJ8DKbFl.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-DwXauTX3.d.ts → public-http-Cy0aYbys.d.ts} +1 -1
- package/dist/{qmd-BzxluoLt.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/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +3 -1
- package/dist/recall-disclosure-escalation.d.ts +3 -1
- package/dist/recall-explain-renderer.d.ts +3 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +3 -1
- package/dist/recall-planner-llm.d.ts +3 -1
- package/dist/recall-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/manifest.js +3 -3
- 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-4552BNRV.js +36 -0
- package/dist/resolution-4552BNRV.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +3 -1
- package/dist/resume-bundles.js +9 -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/salvage-envelope.js +10 -2
- package/dist/schemas.d.ts +130 -116
- package/dist/schemas.js +1 -1
- package/dist/{scope-profiles-CEMZz0t5.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/factory.js +5 -5
- package/dist/search/index.d.ts +3 -1
- package/dist/search/index.js +9 -9
- 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-D9dYj6vu.d.ts → semantic-consolidation-DlN6xe20.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +4 -2
- package/dist/semantic-consolidation.js +17 -16
- package/dist/semantic-rule-promotion.js +16 -15
- package/dist/semantic-rule-verifier.d.ts +3 -1
- package/dist/semantic-rule-verifier.js +16 -15
- package/dist/{service-_qgST_0y.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 +13 -11
- package/dist/signal.d.ts +3 -1
- package/dist/source-agent-qualifier.d.ts +3 -1
- package/dist/source-agent-qualifier.js +18 -17
- package/dist/{storage-B9lbNTYE.d.ts → storage-BIDzuKIn.d.ts} +3 -2
- package/dist/storage.d.ts +4 -2
- package/dist/storage.js +18 -17
- package/dist/subject-config.d.ts +40 -0
- package/dist/subject-config.js +20 -0
- package/dist/subject-config.js.map +1 -0
- 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 +39 -38
- 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/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 +86 -86
- package/dist/trust-score-stage.d.ts +3 -1
- package/dist/trust-score.d.ts +3 -1
- package/dist/{types-BrEzuxPA.d.ts → types-BxAcOl5Q.d.ts} +360 -32
- 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 +16 -15
- package/dist/who-knows-cli.d.ts +40 -40
- package/dist/who-knows-cli.js +17 -16
- package/dist/who-knows.d.ts +42 -42
- package/dist/who-knows.js +16 -15
- package/dist/write-envelope.d.ts +7 -2
- package/dist/write-envelope.js +10 -1
- package/package.json +2 -2
- package/scripts/build-with-heap.mjs +1 -1
- package/src/access-boundary.ts +6 -0
- package/src/access-http.ts +6 -5
- package/src/access-mcp-admin-tools.ts +38 -0
- package/src/access-mcp-output-schemas.ts +20 -0
- package/src/access-mcp.ts +8 -8
- package/src/access-operations-batch.ts +13 -0
- package/src/access-service.ts +112 -0
- package/src/access-surface-catalog.test.ts +24 -0
- package/src/access-surface-catalog.ts +6 -0
- package/src/coding/action-gate.test.ts +341 -0
- package/src/coding/action-gate.ts +556 -0
- package/src/config.ts +15 -17
- 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/extraction-prompt.ts +1 -0
- package/src/extraction.ts +4 -1
- package/src/index.ts +9 -9
- package/src/mcp-read-only-tools.ts +1 -0
- package/src/memory-subject-cli.ts +135 -0
- package/src/memory-subject.test.ts +48 -0
- package/src/memory-subject.ts +314 -0
- package/src/memory-worth-outcomes.test.ts +6 -2
- package/src/memory-worth-outcomes.ts +11 -7
- package/src/operator-toolkit.ts +1 -1
- package/src/orchestration/extraction-persist.ts +48 -48
- package/src/orchestration/recall-internal.ts +6 -5
- 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/procedural/library-maintenance.test.ts +582 -0
- package/src/procedural/library-maintenance.ts +546 -0
- package/src/procedural/maintenance-config.ts +78 -0
- package/src/procedural/procedure-recall.ts +29 -1
- package/src/procedural/procedure-stats.ts +20 -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/schemas.ts +7 -0
- package/src/spaces/index.ts +38 -2
- package/src/storage.ts +10 -8
- package/src/subject-config.ts +80 -0
- package/src/types.ts +33 -32
- package/src/write-envelope.test.ts +14 -0
- package/src/write-envelope.ts +24 -3
- package/dist/chunk-35NN3ZFA.js.map +0 -1
- package/dist/chunk-3PXVYJMC.js.map +0 -1
- package/dist/chunk-3RHFGGI5.js.map +0 -1
- package/dist/chunk-4NZHHGVL.js.map +0 -1
- package/dist/chunk-CEQF6L5K.js.map +0 -1
- package/dist/chunk-CUS6S7PN.js.map +0 -1
- package/dist/chunk-DBXZZIDU.js.map +0 -1
- package/dist/chunk-DEFI2QBT.js.map +0 -1
- package/dist/chunk-EIR5VLIH.js.map +0 -1
- package/dist/chunk-GEULB2VI.js.map +0 -1
- package/dist/chunk-JFJ3MHGV.js.map +0 -1
- package/dist/chunk-JG22O53B.js.map +0 -1
- package/dist/chunk-LCU5R6TQ.js.map +0 -1
- package/dist/chunk-MDVBCPOS.js +0 -402
- package/dist/chunk-MDVBCPOS.js.map +0 -1
- package/dist/chunk-MSTNSVXI.js.map +0 -1
- package/dist/chunk-WTOE7CW4.js.map +0 -1
- package/dist/chunk-YQ3CBLL4.js.map +0 -1
- package/dist/chunk-Z54TXZ2F.js.map +0 -1
- package/dist/resolution-DKMBPXHI.js +0 -18
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-YO5QJ6L3.js.map} +0 -0
- /package/dist/{chunk-MIBKEW7A.js.map → chunk-2VXWFYJE.js.map} +0 -0
- /package/dist/{chunk-3YTTAGPB.js.map → chunk-3DVBKTSO.js.map} +0 -0
- /package/dist/{chunk-JTSVMJHV.js.map → chunk-4XDGYCZI.js.map} +0 -0
- /package/dist/{chunk-HQSBYI5X.js.map → chunk-57HVIG5U.js.map} +0 -0
- /package/dist/{chunk-PMVPCZJZ.js.map → chunk-6433HV72.js.map} +0 -0
- /package/dist/{chunk-N6TRHP72.js.map → chunk-6TAX66IA.js.map} +0 -0
- /package/dist/{chunk-AGKIG3YA.js.map → chunk-6VALIZKG.js.map} +0 -0
- /package/dist/{chunk-NS5ETDYD.js.map → chunk-7BEPVIH3.js.map} +0 -0
- /package/dist/{chunk-LYIZXQYY.js.map → chunk-7KFIMGMP.js.map} +0 -0
- /package/dist/{chunk-LWVO2QZV.js.map → chunk-7QOO4LGC.js.map} +0 -0
- /package/dist/{chunk-CCTVAVTT.js.map → chunk-AUO2LJ3K.js.map} +0 -0
- /package/dist/{chunk-ALCJRQ72.js.map → chunk-AYDDB3XI.js.map} +0 -0
- /package/dist/{chunk-3TMYV3LP.js.map → chunk-AYYGRVRP.js.map} +0 -0
- /package/dist/{chunk-W6TSGWYS.js.map → chunk-AZAA5DNP.js.map} +0 -0
- /package/dist/{chunk-6JJT5AKI.js.map → chunk-BQUEAVNW.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-BXLOS5AJ.js.map} +0 -0
- /package/dist/{chunk-CEH2AFXG.js.map → chunk-C24UZSFW.js.map} +0 -0
- /package/dist/{chunk-ZPN7W3OP.js.map → chunk-CDUUDBWJ.js.map} +0 -0
- /package/dist/{chunk-Y23B2QXP.js.map → chunk-D27J626P.js.map} +0 -0
- /package/dist/{chunk-2572MRP2.js.map → chunk-DHTQP334.js.map} +0 -0
- /package/dist/{chunk-HJQZQUPC.js.map → chunk-DJZWNKFO.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-DQEMWVMT.js.map} +0 -0
- /package/dist/{chunk-VJ6ECBIP.js.map → chunk-E4MVQQVX.js.map} +0 -0
- /package/dist/{chunk-SYJ6EKKE.js.map → chunk-EIVIB73I.js.map} +0 -0
- /package/dist/{chunk-HUNSEO5U.js.map → chunk-EV3YFLCB.js.map} +0 -0
- /package/dist/{chunk-VPGRXEAB.js.map → chunk-G57LQRP6.js.map} +0 -0
- /package/dist/{chunk-BC4QD3FM.js.map → chunk-GN55KU2P.js.map} +0 -0
- /package/dist/{chunk-4W6INNXO.js.map → chunk-GUXS322H.js.map} +0 -0
- /package/dist/{chunk-3MADV4YC.js.map → chunk-IQSC3V2E.js.map} +0 -0
- /package/dist/{chunk-UYCIS6V5.js.map → chunk-JCWY73FK.js.map} +0 -0
- /package/dist/{chunk-T42L3S6A.js.map → chunk-LBWQ65SX.js.map} +0 -0
- /package/dist/{chunk-256FBCVX.js.map → chunk-M4AHBM72.js.map} +0 -0
- /package/dist/{chunk-YEQEGSJA.js.map → chunk-MBDJJTAT.js.map} +0 -0
- /package/dist/{chunk-IAY7YBXS.js.map → chunk-MRTUN665.js.map} +0 -0
- /package/dist/{chunk-R3AAOKR2.js.map → chunk-NZWEEALH.js.map} +0 -0
- /package/dist/{chunk-I2HTKOOP.js.map → chunk-ODZG724P.js.map} +0 -0
- /package/dist/{chunk-7QFBLYFP.js.map → chunk-OJD4WS2E.js.map} +0 -0
- /package/dist/{chunk-53ENM6F6.js.map → chunk-P4DHENRE.js.map} +0 -0
- /package/dist/{chunk-KPBLJCCV.js.map → chunk-PDVQ5JU3.js.map} +0 -0
- /package/dist/{chunk-ESCQ6LY7.js.map → chunk-QFMO32TO.js.map} +0 -0
- /package/dist/{chunk-HQSPXTQO.js.map → chunk-QXIQPCCN.js.map} +0 -0
- /package/dist/{chunk-CFRBTATE.js.map → chunk-R47WINCY.js.map} +0 -0
- /package/dist/{chunk-G72IPMR7.js.map → chunk-R4OCGPSH.js.map} +0 -0
- /package/dist/{chunk-VZVP2W4O.js.map → chunk-RK4WXUI2.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
- /package/dist/{chunk-6L27N6YI.js.map → chunk-S7Q5CM7E.js.map} +0 -0
- /package/dist/{chunk-CTQRPANJ.js.map → chunk-SVSRPG6M.js.map} +0 -0
- /package/dist/{chunk-GXWDWOWP.js.map → chunk-TDKSCV62.js.map} +0 -0
- /package/dist/{chunk-S2VBSTTA.js.map → chunk-THG4GYIE.js.map} +0 -0
- /package/dist/{chunk-IXRC7EQG.js.map → chunk-TR7DGXGI.js.map} +0 -0
- /package/dist/{chunk-63FHSH7E.js.map → chunk-TYUS5TLG.js.map} +0 -0
- /package/dist/{chunk-7PWWGYGO.js.map → chunk-URHCUXKI.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-VDX2J7OX.js.map} +0 -0
- /package/dist/{chunk-MUJ4QFUQ.js.map → chunk-W4BMEGQA.js.map} +0 -0
- /package/dist/{chunk-5HK3CJAR.js.map → chunk-W675UJCZ.js.map} +0 -0
- /package/dist/{chunk-X5SDZMO7.js.map → chunk-YHCBJULX.js.map} +0 -0
- /package/dist/{chunk-5UYSCYR7.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-DKMBPXHI.js.map → memory-subject-cli.js.map} +0 -0
|
@@ -17,9 +17,31 @@ import type { ContradictionVerdict } from "./contradiction-judge.js";
|
|
|
17
17
|
|
|
18
18
|
// ── Types ──────────────────────────────────────────────────────────────────────
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Resolution verbs. The first five are contradiction-pair verbs; the last
|
|
22
|
+
* three resolve a `kind: "preference-drift"` item (issue #2371). Verb validity
|
|
23
|
+
* is per-kind — `executeResolution` rejects a cross-kind verb — but the stored
|
|
24
|
+
* union is shared so one review queue, one `review_resolve` surface, and one
|
|
25
|
+
* resolution record serve both item kinds.
|
|
26
|
+
*/
|
|
27
|
+
export type ResolutionVerb =
|
|
28
|
+
| "keep-a"
|
|
29
|
+
| "keep-b"
|
|
30
|
+
| "merge"
|
|
31
|
+
| "both-valid"
|
|
32
|
+
| "needs-more-context"
|
|
33
|
+
| "keep"
|
|
34
|
+
| "supersede"
|
|
35
|
+
| "archive";
|
|
36
|
+
|
|
37
|
+
/** Review-item kind. Absent on every pair written before issue #2371. */
|
|
38
|
+
export type ReviewItemKind = "contradiction" | "preference-drift";
|
|
39
|
+
|
|
40
|
+
/** Verbs valid for a `kind: "preference-drift"` item. */
|
|
41
|
+
export const PREFERENCE_DRIFT_VERBS: readonly ResolutionVerb[] = ["keep", "supersede", "archive"];
|
|
42
|
+
|
|
43
|
+
/** Verbs valid for a contradiction pair. */
|
|
44
|
+
export const CONTRADICTION_VERBS: readonly ResolutionVerb[] = [
|
|
23
45
|
"keep-a",
|
|
24
46
|
"keep-b",
|
|
25
47
|
"merge",
|
|
@@ -27,11 +49,23 @@ const VALID_RESOLUTION_VERBS: readonly ResolutionVerb[] = [
|
|
|
27
49
|
"needs-more-context",
|
|
28
50
|
];
|
|
29
51
|
|
|
52
|
+
const VALID_RESOLUTION_VERBS: readonly ResolutionVerb[] = [
|
|
53
|
+
...CONTRADICTION_VERBS,
|
|
54
|
+
...PREFERENCE_DRIFT_VERBS,
|
|
55
|
+
];
|
|
56
|
+
|
|
30
57
|
export interface ContradictionPair {
|
|
31
58
|
/** Deterministic pair ID: sha256(sorted(memoryIdA, memoryIdB) plus namespace when scoped). */
|
|
32
59
|
pairId: string;
|
|
33
60
|
/** Memory IDs (sorted). */
|
|
34
61
|
memoryIds: [string, string];
|
|
62
|
+
/**
|
|
63
|
+
* Item kind (issue #2371). Absent on every pair written before drift
|
|
64
|
+
* detection existed, which reads as `"contradiction"`. A
|
|
65
|
+
* `"preference-drift"` item pairs the aging preference (first id) with the
|
|
66
|
+
* recent evidence that pointed away from it (second id).
|
|
67
|
+
*/
|
|
68
|
+
kind?: ReviewItemKind;
|
|
35
69
|
/** Judge verdict. */
|
|
36
70
|
verdict: ContradictionVerdict;
|
|
37
71
|
/** Judge rationale. */
|
|
@@ -85,8 +119,20 @@ export function isDefaultReviewNamespace(
|
|
|
85
119
|
return !requested || requested === defaultNamespace || resolvedNamespace === defaultNamespace;
|
|
86
120
|
}
|
|
87
121
|
|
|
122
|
+
const TERMINAL_RESOLUTIONS: Partial<Record<ResolutionVerb, true>> = {
|
|
123
|
+
"keep-a": true,
|
|
124
|
+
"keep-b": true,
|
|
125
|
+
merge: true,
|
|
126
|
+
// Every preference-drift verb is terminal: the user has answered the "is
|
|
127
|
+
// this preference still true?" question, so the item must leave the
|
|
128
|
+
// unresolved queue and never be re-proposed by a later scan (issue #2371).
|
|
129
|
+
keep: true,
|
|
130
|
+
supersede: true,
|
|
131
|
+
archive: true,
|
|
132
|
+
};
|
|
133
|
+
|
|
88
134
|
function isTerminalResolution(resolution: ResolutionVerb | undefined): boolean {
|
|
89
|
-
return resolution
|
|
135
|
+
return resolution !== undefined && TERMINAL_RESOLUTIONS[resolution] === true;
|
|
90
136
|
}
|
|
91
137
|
|
|
92
138
|
function preservesDirectResolution(resolution: ResolutionVerb | undefined): boolean {
|
|
@@ -380,8 +380,16 @@ function normalizeScanNamespace(namespace: string | undefined): string | undefin
|
|
|
380
380
|
return trimmed ? trimmed : undefined;
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
-
|
|
384
|
-
|
|
383
|
+
/**
|
|
384
|
+
* Resolve the namespace-scoped storage a scan must read and write through.
|
|
385
|
+
*
|
|
386
|
+
* Exported and narrowed to the fields it actually reads so sibling scans
|
|
387
|
+
* (preference drift, issue #2371) share ONE namespace resolver rather than
|
|
388
|
+
* re-deriving the read/write namespace independently — the divergence the
|
|
389
|
+
* namespace/ACL scenario matrix in AGENTS.md exists to prevent.
|
|
390
|
+
*/
|
|
391
|
+
export async function resolveScanStorage(
|
|
392
|
+
deps: Pick<ScanDependencies, "config" | "storage" | "storageForNamespace">,
|
|
385
393
|
namespace: string | undefined,
|
|
386
394
|
): Promise<ScanStorageResolution> {
|
|
387
395
|
if (!resolveNamespaceCapabilities(deps.config).namespaces) {
|
|
@@ -427,7 +435,10 @@ function isStorageManagerLike(value: unknown): value is StorageManager {
|
|
|
427
435
|
return typeof candidate.readAllMemories === "function";
|
|
428
436
|
}
|
|
429
437
|
|
|
430
|
-
function fallbackResolvedNamespace(
|
|
438
|
+
function fallbackResolvedNamespace(
|
|
439
|
+
deps: Pick<ScanDependencies, "config">,
|
|
440
|
+
namespace: string | undefined,
|
|
441
|
+
): string | undefined {
|
|
431
442
|
if (namespace) return namespace;
|
|
432
443
|
return resolveNamespaceCapabilities(deps.config).namespaces ? deps.config.defaultNamespace : undefined;
|
|
433
444
|
}
|
|
@@ -10,7 +10,13 @@ import { composeMemoryEnvelope } from "../write-envelope.js";
|
|
|
10
10
|
import type { StorageManager } from "../storage.js";
|
|
11
11
|
import type { MemoryCategory, MemoryFile } from "../types.js";
|
|
12
12
|
import type { ResolutionVerb } from "./contradiction-review.js";
|
|
13
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
CONTRADICTION_VERBS,
|
|
15
|
+
PREFERENCE_DRIFT_VERBS,
|
|
16
|
+
readPair,
|
|
17
|
+
resolvePair,
|
|
18
|
+
} from "./contradiction-review.js";
|
|
19
|
+
import { resolvePreferenceDrift } from "../preferences/preference-drift.js";
|
|
14
20
|
|
|
15
21
|
export interface ResolutionResult {
|
|
16
22
|
pairId: string;
|
|
@@ -50,7 +56,14 @@ export interface ExecuteResolutionOptions {
|
|
|
50
56
|
onMergedMemoryWritten?: (namespace: string | undefined, storageDir: string) => void;
|
|
51
57
|
}
|
|
52
58
|
|
|
53
|
-
|
|
59
|
+
/**
|
|
60
|
+
* Every verb the `review_resolve` surface accepts, across both review-item
|
|
61
|
+
* kinds (issue #2371). This is a *surface-level* gate only: per-kind validity
|
|
62
|
+
* is enforced inside {@link executeResolution}, which is the first place the
|
|
63
|
+
* item's `kind` is known. Callers therefore reject an unknown verb early and
|
|
64
|
+
* a cross-kind verb precisely.
|
|
65
|
+
*/
|
|
66
|
+
const VALID_VERBS: readonly ResolutionVerb[] = [...CONTRADICTION_VERBS, ...PREFERENCE_DRIFT_VERBS];
|
|
54
67
|
|
|
55
68
|
export function isValidResolutionVerb(value: string): value is ResolutionVerb {
|
|
56
69
|
return VALID_VERBS.includes(value as ResolutionVerb);
|
|
@@ -94,6 +107,41 @@ export async function executeResolution(
|
|
|
94
107
|
if (pair.resolution && pair.resolution !== "needs-more-context") {
|
|
95
108
|
return { pairId, verb, affectedIds: [], message: `Pair already resolved with verb "${pair.resolution}"` };
|
|
96
109
|
}
|
|
110
|
+
// Verb validity is per review-item kind (issue #2371). A preference-drift
|
|
111
|
+
// item never accepts keep-a/keep-b/merge (there is no "B" to keep — the
|
|
112
|
+
// second id is witness evidence, not a competing claim), and a contradiction
|
|
113
|
+
// pair never accepts keep/supersede/archive. Rejecting the cross-kind verb
|
|
114
|
+
// here, after the record is loaded, is the only place both kinds are known.
|
|
115
|
+
const isDriftItem = pair.kind === "preference-drift";
|
|
116
|
+
const verbMatchesKind = isDriftItem
|
|
117
|
+
? PREFERENCE_DRIFT_VERBS.includes(verb)
|
|
118
|
+
: CONTRADICTION_VERBS.includes(verb);
|
|
119
|
+
if (!verbMatchesKind) {
|
|
120
|
+
const allowed = (isDriftItem ? PREFERENCE_DRIFT_VERBS : CONTRADICTION_VERBS).join(", ");
|
|
121
|
+
return {
|
|
122
|
+
pairId,
|
|
123
|
+
verb,
|
|
124
|
+
affectedIds: [],
|
|
125
|
+
message: `Verb "${verb}" is not valid for a ${isDriftItem ? "preference-drift" : "contradiction"} item. Valid: ${allowed}`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (isDriftItem) {
|
|
130
|
+
const outcome = await resolvePreferenceDrift(
|
|
131
|
+
resolutionStorage,
|
|
132
|
+
pair,
|
|
133
|
+
verb as "keep" | "supersede" | "archive",
|
|
134
|
+
{
|
|
135
|
+
mergedContent: options.mergedContent,
|
|
136
|
+
onMemoryWritten: options.onMergedMemoryWritten,
|
|
137
|
+
},
|
|
138
|
+
);
|
|
139
|
+
// Only record the terminal resolution when memories actually changed;
|
|
140
|
+
// a refused resolution must stay actionable in the queue.
|
|
141
|
+
if (outcome.affectedIds.length > 0) resolvePair(memoryDir, pairId, verb);
|
|
142
|
+
return { pairId, verb, affectedIds: outcome.affectedIds, message: outcome.message };
|
|
143
|
+
}
|
|
144
|
+
|
|
97
145
|
|
|
98
146
|
const [idA, idB] = pair.memoryIds;
|
|
99
147
|
const affectedIds: string[] = [];
|
package/src/extraction-prompt.ts
CHANGED
|
@@ -22,6 +22,7 @@ export const EXTRACTION_RESPONSE_SHAPE = `{
|
|
|
22
22
|
"promptedByQuestion": "<optional source-grounded question>",
|
|
23
23
|
"quote": "<optional exact contiguous source span>",
|
|
24
24
|
"scope": "<optional project-or-global>",
|
|
25
|
+
"subject": "<optional user-or-agent>",
|
|
25
26
|
"structuredAttributes": {"<key>": "<value>"},
|
|
26
27
|
"procedureSteps": [{"order": 1, "intent": "<step>"}, {"order": 2, "intent": "<step>"}],
|
|
27
28
|
"reasoningTrace": {
|
package/src/extraction.ts
CHANGED
|
@@ -312,6 +312,8 @@ export class ExtractionEngine {
|
|
|
312
312
|
promptedByQuestion: extractionText(f.promptedByQuestion),
|
|
313
313
|
scope:
|
|
314
314
|
f.scope === "global" || f.scope === "project" ? f.scope : undefined,
|
|
315
|
+
subject:
|
|
316
|
+
f.subject === "user" || f.subject === "agent" ? f.subject : undefined,
|
|
315
317
|
structuredAttributes: extractionAttributes(f.structuredAttributes),
|
|
316
318
|
procedureSteps,
|
|
317
319
|
reasoningTrace,
|
|
@@ -1425,7 +1427,8 @@ Rules:
|
|
|
1425
1427
|
- ${OUTPUT_LANGUAGE_POLICY}
|
|
1426
1428
|
${CUE_ANCHOR_PROMPT_INSTRUCTION}\n- Include at most five durable relationships.${this.config.provenance?.enabled ? `
|
|
1427
1429
|
- Each fact must include a quote copied verbatim from one contiguous conversation span.` : ""}${lifecycleCaps.extractionScopeClassification ? `
|
|
1428
|
-
- Set each fact scope to "global" for cross-project knowledge or "project" for codebase-specific knowledge. Tool, command, or CLI-flag instructions tied to one agent are "project" (the same tool name can mean different things across agents); when keeping one, begin the fact with a leading "In <agent>," clause naming that agent.` : ""}${
|
|
1430
|
+
- Set each fact scope to "global" for cross-project knowledge or "project" for codebase-specific knowledge. Tool, command, or CLI-flag instructions tied to one agent are "project" (the same tool name can mean different things across agents); when keeping one, begin the fact with a leading "In <agent>," clause naming that agent.` : ""}${this.config.subjectClassification?.enabled === true ? `
|
|
1431
|
+
- Set each fact subject to "user" when it models the person (preferences, relationships, biography, moments, commitments about their life) or "agent" when it is reusable operating knowledge (procedures, principles, tool-usage lessons, debugging strategies, environment facts with no personal content).` : ""}${ambientCapture ? AMBIENT_CAPTURE_PROMPT_SECTION_COMPACT : ""}
|
|
1429
1432
|
${eventTimePromptInstruction(this.config)}
|
|
1430
1433
|
Return only valid JSON matching this shape. Placeholder text describes field shape only and is never source evidence:
|
|
1431
1434
|
${EXTRACTION_RESPONSE_SHAPE}
|
package/src/index.ts
CHANGED
|
@@ -229,7 +229,8 @@ export type {
|
|
|
229
229
|
ProcedureStatsConfigSnapshot,
|
|
230
230
|
ProcedureStatsRecent,
|
|
231
231
|
} from "./procedural/procedure-stats.js";
|
|
232
|
-
|
|
232
|
+
export { runProcedureLibraryMaintenance, type ProcedureLibraryMaintenanceReport, type ProcedureMaintenanceAction, type ProcedureMaintenanceActionKind, type ProcedureMaintenanceReasonCode, type ProcedureMaintenanceEvidence, type ProcedureMaintenanceMarker } from "./procedural/library-maintenance.js";
|
|
233
|
+
export * from "./preferences/index.js";
|
|
233
234
|
// ---------------------------------------------------------------------------
|
|
234
235
|
// Direct-answer retrieval tier (issue #518)
|
|
235
236
|
// ---------------------------------------------------------------------------
|
|
@@ -493,14 +494,13 @@ export {
|
|
|
493
494
|
type RecallXrayFormat,
|
|
494
495
|
} from "./recall-xray-renderer.js";
|
|
495
496
|
export type {
|
|
496
|
-
RecallXraySnapshot,
|
|
497
|
-
RecallXrayResult,
|
|
498
|
-
RecallXrayScoreDecomposition,
|
|
499
|
-
RecallXrayServedBy,
|
|
500
|
-
RecallFilterTrace,
|
|
497
|
+
RecallXraySnapshot, RecallXrayResult, RecallXrayScoreDecomposition, RecallXrayServedBy, RecallFilterTrace,
|
|
501
498
|
} from "./recall-xray.js";
|
|
502
499
|
export * from "./who-knows.js";
|
|
503
500
|
export * from "./who-knows-cli.js";
|
|
501
|
+
export * from "./memory-subject.js";
|
|
502
|
+
export * from "./memory-subject-cli.js";
|
|
503
|
+
export * from "./subject-config.js";
|
|
504
504
|
|
|
505
505
|
// ChatGPT Apps-compatible memory inspector demo.
|
|
506
506
|
export {
|
|
@@ -516,6 +516,7 @@ export {
|
|
|
516
516
|
type RemnicChatGptMemoryInspectorResult,
|
|
517
517
|
} from "./mcp-memory-inspector-app.js";
|
|
518
518
|
export * from "./coding/pre-action-gate.js";
|
|
519
|
+
export * from "./coding/action-gate.js";
|
|
519
520
|
export * from "./causal-trajectory.js";
|
|
520
521
|
// Coding-agent subsystem (issue #569)
|
|
521
522
|
export {
|
|
@@ -806,10 +807,7 @@ export {
|
|
|
806
807
|
type SemanticDedupDecision,
|
|
807
808
|
} from "./dedup/semantic.js";
|
|
808
809
|
|
|
809
|
-
// ---------------------------------------------------------------------------
|
|
810
810
|
// Review Inbox
|
|
811
|
-
// ---------------------------------------------------------------------------
|
|
812
|
-
|
|
813
811
|
export {
|
|
814
812
|
listReviewItems,
|
|
815
813
|
performReview,
|
|
@@ -819,6 +817,8 @@ export {
|
|
|
819
817
|
type ReviewListResult,
|
|
820
818
|
type ReviewOptions,
|
|
821
819
|
} from "./review/index.js";
|
|
820
|
+
export * from "./review/review-deck.js";
|
|
821
|
+
export * from "./review/review-deck-snapshot.js";
|
|
822
822
|
|
|
823
823
|
// ---------------------------------------------------------------------------
|
|
824
824
|
// Diff-Aware Sync
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI surface for memory-subject operations (issue #2372).
|
|
3
|
+
*
|
|
4
|
+
* `remnic promotion-candidates` — read-only surfacing of agent-subject,
|
|
5
|
+
* reuse-signaled promotion candidates. `remnic subjects backfill` — the
|
|
6
|
+
* deterministic shadow/apply stamp for unstamped memories. Runners take an
|
|
7
|
+
* io seam (service/storage callbacks + stdout) so tests drive them without
|
|
8
|
+
* booting an orchestrator; the remnic-cli entry supplies the real ones.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {
|
|
12
|
+
PromotionCandidatesResult,
|
|
13
|
+
SubjectBackfillReport,
|
|
14
|
+
} from "./memory-subject.js";
|
|
15
|
+
|
|
16
|
+
export interface PromotionCandidatesCliOptions {
|
|
17
|
+
namespace?: string;
|
|
18
|
+
targetNamespace?: string;
|
|
19
|
+
limit: number;
|
|
20
|
+
json: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function parsePromotionCandidatesCliOptions(args: {
|
|
24
|
+
namespace?: string;
|
|
25
|
+
targetNamespace?: string;
|
|
26
|
+
limit?: string;
|
|
27
|
+
json?: boolean;
|
|
28
|
+
}): PromotionCandidatesCliOptions {
|
|
29
|
+
let limit = 20;
|
|
30
|
+
if (args.limit !== undefined) {
|
|
31
|
+
const parsed = Number(args.limit);
|
|
32
|
+
if (!Number.isInteger(parsed) || parsed < 1 || parsed > 100) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`promotion-candidates: --limit expects an integer in [1, 100] (got ${JSON.stringify(args.limit)})`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
limit = parsed;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
...(args.namespace !== undefined && args.namespace !== "" ? { namespace: args.namespace } : {}),
|
|
41
|
+
...(args.targetNamespace !== undefined && args.targetNamespace !== ""
|
|
42
|
+
? { targetNamespace: args.targetNamespace }
|
|
43
|
+
: {}),
|
|
44
|
+
limit,
|
|
45
|
+
json: args.json === true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export function renderPromotionCandidates(result: PromotionCandidatesResult, json: boolean): string {
|
|
50
|
+
if (json) return JSON.stringify(result, null, 2);
|
|
51
|
+
const lines = [
|
|
52
|
+
`Namespace: ${result.namespace} Target layer: ${result.targetNamespace} (minAccessCount ${result.minAccessCount})`,
|
|
53
|
+
];
|
|
54
|
+
if (result.candidates.length === 0) {
|
|
55
|
+
lines.push("No promotion candidates.");
|
|
56
|
+
return lines.join("\n");
|
|
57
|
+
}
|
|
58
|
+
for (const c of result.candidates) {
|
|
59
|
+
lines.push(
|
|
60
|
+
`- ${c.id} [${c.category}] signal=${c.reuseSignal} access=${c.accessCount} reinforced=${c.reinforcementCount} mw=${c.mwSuccess}/${c.mwFail}`,
|
|
61
|
+
);
|
|
62
|
+
lines.push(` ${c.content.replace(/\s+/g, " ").slice(0, 100)}`);
|
|
63
|
+
}
|
|
64
|
+
lines.push("Promote explicitly with the existing promotion commands; nothing is auto-promoted.");
|
|
65
|
+
return lines.join("\n");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export async function runPromotionCandidatesCommand(
|
|
69
|
+
rest: string[],
|
|
70
|
+
io: {
|
|
71
|
+
promotionCandidates: (request: {
|
|
72
|
+
namespace?: string;
|
|
73
|
+
targetNamespace?: string;
|
|
74
|
+
limit?: number;
|
|
75
|
+
}) => Promise<PromotionCandidatesResult>;
|
|
76
|
+
stdout: (line: string) => void;
|
|
77
|
+
},
|
|
78
|
+
): Promise<void> {
|
|
79
|
+
const flag = (name: string): string | undefined => {
|
|
80
|
+
const hit = rest.find((a) => a.startsWith(`--${name}=`));
|
|
81
|
+
return hit === undefined ? undefined : hit.slice(name.length + 3);
|
|
82
|
+
};
|
|
83
|
+
const options = parsePromotionCandidatesCliOptions({
|
|
84
|
+
namespace: flag("namespace"),
|
|
85
|
+
targetNamespace: flag("target-namespace"),
|
|
86
|
+
limit: flag("limit"),
|
|
87
|
+
json: rest.includes("--json"),
|
|
88
|
+
});
|
|
89
|
+
const result = await io.promotionCandidates({
|
|
90
|
+
...(options.namespace !== undefined ? { namespace: options.namespace } : {}),
|
|
91
|
+
...(options.targetNamespace !== undefined ? { targetNamespace: options.targetNamespace } : {}),
|
|
92
|
+
limit: options.limit,
|
|
93
|
+
});
|
|
94
|
+
io.stdout(renderPromotionCandidates(result, options.json));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface SubjectsBackfillCliOptions {
|
|
98
|
+
mode: "shadow" | "apply";
|
|
99
|
+
namespace?: string;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function parseSubjectsBackfillCliOptions(args: {
|
|
103
|
+
apply?: boolean;
|
|
104
|
+
namespace?: string;
|
|
105
|
+
}): SubjectsBackfillCliOptions {
|
|
106
|
+
return {
|
|
107
|
+
mode: args.apply === true ? "apply" : "shadow",
|
|
108
|
+
...(args.namespace !== undefined && args.namespace !== "" ? { namespace: args.namespace } : {}),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export async function runSubjectsBackfillCommand(
|
|
113
|
+
rest: string[],
|
|
114
|
+
io: {
|
|
115
|
+
backfill: (options: { mode: "shadow" | "apply"; namespace?: string }) => Promise<SubjectBackfillReport>;
|
|
116
|
+
stdout: (line: string) => void;
|
|
117
|
+
},
|
|
118
|
+
): Promise<void> {
|
|
119
|
+
const namespaceFlag = rest.find((a) => a.startsWith("--namespace="))?.slice("--namespace=".length);
|
|
120
|
+
const options = parseSubjectsBackfillCliOptions({
|
|
121
|
+
apply: rest.includes("--apply"),
|
|
122
|
+
namespace: namespaceFlag,
|
|
123
|
+
});
|
|
124
|
+
const report = await io.backfill(options);
|
|
125
|
+
const lines = [
|
|
126
|
+
`Mode: ${report.mode} Scanned: ${report.scanned} Already stamped: ${report.alreadyStamped} To stamp: ${report.stamped}`,
|
|
127
|
+
];
|
|
128
|
+
for (const stamp of report.stamps) {
|
|
129
|
+
lines.push(`- ${stamp.id} [${stamp.category}] → subject: ${stamp.subject}`);
|
|
130
|
+
}
|
|
131
|
+
if (report.mode === "shadow") {
|
|
132
|
+
lines.push("Shadow run — nothing written. Re-run with --apply to stamp.");
|
|
133
|
+
}
|
|
134
|
+
io.stdout(lines.join("\n"));
|
|
135
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
evaluateSubjectGuard,
|
|
6
|
+
resolveWriteSubject,
|
|
7
|
+
SUBJECT_GUARD_OVERRIDE_FLAG,
|
|
8
|
+
} from "./memory-subject.js";
|
|
9
|
+
import { parseSubjectRuntimeConfig } from "./subject-config.js";
|
|
10
|
+
|
|
11
|
+
test("category defaults: procedure is agent, preference is user, unknown is user", () => {
|
|
12
|
+
assert.equal(resolveWriteSubject("procedure", undefined), "agent");
|
|
13
|
+
assert.equal(resolveWriteSubject("preference", undefined), "user");
|
|
14
|
+
assert.equal(resolveWriteSubject("fact", undefined), "user");
|
|
15
|
+
assert.equal(resolveWriteSubject("procedure", "user"), "user");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
test("shared-layer guard: missing subject fails closed as user", () => {
|
|
19
|
+
const warn = evaluateSubjectGuard({
|
|
20
|
+
subject: undefined,
|
|
21
|
+
sharedTarget: true,
|
|
22
|
+
mode: "warn",
|
|
23
|
+
});
|
|
24
|
+
assert.equal(warn.action, "warn");
|
|
25
|
+
assert.equal(warn.effectiveSubject, "user");
|
|
26
|
+
assert.ok(warn.reason.includes(SUBJECT_GUARD_OVERRIDE_FLAG));
|
|
27
|
+
|
|
28
|
+
const reject = evaluateSubjectGuard({
|
|
29
|
+
subject: "user",
|
|
30
|
+
sharedTarget: true,
|
|
31
|
+
mode: "enforce",
|
|
32
|
+
});
|
|
33
|
+
assert.equal(reject.action, "reject");
|
|
34
|
+
|
|
35
|
+
const allowed = evaluateSubjectGuard({
|
|
36
|
+
subject: "agent",
|
|
37
|
+
sharedTarget: true,
|
|
38
|
+
mode: "enforce",
|
|
39
|
+
});
|
|
40
|
+
assert.equal(allowed.action, "allow");
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test("subjectClassification omitted is off; invalid values throw", () => {
|
|
44
|
+
assert.equal(parseSubjectRuntimeConfig({}).subjectClassification.enabled, false);
|
|
45
|
+
assert.equal(parseSubjectRuntimeConfig({}).subjectGuard, "warn");
|
|
46
|
+
assert.throws(() => parseSubjectRuntimeConfig({ subjectGuard: "loud" }));
|
|
47
|
+
assert.throws(() => parseSubjectRuntimeConfig({ subjectClassification: false }));
|
|
48
|
+
});
|