@remnic/core 9.4.0 → 9.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +5 -5
- package/dist/access-admin-ops-surface.js +22 -21
- package/dist/access-boundary.d.ts +5 -5
- package/dist/access-boundary.js +23 -22
- package/dist/access-cli.js +63 -62
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +5 -5
- package/dist/access-http.js +31 -30
- package/dist/access-identity-continuity-surface.d.ts +4 -4
- package/dist/access-identity-continuity-surface.js +22 -21
- package/dist/access-lcm-surface.d.ts +5 -5
- package/dist/access-lcm-surface.js +22 -21
- package/dist/access-mcp.d.ts +5 -5
- package/dist/access-mcp.js +27 -26
- package/dist/access-observe-write-surface.d.ts +5 -5
- package/dist/access-observe-write-surface.js +22 -21
- package/dist/access-operations-batch.js +24 -23
- package/dist/access-operations.d.ts +9 -9
- package/dist/access-operations.js +26 -25
- package/dist/access-recall-surface.d.ts +5 -5
- package/dist/access-recall-surface.js +22 -21
- package/dist/access-schema.d.ts +68 -68
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-CdW6B2qQ.d.ts → access-service-m-2VO_Ig.d.ts} +3 -3
- package/dist/access-service.d.ts +5 -5
- package/dist/access-service.js +22 -21
- package/dist/access-surface-catalog.d.ts +5 -5
- 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 +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/{auto-sync-M47VTCFI.js → auto-sync-HMHQHUAG.js} +4 -4
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +4 -4
- package/dist/briefing.d.ts +1 -1
- package/dist/briefing.js +5 -5
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.d.ts +1 -1
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-bflYNWsM.d.ts → catalog-BxWokdC2.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +6 -6
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-TKUQSXU4.js → chunk-27FLVMDC.js} +12 -12
- package/dist/{chunk-XXEOGY77.js → chunk-2FOD2YY3.js} +7 -7
- package/dist/{chunk-6Y4JTNX7.js → chunk-2MR3MFQB.js} +2 -2
- package/dist/{chunk-AU7Q3LSC.js → chunk-2QSZNTDO.js} +4 -4
- package/dist/{chunk-64ZYXSCO.js → chunk-2U2A5HF4.js} +10 -4
- package/dist/chunk-2U2A5HF4.js.map +1 -0
- package/dist/{chunk-RBGL4MKQ.js → chunk-3F4N4WDH.js} +75 -110
- package/dist/chunk-3F4N4WDH.js.map +1 -0
- package/dist/{chunk-4NMATTXV.js → chunk-4BFRBP45.js} +2 -2
- package/dist/{chunk-L4UZBJNM.js → chunk-4P4626RY.js} +4 -4
- package/dist/{chunk-XZJMIJLW.js → chunk-5QZDMSSN.js} +29 -29
- package/dist/chunk-64UDOIMI.js +121 -0
- package/dist/chunk-64UDOIMI.js.map +1 -0
- package/dist/{chunk-H2EJNV2Z.js → chunk-66FLU5BT.js} +2 -2
- package/dist/{chunk-MWH5MAFP.js → chunk-6BISDEN6.js} +5 -5
- package/dist/{chunk-VBVSN2TV.js → chunk-6ZIETXZ2.js} +2 -2
- package/dist/{chunk-42BBIR33.js → chunk-7N2RUBAP.js} +2 -2
- package/dist/{chunk-UQI2NHTY.js → chunk-7QWMTOIF.js} +37 -37
- package/dist/{chunk-QICQ35K5.js → chunk-7Z2DZNWN.js} +17 -8
- package/dist/{chunk-QICQ35K5.js.map → chunk-7Z2DZNWN.js.map} +1 -1
- package/dist/{chunk-JI5AVXYO.js → chunk-AKUCU7CI.js} +5 -5
- package/dist/{chunk-FT37KV7R.js → chunk-BGTAL46Y.js} +2 -2
- package/dist/{chunk-7VFZTJ7K.js → chunk-BV2TIZ4F.js} +2 -2
- package/dist/{chunk-FWPHPN3V.js → chunk-CLX5VDNY.js} +5 -5
- package/dist/{chunk-TH2KIPP7.js → chunk-CZAA5N5S.js} +2 -2
- package/dist/{chunk-7BAJAXGB.js → chunk-CZAZX7JP.js} +4 -4
- package/dist/{chunk-APMGGGTY.js → chunk-DGYCWCQ7.js} +2 -2
- package/dist/{chunk-GEVIE5NV.js → chunk-DR6PEJU3.js} +4 -4
- package/dist/{chunk-2TCZE3C2.js → chunk-EPGWWCZF.js} +2 -2
- package/dist/{chunk-OUXPVWTZ.js → chunk-FLVL4L3L.js} +5 -5
- package/dist/{chunk-YPL66L3U.js → chunk-FZGGZAAU.js} +2 -2
- package/dist/{chunk-XOE5DYQL.js → chunk-HRCACVHL.js} +2 -2
- package/dist/{chunk-KS4PRHRD.js → chunk-IC6QX5TC.js} +2 -2
- package/dist/{chunk-H25TAODC.js → chunk-ILFJ7AVS.js} +4 -4
- package/dist/{chunk-UQMCR5RW.js → chunk-JLR3JSTL.js} +3 -3
- package/dist/{chunk-5H56JAHW.js → chunk-KCJ5H6XQ.js} +2 -2
- package/dist/{chunk-H5IT5JL7.js → chunk-LOR6ZM5R.js} +3 -3
- package/dist/{chunk-VBBMTSOV.js → chunk-M7GGMGMZ.js} +6 -6
- package/dist/{chunk-G47FEGGK.js → chunk-NG7YBCJO.js} +4 -4
- package/dist/{chunk-QGS7Z7YU.js → chunk-OHDJ34CC.js} +2 -2
- package/dist/{chunk-UAOZJX5J.js → chunk-P6SYWE4G.js} +53 -6
- package/dist/chunk-P6SYWE4G.js.map +1 -0
- package/dist/{chunk-LLMZK53N.js → chunk-PUBTHW5O.js} +2 -2
- package/dist/{chunk-AGNBY3VG.js → chunk-PYHOAXTI.js} +2 -2
- package/dist/{chunk-SXN3LCUT.js → chunk-RHOZ5LLO.js} +100 -4
- package/dist/chunk-RHOZ5LLO.js.map +1 -0
- package/dist/{chunk-6KYMPV2O.js → chunk-RL6NEVXT.js} +45 -2
- package/dist/chunk-RL6NEVXT.js.map +1 -0
- package/dist/{chunk-7WV3F5DQ.js → chunk-V7IZKJI3.js} +2 -2
- package/dist/{chunk-IGF4DII6.js → chunk-X4A62ET7.js} +9 -9
- package/dist/{chunk-OH6BKCPB.js → chunk-XN3TUUX2.js} +2 -2
- package/dist/{chunk-5K5VEDFY.js → chunk-YDSWRD33.js} +4 -4
- package/dist/{chunk-ABGDGBDT.js → chunk-YPEMNNNY.js} +2 -2
- package/dist/{chunk-YM7IEUO7.js → chunk-ZPOROUTX.js} +2 -2
- package/dist/{cli-Dfnc66gs.d.ts → cli-EiBBOt3r.d.ts} +3 -3
- package/dist/cli.d.ts +6 -6
- package/dist/cli.js +51 -50
- package/dist/compounding/engine.d.ts +1 -1
- package/dist/compounding/engine.js +5 -5
- 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 +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +5 -5
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +5 -5
- package/dist/consolidation-provenance-check.d.ts +1 -1
- package/dist/consolidation-undo.d.ts +1 -1
- package/dist/contradiction/index.d.ts +1 -1
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/backend.js +2 -2
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +1 -1
- package/dist/entity-retrieval.js +5 -5
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +4 -4
- 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.d.ts +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index.d.ts +17 -12
- package/dist/index.js +79 -78
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +6 -6
- package/dist/lcm/schema.js +2 -2
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +5 -5
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +5 -5
- package/dist/maintenance/rebuild-memory-projection.js +6 -6
- package/dist/mcp-memory-inspector-app.d.ts +5 -5
- 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 +23 -3
- package/dist/memory-projection-store.js +9 -2
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-worth-outcomes.d.ts +1 -1
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +2 -2
- package/dist/namespaces/migrate.js +17 -16
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +11 -10
- package/dist/namespaces/storage.d.ts +2 -2
- package/dist/namespaces/storage.js +5 -5
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +11 -2
- package/dist/operator-toolkit.js +23 -20
- package/dist/orchestration/compression-guideline-coordinator.d.ts +1 -1
- package/dist/orchestration/maintenance.d.ts +2 -2
- package/dist/orchestration/maintenance.js +7 -7
- package/dist/{orchestrator-Y9wyG4jK.d.ts → orchestrator-B2Y28Z9t.d.ts} +3 -3
- package/dist/orchestrator.d.ts +4 -4
- package/dist/orchestrator.js +63 -62
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{purge-IHRX4Z7X.js → purge-NDWV6WYD.js} +4 -3
- package/dist/{purge-IHRX4Z7X.js.map → purge-NDWV6WYD.js.map} +1 -1
- package/dist/qmd-Db9mOkzB.d.ts +330 -0
- package/dist/qmd-preflight.d.ts +5 -0
- package/dist/qmd-preflight.js +31 -0
- package/dist/qmd-preflight.js.map +1 -0
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +3 -305
- package/dist/qmd.js +10 -8
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray.d.ts +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- 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/runtime/better-sqlite.d.ts +17 -1
- package/dist/runtime/better-sqlite.js +5 -3
- package/dist/schemas.d.ts +62 -62
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +10 -9
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +15 -14
- 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-bfXJNKVf.d.ts → semantic-consolidation-BDVIbLRw.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +6 -6
- package/dist/semantic-rule-promotion.js +5 -5
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +5 -5
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/session-transcript-migration.js +2 -2
- package/dist/shared-context/manager.d.ts +9 -9
- package/dist/signal.d.ts +1 -1
- package/dist/storage.d.ts +1 -1
- package/dist/storage.js +4 -4
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/temporal-supersession.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 +1 -1
- package/dist/tier-routing.d.ts +1 -1
- 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 +1 -1
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/export-sqlite.js +2 -2
- package/dist/transfer/import-sqlite.js +2 -2
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-D1iBqhJA.d.ts → types-ljkd82rn.d.ts} +13 -1
- package/dist/types.d.ts +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +5 -5
- package/package.json +2 -2
- package/src/memory-projection-open-failure.test.ts +322 -0
- package/src/memory-projection-store.ts +179 -2
- package/src/operator-toolkit.ts +64 -0
- package/src/qmd-preflight.test.ts +197 -0
- package/src/qmd-preflight.ts +167 -0
- package/src/qmd.ts +115 -129
- package/src/runtime/better-sqlite.test.ts +54 -0
- package/src/runtime/better-sqlite.ts +83 -3
- package/src/wearables/cleanup.test.ts +56 -0
- package/src/wearables/cleanup.ts +22 -1
- package/src/wearables/config.test.ts +25 -0
- package/src/wearables/config.ts +31 -4
- package/src/wearables/types.ts +12 -1
- package/dist/chunk-64ZYXSCO.js.map +0 -1
- package/dist/chunk-6KYMPV2O.js.map +0 -1
- package/dist/chunk-RBGL4MKQ.js.map +0 -1
- package/dist/chunk-SXN3LCUT.js.map +0 -1
- package/dist/chunk-UAOZJX5J.js.map +0 -1
- /package/dist/{auto-sync-M47VTCFI.js.map → auto-sync-HMHQHUAG.js.map} +0 -0
- /package/dist/{chunk-TKUQSXU4.js.map → chunk-27FLVMDC.js.map} +0 -0
- /package/dist/{chunk-XXEOGY77.js.map → chunk-2FOD2YY3.js.map} +0 -0
- /package/dist/{chunk-6Y4JTNX7.js.map → chunk-2MR3MFQB.js.map} +0 -0
- /package/dist/{chunk-AU7Q3LSC.js.map → chunk-2QSZNTDO.js.map} +0 -0
- /package/dist/{chunk-4NMATTXV.js.map → chunk-4BFRBP45.js.map} +0 -0
- /package/dist/{chunk-L4UZBJNM.js.map → chunk-4P4626RY.js.map} +0 -0
- /package/dist/{chunk-XZJMIJLW.js.map → chunk-5QZDMSSN.js.map} +0 -0
- /package/dist/{chunk-H2EJNV2Z.js.map → chunk-66FLU5BT.js.map} +0 -0
- /package/dist/{chunk-MWH5MAFP.js.map → chunk-6BISDEN6.js.map} +0 -0
- /package/dist/{chunk-VBVSN2TV.js.map → chunk-6ZIETXZ2.js.map} +0 -0
- /package/dist/{chunk-42BBIR33.js.map → chunk-7N2RUBAP.js.map} +0 -0
- /package/dist/{chunk-UQI2NHTY.js.map → chunk-7QWMTOIF.js.map} +0 -0
- /package/dist/{chunk-JI5AVXYO.js.map → chunk-AKUCU7CI.js.map} +0 -0
- /package/dist/{chunk-FT37KV7R.js.map → chunk-BGTAL46Y.js.map} +0 -0
- /package/dist/{chunk-7VFZTJ7K.js.map → chunk-BV2TIZ4F.js.map} +0 -0
- /package/dist/{chunk-FWPHPN3V.js.map → chunk-CLX5VDNY.js.map} +0 -0
- /package/dist/{chunk-TH2KIPP7.js.map → chunk-CZAA5N5S.js.map} +0 -0
- /package/dist/{chunk-7BAJAXGB.js.map → chunk-CZAZX7JP.js.map} +0 -0
- /package/dist/{chunk-APMGGGTY.js.map → chunk-DGYCWCQ7.js.map} +0 -0
- /package/dist/{chunk-GEVIE5NV.js.map → chunk-DR6PEJU3.js.map} +0 -0
- /package/dist/{chunk-2TCZE3C2.js.map → chunk-EPGWWCZF.js.map} +0 -0
- /package/dist/{chunk-OUXPVWTZ.js.map → chunk-FLVL4L3L.js.map} +0 -0
- /package/dist/{chunk-YPL66L3U.js.map → chunk-FZGGZAAU.js.map} +0 -0
- /package/dist/{chunk-XOE5DYQL.js.map → chunk-HRCACVHL.js.map} +0 -0
- /package/dist/{chunk-KS4PRHRD.js.map → chunk-IC6QX5TC.js.map} +0 -0
- /package/dist/{chunk-H25TAODC.js.map → chunk-ILFJ7AVS.js.map} +0 -0
- /package/dist/{chunk-UQMCR5RW.js.map → chunk-JLR3JSTL.js.map} +0 -0
- /package/dist/{chunk-5H56JAHW.js.map → chunk-KCJ5H6XQ.js.map} +0 -0
- /package/dist/{chunk-H5IT5JL7.js.map → chunk-LOR6ZM5R.js.map} +0 -0
- /package/dist/{chunk-VBBMTSOV.js.map → chunk-M7GGMGMZ.js.map} +0 -0
- /package/dist/{chunk-G47FEGGK.js.map → chunk-NG7YBCJO.js.map} +0 -0
- /package/dist/{chunk-QGS7Z7YU.js.map → chunk-OHDJ34CC.js.map} +0 -0
- /package/dist/{chunk-LLMZK53N.js.map → chunk-PUBTHW5O.js.map} +0 -0
- /package/dist/{chunk-AGNBY3VG.js.map → chunk-PYHOAXTI.js.map} +0 -0
- /package/dist/{chunk-7WV3F5DQ.js.map → chunk-V7IZKJI3.js.map} +0 -0
- /package/dist/{chunk-IGF4DII6.js.map → chunk-X4A62ET7.js.map} +0 -0
- /package/dist/{chunk-OH6BKCPB.js.map → chunk-XN3TUUX2.js.map} +0 -0
- /package/dist/{chunk-5K5VEDFY.js.map → chunk-YDSWRD33.js.map} +0 -0
- /package/dist/{chunk-ABGDGBDT.js.map → chunk-YPEMNNNY.js.map} +0 -0
- /package/dist/{chunk-YM7IEUO7.js.map → chunk-ZPOROUTX.js.map} +0 -0
package/dist/orchestrator.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import './summarizer.js';
|
|
|
8
8
|
import './local-llm.js';
|
|
9
9
|
import './fallback-llm.js';
|
|
10
10
|
import './orchestration/maintenance.js';
|
|
11
|
-
export { Q as BulkImportBatchIngestResult, T as BulkImportBatchPartialFailureError, U as COMPACTION_SIGNAL_MAX_AGE_MS, V as DaySummaryGatherOptions, X as ExtractionRunResult, Y as GraphRecallRankedResult, Z as GraphRecallShadowComparison, G as GraphRecallSnapshot, I as IntentDebugSnapshot, O as Orchestrator, _ as QmdRecallSnapshot, $ as QueryAwarePrefilter, a0 as RecallInvocationOptions, a1 as RecallModeDecision, a2 as appendMemoryToGraphContext, a3 as applyQueryAwareCandidateFilter, a4 as blendGraphExpandedRecallScore, a5 as buildCompressionGuidelinesMarkdown, a6 as buildMemoryPathById, a7 as computeArtifactCandidateFetchLimit, a8 as computeArtifactRecallLimit, a9 as computeQmdHybridFetchLimit, t as defaultWorkspaceDir, aa as deriveTopicsFromExtraction, ab as filterHourlySummaryMarkdownForLocalDay, ac as filterRecallCandidates, ad as formatDateInTimeZone, ae as graphPathRelativeToStorage, af as hasIdentityRecoveryIntent, ag as isArtifactMemoryPath, ah as lifecycleRecallScoreAdjustment, ai as mapRecallSourceToXrayServedBy, aj as mergeArtifactRecallCandidates, ak as mergeGraphExpandedResults, al as normalizeIanaTimeZone, am as parseFiniteDate, an as parseGraphRecallRankedResults, ao as parseMemoryIntentSnapshot, ap as parseQmdRecallResults, aq as qmdStartupCollectionCheckWithTimeout, ar as raceRecallAbort, as as resolveEffectiveIdentityInjectionMode, at as resolveEffectiveRecallMode, au as resolvePersistedMemoryRelativePath, av as resolveRecallModeDecision, aw as resolveRecallModeDecisionAsync, ax as resolveRecentThreadMemoryPaths, E as sanitizeSessionKeyForFilename, ay as shouldFilterLifecycleRecallCandidate, az as splitTurnsBySourceValidAt, aA as summarizeGraphShadowComparison, aB as targetSourceValidAtSortMs, aC as throwIfRecallAborted, aD as tokenizeRecallQuery, aE as utcDateKeysForLocalDay } from './orchestrator-
|
|
11
|
+
export { Q as BulkImportBatchIngestResult, T as BulkImportBatchPartialFailureError, U as COMPACTION_SIGNAL_MAX_AGE_MS, V as DaySummaryGatherOptions, X as ExtractionRunResult, Y as GraphRecallRankedResult, Z as GraphRecallShadowComparison, G as GraphRecallSnapshot, I as IntentDebugSnapshot, O as Orchestrator, _ as QmdRecallSnapshot, $ as QueryAwarePrefilter, a0 as RecallInvocationOptions, a1 as RecallModeDecision, a2 as appendMemoryToGraphContext, a3 as applyQueryAwareCandidateFilter, a4 as blendGraphExpandedRecallScore, a5 as buildCompressionGuidelinesMarkdown, a6 as buildMemoryPathById, a7 as computeArtifactCandidateFetchLimit, a8 as computeArtifactRecallLimit, a9 as computeQmdHybridFetchLimit, t as defaultWorkspaceDir, aa as deriveTopicsFromExtraction, ab as filterHourlySummaryMarkdownForLocalDay, ac as filterRecallCandidates, ad as formatDateInTimeZone, ae as graphPathRelativeToStorage, af as hasIdentityRecoveryIntent, ag as isArtifactMemoryPath, ah as lifecycleRecallScoreAdjustment, ai as mapRecallSourceToXrayServedBy, aj as mergeArtifactRecallCandidates, ak as mergeGraphExpandedResults, al as normalizeIanaTimeZone, am as parseFiniteDate, an as parseGraphRecallRankedResults, ao as parseMemoryIntentSnapshot, ap as parseQmdRecallResults, aq as qmdStartupCollectionCheckWithTimeout, ar as raceRecallAbort, as as resolveEffectiveIdentityInjectionMode, at as resolveEffectiveRecallMode, au as resolvePersistedMemoryRelativePath, av as resolveRecallModeDecision, aw as resolveRecallModeDecisionAsync, ax as resolveRecentThreadMemoryPaths, E as sanitizeSessionKeyForFilename, ay as shouldFilterLifecycleRecallCandidate, az as splitTurnsBySourceValidAt, aA as summarizeGraphShadowComparison, aB as targetSourceValidAtSortMs, aC as throwIfRecallAborted, aD as tokenizeRecallQuery, aE as utcDateKeysForLocalDay } from './orchestrator-B2Y28Z9t.js';
|
|
12
12
|
export { formatCompressionGuidelinesForRecall } from './orchestration/compression-guideline-coordinator.js';
|
|
13
13
|
import './live-connectors-runner.js';
|
|
14
14
|
import './model-registry.js';
|
|
@@ -22,10 +22,10 @@ import './semantic-DJR8_DMQ.js';
|
|
|
22
22
|
import './replay/types.js';
|
|
23
23
|
import './types-gb_SNtjR.js';
|
|
24
24
|
import './lcm/engine.js';
|
|
25
|
-
import './semantic-consolidation-
|
|
25
|
+
import './semantic-consolidation-BDVIbLRw.js';
|
|
26
26
|
import './conversation-index/backend.js';
|
|
27
|
-
import './catalog-
|
|
28
|
-
import './types-
|
|
27
|
+
import './catalog-BxWokdC2.js';
|
|
28
|
+
import './types-ljkd82rn.js';
|
|
29
29
|
import './namespaces/search.js';
|
|
30
30
|
import './shared-context/manager.js';
|
|
31
31
|
import './compounding/engine.js';
|
package/dist/orchestrator.js
CHANGED
|
@@ -43,12 +43,12 @@ import {
|
|
|
43
43
|
throwIfRecallAborted,
|
|
44
44
|
tokenizeRecallQuery,
|
|
45
45
|
utcDateKeysForLocalDay
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import "./chunk-
|
|
46
|
+
} from "./chunk-5QZDMSSN.js";
|
|
47
|
+
import "./chunk-2U2A5HF4.js";
|
|
48
48
|
import {
|
|
49
49
|
formatCompressionGuidelinesForRecall
|
|
50
50
|
} from "./chunk-BRDJ2HFP.js";
|
|
51
|
-
import "./chunk-
|
|
51
|
+
import "./chunk-6ZIETXZ2.js";
|
|
52
52
|
import "./chunk-I74SUMNI.js";
|
|
53
53
|
import "./chunk-ILNPU5W5.js";
|
|
54
54
|
import "./chunk-7HYPN2GC.js";
|
|
@@ -57,20 +57,21 @@ import "./chunk-KBL3JJR6.js";
|
|
|
57
57
|
import "./chunk-ABP6QMVM.js";
|
|
58
58
|
import "./chunk-HHLLAQGZ.js";
|
|
59
59
|
import "./chunk-UWK5OXUJ.js";
|
|
60
|
-
import "./chunk-
|
|
61
|
-
import "./chunk-
|
|
60
|
+
import "./chunk-CLX5VDNY.js";
|
|
61
|
+
import "./chunk-KCYE2MZM.js";
|
|
62
|
+
import "./chunk-7N2RUBAP.js";
|
|
62
63
|
import "./chunk-MTR7BZQN.js";
|
|
63
64
|
import "./chunk-O7BBFJLP.js";
|
|
64
65
|
import "./chunk-7N4KAIGN.js";
|
|
65
66
|
import "./chunk-TPDBFYEG.js";
|
|
66
|
-
import "./chunk-KCYE2MZM.js";
|
|
67
67
|
import "./chunk-CGS7UKWM.js";
|
|
68
68
|
import "./chunk-V5OCT34X.js";
|
|
69
69
|
import "./chunk-TECVW3JP.js";
|
|
70
70
|
import "./chunk-RP7YXA67.js";
|
|
71
|
-
import "./chunk-
|
|
71
|
+
import "./chunk-CZAA5N5S.js";
|
|
72
72
|
import "./chunk-UI4FVU6T.js";
|
|
73
73
|
import "./chunk-LXOM6IQU.js";
|
|
74
|
+
import "./chunk-E2SPGGUI.js";
|
|
74
75
|
import "./chunk-UHGBNIOS.js";
|
|
75
76
|
import "./chunk-BCDKBDSY.js";
|
|
76
77
|
import "./chunk-YN2UN7N3.js";
|
|
@@ -78,7 +79,6 @@ import "./chunk-4EX5WZ4M.js";
|
|
|
78
79
|
import "./chunk-VOUOLGIP.js";
|
|
79
80
|
import "./chunk-S75M5ZRK.js";
|
|
80
81
|
import "./chunk-ECZU5BJH.js";
|
|
81
|
-
import "./chunk-E2SPGGUI.js";
|
|
82
82
|
import "./chunk-XZ5I7OZR.js";
|
|
83
83
|
import "./chunk-3FAMU5TX.js";
|
|
84
84
|
import "./chunk-4SBW47WK.js";
|
|
@@ -90,10 +90,10 @@ import "./chunk-5IZL4DCV.js";
|
|
|
90
90
|
import "./chunk-X7XN6YU4.js";
|
|
91
91
|
import "./chunk-2IZAGAJR.js";
|
|
92
92
|
import "./chunk-E3VODCC3.js";
|
|
93
|
+
import "./chunk-YDBIWGNI.js";
|
|
93
94
|
import "./chunk-JZHHREBL.js";
|
|
94
95
|
import "./chunk-E5BK6CGV.js";
|
|
95
96
|
import "./chunk-ZZTOURJI.js";
|
|
96
|
-
import "./chunk-YDBIWGNI.js";
|
|
97
97
|
import "./chunk-3GPTTA4J.js";
|
|
98
98
|
import "./chunk-IISBCCWR.js";
|
|
99
99
|
import "./chunk-A3GOMRJG.js";
|
|
@@ -124,55 +124,55 @@ import "./chunk-VEWZZM3H.js";
|
|
|
124
124
|
import "./chunk-Q6IP2ARR.js";
|
|
125
125
|
import "./chunk-6HEM6HTQ.js";
|
|
126
126
|
import "./chunk-O2EL7EGG.js";
|
|
127
|
-
import "./chunk-
|
|
128
|
-
import "./chunk-
|
|
127
|
+
import "./chunk-ZPOROUTX.js";
|
|
128
|
+
import "./chunk-7QWMTOIF.js";
|
|
129
129
|
import "./chunk-MC4FJXPA.js";
|
|
130
130
|
import "./chunk-LQHDIS7L.js";
|
|
131
131
|
import "./chunk-7F7Z6MOS.js";
|
|
132
132
|
import "./chunk-JJEJJ7RK.js";
|
|
133
|
+
import "./chunk-PYHOAXTI.js";
|
|
133
134
|
import "./chunk-UP6MOYCB.js";
|
|
134
|
-
import "./chunk-
|
|
135
|
-
import "./chunk-HDDRVXX4.js";
|
|
136
|
-
import "./chunk-AGNBY3VG.js";
|
|
135
|
+
import "./chunk-BV2TIZ4F.js";
|
|
137
136
|
import "./chunk-Z734BLO3.js";
|
|
137
|
+
import "./chunk-HDDRVXX4.js";
|
|
138
138
|
import "./chunk-OZKVVUJB.js";
|
|
139
139
|
import "./chunk-2DL3OFLD.js";
|
|
140
140
|
import "./chunk-G4IAEX6D.js";
|
|
141
141
|
import "./chunk-2BFLDH5F.js";
|
|
142
142
|
import "./chunk-765K3SAT.js";
|
|
143
|
+
import "./chunk-HOJZMQ4J.js";
|
|
144
|
+
import "./chunk-2PRQG7PV.js";
|
|
143
145
|
import "./chunk-KQPJLK3X.js";
|
|
144
146
|
import "./chunk-EEC4PCG5.js";
|
|
145
147
|
import "./chunk-PYIFUBRK.js";
|
|
146
|
-
import "./chunk-
|
|
147
|
-
import "./chunk-
|
|
148
|
-
import "./chunk-
|
|
149
|
-
import "./chunk-MWH5MAFP.js";
|
|
148
|
+
import "./chunk-D6RIFG4O.js";
|
|
149
|
+
import "./chunk-HRCACVHL.js";
|
|
150
|
+
import "./chunk-6BISDEN6.js";
|
|
150
151
|
import "./chunk-LZZNTPLR.js";
|
|
152
|
+
import "./chunk-JCK7V6SN.js";
|
|
151
153
|
import "./chunk-WMWVO45V.js";
|
|
152
154
|
import "./chunk-KJTKLXTH.js";
|
|
153
|
-
import "./chunk-D6RIFG4O.js";
|
|
154
|
-
import "./chunk-JCK7V6SN.js";
|
|
155
155
|
import "./chunk-GQL52GQ5.js";
|
|
156
156
|
import "./chunk-CKITWVWJ.js";
|
|
157
157
|
import "./chunk-OUELRE5E.js";
|
|
158
|
-
import "./chunk-H2EJNV2Z.js";
|
|
159
158
|
import "./chunk-2F6NP3NT.js";
|
|
160
159
|
import "./chunk-TERNBNJB.js";
|
|
160
|
+
import "./chunk-66FLU5BT.js";
|
|
161
161
|
import "./chunk-DBRYEIGY.js";
|
|
162
|
-
import "./chunk-
|
|
163
|
-
import "./chunk-
|
|
164
|
-
import "./chunk-
|
|
162
|
+
import "./chunk-OHDJ34CC.js";
|
|
163
|
+
import "./chunk-YPEMNNNY.js";
|
|
164
|
+
import "./chunk-TGQ2NTWH.js";
|
|
165
|
+
import "./chunk-XN3TUUX2.js";
|
|
165
166
|
import "./chunk-ZRWB5D4H.js";
|
|
166
167
|
import "./chunk-5EZXHU36.js";
|
|
167
168
|
import "./chunk-DANV2HTH.js";
|
|
168
|
-
import "./chunk-TGQ2NTWH.js";
|
|
169
169
|
import "./chunk-SFQ6QNL7.js";
|
|
170
170
|
import "./chunk-3T74IZB3.js";
|
|
171
171
|
import "./chunk-33JBK2XP.js";
|
|
172
|
-
import "./chunk-
|
|
173
|
-
import "./chunk-
|
|
174
|
-
import "./chunk-
|
|
175
|
-
import "./chunk-
|
|
172
|
+
import "./chunk-P6SYWE4G.js";
|
|
173
|
+
import "./chunk-LOR6ZM5R.js";
|
|
174
|
+
import "./chunk-JLR3JSTL.js";
|
|
175
|
+
import "./chunk-BGTAL46Y.js";
|
|
176
176
|
import "./chunk-KFY3SGN7.js";
|
|
177
177
|
import "./chunk-CMTINOFS.js";
|
|
178
178
|
import "./chunk-HL4DB7TO.js";
|
|
@@ -193,8 +193,8 @@ import "./chunk-Y4Z4I6WK.js";
|
|
|
193
193
|
import "./chunk-LMDRGRJ2.js";
|
|
194
194
|
import "./chunk-OD4FM2U7.js";
|
|
195
195
|
import "./chunk-3I4FUAVJ.js";
|
|
196
|
-
import "./chunk-
|
|
197
|
-
import "./chunk-
|
|
196
|
+
import "./chunk-EPGWWCZF.js";
|
|
197
|
+
import "./chunk-KCJ5H6XQ.js";
|
|
198
198
|
import "./chunk-QLULYKWZ.js";
|
|
199
199
|
import "./chunk-JLNBQWZ2.js";
|
|
200
200
|
import "./chunk-3UXOZBHV.js";
|
|
@@ -208,7 +208,7 @@ import "./chunk-UQ7RN5HK.js";
|
|
|
208
208
|
import "./chunk-F53UF7CI.js";
|
|
209
209
|
import "./chunk-H3FZVNRN.js";
|
|
210
210
|
import "./chunk-PI23H7FV.js";
|
|
211
|
-
import "./chunk-
|
|
211
|
+
import "./chunk-7Z2DZNWN.js";
|
|
212
212
|
import "./chunk-NDAH7BJ5.js";
|
|
213
213
|
import "./chunk-Z5LAYHGJ.js";
|
|
214
214
|
import "./chunk-G6NKALRN.js";
|
|
@@ -216,21 +216,21 @@ import "./chunk-OO42R444.js";
|
|
|
216
216
|
import "./chunk-K6MV3TRQ.js";
|
|
217
217
|
import "./chunk-LBJBNWS2.js";
|
|
218
218
|
import "./chunk-OADWQ5CR.js";
|
|
219
|
-
import "./chunk-
|
|
220
|
-
import "./chunk-
|
|
219
|
+
import "./chunk-2FOD2YY3.js";
|
|
220
|
+
import "./chunk-V7IZKJI3.js";
|
|
221
221
|
import "./chunk-SEDEKFYQ.js";
|
|
222
|
-
import "./chunk-
|
|
222
|
+
import "./chunk-2QSZNTDO.js";
|
|
223
|
+
import "./chunk-RSUYKGGZ.js";
|
|
223
224
|
import "./chunk-42NQ7AVG.js";
|
|
224
225
|
import "./chunk-TMSXWOBZ.js";
|
|
225
226
|
import "./chunk-J64TK33U.js";
|
|
226
|
-
import "./chunk-RSUYKGGZ.js";
|
|
227
227
|
import "./chunk-7RXCMVFQ.js";
|
|
228
|
-
import "./chunk-
|
|
228
|
+
import "./chunk-DR6PEJU3.js";
|
|
229
229
|
import "./chunk-D24OXEPB.js";
|
|
230
230
|
import "./chunk-5RUE3GHQ.js";
|
|
231
|
-
import "./chunk-
|
|
232
|
-
import "./chunk-
|
|
233
|
-
import "./chunk-
|
|
231
|
+
import "./chunk-NG7YBCJO.js";
|
|
232
|
+
import "./chunk-2MR3MFQB.js";
|
|
233
|
+
import "./chunk-ILFJ7AVS.js";
|
|
234
234
|
import "./chunk-YF6FMLBT.js";
|
|
235
235
|
import "./chunk-HLTAPHZZ.js";
|
|
236
236
|
import "./chunk-PRTA6444.js";
|
|
@@ -238,16 +238,16 @@ import "./chunk-KQDNAXOM.js";
|
|
|
238
238
|
import "./chunk-35NN3ZFA.js";
|
|
239
239
|
import "./chunk-FTYDWKO6.js";
|
|
240
240
|
import "./chunk-T4WDJPEZ.js";
|
|
241
|
-
import "./chunk-
|
|
242
|
-
import "./chunk-
|
|
241
|
+
import "./chunk-FZGGZAAU.js";
|
|
242
|
+
import "./chunk-X4A62ET7.js";
|
|
243
243
|
import "./chunk-GDASG7NC.js";
|
|
244
244
|
import "./chunk-GDB4J2H3.js";
|
|
245
|
-
import "./chunk-64SE4X5G.js";
|
|
246
245
|
import "./chunk-M5QKGHCR.js";
|
|
246
|
+
import "./chunk-64SE4X5G.js";
|
|
247
247
|
import "./chunk-VQ7B2Q6M.js";
|
|
248
248
|
import "./chunk-ERA5RSMZ.js";
|
|
249
249
|
import "./chunk-JGSKJHF7.js";
|
|
250
|
-
import "./chunk-
|
|
250
|
+
import "./chunk-PUBTHW5O.js";
|
|
251
251
|
import "./chunk-S4DDLTPX.js";
|
|
252
252
|
import "./chunk-FF4KLI5W.js";
|
|
253
253
|
import "./chunk-BT7NVCML.js";
|
|
@@ -259,24 +259,25 @@ import "./chunk-ICP53SKG.js";
|
|
|
259
259
|
import "./chunk-AQEJKOKI.js";
|
|
260
260
|
import "./chunk-6HMYUWXR.js";
|
|
261
261
|
import "./chunk-BAVVI5GP.js";
|
|
262
|
-
import "./chunk-
|
|
263
|
-
import "./chunk-
|
|
264
|
-
import "./chunk-5K5VEDFY.js";
|
|
265
|
-
import "./chunk-L4UZBJNM.js";
|
|
266
|
-
import "./chunk-CYEPCZN5.js";
|
|
267
|
-
import "./chunk-7BAJAXGB.js";
|
|
262
|
+
import "./chunk-4BFRBP45.js";
|
|
263
|
+
import "./chunk-27FLVMDC.js";
|
|
268
264
|
import "./chunk-ZIDSD6VC.js";
|
|
269
|
-
import "./chunk-AER6MT24.js";
|
|
270
265
|
import "./chunk-QWGNDWKB.js";
|
|
266
|
+
import "./chunk-YDSWRD33.js";
|
|
267
|
+
import "./chunk-4P4626RY.js";
|
|
268
|
+
import "./chunk-CYEPCZN5.js";
|
|
269
|
+
import "./chunk-CZAZX7JP.js";
|
|
271
270
|
import "./chunk-CINZGPSJ.js";
|
|
271
|
+
import "./chunk-AER6MT24.js";
|
|
272
272
|
import "./chunk-EGGE52UU.js";
|
|
273
|
-
import "./chunk-
|
|
274
|
-
import "./chunk-
|
|
273
|
+
import "./chunk-IC6QX5TC.js";
|
|
274
|
+
import "./chunk-AKUCU7CI.js";
|
|
275
|
+
import "./chunk-FC77VUX5.js";
|
|
275
276
|
import "./chunk-TN7THW5U.js";
|
|
276
277
|
import "./chunk-R5VAVVHP.js";
|
|
277
|
-
import "./chunk-
|
|
278
|
-
import "./chunk-RBGL4MKQ.js";
|
|
278
|
+
import "./chunk-3F4N4WDH.js";
|
|
279
279
|
import "./chunk-WU46YPY6.js";
|
|
280
|
+
import "./chunk-64UDOIMI.js";
|
|
280
281
|
import "./chunk-EIR5VLIH.js";
|
|
281
282
|
import "./chunk-HG32URJJ.js";
|
|
282
283
|
import "./chunk-EI6V5UXY.js";
|
|
@@ -291,10 +292,10 @@ import "./chunk-OBMR4VIX.js";
|
|
|
291
292
|
import "./chunk-2LSZVONP.js";
|
|
292
293
|
import "./chunk-DEUNUKTD.js";
|
|
293
294
|
import "./chunk-CXLNZXG5.js";
|
|
294
|
-
import "./chunk-
|
|
295
|
-
import "./chunk-
|
|
296
|
-
import "./chunk-L2B3EE7B.js";
|
|
295
|
+
import "./chunk-DGYCWCQ7.js";
|
|
296
|
+
import "./chunk-M7GGMGMZ.js";
|
|
297
297
|
import "./chunk-M7XQSUBB.js";
|
|
298
|
+
import "./chunk-L2B3EE7B.js";
|
|
298
299
|
import "./chunk-5UZXUTVO.js";
|
|
299
300
|
import "./chunk-5GPPACXK.js";
|
|
300
301
|
import "./chunk-EHK6KZHK.js";
|
|
@@ -308,8 +309,8 @@ import "./chunk-AWJ2FHCF.js";
|
|
|
308
309
|
import "./chunk-42JKGUFJ.js";
|
|
309
310
|
import "./chunk-RULE4VG5.js";
|
|
310
311
|
import "./chunk-SCU65EZI.js";
|
|
311
|
-
import "./chunk-
|
|
312
|
-
import "./chunk-
|
|
312
|
+
import "./chunk-RHOZ5LLO.js";
|
|
313
|
+
import "./chunk-RL6NEVXT.js";
|
|
313
314
|
import "./chunk-DM2T26WE.js";
|
|
314
315
|
import "./chunk-LDXUBPMO.js";
|
|
315
316
|
import "./chunk-MNUHL34L.js";
|
|
@@ -323,13 +324,13 @@ import "./chunk-L2EXJQJP.js";
|
|
|
323
324
|
import "./chunk-VFSP73LP.js";
|
|
324
325
|
import "./chunk-RGMVMVMF.js";
|
|
325
326
|
import "./chunk-N7RWREIQ.js";
|
|
326
|
-
import "./chunk-
|
|
327
|
-
import "./chunk-J4EB7DNW.js";
|
|
327
|
+
import "./chunk-FLVL4L3L.js";
|
|
328
328
|
import "./chunk-WEHSQBFR.js";
|
|
329
329
|
import "./chunk-437S3G37.js";
|
|
330
330
|
import "./chunk-GWTFLF2P.js";
|
|
331
331
|
import "./chunk-UKJAGEXH.js";
|
|
332
332
|
import "./chunk-FP2373TW.js";
|
|
333
|
+
import "./chunk-J4EB7DNW.js";
|
|
333
334
|
import "./chunk-Z2YFLXHU.js";
|
|
334
335
|
import "./chunk-I4WBNM3M.js";
|
|
335
336
|
import "./chunk-SOAU2OE2.js";
|
package/dist/patterns-cli.d.ts
CHANGED
package/dist/policy-runtime.d.ts
CHANGED
package/dist/provenance.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { J as ProvenanceSource,
|
|
1
|
+
import { J as ProvenanceSource, am as ProvenanceConfig, q as MemoryFrontmatter } from './types-ljkd82rn.js';
|
|
2
2
|
import './types-gb_SNtjR.js';
|
|
3
3
|
import './message-parts/index.js';
|
|
4
4
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
markProjectedMemoryPathInvalid
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-RHOZ5LLO.js";
|
|
4
|
+
import "./chunk-RL6NEVXT.js";
|
|
5
|
+
import "./chunk-37CTGERM.js";
|
|
5
6
|
import "./chunk-PZ5AY32C.js";
|
|
6
7
|
|
|
7
8
|
// src/maintenance/purge.ts
|
|
@@ -208,4 +209,4 @@ async function purgeMemories(options) {
|
|
|
208
209
|
export {
|
|
209
210
|
purgeMemories
|
|
210
211
|
};
|
|
211
|
-
//# sourceMappingURL=purge-
|
|
212
|
+
//# sourceMappingURL=purge-NDWV6WYD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/maintenance/purge.ts"],"sourcesContent":["/**\n * Operator-facing bulk hard-delete (issue #686 retention-completion).\n *\n * `purgeMemories(opts)` hard-deletes memories that are:\n * - older than `olderThanMs` (measured against `updated ?? created`), AND\n * - in the specified tier (`\"cold\"` or `\"all\"`), AND\n * - optionally in `status: \"forgotten\"` only (when `forgottenOnly` is true)\n *\n * Hard-delete means:\n * 1. Remove the file from disk.\n * 2. Trigger a QMD collection update so the index no longer contains it.\n * 3. Append a purge audit entry to the observation ledger.\n *\n * `dryRun: true` (the default) reports what *would* be deleted without\n * actually removing anything — callers must opt into mutations by\n * setting `dryRun: false`.\n *\n * The CLI surface enforces an explicit `--confirm yes` guard and\n * defaults to `--dry-run` to make accidental data loss impossible.\n */\n\nimport path from \"node:path\";\nimport { appendFile, mkdir, unlink } from \"node:fs/promises\";\nimport type { StorageManager } from \"../storage.js\";\nimport type { MemoryFile } from \"../types.js\";\nimport { markProjectedMemoryPathInvalid } from \"../memory-projection-store.js\";\nimport type { SearchBackend } from \"../search/port.js\";\n\nexport type PurgeTierFilter = \"cold\" | \"all\";\n\nexport interface PurgeMemoriesOptions {\n storage: StorageManager;\n /**\n * Only memories whose `updated ?? created` timestamp is older than this\n * value (in milliseconds, Unix epoch) will be candidates.\n */\n olderThanMs: number;\n /**\n * `\"cold\"` — only memories in the cold tier (files under `.../cold/`).\n * `\"all\"` — memories in any tier (hot, cold, or archived).\n * Default: `\"cold\"`.\n */\n tier?: PurgeTierFilter;\n /**\n * When `true`, only memories with `status === \"forgotten\"` are candidates.\n * Default: `false` (purge by age + tier regardless of status).\n */\n forgottenOnly?: boolean;\n /** When `true` (default), report candidates but do not delete. */\n dryRun?: boolean;\n /**\n * Optional QMD backend. When supplied and `dryRun === false`, a\n * `updateCollection` call is issued after each deletion so the index stays\n * consistent. Pass `undefined` or omit to skip index maintenance (e.g. in\n * tests that don't have a live QMD instance).\n */\n qmd?: SearchBackend;\n /** Hot-tier QMD collection name (default: `\"openclaw-engram\"`). */\n hotCollection?: string;\n /** Cold-tier QMD collection name (default: `\"openclaw-engram-cold\"`). */\n coldCollection?: string;\n /** Optional hook for long-lived hosts to clear their live dedupe mirror after purge hash cleanup. */\n afterFactHashRemoval?: () => void | Promise<void>;\n /** Optional shutdown signal forwarded to QMD collection refreshes. */\n signal?: AbortSignal;\n /** Override clock for tests. */\n now?: () => Date;\n}\n\nexport interface PurgeCandidate {\n id: string;\n path: string;\n tier: \"hot\" | \"cold\" | \"archive\";\n status: string;\n updatedOrCreated: string;\n ageMs: number;\n}\n\nexport interface PurgeMemoriesResult {\n dryRun: boolean;\n tier: PurgeTierFilter;\n olderThanMs: number;\n candidates: PurgeCandidate[];\n purgedCount: number;\n alreadyAbsentCount: number;\n errorCount: number;\n errors: Array<{ id: string; path: string; error: string }>;\n}\n\nfunction hasErrorCode(err: unknown, code: string): boolean {\n return typeof err === \"object\" && err !== null && \"code\" in err && (err as { code?: unknown }).code === code;\n}\n\nfunction resolveTimestamp(memory: MemoryFile): string {\n const fm = memory.frontmatter as unknown as Record<string, unknown>;\n const updated = typeof fm.updated === \"string\" ? (fm.updated as string) : \"\";\n const created = typeof fm.created === \"string\" ? (fm.created as string) : \"\";\n return updated.length > 0 ? updated : created;\n}\n\nasync function logPurgeAudit(\n storage: StorageManager,\n candidates: PurgeCandidate[],\n now: Date,\n event: \"PURGE_DELETE_INTENT\" | \"PURGE_HARD_DELETE\" | \"PURGE_ALREADY_ABSENT\" = \"PURGE_HARD_DELETE\",\n): Promise<void> {\n if (candidates.length === 0) return;\n const ledgerDir = path.join(storage.dir, \"state\", \"observation-ledger\");\n await mkdir(ledgerDir, { recursive: true });\n const ledgerPath = path.join(ledgerDir, \"purge-audit.jsonl\");\n const entries = candidates.map((c) =>\n JSON.stringify({\n event,\n timestamp: now.toISOString(),\n memoryId: c.id,\n path: c.path,\n tier: c.tier,\n status: c.status,\n updatedOrCreated: c.updatedOrCreated,\n }),\n );\n if (entries.length > 0) {\n await appendFile(ledgerPath, `${entries.join(\"\\n\")}\\n`, \"utf-8\");\n }\n}\n\nexport async function purgeMemories(\n options: PurgeMemoriesOptions,\n): Promise<PurgeMemoriesResult> {\n const {\n storage,\n olderThanMs,\n tier = \"cold\",\n forgottenOnly = false,\n dryRun = true,\n qmd,\n hotCollection = \"openclaw-engram\",\n coldCollection = \"openclaw-engram-cold\",\n } = options;\n\n if (!Number.isFinite(olderThanMs) || olderThanMs <= 0) {\n throw new Error(\"olderThanMs must be a finite positive number\");\n }\n\n const now = (options.now ?? (() => new Date()))();\n const nowMs = now.getTime();\n\n // Collect all memories from applicable tiers\n const [hotMemories, coldMemories, archivedMemories] = await Promise.all([\n tier === \"all\" ? storage.readAllMemories() : Promise.resolve([]),\n storage.readAllColdMemories(),\n tier === \"all\" ? storage.readArchivedMemories() : Promise.resolve([]),\n ]);\n\n const poolEntries: Array<{ memory: MemoryFile; resolvedTier: \"hot\" | \"cold\" | \"archive\" }> = [];\n\n if (tier === \"all\") {\n for (const m of hotMemories) {\n poolEntries.push({ memory: m, resolvedTier: \"hot\" });\n }\n for (const m of archivedMemories) {\n poolEntries.push({ memory: m, resolvedTier: \"archive\" });\n }\n }\n for (const m of coldMemories) {\n poolEntries.push({ memory: m, resolvedTier: \"cold\" });\n }\n\n // Build candidate list\n const candidates: PurgeCandidate[] = [];\n const candidateMemoriesById = new Map<string, MemoryFile>();\n for (const { memory, resolvedTier } of poolEntries) {\n const ts = resolveTimestamp(memory);\n if (ts.length === 0) continue;\n\n const tsMs = Date.parse(ts);\n if (!Number.isFinite(tsMs)) continue;\n\n const ageMs = nowMs - tsMs;\n if (ageMs < olderThanMs) continue;\n\n const fm = memory.frontmatter as unknown as Record<string, unknown>;\n const status: string =\n typeof fm.status === \"string\" ? (fm.status as string) : \"active\";\n\n if (forgottenOnly && status !== \"forgotten\") continue;\n\n candidates.push({\n id: memory.frontmatter.id,\n path: memory.path,\n tier: resolvedTier,\n status,\n updatedOrCreated: ts,\n ageMs,\n });\n candidateMemoriesById.set(memory.frontmatter.id, memory);\n }\n\n if (dryRun) {\n return {\n dryRun: true,\n tier,\n olderThanMs,\n candidates,\n purgedCount: 0,\n alreadyAbsentCount: 0,\n errorCount: 0,\n errors: [],\n };\n }\n\n // Hard-delete phase\n const errors: Array<{ id: string; path: string; error: string }> = [];\n try {\n await logPurgeAudit(storage, candidates, now, \"PURGE_DELETE_INTENT\");\n } catch (auditErr) {\n errors.push({\n id: \"(purge-audit)\",\n path: path.join(storage.dir, \"state\", \"observation-ledger\", \"purge-audit.jsonl\"),\n error: auditErr instanceof Error ? auditErr.message : String(auditErr),\n });\n }\n\n const actuallyPurged: PurgeCandidate[] = [];\n const alreadyAbsent: PurgeCandidate[] = [];\n const collectionsToUpdate = new Set<string>();\n const addCollectionForCandidate = (candidate: PurgeCandidate) => {\n if (candidate.tier === \"cold\") {\n collectionsToUpdate.add(coldCollection);\n } else if (candidate.tier === \"hot\") {\n collectionsToUpdate.add(hotCollection);\n }\n };\n\n for (const candidate of candidates) {\n try {\n await unlink(candidate.path);\n actuallyPurged.push(candidate);\n addCollectionForCandidate(candidate);\n markProjectedMemoryPathInvalid(storage.dir, candidate.id);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n // ENOENT is fine — already gone\n if (hasErrorCode(err, \"ENOENT\")) {\n alreadyAbsent.push(candidate);\n addCollectionForCandidate(candidate);\n markProjectedMemoryPathInvalid(storage.dir, candidate.id);\n } else {\n errors.push({ id: candidate.id, path: candidate.path, error: message });\n }\n }\n }\n\n const recordPostDeleteAudit = async (\n purgedCandidates: PurgeCandidate[],\n event: \"PURGE_HARD_DELETE\" | \"PURGE_ALREADY_ABSENT\",\n ) => {\n try {\n await logPurgeAudit(storage, purgedCandidates, now, event);\n } catch (auditErr) {\n errors.push({\n id: \"(purge-audit)\",\n path: path.join(storage.dir, \"state\", \"observation-ledger\", \"purge-audit.jsonl\"),\n error: auditErr instanceof Error ? auditErr.message : String(auditErr),\n });\n }\n };\n await recordPostDeleteAudit(actuallyPurged, \"PURGE_HARD_DELETE\");\n await recordPostDeleteAudit(alreadyAbsent, \"PURGE_ALREADY_ABSENT\");\n\n const resolvedPurges = [...actuallyPurged, ...alreadyAbsent];\n\n const invalidateTierCaches = (\n storage as unknown as {\n invalidateMemoryCachesForTiers?: (tiers: Iterable<\"hot\" | \"cold\" | \"archive\">) => void;\n }\n ).invalidateMemoryCachesForTiers;\n if (typeof invalidateTierCaches === \"function\") {\n invalidateTierCaches.call(storage, new Set(resolvedPurges.map((candidate) => candidate.tier)));\n } else if (typeof (storage as unknown as { invalidateAllMemoriesCacheForDir?: () => void }).invalidateAllMemoriesCacheForDir === \"function\") {\n (storage as unknown as { invalidateAllMemoriesCacheForDir: () => void }).invalidateAllMemoriesCacheForDir();\n }\n\n // Update QMD index for affected collections\n if (qmd) {\n for (const collection of collectionsToUpdate) {\n try {\n if (typeof qmd.updateCollectionStrict === \"function\") {\n await qmd.updateCollectionStrict(collection, { signal: options.signal });\n } else {\n await qmd.updateCollection(collection, { signal: options.signal });\n }\n } catch (indexErr) {\n // Non-fatal — operator can re-index manually\n errors.push({\n id: \"(qmd-update)\",\n path: collection,\n error: indexErr instanceof Error ? indexErr.message : String(indexErr),\n });\n }\n }\n }\n\n const purgedFactMemories = resolvedPurges\n .map((candidate) => candidateMemoriesById.get(candidate.id))\n .filter((memory): memory is MemoryFile => memory?.frontmatter.category === \"fact\");\n if (purgedFactMemories.length > 0) {\n const removeFactHashes = (\n storage as unknown as {\n removeFactContentHashesForMemories?: (memories: MemoryFile[]) => Promise<void>;\n }\n ).removeFactContentHashesForMemories;\n if (typeof removeFactHashes === \"function\") {\n try {\n await removeFactHashes.call(storage, purgedFactMemories);\n await options.afterFactHashRemoval?.();\n } catch (hashErr) {\n errors.push({\n id: \"(fact-hash-index)\",\n path: path.join(storage.dir, \"state\", \"fact-hashes.txt\"),\n error: hashErr instanceof Error ? hashErr.message : String(hashErr),\n });\n }\n }\n }\n\n return {\n dryRun: false,\n tier,\n olderThanMs,\n candidates,\n purgedCount: actuallyPurged.length,\n alreadyAbsentCount: alreadyAbsent.length,\n errorCount: errors.length,\n errors,\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/maintenance/purge.ts"],"sourcesContent":["/**\n * Operator-facing bulk hard-delete (issue #686 retention-completion).\n *\n * `purgeMemories(opts)` hard-deletes memories that are:\n * - older than `olderThanMs` (measured against `updated ?? created`), AND\n * - in the specified tier (`\"cold\"` or `\"all\"`), AND\n * - optionally in `status: \"forgotten\"` only (when `forgottenOnly` is true)\n *\n * Hard-delete means:\n * 1. Remove the file from disk.\n * 2. Trigger a QMD collection update so the index no longer contains it.\n * 3. Append a purge audit entry to the observation ledger.\n *\n * `dryRun: true` (the default) reports what *would* be deleted without\n * actually removing anything — callers must opt into mutations by\n * setting `dryRun: false`.\n *\n * The CLI surface enforces an explicit `--confirm yes` guard and\n * defaults to `--dry-run` to make accidental data loss impossible.\n */\n\nimport path from \"node:path\";\nimport { appendFile, mkdir, unlink } from \"node:fs/promises\";\nimport type { StorageManager } from \"../storage.js\";\nimport type { MemoryFile } from \"../types.js\";\nimport { markProjectedMemoryPathInvalid } from \"../memory-projection-store.js\";\nimport type { SearchBackend } from \"../search/port.js\";\n\nexport type PurgeTierFilter = \"cold\" | \"all\";\n\nexport interface PurgeMemoriesOptions {\n storage: StorageManager;\n /**\n * Only memories whose `updated ?? created` timestamp is older than this\n * value (in milliseconds, Unix epoch) will be candidates.\n */\n olderThanMs: number;\n /**\n * `\"cold\"` — only memories in the cold tier (files under `.../cold/`).\n * `\"all\"` — memories in any tier (hot, cold, or archived).\n * Default: `\"cold\"`.\n */\n tier?: PurgeTierFilter;\n /**\n * When `true`, only memories with `status === \"forgotten\"` are candidates.\n * Default: `false` (purge by age + tier regardless of status).\n */\n forgottenOnly?: boolean;\n /** When `true` (default), report candidates but do not delete. */\n dryRun?: boolean;\n /**\n * Optional QMD backend. When supplied and `dryRun === false`, a\n * `updateCollection` call is issued after each deletion so the index stays\n * consistent. Pass `undefined` or omit to skip index maintenance (e.g. in\n * tests that don't have a live QMD instance).\n */\n qmd?: SearchBackend;\n /** Hot-tier QMD collection name (default: `\"openclaw-engram\"`). */\n hotCollection?: string;\n /** Cold-tier QMD collection name (default: `\"openclaw-engram-cold\"`). */\n coldCollection?: string;\n /** Optional hook for long-lived hosts to clear their live dedupe mirror after purge hash cleanup. */\n afterFactHashRemoval?: () => void | Promise<void>;\n /** Optional shutdown signal forwarded to QMD collection refreshes. */\n signal?: AbortSignal;\n /** Override clock for tests. */\n now?: () => Date;\n}\n\nexport interface PurgeCandidate {\n id: string;\n path: string;\n tier: \"hot\" | \"cold\" | \"archive\";\n status: string;\n updatedOrCreated: string;\n ageMs: number;\n}\n\nexport interface PurgeMemoriesResult {\n dryRun: boolean;\n tier: PurgeTierFilter;\n olderThanMs: number;\n candidates: PurgeCandidate[];\n purgedCount: number;\n alreadyAbsentCount: number;\n errorCount: number;\n errors: Array<{ id: string; path: string; error: string }>;\n}\n\nfunction hasErrorCode(err: unknown, code: string): boolean {\n return typeof err === \"object\" && err !== null && \"code\" in err && (err as { code?: unknown }).code === code;\n}\n\nfunction resolveTimestamp(memory: MemoryFile): string {\n const fm = memory.frontmatter as unknown as Record<string, unknown>;\n const updated = typeof fm.updated === \"string\" ? (fm.updated as string) : \"\";\n const created = typeof fm.created === \"string\" ? (fm.created as string) : \"\";\n return updated.length > 0 ? updated : created;\n}\n\nasync function logPurgeAudit(\n storage: StorageManager,\n candidates: PurgeCandidate[],\n now: Date,\n event: \"PURGE_DELETE_INTENT\" | \"PURGE_HARD_DELETE\" | \"PURGE_ALREADY_ABSENT\" = \"PURGE_HARD_DELETE\",\n): Promise<void> {\n if (candidates.length === 0) return;\n const ledgerDir = path.join(storage.dir, \"state\", \"observation-ledger\");\n await mkdir(ledgerDir, { recursive: true });\n const ledgerPath = path.join(ledgerDir, \"purge-audit.jsonl\");\n const entries = candidates.map((c) =>\n JSON.stringify({\n event,\n timestamp: now.toISOString(),\n memoryId: c.id,\n path: c.path,\n tier: c.tier,\n status: c.status,\n updatedOrCreated: c.updatedOrCreated,\n }),\n );\n if (entries.length > 0) {\n await appendFile(ledgerPath, `${entries.join(\"\\n\")}\\n`, \"utf-8\");\n }\n}\n\nexport async function purgeMemories(\n options: PurgeMemoriesOptions,\n): Promise<PurgeMemoriesResult> {\n const {\n storage,\n olderThanMs,\n tier = \"cold\",\n forgottenOnly = false,\n dryRun = true,\n qmd,\n hotCollection = \"openclaw-engram\",\n coldCollection = \"openclaw-engram-cold\",\n } = options;\n\n if (!Number.isFinite(olderThanMs) || olderThanMs <= 0) {\n throw new Error(\"olderThanMs must be a finite positive number\");\n }\n\n const now = (options.now ?? (() => new Date()))();\n const nowMs = now.getTime();\n\n // Collect all memories from applicable tiers\n const [hotMemories, coldMemories, archivedMemories] = await Promise.all([\n tier === \"all\" ? storage.readAllMemories() : Promise.resolve([]),\n storage.readAllColdMemories(),\n tier === \"all\" ? storage.readArchivedMemories() : Promise.resolve([]),\n ]);\n\n const poolEntries: Array<{ memory: MemoryFile; resolvedTier: \"hot\" | \"cold\" | \"archive\" }> = [];\n\n if (tier === \"all\") {\n for (const m of hotMemories) {\n poolEntries.push({ memory: m, resolvedTier: \"hot\" });\n }\n for (const m of archivedMemories) {\n poolEntries.push({ memory: m, resolvedTier: \"archive\" });\n }\n }\n for (const m of coldMemories) {\n poolEntries.push({ memory: m, resolvedTier: \"cold\" });\n }\n\n // Build candidate list\n const candidates: PurgeCandidate[] = [];\n const candidateMemoriesById = new Map<string, MemoryFile>();\n for (const { memory, resolvedTier } of poolEntries) {\n const ts = resolveTimestamp(memory);\n if (ts.length === 0) continue;\n\n const tsMs = Date.parse(ts);\n if (!Number.isFinite(tsMs)) continue;\n\n const ageMs = nowMs - tsMs;\n if (ageMs < olderThanMs) continue;\n\n const fm = memory.frontmatter as unknown as Record<string, unknown>;\n const status: string =\n typeof fm.status === \"string\" ? (fm.status as string) : \"active\";\n\n if (forgottenOnly && status !== \"forgotten\") continue;\n\n candidates.push({\n id: memory.frontmatter.id,\n path: memory.path,\n tier: resolvedTier,\n status,\n updatedOrCreated: ts,\n ageMs,\n });\n candidateMemoriesById.set(memory.frontmatter.id, memory);\n }\n\n if (dryRun) {\n return {\n dryRun: true,\n tier,\n olderThanMs,\n candidates,\n purgedCount: 0,\n alreadyAbsentCount: 0,\n errorCount: 0,\n errors: [],\n };\n }\n\n // Hard-delete phase\n const errors: Array<{ id: string; path: string; error: string }> = [];\n try {\n await logPurgeAudit(storage, candidates, now, \"PURGE_DELETE_INTENT\");\n } catch (auditErr) {\n errors.push({\n id: \"(purge-audit)\",\n path: path.join(storage.dir, \"state\", \"observation-ledger\", \"purge-audit.jsonl\"),\n error: auditErr instanceof Error ? auditErr.message : String(auditErr),\n });\n }\n\n const actuallyPurged: PurgeCandidate[] = [];\n const alreadyAbsent: PurgeCandidate[] = [];\n const collectionsToUpdate = new Set<string>();\n const addCollectionForCandidate = (candidate: PurgeCandidate) => {\n if (candidate.tier === \"cold\") {\n collectionsToUpdate.add(coldCollection);\n } else if (candidate.tier === \"hot\") {\n collectionsToUpdate.add(hotCollection);\n }\n };\n\n for (const candidate of candidates) {\n try {\n await unlink(candidate.path);\n actuallyPurged.push(candidate);\n addCollectionForCandidate(candidate);\n markProjectedMemoryPathInvalid(storage.dir, candidate.id);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n // ENOENT is fine — already gone\n if (hasErrorCode(err, \"ENOENT\")) {\n alreadyAbsent.push(candidate);\n addCollectionForCandidate(candidate);\n markProjectedMemoryPathInvalid(storage.dir, candidate.id);\n } else {\n errors.push({ id: candidate.id, path: candidate.path, error: message });\n }\n }\n }\n\n const recordPostDeleteAudit = async (\n purgedCandidates: PurgeCandidate[],\n event: \"PURGE_HARD_DELETE\" | \"PURGE_ALREADY_ABSENT\",\n ) => {\n try {\n await logPurgeAudit(storage, purgedCandidates, now, event);\n } catch (auditErr) {\n errors.push({\n id: \"(purge-audit)\",\n path: path.join(storage.dir, \"state\", \"observation-ledger\", \"purge-audit.jsonl\"),\n error: auditErr instanceof Error ? auditErr.message : String(auditErr),\n });\n }\n };\n await recordPostDeleteAudit(actuallyPurged, \"PURGE_HARD_DELETE\");\n await recordPostDeleteAudit(alreadyAbsent, \"PURGE_ALREADY_ABSENT\");\n\n const resolvedPurges = [...actuallyPurged, ...alreadyAbsent];\n\n const invalidateTierCaches = (\n storage as unknown as {\n invalidateMemoryCachesForTiers?: (tiers: Iterable<\"hot\" | \"cold\" | \"archive\">) => void;\n }\n ).invalidateMemoryCachesForTiers;\n if (typeof invalidateTierCaches === \"function\") {\n invalidateTierCaches.call(storage, new Set(resolvedPurges.map((candidate) => candidate.tier)));\n } else if (typeof (storage as unknown as { invalidateAllMemoriesCacheForDir?: () => void }).invalidateAllMemoriesCacheForDir === \"function\") {\n (storage as unknown as { invalidateAllMemoriesCacheForDir: () => void }).invalidateAllMemoriesCacheForDir();\n }\n\n // Update QMD index for affected collections\n if (qmd) {\n for (const collection of collectionsToUpdate) {\n try {\n if (typeof qmd.updateCollectionStrict === \"function\") {\n await qmd.updateCollectionStrict(collection, { signal: options.signal });\n } else {\n await qmd.updateCollection(collection, { signal: options.signal });\n }\n } catch (indexErr) {\n // Non-fatal — operator can re-index manually\n errors.push({\n id: \"(qmd-update)\",\n path: collection,\n error: indexErr instanceof Error ? indexErr.message : String(indexErr),\n });\n }\n }\n }\n\n const purgedFactMemories = resolvedPurges\n .map((candidate) => candidateMemoriesById.get(candidate.id))\n .filter((memory): memory is MemoryFile => memory?.frontmatter.category === \"fact\");\n if (purgedFactMemories.length > 0) {\n const removeFactHashes = (\n storage as unknown as {\n removeFactContentHashesForMemories?: (memories: MemoryFile[]) => Promise<void>;\n }\n ).removeFactContentHashesForMemories;\n if (typeof removeFactHashes === \"function\") {\n try {\n await removeFactHashes.call(storage, purgedFactMemories);\n await options.afterFactHashRemoval?.();\n } catch (hashErr) {\n errors.push({\n id: \"(fact-hash-index)\",\n path: path.join(storage.dir, \"state\", \"fact-hashes.txt\"),\n error: hashErr instanceof Error ? hashErr.message : String(hashErr),\n });\n }\n }\n }\n\n return {\n dryRun: false,\n tier,\n olderThanMs,\n candidates,\n purgedCount: actuallyPurged.length,\n alreadyAbsentCount: alreadyAbsent.length,\n errorCount: errors.length,\n errors,\n };\n}\n"],"mappings":"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","names":[]}
|