@remnic/core 9.7.8 → 9.7.9
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 +6 -6
- package/dist/access-admin-ops-surface.js +31 -29
- package/dist/access-audit.js +2 -2
- package/dist/access-boundary.d.ts +6 -6
- package/dist/access-boundary.js +32 -30
- package/dist/access-cli.js +88 -86
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +6 -6
- package/dist/access-http.js +39 -37
- package/dist/access-identity-continuity-surface.d.ts +5 -5
- package/dist/access-identity-continuity-surface.js +31 -29
- package/dist/access-lcm-surface.d.ts +6 -6
- package/dist/access-lcm-surface.js +31 -29
- package/dist/access-mcp.d.ts +6 -6
- package/dist/access-mcp.js +36 -34
- package/dist/access-observe-write-surface.d.ts +6 -6
- package/dist/access-observe-write-surface.js +31 -29
- package/dist/access-operations-batch.js +34 -32
- package/dist/access-operations.d.ts +9 -9
- package/dist/access-operations.js +35 -33
- package/dist/access-recall-surface.d.ts +6 -6
- package/dist/access-recall-surface.js +31 -29
- package/dist/access-schema.d.ts +64 -64
- package/dist/{access-service-CxDZXTKt.d.ts → access-service-DSuzikHQ.d.ts} +4 -4
- package/dist/access-service.d.ts +6 -6
- package/dist/access-service.js +31 -29
- package/dist/access-surface-catalog.d.ts +6 -6
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +1 -1
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/{auto-sync-676N6N6Y.js → auto-sync-AAMTVZMK.js} +5 -5
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +5 -5
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +14 -12
- package/dist/buffer-surprise-report.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/calibration.js +2 -2
- package/dist/capabilities.d.ts +1 -1
- package/dist/{capsule-merge-GK5E647P.js → capsule-merge-Z2HUO6IK.js} +10 -2
- package/dist/capsule-merge-Z2HUO6IK.js.map +1 -0
- package/dist/{catalog-DzU9HowE.d.ts → catalog-BNwjACa5.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +15 -13
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-TZJVTH3F.js → chunk-27VEKQQA.js} +14 -14
- package/dist/{chunk-JO5AT6QT.js → chunk-3ZVFLMFQ.js} +1 -1
- package/dist/chunk-3ZVFLMFQ.js.map +1 -0
- package/dist/{chunk-AD2KK5MT.js → chunk-5CFHYQU3.js} +9 -3
- package/dist/chunk-5CFHYQU3.js.map +1 -0
- package/dist/{chunk-7XH7VJN4.js → chunk-5S7Z5SHA.js} +2 -2
- package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
- package/dist/{chunk-EJCVMPIM.js → chunk-7LMEY5KZ.js} +15 -1
- package/dist/chunk-7LMEY5KZ.js.map +1 -0
- package/dist/{chunk-3F4N4WDH.js → chunk-AHLPZ2SF.js} +2 -2
- package/dist/{chunk-AH3M6F4X.js → chunk-CDGGQGUU.js} +2 -2
- package/dist/{chunk-ZHKD4EZM.js → chunk-CK6RI52P.js} +3 -3
- package/dist/{chunk-6C35R7P4.js → chunk-DJCKXI4M.js} +2 -2
- package/dist/{chunk-GL3SMLMZ.js → chunk-DLPXS7BE.js} +109 -85
- package/dist/chunk-DLPXS7BE.js.map +1 -0
- package/dist/{chunk-NMMKRVUF.js → chunk-EIKBKQ6L.js} +6 -6
- package/dist/{chunk-O3BZ6PFY.js → chunk-F3FC7SMO.js} +2 -2
- package/dist/{chunk-ZW6OKHVX.js → chunk-FKCJH7KP.js} +2 -2
- package/dist/{chunk-DQPPRXFO.js → chunk-HQ7QZJM5.js} +2 -2
- package/dist/{chunk-UYZUJ4EB.js → chunk-I2THZUAF.js} +2 -2
- package/dist/{chunk-RKNJBZ55.js → chunk-JBPKEARU.js} +4 -4
- package/dist/{chunk-KIPLG7S7.js → chunk-JKLJ6A7W.js} +2 -2
- package/dist/{chunk-HXDKC3BI.js → chunk-JU3GHO6J.js} +2 -2
- package/dist/{chunk-74MJH7I3.js → chunk-KGNFFCZJ.js} +12 -3
- package/dist/chunk-KGNFFCZJ.js.map +1 -0
- package/dist/{chunk-Q6JPMCPO.js → chunk-KKASNHGF.js} +62 -57
- package/dist/chunk-KKASNHGF.js.map +1 -0
- package/dist/{chunk-R2SJDIPO.js → chunk-KPXAJ77O.js} +9 -7
- package/dist/chunk-KPXAJ77O.js.map +1 -0
- package/dist/{chunk-SYNYI4ZM.js → chunk-L5HJQC36.js} +2 -2
- package/dist/{chunk-VXMWDXIJ.js → chunk-LC7OODWZ.js} +2 -2
- package/dist/{chunk-CNWC274T.js → chunk-MLT5EG6K.js} +28 -28
- package/dist/{chunk-M5QKGHCR.js → chunk-OC35KQIN.js} +6 -2
- package/dist/chunk-OC35KQIN.js.map +1 -0
- package/dist/chunk-OKUEZOGW.js +27 -0
- package/dist/chunk-OKUEZOGW.js.map +1 -0
- package/dist/{chunk-PKGWJFNR.js → chunk-OVMS3DCB.js} +2 -2
- package/dist/chunk-PDJTHRAW.js +36 -0
- package/dist/chunk-PDJTHRAW.js.map +1 -0
- package/dist/{chunk-ZUFJ7ZTR.js → chunk-PHXCPVSX.js} +6 -2
- package/dist/chunk-PHXCPVSX.js.map +1 -0
- package/dist/{chunk-57INMZ6F.js → chunk-POUD5BLV.js} +2 -2
- package/dist/{chunk-KTOH7EJE.js → chunk-PV7E2FGY.js} +307 -43
- package/dist/chunk-PV7E2FGY.js.map +1 -0
- package/dist/{chunk-LRGSLV7M.js → chunk-PYHOAXTI.js} +4 -4
- package/dist/{chunk-WKE4VXSZ.js → chunk-QKVX4Y6D.js} +2 -2
- package/dist/{chunk-FXGC5UUH.js → chunk-RT7IP3D3.js} +2 -2
- package/dist/{chunk-CHVU4RE5.js → chunk-SKXBOZDF.js} +3 -3
- package/dist/{chunk-TVRPRFUB.js → chunk-TY43GBX2.js} +9 -7
- package/dist/chunk-TY43GBX2.js.map +1 -0
- package/dist/{chunk-UVIQHSS7.js → chunk-UP25ZZCN.js} +9 -3
- package/dist/chunk-UP25ZZCN.js.map +1 -0
- package/dist/{chunk-GKCCHHZK.js → chunk-UXKMMNJD.js} +4 -4
- package/dist/{chunk-XFTPUXCE.js → chunk-UXWGPODH.js} +4 -4
- package/dist/{chunk-2FSHROYK.js → chunk-V53GJUSL.js} +8 -8
- package/dist/{chunk-LKT755LP.js → chunk-VA4WSW54.js} +2 -2
- package/dist/{chunk-FYKIEOG6.js → chunk-VCFADTFS.js} +3 -3
- package/dist/{chunk-VF4XKTX3.js → chunk-VZ5OJE4X.js} +10 -2
- package/dist/chunk-VZ5OJE4X.js.map +1 -0
- package/dist/{chunk-AWJ2FHCF.js → chunk-X47LWMKA.js} +49 -21
- package/dist/chunk-X47LWMKA.js.map +1 -0
- package/dist/{chunk-VMGMY2AI.js → chunk-XG5CGR3K.js} +8 -8
- package/dist/{chunk-VMGMY2AI.js.map → chunk-XG5CGR3K.js.map} +1 -1
- package/dist/{chunk-T7VNN3ZM.js → chunk-XVLEGMJI.js} +2 -2
- package/dist/{chunk-CRFTLUWT.js → chunk-Y5U35ZVS.js} +2 -2
- package/dist/{chunk-UHGHTOR5.js → chunk-YGAOLHKN.js} +7 -7
- package/dist/{chunk-QDCJNRKK.js → chunk-YXOAQAH2.js} +3 -3
- package/dist/{cli-BqyGVyOe.d.ts → cli-DACyuK8-.d.ts} +5 -5
- package/dist/cli.d.ts +8 -8
- package/dist/cli.js +65 -63
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +14 -12
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +14 -12
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +14 -12
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-provenance-check.js +6 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/consolidation-undo.js +8 -1
- package/dist/consolidation-undo.js.map +1 -1
- package/dist/contradiction/index.d.ts +2 -2
- 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/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +14 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +5 -5
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-faithfulness.js +3 -3
- 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-judge.js +3 -3
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +3 -3
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/fallback-llm.js +2 -2
- package/dist/{forget-KHF7A44H.js → forget-CQCLB5LB.js} +2 -2
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +19 -0
- package/dist/in-flight-reads.js +16 -0
- package/dist/in-flight-reads.js.map +1 -0
- package/dist/index.d.ts +13 -13
- package/dist/index.js +105 -103
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +2 -2
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +7 -7
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +14 -12
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +14 -12
- package/dist/maintenance/rebuild-memory-projection.js +15 -13
- package/dist/mcp-memory-inspector-app.d.ts +6 -6
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +24 -13
- package/dist/memory-cache.js +3 -1
- package/dist/memory-corpus-version.d.ts +19 -0
- package/dist/memory-corpus-version.js +13 -0
- package/dist/memory-corpus-version.js.map +1 -0
- 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-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 +21 -19
- 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 +14 -12
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +26 -24
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +2 -2
- package/dist/orchestration/maintenance.js +16 -14
- package/dist/{orchestrator-37Cx7yyw.d.ts → orchestrator-D83AvrPf.d.ts} +4 -4
- package/dist/orchestrator.d.ts +5 -5
- package/dist/orchestrator.js +88 -86
- package/dist/page-versioning.js +5 -1
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-C6onljHc.d.ts → pipeline-BSqGpYl1.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{qmd-J08G7MEm.d.ts → qmd-CutnpRVe.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/qmd.js +2 -2
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-planner-llm.js +2 -2
- 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 +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/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/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +2 -2
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/schemas.d.ts +74 -74
- 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 +12 -12
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-BFtoVosl.d.ts → semantic-consolidation-btIVRC4l.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +15 -13
- package/dist/semantic-rule-promotion.js +14 -12
- package/dist/semantic-rule-verifier.d.ts +5 -1
- package/dist/semantic-rule-verifier.js +14 -12
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +9 -9
- package/dist/signal.d.ts +1 -1
- package/dist/{storage-CXjwBr69.d.ts → storage-BVv_Mqa0.d.ts} +133 -3
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +13 -11
- package/dist/summarizer.d.ts +1 -1
- package/dist/summarizer.js +3 -3
- package/dist/summary-snapshot.d.ts +1 -1
- 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/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/transfer/capsule-import.js +6 -2
- package/dist/transfer/import-sqlite.js +2 -2
- package/dist/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-DpxqC8dI.d.ts → types-Cmkz7csa.d.ts} +27 -0
- 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.d.ts +4 -0
- package/dist/verified-recall.js +14 -12
- package/package.json +12 -2
- package/src/binary-lifecycle/pipeline.ts +22 -0
- package/src/cli.ts +8 -0
- package/src/compounding/engine.ts +9 -1
- package/src/config.ts +14 -0
- package/src/consolidation-undo.ts +8 -0
- package/src/curation/index.ts +9 -0
- package/src/in-flight-reads.ts +63 -0
- package/src/maintenance/memory-governance.ts +6 -0
- package/src/memory-cache-hot.test.ts +131 -0
- package/src/memory-cache.ts +146 -22
- package/src/memory-corpus-version.ts +45 -0
- package/src/namespaces/storage.ts +20 -1
- package/src/operator-toolkit.ts +7 -1
- package/src/orchestration/recall-internal.ts +6 -3
- package/src/orchestrator.ts +25 -1
- package/src/page-versioning.ts +14 -1
- package/src/provenance-frontmatter.test.ts +6 -0
- package/src/review/index.ts +16 -8
- package/src/semantic-rule-promotion.ts +9 -1
- package/src/semantic-rule-verifier.ts +19 -6
- package/src/spaces/index.ts +10 -0
- package/src/storage/memory-read-store.ts +9 -2
- package/src/storage-contract/cache-coherence.test.ts +242 -0
- package/src/storage-contract/namespace-routing.test.ts +26 -1
- package/src/storage.ts +513 -31
- package/src/transfer/capsule-cache-coherence.test.ts +107 -0
- package/src/transfer/capsule-import.ts +8 -0
- package/src/transfer/capsule-merge.ts +7 -0
- package/src/types.ts +27 -0
- package/src/verified-recall.ts +20 -6
- package/dist/capsule-merge-GK5E647P.js.map +0 -1
- package/dist/chunk-74MJH7I3.js.map +0 -1
- package/dist/chunk-AD2KK5MT.js.map +0 -1
- package/dist/chunk-AWJ2FHCF.js.map +0 -1
- package/dist/chunk-EJCVMPIM.js.map +0 -1
- package/dist/chunk-GL3SMLMZ.js.map +0 -1
- package/dist/chunk-JO5AT6QT.js.map +0 -1
- package/dist/chunk-KTOH7EJE.js.map +0 -1
- package/dist/chunk-M5QKGHCR.js.map +0 -1
- package/dist/chunk-Q6JPMCPO.js.map +0 -1
- package/dist/chunk-R2SJDIPO.js.map +0 -1
- package/dist/chunk-TVRPRFUB.js.map +0 -1
- package/dist/chunk-UVIQHSS7.js.map +0 -1
- package/dist/chunk-VF4XKTX3.js.map +0 -1
- package/dist/chunk-ZUFJ7ZTR.js.map +0 -1
- /package/dist/{auto-sync-676N6N6Y.js.map → auto-sync-AAMTVZMK.js.map} +0 -0
- /package/dist/{chunk-TZJVTH3F.js.map → chunk-27VEKQQA.js.map} +0 -0
- /package/dist/{chunk-7XH7VJN4.js.map → chunk-5S7Z5SHA.js.map} +0 -0
- /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
- /package/dist/{chunk-3F4N4WDH.js.map → chunk-AHLPZ2SF.js.map} +0 -0
- /package/dist/{chunk-AH3M6F4X.js.map → chunk-CDGGQGUU.js.map} +0 -0
- /package/dist/{chunk-ZHKD4EZM.js.map → chunk-CK6RI52P.js.map} +0 -0
- /package/dist/{chunk-6C35R7P4.js.map → chunk-DJCKXI4M.js.map} +0 -0
- /package/dist/{chunk-NMMKRVUF.js.map → chunk-EIKBKQ6L.js.map} +0 -0
- /package/dist/{chunk-O3BZ6PFY.js.map → chunk-F3FC7SMO.js.map} +0 -0
- /package/dist/{chunk-ZW6OKHVX.js.map → chunk-FKCJH7KP.js.map} +0 -0
- /package/dist/{chunk-DQPPRXFO.js.map → chunk-HQ7QZJM5.js.map} +0 -0
- /package/dist/{chunk-UYZUJ4EB.js.map → chunk-I2THZUAF.js.map} +0 -0
- /package/dist/{chunk-RKNJBZ55.js.map → chunk-JBPKEARU.js.map} +0 -0
- /package/dist/{chunk-KIPLG7S7.js.map → chunk-JKLJ6A7W.js.map} +0 -0
- /package/dist/{chunk-HXDKC3BI.js.map → chunk-JU3GHO6J.js.map} +0 -0
- /package/dist/{chunk-SYNYI4ZM.js.map → chunk-L5HJQC36.js.map} +0 -0
- /package/dist/{chunk-VXMWDXIJ.js.map → chunk-LC7OODWZ.js.map} +0 -0
- /package/dist/{chunk-CNWC274T.js.map → chunk-MLT5EG6K.js.map} +0 -0
- /package/dist/{chunk-PKGWJFNR.js.map → chunk-OVMS3DCB.js.map} +0 -0
- /package/dist/{chunk-57INMZ6F.js.map → chunk-POUD5BLV.js.map} +0 -0
- /package/dist/{chunk-LRGSLV7M.js.map → chunk-PYHOAXTI.js.map} +0 -0
- /package/dist/{chunk-WKE4VXSZ.js.map → chunk-QKVX4Y6D.js.map} +0 -0
- /package/dist/{chunk-FXGC5UUH.js.map → chunk-RT7IP3D3.js.map} +0 -0
- /package/dist/{chunk-CHVU4RE5.js.map → chunk-SKXBOZDF.js.map} +0 -0
- /package/dist/{chunk-GKCCHHZK.js.map → chunk-UXKMMNJD.js.map} +0 -0
- /package/dist/{chunk-XFTPUXCE.js.map → chunk-UXWGPODH.js.map} +0 -0
- /package/dist/{chunk-2FSHROYK.js.map → chunk-V53GJUSL.js.map} +0 -0
- /package/dist/{chunk-LKT755LP.js.map → chunk-VA4WSW54.js.map} +0 -0
- /package/dist/{chunk-FYKIEOG6.js.map → chunk-VCFADTFS.js.map} +0 -0
- /package/dist/{chunk-T7VNN3ZM.js.map → chunk-XVLEGMJI.js.map} +0 -0
- /package/dist/{chunk-CRFTLUWT.js.map → chunk-Y5U35ZVS.js.map} +0 -0
- /package/dist/{chunk-UHGHTOR5.js.map → chunk-YGAOLHKN.js.map} +0 -0
- /package/dist/{chunk-QDCJNRKK.js.map → chunk-YXOAQAH2.js.map} +0 -0
- /package/dist/{forget-KHF7A44H.js.map → forget-CQCLB5LB.js.map} +0 -0
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
|
|
11
11
|
import assert from "node:assert/strict";
|
|
12
12
|
import test from "node:test";
|
|
13
|
+
import { appendFile, mkdtemp, rm, mkdir, writeFile } from "node:fs/promises";
|
|
14
|
+
import os from "node:os";
|
|
15
|
+
import path from "node:path";
|
|
13
16
|
|
|
14
17
|
import { StorageManager } from "../storage.js";
|
|
15
18
|
import { resetStaticCaches } from "./harness.js";
|
|
@@ -98,3 +101,242 @@ test("cache-coherence: readAllMemories reflects writes across instances after in
|
|
|
98
101
|
await rm(dir, { recursive: true, force: true });
|
|
99
102
|
}
|
|
100
103
|
});
|
|
104
|
+
|
|
105
|
+
type ScanSpy = { _readAllMemoriesFromDisk: () => Promise<unknown> };
|
|
106
|
+
|
|
107
|
+
function installScanSpy(sm: StorageManager): { scans: () => number } {
|
|
108
|
+
const spy = sm as unknown as ScanSpy;
|
|
109
|
+
const orig = spy._readAllMemoriesFromDisk.bind(sm);
|
|
110
|
+
let count = 0;
|
|
111
|
+
spy._readAllMemoriesFromDisk = async () => {
|
|
112
|
+
count += 1;
|
|
113
|
+
return orig();
|
|
114
|
+
};
|
|
115
|
+
return { scans: () => count };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
test("hot cache (#1902): a warm readAllMemories() serves without re-scanning disk", async () => {
|
|
119
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-warm-"));
|
|
120
|
+
try {
|
|
121
|
+
resetStaticCaches();
|
|
122
|
+
const sm = new StorageManager(dir);
|
|
123
|
+
await sm.ensureDirectories();
|
|
124
|
+
await sm.writeMemory("fact", "A");
|
|
125
|
+
await sm.readAllMemories(); // warming scan populates the hot cache
|
|
126
|
+
const spy = installScanSpy(sm);
|
|
127
|
+
const warm = await sm.readAllMemories();
|
|
128
|
+
assert.equal(spy.scans(), 0, "a warm read must not touch disk");
|
|
129
|
+
assert.ok(warm.some((m) => m.content === "A"));
|
|
130
|
+
} finally {
|
|
131
|
+
resetStaticCaches();
|
|
132
|
+
await rm(dir, { recursive: true, force: true });
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test("hot cache (#1902): a single-file write patches the cache in place — next read stays warm", async () => {
|
|
137
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-patch-"));
|
|
138
|
+
try {
|
|
139
|
+
resetStaticCaches();
|
|
140
|
+
const sm = new StorageManager(dir);
|
|
141
|
+
await sm.ensureDirectories();
|
|
142
|
+
await sm.writeMemory("fact", "A");
|
|
143
|
+
await sm.readAllMemories(); // warm
|
|
144
|
+
const spy = installScanSpy(sm);
|
|
145
|
+
await sm.writeMemory("fact", "B"); // patch-on-write keeps the entry warm
|
|
146
|
+
const after = await sm.readAllMemories();
|
|
147
|
+
assert.equal(spy.scans(), 0, "patch-on-write must keep the cache warm (no rescan)");
|
|
148
|
+
assert.ok(after.some((m) => m.content === "B"), "the newly written fact is present");
|
|
149
|
+
assert.ok(after.some((m) => m.content === "A"), "the prior fact survives the patch");
|
|
150
|
+
} finally {
|
|
151
|
+
resetStaticCaches();
|
|
152
|
+
await rm(dir, { recursive: true, force: true });
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
test("hot cache (#1902): a peer corpus-version bump forces exactly one rescan (cross-process coherence)", async () => {
|
|
157
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-peer-"));
|
|
158
|
+
try {
|
|
159
|
+
resetStaticCaches();
|
|
160
|
+
const sm = new StorageManager(dir);
|
|
161
|
+
await sm.ensureDirectories();
|
|
162
|
+
await sm.writeMemory("fact", "A");
|
|
163
|
+
await sm.readAllMemories(); // warm
|
|
164
|
+
const spy = installScanSpy(sm);
|
|
165
|
+
// Simulate a peer process advancing the on-disk corpus sentinel (its byte
|
|
166
|
+
// size IS the version). This instance's warm entry is now stale-versioned.
|
|
167
|
+
await appendFile(path.join(dir, "state", ".memory-corpus-version.log"), "x");
|
|
168
|
+
const afterPeer = await sm.readAllMemories();
|
|
169
|
+
assert.equal(spy.scans(), 1, "a peer sentinel bump must force exactly one rescan");
|
|
170
|
+
assert.ok(afterPeer.some((m) => m.content === "A"));
|
|
171
|
+
} finally {
|
|
172
|
+
resetStaticCaches();
|
|
173
|
+
await rm(dir, { recursive: true, force: true });
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test("hot cache (#1902): a delete rescans and drops the removed memory", async () => {
|
|
178
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-del-"));
|
|
179
|
+
try {
|
|
180
|
+
resetStaticCaches();
|
|
181
|
+
const sm = new StorageManager(dir);
|
|
182
|
+
await sm.ensureDirectories();
|
|
183
|
+
const { id } = await sm.writeMemory("fact", "A");
|
|
184
|
+
await sm.writeMemory("fact", "B");
|
|
185
|
+
await sm.readAllMemories(); // warm
|
|
186
|
+
await sm.invalidateMemory(id); // delete drops the hot layer wholesale
|
|
187
|
+
const after = await sm.readAllMemories();
|
|
188
|
+
assert.ok(after.some((m) => m.content === "B"), "surviving memory remains");
|
|
189
|
+
assert.ok(!after.some((m) => m.content === "A"), "the deleted memory is gone");
|
|
190
|
+
} finally {
|
|
191
|
+
resetStaticCaches();
|
|
192
|
+
await rm(dir, { recursive: true, force: true });
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
test("hot cache (#1902/#1904 compat): a plain fact create does NOT bump memory-status (entity cache stays warm)", async () => {
|
|
197
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-status-"));
|
|
198
|
+
try {
|
|
199
|
+
resetStaticCaches();
|
|
200
|
+
const sm = new StorageManager(dir);
|
|
201
|
+
await sm.ensureDirectories();
|
|
202
|
+
await sm.writeMemory("fact", "seed"); // establish the state dir + baseline
|
|
203
|
+
const before = sm.getMemoryStatusVersion();
|
|
204
|
+
await sm.writeMemory("fact", "another create");
|
|
205
|
+
assert.equal(
|
|
206
|
+
sm.getMemoryStatusVersion(),
|
|
207
|
+
before,
|
|
208
|
+
"a plain fact create must not bump memory-status (the entity cache keys on it)",
|
|
209
|
+
);
|
|
210
|
+
} finally {
|
|
211
|
+
resetStaticCaches();
|
|
212
|
+
await rm(dir, { recursive: true, force: true });
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test("hot cache (#1902): hotMemoriesCacheEnabled=false forces every read to rescan", async () => {
|
|
217
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-off-"));
|
|
218
|
+
try {
|
|
219
|
+
resetStaticCaches();
|
|
220
|
+
const sm = new StorageManager(dir, undefined, false); // gate off
|
|
221
|
+
await sm.ensureDirectories();
|
|
222
|
+
await sm.writeMemory("fact", "A");
|
|
223
|
+
const spy = installScanSpy(sm);
|
|
224
|
+
await sm.readAllMemories();
|
|
225
|
+
await sm.readAllMemories();
|
|
226
|
+
assert.equal(spy.scans(), 2, "with the cache disabled, each sequential read scans disk");
|
|
227
|
+
} finally {
|
|
228
|
+
resetStaticCaches();
|
|
229
|
+
await rm(dir, { recursive: true, force: true });
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test("hot cache (#1902): the gate default is isolated per memory dir (Codex P2)", async () => {
|
|
234
|
+
const dirOff = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-perdir-off-"));
|
|
235
|
+
const dirOn = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-perdir-on-"));
|
|
236
|
+
try {
|
|
237
|
+
resetStaticCaches();
|
|
238
|
+
// Register divergent per-dir settings; a later registration must NOT flip
|
|
239
|
+
// an earlier dir's behavior (the "last orchestrator wins" bug).
|
|
240
|
+
StorageManager.setHotMemoriesCacheDefault(dirOff, false);
|
|
241
|
+
StorageManager.setHotMemoriesCacheDefault(dirOn, true);
|
|
242
|
+
// Constructed WITHOUT a per-instance override, so each resolves its own
|
|
243
|
+
// dir's registered default.
|
|
244
|
+
const smOff = new StorageManager(dirOff);
|
|
245
|
+
const smOn = new StorageManager(dirOn);
|
|
246
|
+
await smOff.ensureDirectories();
|
|
247
|
+
await smOff.writeMemory("fact", "A");
|
|
248
|
+
await smOn.ensureDirectories();
|
|
249
|
+
await smOn.writeMemory("fact", "B");
|
|
250
|
+
const spyOff = installScanSpy(smOff);
|
|
251
|
+
const spyOn = installScanSpy(smOn);
|
|
252
|
+
await smOff.readAllMemories();
|
|
253
|
+
await smOff.readAllMemories();
|
|
254
|
+
await smOn.readAllMemories();
|
|
255
|
+
await smOn.readAllMemories();
|
|
256
|
+
assert.equal(spyOff.scans(), 2, "dir registered false rescans on every read");
|
|
257
|
+
assert.equal(spyOn.scans(), 1, "dir registered true serves the second read from cache");
|
|
258
|
+
} finally {
|
|
259
|
+
resetStaticCaches();
|
|
260
|
+
await rm(dirOff, { recursive: true, force: true });
|
|
261
|
+
await rm(dirOn, { recursive: true, force: true });
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test("hot cache (#1902): flushAccessTracking patches locally + bumps for cross-process coherence", async () => {
|
|
266
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-access-"));
|
|
267
|
+
try {
|
|
268
|
+
resetStaticCaches();
|
|
269
|
+
const sm = new StorageManager(dir);
|
|
270
|
+
await sm.ensureDirectories();
|
|
271
|
+
const { id } = await sm.writeMemory("fact", "trackable");
|
|
272
|
+
// Warm the cache.
|
|
273
|
+
const warm = await sm.readAllMemories();
|
|
274
|
+
assert.equal(warm.length, 1);
|
|
275
|
+
const versionBefore = sm.getMemoryCorpusVersion();
|
|
276
|
+
const spy = installScanSpy(sm);
|
|
277
|
+
await sm.flushAccessTracking([
|
|
278
|
+
{ memoryId: id, newCount: 7, lastAccessed: "2026-07-16T00:00:00.000Z" },
|
|
279
|
+
]);
|
|
280
|
+
const after = await sm.readAllMemories();
|
|
281
|
+
// Local process: patched in place + re-keyed, so no rescan and fresh counts.
|
|
282
|
+
assert.equal(spy.scans(), 0, "access-tracking flush must not rescan the corpus locally");
|
|
283
|
+
const m = after.find((x) => x.frontmatter.id === id);
|
|
284
|
+
assert.equal(m?.frontmatter.accessCount, 7, "hot cache reflects the flushed access count");
|
|
285
|
+
assert.equal(m?.frontmatter.lastAccessed, "2026-07-16T00:00:00.000Z");
|
|
286
|
+
// Cross-process: the shared sentinel advanced so peer processes rescan and
|
|
287
|
+
// never overwrite this process's increment (Codex P2).
|
|
288
|
+
assert.ok(
|
|
289
|
+
sm.getMemoryCorpusVersion() > versionBefore,
|
|
290
|
+
"access-tracking flush advances the corpus sentinel for peer coherence",
|
|
291
|
+
);
|
|
292
|
+
} finally {
|
|
293
|
+
resetStaticCaches();
|
|
294
|
+
await rm(dir, { recursive: true, force: true });
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
test("hot cache (#1902): ensureDirectories activates a version-0 corpus so reads cache (Cursor Medium)", async () => {
|
|
299
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-zero-"));
|
|
300
|
+
try {
|
|
301
|
+
resetStaticCaches();
|
|
302
|
+
// Simulate an existing corpus with NO sentinel yet: write a fact file
|
|
303
|
+
// directly to disk (bypassing StorageManager, so nothing bumps the sentinel).
|
|
304
|
+
await mkdir(path.join(dir, "facts"), { recursive: true });
|
|
305
|
+
await writeFile(path.join(dir, "facts", "a.md"), "---\nid: fact-a\n---\nA");
|
|
306
|
+
const sm = new StorageManager(dir);
|
|
307
|
+
assert.equal(sm.getMemoryCorpusVersion(), 0, "precondition: sentinel starts at 0");
|
|
308
|
+
// The daemon calls ensureDirectories() at startup (before serving reads); it
|
|
309
|
+
// seeds a nonzero sentinel so the hot path engages on a read-heavy workload.
|
|
310
|
+
await sm.ensureDirectories();
|
|
311
|
+
assert.ok(sm.getMemoryCorpusVersion() > 0, "ensureDirectories activates the sentinel");
|
|
312
|
+
const spy = installScanSpy(sm);
|
|
313
|
+
const first = await sm.readAllMemories();
|
|
314
|
+
assert.equal(first.length, 1);
|
|
315
|
+
await sm.readAllMemories();
|
|
316
|
+
assert.equal(spy.scans(), 1, "second read is served from cache — activation worked");
|
|
317
|
+
} finally {
|
|
318
|
+
resetStaticCaches();
|
|
319
|
+
await rm(dir, { recursive: true, force: true });
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
test("hot cache (#1902): an empty corpus is served from cache, not rescanned (kilo null-check)", async () => {
|
|
324
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), "remnic-hot-empty-"));
|
|
325
|
+
try {
|
|
326
|
+
resetStaticCaches();
|
|
327
|
+
const sm = new StorageManager(dir);
|
|
328
|
+
// ensureDirectories activates the sentinel (version > 0); the corpus is empty.
|
|
329
|
+
await sm.ensureDirectories();
|
|
330
|
+
const first = await sm.readAllMemories();
|
|
331
|
+
assert.equal(first.length, 0, "corpus is empty");
|
|
332
|
+
const spy = installScanSpy(sm);
|
|
333
|
+
await sm.readAllMemories();
|
|
334
|
+
await sm.readAllMemories();
|
|
335
|
+
// getCachedMemories returns [] (falsy) for an empty corpus; the read guard
|
|
336
|
+
// must null-check, not truthiness-check, or every read rescans.
|
|
337
|
+
assert.equal(spy.scans(), 0, "empty corpus is served from cache on repeat reads");
|
|
338
|
+
} finally {
|
|
339
|
+
resetStaticCaches();
|
|
340
|
+
await rm(dir, { recursive: true, force: true });
|
|
341
|
+
}
|
|
342
|
+
});
|
|
@@ -18,9 +18,10 @@ import { mkdir, writeFile } from "node:fs/promises";
|
|
|
18
18
|
import path from "node:path";
|
|
19
19
|
import test from "node:test";
|
|
20
20
|
|
|
21
|
-
import { makeStorage, makeNamespaceRouter } from "./harness.js";
|
|
21
|
+
import { makeStorage, makeNamespaceRouter, resetStaticCaches } from "./harness.js";
|
|
22
22
|
import { resolveNamespaceStorageRoot } from "../namespaces/storage.js";
|
|
23
23
|
import { namespaceIdentityToken } from "../namespaces/identity.js";
|
|
24
|
+
import { getCachedMemories } from "../memory-cache.js";
|
|
24
25
|
|
|
25
26
|
test("namespace-routing: default namespace resolves to the legacy memoryDir root", async () => {
|
|
26
27
|
const { router, memoryDir, config, cleanup } = await makeNamespaceRouter();
|
|
@@ -133,3 +134,27 @@ test("namespace-routing: router caches StorageManager per namespace (same instan
|
|
|
133
134
|
await cleanup();
|
|
134
135
|
}
|
|
135
136
|
});
|
|
137
|
+
|
|
138
|
+
test("namespace-routing: hotMemoriesCacheEnabled=false propagates to namespace child storages (#1902 Codex P2)", async () => {
|
|
139
|
+
const { router, config, cleanup } = await makeNamespaceRouter({ hotMemoriesCacheEnabled: false });
|
|
140
|
+
try {
|
|
141
|
+
resetStaticCaches();
|
|
142
|
+
const sm = await router.storageFor("team-alpha");
|
|
143
|
+
await sm.ensureDirectories();
|
|
144
|
+
await sm.writeMemory("fact", "A");
|
|
145
|
+
await sm.readAllMemories();
|
|
146
|
+
await sm.readAllMemories();
|
|
147
|
+
const root = await resolveNamespaceStorageRoot(config, "team-alpha");
|
|
148
|
+
// Gate propagated to the child: with caching disabled the child storage
|
|
149
|
+
// never populates the module-level hot cache, so getCachedMemories stays
|
|
150
|
+
// null even after reads. Before the fix the child fell back to the
|
|
151
|
+
// process-wide default (true) and would have cached the corpus.
|
|
152
|
+
assert.equal(
|
|
153
|
+
getCachedMemories(root, sm.getMemoryCorpusVersion()),
|
|
154
|
+
null,
|
|
155
|
+
"namespace child honors the disabled gate and never caches the corpus",
|
|
156
|
+
);
|
|
157
|
+
} finally {
|
|
158
|
+
await cleanup();
|
|
159
|
+
}
|
|
160
|
+
});
|