@remnic/core 9.49.0 → 9.49.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstraction-nodes.d.ts +12 -1
- package/dist/abstraction-nodes.js +9 -2
- package/dist/access-admin-ops-surface.d.ts +10 -10
- package/dist/access-admin-ops-surface.js +48 -48
- package/dist/access-authorization-probe.d.ts +10 -10
- package/dist/access-authorization-probe.js +49 -49
- package/dist/access-boundary.d.ts +10 -10
- package/dist/access-boundary.js +48 -48
- package/dist/access-cli.js +132 -127
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +10 -10
- package/dist/access-extraction-force-flush.js +48 -48
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +10 -10
- package/dist/access-http-lifecycle-flush.d.ts +10 -10
- package/dist/access-http-offline-stream.d.ts +10 -10
- package/dist/access-http-query.js +48 -48
- package/dist/access-http.d.ts +10 -10
- package/dist/access-http.js +60 -60
- package/dist/access-identity-continuity-surface.d.ts +8 -8
- package/dist/access-identity-continuity-surface.js +48 -48
- package/dist/access-lcm-surface.d.ts +10 -10
- package/dist/access-lcm-surface.js +48 -48
- package/dist/access-mcp.d.ts +10 -10
- package/dist/access-mcp.js +55 -55
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight--H6HwN85.d.ts → access-namespace-preflight-DuDU301-.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +48 -48
- package/dist/access-observe-write-surface.d.ts +10 -10
- package/dist/access-observe-write-surface.js +48 -48
- package/dist/access-offline-manifest.d.ts +8 -8
- package/dist/access-offline-manifest.js +3 -3
- package/dist/access-operations-batch.js +51 -51
- package/dist/access-operations.d.ts +13 -13
- package/dist/access-operations.js +54 -54
- package/dist/access-recall-concurrency.d.ts +10 -10
- package/dist/access-recall-concurrency.js +48 -48
- package/dist/access-recall-response.d.ts +10 -10
- package/dist/access-recall-response.js +48 -48
- package/dist/access-recall-surface.d.ts +10 -10
- package/dist/access-recall-surface.js +48 -48
- package/dist/access-schema.d.ts +105 -105
- package/dist/access-schema.js +4 -4
- package/dist/{access-service-DvXOzCrM.d.ts → access-service--_3T_v23.d.ts} +7 -7
- package/dist/access-service-helpers.d.ts +10 -10
- package/dist/access-service.d.ts +10 -10
- package/dist/access-service.js +48 -48
- package/dist/access-surface-catalog.d.ts +10 -10
- package/dist/access-wearables-meetings-surface.d.ts +3 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +3 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-7O6RP2RT.js → auto-sync-QFQGOEO2.js} +4 -4
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +8 -8
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +12 -12
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/buffer.js +4 -4
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/calibration.js +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/{capsule-merge-6GFHWECG.js → capsule-merge-KXTRZ23Z.js} +4 -4
- package/dist/{catalog-Iwbk9h5E.d.ts → catalog-DjUmUIal.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-behavior.js +3 -3
- package/dist/causal-chain.js +3 -3
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +16 -16
- package/dist/causal-retrieval.js +3 -3
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/causal-trajectory.d.ts +51 -2
- package/dist/causal-trajectory.js +8 -2
- package/dist/{chunk-EY64JLOM.js → chunk-24BKGKGO.js} +30 -19
- package/dist/chunk-24BKGKGO.js.map +1 -0
- package/dist/{chunk-ICP53SKG.js → chunk-2HIJHXB3.js} +2 -2
- package/dist/{chunk-BXLOS5AJ.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/{chunk-LZGCJSQR.js → chunk-3LD4N2TF.js} +151 -37
- package/dist/chunk-3LD4N2TF.js.map +1 -0
- package/dist/{chunk-5JRC6BYS.js → chunk-47J4EDGR.js} +11 -11
- package/dist/{chunk-2VHLLPTX.js → chunk-4EABKPZS.js} +4 -4
- package/dist/{chunk-RJV6Q2FT.js → chunk-4JWJMRPJ.js} +2 -2
- package/dist/{chunk-MXPB6PJQ.js → chunk-4S3ECH3U.js} +2 -2
- package/dist/{chunk-CGASUJVP.js → chunk-5V6IXHPI.js} +4 -4
- package/dist/{chunk-R5IGA2NH.js → chunk-5XCN4XBU.js} +4 -4
- package/dist/{chunk-2RPJ4NEE.js → chunk-64BHFFKZ.js} +2 -2
- package/dist/{chunk-FQC3DHH2.js → chunk-66SE3BNH.js} +2 -2
- package/dist/{chunk-TERNBNJB.js → chunk-6FC3IZ26.js} +2 -2
- package/dist/{chunk-K7VKAHFE.js → chunk-6XGEBQ3R.js} +4 -4
- package/dist/{chunk-JFLOOTXU.js → chunk-7BLWBSRL.js} +3 -3
- package/dist/{chunk-ABR2HEJO.js → chunk-7NDM2PNK.js} +3 -3
- package/dist/{chunk-JXZ7NLYH.js → chunk-7VWZ4LRW.js} +2 -2
- package/dist/{chunk-RN53QBM4.js → chunk-A4QMKFFO.js} +5 -1
- package/dist/chunk-A4QMKFFO.js.map +1 -0
- package/dist/chunk-ACPCA4NO.js +321 -0
- package/dist/chunk-ACPCA4NO.js.map +1 -0
- package/dist/chunk-AMTEYNYK.js +72 -0
- package/dist/chunk-AMTEYNYK.js.map +1 -0
- package/dist/{chunk-R6YJI3HE.js → chunk-AW4QUFQF.js} +1 -1
- package/dist/{chunk-P65YJEEL.js → chunk-AXFWMRKI.js} +2 -2
- package/dist/{chunk-WG5HSQ4P.js → chunk-BAKXNQ3C.js} +2 -2
- package/dist/{chunk-NM2WP3B7.js → chunk-BJYET5TX.js} +2 -2
- package/dist/{chunk-HLKPRWF4.js → chunk-DATDLJAO.js} +6 -6
- package/dist/chunk-DJUKBGAD.js +260 -0
- package/dist/chunk-DJUKBGAD.js.map +1 -0
- package/dist/{chunk-DX3XRGLH.js → chunk-DQTCGVFK.js} +2 -2
- package/dist/{chunk-IPBNC77A.js → chunk-E633OXMH.js} +11 -11
- package/dist/{chunk-J7T4MX7P.js → chunk-EEAMSNSG.js} +12 -1
- package/dist/chunk-EEAMSNSG.js.map +1 -0
- package/dist/{chunk-Z5UC3OKB.js → chunk-ELQCS47S.js} +7 -7
- package/dist/{chunk-FMXJ555A.js → chunk-EURCX6PS.js} +2 -2
- package/dist/{chunk-MZZR3J6M.js → chunk-FV7YQTN3.js} +2 -2
- package/dist/chunk-G73MCJKL.js +20 -0
- package/dist/chunk-G73MCJKL.js.map +1 -0
- package/dist/{chunk-3R6D33UF.js → chunk-GGBSF2X7.js} +2 -2
- package/dist/{chunk-SYUBB3WM.js → chunk-GKEYXXKX.js} +2 -2
- package/dist/{chunk-5AGR7SAI.js → chunk-GSEPRIZC.js} +3 -3
- package/dist/{chunk-UTVZKHJK.js → chunk-GUKBW4HL.js} +2 -2
- package/dist/chunk-GXSOUIA4.js +293 -0
- package/dist/chunk-GXSOUIA4.js.map +1 -0
- package/dist/{chunk-2F6NP3NT.js → chunk-HDQUQBPW.js} +2 -2
- package/dist/{chunk-6HMYUWXR.js → chunk-HTP6XRUI.js} +2 -2
- package/dist/{chunk-UYUYZ4WY.js → chunk-IARXXZU4.js} +2 -2
- package/dist/{chunk-MNB5RMAY.js → chunk-IIFFC3RL.js} +2 -2
- package/dist/{chunk-VDX2J7OX.js → chunk-IPLYGWQF.js} +6 -6
- package/dist/{chunk-NZBZ7IS2.js → chunk-JDCQK3C5.js} +2 -2
- package/dist/{chunk-C3KVFJH5.js → chunk-JI62YGPI.js} +2 -2
- package/dist/{chunk-LULR4IUW.js → chunk-KATEWTQJ.js} +2 -2
- package/dist/{chunk-BMCHFWGX.js → chunk-KMWYZTIE.js} +2 -2
- package/dist/{chunk-JGSKJHF7.js → chunk-KQS72GCR.js} +2 -2
- package/dist/{chunk-3S63QIFQ.js → chunk-LAQ33B5D.js} +1 -1
- package/dist/chunk-LAQ33B5D.js.map +1 -0
- package/dist/chunk-LNTUXKBT.js +224 -0
- package/dist/chunk-LNTUXKBT.js.map +1 -0
- package/dist/{chunk-2RIWJUSQ.js → chunk-LQKXVQZR.js} +12 -12
- package/dist/{chunk-LQL7ARIC.js → chunk-LTOAJXZB.js} +4 -4
- package/dist/{chunk-QKD65RGL.js → chunk-LYMNZZIM.js} +2 -2
- package/dist/{chunk-W4FBGYGK.js → chunk-M4MP34AQ.js} +189 -5
- package/dist/chunk-M4MP34AQ.js.map +1 -0
- package/dist/{chunk-3PY7VHV7.js → chunk-MCA2X4WH.js} +2 -2
- package/dist/{chunk-S5NZBKKQ.js → chunk-N3CXAYPJ.js} +3 -3
- package/dist/{chunk-WQIHRA5F.js → chunk-N3LL5NEU.js} +2 -2
- package/dist/{chunk-Z4U6U3M3.js → chunk-NKL25FCF.js} +2 -2
- package/dist/{chunk-LMDRGRJ2.js → chunk-NOB2T2FC.js} +2 -2
- package/dist/{chunk-P2OTGMTR.js → chunk-NSGU76YO.js} +2 -2
- package/dist/{chunk-L6DCVUCA.js → chunk-O76MWTVS.js} +2 -2
- package/dist/{chunk-WZFAPHIK.js → chunk-OIOZ6MOP.js} +3 -3
- package/dist/{chunk-DNHVPZOD.js → chunk-P26YHAQH.js} +201 -1
- package/dist/chunk-P26YHAQH.js.map +1 -0
- package/dist/{chunk-UMOO7IY7.js → chunk-P2KBDJJ6.js} +2 -2
- package/dist/{chunk-KVJRXN2E.js → chunk-P4QOYG52.js} +125 -13
- package/dist/chunk-P4QOYG52.js.map +1 -0
- package/dist/chunk-P77QX3ID.js +332 -0
- package/dist/chunk-P77QX3ID.js.map +1 -0
- package/dist/{chunk-SXWHN7GC.js → chunk-PDEKQWDV.js} +2 -2
- package/dist/{chunk-ENEA47UC.js → chunk-PLCHU56K.js} +3 -3
- package/dist/{chunk-IXPKESVP.js → chunk-PWIMF7LP.js} +37 -37
- package/dist/{chunk-RHTO4HTL.js → chunk-PWLB4TRK.js} +2 -2
- package/dist/{chunk-RVYVMQK4.js → chunk-QSYL5CXK.js} +3 -3
- package/dist/{chunk-B6KGGRUL.js → chunk-QWLW3VQH.js} +2 -2
- package/dist/{chunk-YQIVWS7Y.js → chunk-RBPH3GZV.js} +405 -101
- package/dist/chunk-RBPH3GZV.js.map +1 -0
- package/dist/{chunk-JBPKEARU.js → chunk-RKNJBZ55.js} +4 -4
- package/dist/{chunk-QCECHYZL.js → chunk-RVO6TCTU.js} +6 -6
- package/dist/{chunk-SHDZNSK4.js → chunk-S2SJEOTM.js} +2 -2
- package/dist/{chunk-ULWHRQEQ.js → chunk-S75UQ3T3.js} +3 -3
- package/dist/{chunk-LXOM6IQU.js → chunk-SEF4IOFE.js} +2 -2
- package/dist/{chunk-I3YHVVT4.js → chunk-SHYIMIX5.js} +2 -2
- package/dist/{chunk-IZANPXMV.js → chunk-T35UJI5R.js} +86 -82
- package/dist/chunk-T35UJI5R.js.map +1 -0
- package/dist/{chunk-G5OB4XZX.js → chunk-VANZKHTN.js} +4 -4
- package/dist/{chunk-I4TQST3L.js → chunk-VFS3MK5F.js} +2 -2
- package/dist/chunk-VUDMT5CP.js +86 -0
- package/dist/chunk-VUDMT5CP.js.map +1 -0
- package/dist/{chunk-CMQZNEIF.js → chunk-WFLBP5GC.js} +8 -1
- package/dist/chunk-WFLBP5GC.js.map +1 -0
- package/dist/{chunk-SMPVHGHG.js → chunk-WPZX7MEA.js} +3 -3
- package/dist/{chunk-ZRWB5D4H.js → chunk-WT6UL3UA.js} +2 -2
- package/dist/{chunk-DQEMWVMT.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-JHMAYABJ.js → chunk-XL3TATMJ.js} +4 -4
- package/dist/{chunk-MC6XO7T4.js → chunk-YLBE6PLR.js} +2 -2
- package/dist/{chunk-OLX2HJFW.js → chunk-YLHM5BQQ.js} +4 -4
- package/dist/{chunk-EZ25VE3G.js → chunk-YNDLCWXS.js} +4 -4
- package/dist/{chunk-GF22HWS2.js → chunk-Z54EM5YZ.js} +4 -4
- package/dist/{chunk-GVX3NAUU.js → chunk-ZDAYWJV6.js} +2 -2
- package/dist/{chunk-EYAIZBLM.js → chunk-ZJIFYUJI.js} +5 -5
- package/dist/{chunk-CNQQMB67.js → chunk-ZN4EYMKJ.js} +2 -2
- package/dist/{cli-PyAUaozE.d.ts → cli-BLNmNEMT.d.ts} +16 -14
- package/dist/cli.d.ts +13 -13
- package/dist/cli.js +96 -94
- package/dist/coding/pre-action-gate.d.ts +66 -0
- package/dist/coding/pre-action-gate.js +22 -0
- package/dist/commitment-ledger.js +2 -2
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +13 -13
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +12 -12
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +12 -12
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/consolidation-undo.js +3 -3
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/contradiction/index.js +3 -3
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +15 -15
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +23 -23
- package/dist/cue-anchors.d.ts +19 -1
- package/dist/cue-anchors.js +10 -2
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +10 -0
- package/dist/dependency-propagation-config.js +10 -0
- package/dist/dependency-propagation-config.js.map +1 -0
- package/dist/deterministic-order.d.ts +4 -0
- package/dist/deterministic-order.js +10 -0
- package/dist/deterministic-order.js.map +1 -0
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +12 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/evals.js +2 -2
- package/dist/explicit-capture.d.ts +8 -8
- package/dist/explicit-capture.js +6 -6
- package/dist/external-wiki-access.d.ts +10 -10
- package/dist/external-wiki-access.js +49 -49
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +10 -10
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +14 -0
- package/dist/extraction-normalization.js +22 -0
- package/dist/extraction-normalization.js.map +1 -0
- package/dist/extraction-prompt.d.ts +4 -3
- package/dist/extraction-prompt.js +3 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction.d.ts +18 -1
- package/dist/extraction.js +21 -19
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{first-start-migration-ZSHEFEI3.js → first-start-migration-626C5554.js} +5 -5
- package/dist/{forget-DNAJ66ZD.js → forget-GJ42LCBW.js} +2 -2
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-construction.d.ts +43 -0
- package/dist/harmonic-construction.js +26 -0
- package/dist/harmonic-construction.js.map +1 -0
- package/dist/harmonic-retrieval.d.ts +1 -0
- package/dist/harmonic-retrieval.js +10 -4
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +698 -696
- package/dist/index.js +207 -161
- package/dist/intent.d.ts +1 -1
- package/dist/json-store.d.ts +15 -1
- package/dist/json-store.js +11 -3
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +4 -4
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/archive-observations.js +2 -2
- package/dist/maintenance/atomic-file.d.ts +5 -0
- package/dist/maintenance/atomic-file.js +12 -0
- package/dist/maintenance/atomic-file.js.map +1 -0
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +12 -12
- package/dist/maintenance/migrate-observations.js +3 -3
- package/dist/maintenance/observation-ledger-utils.d.ts +1 -1
- package/dist/maintenance/observation-ledger-utils.js +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +13 -13
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +14 -14
- package/dist/maintenance/rebuild-observations.js +3 -3
- package/dist/{maintenance-j7sfNQdK.d.ts → maintenance-DKbKZi3u.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +10 -10
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +22 -22
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +9 -9
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +12 -12
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/objective-state-writers.js +3 -3
- package/dist/objective-state.js +2 -2
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/offline-sync-impression-drain.js +2 -2
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +24 -24
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +33 -32
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +18 -18
- package/dist/{orchestrator-Haa9xVPV.d.ts → orchestrator-BRwD7ceU.d.ts} +7 -7
- package/dist/orchestrator.d.ts +8 -8
- package/dist/orchestrator.js +132 -127
- package/dist/page-versioning.js +3 -3
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-1h2GpiHP.d.ts → pipeline-DC-1C9T8.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{qmd-UdwoF71D.d.ts → qmd-DdeCEZdb.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-state.js +2 -2
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/manifest.d.ts +1 -1
- package/dist/reconcile/plan.d.ts +1 -1
- package/dist/relevance.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/{resolution-3K27T4VO.js → resolution-MDPNOEG6.js} +4 -4
- package/dist/resolution-MDPNOEG6.js.map +1 -0
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +8 -7
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/salvage-envelope.js +3 -3
- package/dist/schemas.d.ts +213 -116
- package/dist/schemas.js +1 -1
- package/dist/{scope-profiles-APjhSe-w.d.ts → scope-profiles-BXVq4Jv0.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +8 -8
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +13 -13
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/lancedb-backend.js +2 -2
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.js +2 -2
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/orama-backend.js +2 -2
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-CrySDbk3.d.ts → semantic-consolidation-CGYxfa8F.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +13 -13
- package/dist/semantic-rule-promotion.js +12 -12
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +12 -12
- package/dist/{service-Da_BI4S8.d.ts → service-CBDBQFCN.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +11 -11
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +16 -16
- package/dist/{storage-D1apCiCS.d.ts → storage-V--MQi7w.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +11 -11
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.d.ts +13 -2
- package/dist/temporal-supersession.js +1 -1
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/{tier-stats-OPTSBNRH.js → tier-stats-2JCZYEF7.js} +5 -5
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +3 -3
- package/dist/transfer/capsule-import.js +5 -5
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/trust-zones.js +2 -2
- package/dist/{types-D_Au9qJO.d.ts → types-D_a6Sqjz.d.ts} +25 -8
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-learner.js +3 -3
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/utility-runtime.js +4 -4
- package/dist/utility-telemetry.js +2 -2
- package/dist/verified-recall.js +12 -12
- package/dist/work-product-ledger.js +2 -2
- package/dist/write-envelope.d.ts +1 -1
- package/dist/write-envelope.js +2 -2
- package/package.json +32 -2
- package/src/abstraction-nodes.ts +182 -4
- package/src/causal-trajectory.ts +258 -3
- package/src/cli/harmonic-search.ts +23 -0
- package/src/cli/research-status-commands.ts +2 -1
- package/src/cli.ts +1 -24
- package/src/coding/pre-action-gate.test.ts +516 -0
- package/src/coding/pre-action-gate.ts +320 -0
- package/src/config.test.ts +85 -0
- package/src/config.ts +2 -0
- package/src/cue-anchors.test.ts +90 -0
- package/src/cue-anchors.ts +264 -11
- package/src/dependency-frontmatter.test.ts +83 -0
- package/src/dependency-propagation-config.ts +94 -0
- package/src/deterministic-order.ts +14 -0
- package/src/extraction-normalization.ts +71 -0
- package/src/extraction-prompt.ts +45 -11
- package/src/extraction.ts +48 -32
- package/src/faithfulness-graph-guard.test.ts +27 -0
- package/src/harmonic-construction.test.ts +1799 -0
- package/src/harmonic-construction.ts +367 -0
- package/src/harmonic-retrieval.ts +166 -25
- package/src/index.ts +4 -5
- package/src/json-store.ts +354 -12
- package/src/orchestration/consolidation-run.ts +192 -0
- package/src/orchestration/contradiction-linking-coordinator.ts +35 -1
- package/src/orchestration/dependency-propagation-triggers.test.ts +286 -0
- package/src/orchestration/dependency-propagation.test.ts +487 -0
- package/src/orchestration/dependency-propagation.ts +263 -0
- package/src/orchestration/dependency-revalidation.ts +173 -0
- package/src/orchestration/extraction-persist-deps.ts +93 -0
- package/src/orchestration/extraction-persist.ts +101 -94
- package/src/orchestration/harmonic-construction-persist.ts +86 -0
- package/src/orchestration/recall-internal.ts +1 -0
- package/src/orchestrator.ts +2 -1
- package/src/schemas.ts +15 -0
- package/src/storage.ts +14 -0
- package/src/temporal-supersession.ts +29 -1
- package/src/testing/orchestrator-lite.ts +27 -8
- package/src/testing/subjects/extraction-lifecycle.test.ts +91 -50
- package/src/types.ts +22 -7
- package/dist/chunk-3S63QIFQ.js.map +0 -1
- package/dist/chunk-CMQZNEIF.js.map +0 -1
- package/dist/chunk-DNHVPZOD.js.map +0 -1
- package/dist/chunk-EY64JLOM.js.map +0 -1
- package/dist/chunk-FZZ2QTJI.js +0 -111
- package/dist/chunk-FZZ2QTJI.js.map +0 -1
- package/dist/chunk-IZANPXMV.js.map +0 -1
- package/dist/chunk-J7T4MX7P.js.map +0 -1
- package/dist/chunk-KVJRXN2E.js.map +0 -1
- package/dist/chunk-LPSF4OQH.js +0 -47
- package/dist/chunk-LPSF4OQH.js.map +0 -1
- package/dist/chunk-LZGCJSQR.js.map +0 -1
- package/dist/chunk-OADWQ5CR.js +0 -115
- package/dist/chunk-OADWQ5CR.js.map +0 -1
- package/dist/chunk-RN53QBM4.js.map +0 -1
- package/dist/chunk-W4FBGYGK.js.map +0 -1
- package/dist/chunk-YQIVWS7Y.js.map +0 -1
- /package/dist/{auto-sync-7O6RP2RT.js.map → auto-sync-QFQGOEO2.js.map} +0 -0
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-7FJQINUR.js.map} +0 -0
- /package/dist/{capsule-merge-6GFHWECG.js.map → capsule-merge-KXTRZ23Z.js.map} +0 -0
- /package/dist/{chunk-ICP53SKG.js.map → chunk-2HIJHXB3.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-5JRC6BYS.js.map → chunk-47J4EDGR.js.map} +0 -0
- /package/dist/{chunk-2VHLLPTX.js.map → chunk-4EABKPZS.js.map} +0 -0
- /package/dist/{chunk-RJV6Q2FT.js.map → chunk-4JWJMRPJ.js.map} +0 -0
- /package/dist/{chunk-MXPB6PJQ.js.map → chunk-4S3ECH3U.js.map} +0 -0
- /package/dist/{chunk-CGASUJVP.js.map → chunk-5V6IXHPI.js.map} +0 -0
- /package/dist/{chunk-R5IGA2NH.js.map → chunk-5XCN4XBU.js.map} +0 -0
- /package/dist/{chunk-2RPJ4NEE.js.map → chunk-64BHFFKZ.js.map} +0 -0
- /package/dist/{chunk-FQC3DHH2.js.map → chunk-66SE3BNH.js.map} +0 -0
- /package/dist/{chunk-TERNBNJB.js.map → chunk-6FC3IZ26.js.map} +0 -0
- /package/dist/{chunk-K7VKAHFE.js.map → chunk-6XGEBQ3R.js.map} +0 -0
- /package/dist/{chunk-JFLOOTXU.js.map → chunk-7BLWBSRL.js.map} +0 -0
- /package/dist/{chunk-ABR2HEJO.js.map → chunk-7NDM2PNK.js.map} +0 -0
- /package/dist/{chunk-JXZ7NLYH.js.map → chunk-7VWZ4LRW.js.map} +0 -0
- /package/dist/{chunk-R6YJI3HE.js.map → chunk-AW4QUFQF.js.map} +0 -0
- /package/dist/{chunk-P65YJEEL.js.map → chunk-AXFWMRKI.js.map} +0 -0
- /package/dist/{chunk-WG5HSQ4P.js.map → chunk-BAKXNQ3C.js.map} +0 -0
- /package/dist/{chunk-NM2WP3B7.js.map → chunk-BJYET5TX.js.map} +0 -0
- /package/dist/{chunk-HLKPRWF4.js.map → chunk-DATDLJAO.js.map} +0 -0
- /package/dist/{chunk-DX3XRGLH.js.map → chunk-DQTCGVFK.js.map} +0 -0
- /package/dist/{chunk-IPBNC77A.js.map → chunk-E633OXMH.js.map} +0 -0
- /package/dist/{chunk-Z5UC3OKB.js.map → chunk-ELQCS47S.js.map} +0 -0
- /package/dist/{chunk-FMXJ555A.js.map → chunk-EURCX6PS.js.map} +0 -0
- /package/dist/{chunk-MZZR3J6M.js.map → chunk-FV7YQTN3.js.map} +0 -0
- /package/dist/{chunk-3R6D33UF.js.map → chunk-GGBSF2X7.js.map} +0 -0
- /package/dist/{chunk-SYUBB3WM.js.map → chunk-GKEYXXKX.js.map} +0 -0
- /package/dist/{chunk-5AGR7SAI.js.map → chunk-GSEPRIZC.js.map} +0 -0
- /package/dist/{chunk-UTVZKHJK.js.map → chunk-GUKBW4HL.js.map} +0 -0
- /package/dist/{chunk-2F6NP3NT.js.map → chunk-HDQUQBPW.js.map} +0 -0
- /package/dist/{chunk-6HMYUWXR.js.map → chunk-HTP6XRUI.js.map} +0 -0
- /package/dist/{chunk-UYUYZ4WY.js.map → chunk-IARXXZU4.js.map} +0 -0
- /package/dist/{chunk-MNB5RMAY.js.map → chunk-IIFFC3RL.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-IPLYGWQF.js.map} +0 -0
- /package/dist/{chunk-NZBZ7IS2.js.map → chunk-JDCQK3C5.js.map} +0 -0
- /package/dist/{chunk-C3KVFJH5.js.map → chunk-JI62YGPI.js.map} +0 -0
- /package/dist/{chunk-LULR4IUW.js.map → chunk-KATEWTQJ.js.map} +0 -0
- /package/dist/{chunk-BMCHFWGX.js.map → chunk-KMWYZTIE.js.map} +0 -0
- /package/dist/{chunk-JGSKJHF7.js.map → chunk-KQS72GCR.js.map} +0 -0
- /package/dist/{chunk-2RIWJUSQ.js.map → chunk-LQKXVQZR.js.map} +0 -0
- /package/dist/{chunk-LQL7ARIC.js.map → chunk-LTOAJXZB.js.map} +0 -0
- /package/dist/{chunk-QKD65RGL.js.map → chunk-LYMNZZIM.js.map} +0 -0
- /package/dist/{chunk-3PY7VHV7.js.map → chunk-MCA2X4WH.js.map} +0 -0
- /package/dist/{chunk-S5NZBKKQ.js.map → chunk-N3CXAYPJ.js.map} +0 -0
- /package/dist/{chunk-WQIHRA5F.js.map → chunk-N3LL5NEU.js.map} +0 -0
- /package/dist/{chunk-Z4U6U3M3.js.map → chunk-NKL25FCF.js.map} +0 -0
- /package/dist/{chunk-LMDRGRJ2.js.map → chunk-NOB2T2FC.js.map} +0 -0
- /package/dist/{chunk-P2OTGMTR.js.map → chunk-NSGU76YO.js.map} +0 -0
- /package/dist/{chunk-L6DCVUCA.js.map → chunk-O76MWTVS.js.map} +0 -0
- /package/dist/{chunk-WZFAPHIK.js.map → chunk-OIOZ6MOP.js.map} +0 -0
- /package/dist/{chunk-UMOO7IY7.js.map → chunk-P2KBDJJ6.js.map} +0 -0
- /package/dist/{chunk-SXWHN7GC.js.map → chunk-PDEKQWDV.js.map} +0 -0
- /package/dist/{chunk-ENEA47UC.js.map → chunk-PLCHU56K.js.map} +0 -0
- /package/dist/{chunk-IXPKESVP.js.map → chunk-PWIMF7LP.js.map} +0 -0
- /package/dist/{chunk-RHTO4HTL.js.map → chunk-PWLB4TRK.js.map} +0 -0
- /package/dist/{chunk-RVYVMQK4.js.map → chunk-QSYL5CXK.js.map} +0 -0
- /package/dist/{chunk-B6KGGRUL.js.map → chunk-QWLW3VQH.js.map} +0 -0
- /package/dist/{chunk-JBPKEARU.js.map → chunk-RKNJBZ55.js.map} +0 -0
- /package/dist/{chunk-QCECHYZL.js.map → chunk-RVO6TCTU.js.map} +0 -0
- /package/dist/{chunk-SHDZNSK4.js.map → chunk-S2SJEOTM.js.map} +0 -0
- /package/dist/{chunk-ULWHRQEQ.js.map → chunk-S75UQ3T3.js.map} +0 -0
- /package/dist/{chunk-LXOM6IQU.js.map → chunk-SEF4IOFE.js.map} +0 -0
- /package/dist/{chunk-I3YHVVT4.js.map → chunk-SHYIMIX5.js.map} +0 -0
- /package/dist/{chunk-G5OB4XZX.js.map → chunk-VANZKHTN.js.map} +0 -0
- /package/dist/{chunk-I4TQST3L.js.map → chunk-VFS3MK5F.js.map} +0 -0
- /package/dist/{chunk-SMPVHGHG.js.map → chunk-WPZX7MEA.js.map} +0 -0
- /package/dist/{chunk-ZRWB5D4H.js.map → chunk-WT6UL3UA.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-JHMAYABJ.js.map → chunk-XL3TATMJ.js.map} +0 -0
- /package/dist/{chunk-MC6XO7T4.js.map → chunk-YLBE6PLR.js.map} +0 -0
- /package/dist/{chunk-OLX2HJFW.js.map → chunk-YLHM5BQQ.js.map} +0 -0
- /package/dist/{chunk-EZ25VE3G.js.map → chunk-YNDLCWXS.js.map} +0 -0
- /package/dist/{chunk-GF22HWS2.js.map → chunk-Z54EM5YZ.js.map} +0 -0
- /package/dist/{chunk-GVX3NAUU.js.map → chunk-ZDAYWJV6.js.map} +0 -0
- /package/dist/{chunk-EYAIZBLM.js.map → chunk-ZJIFYUJI.js.map} +0 -0
- /package/dist/{chunk-CNQQMB67.js.map → chunk-ZN4EYMKJ.js.map} +0 -0
- /package/dist/{resolution-3K27T4VO.js.map → coding/pre-action-gate.js.map} +0 -0
- /package/dist/{first-start-migration-ZSHEFEI3.js.map → first-start-migration-626C5554.js.map} +0 -0
- /package/dist/{forget-DNAJ66ZD.js.map → forget-GJ42LCBW.js.map} +0 -0
- /package/dist/{tier-stats-OPTSBNRH.js.map → tier-stats-2JCZYEF7.js.map} +0 -0
|
@@ -21,7 +21,8 @@ import { resolveNamespaceStorageRoot } from "../../namespaces/storage.js";
|
|
|
21
21
|
import type { BufferTurn, PluginConfig } from "../../types.js";
|
|
22
22
|
import {
|
|
23
23
|
cleanupDir,
|
|
24
|
-
|
|
24
|
+
harmonicNodeStoreStatus,
|
|
25
|
+
makeHarmonicLifecycleConfig,
|
|
25
26
|
markdownFilesUnder,
|
|
26
27
|
memoryFilesContaining,
|
|
27
28
|
mkTempMemoryDir,
|
|
@@ -29,12 +30,7 @@ import {
|
|
|
29
30
|
singleFactResult,
|
|
30
31
|
stubExtraction,
|
|
31
32
|
} from "../orchestrator-lite.js";
|
|
32
|
-
import {
|
|
33
|
-
type LifecycleSubject,
|
|
34
|
-
type MatrixRow,
|
|
35
|
-
type MatrixRowId,
|
|
36
|
-
runLifecycleMatrix,
|
|
37
|
-
} from "../lifecycle-matrix.js";
|
|
33
|
+
import { type LifecycleSubject, type MatrixRow, type MatrixRowId, runLifecycleMatrix } from "../lifecycle-matrix.js";
|
|
38
34
|
|
|
39
35
|
interface ExtractionLifecycleState {
|
|
40
36
|
memoryDir: string;
|
|
@@ -63,7 +59,7 @@ interface ExtractionLifecycleState {
|
|
|
63
59
|
|
|
64
60
|
/** Namespaces-on config with alice/bob principal prefix routing (identity rows). */
|
|
65
61
|
function namespacedConfig(memoryDir: string): PluginConfig {
|
|
66
|
-
return
|
|
62
|
+
return makeHarmonicLifecycleConfig(memoryDir, {
|
|
67
63
|
namespacesEnabled: true,
|
|
68
64
|
defaultNamespace: "default",
|
|
69
65
|
sharedNamespace: "shared",
|
|
@@ -94,7 +90,7 @@ const UNBOUND_SESSION = "unbound-session-0000";
|
|
|
94
90
|
|
|
95
91
|
/** Map-mode config where {@link REMEMBERED_SESSION} is bound to alice. */
|
|
96
92
|
function rememberedBindingConfig(memoryDir: string): PluginConfig {
|
|
97
|
-
return
|
|
93
|
+
return makeHarmonicLifecycleConfig(memoryDir, {
|
|
98
94
|
namespacesEnabled: true,
|
|
99
95
|
defaultNamespace: "default",
|
|
100
96
|
sharedNamespace: "shared",
|
|
@@ -111,6 +107,18 @@ const NAMESPACE_ROWS: Partial<Record<MatrixRowId, true>> = {
|
|
|
111
107
|
"provider-rebinding": true,
|
|
112
108
|
};
|
|
113
109
|
|
|
110
|
+
async function assertHarmonicEpisode(memoryDir: string, sessionKey?: string): Promise<void> {
|
|
111
|
+
const status = await harmonicNodeStoreStatus(memoryDir);
|
|
112
|
+
assert.equal(status.nodes.invalid, 0, "harmonic persistence must write only valid abstraction nodes");
|
|
113
|
+
assert.ok(status.nodes.valid > 0, "harmonic persistence must write an abstraction node");
|
|
114
|
+
assert.ok((status.nodes.byKind.episode ?? 0) > 0, "harmonic persistence must write an episode node");
|
|
115
|
+
assert.ok(
|
|
116
|
+
(status.latestNode?.sourceMemoryIds?.length ?? 0) > 0,
|
|
117
|
+
"the persisted episode must retain its source memory ids"
|
|
118
|
+
);
|
|
119
|
+
if (sessionKey) assert.equal(status.latestNode?.sessionKey, sessionKey);
|
|
120
|
+
}
|
|
121
|
+
|
|
114
122
|
const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
115
123
|
async setup(row: MatrixRow): Promise<ExtractionLifecycleState> {
|
|
116
124
|
const memoryDir = await mkTempMemoryDir(`extraction-${row.id}`);
|
|
@@ -122,15 +130,13 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
122
130
|
: NAMESPACE_ROWS[row.id]
|
|
123
131
|
? namespacedConfig(memoryDir)
|
|
124
132
|
: row.id === "dedupe-replay"
|
|
125
|
-
?
|
|
133
|
+
? makeHarmonicLifecycleConfig(memoryDir, {
|
|
126
134
|
extractionDedupeEnabled: true,
|
|
127
135
|
extractionDedupeWindowMs: 60_000,
|
|
128
136
|
})
|
|
129
|
-
:
|
|
137
|
+
: makeHarmonicLifecycleConfig(memoryDir);
|
|
130
138
|
primary = new Orchestrator(cfg);
|
|
131
|
-
const calls = stubExtraction(primary, (turns) =>
|
|
132
|
-
singleFactResult(turns.map((turn) => turn.content).join(" | ")),
|
|
133
|
-
);
|
|
139
|
+
const calls = stubExtraction(primary, (turns) => singleFactResult(turns.map((turn) => turn.content).join(" | ")));
|
|
134
140
|
return { memoryDir, cfg, orchestrators: [primary], calls };
|
|
135
141
|
} catch (err) {
|
|
136
142
|
// Transactional setup: a partial build must not leak the orchestrator or temp dir.
|
|
@@ -147,7 +153,7 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
147
153
|
await primary.processTurn(
|
|
148
154
|
"user",
|
|
149
155
|
"Please remember: alice uses the teal dashboard theme for staging telemetry.",
|
|
150
|
-
"alice:chat"
|
|
156
|
+
"alice:chat"
|
|
151
157
|
);
|
|
152
158
|
assert.equal(await primary.waitForExtractionIdle(15_000), true);
|
|
153
159
|
return;
|
|
@@ -158,6 +164,13 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
158
164
|
// on the turn, yet recall resolves through the same remembered binding.
|
|
159
165
|
const aliceRoot = await resolveNamespaceStorageRoot(state.cfg, "alice");
|
|
160
166
|
await seedFactFile(aliceRoot, "remembered-binding", "alice pins deploys to the us-east-2 region.");
|
|
167
|
+
await primary.processTurn(
|
|
168
|
+
"user",
|
|
169
|
+
"The harmonic lifecycle probe is retained for this sparse session.",
|
|
170
|
+
REMEMBERED_SESSION
|
|
171
|
+
);
|
|
172
|
+
await primary.flushSession(REMEMBERED_SESSION, { reason: "before_reset" });
|
|
173
|
+
assert.equal(await primary.waitForExtractionIdle(15_000), true);
|
|
161
174
|
return;
|
|
162
175
|
}
|
|
163
176
|
case "sparse-metadata-without-binding": {
|
|
@@ -165,18 +178,25 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
165
178
|
// remembered binding to her — recall must not fabricate one to reach it.
|
|
166
179
|
const aliceRoot = await resolveNamespaceStorageRoot(state.cfg, "alice");
|
|
167
180
|
await seedFactFile(aliceRoot, "unbound", "alice pins deploys to the us-east-2 region.");
|
|
181
|
+
await primary.processTurn(
|
|
182
|
+
"user",
|
|
183
|
+
"The harmonic lifecycle probe is retained for this unbound session.",
|
|
184
|
+
UNBOUND_SESSION
|
|
185
|
+
);
|
|
186
|
+
await primary.flushSession(UNBOUND_SESSION, { reason: "before_reset" });
|
|
187
|
+
assert.equal(await primary.waitForExtractionIdle(15_000), true);
|
|
168
188
|
return;
|
|
169
189
|
}
|
|
170
190
|
case "provider-rebinding": {
|
|
171
191
|
await primary.processTurn(
|
|
172
192
|
"user",
|
|
173
193
|
"Please remember: alice uses the teal dashboard theme for staging telemetry.",
|
|
174
|
-
"alice:chat"
|
|
194
|
+
"alice:chat"
|
|
175
195
|
);
|
|
176
196
|
await primary.processTurn(
|
|
177
197
|
"user",
|
|
178
198
|
"Please remember: bob files quarterly billing reconciliation in the ledger spreadsheet.",
|
|
179
|
-
"bob:chat"
|
|
199
|
+
"bob:chat"
|
|
180
200
|
);
|
|
181
201
|
assert.equal(await primary.waitForExtractionIdle(15_000), true);
|
|
182
202
|
return;
|
|
@@ -185,22 +205,21 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
185
205
|
await primary.processTurn(
|
|
186
206
|
"user",
|
|
187
207
|
"Please remember: the failover drill rehearses the read-replica promotion path.",
|
|
188
|
-
"session-flushed"
|
|
208
|
+
"session-flushed"
|
|
189
209
|
);
|
|
190
210
|
assert.equal(await primary.waitForExtractionIdle(15_000), true);
|
|
191
211
|
// Park a second session's turn WITHOUT flushing, then restart.
|
|
192
212
|
await primary.processTurn(
|
|
193
213
|
"user",
|
|
194
214
|
"The quota reconciler defers negative balances to manual review.",
|
|
195
|
-
"session-parked"
|
|
215
|
+
"session-parked"
|
|
196
216
|
);
|
|
197
217
|
await primary.destroy();
|
|
198
218
|
state.orchestrators.length = 0;
|
|
199
|
-
|
|
200
|
-
const second = new Orchestrator(makeLifecycleConfig(state.memoryDir));
|
|
219
|
+
const second = new Orchestrator(makeHarmonicLifecycleConfig(state.memoryDir));
|
|
201
220
|
state.orchestrators.push(second);
|
|
202
221
|
state.restartCalls = stubExtraction(second, (turns) =>
|
|
203
|
-
singleFactResult(turns.map((turn) => turn.content).join(" | "))
|
|
222
|
+
singleFactResult(turns.map((turn) => turn.content).join(" | "))
|
|
204
223
|
);
|
|
205
224
|
// Drain the buffer that survived the restart (state/buffer.json).
|
|
206
225
|
await second.flushSession("session-parked", { reason: "session_end" });
|
|
@@ -222,7 +241,11 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
222
241
|
// `before_clear_buffer`) must abort BEFORE the buffer is cleared, so a
|
|
223
242
|
// timed-out reset cannot drop turns. Falsifiable (acceptance #1993):
|
|
224
243
|
// dropping the abortSignal threading fails THIS row and only this row.
|
|
225
|
-
await primary.processTurn(
|
|
244
|
+
await primary.processTurn(
|
|
245
|
+
"user",
|
|
246
|
+
"The replay ledger checkpoint compacts after five hundred entries.",
|
|
247
|
+
"session-reset"
|
|
248
|
+
);
|
|
226
249
|
const controller = new AbortController();
|
|
227
250
|
// Rewire the seam: extraction succeeds but trips the abort mid-flight.
|
|
228
251
|
state.abortFlushCalls = stubExtraction(primary, (turns) => {
|
|
@@ -245,7 +268,7 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
245
268
|
// itself succeed — swallowing its failure would let a recovery-flush
|
|
246
269
|
// regression pass vacuously (the extraction call still bumps the count).
|
|
247
270
|
state.secondFlushCalls = stubExtraction(primary, (turns) =>
|
|
248
|
-
singleFactResult(turns.map((turn) => turn.content).join(" | "))
|
|
271
|
+
singleFactResult(turns.map((turn) => turn.content).join(" | "))
|
|
249
272
|
);
|
|
250
273
|
await primary.flushSession("session-reset", { reason: "before_reset" });
|
|
251
274
|
// The recovery flush must PERSIST the preserved turn as a fact...
|
|
@@ -260,7 +283,11 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
260
283
|
return;
|
|
261
284
|
}
|
|
262
285
|
case "session-end": {
|
|
263
|
-
await primary.processTurn(
|
|
286
|
+
await primary.processTurn(
|
|
287
|
+
"user",
|
|
288
|
+
"The nightly compaction sweep runs after the backup snapshot.",
|
|
289
|
+
"session-end"
|
|
290
|
+
);
|
|
264
291
|
await primary.flushSession("session-end", { reason: "session_end" });
|
|
265
292
|
return;
|
|
266
293
|
}
|
|
@@ -287,6 +314,7 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
287
314
|
|
|
288
315
|
async invariants(state: ExtractionLifecycleState, row: MatrixRow): Promise<void> {
|
|
289
316
|
const primary = state.orchestrators[0];
|
|
317
|
+
assert.equal(state.cfg.harmonicRetrievalEnabled, true, "every lifecycle row enables harmonic persistence");
|
|
290
318
|
switch (row.id) {
|
|
291
319
|
case "explicit-provider-identity": {
|
|
292
320
|
const aliceRoot = await resolveNamespaceStorageRoot(state.cfg, "alice");
|
|
@@ -295,19 +323,22 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
295
323
|
assert.equal(
|
|
296
324
|
(await markdownFilesUnder(path.join(state.memoryDir, "facts"))).length,
|
|
297
325
|
0,
|
|
298
|
-
"an identity-routed write must not land in the default root"
|
|
326
|
+
"an identity-routed write must not land in the default root"
|
|
299
327
|
);
|
|
300
328
|
const context = await primary.recall("Which dashboard theme is used for staging telemetry?", "alice:chat");
|
|
301
329
|
assert.match(context, /teal dashboard theme/i);
|
|
330
|
+
await assertHarmonicEpisode(aliceRoot);
|
|
302
331
|
return;
|
|
303
332
|
}
|
|
304
333
|
case "sparse-metadata-with-binding": {
|
|
334
|
+
const aliceRoot = await resolveNamespaceStorageRoot(state.cfg, "alice");
|
|
305
335
|
const context = await primary.recall("Which region does alice pin deploys to?", REMEMBERED_SESSION);
|
|
306
336
|
assert.match(
|
|
307
337
|
context,
|
|
308
338
|
/us-east-2/i,
|
|
309
|
-
"a sparse session key that does not encode alice recalls her memory ONLY through the remembered binding"
|
|
339
|
+
"a sparse session key that does not encode alice recalls her memory ONLY through the remembered binding"
|
|
310
340
|
);
|
|
341
|
+
await assertHarmonicEpisode(aliceRoot);
|
|
311
342
|
return;
|
|
312
343
|
}
|
|
313
344
|
case "sparse-metadata-without-binding": {
|
|
@@ -317,13 +348,14 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
317
348
|
assert.doesNotMatch(
|
|
318
349
|
context,
|
|
319
350
|
/us-east-2/i,
|
|
320
|
-
"an unbound sparse session must NOT reach alice's memory — no binding may be fabricated"
|
|
351
|
+
"an unbound sparse session must NOT reach alice's memory — no binding may be fabricated"
|
|
321
352
|
);
|
|
322
353
|
assert.equal(
|
|
323
354
|
(await markdownFilesUnder(aliceRoot)).length,
|
|
324
355
|
seededFiles,
|
|
325
|
-
"a recall with no binding must not create phantom memory files"
|
|
356
|
+
"a recall with no binding must not create phantom memory files"
|
|
326
357
|
);
|
|
358
|
+
await assertHarmonicEpisode(state.memoryDir);
|
|
327
359
|
return;
|
|
328
360
|
}
|
|
329
361
|
case "provider-rebinding": {
|
|
@@ -334,94 +366,103 @@ const subject: LifecycleSubject<ExtractionLifecycleState> = {
|
|
|
334
366
|
assert.equal((await memoryFilesContaining(aliceRoot, "ledger spreadsheet")).length, 0);
|
|
335
367
|
const aliceContext = await primary.recall("Which dashboard theme is used for staging telemetry?", "alice:chat");
|
|
336
368
|
assert.doesNotMatch(aliceContext, /ledger spreadsheet/i, "a rebind must not leak the prior identity's memory");
|
|
369
|
+
await assertHarmonicEpisode(aliceRoot);
|
|
370
|
+
await assertHarmonicEpisode(bobRoot);
|
|
337
371
|
return;
|
|
338
372
|
}
|
|
339
373
|
case "restart-reload-recovery": {
|
|
340
374
|
const second = state.orchestrators[0];
|
|
341
375
|
assert.ok(state.restartCalls, "the restarted instance must have a recorded drain");
|
|
342
376
|
assert.equal(state.restartCalls.length, 1, "the new instance flushes the buffer parked before restart");
|
|
343
|
-
assert.deepEqual(
|
|
344
|
-
|
|
345
|
-
|
|
377
|
+
assert.deepEqual(
|
|
378
|
+
state.restartCalls[0]?.map((turn) => turn.content),
|
|
379
|
+
["The quota reconciler defers negative balances to manual review."]
|
|
380
|
+
);
|
|
346
381
|
const context = await second.recall("How does the failover drill handle read-replica promotion?", "reader");
|
|
347
382
|
assert.match(context, /read-replica promotion/i, "prior persisted memory survives the restart");
|
|
348
383
|
assert.equal(
|
|
349
384
|
(await memoryFilesContaining(path.join(state.memoryDir, "facts"), "quota reconciler")).length,
|
|
350
385
|
1,
|
|
351
|
-
"the parked buffer's turn persists after the restart drain"
|
|
386
|
+
"the parked buffer's turn persists after the restart drain"
|
|
352
387
|
);
|
|
388
|
+
await assertHarmonicEpisode(state.memoryDir);
|
|
353
389
|
return;
|
|
354
390
|
}
|
|
355
391
|
case "compaction-flush": {
|
|
356
392
|
assert.equal(state.calls.length, 1, "the flush compacts the buffered turns into one extraction");
|
|
357
|
-
assert.deepEqual(
|
|
358
|
-
|
|
359
|
-
"Noted the Tuesday deploy train departure."
|
|
360
|
-
|
|
393
|
+
assert.deepEqual(
|
|
394
|
+
state.calls[0]?.map((turn) => turn.content),
|
|
395
|
+
["The deploy train departs at nine on Tuesdays.", "Noted the Tuesday deploy train departure."]
|
|
396
|
+
);
|
|
361
397
|
assert.equal(
|
|
362
398
|
(await memoryFilesContaining(path.join(state.memoryDir, "facts"), "deploy train departs")).length,
|
|
363
|
-
1
|
|
399
|
+
1
|
|
364
400
|
);
|
|
401
|
+
await assertHarmonicEpisode(state.memoryDir);
|
|
365
402
|
return;
|
|
366
403
|
}
|
|
367
404
|
case "before-reset": {
|
|
368
405
|
assert.equal(
|
|
369
406
|
state.abortFlushRejected,
|
|
370
407
|
true,
|
|
371
|
-
"the aborted before_reset flush must reject — the abort tripped mid-flush, not a silent success"
|
|
408
|
+
"the aborted before_reset flush must reject — the abort tripped mid-flush, not a silent success"
|
|
372
409
|
);
|
|
373
410
|
assert.ok(state.abortFlushCalls, "the aborting flush's extraction calls must be recorded");
|
|
374
411
|
assert.equal(
|
|
375
412
|
state.abortFlushCalls.length,
|
|
376
413
|
1,
|
|
377
|
-
"the abort must trip AFTER exactly one extraction attempt — a reject before extraction ran (length 0) would mean the mid-extraction abort path was never exercised"
|
|
414
|
+
"the abort must trip AFTER exactly one extraction attempt — a reject before extraction ran (length 0) would mean the mid-extraction abort path was never exercised"
|
|
378
415
|
);
|
|
379
416
|
assert.equal(
|
|
380
417
|
state.abortedWriteCount,
|
|
381
418
|
0,
|
|
382
|
-
"the aborted before_reset flush must persist nothing — the abort guards before_persist, so no fact is written before the buffer-preserving recovery flush"
|
|
419
|
+
"the aborted before_reset flush must persist nothing — the abort guards before_persist, so no fact is written before the buffer-preserving recovery flush"
|
|
383
420
|
);
|
|
384
421
|
assert.ok(state.secondFlushCalls, "a re-flush must have been recorded");
|
|
385
422
|
assert.equal(
|
|
386
423
|
state.secondFlushCalls.length,
|
|
387
424
|
1,
|
|
388
|
-
"a timed-out before_reset must NOT clear the buffer — the re-flush re-extracts the preserved turn"
|
|
425
|
+
"a timed-out before_reset must NOT clear the buffer — the re-flush re-extracts the preserved turn"
|
|
426
|
+
);
|
|
427
|
+
assert.deepEqual(
|
|
428
|
+
state.secondFlushCalls[0]?.map((turn) => turn.content),
|
|
429
|
+
["The replay ledger checkpoint compacts after five hundred entries."]
|
|
389
430
|
);
|
|
390
|
-
assert.deepEqual(state.secondFlushCalls[0]?.map((turn) => turn.content), [
|
|
391
|
-
"The replay ledger checkpoint compacts after five hundred entries.",
|
|
392
|
-
]);
|
|
393
431
|
assert.equal(
|
|
394
432
|
state.recoveredFactCount,
|
|
395
433
|
1,
|
|
396
|
-
"the recovery flush must PERSIST the preserved turn as exactly one fact"
|
|
434
|
+
"the recovery flush must PERSIST the preserved turn as exactly one fact"
|
|
397
435
|
);
|
|
398
436
|
assert.equal(
|
|
399
437
|
state.factCountAfterExtraFlush,
|
|
400
438
|
1,
|
|
401
|
-
"a further before_reset flush with an empty buffer must NOT duplicate the recovered fact"
|
|
439
|
+
"a further before_reset flush with an empty buffer must NOT duplicate the recovered fact"
|
|
402
440
|
);
|
|
441
|
+
await assertHarmonicEpisode(state.memoryDir);
|
|
403
442
|
return;
|
|
404
443
|
}
|
|
405
444
|
case "session-end": {
|
|
406
445
|
assert.equal(state.calls.length, 1, "session_end drains the buffer like before_reset");
|
|
407
446
|
assert.equal(
|
|
408
447
|
(await memoryFilesContaining(path.join(state.memoryDir, "facts"), "nightly compaction sweep")).length,
|
|
409
|
-
1
|
|
448
|
+
1
|
|
410
449
|
);
|
|
450
|
+
await assertHarmonicEpisode(state.memoryDir);
|
|
411
451
|
return;
|
|
412
452
|
}
|
|
413
453
|
case "dedupe-replay": {
|
|
414
454
|
assert.equal(
|
|
415
455
|
state.callsBeforeForceFlush,
|
|
416
456
|
1,
|
|
417
|
-
"the in-window duplicate must be suppressed — exactly one extraction before the force flush"
|
|
457
|
+
"the in-window duplicate must be suppressed — exactly one extraction before the force flush"
|
|
418
458
|
);
|
|
419
459
|
assert.equal(state.calls.length, 2, "the force flush bypasses the dedupe fingerprint and re-extracts");
|
|
420
460
|
assert.match(
|
|
421
461
|
(state.calls[1] ?? []).map((turn) => turn.content).join(" "),
|
|
422
462
|
/canary gate/,
|
|
423
|
-
"the second extraction is the force-flushed duplicate, not a no-op"
|
|
463
|
+
"the second extraction is the force-flushed duplicate, not a no-op"
|
|
424
464
|
);
|
|
465
|
+
await assertHarmonicEpisode(state.memoryDir);
|
|
425
466
|
return;
|
|
426
467
|
}
|
|
427
468
|
default: {
|
package/src/types.ts
CHANGED
|
@@ -624,6 +624,19 @@ export interface ContradictionScanConfig {
|
|
|
624
624
|
/** When true, pairs judged "duplicates" are auto-flagged for dedup (still need user approval). Default false. */
|
|
625
625
|
autoMergeDuplicates: boolean;
|
|
626
626
|
}
|
|
627
|
+
export interface DependencyPropagationConfig {
|
|
628
|
+
/** Master switch. Default false. */
|
|
629
|
+
enabled: boolean;
|
|
630
|
+
/** Link types that can identify one-hop dependents. */
|
|
631
|
+
linkTypes: Array<"supports" | "follows" | "references">;
|
|
632
|
+
/** Maximum active dependents to revalidate. `0` disables propagation. */
|
|
633
|
+
maxDependents: number;
|
|
634
|
+
/** Maximum duration of the single batched revalidation call, in milliseconds. */
|
|
635
|
+
timeoutMs: number;
|
|
636
|
+
/** Discover and revalidate dependents without writing supersession changes. */
|
|
637
|
+
dryRun: boolean;
|
|
638
|
+
}
|
|
639
|
+
|
|
627
640
|
|
|
628
641
|
export interface HeartbeatConfig {
|
|
629
642
|
enabled: boolean;
|
|
@@ -847,6 +860,8 @@ export interface PluginConfig extends BoundedJsonlStateConfig {
|
|
|
847
860
|
contradictionAutoResolve: boolean;
|
|
848
861
|
/** Nightly contradiction-scan cron config (issue #520). */
|
|
849
862
|
contradictionScan: ContradictionScanConfig;
|
|
863
|
+
/** One-hop dependency invalidation propagation settings (issue #2326). */
|
|
864
|
+
dependencyPropagation: DependencyPropagationConfig;
|
|
850
865
|
// Temporal Supersession (issue #375)
|
|
851
866
|
/**
|
|
852
867
|
* When enabled, writes that carry `structuredAttributes` mark any older
|
|
@@ -2821,6 +2836,10 @@ export interface MemoryFrontmatter extends SourceConnectorProvenance {
|
|
|
2821
2836
|
supersededBy?: string;
|
|
2822
2837
|
/** Timestamp when superseded */
|
|
2823
2838
|
supersededAt?: string;
|
|
2839
|
+
/** Why this memory was superseded. Absent means legacy/direct. */
|
|
2840
|
+
supersessionCause?: "direct" | "dependency";
|
|
2841
|
+
/** ID of the superseded memory that caused dependency invalidation. */
|
|
2842
|
+
invalidatedBy?: string;
|
|
2824
2843
|
/** Timestamp when archived */
|
|
2825
2844
|
archivedAt?: string;
|
|
2826
2845
|
/**
|
|
@@ -3202,14 +3221,9 @@ export interface ExtractedFact {
|
|
|
3202
3221
|
confidence: number;
|
|
3203
3222
|
tags: string[];
|
|
3204
3223
|
entityRef?: string;
|
|
3224
|
+
cueAnchors?: Array<{ type: "entity" | "file" | "tool" | "outcome" | "constraint" | "date"; value: string }>;
|
|
3205
3225
|
source?: ExtractionPassSource;
|
|
3206
|
-
/**
|
|
3207
|
-
* Claim-level provenance spans backing this fact (issue #1575).
|
|
3208
|
-
* Populated by the PR 2 extraction validator when `provenance.enabled`
|
|
3209
|
-
* is true. Absent for legacy extractions — downstream consumers (the
|
|
3210
|
-
* faithfulness gate #1576, TrustScore #1577) MUST treat absent as
|
|
3211
|
-
* "no verified span" and skip gracefully.
|
|
3212
|
-
*/
|
|
3226
|
+
/** Claim-level provenance spans. Missing spans fail closed when verification requires them. */
|
|
3213
3227
|
sources?: ProvenanceSource[];
|
|
3214
3228
|
/**
|
|
3215
3229
|
* Coarse provenance strength tag (issue #1575 PR 2). Set by the extraction
|
|
@@ -3327,6 +3341,7 @@ export interface ExtractionResult {
|
|
|
3327
3341
|
entities: EntityMention[];
|
|
3328
3342
|
questions: ExtractedQuestion[];
|
|
3329
3343
|
identityReflection?: string;
|
|
3344
|
+
episodeTitle?: string;
|
|
3330
3345
|
relationships?: ExtractedRelationship[];
|
|
3331
3346
|
extractionFailure?: string;
|
|
3332
3347
|
/** Coarse class used by the retry/backoff + circuit-breaker layer (extraction hot loop). */
|