@remnic/core 9.57.5 → 9.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +12 -11
- package/dist/access-admin-ops-surface.js +25 -24
- package/dist/access-authorization-probe.d.ts +12 -11
- package/dist/access-authorization-probe.js +26 -25
- package/dist/access-boundary.d.ts +12 -11
- package/dist/access-boundary.js +25 -24
- package/dist/access-cli.js +77 -76
- 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 +12 -11
- package/dist/access-extraction-force-flush.js +25 -24
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +12 -11
- package/dist/access-http-lifecycle-flush.d.ts +12 -11
- package/dist/access-http-offline-stream.d.ts +12 -11
- package/dist/access-http-query.js +25 -24
- package/dist/access-http.d.ts +13 -12
- package/dist/access-http.js +36 -35
- package/dist/access-identity-continuity-surface.d.ts +10 -9
- package/dist/access-identity-continuity-surface.js +25 -24
- package/dist/access-lcm-surface.d.ts +12 -11
- package/dist/access-lcm-surface.js +25 -24
- package/dist/access-mcp.d.ts +12 -11
- package/dist/access-mcp.js +32 -31
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-Bpt-SYP0.d.ts → access-namespace-preflight-TBXz-8s_.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +25 -24
- package/dist/access-observe-write-surface.d.ts +12 -11
- package/dist/access-observe-write-surface.js +25 -24
- package/dist/access-offline-manifest.d.ts +10 -9
- package/dist/access-operations-batch.js +27 -26
- package/dist/access-operations.d.ts +15 -14
- package/dist/access-operations.js +31 -30
- package/dist/access-recall-concurrency.d.ts +12 -11
- package/dist/access-recall-concurrency.js +25 -24
- package/dist/access-recall-response.d.ts +12 -11
- package/dist/access-recall-response.js +25 -24
- package/dist/access-recall-surface.d.ts +12 -11
- package/dist/access-recall-surface.js +25 -24
- package/dist/access-schema.d.ts +88 -88
- package/dist/access-schema.js +3 -3
- package/dist/{access-service-D9xXmKvd.d.ts → access-service-BQkRul4d.d.ts} +71 -71
- package/dist/access-service-helpers.d.ts +12 -11
- package/dist/access-service.d.ts +12 -11
- package/dist/access-service.js +25 -24
- package/dist/access-surface-catalog.d.ts +12 -11
- package/dist/access-surface-catalog.js +27 -26
- package/dist/access-surface-catalog.js.map +1 -1
- 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 +1 -1
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +10 -9
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +10 -10
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-surprise.js +4 -3
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-crypto-YO5QJ6L3.js → capsule-crypto-GWVG7LGC.js} +2 -2
- package/dist/{catalog-BasnO3Bw.d.ts → catalog-z1UerMbh.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +14 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-P4BC54KI.js → chunk-2GBFKHBZ.js} +14 -38
- package/dist/chunk-2GBFKHBZ.js.map +1 -0
- package/dist/{chunk-YTZA7U6Q.js → chunk-2VHCLHZ5.js} +3 -3
- package/dist/{chunk-NEJQ65NV.js → chunk-4CLE2LXB.js} +2 -2
- package/dist/{chunk-3VFVQDZO.js → chunk-4IIKJOYM.js} +1 -1
- package/dist/{chunk-3VFVQDZO.js.map → chunk-4IIKJOYM.js.map} +1 -1
- package/dist/{chunk-JLNBQWZ2.js → chunk-5JMAGU26.js} +7 -6
- package/dist/{chunk-JLNBQWZ2.js.map → chunk-5JMAGU26.js.map} +1 -1
- package/dist/{chunk-VDX2J7OX.js → chunk-5W7CTZ2E.js} +4 -4
- package/dist/{chunk-CZUHNJHX.js → chunk-6C7Q6NG3.js} +13 -13
- package/dist/chunk-6TBIWIAG.js +201 -0
- package/dist/chunk-6TBIWIAG.js.map +1 -0
- package/dist/{chunk-4O6R3GPK.js → chunk-6W2ISYUV.js} +4 -4
- package/dist/{chunk-3AJOJOFP.js → chunk-77DAFTUU.js} +3 -3
- package/dist/{chunk-IKT6ZVO7.js → chunk-7DHFB5SG.js} +3 -3
- package/dist/{chunk-SFR7J2G6.js → chunk-7G34CBKS.js} +2 -2
- package/dist/{chunk-IT57AOMC.js → chunk-AH2NX6S7.js} +3 -3
- package/dist/{chunk-HYQJQGD3.js → chunk-AM4T6CHX.js} +49 -35
- package/dist/chunk-AM4T6CHX.js.map +1 -0
- package/dist/{chunk-Z54EM5YZ.js → chunk-B2QHVLJO.js} +60 -30
- package/dist/chunk-B2QHVLJO.js.map +1 -0
- package/dist/{chunk-FI3PIOOI.js → chunk-B4CSPFYN.js} +8 -8
- package/dist/{chunk-7PJARJS4.js → chunk-BPM6UHUL.js} +2 -2
- package/dist/{chunk-PPUTUOC3.js → chunk-BTHDQOF4.js} +5 -5
- package/dist/{chunk-AW4A4XOP.js → chunk-CZGOLAEW.js} +41 -41
- package/dist/{chunk-5PGYCWA7.js → chunk-DE6YCZEE.js} +2 -2
- package/dist/{chunk-JOA4Q765.js → chunk-EUYWQ7TS.js} +2 -2
- package/dist/{chunk-O5AFC5KM.js → chunk-EWL5DICB.js} +2 -2
- package/dist/{chunk-4YZCIK5E.js → chunk-EZXGJJXM.js} +2 -2
- package/dist/{chunk-GXIY65UH.js → chunk-FI5EAP4N.js} +2 -2
- package/dist/{chunk-YOKSRIFI.js → chunk-FUWS2MNJ.js} +4 -4
- package/dist/{chunk-6RK2X7BR.js → chunk-G3JFFUKR.js} +2 -2
- package/dist/{chunk-VANZKHTN.js → chunk-G5OB4XZX.js} +4 -4
- package/dist/{chunk-66SLUXKM.js → chunk-HK6KYIF6.js} +2 -2
- package/dist/{chunk-XBGLEOID.js → chunk-I4BLRM7X.js} +9 -9
- package/dist/{chunk-5ZIWRMZM.js → chunk-IVKIODHO.js} +7 -6
- package/dist/chunk-IVKIODHO.js.map +1 -0
- package/dist/{chunk-6SX4MY5Q.js → chunk-J65AKOD6.js} +2 -2
- package/dist/{chunk-BPWZDHFM.js → chunk-J6QIAYNR.js} +2 -2
- package/dist/{chunk-XL3TATMJ.js → chunk-JHMAYABJ.js} +4 -4
- package/dist/{chunk-F7M36OG2.js → chunk-JNWISMYG.js} +10 -10
- package/dist/{chunk-VYIXCMUP.js → chunk-KBIIE57I.js} +3 -3
- package/dist/{chunk-QKPDN325.js → chunk-KF75ANST.js} +6 -3
- package/dist/chunk-KF75ANST.js.map +1 -0
- package/dist/{chunk-24PNX2GF.js → chunk-KXYMU4IN.js} +3 -3
- package/dist/{chunk-FKTD7IVS.js → chunk-L3JVAM5Q.js} +2 -2
- package/dist/{chunk-5QHDXMXP.js → chunk-LLZKOSGM.js} +1 -1
- package/dist/{chunk-5QHDXMXP.js.map → chunk-LLZKOSGM.js.map} +1 -1
- package/dist/{chunk-LIF6DO6U.js → chunk-MG7GI4TT.js} +2 -2
- package/dist/{chunk-RUZM6Z52.js → chunk-MMZK2DWN.js} +1 -1
- package/dist/{chunk-NTJ6TY44.js → chunk-ODAE36PG.js} +3 -3
- package/dist/{chunk-QFN4U7AG.js → chunk-ODZKV2F7.js} +3 -3
- package/dist/{chunk-QFN4U7AG.js.map → chunk-ODZKV2F7.js.map} +1 -1
- package/dist/{chunk-YLHM5BQQ.js → chunk-OLX2HJFW.js} +4 -4
- package/dist/{chunk-DNC4A7RS.js → chunk-OU7RWWW6.js} +2 -2
- package/dist/{chunk-L3LRWDJW.js → chunk-OV36CROW.js} +3 -3
- package/dist/{chunk-BXLOS5AJ.js → chunk-OWHERGF2.js} +2 -2
- package/dist/{chunk-CSV34HIW.js → chunk-P5OYNV7B.js} +2 -2
- package/dist/{chunk-SNW3YRO6.js → chunk-P6GOYLHN.js} +2 -2
- package/dist/{chunk-C5B3CIMJ.js → chunk-PFPNUFKZ.js} +109 -59
- package/dist/chunk-PFPNUFKZ.js.map +1 -0
- package/dist/{chunk-USGKHF36.js → chunk-QUJC22CT.js} +2 -2
- package/dist/{chunk-BVRREV3N.js → chunk-R7IV3EUJ.js} +2 -2
- package/dist/{chunk-KSXJOC4F.js → chunk-RDFF2NAU.js} +18 -8
- package/dist/chunk-RDFF2NAU.js.map +1 -0
- package/dist/{chunk-D4LVHPOA.js → chunk-RXN7Z2V5.js} +3 -3
- package/dist/{chunk-7VSHDLJQ.js → chunk-T2VJ2EO5.js} +6 -6
- package/dist/chunk-TOTT6S2V.js +20 -0
- package/dist/chunk-TOTT6S2V.js.map +1 -0
- package/dist/{chunk-U7BMN33M.js → chunk-UBSM6TZP.js} +2 -2
- package/dist/{chunk-DQEMWVMT.js → chunk-UVYI6VIX.js} +1 -1
- package/dist/{chunk-U7XLOSG2.js → chunk-VIM6QH4D.js} +2 -2
- package/dist/{chunk-LJJWFV2Q.js → chunk-VJXSAJFW.js} +2 -2
- package/dist/{chunk-HZC3OECF.js → chunk-VOKK4WCG.js} +2 -2
- package/dist/{chunk-LTAVSOZW.js → chunk-WVP2I6C5.js} +5 -4
- package/dist/chunk-WVP2I6C5.js.map +1 -0
- package/dist/{chunk-LRDP2AC2.js → chunk-YBCZTBN2.js} +2 -2
- package/dist/{chunk-USAUBGBC.js → chunk-YKZFX2HQ.js} +2 -2
- package/dist/{chunk-I2GIYTRU.js → chunk-ZOGOOSB3.js} +2 -2
- package/dist/{chunk-PBGWYM3H.js → chunk-ZPUIRTIZ.js} +27 -15
- package/dist/chunk-ZPUIRTIZ.js.map +1 -0
- package/dist/chunking.d.ts +3 -1
- package/dist/chunking.js +8 -3
- package/dist/{cli-DTOkYhKI.d.ts → cli-DsyVvOFP.d.ts} +5 -5
- package/dist/cli.d.ts +14 -13
- package/dist/cli.js +57 -56
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +10 -10
- package/dist/compounding/preference-consolidator.d.ts +2 -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 +12 -11
- package/dist/connectors/codex-materialize.d.ts +7 -12
- package/dist/connectors/codex-materialize.js +2 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +12 -11
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/contradiction/index.js +4 -4
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +12 -12
- 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 +12 -12
- package/dist/day-summary.d.ts +1 -1
- package/dist/day-summary.js +3 -2
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-C_K_AHcv.d.ts → dependency-propagation-delivery-DdwSc1qh.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 +2 -2
- package/dist/entity-retrieval.js +10 -10
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +10 -9
- package/dist/external-wiki-access.d.ts +12 -11
- package/dist/external-wiki-access.js +26 -25
- 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 +12 -11
- 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 +1 -1
- package/dist/extraction-prompt.d.ts +1 -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 +1 -1
- package/dist/extraction.js +16 -15
- 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-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +698 -697
- package/dist/index.js +81 -80
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/archive.d.ts +3 -2
- package/dist/lcm/archive.js +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +5 -4
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +7 -6
- package/dist/lcm/recall.d.ts +1 -0
- package/dist/lcm/summarizer.d.ts +1 -0
- package/dist/lcm/summarizer.js +3 -2
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +2 -3
- package/dist/local-llm.js +2 -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 +10 -10
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +10 -10
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +11 -11
- package/dist/{maintenance-DdP931i9.d.ts → maintenance-DvkiF7fm.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +12 -11
- 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 +11 -11
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +7 -7
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +10 -10
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +13 -13
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +18 -18
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +15 -15
- package/dist/{orchestrator-DxUWX7gs.d.ts → orchestrator-CXPIzs3D.d.ts} +9 -9
- package/dist/orchestrator.d.ts +10 -9
- package/dist/orchestrator.js +77 -76
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-BKUMU1vU.d.ts → pipeline-BuYWU9rt.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/{public-http-C01DLhAp.d.ts → public-http-m9x1Qyzn.d.ts} +1 -1
- package/dist/{qmd-DJP-GLFe.d.ts → qmd-DYnrPw-m.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +4 -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-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 +5 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +4 -3
- package/dist/recall-xray.d.ts +2 -7
- package/dist/recall-xray.js +3 -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/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/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +4 -3
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/schemas.d.ts +138 -138
- package/dist/{scope-profiles-CaKcnB-6.d.ts → scope-profiles-C1QG4Cmv.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 +6 -6
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +11 -11
- 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-chunking.js +3 -2
- package/dist/{semantic-consolidation-P0eMWqh-.d.ts → semantic-consolidation-DMeX8XS0.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +14 -13
- package/dist/semantic-rule-promotion.js +10 -10
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +10 -10
- package/dist/{service-D5GQLxq_.d.ts → service-CT3ENiTO.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/session-observer-state.js +1 -1
- package/dist/shared-context/manager.d.ts +9 -9
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +12 -11
- package/dist/{storage-DIyil2ll.d.ts → storage-B0L76y7N.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +9 -9
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -2
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +15 -14
- package/dist/support-passport/index.js +28 -27
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/token-estimate.d.ts +10 -0
- package/dist/token-estimate.js +8 -0
- package/dist/token-estimate.js.map +1 -0
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -6
- package/dist/transcript.js +2 -1
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-CbXieHKr.d.ts → types-D7pB0QwO.d.ts} +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +10 -10
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +12 -2
- package/src/chunking.ts +124 -45
- package/src/config.ts +2 -0
- package/src/connectors/codex-materialize.ts +21 -26
- package/src/lcm/archive.ts +4 -5
- package/src/lcm/engine.ts +55 -34
- package/src/lcm/summarizer.ts +27 -16
- package/src/lcm-engine.test.ts +82 -2
- package/src/local-llm.ts +4 -6
- package/src/memory-extension-host/render-extensions-block.ts +3 -9
- package/src/orchestration/recall-section-coordinator.ts +93 -27
- package/src/recall-token-budget.test.ts +51 -0
- package/src/recall-xray.ts +4 -11
- package/src/semantic-chunking.ts +14 -59
- package/src/session-observer-state.ts +3 -3
- package/src/testing/subjects/recall-budget.test.ts +21 -5
- package/src/token-estimate.test.ts +38 -0
- package/src/token-estimate.ts +22 -0
- package/src/transcript.test.ts +38 -3
- package/src/transcript.ts +58 -59
- package/src/types.ts +1 -1
- package/dist/chunk-5ZIWRMZM.js.map +0 -1
- package/dist/chunk-C5B3CIMJ.js.map +0 -1
- package/dist/chunk-HYQJQGD3.js.map +0 -1
- package/dist/chunk-KSXJOC4F.js.map +0 -1
- package/dist/chunk-LTAVSOZW.js.map +0 -1
- package/dist/chunk-P4BC54KI.js.map +0 -1
- package/dist/chunk-PBGWYM3H.js.map +0 -1
- package/dist/chunk-QKPDN325.js.map +0 -1
- package/dist/chunk-UQ7RN5HK.js +0 -126
- package/dist/chunk-UQ7RN5HK.js.map +0 -1
- package/dist/chunk-Z54EM5YZ.js.map +0 -1
- /package/dist/{capsule-crypto-YO5QJ6L3.js.map → capsule-crypto-GWVG7LGC.js.map} +0 -0
- /package/dist/{chunk-YTZA7U6Q.js.map → chunk-2VHCLHZ5.js.map} +0 -0
- /package/dist/{chunk-NEJQ65NV.js.map → chunk-4CLE2LXB.js.map} +0 -0
- /package/dist/{chunk-VDX2J7OX.js.map → chunk-5W7CTZ2E.js.map} +0 -0
- /package/dist/{chunk-CZUHNJHX.js.map → chunk-6C7Q6NG3.js.map} +0 -0
- /package/dist/{chunk-4O6R3GPK.js.map → chunk-6W2ISYUV.js.map} +0 -0
- /package/dist/{chunk-3AJOJOFP.js.map → chunk-77DAFTUU.js.map} +0 -0
- /package/dist/{chunk-IKT6ZVO7.js.map → chunk-7DHFB5SG.js.map} +0 -0
- /package/dist/{chunk-SFR7J2G6.js.map → chunk-7G34CBKS.js.map} +0 -0
- /package/dist/{chunk-IT57AOMC.js.map → chunk-AH2NX6S7.js.map} +0 -0
- /package/dist/{chunk-FI3PIOOI.js.map → chunk-B4CSPFYN.js.map} +0 -0
- /package/dist/{chunk-7PJARJS4.js.map → chunk-BPM6UHUL.js.map} +0 -0
- /package/dist/{chunk-PPUTUOC3.js.map → chunk-BTHDQOF4.js.map} +0 -0
- /package/dist/{chunk-AW4A4XOP.js.map → chunk-CZGOLAEW.js.map} +0 -0
- /package/dist/{chunk-5PGYCWA7.js.map → chunk-DE6YCZEE.js.map} +0 -0
- /package/dist/{chunk-JOA4Q765.js.map → chunk-EUYWQ7TS.js.map} +0 -0
- /package/dist/{chunk-O5AFC5KM.js.map → chunk-EWL5DICB.js.map} +0 -0
- /package/dist/{chunk-4YZCIK5E.js.map → chunk-EZXGJJXM.js.map} +0 -0
- /package/dist/{chunk-GXIY65UH.js.map → chunk-FI5EAP4N.js.map} +0 -0
- /package/dist/{chunk-YOKSRIFI.js.map → chunk-FUWS2MNJ.js.map} +0 -0
- /package/dist/{chunk-6RK2X7BR.js.map → chunk-G3JFFUKR.js.map} +0 -0
- /package/dist/{chunk-VANZKHTN.js.map → chunk-G5OB4XZX.js.map} +0 -0
- /package/dist/{chunk-66SLUXKM.js.map → chunk-HK6KYIF6.js.map} +0 -0
- /package/dist/{chunk-XBGLEOID.js.map → chunk-I4BLRM7X.js.map} +0 -0
- /package/dist/{chunk-6SX4MY5Q.js.map → chunk-J65AKOD6.js.map} +0 -0
- /package/dist/{chunk-BPWZDHFM.js.map → chunk-J6QIAYNR.js.map} +0 -0
- /package/dist/{chunk-XL3TATMJ.js.map → chunk-JHMAYABJ.js.map} +0 -0
- /package/dist/{chunk-F7M36OG2.js.map → chunk-JNWISMYG.js.map} +0 -0
- /package/dist/{chunk-VYIXCMUP.js.map → chunk-KBIIE57I.js.map} +0 -0
- /package/dist/{chunk-24PNX2GF.js.map → chunk-KXYMU4IN.js.map} +0 -0
- /package/dist/{chunk-FKTD7IVS.js.map → chunk-L3JVAM5Q.js.map} +0 -0
- /package/dist/{chunk-LIF6DO6U.js.map → chunk-MG7GI4TT.js.map} +0 -0
- /package/dist/{chunk-RUZM6Z52.js.map → chunk-MMZK2DWN.js.map} +0 -0
- /package/dist/{chunk-NTJ6TY44.js.map → chunk-ODAE36PG.js.map} +0 -0
- /package/dist/{chunk-YLHM5BQQ.js.map → chunk-OLX2HJFW.js.map} +0 -0
- /package/dist/{chunk-DNC4A7RS.js.map → chunk-OU7RWWW6.js.map} +0 -0
- /package/dist/{chunk-L3LRWDJW.js.map → chunk-OV36CROW.js.map} +0 -0
- /package/dist/{chunk-BXLOS5AJ.js.map → chunk-OWHERGF2.js.map} +0 -0
- /package/dist/{chunk-CSV34HIW.js.map → chunk-P5OYNV7B.js.map} +0 -0
- /package/dist/{chunk-SNW3YRO6.js.map → chunk-P6GOYLHN.js.map} +0 -0
- /package/dist/{chunk-USGKHF36.js.map → chunk-QUJC22CT.js.map} +0 -0
- /package/dist/{chunk-BVRREV3N.js.map → chunk-R7IV3EUJ.js.map} +0 -0
- /package/dist/{chunk-D4LVHPOA.js.map → chunk-RXN7Z2V5.js.map} +0 -0
- /package/dist/{chunk-7VSHDLJQ.js.map → chunk-T2VJ2EO5.js.map} +0 -0
- /package/dist/{chunk-U7BMN33M.js.map → chunk-UBSM6TZP.js.map} +0 -0
- /package/dist/{chunk-DQEMWVMT.js.map → chunk-UVYI6VIX.js.map} +0 -0
- /package/dist/{chunk-U7XLOSG2.js.map → chunk-VIM6QH4D.js.map} +0 -0
- /package/dist/{chunk-LJJWFV2Q.js.map → chunk-VJXSAJFW.js.map} +0 -0
- /package/dist/{chunk-HZC3OECF.js.map → chunk-VOKK4WCG.js.map} +0 -0
- /package/dist/{chunk-LRDP2AC2.js.map → chunk-YBCZTBN2.js.map} +0 -0
- /package/dist/{chunk-USAUBGBC.js.map → chunk-YKZFX2HQ.js.map} +0 -0
- /package/dist/{chunk-I2GIYTRU.js.map → chunk-ZOGOOSB3.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StorageManager
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2VHCLHZ5.js";
|
|
4
4
|
import {
|
|
5
5
|
keyring_exports,
|
|
6
6
|
secureStoreDir
|
|
@@ -412,4 +412,4 @@ export {
|
|
|
412
412
|
resolveNamespaceStorageRoot,
|
|
413
413
|
NamespaceStorageRouter
|
|
414
414
|
};
|
|
415
|
-
//# sourceMappingURL=chunk-
|
|
415
|
+
//# sourceMappingURL=chunk-MG7GI4TT.js.map
|
|
@@ -49,7 +49,7 @@ import {
|
|
|
49
49
|
buildExtensionsFooterForSummary,
|
|
50
50
|
formatDaySummaryMemories,
|
|
51
51
|
loadDaySummaryPrompt
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-J6QIAYNR.js";
|
|
53
53
|
import {
|
|
54
54
|
delinearize
|
|
55
55
|
} from "./chunk-VEWZZM3H.js";
|
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
} from "./chunk-NLE6TSLG.js";
|
|
66
66
|
import {
|
|
67
67
|
LocalLlmClient
|
|
68
|
-
} from "./chunk-
|
|
68
|
+
} from "./chunk-IVKIODHO.js";
|
|
69
69
|
import {
|
|
70
70
|
normalizeProcedureSteps
|
|
71
71
|
} from "./chunk-QDW3E4RD.js";
|
|
@@ -2442,4 +2442,4 @@ export {
|
|
|
2442
2442
|
shouldEnableLocalExtractionThinking,
|
|
2443
2443
|
ExtractionEngine
|
|
2444
2444
|
};
|
|
2445
|
-
//# sourceMappingURL=chunk-
|
|
2445
|
+
//# sourceMappingURL=chunk-ODAE36PG.js.map
|
|
@@ -85,7 +85,7 @@ var SessionObserverState = class {
|
|
|
85
85
|
try {
|
|
86
86
|
const raw = await readFile(this.statePath, "utf-8");
|
|
87
87
|
const parsed = JSON.parse(raw);
|
|
88
|
-
if (parsed?.version !==
|
|
88
|
+
if (parsed?.version !== 2 || !parsed.sessions || typeof parsed.sessions !== "object") {
|
|
89
89
|
return null;
|
|
90
90
|
}
|
|
91
91
|
return parsed;
|
|
@@ -183,7 +183,7 @@ var SessionObserverState = class {
|
|
|
183
183
|
for (const [key, value] of sessionsMap.entries()) {
|
|
184
184
|
sessions[key] = value;
|
|
185
185
|
}
|
|
186
|
-
const payload = { version:
|
|
186
|
+
const payload = { version: 2, sessions };
|
|
187
187
|
await mkdir(path.dirname(this.statePath), { recursive: true });
|
|
188
188
|
await writeFile(this.statePath, JSON.stringify(payload, null, 2), "utf-8");
|
|
189
189
|
}
|
|
@@ -323,4 +323,4 @@ export {
|
|
|
323
323
|
normalizeObserverBands,
|
|
324
324
|
SessionObserverState
|
|
325
325
|
};
|
|
326
|
-
//# sourceMappingURL=chunk-
|
|
326
|
+
//# sourceMappingURL=chunk-ODZKV2F7.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/session-observer-state.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, open, readFile, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { log } from \"./logger.js\";\nimport type { SessionObserverBandConfig } from \"./types.js\";\nimport { cloneDefaultSessionObserverBands } from \"./session-observer-bands.js\";\n\ninterface SessionObserverCursor {\n sessionKey: string;\n cursorBytes: number;\n cursorTokens: number;\n lastObservedAt: string;\n lastTriggeredAt?: string;\n lastResetAt?: string;\n}\n\ninterface SessionObserverPersistedState {\n version: 1;\n sessions: Record<string, SessionObserverCursor>;\n}\n\nexport interface SessionObservationInput {\n sessionKey: string;\n totalBytes: number;\n totalTokens: number;\n observedAt?: string;\n}\n\nexport interface SessionObservationDecision {\n triggered: boolean;\n deltaBytes: number;\n deltaTokens: number;\n band: SessionObserverBandConfig;\n reason?: \"threshold\" | \"debounced\" | \"baseline\";\n}\n\nfunction sanitizeNonNegativeInt(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.max(0, Math.floor(value));\n}\n\nfunction parseIsoMs(value?: string): number {\n if (!value) return 0;\n const ms = Date.parse(value);\n return Number.isFinite(ms) ? ms : 0;\n}\n\nfunction mergeSessionCursor(\n existing: SessionObserverCursor,\n incoming: SessionObserverCursor,\n): SessionObserverCursor {\n const existingObservedMs = parseIsoMs(existing.lastObservedAt);\n const incomingObservedMs = parseIsoMs(incoming.lastObservedAt);\n const existingTriggeredMs = parseIsoMs(existing.lastTriggeredAt);\n const incomingTriggeredMs = parseIsoMs(incoming.lastTriggeredAt);\n const existingResetMs = parseIsoMs(existing.lastResetAt);\n const incomingResetMs = parseIsoMs(incoming.lastResetAt);\n\n const observedAt =\n incomingObservedMs >= existingObservedMs ? incoming.lastObservedAt : existing.lastObservedAt;\n const triggeredAt =\n incomingTriggeredMs >= existingTriggeredMs ? incoming.lastTriggeredAt : existing.lastTriggeredAt;\n\n // Preserve monotonic cursor progression except for explicit reset observations.\n const incomingIsNewer = incomingObservedMs >= existingObservedMs;\n const incomingHasNewerReset = incomingResetMs > existingResetMs;\n const allowIncomingReset = incomingIsNewer && incomingHasNewerReset;\n const keepExistingReset =\n existingResetMs > incomingResetMs && existingObservedMs >= incomingObservedMs;\n\n let cursorBytes = Math.max(\n sanitizeNonNegativeInt(existing.cursorBytes),\n sanitizeNonNegativeInt(incoming.cursorBytes),\n );\n let cursorTokens = Math.max(\n sanitizeNonNegativeInt(existing.cursorTokens),\n sanitizeNonNegativeInt(incoming.cursorTokens),\n );\n if (keepExistingReset) {\n cursorBytes = sanitizeNonNegativeInt(existing.cursorBytes);\n cursorTokens = sanitizeNonNegativeInt(existing.cursorTokens);\n } else if (allowIncomingReset) {\n cursorBytes = sanitizeNonNegativeInt(incoming.cursorBytes);\n cursorTokens = sanitizeNonNegativeInt(incoming.cursorTokens);\n }\n\n return {\n sessionKey: existing.sessionKey,\n cursorBytes,\n cursorTokens,\n lastObservedAt: observedAt,\n lastTriggeredAt: triggeredAt,\n lastResetAt:\n incomingResetMs >= existingResetMs ? incoming.lastResetAt : existing.lastResetAt,\n };\n}\n\nexport function normalizeObserverBands(\n bands: SessionObserverBandConfig[],\n): SessionObserverBandConfig[] {\n const normalized = bands\n .map((band) => ({\n maxBytes: sanitizeNonNegativeInt(band.maxBytes),\n triggerDeltaBytes: sanitizeNonNegativeInt(band.triggerDeltaBytes),\n triggerDeltaTokens: sanitizeNonNegativeInt(band.triggerDeltaTokens),\n }))\n .filter((band) => band.maxBytes > 0)\n .sort((a, b) => a.maxBytes - b.maxBytes);\n\n if (normalized.length === 0) {\n return cloneDefaultSessionObserverBands();\n }\n\n const last = normalized[normalized.length - 1];\n if (last && last.maxBytes < 1_000_000_000) {\n normalized.push({\n maxBytes: 1_000_000_000,\n triggerDeltaBytes: last.triggerDeltaBytes,\n triggerDeltaTokens: last.triggerDeltaTokens,\n });\n }\n return normalized;\n}\n\nexport class SessionObserverState {\n private readonly statePath: string;\n private readonly lockPath: string;\n private readonly lockStaleMs = 120_000;\n private readonly debounceMs: number;\n private readonly bands: SessionObserverBandConfig[];\n private sessions = new Map<string, SessionObserverCursor>();\n private saveQueue: Promise<void> = Promise.resolve();\n\n private async readPersistedState(): Promise<SessionObserverPersistedState | null> {\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n const parsed = JSON.parse(raw) as SessionObserverPersistedState;\n if (parsed?.version !== 1 || !parsed.sessions || typeof parsed.sessions !== \"object\") {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n private normalizePersistedSessions(\n sessions: Record<string, SessionObserverCursor>,\n ): Map<string, SessionObserverCursor> {\n const next = new Map<string, SessionObserverCursor>();\n for (const [sessionKey, value] of Object.entries(sessions)) {\n if (!value || typeof value !== \"object\") continue;\n next.set(sessionKey, {\n sessionKey,\n cursorBytes: sanitizeNonNegativeInt(value.cursorBytes),\n cursorTokens: sanitizeNonNegativeInt(value.cursorTokens),\n lastObservedAt:\n typeof value.lastObservedAt === \"string\" ? value.lastObservedAt : new Date(0).toISOString(),\n lastTriggeredAt: typeof value.lastTriggeredAt === \"string\" ? value.lastTriggeredAt : undefined,\n lastResetAt: typeof value.lastResetAt === \"string\" ? value.lastResetAt : undefined,\n });\n }\n return next;\n }\n\n constructor(opts: {\n memoryDir: string;\n debounceMs: number;\n bands: SessionObserverBandConfig[];\n }) {\n this.statePath = path.join(opts.memoryDir, \"state\", \"session-observer-state.json\");\n this.lockPath = path.join(opts.memoryDir, \"state\", \"session-observer-state.lock\");\n this.debounceMs = Math.max(0, Math.floor(opts.debounceMs));\n this.bands = normalizeObserverBands(opts.bands);\n }\n\n private async withSaveLock(fn: () => Promise<void>): Promise<void> {\n await mkdir(path.dirname(this.lockPath), { recursive: true });\n for (let attempt = 0; attempt < 80; attempt++) {\n try {\n const handle = await open(this.lockPath, \"wx\");\n try {\n await fn();\n } finally {\n await handle.close();\n await unlink(this.lockPath).catch(() => {});\n }\n return;\n } catch (err: any) {\n if (err?.code !== \"EEXIST\") throw err;\n try {\n const lockInfo = await stat(this.lockPath);\n if (Date.now() - lockInfo.mtimeMs > this.lockStaleMs) {\n await unlink(this.lockPath).catch(() => {});\n continue;\n }\n } catch {\n // Lock might have been released between EEXIST and stat/read.\n }\n await new Promise((resolve) => setTimeout(resolve, 25));\n }\n }\n const error = new Error(\"session observer save lock timeout\");\n log.debug(error.message);\n throw error;\n }\n\n async load(): Promise<void> {\n const parsed = await this.readPersistedState();\n if (!parsed) {\n this.sessions.clear();\n return;\n }\n this.sessions = this.normalizePersistedSessions(parsed.sessions);\n }\n\n async save(): Promise<void> {\n await this.withSaveLock(async () => {\n const merged = await this.readMergedSessions();\n this.sessions = merged;\n\n await this.writeSessions(merged);\n });\n }\n\n private async readMergedSessions(): Promise<Map<string, SessionObserverCursor>> {\n const merged = new Map<string, SessionObserverCursor>();\n const persisted = await this.readPersistedState();\n if (persisted) {\n for (const [key, value] of this.normalizePersistedSessions(persisted.sessions).entries()) {\n merged.set(key, value);\n }\n }\n for (const [key, current] of this.sessions.entries()) {\n const existing = merged.get(key);\n if (!existing) {\n merged.set(key, current);\n continue;\n }\n merged.set(key, mergeSessionCursor(existing, current));\n }\n return merged;\n }\n\n private async writeSessions(sessionsMap: Map<string, SessionObserverCursor>): Promise<void> {\n const sessions = Object.create(null) as Record<string, SessionObserverCursor>;\n for (const [key, value] of sessionsMap.entries()) {\n sessions[key] = value;\n }\n const payload: SessionObserverPersistedState = { version: 1, sessions };\n await mkdir(path.dirname(this.statePath), { recursive: true });\n await writeFile(this.statePath, JSON.stringify(payload, null, 2), \"utf-8\");\n }\n\n private enqueueObservation(\n input: SessionObservationInput,\n ): Promise<SessionObservationDecision> {\n const operation = this.saveQueue\n .catch(() => undefined)\n .then(() => this.observeWithSaveLock(input));\n this.saveQueue = operation.then(\n () => undefined,\n () => undefined,\n );\n return operation;\n }\n\n private bandForTotalBytes(totalBytes: number): SessionObserverBandConfig {\n const bytes = sanitizeNonNegativeInt(totalBytes);\n for (const band of this.bands) {\n if (bytes <= band.maxBytes) return band;\n }\n return this.bands[this.bands.length - 1];\n }\n\n async observe(input: SessionObservationInput): Promise<SessionObservationDecision> {\n return this.enqueueObservation(input);\n }\n\n private async observeWithSaveLock(\n input: SessionObservationInput,\n ): Promise<SessionObservationDecision> {\n let decision: SessionObservationDecision | undefined;\n await this.withSaveLock(async () => {\n const localExisting = this.sessions.get(input.sessionKey);\n const sessions = await this.readMergedSessions();\n decision = await this.observeMerged(\n input,\n sessions,\n localExisting ? { ...localExisting } : undefined,\n );\n });\n if (!decision) {\n throw new Error(\"session observer decision was not computed\");\n }\n return decision;\n }\n\n private async observeMerged(\n input: SessionObservationInput,\n sessions: Map<string, SessionObserverCursor>,\n localExisting?: SessionObserverCursor,\n ): Promise<SessionObservationDecision> {\n const nowIso = input.observedAt ?? new Date().toISOString();\n const totalBytes = sanitizeNonNegativeInt(input.totalBytes);\n const totalTokens = sanitizeNonNegativeInt(input.totalTokens);\n const band = this.bandForTotalBytes(totalBytes);\n\n const existing = sessions.get(input.sessionKey);\n if (!existing) {\n sessions.set(input.sessionKey, {\n sessionKey: input.sessionKey,\n cursorBytes: totalBytes,\n cursorTokens: totalTokens,\n lastObservedAt: nowIso,\n });\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return {\n triggered: false,\n deltaBytes: 0,\n deltaTokens: 0,\n band,\n reason: \"baseline\",\n };\n }\n\n const session = { ...existing };\n const observedMs = parseIsoMs(nowIso);\n const existingObservedMs = parseIsoMs(session.lastObservedAt);\n const existingResetMs = parseIsoMs(session.lastResetAt);\n if (existingResetMs > 0 && observedMs < existingResetMs) {\n this.sessions = sessions;\n return { triggered: false, deltaBytes: 0, deltaTokens: 0, band, reason: \"baseline\" };\n }\n\n if (totalBytes < session.cursorBytes || totalTokens < session.cursorTokens) {\n const localSawReset =\n localExisting !== undefined\n && (totalBytes < sanitizeNonNegativeInt(localExisting.cursorBytes)\n || totalTokens < sanitizeNonNegativeInt(localExisting.cursorTokens));\n const canApplyReset = localSawReset && observedMs >= existingObservedMs;\n\n if (canApplyReset) {\n session.cursorBytes = totalBytes;\n session.cursorTokens = totalTokens;\n session.lastObservedAt = nowIso;\n session.lastResetAt = nowIso;\n } else if (observedMs >= existingObservedMs) {\n session.lastObservedAt = nowIso;\n }\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return { triggered: false, deltaBytes: 0, deltaTokens: 0, band, reason: \"baseline\" };\n }\n\n const deltaBytes = totalBytes - session.cursorBytes;\n const deltaTokens = totalTokens - session.cursorTokens;\n const crossedThreshold =\n (band.triggerDeltaBytes > 0 && deltaBytes >= band.triggerDeltaBytes)\n || (band.triggerDeltaTokens > 0 && deltaTokens >= band.triggerDeltaTokens);\n session.lastObservedAt = nowIso;\n\n if (!crossedThreshold) {\n const unchanged = deltaBytes === 0 && deltaTokens === 0;\n if (!unchanged) {\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n } else {\n this.sessions = sessions;\n }\n return {\n triggered: false,\n deltaBytes,\n deltaTokens,\n band,\n };\n }\n\n const nowMs = Date.parse(nowIso);\n const lastTriggeredMs = session.lastTriggeredAt ? Date.parse(session.lastTriggeredAt) : NaN;\n const withinDebounce =\n Number.isFinite(lastTriggeredMs) && nowMs - lastTriggeredMs < this.debounceMs;\n\n if (withinDebounce) {\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return {\n triggered: false,\n deltaBytes,\n deltaTokens,\n band,\n reason: \"debounced\",\n };\n }\n\n session.lastTriggeredAt = nowIso;\n session.cursorBytes = totalBytes;\n session.cursorTokens = totalTokens;\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return {\n triggered: true,\n deltaBytes,\n deltaTokens,\n band,\n reason: \"threshold\",\n };\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/session-observer-state.ts"],"sourcesContent":["import path from \"node:path\";\nimport { mkdir, open, readFile, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { log } from \"./logger.js\";\nimport type { SessionObserverBandConfig } from \"./types.js\";\nimport { cloneDefaultSessionObserverBands } from \"./session-observer-bands.js\";\n\ninterface SessionObserverCursor {\n sessionKey: string;\n cursorBytes: number;\n cursorTokens: number;\n lastObservedAt: string;\n lastTriggeredAt?: string;\n lastResetAt?: string;\n}\n\ninterface SessionObserverPersistedState {\n version: 2;\n sessions: Record<string, SessionObserverCursor>;\n}\n\nexport interface SessionObservationInput {\n sessionKey: string;\n totalBytes: number;\n totalTokens: number;\n observedAt?: string;\n}\n\nexport interface SessionObservationDecision {\n triggered: boolean;\n deltaBytes: number;\n deltaTokens: number;\n band: SessionObserverBandConfig;\n reason?: \"threshold\" | \"debounced\" | \"baseline\";\n}\n\nfunction sanitizeNonNegativeInt(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.max(0, Math.floor(value));\n}\n\nfunction parseIsoMs(value?: string): number {\n if (!value) return 0;\n const ms = Date.parse(value);\n return Number.isFinite(ms) ? ms : 0;\n}\n\nfunction mergeSessionCursor(\n existing: SessionObserverCursor,\n incoming: SessionObserverCursor,\n): SessionObserverCursor {\n const existingObservedMs = parseIsoMs(existing.lastObservedAt);\n const incomingObservedMs = parseIsoMs(incoming.lastObservedAt);\n const existingTriggeredMs = parseIsoMs(existing.lastTriggeredAt);\n const incomingTriggeredMs = parseIsoMs(incoming.lastTriggeredAt);\n const existingResetMs = parseIsoMs(existing.lastResetAt);\n const incomingResetMs = parseIsoMs(incoming.lastResetAt);\n\n const observedAt =\n incomingObservedMs >= existingObservedMs ? incoming.lastObservedAt : existing.lastObservedAt;\n const triggeredAt =\n incomingTriggeredMs >= existingTriggeredMs ? incoming.lastTriggeredAt : existing.lastTriggeredAt;\n\n // Preserve monotonic cursor progression except for explicit reset observations.\n const incomingIsNewer = incomingObservedMs >= existingObservedMs;\n const incomingHasNewerReset = incomingResetMs > existingResetMs;\n const allowIncomingReset = incomingIsNewer && incomingHasNewerReset;\n const keepExistingReset =\n existingResetMs > incomingResetMs && existingObservedMs >= incomingObservedMs;\n\n let cursorBytes = Math.max(\n sanitizeNonNegativeInt(existing.cursorBytes),\n sanitizeNonNegativeInt(incoming.cursorBytes),\n );\n let cursorTokens = Math.max(\n sanitizeNonNegativeInt(existing.cursorTokens),\n sanitizeNonNegativeInt(incoming.cursorTokens),\n );\n if (keepExistingReset) {\n cursorBytes = sanitizeNonNegativeInt(existing.cursorBytes);\n cursorTokens = sanitizeNonNegativeInt(existing.cursorTokens);\n } else if (allowIncomingReset) {\n cursorBytes = sanitizeNonNegativeInt(incoming.cursorBytes);\n cursorTokens = sanitizeNonNegativeInt(incoming.cursorTokens);\n }\n\n return {\n sessionKey: existing.sessionKey,\n cursorBytes,\n cursorTokens,\n lastObservedAt: observedAt,\n lastTriggeredAt: triggeredAt,\n lastResetAt:\n incomingResetMs >= existingResetMs ? incoming.lastResetAt : existing.lastResetAt,\n };\n}\n\nexport function normalizeObserverBands(\n bands: SessionObserverBandConfig[],\n): SessionObserverBandConfig[] {\n const normalized = bands\n .map((band) => ({\n maxBytes: sanitizeNonNegativeInt(band.maxBytes),\n triggerDeltaBytes: sanitizeNonNegativeInt(band.triggerDeltaBytes),\n triggerDeltaTokens: sanitizeNonNegativeInt(band.triggerDeltaTokens),\n }))\n .filter((band) => band.maxBytes > 0)\n .sort((a, b) => a.maxBytes - b.maxBytes);\n\n if (normalized.length === 0) {\n return cloneDefaultSessionObserverBands();\n }\n\n const last = normalized[normalized.length - 1];\n if (last && last.maxBytes < 1_000_000_000) {\n normalized.push({\n maxBytes: 1_000_000_000,\n triggerDeltaBytes: last.triggerDeltaBytes,\n triggerDeltaTokens: last.triggerDeltaTokens,\n });\n }\n return normalized;\n}\n\nexport class SessionObserverState {\n private readonly statePath: string;\n private readonly lockPath: string;\n private readonly lockStaleMs = 120_000;\n private readonly debounceMs: number;\n private readonly bands: SessionObserverBandConfig[];\n private sessions = new Map<string, SessionObserverCursor>();\n private saveQueue: Promise<void> = Promise.resolve();\n\n private async readPersistedState(): Promise<SessionObserverPersistedState | null> {\n try {\n const raw = await readFile(this.statePath, \"utf-8\");\n const parsed = JSON.parse(raw) as SessionObserverPersistedState;\n if (parsed?.version !== 2 || !parsed.sessions || typeof parsed.sessions !== \"object\") {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n private normalizePersistedSessions(\n sessions: Record<string, SessionObserverCursor>,\n ): Map<string, SessionObserverCursor> {\n const next = new Map<string, SessionObserverCursor>();\n for (const [sessionKey, value] of Object.entries(sessions)) {\n if (!value || typeof value !== \"object\") continue;\n next.set(sessionKey, {\n sessionKey,\n cursorBytes: sanitizeNonNegativeInt(value.cursorBytes),\n cursorTokens: sanitizeNonNegativeInt(value.cursorTokens),\n lastObservedAt:\n typeof value.lastObservedAt === \"string\" ? value.lastObservedAt : new Date(0).toISOString(),\n lastTriggeredAt: typeof value.lastTriggeredAt === \"string\" ? value.lastTriggeredAt : undefined,\n lastResetAt: typeof value.lastResetAt === \"string\" ? value.lastResetAt : undefined,\n });\n }\n return next;\n }\n\n constructor(opts: {\n memoryDir: string;\n debounceMs: number;\n bands: SessionObserverBandConfig[];\n }) {\n this.statePath = path.join(opts.memoryDir, \"state\", \"session-observer-state.json\");\n this.lockPath = path.join(opts.memoryDir, \"state\", \"session-observer-state.lock\");\n this.debounceMs = Math.max(0, Math.floor(opts.debounceMs));\n this.bands = normalizeObserverBands(opts.bands);\n }\n\n private async withSaveLock(fn: () => Promise<void>): Promise<void> {\n await mkdir(path.dirname(this.lockPath), { recursive: true });\n for (let attempt = 0; attempt < 80; attempt++) {\n try {\n const handle = await open(this.lockPath, \"wx\");\n try {\n await fn();\n } finally {\n await handle.close();\n await unlink(this.lockPath).catch(() => {});\n }\n return;\n } catch (err: any) {\n if (err?.code !== \"EEXIST\") throw err;\n try {\n const lockInfo = await stat(this.lockPath);\n if (Date.now() - lockInfo.mtimeMs > this.lockStaleMs) {\n await unlink(this.lockPath).catch(() => {});\n continue;\n }\n } catch {\n // Lock might have been released between EEXIST and stat/read.\n }\n await new Promise((resolve) => setTimeout(resolve, 25));\n }\n }\n const error = new Error(\"session observer save lock timeout\");\n log.debug(error.message);\n throw error;\n }\n\n async load(): Promise<void> {\n const parsed = await this.readPersistedState();\n if (!parsed) {\n this.sessions.clear();\n return;\n }\n this.sessions = this.normalizePersistedSessions(parsed.sessions);\n }\n\n async save(): Promise<void> {\n await this.withSaveLock(async () => {\n const merged = await this.readMergedSessions();\n this.sessions = merged;\n\n await this.writeSessions(merged);\n });\n }\n\n private async readMergedSessions(): Promise<Map<string, SessionObserverCursor>> {\n const merged = new Map<string, SessionObserverCursor>();\n const persisted = await this.readPersistedState();\n if (persisted) {\n for (const [key, value] of this.normalizePersistedSessions(persisted.sessions).entries()) {\n merged.set(key, value);\n }\n }\n for (const [key, current] of this.sessions.entries()) {\n const existing = merged.get(key);\n if (!existing) {\n merged.set(key, current);\n continue;\n }\n merged.set(key, mergeSessionCursor(existing, current));\n }\n return merged;\n }\n\n private async writeSessions(sessionsMap: Map<string, SessionObserverCursor>): Promise<void> {\n const sessions = Object.create(null) as Record<string, SessionObserverCursor>;\n for (const [key, value] of sessionsMap.entries()) {\n sessions[key] = value;\n }\n const payload: SessionObserverPersistedState = { version: 2, sessions };\n await mkdir(path.dirname(this.statePath), { recursive: true });\n await writeFile(this.statePath, JSON.stringify(payload, null, 2), \"utf-8\");\n }\n\n private enqueueObservation(\n input: SessionObservationInput,\n ): Promise<SessionObservationDecision> {\n const operation = this.saveQueue\n .catch(() => undefined)\n .then(() => this.observeWithSaveLock(input));\n this.saveQueue = operation.then(\n () => undefined,\n () => undefined,\n );\n return operation;\n }\n\n private bandForTotalBytes(totalBytes: number): SessionObserverBandConfig {\n const bytes = sanitizeNonNegativeInt(totalBytes);\n for (const band of this.bands) {\n if (bytes <= band.maxBytes) return band;\n }\n return this.bands[this.bands.length - 1];\n }\n\n async observe(input: SessionObservationInput): Promise<SessionObservationDecision> {\n return this.enqueueObservation(input);\n }\n\n private async observeWithSaveLock(\n input: SessionObservationInput,\n ): Promise<SessionObservationDecision> {\n let decision: SessionObservationDecision | undefined;\n await this.withSaveLock(async () => {\n const localExisting = this.sessions.get(input.sessionKey);\n const sessions = await this.readMergedSessions();\n decision = await this.observeMerged(\n input,\n sessions,\n localExisting ? { ...localExisting } : undefined,\n );\n });\n if (!decision) {\n throw new Error(\"session observer decision was not computed\");\n }\n return decision;\n }\n\n private async observeMerged(\n input: SessionObservationInput,\n sessions: Map<string, SessionObserverCursor>,\n localExisting?: SessionObserverCursor,\n ): Promise<SessionObservationDecision> {\n const nowIso = input.observedAt ?? new Date().toISOString();\n const totalBytes = sanitizeNonNegativeInt(input.totalBytes);\n const totalTokens = sanitizeNonNegativeInt(input.totalTokens);\n const band = this.bandForTotalBytes(totalBytes);\n\n const existing = sessions.get(input.sessionKey);\n if (!existing) {\n sessions.set(input.sessionKey, {\n sessionKey: input.sessionKey,\n cursorBytes: totalBytes,\n cursorTokens: totalTokens,\n lastObservedAt: nowIso,\n });\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return {\n triggered: false,\n deltaBytes: 0,\n deltaTokens: 0,\n band,\n reason: \"baseline\",\n };\n }\n\n const session = { ...existing };\n const observedMs = parseIsoMs(nowIso);\n const existingObservedMs = parseIsoMs(session.lastObservedAt);\n const existingResetMs = parseIsoMs(session.lastResetAt);\n if (existingResetMs > 0 && observedMs < existingResetMs) {\n this.sessions = sessions;\n return { triggered: false, deltaBytes: 0, deltaTokens: 0, band, reason: \"baseline\" };\n }\n\n if (totalBytes < session.cursorBytes || totalTokens < session.cursorTokens) {\n const localSawReset =\n localExisting !== undefined\n && (totalBytes < sanitizeNonNegativeInt(localExisting.cursorBytes)\n || totalTokens < sanitizeNonNegativeInt(localExisting.cursorTokens));\n const canApplyReset = localSawReset && observedMs >= existingObservedMs;\n\n if (canApplyReset) {\n session.cursorBytes = totalBytes;\n session.cursorTokens = totalTokens;\n session.lastObservedAt = nowIso;\n session.lastResetAt = nowIso;\n } else if (observedMs >= existingObservedMs) {\n session.lastObservedAt = nowIso;\n }\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return { triggered: false, deltaBytes: 0, deltaTokens: 0, band, reason: \"baseline\" };\n }\n\n const deltaBytes = totalBytes - session.cursorBytes;\n const deltaTokens = totalTokens - session.cursorTokens;\n const crossedThreshold =\n (band.triggerDeltaBytes > 0 && deltaBytes >= band.triggerDeltaBytes)\n || (band.triggerDeltaTokens > 0 && deltaTokens >= band.triggerDeltaTokens);\n session.lastObservedAt = nowIso;\n\n if (!crossedThreshold) {\n const unchanged = deltaBytes === 0 && deltaTokens === 0;\n if (!unchanged) {\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n } else {\n this.sessions = sessions;\n }\n return {\n triggered: false,\n deltaBytes,\n deltaTokens,\n band,\n };\n }\n\n const nowMs = Date.parse(nowIso);\n const lastTriggeredMs = session.lastTriggeredAt ? Date.parse(session.lastTriggeredAt) : NaN;\n const withinDebounce =\n Number.isFinite(lastTriggeredMs) && nowMs - lastTriggeredMs < this.debounceMs;\n\n if (withinDebounce) {\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return {\n triggered: false,\n deltaBytes,\n deltaTokens,\n band,\n reason: \"debounced\",\n };\n }\n\n session.lastTriggeredAt = nowIso;\n session.cursorBytes = totalBytes;\n session.cursorTokens = totalTokens;\n sessions.set(input.sessionKey, session);\n this.sessions = sessions;\n await this.writeSessions(sessions);\n return {\n triggered: true,\n deltaBytes,\n deltaTokens,\n band,\n reason: \"threshold\",\n };\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
scanMemoryDir
|
|
3
|
-
} from "./chunk-W7IGLX4G.js";
|
|
4
1
|
import {
|
|
5
2
|
isSearchAborted,
|
|
6
3
|
throwIfSearchAborted
|
|
7
4
|
} from "./chunk-GUMZC2BO.js";
|
|
5
|
+
import {
|
|
6
|
+
scanMemoryDir
|
|
7
|
+
} from "./chunk-W7IGLX4G.js";
|
|
8
8
|
import {
|
|
9
9
|
reportSearchDegradation,
|
|
10
10
|
resolveEnsureCollectionArgs
|
|
@@ -613,4 +613,4 @@ export {
|
|
|
613
613
|
resolveOramaCollectionDbFilePath,
|
|
614
614
|
OramaBackend
|
|
615
615
|
};
|
|
616
|
-
//# sourceMappingURL=chunk-
|
|
616
|
+
//# sourceMappingURL=chunk-OLX2HJFW.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-KJTKLXTH.js";
|
|
4
4
|
import {
|
|
5
5
|
StorageManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-2VHCLHZ5.js";
|
|
7
7
|
import {
|
|
8
8
|
copyExistingFileToBackup,
|
|
9
9
|
writeFileAtomically
|
|
@@ -260,4 +260,4 @@ export {
|
|
|
260
260
|
backupExistingLedger,
|
|
261
261
|
rebuildMemoryLifecycleLedger
|
|
262
262
|
};
|
|
263
|
-
//# sourceMappingURL=chunk-
|
|
263
|
+
//# sourceMappingURL=chunk-OU7RWWW6.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NamespaceStorageRouter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MG7GI4TT.js";
|
|
4
4
|
import {
|
|
5
5
|
namespaceCollectionName
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P6GOYLHN.js";
|
|
7
7
|
import {
|
|
8
8
|
isSafeRouteNamespace
|
|
9
9
|
} from "./chunk-PCXDUHQH.js";
|
|
@@ -213,4 +213,4 @@ export {
|
|
|
213
213
|
verifyNamespaces,
|
|
214
214
|
runNamespaceMigration
|
|
215
215
|
};
|
|
216
|
-
//# sourceMappingURL=chunk-
|
|
216
|
+
//# sourceMappingURL=chunk-OV36CROW.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-765K3SAT.js";
|
|
4
4
|
import {
|
|
5
5
|
encryptCapsuleFile
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UVYI6VIX.js";
|
|
7
7
|
import {
|
|
8
8
|
computeTransferOutputRel,
|
|
9
9
|
isTransferPathExcluded
|
|
@@ -109,4 +109,4 @@ async function enforceRetention(outDirAbs, retentionDays) {
|
|
|
109
109
|
export {
|
|
110
110
|
backupMemoryDir
|
|
111
111
|
};
|
|
112
|
-
//# sourceMappingURL=chunk-
|
|
112
|
+
//# sourceMappingURL=chunk-OWHERGF2.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StorageManager
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2VHCLHZ5.js";
|
|
4
4
|
import {
|
|
5
5
|
normalizeEntityName
|
|
6
6
|
} from "./chunk-YXZG5TVN.js";
|
|
@@ -956,4 +956,4 @@ export {
|
|
|
956
956
|
resolveBriefingSaveDir,
|
|
957
957
|
briefingFilename
|
|
958
958
|
};
|
|
959
|
-
//# sourceMappingURL=chunk-
|
|
959
|
+
//# sourceMappingURL=chunk-P5OYNV7B.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSearchBackend
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JNWISMYG.js";
|
|
4
4
|
import {
|
|
5
5
|
namespaceIdentityToken,
|
|
6
6
|
normalizeNamespaceIdentity
|
|
@@ -470,4 +470,4 @@ export {
|
|
|
470
470
|
NamespaceSearchRouter,
|
|
471
471
|
normalizeQmdResultPath
|
|
472
472
|
};
|
|
473
|
-
//# sourceMappingURL=chunk-
|
|
473
|
+
//# sourceMappingURL=chunk-P6GOYLHN.js.map
|