@snoai/memory 0.0.0-stage → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +176 -0
- package/README.md +33 -2
- package/config/b-profile-section-registry.json +118 -0
- package/config/llm/compiled/2026-05-19T230932Z/manifest.json +25 -0
- package/config/llm/compiled/2026-05-19T230932Z/registry-root.json +67 -0
- package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
- package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openrouter_auto.json +5 -0
- package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/sno_ai_extract.json +5 -0
- package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
- package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openrouter_auto.mda +24 -0
- package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/sno_ai_extract.mda +24 -0
- package/config/llm/compiled/2026-07-21T001311Z/manifest.json +43 -0
- package/config/llm/compiled/2026-07-21T001311Z/registry-root.json +97 -0
- package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
- package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openrouter_auto.json +5 -0
- package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_ai_extract.json +5 -0
- package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
- package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_chat.json +10 -0
- package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_profile.json +10 -0
- package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
- package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openrouter_auto.mda +24 -0
- package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_ai_extract.mda +24 -0
- package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
- package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_chat.mda +27 -0
- package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_profile.mda +27 -0
- package/config/llm/compiled/2026-08-29T060335Z/manifest.json +43 -0
- package/config/llm/compiled/2026-08-29T060335Z/registry-root.json +97 -0
- package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
- package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openrouter_auto.json +5 -0
- package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_ai_extract.json +5 -0
- package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
- package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_chat.json +10 -0
- package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_profile.json +10 -0
- package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
- package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openrouter_auto.mda +24 -0
- package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_ai_extract.mda +24 -0
- package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
- package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_chat.mda +27 -0
- package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_profile.mda +27 -0
- package/config/llm/compiled/2026-09-04T004828Z/manifest.json +43 -0
- package/config/llm/compiled/2026-09-04T004828Z/registry-root.json +97 -0
- package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
- package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openrouter_auto.json +5 -0
- package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_ai_extract.json +5 -0
- package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
- package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_chat.json +10 -0
- package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_profile.json +10 -0
- package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
- package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openrouter_auto.mda +24 -0
- package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_ai_extract.mda +24 -0
- package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
- package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_chat.mda +27 -0
- package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_profile.mda +27 -0
- package/config/llm/current.json +4 -0
- package/config/llm/source/mem_claw/openai_gpt_5_nano.mda +24 -0
- package/config/llm/source/mem_claw/openrouter_auto.mda +24 -0
- package/config/llm/source/mem_claw/sno_ai_extract.mda +24 -0
- package/config/llm/source/mem_claw/sno_conflict_verdict.mda +27 -0
- package/config/llm/source/mem_claw/sno_extract_chat.mda +27 -0
- package/config/llm/source/mem_claw/sno_extract_profile.mda +27 -0
- package/config/llm.trust.json +37 -0
- package/dist/_types-CUKHSRkS.d.ts +103 -0
- package/dist/access-tracker-BbEvEocb.d.ts +110 -0
- package/dist/adapter-B7Jox9-6.d.ts +69 -0
- package/dist/adapter-XaRHZWZ2.js +333 -0
- package/dist/agent-llm-port-5oXgBpzJ.d.ts +53 -0
- package/dist/all-resources-BQK2ugjB.js +6379 -0
- package/dist/all-resources-Dij6l5h0.d.ts +18 -0
- package/dist/ambient-learning-text-normalizer-CxjATmMp.js +170 -0
- package/dist/ambient-learning-text-normalizer-_fH3LeuK.d.ts +10 -0
- package/dist/atomic-extraction-reply-BJ9XV_9s.js +863 -0
- package/dist/atomic-extraction-skill-CcXmuCqL.js +56 -0
- package/dist/atomic-memory-extraction-C5rmogoY.js +3605 -0
- package/dist/atomic-memory-extraction-d9EG-4ti.d.ts +327 -0
- package/dist/b-profile-section-dictionary-provider-BHkoNqgk.js +1812 -0
- package/dist/b-profile-section-dictionary-provider-BxbksLj3.d.ts +62 -0
- package/dist/best-effort-BPZSzKk0.d.ts +9 -0
- package/dist/calendar-instruction-CzqZbAPG.js +194 -0
- package/dist/capture-policy-detector-CxbHPkMX.d.ts +53 -0
- package/dist/capture-policy-detector-DaMfy9CZ.js +357 -0
- package/dist/classifier-DnbbtwTS.d.ts +272 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.js +306 -0
- package/dist/coding-skin.d.ts +51 -0
- package/dist/coding-skin.js +55 -0
- package/dist/config-CL90qYva.js +2576 -0
- package/dist/connection-3IVXpuPE.d.ts +391 -0
- package/dist/connection-C9YD5sgm.js +297 -0
- package/dist/daily-log-generator-CH_KuWHs.js +469 -0
- package/dist/daily-log-generator-CsQPHl4A.d.ts +73 -0
- package/dist/daily-spend-estimator-DiwzBlo1.d.ts +8 -0
- package/dist/data-bootstrap-Bl3lthzE.d.ts +30 -0
- package/dist/data-bootstrap-P8sie9WA.js +172 -0
- package/dist/data-paths-C7sNdqvP.d.ts +22 -0
- package/dist/derived-suppression-cache-CI0durYx.d.ts +36 -0
- package/dist/diagnostic-encoder.d.ts +6 -0
- package/dist/diagnostic-encoder.js +29 -0
- package/dist/embedding-provider-client-Q_hJonK9.js +294 -0
- package/dist/embedding-provider-client-vynZMuit.d.ts +94 -0
- package/dist/entry-metadata-parser-BIVSMCIk.js +20 -0
- package/dist/error-D-wb-rZw.js +23 -0
- package/dist/error-signals-D8_3vYu4.d.ts +28 -0
- package/dist/error-signals-lMH2uAdV.js +134 -0
- package/dist/errors-CeVRxf9V.d.ts +49 -0
- package/dist/extraction-text-sanitizer-B_AhIecT.d.ts +32 -0
- package/dist/i18n-text-DbD6Qify.d.ts +13 -0
- package/dist/index-0aqS8pVF.d.ts +351 -0
- package/dist/index-BO4RU_mc.d.ts +650 -0
- package/dist/index-DL8AVj0Z.d.ts +571 -0
- package/dist/index.d.ts +65 -0
- package/dist/index.js +1201 -0
- package/dist/intent-analyzer-B5XVrWwe.d.ts +28 -0
- package/dist/internal/config/index.d.ts +2 -0
- package/dist/internal/config/index.js +581 -0
- package/dist/internal/config/plugin-config-schema.d.ts +2 -0
- package/dist/internal/config/plugin-config-schema.js +2 -0
- package/dist/internal/config/product-mode.d.ts +2 -0
- package/dist/internal/config/product-mode.js +36 -0
- package/dist/internal/config/settings.d.ts +2 -0
- package/dist/internal/config/settings.js +265 -0
- package/dist/internal/config/skill-categories.d.ts +4 -0
- package/dist/internal/config/skill-categories.js +68 -0
- package/dist/internal/config/skin-defaults.d.ts +6 -0
- package/dist/internal/config/skin-defaults.js +6 -0
- package/dist/internal/contract/discovery.d.ts +10 -0
- package/dist/internal/contract/discovery.js +53 -0
- package/dist/internal/contract/profile.d.ts +2 -0
- package/dist/internal/contract/profile.js +44 -0
- package/dist/internal/contract/routes.d.ts +2 -0
- package/dist/internal/contract/routes.js +62 -0
- package/dist/internal/engine/bindings/memory-cli-shared.d.ts +47 -0
- package/dist/internal/engine/bindings/memory-cli-shared.js +84 -0
- package/dist/internal/engine/bindings/memory-forget-tool.d.ts +5 -0
- package/dist/internal/engine/bindings/memory-forget-tool.js +66 -0
- package/dist/internal/engine/bindings/memory-list-tool.d.ts +5 -0
- package/dist/internal/engine/bindings/memory-list-tool.js +57 -0
- package/dist/internal/engine/bindings/memory-recall-tool.d.ts +10 -0
- package/dist/internal/engine/bindings/memory-recall-tool.js +283 -0
- package/dist/internal/engine/bindings/memory-reflection-resolve-tool.d.ts +5 -0
- package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +150 -0
- package/dist/internal/engine/bindings/memory-stats-tool.d.ts +5 -0
- package/dist/internal/engine/bindings/memory-stats-tool.js +43 -0
- package/dist/internal/engine/bindings/memory-store-tool.d.ts +5 -0
- package/dist/internal/engine/bindings/memory-store-tool.js +165 -0
- package/dist/internal/engine/bindings/memory-tool-access.d.ts +16 -0
- package/dist/internal/engine/bindings/memory-tool-access.js +46 -0
- package/dist/internal/engine/bindings/memory-tool-formatting.d.ts +62 -0
- package/dist/internal/engine/bindings/memory-tool-formatting.js +106 -0
- package/dist/internal/engine/bindings/memory-tool-results.d.ts +8 -0
- package/dist/internal/engine/bindings/memory-tool-results.js +41 -0
- package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +109 -0
- package/dist/internal/engine/bindings/memory-tool-schemas.js +75 -0
- package/dist/internal/engine/bindings/memory-update-tool.d.ts +5 -0
- package/dist/internal/engine/bindings/memory-update-tool.js +127 -0
- package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +14 -0
- package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +248 -0
- package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +12 -0
- package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +324 -0
- package/dist/internal/engine/bindings/sno-station-mem-hook-types.d.ts +56 -0
- package/dist/internal/engine/bindings/sno-station-mem-hook-types.js +1 -0
- package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +14 -0
- package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +119 -0
- package/dist/internal/engine/bindings/sno-station-mem-message-transcript.d.ts +52 -0
- package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +145 -0
- package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +10 -0
- package/dist/internal/engine/bindings/sno-station-mem-reset-hook.js +9 -0
- package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +36 -0
- package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +104 -0
- package/dist/internal/engine/bindings/sno-station-mem-session-state.d.ts +10 -0
- package/dist/internal/engine/bindings/sno-station-mem-session-state.js +27 -0
- package/dist/internal/engine/eval/trace.d.ts +2 -0
- package/dist/internal/engine/eval/trace.js +151 -0
- package/dist/internal/engine/extraction/ambient-learning-text-normalizer.d.ts +2 -0
- package/dist/internal/engine/extraction/ambient-learning-text-normalizer.js +2 -0
- package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +2 -0
- package/dist/internal/engine/extraction/atomic-memory-extraction.js +2 -0
- package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +2 -0
- package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.js +2 -0
- package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +49 -0
- package/dist/internal/engine/extraction/b-profile-section-rekey.js +730 -0
- package/dist/internal/engine/extraction/capture-policy-detector.d.ts +2 -0
- package/dist/internal/engine/extraction/capture-policy-detector.js +2 -0
- package/dist/internal/engine/extraction/embedding-provider-client.d.ts +2 -0
- package/dist/internal/engine/extraction/embedding-provider-client.js +2 -0
- package/dist/internal/engine/extraction/extraction-text-sanitizer.d.ts +2 -0
- package/dist/internal/engine/extraction/extraction-text-sanitizer.js +114 -0
- package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +3 -0
- package/dist/internal/engine/extraction/memory-metadata-codec.js +2 -0
- package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +2 -0
- package/dist/internal/engine/extraction/memory-temporality-classifier.js +2 -0
- package/dist/internal/engine/i18n/all-resources.d.ts +2 -0
- package/dist/internal/engine/i18n/all-resources.js +2 -0
- package/dist/internal/engine/i18n/locales.d.ts +2 -0
- package/dist/internal/engine/i18n/locales.js +19 -0
- package/dist/internal/engine/i18n/res/_types.d.ts +2 -0
- package/dist/internal/engine/i18n/res/_types.js +11 -0
- package/dist/internal/engine/observability/adapter.d.ts +2 -0
- package/dist/internal/engine/observability/adapter.js +2 -0
- package/dist/internal/engine/observability/best-effort.d.ts +2 -0
- package/dist/internal/engine/observability/best-effort.js +41 -0
- package/dist/internal/engine/observability/early-diagnostics.js +2 -0
- package/dist/internal/engine/observability/memory-snapshot.d.ts +2 -0
- package/dist/internal/engine/observability/memory-snapshot.js +44 -0
- package/dist/internal/engine/observability/observable-embedder.d.ts +2 -0
- package/dist/internal/engine/observability/observable-embedder.js +43 -0
- package/dist/internal/engine/observability/observable-llm-client.d.ts +2 -0
- package/dist/internal/engine/observability/observable-llm-client.js +98 -0
- package/dist/internal/engine/observability/observable-memory-store.d.ts +2 -0
- package/dist/internal/engine/observability/observable-memory-store.js +701 -0
- package/dist/internal/engine/observability/observable-retriever.d.ts +2 -0
- package/dist/internal/engine/observability/observable-retriever.js +95 -0
- package/dist/internal/engine/observability/runtime-diagnostics.d.ts +13 -0
- package/dist/internal/engine/observability/runtime-diagnostics.js +96 -0
- package/dist/internal/engine/observability/session-registry.d.ts +2 -0
- package/dist/internal/engine/observability/session-registry.js +58 -0
- package/dist/internal/engine/observability/version-metadata.d.ts +7 -0
- package/dist/internal/engine/observability/version-metadata.js +59 -0
- package/dist/internal/engine/operations/daily-spend-estimator.d.ts +2 -0
- package/dist/internal/engine/operations/daily-spend-estimator.js +97 -0
- package/dist/internal/engine/operations/learning-file-maintenance.d.ts +2 -0
- package/dist/internal/engine/operations/learning-file-maintenance.js +255 -0
- package/dist/internal/engine/operations/memory-tier-promoter.d.ts +2 -0
- package/dist/internal/engine/operations/memory-tier-promoter.js +95 -0
- package/dist/internal/engine/operations/runtime-audit-log.d.ts +3 -0
- package/dist/internal/engine/operations/runtime-audit-log.js +3 -0
- package/dist/internal/engine/provider/canonical-memory-corpus.d.ts +38 -0
- package/dist/internal/engine/provider/canonical-memory-corpus.js +253 -0
- package/dist/internal/engine/provider/provider-registration.d.ts +39 -0
- package/dist/internal/engine/provider/provider-registration.js +2 -0
- package/dist/internal/engine/provider/provider-row-renderer.d.ts +7 -0
- package/dist/internal/engine/provider/provider-row-renderer.js +53 -0
- package/dist/internal/engine/provider/provider-types.d.ts +2 -0
- package/dist/internal/engine/provider/provider-types.js +1 -0
- package/dist/internal/engine/reflection/daily-log-generator.d.ts +2 -0
- package/dist/internal/engine/reflection/daily-log-generator.js +2 -0
- package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +2 -0
- package/dist/internal/engine/reflection/reflection-command-hooks.js +2 -0
- package/dist/internal/engine/reflection/reflection-deps.d.ts +2 -0
- package/dist/internal/engine/reflection/reflection-deps.js +1 -0
- package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +2 -0
- package/dist/internal/engine/reflection/reflection-embedded-generator.js +2 -0
- package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +2 -0
- package/dist/internal/engine/reflection/reflection-injection-hooks.js +219 -0
- package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +2 -0
- package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +63 -0
- package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +4 -0
- package/dist/internal/engine/reflection/strategy-hook-runner.js +3 -0
- package/dist/internal/engine/rem/classifier.d.ts +2 -0
- package/dist/internal/engine/rem/classifier.js +180 -0
- package/dist/internal/engine/rem/index.d.ts +4 -0
- package/dist/internal/engine/rem/index.js +2551 -0
- package/dist/internal/engine/rem/types.d.ts +2 -0
- package/dist/internal/engine/rem/types.js +40 -0
- package/dist/internal/engine/retrieval/access-tracker.d.ts +2 -0
- package/dist/internal/engine/retrieval/access-tracker.js +314 -0
- package/dist/internal/engine/retrieval/intent-analyzer.d.ts +2 -0
- package/dist/internal/engine/retrieval/intent-analyzer.js +27 -0
- package/dist/internal/engine/retrieval/retrieval-gate.d.ts +2 -0
- package/dist/internal/engine/retrieval/retrieval-gate.js +47 -0
- package/dist/internal/engine/retrieval/retriever.d.ts +2 -0
- package/dist/internal/engine/retrieval/retriever.js +2 -0
- package/dist/internal/engine/security/memory-scope-policy.d.ts +2 -0
- package/dist/internal/engine/security/memory-scope-policy.js +2 -0
- package/dist/internal/engine/security/redact.d.ts +2 -0
- package/dist/internal/engine/security/redact.js +34 -0
- package/dist/internal/engine/security/scopes.d.ts +3 -0
- package/dist/internal/engine/security/scopes.js +3 -0
- package/dist/internal/engine/shared/errors.d.ts +2 -0
- package/dist/internal/engine/shared/errors.js +66 -0
- package/dist/internal/engine/shared/i18n-text.d.ts +2 -0
- package/dist/internal/engine/shared/i18n-text.js +58 -0
- package/dist/internal/engine/shared/iso-date-time.d.ts +16 -0
- package/dist/internal/engine/shared/iso-date-time.js +40 -0
- package/dist/internal/engine/shared/lru.d.ts +2 -0
- package/dist/internal/engine/shared/lru.js +30 -0
- package/dist/internal/engine/shared/memory-kind-policy.d.ts +2 -0
- package/dist/internal/engine/shared/memory-kind-policy.js +64 -0
- package/dist/internal/engine/shared/paths.d.ts +3 -0
- package/dist/internal/engine/shared/paths.js +2 -0
- package/dist/internal/engine/shared/types.d.ts +3 -0
- package/dist/internal/engine/shared/types.js +25 -0
- package/dist/internal/engine/shared/utils.d.ts +2 -0
- package/dist/internal/engine/shared/utils.js +175 -0
- package/dist/internal/engine/telemetry/memory-telemetry-api.d.ts +134 -0
- package/dist/internal/engine/telemetry/memory-telemetry-api.js +730 -0
- package/dist/internal/engine/telemetry/memory-telemetry-observability.d.ts +24 -0
- package/dist/internal/engine/telemetry/memory-telemetry-observability.js +133 -0
- package/dist/internal/engine/telemetry/memory-telemetry-outbox.d.ts +2 -0
- package/dist/internal/engine/telemetry/memory-telemetry-outbox.js +443 -0
- package/dist/internal/engine/telemetry/memory-telemetry-types.d.ts +2 -0
- package/dist/internal/engine/telemetry/memory-telemetry-types.js +21 -0
- package/dist/internal/engine/telemetry/observe-ledger.d.ts +30 -0
- package/dist/internal/engine/telemetry/observe-ledger.js +111 -0
- package/dist/internal/model/agent-llm-port.d.ts +2 -0
- package/dist/internal/model/agent-llm-port.js +1 -0
- package/dist/internal/model/llm-client.d.ts +3 -0
- package/dist/internal/model/llm-client.js +3 -0
- package/dist/internal/model/llm-failure.d.ts +26 -0
- package/dist/internal/model/llm-failure.js +63 -0
- package/dist/internal/model/llm-mode-routing.d.ts +22 -0
- package/dist/internal/model/llm-mode-routing.js +37 -0
- package/dist/internal/store/atomic-memory-cutover-sql.d.ts +13 -0
- package/dist/internal/store/atomic-memory-cutover-sql.js +237 -0
- package/dist/internal/store/connection.d.ts +2 -0
- package/dist/internal/store/connection.js +2 -0
- package/dist/internal/store/data-bootstrap.d.ts +2 -0
- package/dist/internal/store/data-bootstrap.js +2 -0
- package/dist/internal/store/data-paths.d.ts +2 -0
- package/dist/internal/store/data-paths.js +65 -0
- package/dist/internal/store/maintenance.d.ts +75 -0
- package/dist/internal/store/maintenance.js +1401 -0
- package/dist/internal/store/memory-kinds-cutover-migrator.d.ts +28 -0
- package/dist/internal/store/memory-kinds-cutover-migrator.js +415 -0
- package/dist/internal/store/migrations.d.ts +27 -0
- package/dist/internal/store/migrations.js +201 -0
- package/dist/internal/store/sqlite-runtime.d.ts +2 -0
- package/dist/internal/store/sqlite-runtime.js +109 -0
- package/dist/internal/store/store.d.ts +3 -0
- package/dist/internal/store/store.js +2 -0
- package/dist/learning-file-maintenance-9b-Ut6Kv.d.ts +30 -0
- package/dist/llm-client-BSYUAcUb.js +1374 -0
- package/dist/llm-client-DOTSGzhe.d.ts +51 -0
- package/dist/locales-JxGmkG6t.d.ts +7 -0
- package/dist/log-site-catalog.generated-BMKWj-Nx.js +2321 -0
- package/dist/log-site-catalog.json +1 -0
- package/dist/lru-DyoaTyIs.d.ts +14 -0
- package/dist/memdump.d.ts +52 -0
- package/dist/memdump.js +163 -0
- package/dist/memory-entry-projector-DHo8jH10.js +1015 -0
- package/dist/memory-kind-policy-BiuRjSJc.d.ts +23 -0
- package/dist/memory-metadata-codec-DL1sbJiN.js +577 -0
- package/dist/memory-metadata-codec-DUvsYe_X.d.ts +68 -0
- package/dist/memory-runtime-DqUS4cWi.js +19459 -0
- package/dist/memory-scope-policy-1gg5QlWZ.d.ts +67 -0
- package/dist/memory-scope-policy-DICSCURA.js +283 -0
- package/dist/memory-snapshot-CqY1BUUA.d.ts +16 -0
- package/dist/memory-source-order-YMRoeDLd.js +134 -0
- package/dist/memory-store-base-CQ_bHlYA.d.ts +1094 -0
- package/dist/memory-store-shared-DqpWJXZZ.js +158 -0
- package/dist/memory-store-write-validation-B_hDG2zf.js +243 -0
- package/dist/memory-telemetry-incidents-BWA9kcZx.js +8 -0
- package/dist/memory-telemetry-metadata-CA7W8tK6.js +77 -0
- package/dist/memory-telemetry-outbox-ddTdImt7.d.ts +74 -0
- package/dist/memory-telemetry-receipts-MAJecvXQ.d.ts +34 -0
- package/dist/memory-telemetry-receipts-YsxbwOAf.js +91 -0
- package/dist/memory-telemetry-types-CufVmrCs.d.ts +14 -0
- package/dist/memory-temporality-classifier-BUjXG5o7.js +184 -0
- package/dist/memory-temporality-classifier-Brht5jyK.d.ts +43 -0
- package/dist/memory-tier-promoter-CqGxCkue.d.ts +43 -0
- package/dist/memory-tool-dependencies-CatGzI9R.d.ts +14 -0
- package/dist/memory-tool-dependencies-DjUoelnm.js +19 -0
- package/dist/model-call-table-CspopkBg.js +563 -0
- package/dist/model-reply-text-CKopStP2.js +334 -0
- package/dist/observable-embedder-CNNe9gkg.d.ts +17 -0
- package/dist/observable-llm-client-CRuKlefQ.d.ts +21 -0
- package/dist/observable-memory-store-CnGDpOY5.d.ts +73 -0
- package/dist/observable-retriever-Cooc62Qw.d.ts +23 -0
- package/dist/operation-cancellation-CTKWwNHk.js +81 -0
- package/dist/paths-qVF-5uBq.d.ts +1 -0
- package/dist/plugin-config-schema-C0UUbOmG.d.ts +413 -0
- package/dist/plugin-config-schema-YJLyIIcJ.js +361 -0
- package/dist/profile-TWPJ_myr.d.ts +13 -0
- package/dist/profile-section-writer-BhGKPBjw.js +2149 -0
- package/dist/provider-registration-CF1tg8Xy.js +721 -0
- package/dist/provider-runtime-types-DFhtdA6d.d.ts +134 -0
- package/dist/provider-types-CZGm6v88.d.ts +23 -0
- package/dist/redact-BTIZcHQL.d.ts +5 -0
- package/dist/reflection-command-hooks-ClUl-iv6.js +644 -0
- package/dist/reflection-command-hooks-G1-dI2Av.d.ts +32 -0
- package/dist/reflection-deps-Ccm2Jf5W.d.ts +19 -0
- package/dist/reflection-embedded-generator-BRvqV5N-.js +130 -0
- package/dist/reflection-embedded-generator-kfQfKEYV.d.ts +14 -0
- package/dist/reflection-injection-hooks-CS_uhjoD.d.ts +43 -0
- package/dist/reflection-lifecycle-hooks-CRSpUdLi.d.ts +27 -0
- package/dist/relation-dictionary-Cev1kyLe.js +4248 -0
- package/dist/release-download.d.ts +8 -0
- package/dist/release-download.js +32 -0
- package/dist/relevant-memories-context-m8nuFZcM.js +23 -0
- package/dist/rem-batch-executor-Dg2HgROM.js +2 -0
- package/dist/rem-batch-executor-DuC4nYyf.js +31640 -0
- package/dist/rem-consumer-retrieval-CR0dtcHR.js +246 -0
- package/dist/rem-trigger-Hn6od8IV.js +730 -0
- package/dist/resolver-Dy-hnjCR.js +103 -0
- package/dist/results-C3ZLroMb.js +140 -0
- package/dist/retrieval-gate-Bx2Zg7jD.d.ts +31 -0
- package/dist/retriever-Dxss5fRv.d.ts +469 -0
- package/dist/retriever-ZoLvPRHq.js +1757 -0
- package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/routes-DLHT__Ay.js +60 -0
- package/dist/runtime-audit-log-BCeujlEp.js +430 -0
- package/dist/runtime-audit-log-zpQiR9HT.d.ts +149 -0
- package/dist/scopes-CSOn6zdd.js +71 -0
- package/dist/scopes-CtrY-YQ3.d.ts +23 -0
- package/dist/server-CSvxchqg.js +1412 -0
- package/dist/session-registry-DBoE7AvZ.d.ts +14 -0
- package/dist/sidecar/main.d.ts +1 -0
- package/dist/sidecar/main.js +56 -0
- package/dist/signed-registry-constants-Bv0fgZ8Q.d.ts +12 -0
- package/dist/signed-registry-constants-yq3DlG3B.js +82 -0
- package/dist/sno-station-mem-runtime-dependencies-CoWqUMbK.js +30 -0
- package/dist/sno-station-mem-runtime-dependencies-DHESIuPn.d.ts +31 -0
- package/dist/sqlite-runtime-L_ywirTm.d.ts +58 -0
- package/dist/store-C8sUTssE.d.ts +27 -0
- package/dist/store-nPql26YM.js +5830 -0
- package/dist/strategy-hook-runner-Bxy851Xx.d.ts +16 -0
- package/dist/strategy-hook-runner-Djify5Rw.js +110 -0
- package/dist/token-counter-BD1f48Km.js +73 -0
- package/dist/trace-C1JxMfs-.d.ts +86 -0
- package/dist/types-CWdhXLxr.d.ts +477 -0
- package/dist/types-pVomjzqR.d.ts +132 -0
- package/dist/unplaced-candidate-migration-CbQHzcEM.js +940 -0
- package/dist/utils-Ctb9aevJ.d.ts +34 -0
- package/drizzle/0000_initial.sql +10 -0
- package/drizzle/0001_virtual_tables.sql +34 -0
- package/drizzle/0002_add_indexes.sql +11 -0
- package/drizzle/0003_content_hash_lookup_index.sql +2 -0
- package/drizzle/0004_chunk_swap.sql +60 -0
- package/drizzle/0005_drop_legacy_vec_fts.sql +10 -0
- package/drizzle/0006_fts_simple.sql +45 -0
- package/drizzle/0007_restore_simple_fts.sql +40 -0
- package/drizzle/0008_widen_memory_hash_unique_index.sql +4 -0
- package/drizzle/0009_memory_telemetry.sql +109 -0
- package/drizzle/0010_provider_mappings.sql +27 -0
- package/drizzle/0011_db_optimization.sql +82 -0
- package/drizzle/0012_b_profile_lanes.sql +9 -0
- package/drizzle/0013_extraction_timestamps.sql +6 -0
- package/drizzle/0014_extraction_timestamp_source.sql +3 -0
- package/drizzle/0015_task_lifecycle_state.sql +101 -0
- package/drizzle/0016_task_lifecycle_legacy_migration.sql +144 -0
- package/drizzle/0017_unplaced_candidates.sql +15 -0
- package/drizzle/0018_rem_batch_chassis.sql +71 -0
- package/drizzle/0019_profile_recovery_entries.sql +17 -0
- package/drizzle/0020_rem_scan_retry_progress.down.sql +14 -0
- package/drizzle/0020_rem_scan_retry_progress.sql +24 -0
- package/drizzle/0021_rem_two_facet_storage.down.sql +14 -0
- package/drizzle/0021_rem_two_facet_storage.sql +42 -0
- package/drizzle/0022_rem_facet_chunk_versions.down.sql +4 -0
- package/drizzle/0022_rem_facet_chunk_versions.sql +4 -0
- package/drizzle/0023_rem_defect_ledger.sql +40 -0
- package/drizzle/0024_rem_unbuilt_foundations.down.sql +13 -0
- package/drizzle/0024_rem_unbuilt_foundations.sql +65 -0
- package/drizzle/0025_rem_journal_operation_constraint.sql +28 -0
- package/drizzle/0026_rem_journal_detail.sql +1 -0
- package/drizzle/0027_legacy_nodix_namespace.sql +3 -0
- package/drizzle/0028_memory_timezone.sql +23 -0
- package/drizzle/0029_rem_write_hash_symmetry.sql +17 -0
- package/drizzle/0030_atomic_memory_additive.sql +105 -0
- package/drizzle/0031_atomic_extraction_ledger.sql +23 -0
- package/drizzle/0032_atomic_memory_entities.sql +12 -0
- package/drizzle/0033_todo_own_store.sql +99 -0
- package/drizzle/meta/0000_snapshot.json +87 -0
- package/drizzle/meta/_journal.json +244 -0
- package/generated/rem-operations.json +1 -0
- package/package.json +126 -4
- package/scripts/download-simple-tokenizer.mjs +254 -0
- package/settings.default.json +243 -0
- package/skills/extract-atomic-memory/SKILL.md +298 -0
- package/skills/extract-atomic-memory/references/account-for-turns.md +9 -0
- package/skills/extract-atomic-memory/references/calendar-meaning.md +64 -0
- package/skills/extract-atomic-memory/references/capture.md +120 -0
- package/skills/extract-atomic-memory/references/enrichment.md +92 -0
- package/skills/extract-atomic-memory/references/missing-durable-half.md +6 -0
- package/skills/extract-atomic-memory/references/progress-classification.md +21 -0
- package/skills/extract-atomic-memory/references/resolve-subject.md +19 -0
- package/skills/extract-atomic-memory/references/surrounding-context.md +10 -0
- package/skills/extract-atomic-memory/references/user-subject-guard.md +29 -0
- package/skills/judge-group-closure/SKILL.md +25 -0
- package/skills/judge-rem-memory-updates/SKILL.md +56 -0
- package/skills/judge-rem-memory-updates/agents/openai.yaml +4 -0
- package/skills/judge-retired-position/SKILL.md +25 -0
- package/skills/judge-task-lifecycle/SKILL.md +45 -0
- package/skills/key-state-attribute/SKILL.md +16 -0
- package/skills/resolve-entity-identity/SKILL.md +24 -0
- package/skills/resolve-relative-time/SKILL.md +22 -0
- package/sqlite-extensions/LICENSE-simple-tokenizer +28 -0
- package/sqlite-extensions/LICENSE-sqlite-vec +21 -0
- package/sqlite-extensions/linux-arm64/vec0.so +0 -0
- package/sqlite-extensions/linux-x64/vec0.so +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import "./internal/config/index.js";
|
|
2
|
+
import { Ct as PERSISTED_CONTENT_HASH_V3, St as PERSISTED_CONTENT_HASH_V1 } from "./signed-registry-constants-yq3DlG3B.js";
|
|
3
|
+
import { StorageError } from "./internal/engine/shared/errors.js";
|
|
4
|
+
import "./internal/engine/shared/utils.js";
|
|
5
|
+
import "./connection-C9YD5sgm.js";
|
|
6
|
+
import { CHUNKING_VERSION, aggregateChunksToMemories, buildChunkId, buildDensePayload, chunk as chunk$1, expandSnippetWindow, extractMetadataHeader, headExtract, shouldDropSummary } from "@snoai/chunking";
|
|
7
|
+
import { createLogger } from "@snoai/utils/logger";
|
|
8
|
+
import { randomUUID as randomUUID$1 } from "node:crypto";
|
|
9
|
+
import { Mutex as Mutex$1 } from "async-mutex";
|
|
10
|
+
//#region src/engine/shared/ambient-capture-hash.ts
|
|
11
|
+
function normalizeAmbientCaptureHashMetadata(metadata) {
|
|
12
|
+
return {
|
|
13
|
+
source: metadata.source,
|
|
14
|
+
role: metadata.role,
|
|
15
|
+
...metadata.session_key ? { session_key: metadata.session_key } : {},
|
|
16
|
+
...metadata.session_id ? { session_id: metadata.session_id } : {},
|
|
17
|
+
chunk_index: metadata.chunk_index,
|
|
18
|
+
chunk_count: metadata.chunk_count,
|
|
19
|
+
chunking_version: metadata.chunking_version,
|
|
20
|
+
content_type: metadata.content_type
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function buildAmbientCaptureHashInput(text, metadata) {
|
|
24
|
+
return JSON.stringify([
|
|
25
|
+
"sno-station-mem:ambient-chunk:v1",
|
|
26
|
+
text,
|
|
27
|
+
normalizeAmbientCaptureHashMetadata(metadata)
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
function readAmbientCaptureHashMetadata(metadata) {
|
|
31
|
+
if (metadata.source !== "agent_end") return void 0;
|
|
32
|
+
if (metadata.role !== "user" && metadata.role !== "assistant") return void 0;
|
|
33
|
+
if (typeof metadata.chunk_index !== "number") return void 0;
|
|
34
|
+
if (typeof metadata.chunk_count !== "number") return void 0;
|
|
35
|
+
if (typeof metadata.chunking_version !== "string") return void 0;
|
|
36
|
+
if (metadata.content_type !== "conversation" && metadata.content_type !== "prose" && metadata.content_type !== "structured") return;
|
|
37
|
+
return {
|
|
38
|
+
source: metadata.source,
|
|
39
|
+
role: metadata.role,
|
|
40
|
+
...typeof metadata.session_key === "string" ? { session_key: metadata.session_key } : {},
|
|
41
|
+
...typeof metadata.session_id === "string" ? { session_id: metadata.session_id } : {},
|
|
42
|
+
chunk_index: metadata.chunk_index,
|
|
43
|
+
chunk_count: metadata.chunk_count,
|
|
44
|
+
chunking_version: metadata.chunking_version,
|
|
45
|
+
content_type: metadata.content_type
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
//#region src/store/memory-store-shared.ts
|
|
50
|
+
/** @file memory-store-shared.ts
|
|
51
|
+
* @purpose Implements memory persistence, search, updates, deletion, and statistics.
|
|
52
|
+
* @boundary SQLite schema, embedding vectors, FTS, and metadata invariants.
|
|
53
|
+
* @see connection.ts, schema.ts, retriever.ts.
|
|
54
|
+
*/
|
|
55
|
+
const log = createLogger("sno-station-mem:store");
|
|
56
|
+
/**
|
|
57
|
+
* Reflection v3: discriminator added to content-hash input when the
|
|
58
|
+
* row carries a `metadata.mappedKind`. Two rows with same projectId + same store
|
|
59
|
+
* category + same text but distinct mappedKinds (e.g. user-model vs
|
|
60
|
+
* agent-model both → category=preference) must coexist as distinct rows. The
|
|
61
|
+
* SQL UNIQUE index `(projectId, content_hash, category)` cannot key on metadata
|
|
62
|
+
* JSON; mixing mappedKind into the hash input solves it without a schema
|
|
63
|
+
* change. Non-reflection callers pass undefined/missing mappedKind, get the
|
|
64
|
+
* legacy text-only hash.
|
|
65
|
+
*/
|
|
66
|
+
function hashInputForEntry(text, metadata) {
|
|
67
|
+
if (!metadata) return text;
|
|
68
|
+
let parsed;
|
|
69
|
+
try {
|
|
70
|
+
parsed = JSON.parse(metadata);
|
|
71
|
+
} catch {
|
|
72
|
+
return text;
|
|
73
|
+
}
|
|
74
|
+
const ambientCaptureMetadata = readAmbientCaptureHashMetadata(parsed);
|
|
75
|
+
if (ambientCaptureMetadata) return buildAmbientCaptureHashInput(text, ambientCaptureMetadata);
|
|
76
|
+
const mergeLineage = Array.isArray(parsed.merge_lineage) ? parsed.merge_lineage.filter((item) => typeof item === "string") : [];
|
|
77
|
+
if (mergeLineage.length > 0) return JSON.stringify([
|
|
78
|
+
PERSISTED_CONTENT_HASH_V1,
|
|
79
|
+
text,
|
|
80
|
+
{ merge_lineage: mergeLineage }
|
|
81
|
+
]);
|
|
82
|
+
const contentIdentityKey = parsed.content_identity_key;
|
|
83
|
+
if (typeof contentIdentityKey === "string" && contentIdentityKey.length > 0) return JSON.stringify([
|
|
84
|
+
PERSISTED_CONTENT_HASH_V3,
|
|
85
|
+
text,
|
|
86
|
+
{ content_identity_key: contentIdentityKey }
|
|
87
|
+
]);
|
|
88
|
+
const mappedKind = parsed.mappedKind;
|
|
89
|
+
if (typeof mappedKind !== "string" || mappedKind.length === 0) return text;
|
|
90
|
+
return JSON.stringify([
|
|
91
|
+
PERSISTED_CONTENT_HASH_V1,
|
|
92
|
+
text,
|
|
93
|
+
mappedKind
|
|
94
|
+
]);
|
|
95
|
+
}
|
|
96
|
+
function valuesDiffer(left, right) {
|
|
97
|
+
return JSON.stringify(left) !== JSON.stringify(right);
|
|
98
|
+
}
|
|
99
|
+
function metadataRecord(metadata) {
|
|
100
|
+
const record = {};
|
|
101
|
+
for (const key of Object.keys(metadata)) record[key] = Reflect.get(metadata, key);
|
|
102
|
+
return record;
|
|
103
|
+
}
|
|
104
|
+
function readNonEmptyString(metadata, key) {
|
|
105
|
+
const value = Reflect.get(metadata, key);
|
|
106
|
+
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
107
|
+
}
|
|
108
|
+
function readMergeLineage(metadata) {
|
|
109
|
+
const value = Reflect.get(metadata, "merge_lineage");
|
|
110
|
+
if (!Array.isArray(value)) return void 0;
|
|
111
|
+
const lineage = value.filter((item) => typeof item === "string");
|
|
112
|
+
return lineage.length > 0 ? lineage : void 0;
|
|
113
|
+
}
|
|
114
|
+
function projectHashSignificantMetadata(metadata) {
|
|
115
|
+
const record = metadataRecord(metadata);
|
|
116
|
+
return {
|
|
117
|
+
idempotency_key: readNonEmptyString(record, "idempotency_key"),
|
|
118
|
+
content_identity_key: readNonEmptyString(record, "content_identity_key"),
|
|
119
|
+
ambient_capture: readAmbientCaptureHashMetadata(record),
|
|
120
|
+
merge_lineage: readMergeLineage(record),
|
|
121
|
+
mappedKind: readNonEmptyString(record, "mappedKind")
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function changedHashSignificantMetadataKeys(current, next) {
|
|
125
|
+
const currentProjection = projectHashSignificantMetadata(current);
|
|
126
|
+
const nextProjection = projectHashSignificantMetadata(next);
|
|
127
|
+
const changed = [];
|
|
128
|
+
if (valuesDiffer(currentProjection.idempotency_key, nextProjection.idempotency_key)) changed.push("idempotency_key");
|
|
129
|
+
if (valuesDiffer(currentProjection.content_identity_key, nextProjection.content_identity_key)) changed.push("content_identity_key");
|
|
130
|
+
if (valuesDiffer(currentProjection.ambient_capture, nextProjection.ambient_capture)) changed.push("ambient_capture");
|
|
131
|
+
if (valuesDiffer(currentProjection.merge_lineage, nextProjection.merge_lineage)) changed.push("merge_lineage");
|
|
132
|
+
if (valuesDiffer(currentProjection.mappedKind, nextProjection.mappedKind)) changed.push("mappedKind");
|
|
133
|
+
return changed;
|
|
134
|
+
}
|
|
135
|
+
function assertMetadataOnlyUpdatePreservesHashInput(operation, current, next) {
|
|
136
|
+
const changedKeys = changedHashSignificantMetadataKeys(current, next);
|
|
137
|
+
if (changedKeys.length === 0) return;
|
|
138
|
+
throw new StorageError(`${operation} cannot change hash-significant metadata through metadata-only update: ${changedKeys.join(", ")}`);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Batch bound for `IN (SELECT value FROM json_each(?))` id lists. json_each removes
|
|
142
|
+
* the 999-placeholder ceiling and keeps SQL strings stable for the per-connection
|
|
143
|
+
* statement cache; the slice is a defensive bound on single-statement argument size.
|
|
144
|
+
*/
|
|
145
|
+
const JSON_ID_BATCH_SIZE = 5e3;
|
|
146
|
+
const CHUNK_BACKFILL_RETRY_BASE_MS = 3e4;
|
|
147
|
+
const CHUNK_BACKFILL_FAILURE_RESET_MS = CHUNK_BACKFILL_RETRY_BASE_MS * 10;
|
|
148
|
+
function withStoreWriteOutcome(entry, outcome) {
|
|
149
|
+
Object.defineProperty(entry, "storeWriteOutcome", {
|
|
150
|
+
value: outcome,
|
|
151
|
+
enumerable: false,
|
|
152
|
+
configurable: false,
|
|
153
|
+
writable: false
|
|
154
|
+
});
|
|
155
|
+
return entry;
|
|
156
|
+
}
|
|
157
|
+
//#endregion
|
|
158
|
+
export { shouldDropSummary as _, Mutex$1 as a, buildChunkId as c, expandSnippetWindow as d, extractMetadataHeader as f, randomUUID$1 as g, log as h, JSON_ID_BATCH_SIZE as i, buildDensePayload as l, headExtract as m, CHUNK_BACKFILL_FAILURE_RESET_MS as n, aggregateChunksToMemories as o, hashInputForEntry as p, CHUNK_BACKFILL_RETRY_BASE_MS as r, assertMetadataOnlyUpdatePreservesHashInput as s, CHUNKING_VERSION as t, chunk$1 as u, withStoreWriteOutcome as v };
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import "./internal/config/index.js";
|
|
2
|
+
import { MEMORY_CATEGORIES, normalizeCategory } from "./internal/engine/shared/types.js";
|
|
3
|
+
import { StorageError } from "./internal/engine/shared/errors.js";
|
|
4
|
+
import { a as buildInsightMetadata, c as stringifyInsightMetadata, s as parseInsightMetadata } from "./memory-metadata-codec-DL1sbJiN.js";
|
|
5
|
+
import { c as b_profile_section_registry_default, i as getActiveSectionRegistry } from "./b-profile-section-dictionary-provider-BHkoNqgk.js";
|
|
6
|
+
import { canToolWrite, canTrustedWrite } from "./internal/engine/shared/memory-kind-policy.js";
|
|
7
|
+
import { countTokens } from "@snoai/chunking";
|
|
8
|
+
import { createLogger } from "@snoai/utils/logger";
|
|
9
|
+
import { Temporal } from "@js-temporal/polyfill";
|
|
10
|
+
b_profile_section_registry_default.active_task_shape.projection_max_items;
|
|
11
|
+
/**
|
|
12
|
+
* The live task-shape bounds. Read per call, from the same activated registry
|
|
13
|
+
* the section gate, matcher, and re-key already use, so a restored dictionary
|
|
14
|
+
* cannot leave this module rendering to a stale bound while the rest of
|
|
15
|
+
* extraction honours a newer one.
|
|
16
|
+
*/
|
|
17
|
+
function activeTaskShape() {
|
|
18
|
+
const shape = getActiveSectionRegistry().active_task_shape;
|
|
19
|
+
return {
|
|
20
|
+
maxItems: shape.projection_max_items,
|
|
21
|
+
titleMaxTokens: shape.projection_title_max_tokens
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Longest prefix of `text` costing at most `maxTokens`. Bounding the briefing
|
|
26
|
+
* line by token cost rather than character count keeps the budget honest across
|
|
27
|
+
* scripts: `countTokens` charges CJK roughly 2.5x what it charges Latin, so a
|
|
28
|
+
* character bound would silently buy far more prompt for one script than the
|
|
29
|
+
* other.
|
|
30
|
+
*
|
|
31
|
+
* Binary search is safe because `countTokens` never decreases as the substring
|
|
32
|
+
* is extended, and searching over code points rather than UTF-16 units means a
|
|
33
|
+
* cut can never split a surrogate pair.
|
|
34
|
+
*
|
|
35
|
+
* The result is right-trimmed, and that is load-bearing rather than cosmetic: a
|
|
36
|
+
* prefix ending in whitespace renders a projection line with a trailing space,
|
|
37
|
+
* the metadata codec trims `l2_content`, and the write validator's exact-text
|
|
38
|
+
* check then fails and throws away the entire lifecycle write. Trimming can only
|
|
39
|
+
* lower the token count, so the budget still holds.
|
|
40
|
+
*/
|
|
41
|
+
function boundActiveTaskTitle(text, maxTokens) {
|
|
42
|
+
if (countTokens(text) <= maxTokens) return text;
|
|
43
|
+
const codePoints = Array.from(text);
|
|
44
|
+
let low = 0;
|
|
45
|
+
let high = codePoints.length;
|
|
46
|
+
while (low < high) {
|
|
47
|
+
const mid = Math.ceil((low + high) / 2);
|
|
48
|
+
if (countTokens(codePoints.slice(0, mid).join("")) <= maxTokens) low = mid;
|
|
49
|
+
else high = mid - 1;
|
|
50
|
+
}
|
|
51
|
+
return codePoints.slice(0, low).join("").trimEnd();
|
|
52
|
+
}
|
|
53
|
+
function buildActiveTaskProjection(tasks) {
|
|
54
|
+
const { maxItems, titleMaxTokens } = activeTaskShape();
|
|
55
|
+
const selected = tasks.filter((task) => task.status === "active").toSorted((left, right) => left.createdAt - right.createdAt || left.id.localeCompare(right.id)).slice(0, maxItems);
|
|
56
|
+
const taskIds = selected.map((task) => task.id);
|
|
57
|
+
const titles = selected.map((task) => {
|
|
58
|
+
return boundActiveTaskTitle(task.description.replace(/\s+/gu, " ").trim(), titleMaxTokens);
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
taskIds,
|
|
62
|
+
titles,
|
|
63
|
+
text: titles.length === 0 ? "Active tasks: none" : `Active tasks:\n${titles.map((title) => `- ${title}`).join("\n")}`
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/engine/extraction/b-profile-section-canonicalizer.ts
|
|
68
|
+
/** @file b-profile-section-canonicalizer.ts
|
|
69
|
+
* @purpose Canonicalizes the written form of open B-profile section keys.
|
|
70
|
+
* @boundary Pure deterministic transform; no registry lookup, I/O, or rejection.
|
|
71
|
+
*/
|
|
72
|
+
const DOMAIN_ALIASES = /* @__PURE__ */ new Map([
|
|
73
|
+
["interests", "preferences"],
|
|
74
|
+
["goals", "preferences"],
|
|
75
|
+
["work", "preferences"]
|
|
76
|
+
]);
|
|
77
|
+
const GENERAL_SECTION = "preferences.general";
|
|
78
|
+
function canonicalizeProfileSectionName(sectionName) {
|
|
79
|
+
const normalized = normalizeProfileSectionForm(sectionName);
|
|
80
|
+
if (!normalized) return GENERAL_SECTION;
|
|
81
|
+
if (normalized.split(".").some((segment) => !segment)) return GENERAL_SECTION;
|
|
82
|
+
const separator = normalized.indexOf(".");
|
|
83
|
+
if (separator < 0) return normalized;
|
|
84
|
+
const domain = normalized.slice(0, separator);
|
|
85
|
+
const topic = normalized.slice(separator + 1);
|
|
86
|
+
const canonicalDomain = DOMAIN_ALIASES.get(domain) ?? domain;
|
|
87
|
+
return topic ? `${canonicalDomain}.${topic}` : canonicalDomain;
|
|
88
|
+
}
|
|
89
|
+
function normalizeProfileSectionForm(sectionName) {
|
|
90
|
+
return sectionName.normalize("NFKC").trim().toLowerCase().replace(/[-_\s]+/g, "_").replace(/^_+|_+$/g, "").replace(/_*\._*/g, ".");
|
|
91
|
+
}
|
|
92
|
+
//#endregion
|
|
93
|
+
//#region src/store/memory-store-write-validation.ts
|
|
94
|
+
/** @file memory-store-write-validation.ts
|
|
95
|
+
* @purpose Validates and normalizes memory-kind metadata before direct store writes.
|
|
96
|
+
* @boundary Storage write chokepoint only; extraction owns metadata semantics.
|
|
97
|
+
*/
|
|
98
|
+
const log = createLogger("sno-station-mem:active-task-shape-alarm");
|
|
99
|
+
function validateAtomicCardWrite(input) {
|
|
100
|
+
if (input.category !== "state") return;
|
|
101
|
+
if (input.subject === null || !input.subject.startsWith("entity:") || input.subject.length === 7) throw new StorageError("state memory requires a non-empty entity subject");
|
|
102
|
+
if (Object.hasOwn(input.metadata ?? {}, "event_at")) throw new StorageError("state memory must not carry event_at");
|
|
103
|
+
}
|
|
104
|
+
function isFixedOffset(value) {
|
|
105
|
+
if (value.length !== 6 || value[0] !== "+" && value[0] !== "-" || value[3] !== ":") return false;
|
|
106
|
+
for (const index of [
|
|
107
|
+
1,
|
|
108
|
+
2,
|
|
109
|
+
4,
|
|
110
|
+
5
|
|
111
|
+
]) {
|
|
112
|
+
const code = value.charCodeAt(index);
|
|
113
|
+
if (code < 48 || code > 57) return false;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
Temporal.PlainDateTime.from("2000-01-01T00:00").toZonedDateTime(value);
|
|
117
|
+
return true;
|
|
118
|
+
} catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function isIanaTimezone(value) {
|
|
123
|
+
try {
|
|
124
|
+
new Intl.DateTimeFormat("en-US", { timeZone: value });
|
|
125
|
+
return true;
|
|
126
|
+
} catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function hostTimezone() {
|
|
131
|
+
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
132
|
+
}
|
|
133
|
+
function validateMemoryTimezone(value, operation) {
|
|
134
|
+
const timezone = value ?? hostTimezone();
|
|
135
|
+
if (timezone === "user" || isFixedOffset(timezone) || isIanaTimezone(timezone)) return timezone;
|
|
136
|
+
throw new StorageError(`${operation}: invalid memory timezone`);
|
|
137
|
+
}
|
|
138
|
+
function formatCause(error) {
|
|
139
|
+
return error instanceof Error ? error.message : String(error);
|
|
140
|
+
}
|
|
141
|
+
function shapeAlarm(operation, reason) {
|
|
142
|
+
log.error("Active task shape validation failed", {
|
|
143
|
+
operation,
|
|
144
|
+
reason_code: reason.replace(/[^a-z0-9]+/gi, "_").toLowerCase()
|
|
145
|
+
}, {
|
|
146
|
+
event_name: "sno_station_mem.memory-store-write-validation.active.task.shape.alarm",
|
|
147
|
+
file: "packages/memory/src/store/memory-store-write-validation.ts",
|
|
148
|
+
function: "shapeAlarm",
|
|
149
|
+
site_id: "memory-store-write-validation.shapeAlarm.3383666e9c"
|
|
150
|
+
});
|
|
151
|
+
throw new Error(`active-task shape alarm: ${reason}`);
|
|
152
|
+
}
|
|
153
|
+
function assertActiveTaskShape(metadata, input, operation) {
|
|
154
|
+
if (metadata.kind !== "profile" || metadata.section_name !== "active_tasks" || (input.lane ?? "active") !== "active") return;
|
|
155
|
+
if (metadata.active_task_kind === "projection") {
|
|
156
|
+
const { maxItems, titleMaxTokens } = activeTaskShape();
|
|
157
|
+
const ids = metadata.active_task_ids;
|
|
158
|
+
const titles = metadata.active_task_titles;
|
|
159
|
+
if (!Array.isArray(ids) || !Array.isArray(titles) || ids.length !== titles.length) shapeAlarm(operation, "projection ids and titles must be parallel arrays");
|
|
160
|
+
if (ids.length > maxItems) shapeAlarm(operation, "projection exceeds the item limit");
|
|
161
|
+
if (new Set(ids).size !== ids.length) shapeAlarm(operation, "projection contains duplicate task ids");
|
|
162
|
+
if (titles.some((title) => typeof title !== "string" || countTokens(title) > titleMaxTokens)) shapeAlarm(operation, "projection title exceeds the token limit");
|
|
163
|
+
const expectedText = titles.length === 0 ? "Active tasks: none" : `Active tasks:\n${titles.map((title) => `- ${title}`).join("\n")}`;
|
|
164
|
+
if (input.text !== expectedText || metadata.l2_content !== expectedText) shapeAlarm(operation, "projection text must exactly match its titles");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (metadata.active_task_kind !== "task") shapeAlarm(operation, "active-task domain rows must be a task or projection");
|
|
168
|
+
if (typeof metadata.active_task_id !== "string" || metadata.fact_key !== `profile:active_tasks:${metadata.active_task_id}` || metadata.active_task_origin === void 0 || metadata.active_task_status === void 0 || typeof metadata.active_task_created_at !== "number" || typeof metadata.active_task_transitioned_at !== "number" || !Array.isArray(metadata.active_task_lifecycle) || typeof metadata.l2_content !== "string" || metadata.l2_content.trim().length === 0) shapeAlarm(operation, "task row is missing required identity or lifecycle metadata");
|
|
169
|
+
const lifecycle = metadata.active_task_lifecycle;
|
|
170
|
+
const first = lifecycle[0];
|
|
171
|
+
const last = lifecycle[lifecycle.length - 1];
|
|
172
|
+
if (lifecycle.length < 1 || lifecycle.length > 2 || first?.from !== null || first.to !== "active" || first.at !== metadata.active_task_created_at || last?.to !== metadata.active_task_status || last.at !== metadata.active_task_transitioned_at) shapeAlarm(operation, "task lifecycle timestamps or endpoints are inconsistent");
|
|
173
|
+
if (lifecycle.length === 2 && (lifecycle[1]?.from !== "active" || lifecycle[1].to !== "completed" && lifecycle[1].to !== "removed")) shapeAlarm(operation, "task lifecycle transition is not allowed");
|
|
174
|
+
if (metadata.active_tasks !== void 0) shapeAlarm(operation, "task rows cannot carry an omnibus active_tasks array");
|
|
175
|
+
}
|
|
176
|
+
function assertLegalAxes(metadata, offlineFamily) {
|
|
177
|
+
if (metadata.state === "pending") throw new Error("state=pending is not writable");
|
|
178
|
+
if (offlineFamily) return;
|
|
179
|
+
if (!(metadata.kind === "profile" && metadata.state === "confirmed" && metadata.tier === "core" || metadata.kind === "episodic" && metadata.state === "confirmed" && (metadata.tier === "working" || metadata.tier === "peripheral"))) throw new Error(`forbidden live axes category=${metadata.kind} state=${metadata.state} tier=${metadata.tier}`);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The exact record counter, ready to use. The embedder's tokenizer loads with its model, and
|
|
183
|
+
* the OpenClaw skin registers without waiting for that load, so a write can arrive first;
|
|
184
|
+
* `warmup()` is memoized and instant once the model is up, so every write door awaits it here
|
|
185
|
+
* rather than throwing on the first capture after boot.
|
|
186
|
+
*/
|
|
187
|
+
async function recordTokenCounter(embedder) {
|
|
188
|
+
await embedder.warmup();
|
|
189
|
+
return (text) => embedder.countTokens(text);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* The record token ceiling, enforced at the store door. `countRecordTokens` is the
|
|
193
|
+
* embedder's exact count (`Embedder.countTokens`), never a character estimate: the
|
|
194
|
+
* embedder and the reranker both truncate silently past this size, so a longer record
|
|
195
|
+
* would be indexed and ranked on its head only. Refusing is the honest outcome.
|
|
196
|
+
*/
|
|
197
|
+
function assertRecordWithinTokenCeiling(text, countRecordTokens, operation) {
|
|
198
|
+
const tokens = countRecordTokens(text);
|
|
199
|
+
if (tokens > 512) throw new StorageError(`${operation}: memory text is ${tokens} tokens; DEFAULT_MAX_CONTEXT_TOKENS is 512`);
|
|
200
|
+
}
|
|
201
|
+
function validateStoreWriteMetadata(input, operation, countRecordTokens) {
|
|
202
|
+
assertRecordWithinTokenCeiling(input.text, countRecordTokens, operation);
|
|
203
|
+
if (typeof input.category !== "string") throw new StorageError(`${operation}: memory category must be a string`);
|
|
204
|
+
const category = normalizeCategory(input.category);
|
|
205
|
+
if (!category) throw new StorageError(`${operation}: memory category must be one of ${MEMORY_CATEGORIES.join(", ")}`);
|
|
206
|
+
if (input.enforceWriteAuthority) {
|
|
207
|
+
if (!(input.offlineFamily === true || input.trusted === true && canTrustedWrite(category) || input.system !== true && input.trusted !== true && canToolWrite(category))) throw new StorageError(`${operation}: write authority for memory category "${category}" requires ${category === "profile" ? "a trusted store boundary" : "an offline-family store boundary with offline-family authority"}`);
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
let metadata = input.metadata ?? void 0;
|
|
211
|
+
if (category === "profile" && metadata) try {
|
|
212
|
+
const raw = JSON.parse(metadata);
|
|
213
|
+
if (raw && typeof raw === "object" && typeof raw.section_name === "string") metadata = JSON.stringify({
|
|
214
|
+
...raw,
|
|
215
|
+
section_name: canonicalizeProfileSectionName(raw.section_name)
|
|
216
|
+
});
|
|
217
|
+
} catch {}
|
|
218
|
+
const entry = {
|
|
219
|
+
text: input.text,
|
|
220
|
+
category,
|
|
221
|
+
timestamp: input.timestamp,
|
|
222
|
+
metadata
|
|
223
|
+
};
|
|
224
|
+
const parsed = parseInsightMetadata(metadata, entry);
|
|
225
|
+
let normalized = parsed;
|
|
226
|
+
if (category === "profile") {
|
|
227
|
+
if (typeof parsed.section_name !== "string") throw new Error("profile metadata requires a string section_name");
|
|
228
|
+
normalized = buildInsightMetadata(entry, { section_name: canonicalizeProfileSectionName(parsed.section_name) });
|
|
229
|
+
}
|
|
230
|
+
if (normalized.kind !== category || normalized.memory_category !== category) throw new Error(`row/category/kind mismatch (entry=${category}, kind=${normalized.kind}, memory_category=${normalized.memory_category})`);
|
|
231
|
+
assertLegalAxes(normalized, input.offlineFamily === true);
|
|
232
|
+
assertActiveTaskShape(normalized, input, operation);
|
|
233
|
+
return {
|
|
234
|
+
category,
|
|
235
|
+
metadata: stringifyInsightMetadata(normalized),
|
|
236
|
+
timezone: validateMemoryTimezone(input.timezone, operation)
|
|
237
|
+
};
|
|
238
|
+
} catch (error) {
|
|
239
|
+
throw new StorageError(`${operation}: invalid memory metadata: ${formatCause(error)}`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
//#endregion
|
|
243
|
+
export { validateStoreWriteMetadata as a, validateAtomicCardWrite as i, hostTimezone as n, canonicalizeProfileSectionName as o, recordTokenCounter as r, buildActiveTaskProjection as s, assertRecordWithinTokenCeiling as t };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/engine/telemetry/memory-telemetry-incidents.ts
|
|
2
|
+
function recordMemoryTelemetryIncident(sqlite, input) {
|
|
3
|
+
sqlite.prepare(`INSERT INTO nodix_memory_telemetry_incidents
|
|
4
|
+
(incident_type, severity, message, payload_json, created_at_ms)
|
|
5
|
+
VALUES (?, ?, ?, ?, ?)`).run(input.incidentType, input.severity, input.message, input.payload ? JSON.stringify(input.payload) : null, input.createdAtMs ?? Date.now());
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { recordMemoryTelemetryIncident as t };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { isMemoryTelemetryEventType } from "./internal/engine/telemetry/memory-telemetry-types.js";
|
|
2
|
+
//#region src/engine/telemetry/memory-telemetry-metadata.ts
|
|
3
|
+
const RAW_CONTENT_KEYS = /* @__PURE__ */ new Set([
|
|
4
|
+
"text",
|
|
5
|
+
"content",
|
|
6
|
+
"l0_abstract",
|
|
7
|
+
"l1_overview",
|
|
8
|
+
"l2_content",
|
|
9
|
+
"chunk_text",
|
|
10
|
+
"dense_payload",
|
|
11
|
+
"summary"
|
|
12
|
+
]);
|
|
13
|
+
const METADATA_ALLOWED_KEYS = {
|
|
14
|
+
create: [
|
|
15
|
+
"operation_source",
|
|
16
|
+
"dedupe_status",
|
|
17
|
+
"content_hash",
|
|
18
|
+
"receipt_status"
|
|
19
|
+
],
|
|
20
|
+
update: [
|
|
21
|
+
"changed_keys",
|
|
22
|
+
"changed_lifecycle_keys",
|
|
23
|
+
"content_hash",
|
|
24
|
+
"receipt_hmac",
|
|
25
|
+
"key_version"
|
|
26
|
+
],
|
|
27
|
+
recall: [
|
|
28
|
+
"dense_score",
|
|
29
|
+
"bm25_score",
|
|
30
|
+
"fused_score",
|
|
31
|
+
"rerank_score",
|
|
32
|
+
"mmr_score",
|
|
33
|
+
"retrieval_rank",
|
|
34
|
+
"retrieval_score"
|
|
35
|
+
],
|
|
36
|
+
supersede: [
|
|
37
|
+
"superseded_by",
|
|
38
|
+
"supersedes",
|
|
39
|
+
"source_event_id",
|
|
40
|
+
"supersede_mode"
|
|
41
|
+
],
|
|
42
|
+
delete: ["delete_reason", "source_event_id"],
|
|
43
|
+
inject: [
|
|
44
|
+
"injection_surface",
|
|
45
|
+
"retrieval_rank",
|
|
46
|
+
"retrieval_score",
|
|
47
|
+
"source_agent_id"
|
|
48
|
+
],
|
|
49
|
+
epoch_boundary: [
|
|
50
|
+
"subtype",
|
|
51
|
+
"baseline_pre",
|
|
52
|
+
"baseline_post",
|
|
53
|
+
"scorer_version"
|
|
54
|
+
],
|
|
55
|
+
purge: [
|
|
56
|
+
"status",
|
|
57
|
+
"affected_fact_count",
|
|
58
|
+
"purged_fact_ids",
|
|
59
|
+
"failed_fact_ids",
|
|
60
|
+
"blocked_reason"
|
|
61
|
+
]
|
|
62
|
+
};
|
|
63
|
+
function validateMemoryTelemetryMetadata(eventType, metadata) {
|
|
64
|
+
if (!isMemoryTelemetryEventType(eventType)) throw new Error(`Unsupported memory telemetry event type: ${String(eventType)}`);
|
|
65
|
+
const allowedKeys = new Set(METADATA_ALLOWED_KEYS[eventType]);
|
|
66
|
+
for (const key of Object.keys(metadata)) {
|
|
67
|
+
if (RAW_CONTENT_KEYS.has(key)) throw new Error(`Memory telemetry metadata must not contain raw content key: ${key}`);
|
|
68
|
+
if (!allowedKeys.has(key)) throw new Error(`Memory telemetry metadata key '${key}' is not allowed for ${eventType}`);
|
|
69
|
+
}
|
|
70
|
+
if (eventType === "delete") {
|
|
71
|
+
const deleteReason = metadata.delete_reason;
|
|
72
|
+
if (typeof deleteReason !== "string" || deleteReason.trim().length === 0) throw new Error("delete metadata requires a non-empty delete_reason");
|
|
73
|
+
}
|
|
74
|
+
return metadata;
|
|
75
|
+
}
|
|
76
|
+
//#endregion
|
|
77
|
+
export { validateMemoryTelemetryMetadata as t };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { r as SqliteDatabaseLike } from "./sqlite-runtime-L_ywirTm.js";
|
|
2
|
+
import { a as MemoryTelemetryMetadata } from "./memory-telemetry-types-CufVmrCs.js";
|
|
3
|
+
//#region src/engine/telemetry/memory-telemetry-outbox.d.ts
|
|
4
|
+
type MemoryTelemetryUsageEventType = "recall" | "inject";
|
|
5
|
+
interface MemoryTelemetryUsageInput {
|
|
6
|
+
eventType: MemoryTelemetryUsageEventType;
|
|
7
|
+
factId: string;
|
|
8
|
+
memoryKind: string;
|
|
9
|
+
projectId: string;
|
|
10
|
+
agentId?: string;
|
|
11
|
+
sessionUuid?: string;
|
|
12
|
+
turnId?: string;
|
|
13
|
+
retrievalRank?: number;
|
|
14
|
+
retrievalScore?: number;
|
|
15
|
+
metadata: MemoryTelemetryMetadata;
|
|
16
|
+
}
|
|
17
|
+
interface MemoryTelemetryUsageSummary {
|
|
18
|
+
recall: number;
|
|
19
|
+
inject: number;
|
|
20
|
+
pendingRecall: number;
|
|
21
|
+
pendingInject: number;
|
|
22
|
+
committedRecall: number;
|
|
23
|
+
committedInject: number;
|
|
24
|
+
}
|
|
25
|
+
interface MemoryTelemetryFlushResult {
|
|
26
|
+
selected: number;
|
|
27
|
+
inserted: number;
|
|
28
|
+
deleted: number;
|
|
29
|
+
failed: number;
|
|
30
|
+
}
|
|
31
|
+
interface MemoryTelemetryUsageOutboxOptions {
|
|
32
|
+
sqlite: SqliteDatabaseLike;
|
|
33
|
+
dbPath: string;
|
|
34
|
+
agentId?: string;
|
|
35
|
+
batchSize?: number;
|
|
36
|
+
}
|
|
37
|
+
declare class MemoryTelemetryUsageOutbox {
|
|
38
|
+
private readonly sqlite;
|
|
39
|
+
private readonly dbPath;
|
|
40
|
+
private readonly agentId;
|
|
41
|
+
private readonly batchSize;
|
|
42
|
+
private readonly insertUsageStatement;
|
|
43
|
+
constructor(options: MemoryTelemetryUsageOutboxOptions);
|
|
44
|
+
acceptUsage(input: MemoryTelemetryUsageInput): void;
|
|
45
|
+
tryAcceptUsage(input: MemoryTelemetryUsageInput): boolean;
|
|
46
|
+
usageSummary(factId: string): MemoryTelemetryUsageSummary;
|
|
47
|
+
flushPending(batchSize?: number): MemoryTelemetryFlushResult;
|
|
48
|
+
/**
|
|
49
|
+
* Bounded catch-up drain: flush batches until a pass claims zero rows or the
|
|
50
|
+
* time budget is exhausted. Used by the hourly maintenance tick and shutdown so
|
|
51
|
+
* a historical backlog drains across passes without monopolizing the writer.
|
|
52
|
+
*/
|
|
53
|
+
drainPending(budgetMs?: number): MemoryTelemetryFlushResult;
|
|
54
|
+
/**
|
|
55
|
+
* Deletes quarantined rows older than the cutoff. Portable batched shape
|
|
56
|
+
* (`DELETE ... LIMIT` is a compile-option extension — never assume it).
|
|
57
|
+
*/
|
|
58
|
+
pruneQuarantined(cutoffMs: number): number;
|
|
59
|
+
flushPendingAsync(batchSize?: number): Promise<MemoryTelemetryFlushResult>;
|
|
60
|
+
private countCommitted;
|
|
61
|
+
private countPending;
|
|
62
|
+
private claimFlushRows;
|
|
63
|
+
private readFlushCandidates;
|
|
64
|
+
private claimRow;
|
|
65
|
+
/** Parses and validates a claimed row; throws PermanentUsageOutboxRowError on bad payloads. */
|
|
66
|
+
private parseValidatedPayload;
|
|
67
|
+
private insertEvent;
|
|
68
|
+
private deleteClaimedRow;
|
|
69
|
+
private markRowsFailed;
|
|
70
|
+
private quarantineClaimedRow;
|
|
71
|
+
private recordQuarantineIncident;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { MemoryTelemetryUsageSummary as a, MemoryTelemetryUsageOutboxOptions as i, MemoryTelemetryUsageInput as n, MemoryTelemetryUsageOutbox as r, MemoryTelemetryFlushResult as t };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { o as MemoryTelemetryReceiptStatus } from "./memory-telemetry-types-CufVmrCs.js";
|
|
2
|
+
//#region src/engine/telemetry/memory-telemetry-config.d.ts
|
|
3
|
+
interface MemoryTelemetryKey {
|
|
4
|
+
version: number;
|
|
5
|
+
key: string;
|
|
6
|
+
}
|
|
7
|
+
interface MemoryTelemetryKeySet {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
current: MemoryTelemetryKey | null;
|
|
10
|
+
historic: Map<number, string>;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
//#region src/engine/telemetry/memory-telemetry-receipts.d.ts
|
|
14
|
+
interface MemoryTelemetryReceiptInput {
|
|
15
|
+
factId: string;
|
|
16
|
+
contentHash: string;
|
|
17
|
+
timestampMs: number;
|
|
18
|
+
}
|
|
19
|
+
interface MemoryTelemetryReceipt extends MemoryTelemetryReceiptInput {
|
|
20
|
+
receiptHmac: string;
|
|
21
|
+
keyVersion: number;
|
|
22
|
+
}
|
|
23
|
+
interface MemoryTelemetryReceiptVerification {
|
|
24
|
+
status: MemoryTelemetryReceiptStatus;
|
|
25
|
+
contentHash: string;
|
|
26
|
+
timestampMs: number;
|
|
27
|
+
keyVersion: number;
|
|
28
|
+
}
|
|
29
|
+
interface MemoryTelemetryReceiptService {
|
|
30
|
+
sign(input: MemoryTelemetryReceiptInput): MemoryTelemetryReceipt;
|
|
31
|
+
verify(receipt: MemoryTelemetryReceipt): MemoryTelemetryReceiptVerification;
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { MemoryTelemetryKeySet as n, MemoryTelemetryReceiptService as t };
|