@remnic/core 9.23.3 → 9.24.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 +13 -10
- package/dist/access-admin-ops-surface.js +50 -46
- package/dist/access-boundary.d.ts +13 -10
- package/dist/access-boundary.js +50 -46
- package/dist/access-cli.js +125 -122
- package/dist/access-cli.js.map +1 -1
- package/dist/access-health-types.d.ts +54 -0
- package/dist/access-health-types.js +1 -0
- package/dist/access-health-types.js.map +1 -0
- package/dist/access-http.d.ts +14 -11
- package/dist/access-http.js +59 -55
- package/dist/access-identity-continuity-surface.d.ts +9 -8
- package/dist/access-identity-continuity-surface.js +50 -46
- package/dist/access-lcm-surface.d.ts +13 -10
- package/dist/access-lcm-surface.js +50 -46
- package/dist/access-mcp.d.ts +13 -10
- package/dist/access-mcp.js +55 -51
- package/dist/access-memory-search-fanout.d.ts +3 -2
- package/dist/{access-namespace-preflight-CmErR03h.d.ts → access-namespace-preflight-wRSZEO5V.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +4 -3
- package/dist/access-namespace-preflight.js +50 -46
- package/dist/access-observe-write-surface.d.ts +13 -10
- package/dist/access-observe-write-surface.js +50 -46
- package/dist/access-operations-batch.js +52 -48
- package/dist/access-operations.d.ts +17 -14
- package/dist/access-operations.js +54 -50
- package/dist/access-recall-concurrency.d.ts +13 -10
- package/dist/access-recall-concurrency.js +50 -46
- package/dist/access-recall-response.d.ts +13 -10
- package/dist/access-recall-response.js +50 -46
- package/dist/access-recall-surface.d.ts +13 -10
- package/dist/access-recall-surface.js +50 -46
- package/dist/access-schema.d.ts +86 -86
- package/dist/access-schema.js +8 -8
- package/dist/{access-service-CKEROeFP.d.ts → access-service-BlNKWBC9.d.ts} +11 -38
- package/dist/access-service.d.ts +15 -12
- package/dist/access-service.js +50 -46
- package/dist/access-surface-catalog.d.ts +13 -10
- package/dist/access-wearables-meetings-surface.d.ts +4 -3
- package/dist/action-confidence.d.ts +2 -1
- package/dist/active-memory-bridge.d.ts +2 -1
- package/dist/active-recall.d.ts +2 -1
- package/dist/active-recall.js +3 -2
- package/dist/active-recall.js.map +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/behavior-learner.d.ts +2 -1
- package/dist/behavior-signals.d.ts +2 -1
- package/dist/bootstrap.d.ts +9 -8
- package/dist/briefing.d.ts +3 -2
- package/dist/briefing.js +14 -14
- package/dist/buffer-surprise-report.d.ts +2 -1
- package/dist/buffer.d.ts +6 -2
- package/dist/buffer.js +1 -1
- package/dist/bulk-import/index.d.ts +4 -3
- package/dist/calibration.d.ts +2 -1
- package/dist/capabilities.d.ts +2 -1
- package/dist/{catalog-BFTVo2Ez.d.ts → catalog-BLLxZ5L5.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +2 -1
- package/dist/causal-consolidation.d.ts +2 -1
- package/dist/causal-consolidation.js +15 -15
- package/dist/causal-trajectory-graph.d.ts +2 -1
- package/dist/{chunk-P2BLHUL2.js → chunk-2NAFR36N.js} +5 -5
- package/dist/{chunk-WMLHJ5UW.js → chunk-2WSX7U2N.js} +2 -2
- package/dist/{chunk-E3ZMFFQZ.js → chunk-3FLPLDIL.js} +2 -2
- package/dist/chunk-443XCR34.js +213 -0
- package/dist/chunk-443XCR34.js.map +1 -0
- package/dist/{chunk-JNIJBXVK.js → chunk-4KAIGQVU.js} +2 -2
- package/dist/{chunk-354T54RR.js → chunk-4TFIRMTE.js} +28 -1
- package/dist/chunk-4TFIRMTE.js.map +1 -0
- package/dist/{chunk-XWPFZX6S.js → chunk-7CP7SO32.js} +108 -37
- package/dist/chunk-7CP7SO32.js.map +1 -0
- package/dist/{chunk-XGEFGNL5.js → chunk-7IECFM4E.js} +18 -10
- package/dist/chunk-7IECFM4E.js.map +1 -0
- package/dist/{chunk-ZN4UZWMT.js → chunk-A5N6ISRK.js} +2 -2
- package/dist/{chunk-XKGPIWGI.js → chunk-AVPXXV6J.js} +4 -4
- package/dist/{chunk-4PQ4KLLK.js → chunk-BHKDCWGH.js} +9 -9
- package/dist/{chunk-5CPI2QWG.js → chunk-CSXHRAJJ.js} +3 -3
- package/dist/{chunk-QCKQEBIY.js → chunk-DFTCJVXI.js} +6 -6
- package/dist/{chunk-QE63OHLB.js → chunk-ECG64R7B.js} +5 -5
- package/dist/{chunk-ATEAL5EI.js → chunk-EFYACT2X.js} +2 -2
- package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
- package/dist/{chunk-UGH6VPPO.js → chunk-FHH6R3QI.js} +2 -2
- package/dist/{chunk-WZVIB5BK.js → chunk-GCKIDUHE.js} +69 -53
- package/dist/chunk-GCKIDUHE.js.map +1 -0
- package/dist/{chunk-MAXVH44E.js → chunk-GF22HWS2.js} +10 -10
- package/dist/{chunk-ZYU7ZFLT.js → chunk-GJJBPI6I.js} +5 -1
- package/dist/chunk-GJJBPI6I.js.map +1 -0
- package/dist/{chunk-AU7Q3LSC.js → chunk-JBPKEARU.js} +4 -4
- package/dist/{chunk-IPLYGWQF.js → chunk-KQAFEZQX.js} +5 -5
- package/dist/{chunk-CUUY5CC4.js → chunk-L7DTBRTI.js} +2 -2
- package/dist/{chunk-AYAROCWD.js → chunk-LLISELSY.js} +2 -2
- package/dist/{chunk-MMTG3SCJ.js → chunk-M5EPMNS4.js} +2 -2
- package/dist/{chunk-HSSIWAZP.js → chunk-M6ZJR6HU.js} +140 -124
- package/dist/{chunk-HSSIWAZP.js.map → chunk-M6ZJR6HU.js.map} +1 -1
- package/dist/{chunk-WWZ35GWW.js → chunk-MX4TUDMB.js} +2 -2
- package/dist/{chunk-SVZGA2MK.js → chunk-NHPROHJD.js} +2 -2
- package/dist/{chunk-6TWXQ4E2.js → chunk-NM7SKDZM.js} +2 -2
- package/dist/chunk-NQ7E27HN.js +261 -0
- package/dist/chunk-NQ7E27HN.js.map +1 -0
- package/dist/{chunk-QJAQNXWI.js → chunk-ONHRRJZM.js} +6 -6
- package/dist/{chunk-V2XVMCP6.js → chunk-P25IPRXP.js} +7 -7
- package/dist/{chunk-KXGE7L62.js → chunk-RENY3AIW.js} +67 -67
- package/dist/chunk-RENY3AIW.js.map +1 -0
- package/dist/{chunk-3L5O7SMT.js → chunk-SGMORUEU.js} +3 -3
- package/dist/{chunk-3ZW6ZQO6.js → chunk-TBJV4BZE.js} +13 -13
- package/dist/{chunk-7I7AYIUQ.js → chunk-TGHUJC64.js} +5 -5
- package/dist/{chunk-SCOT5DTA.js → chunk-V25OWXAC.js} +1 -1
- package/dist/chunk-V25OWXAC.js.map +1 -0
- package/dist/{chunk-DLKRXYRL.js → chunk-V4MAO2Y4.js} +15 -15
- package/dist/{chunk-5FZQ74K5.js → chunk-WMR5WPZU.js} +2 -2
- package/dist/{chunk-M6LJXJ3J.js → chunk-WNSQOXWS.js} +6 -6
- package/dist/{chunk-KNB7IBBU.js → chunk-WO7KBATL.js} +4 -4
- package/dist/{chunk-3NAHZQU3.js → chunk-X3SQYAPP.js} +2 -2
- package/dist/{chunk-3UOSVTFR.js → chunk-XBRPEGXF.js} +5 -5
- package/dist/{chunk-GD3QOBMB.js → chunk-XHYCPA5C.js} +2 -2
- package/dist/{chunk-ES5IHQ6M.js → chunk-Z3B4V4YI.js} +5 -5
- package/dist/chunk-ZLNOX7B2.js +60 -0
- package/dist/chunk-ZLNOX7B2.js.map +1 -0
- package/dist/{cli-BrwT9YMD.d.ts → cli-Zc6UclD1.d.ts} +5 -5
- package/dist/cli.d.ts +15 -12
- package/dist/cli.js +85 -82
- package/dist/compounding/engine.d.ts +3 -2
- package/dist/compounding/engine.js +14 -14
- package/dist/compounding/preference-consolidator.d.ts +2 -1
- package/dist/compression-optimizer.d.ts +2 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.js +3 -2
- package/dist/connectors/codex-materialize-runner.d.ts +2 -1
- package/dist/connectors/codex-materialize-runner.js +14 -14
- package/dist/connectors/codex-materialize.d.ts +2 -1
- package/dist/connectors/index.d.ts +2 -1
- package/dist/connectors/index.js +17 -17
- package/dist/consolidation-provenance-check.d.ts +3 -2
- package/dist/consolidation-undo.d.ts +3 -2
- package/dist/contradiction/index.d.ts +3 -2
- package/dist/conversation-index/backend.d.ts +2 -1
- package/dist/conversation-index/chunker.d.ts +2 -1
- package/dist/conversation-index/faiss-adapter.d.ts +2 -1
- package/dist/conversation-index/indexer.d.ts +2 -1
- package/dist/conversation-index/search.d.ts +2 -1
- package/dist/corpus-watermark.d.ts +228 -0
- package/dist/corpus-watermark.js +106 -0
- package/dist/corpus-watermark.js.map +1 -0
- package/dist/dashboard-runtime.js +2 -2
- package/dist/day-summary.d.ts +2 -1
- package/dist/delinearize.d.ts +2 -1
- package/dist/direct-answer-wiring.d.ts +2 -1
- package/dist/direct-answer.d.ts +2 -1
- package/dist/embedding-fallback.d.ts +2 -1
- package/dist/enrichment/index.d.ts +2 -1
- package/dist/entity-retrieval.d.ts +3 -2
- package/dist/entity-retrieval.js +14 -14
- package/dist/entity-schema.d.ts +2 -1
- package/dist/explicit-capture.d.ts +9 -8
- package/dist/extraction-error-classification.d.ts +2 -1
- package/dist/extraction-faithfulness.d.ts +2 -1
- package/dist/extraction-judge-telemetry.d.ts +2 -1
- package/dist/extraction-judge-training.d.ts +2 -1
- package/dist/extraction-judge.d.ts +2 -1
- package/dist/extraction-liveness.d.ts +5 -0
- package/dist/extraction-liveness.js +26 -0
- package/dist/extraction-liveness.js.map +1 -0
- package/dist/extraction.d.ts +2 -1
- package/dist/extraction.js +1 -1
- package/dist/fallback-llm.d.ts +2 -1
- package/dist/graph-dashboard-diff.d.ts +2 -1
- package/dist/graph-dashboard-key.d.ts +2 -1
- package/dist/graph-dashboard-parser.d.ts +2 -1
- package/dist/graph-edge-reinforcement.d.ts +2 -1
- package/dist/graph-snapshot.d.ts +2 -1
- package/dist/graph.d.ts +2 -1
- package/dist/importance.d.ts +2 -1
- package/dist/importers/index.d.ts +2 -1
- package/dist/in-flight-reads.d.ts +2 -1
- package/dist/index.d.ts +427 -424
- package/dist/index.js +212 -209
- package/dist/intent.d.ts +2 -1
- package/dist/lcm/engine.d.ts +2 -1
- package/dist/lcm/engine.js +4 -4
- package/dist/lcm/index.d.ts +2 -1
- package/dist/lcm/index.js +12 -12
- package/dist/lcm/tools.d.ts +2 -1
- package/dist/lifecycle.d.ts +2 -1
- package/dist/live-connectors-runner.d.ts +2 -1
- package/dist/local-llm.d.ts +2 -1
- package/dist/local-model-endpoint.d.ts +2 -1
- package/dist/maintenance/memory-governance.d.ts +2 -1
- package/dist/maintenance/memory-governance.js +14 -14
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -14
- package/dist/maintenance/rebuild-memory-projection.d.ts +3 -2
- package/dist/maintenance/rebuild-memory-projection.js +15 -15
- package/dist/{maintenance-C98njYb8.d.ts → maintenance-DD22oIx9.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +13 -10
- package/dist/memory-action-policy.d.ts +2 -1
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-projection-store.d.ts +2 -1
- package/dist/memory-provenance.d.ts +2 -1
- package/dist/memory-worth-outcomes.d.ts +3 -2
- package/dist/models-json.d.ts +2 -1
- package/dist/namespaces/migrate.d.ts +4 -3
- package/dist/namespaces/migrate.js +21 -21
- package/dist/namespaces/principal.d.ts +2 -1
- package/dist/namespaces/search.d.ts +2 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +4 -3
- package/dist/namespaces/storage.js +14 -14
- package/dist/native-knowledge.d.ts +2 -1
- package/dist/offline-sync-impression-drain.d.ts +2 -1
- package/dist/offline-sync-impression-drain.js +4 -4
- package/dist/operator-doctor-corpus.d.ts +31 -0
- package/dist/operator-doctor-corpus.js +91 -0
- package/dist/operator-doctor-corpus.js.map +1 -0
- package/dist/operator-doctor-types.d.ts +22 -0
- package/dist/operator-doctor-types.js +1 -0
- package/dist/operator-doctor-types.js.map +1 -0
- package/dist/operator-toolkit.d.ts +10 -13
- package/dist/operator-toolkit.js +35 -29
- package/dist/orchestration/compression-guideline-coordinator.d.ts +3 -2
- package/dist/orchestration/maintenance.d.ts +5 -4
- package/dist/orchestration/maintenance.js +20 -20
- package/dist/{orchestrator-C9ZVppNh.d.ts → orchestrator-BTGgoKli.d.ts} +7 -7
- package/dist/orchestrator.d.ts +9 -8
- package/dist/orchestrator.js +123 -120
- package/dist/patterns-cli.d.ts +2 -1
- package/dist/{pipeline-id_-sqYm.d.ts → pipeline-Bq5zU6Bp.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +2 -1
- package/dist/proactive-contention.d.ts +2 -1
- package/dist/provenance.d.ts +2 -1
- package/dist/{qmd-R6XaQOZK.d.ts → qmd-3ILJkC70.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +3 -2
- package/dist/qmd-recall-cache.d.ts +2 -1
- package/dist/qmd.d.ts +3 -2
- package/dist/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +2 -1
- package/dist/recall-disclosure-escalation.d.ts +2 -1
- package/dist/recall-explain-renderer.d.ts +2 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +2 -1
- package/dist/recall-planner-llm.d.ts +2 -1
- package/dist/recall-state.d.ts +2 -1
- package/dist/recall-tag-filter.d.ts +2 -1
- package/dist/recall-timings.d.ts +2 -1
- package/dist/recall-xray-cli.d.ts +2 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +2 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +2 -1
- package/dist/recall-xray.js +2 -2
- package/dist/replay/normalizers/chatgpt.d.ts +2 -1
- package/dist/replay/normalizers/claude.d.ts +2 -1
- package/dist/replay/normalizers/openclaw.d.ts +2 -1
- package/dist/replay/normalizers/shared.d.ts +2 -1
- package/dist/replay/runner.d.ts +2 -1
- package/dist/replay/types.d.ts +2 -1
- package/dist/resolve-auth-token.d.ts +2 -1
- package/dist/resume-bundles.js +5 -4
- package/dist/retrieval-agents.d.ts +3 -2
- package/dist/retrieval-tiers.d.ts +2 -1
- package/dist/routing/engine.d.ts +2 -1
- package/dist/routing/store.d.ts +2 -1
- package/dist/salvage-envelope.d.ts +2 -1
- package/dist/schemas.d.ts +76 -76
- package/dist/{scope-profiles-EhyuAKkd.d.ts → scope-profiles-D0-ff4xT.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +2 -1
- package/dist/search/factory.d.ts +2 -1
- package/dist/search/factory.js +5 -5
- package/dist/search/index.d.ts +2 -1
- package/dist/search/index.js +9 -9
- package/dist/search/lancedb-backend.d.ts +2 -1
- package/dist/search/meilisearch-backend.d.ts +2 -1
- package/dist/search/noop-backend.d.ts +2 -1
- package/dist/search/orama-backend.d.ts +2 -1
- package/dist/search/port.d.ts +2 -1
- package/dist/search/remote-backend.d.ts +2 -1
- package/dist/{semantic-consolidation-B2xo26UQ.d.ts → semantic-consolidation-4Tfh7c1g.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +3 -2
- package/dist/semantic-consolidation.js +15 -15
- package/dist/semantic-rule-promotion.js +14 -14
- package/dist/semantic-rule-verifier.d.ts +2 -1
- package/dist/semantic-rule-verifier.js +14 -14
- package/dist/{service-DgFWlZ-r.d.ts → service-Z8uzoAST.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +2 -1
- package/dist/session-observer-state.d.ts +2 -1
- package/dist/shared-context/manager.d.ts +10 -9
- package/dist/signal.d.ts +2 -1
- package/dist/{storage-XGawwqXE.d.ts → storage-BZVMn8yJ.d.ts} +25 -2
- package/dist/storage.d.ts +3 -2
- package/dist/storage.js +13 -13
- package/dist/summarizer.d.ts +2 -1
- package/dist/summary-snapshot.d.ts +2 -1
- package/dist/temporal-supersession.d.ts +3 -2
- package/dist/temporal-timeline-recall.d.ts +2 -1
- package/dist/temporal-validity.d.ts +2 -1
- package/dist/threading.d.ts +2 -1
- package/dist/tier-migration.d.ts +3 -2
- package/dist/tier-routing.d.ts +2 -1
- package/dist/tokens.js +2 -2
- package/dist/topics.d.ts +2 -1
- package/dist/transcript.d.ts +2 -1
- package/dist/transfer/autodetect.js +1 -1
- package/dist/transfer/backup.js +3 -3
- package/dist/transfer/capsule-export.js +4 -4
- package/dist/transfer/capsule-import.js +1 -1
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +2 -1
- package/dist/trust-score.d.ts +2 -1
- package/dist/{types-Bbs0qz6b.d.ts → types-DHBxIF0s.d.ts} +181 -5
- package/dist/types.d.ts +2 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +2 -1
- package/dist/verified-recall.js +14 -14
- package/dist/write-envelope.d.ts +2 -1
- package/package.json +12 -2
- package/src/access-health-types.ts +51 -0
- package/src/access-http.test.ts +22 -2
- package/src/access-service-health.test.ts +212 -0
- package/src/access-service.ts +14 -37
- package/src/buffer.ts +30 -0
- package/src/cli.ts +2 -4
- package/src/config.ts +4 -4
- package/src/corpus-watermark.test.ts +840 -0
- package/src/corpus-watermark.ts +531 -0
- package/src/extraction-liveness.test.ts +461 -0
- package/src/extraction-liveness.ts +462 -0
- package/src/operator-doctor-corpus.test.ts +171 -0
- package/src/operator-doctor-corpus.ts +95 -0
- package/src/operator-doctor-types.ts +20 -0
- package/src/operator-toolkit.ts +12 -13
- package/src/recall/archive-scoring.ts +18 -0
- package/src/storage/memory-read-store.ts +91 -22
- package/src/storage.ts +27 -2
- package/src/types.ts +4 -4
- package/dist/chunk-354T54RR.js.map +0 -1
- package/dist/chunk-KXGE7L62.js.map +0 -1
- package/dist/chunk-SCOT5DTA.js.map +0 -1
- package/dist/chunk-WZVIB5BK.js.map +0 -1
- package/dist/chunk-XGEFGNL5.js.map +0 -1
- package/dist/chunk-XWPFZX6S.js.map +0 -1
- package/dist/chunk-ZYU7ZFLT.js.map +0 -1
- /package/dist/{chunk-P2BLHUL2.js.map → chunk-2NAFR36N.js.map} +0 -0
- /package/dist/{chunk-WMLHJ5UW.js.map → chunk-2WSX7U2N.js.map} +0 -0
- /package/dist/{chunk-E3ZMFFQZ.js.map → chunk-3FLPLDIL.js.map} +0 -0
- /package/dist/{chunk-JNIJBXVK.js.map → chunk-4KAIGQVU.js.map} +0 -0
- /package/dist/{chunk-ZN4UZWMT.js.map → chunk-A5N6ISRK.js.map} +0 -0
- /package/dist/{chunk-XKGPIWGI.js.map → chunk-AVPXXV6J.js.map} +0 -0
- /package/dist/{chunk-4PQ4KLLK.js.map → chunk-BHKDCWGH.js.map} +0 -0
- /package/dist/{chunk-5CPI2QWG.js.map → chunk-CSXHRAJJ.js.map} +0 -0
- /package/dist/{chunk-QCKQEBIY.js.map → chunk-DFTCJVXI.js.map} +0 -0
- /package/dist/{chunk-QE63OHLB.js.map → chunk-ECG64R7B.js.map} +0 -0
- /package/dist/{chunk-ATEAL5EI.js.map → chunk-EFYACT2X.js.map} +0 -0
- /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
- /package/dist/{chunk-UGH6VPPO.js.map → chunk-FHH6R3QI.js.map} +0 -0
- /package/dist/{chunk-MAXVH44E.js.map → chunk-GF22HWS2.js.map} +0 -0
- /package/dist/{chunk-AU7Q3LSC.js.map → chunk-JBPKEARU.js.map} +0 -0
- /package/dist/{chunk-IPLYGWQF.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-CUUY5CC4.js.map → chunk-L7DTBRTI.js.map} +0 -0
- /package/dist/{chunk-AYAROCWD.js.map → chunk-LLISELSY.js.map} +0 -0
- /package/dist/{chunk-MMTG3SCJ.js.map → chunk-M5EPMNS4.js.map} +0 -0
- /package/dist/{chunk-WWZ35GWW.js.map → chunk-MX4TUDMB.js.map} +0 -0
- /package/dist/{chunk-SVZGA2MK.js.map → chunk-NHPROHJD.js.map} +0 -0
- /package/dist/{chunk-6TWXQ4E2.js.map → chunk-NM7SKDZM.js.map} +0 -0
- /package/dist/{chunk-QJAQNXWI.js.map → chunk-ONHRRJZM.js.map} +0 -0
- /package/dist/{chunk-V2XVMCP6.js.map → chunk-P25IPRXP.js.map} +0 -0
- /package/dist/{chunk-3L5O7SMT.js.map → chunk-SGMORUEU.js.map} +0 -0
- /package/dist/{chunk-3ZW6ZQO6.js.map → chunk-TBJV4BZE.js.map} +0 -0
- /package/dist/{chunk-7I7AYIUQ.js.map → chunk-TGHUJC64.js.map} +0 -0
- /package/dist/{chunk-DLKRXYRL.js.map → chunk-V4MAO2Y4.js.map} +0 -0
- /package/dist/{chunk-5FZQ74K5.js.map → chunk-WMR5WPZU.js.map} +0 -0
- /package/dist/{chunk-M6LJXJ3J.js.map → chunk-WNSQOXWS.js.map} +0 -0
- /package/dist/{chunk-KNB7IBBU.js.map → chunk-WO7KBATL.js.map} +0 -0
- /package/dist/{chunk-3NAHZQU3.js.map → chunk-X3SQYAPP.js.map} +0 -0
- /package/dist/{chunk-3UOSVTFR.js.map → chunk-XBRPEGXF.js.map} +0 -0
- /package/dist/{chunk-GD3QOBMB.js.map → chunk-XHYCPA5C.js.map} +0 -0
- /package/dist/{chunk-ES5IHQ6M.js.map → chunk-Z3B4V4YI.js.map} +0 -0
|
@@ -449,3 +449,215 @@ test("health keeps namespace QMD failures scoped to the namespace", async () =>
|
|
|
449
449
|
await rm(rootDir, { recursive: true, force: true });
|
|
450
450
|
}
|
|
451
451
|
});
|
|
452
|
+
|
|
453
|
+
test("health surfaces extraction liveness as degraded when the buffer is non-empty and the watermark is stale", async () => {
|
|
454
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-"));
|
|
455
|
+
try {
|
|
456
|
+
const oldTs = new Date(Date.now() - 10_000).toISOString();
|
|
457
|
+
const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 1000 } });
|
|
458
|
+
const service = new EngramAccessService({
|
|
459
|
+
config,
|
|
460
|
+
qmd: makeQmd({}),
|
|
461
|
+
buffer: {
|
|
462
|
+
getBufferSnapshot: async () => ({ bufferedSessionCount: 3, pendingTurnCount: 12, oldestTurnTimestamp: oldTs }),
|
|
463
|
+
},
|
|
464
|
+
// The extraction watermark is read from the daemon-global root store,
|
|
465
|
+
// not the per-namespace store (issue #2151).
|
|
466
|
+
storage: {
|
|
467
|
+
loadMeta: async () => ({
|
|
468
|
+
lastExtractionAt: oldTs,
|
|
469
|
+
extractionCount: 4,
|
|
470
|
+
lastConsolidationAt: null,
|
|
471
|
+
totalMemories: 0,
|
|
472
|
+
totalEntities: 0,
|
|
473
|
+
}),
|
|
474
|
+
},
|
|
475
|
+
async getStorage() {
|
|
476
|
+
return { dir: memoryDir };
|
|
477
|
+
},
|
|
478
|
+
} as unknown as Orchestrator);
|
|
479
|
+
|
|
480
|
+
const health = await service.health();
|
|
481
|
+
assert.equal(health.extraction.degraded, true);
|
|
482
|
+
assert.equal(health.extraction.bufferedSessionCount, 3);
|
|
483
|
+
assert.equal(health.extraction.pendingTurnCount, 12);
|
|
484
|
+
assert.equal(health.extraction.lastExtractionAt, oldTs);
|
|
485
|
+
const oldestAge = health.extraction.oldestBufferedTurnAgeMs ?? -1;
|
|
486
|
+
assert.ok(
|
|
487
|
+
oldestAge >= 10_000 && oldestAge < 60_000,
|
|
488
|
+
`oldest buffered turn age reflects the ~10s offset, not merely non-negative (got ${oldestAge}ms)`,
|
|
489
|
+
);
|
|
490
|
+
assert.ok(
|
|
491
|
+
health.extraction.degradedReason !== null && health.extraction.degradedReason.length > 0,
|
|
492
|
+
"degraded reason is populated",
|
|
493
|
+
);
|
|
494
|
+
} finally {
|
|
495
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
|
|
499
|
+
test("health reports extraction liveness ok when the buffer is empty (nothing to extract)", async () => {
|
|
500
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-ok-"));
|
|
501
|
+
try {
|
|
502
|
+
const oldTs = new Date(Date.now() - 10_000).toISOString();
|
|
503
|
+
const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 1000 } });
|
|
504
|
+
const service = new EngramAccessService({
|
|
505
|
+
config,
|
|
506
|
+
qmd: makeQmd({}),
|
|
507
|
+
buffer: {
|
|
508
|
+
getBufferSnapshot: async () => ({ bufferedSessionCount: 0, pendingTurnCount: 0, oldestTurnTimestamp: null }),
|
|
509
|
+
},
|
|
510
|
+
storage: {
|
|
511
|
+
loadMeta: async () => ({
|
|
512
|
+
lastExtractionAt: oldTs,
|
|
513
|
+
extractionCount: 4,
|
|
514
|
+
lastConsolidationAt: null,
|
|
515
|
+
totalMemories: 0,
|
|
516
|
+
totalEntities: 0,
|
|
517
|
+
}),
|
|
518
|
+
},
|
|
519
|
+
async getStorage() {
|
|
520
|
+
return { dir: memoryDir };
|
|
521
|
+
},
|
|
522
|
+
} as unknown as Orchestrator);
|
|
523
|
+
|
|
524
|
+
const health = await service.health();
|
|
525
|
+
assert.equal(health.extraction.degraded, false);
|
|
526
|
+
assert.equal(health.extraction.bufferedSessionCount, 0);
|
|
527
|
+
assert.equal(health.extraction.lastExtractionAt, oldTs);
|
|
528
|
+
} finally {
|
|
529
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
530
|
+
}
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
test("health returns the same daemon-global extraction verdict for every namespace (issue #2151)", async () => {
|
|
534
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-ns-"));
|
|
535
|
+
try {
|
|
536
|
+
const rootTs = new Date().toISOString(); // fresh daemon-global watermark
|
|
537
|
+
const staleTs = new Date(Date.now() - 7_200_000).toISOString(); // 2h old
|
|
538
|
+
const config = parseConfig({
|
|
539
|
+
memoryDir,
|
|
540
|
+
qmdEnabled: false,
|
|
541
|
+
namespacesEnabled: true,
|
|
542
|
+
defaultNamespace: "default",
|
|
543
|
+
extractionLiveness: { staleWindowMs: 3_600_000 },
|
|
544
|
+
});
|
|
545
|
+
// Per-namespace stores return DIVERGING watermarks (fresh vs 2h stale vs
|
|
546
|
+
// never), but the global buffer is shared and the watermark must be sourced
|
|
547
|
+
// from the root store. Pre-fix, the extraction verdict tracked the
|
|
548
|
+
// namespace argument; post-fix it is identical for every namespace.
|
|
549
|
+
const perNamespaceMeta: Record<string, string | null> = { fresh: rootTs, stale: staleTs };
|
|
550
|
+
const service = new EngramAccessService({
|
|
551
|
+
config,
|
|
552
|
+
qmd: makeQmd({}),
|
|
553
|
+
buffer: {
|
|
554
|
+
getBufferSnapshot: async () => ({ bufferedSessionCount: 3, pendingTurnCount: 12, oldestTurnTimestamp: staleTs }),
|
|
555
|
+
},
|
|
556
|
+
storage: {
|
|
557
|
+
loadMeta: async () => ({
|
|
558
|
+
lastExtractionAt: rootTs,
|
|
559
|
+
extractionCount: 4,
|
|
560
|
+
lastConsolidationAt: null,
|
|
561
|
+
totalMemories: 0,
|
|
562
|
+
totalEntities: 0,
|
|
563
|
+
}),
|
|
564
|
+
},
|
|
565
|
+
async getStorage(namespace?: string) {
|
|
566
|
+
return {
|
|
567
|
+
dir: memoryDir,
|
|
568
|
+
loadMeta: async () => ({
|
|
569
|
+
lastExtractionAt: namespace ? perNamespaceMeta[namespace] ?? null : staleTs,
|
|
570
|
+
extractionCount: 4,
|
|
571
|
+
lastConsolidationAt: null,
|
|
572
|
+
totalMemories: 0,
|
|
573
|
+
totalEntities: 0,
|
|
574
|
+
}),
|
|
575
|
+
};
|
|
576
|
+
},
|
|
577
|
+
} as unknown as Orchestrator);
|
|
578
|
+
|
|
579
|
+
const fresh = (await service.health("fresh")).extraction;
|
|
580
|
+
const stale = (await service.health("stale")).extraction;
|
|
581
|
+
const def = (await service.health()).extraction;
|
|
582
|
+
// The namespace-governed fields must not vary with the namespace argument
|
|
583
|
+
// (oldestBufferedTurnAgeMs is time-derived and intentionally excluded).
|
|
584
|
+
assert.equal(stale.degraded, fresh.degraded, "degraded must not vary by namespace");
|
|
585
|
+
assert.equal(def.degraded, fresh.degraded, "default health matches namespaced health");
|
|
586
|
+
assert.equal(stale.lastExtractionAt, fresh.lastExtractionAt, "watermark must not vary by namespace");
|
|
587
|
+
assert.equal(def.lastExtractionAt, fresh.lastExtractionAt);
|
|
588
|
+
assert.equal(stale.degradedReason, fresh.degradedReason);
|
|
589
|
+
// Sourced from the fresh root watermark → healthy despite stale per-namespace stores.
|
|
590
|
+
assert.equal(fresh.degraded, false);
|
|
591
|
+
assert.equal(fresh.lastExtractionAt, rootTs);
|
|
592
|
+
} finally {
|
|
593
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
594
|
+
}
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
test("health reports extraction liveness degraded when the buffer read fails (§22)", async () => {
|
|
598
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-readfail-"));
|
|
599
|
+
try {
|
|
600
|
+
const freshTs = new Date().toISOString();
|
|
601
|
+
const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 3_600_000 } });
|
|
602
|
+
const service = new EngramAccessService({
|
|
603
|
+
config,
|
|
604
|
+
qmd: makeQmd({}),
|
|
605
|
+
buffer: {
|
|
606
|
+
getBufferSnapshot: async () => {
|
|
607
|
+
throw new Error("buffer file corrupt");
|
|
608
|
+
},
|
|
609
|
+
},
|
|
610
|
+
// Fresh watermark → the ONLY fault is the unreadable buffer, proving the
|
|
611
|
+
// read failure (not staleness) drives the degradation.
|
|
612
|
+
storage: {
|
|
613
|
+
loadMeta: async () => ({
|
|
614
|
+
lastExtractionAt: freshTs,
|
|
615
|
+
extractionCount: 4,
|
|
616
|
+
lastConsolidationAt: null,
|
|
617
|
+
totalMemories: 0,
|
|
618
|
+
totalEntities: 0,
|
|
619
|
+
}),
|
|
620
|
+
},
|
|
621
|
+
async getStorage() {
|
|
622
|
+
return { dir: memoryDir };
|
|
623
|
+
},
|
|
624
|
+
} as unknown as Orchestrator);
|
|
625
|
+
|
|
626
|
+
const health = await service.health();
|
|
627
|
+
assert.equal(health.extraction.degraded, true, "an unreadable buffer must not report a healthy pipeline");
|
|
628
|
+
assert.match(health.extraction.degradedReason ?? "", /unreadable/);
|
|
629
|
+
assert.match(health.extraction.degradedReason ?? "", /buffer file corrupt/);
|
|
630
|
+
} finally {
|
|
631
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
632
|
+
}
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
test("health reports extraction liveness degraded when the watermark (meta) read fails (§22)", async () => {
|
|
636
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-health-liveness-metafail-"));
|
|
637
|
+
try {
|
|
638
|
+
const config = parseConfig({ memoryDir, qmdEnabled: false, extractionLiveness: { staleWindowMs: 3_600_000 } });
|
|
639
|
+
const service = new EngramAccessService({
|
|
640
|
+
config,
|
|
641
|
+
qmd: makeQmd({}),
|
|
642
|
+
// Empty buffer: proves the meta-read failure alone drives the degradation.
|
|
643
|
+
buffer: {
|
|
644
|
+
getBufferSnapshot: async () => ({ bufferedSessionCount: 0, pendingTurnCount: 0, oldestTurnTimestamp: null }),
|
|
645
|
+
},
|
|
646
|
+
storage: {
|
|
647
|
+
loadMeta: async () => {
|
|
648
|
+
throw new Error("meta.json unreadable");
|
|
649
|
+
},
|
|
650
|
+
},
|
|
651
|
+
async getStorage() {
|
|
652
|
+
return { dir: memoryDir };
|
|
653
|
+
},
|
|
654
|
+
} as unknown as Orchestrator);
|
|
655
|
+
|
|
656
|
+
const health = await service.health();
|
|
657
|
+
assert.equal(health.extraction.degraded, true, "an unreadable watermark must not report a healthy pipeline");
|
|
658
|
+
assert.match(health.extraction.degradedReason ?? "", /watermark unreadable/);
|
|
659
|
+
assert.match(health.extraction.degradedReason ?? "", /meta\.json unreadable/);
|
|
660
|
+
} finally {
|
|
661
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
662
|
+
}
|
|
663
|
+
});
|
package/src/access-service.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { readdirSync, unlinkSync } from "node:fs";
|
|
|
6
6
|
import { createHash } from "node:crypto";
|
|
7
7
|
import { ZodError } from "zod";
|
|
8
8
|
import { AccessIdempotencyStore, hashAccessIdempotencyPayload } from "./access-idempotency.js";
|
|
9
|
+
import { computeExtractionLivenessStatus, ExtractionLivenessWarnThrottle } from "./extraction-liveness.js";
|
|
9
10
|
import { enforceNamespaceAllowList, tokenCapabilityStore } from "./access-token-capabilities.js";
|
|
10
11
|
import {
|
|
11
12
|
recordCitationUsage as recordCitationUsageForAccess,
|
|
@@ -18,6 +19,13 @@ import { resolveNamespaceCapabilities,
|
|
|
18
19
|
resolveMemoryLifecycleCapabilities,
|
|
19
20
|
resolveQmdCapabilities,
|
|
20
21
|
resolveSecurityCapabilities, resolveObjectiveStateCapabilities, resolveCompressionCapabilities, resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
|
|
22
|
+
import { CorpusWatermarkCache, computeServiceCorpusWatermarks } from "./corpus-watermark.js";
|
|
23
|
+
import type {
|
|
24
|
+
EngramAccessHealthResponse,
|
|
25
|
+
EngramAccessQmdCollectionState,
|
|
26
|
+
EngramAccessQmdHealthResponse,
|
|
27
|
+
} from "./access-health-types.js";
|
|
28
|
+
export type { EngramAccessHealthResponse, EngramAccessQmdCollectionState, EngramAccessQmdHealthResponse };
|
|
21
29
|
import { AccessAuditAdapter, type AccessAuditConfig, type AccessAuditResult } from "./access-audit.js";
|
|
22
30
|
import type { AnomalyDetectorResult } from "./recall-audit-anomaly.js";
|
|
23
31
|
import { resolveGitContext } from "./coding/git-context.js";
|
|
@@ -341,43 +349,6 @@ function normalizeTrustZoneInputError(error: unknown): EngramAccessInputError |
|
|
|
341
349
|
|
|
342
350
|
export const ENGRAM_ACCESS_WRITE_SCHEMA_VERSION = 1;
|
|
343
351
|
|
|
344
|
-
export interface EngramAccessHealthResponse {
|
|
345
|
-
ok: true;
|
|
346
|
-
memoryDir: string;
|
|
347
|
-
namespacesEnabled: boolean;
|
|
348
|
-
defaultNamespace: string;
|
|
349
|
-
searchBackend: string;
|
|
350
|
-
qmdEnabled: boolean;
|
|
351
|
-
qmd: EngramAccessQmdHealthResponse;
|
|
352
|
-
nativeKnowledgeEnabled: boolean;
|
|
353
|
-
projectionAvailable: boolean;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
export type EngramAccessQmdCollectionState =
|
|
357
|
-
| "present"
|
|
358
|
-
| "missing"
|
|
359
|
-
| "unknown"
|
|
360
|
-
| "skipped";
|
|
361
|
-
|
|
362
|
-
export interface EngramAccessQmdHealthResponse {
|
|
363
|
-
enabled: boolean;
|
|
364
|
-
active: boolean;
|
|
365
|
-
degraded: boolean;
|
|
366
|
-
mode: "cli" | "daemon" | "fallback" | "disabled" | "not-selected";
|
|
367
|
-
collection: string;
|
|
368
|
-
collectionState: EngramAccessQmdCollectionState;
|
|
369
|
-
installedVersion: string | null;
|
|
370
|
-
supportedVersion: string | null;
|
|
371
|
-
supported: boolean | null;
|
|
372
|
-
upgradeAvailable: boolean | null;
|
|
373
|
-
doctorAvailable: boolean | null;
|
|
374
|
-
debugStatus: string;
|
|
375
|
-
pendingEmbeddings: number | null;
|
|
376
|
-
oldestPendingAgeMs: number | null;
|
|
377
|
-
embeddingBacklogThreshold: number;
|
|
378
|
-
degradedReason?: string;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
352
|
export interface EngramAccessRecallRequest {
|
|
382
353
|
query: string;
|
|
383
354
|
sessionKey?: string;
|
|
@@ -1302,6 +1273,7 @@ export class EngramAccessService {
|
|
|
1302
1273
|
private readonly recallInFlight = new Map<string, unknown>();
|
|
1303
1274
|
private readonly budget: CrossNamespaceBudget;
|
|
1304
1275
|
private readonly auditAdapter: AccessAuditAdapter | null;
|
|
1276
|
+
private readonly corpusWatermarkCache = new CorpusWatermarkCache();
|
|
1305
1277
|
|
|
1306
1278
|
/** AccessObserveWriteSurface (access-service decomposition). Lazy; selfDeps live wiring. */
|
|
1307
1279
|
private _accessObserveWriteSurface: AccessObserveWriteSurface | undefined;
|
|
@@ -1362,6 +1334,7 @@ export class EngramAccessService {
|
|
|
1362
1334
|
}
|
|
1363
1335
|
return this._accessIdentityContinuitySurface;
|
|
1364
1336
|
}
|
|
1337
|
+
private readonly extractionLivenessWarn = new ExtractionLivenessWarnThrottle();
|
|
1365
1338
|
|
|
1366
1339
|
constructor(private readonly orchestrator: Orchestrator) {
|
|
1367
1340
|
this.idempotency = new AccessIdempotencyStore(orchestrator.config.memoryDir);
|
|
@@ -2455,6 +2428,7 @@ export class EngramAccessService {
|
|
|
2455
2428
|
const storage = await this.orchestrator.getStorage(resolvedNamespace);
|
|
2456
2429
|
const searchBackend = this.orchestrator.config.searchBackend ?? "qmd";
|
|
2457
2430
|
const qmdEnabled = resolveQmdCapabilities(this.orchestrator.config).qmd === true;
|
|
2431
|
+
const extraction = await computeExtractionLivenessStatus(this.orchestrator, this.extractionLivenessWarn);
|
|
2458
2432
|
let projectionAvailable = false;
|
|
2459
2433
|
try {
|
|
2460
2434
|
await stat(getMemoryProjectionPath(storage.dir));
|
|
@@ -2478,6 +2452,9 @@ export class EngramAccessService {
|
|
|
2478
2452
|
),
|
|
2479
2453
|
nativeKnowledgeEnabled: this.orchestrator.config.nativeKnowledge?.enabled === true,
|
|
2480
2454
|
projectionAvailable,
|
|
2455
|
+
extraction,
|
|
2456
|
+
corpus: await computeServiceCorpusWatermarks(this.orchestrator, {
|
|
2457
|
+
cache: this.corpusWatermarkCache, caps: tokenCapabilityStore.getStore() }),
|
|
2481
2458
|
};
|
|
2482
2459
|
}
|
|
2483
2460
|
|
package/src/buffer.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type {
|
|
|
10
10
|
SignalLevel,
|
|
11
11
|
} from "./types.js";
|
|
12
12
|
import { resolvePresentationCapabilities } from "./capabilities.js";
|
|
13
|
+
import type { ExtractionBufferSnapshot } from "./extraction-liveness.js";
|
|
13
14
|
|
|
14
15
|
export type TriggerDecision = "extract_now" | "extract_batch" | "keep_buffering";
|
|
15
16
|
|
|
@@ -306,6 +307,35 @@ export class SmartBuffer {
|
|
|
306
307
|
await this.enqueueMutation(async () => this.loadUnlocked());
|
|
307
308
|
}
|
|
308
309
|
|
|
310
|
+
/** Snapshot of buffered, not-yet-extracted work across sessions (#2151): session count,
|
|
311
|
+
* pending-turn total, oldest buffered turn. Counts retained (#562) + active turns per entry. */
|
|
312
|
+
async getBufferSnapshot(): Promise<ExtractionBufferSnapshot> {
|
|
313
|
+
await this.load();
|
|
314
|
+
let bufferedSessionCount = 0;
|
|
315
|
+
let pendingTurnCount = 0;
|
|
316
|
+
let oldestMs = Number.POSITIVE_INFINITY;
|
|
317
|
+
let oldestTurnTimestamp: string | null = null;
|
|
318
|
+
const consider = (turns: BufferTurn[] | undefined): void => {
|
|
319
|
+
if (!Array.isArray(turns) || turns.length === 0) return;
|
|
320
|
+
bufferedSessionCount += 1;
|
|
321
|
+
pendingTurnCount += turns.length;
|
|
322
|
+
const first = turns[0]?.timestamp;
|
|
323
|
+
const parsed = typeof first === "string" ? Date.parse(first) : Number.NaN;
|
|
324
|
+
if (Number.isFinite(parsed) && parsed < oldestMs) {
|
|
325
|
+
oldestMs = parsed;
|
|
326
|
+
oldestTurnTimestamp = first ?? null;
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const entries = this.state.entries;
|
|
330
|
+
if (entries) {
|
|
331
|
+
// Retained turns (deferred #562) are pending too - count with active (oldest-first), like getTurns().
|
|
332
|
+
for (const entry of Object.values(entries)) consider([...(entry?.retainedTurns ?? []), ...(entry?.turns ?? [])]);
|
|
333
|
+
} else {
|
|
334
|
+
consider(this.state.turns);
|
|
335
|
+
}
|
|
336
|
+
return { bufferedSessionCount, pendingTurnCount, oldestTurnTimestamp };
|
|
337
|
+
}
|
|
338
|
+
|
|
309
339
|
/**
|
|
310
340
|
* Reset the buffer to an empty, usable state.
|
|
311
341
|
* Called when the persisted buffer file is corrupt and load() fails,
|
package/src/cli.ts
CHANGED
|
@@ -30,6 +30,7 @@ import { isRecallDisclosure, RECALL_DISCLOSURE_LEVELS } from "./types.js";
|
|
|
30
30
|
import { chunkContent } from "./chunking.js";
|
|
31
31
|
import { rescoreMemoryImportance } from "./importance.js";
|
|
32
32
|
import { renderQmdBacklogStatus } from "./qmd-status.js";
|
|
33
|
+
import { renderExtractionLivenessStats } from "./extraction-liveness.js";
|
|
33
34
|
import { exportJsonBundle } from "./transfer/export-json.js";
|
|
34
35
|
import { exportMarkdownBundle } from "./transfer/export-md.js";
|
|
35
36
|
import { backupMemoryDir } from "./transfer/backup.js";
|
|
@@ -3653,7 +3654,6 @@ export function registerCli(
|
|
|
3653
3654
|
// Ensure QMD is probed before checking availability
|
|
3654
3655
|
await orchestrator.qmd.probe();
|
|
3655
3656
|
|
|
3656
|
-
const meta = await orchestrator.storage.loadMeta();
|
|
3657
3657
|
const memories = await orchestrator.storage.readAllMemories();
|
|
3658
3658
|
const entities = await orchestrator.storage.readEntities();
|
|
3659
3659
|
const profile = await orchestrator.storage.readProfile();
|
|
@@ -3662,9 +3662,7 @@ export function registerCli(
|
|
|
3662
3662
|
console.log(`Total memories: ${memories.length}`);
|
|
3663
3663
|
console.log(`Total entities: ${entities.length}`);
|
|
3664
3664
|
console.log(`Profile size: ${profile.length} chars`);
|
|
3665
|
-
console.log(
|
|
3666
|
-
console.log(`Last extraction: ${meta.lastExtractionAt ?? "never"}`);
|
|
3667
|
-
console.log(`Last consolidation: ${meta.lastConsolidationAt ?? "never"}`);
|
|
3665
|
+
for (const line of await renderExtractionLivenessStats(orchestrator)) console.log(line);
|
|
3668
3666
|
console.log(`QMD: ${orchestrator.qmd.isAvailable() ? "available" : "not available"}`);
|
|
3669
3667
|
for (const line of await renderQmdBacklogStatus(orchestrator.qmd, orchestrator.config.qmdEmbeddingBacklogThreshold)) console.log(line);
|
|
3670
3668
|
|
package/src/config.ts
CHANGED
|
@@ -37,6 +37,7 @@ import { expandTildePath } from "./utils/path.js";
|
|
|
37
37
|
// config.ts → connectors/index.ts nor the reverse circular import arises.
|
|
38
38
|
import { coerceBool, coerceBooleanLike, coerceInstallExtension, coerceNumber } from "./connectors/coerce.js";
|
|
39
39
|
import { parseRecallConcurrencyConfig } from "./recall-concurrency-config.js";
|
|
40
|
+
import { parseExtractionLivenessConfig } from "./extraction-liveness.js";
|
|
40
41
|
import { hasLegacyConnectorEntries } from "./connectors/paths.js";
|
|
41
42
|
import {
|
|
42
43
|
parseQmdChunkStrategy,
|
|
@@ -2326,15 +2327,14 @@ export function parseConfig(
|
|
|
2326
2327
|
typeof cfg.activeRecallEntityGraphDepth === "number"
|
|
2327
2328
|
? Math.min(3, Math.max(0, Math.floor(cfg.activeRecallEntityGraphDepth)))
|
|
2328
2329
|
: 1,
|
|
2329
|
-
activeRecallIncludeCausalTrajectories:
|
|
2330
|
-
cfg.activeRecallIncludeCausalTrajectories === true,
|
|
2330
|
+
activeRecallIncludeCausalTrajectories: cfg.activeRecallIncludeCausalTrajectories === true,
|
|
2331
2331
|
activeRecallIncludeDaySummary: cfg.activeRecallIncludeDaySummary === true,
|
|
2332
2332
|
activeRecallAttachRecallExplain: cfg.activeRecallAttachRecallExplain === true,
|
|
2333
|
-
activeRecallAllowChainedActiveMemory:
|
|
2334
|
-
cfg.activeRecallAllowChainedActiveMemory === true,
|
|
2333
|
+
activeRecallAllowChainedActiveMemory: cfg.activeRecallAllowChainedActiveMemory === true,
|
|
2335
2334
|
dreaming,
|
|
2336
2335
|
dreamsPhases,
|
|
2337
2336
|
procedural,
|
|
2337
|
+
extractionLiveness: parseExtractionLivenessConfig(cfg),
|
|
2338
2338
|
wearables,
|
|
2339
2339
|
meetings,
|
|
2340
2340
|
activity,
|