@snoai/memory 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +176 -0
- package/README.md +7 -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-CSc21GtV.d.ts +110 -0
- package/dist/adapter-DMEmCTKo.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-BpOUWPJM.d.ts +327 -0
- package/dist/atomic-memory-extraction-sdNf1-B1.js +3605 -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-CHz5GOPA.d.ts +53 -0
- package/dist/capture-policy-detector-DaMfy9CZ.js +357 -0
- package/dist/classifier-C96uH9OF.d.ts +272 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.js +305 -0
- package/dist/coding-skin.d.ts +51 -0
- package/dist/coding-skin.js +55 -0
- package/dist/config-tSrvLXgV.js +2577 -0
- package/dist/connection-DAbzki8K.d.ts +391 -0
- package/dist/connection-DliCOBB2.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-CYniFp8b.js +172 -0
- package/dist/data-bootstrap-CcJUwkqf.d.ts +30 -0
- package/dist/data-paths-C7sNdqvP.d.ts +22 -0
- package/dist/derived-suppression-cache-C7bGARc0.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-BsMap4It.d.ts +650 -0
- package/dist/index-DL8AVj0Z.d.ts +571 -0
- package/dist/index-DQ7VL6d3.d.ts +350 -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 +61 -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 +37 -0
- package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +105 -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-B7Xoxqou.js +1378 -0
- package/dist/llm-client-DOTSGzhe.d.ts +51 -0
- package/dist/locales-JxGmkG6t.d.ts +7 -0
- package/dist/log-site-catalog.generated-B9WYdnAM.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-LKt0u3gy.d.ts +23 -0
- package/dist/memory-metadata-codec-C3oQd47V.d.ts +68 -0
- package/dist/memory-metadata-codec-DL1sbJiN.js +577 -0
- package/dist/memory-runtime-BZtREuwW.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-3e44ND2i.d.ts +16 -0
- package/dist/memory-source-order-BtrIxaIt.js +134 -0
- package/dist/memory-store-base-XRA4S9Xl.d.ts +1095 -0
- package/dist/memory-store-shared-DeIDkhLj.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-CEdRTN5J.d.ts +43 -0
- package/dist/memory-temporality-classifier-CKiTAHXe.js +184 -0
- package/dist/memory-tier-promoter-DbTpahkP.d.ts +43 -0
- package/dist/memory-tool-dependencies-CLODycUw.js +19 -0
- package/dist/memory-tool-dependencies-N69chrQc.d.ts +14 -0
- package/dist/model-call-table-CspopkBg.js +563 -0
- package/dist/model-reply-text-CKopStP2.js +334 -0
- package/dist/observable-embedder-DQnNgf9O.d.ts +17 -0
- package/dist/observable-llm-client-uwqPADpN.d.ts +21 -0
- package/dist/observable-memory-store-BaZKbhgq.d.ts +73 -0
- package/dist/observable-retriever-Dt_NUxAA.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-hIphqpUY.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-BeQiJI9-.js +644 -0
- package/dist/reflection-command-hooks-C1Vxgb-O.d.ts +32 -0
- package/dist/reflection-deps-RpLPFrSc.d.ts +19 -0
- package/dist/reflection-embedded-generator-CDUhgV96.js +130 -0
- package/dist/reflection-embedded-generator-CxOex5xK.d.ts +14 -0
- package/dist/reflection-injection-hooks-DfUgqu8f.d.ts +43 -0
- package/dist/reflection-lifecycle-hooks-Ct5HBdSG.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-Cbm5gfSe.js +31644 -0
- package/dist/rem-batch-executor-bc0IFlp2.js +2 -0
- package/dist/rem-consumer-retrieval-CRpvG8KS.js +246 -0
- package/dist/rem-trigger-BTxkcjgT.js +729 -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-CygHBazG.js +1757 -0
- package/dist/retriever-Ruk3zp7_.d.ts +469 -0
- package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
- package/dist/routes-Ce7SQKec.js +59 -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-BPAY4NTG.js +1410 -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-Bu-MiqPX.d.ts +31 -0
- package/dist/sno-station-mem-runtime-dependencies-DjLOhB45.js +30 -0
- package/dist/sqlite-runtime-L_ywirTm.d.ts +58 -0
- package/dist/store-2pM0-dZg.d.ts +27 -0
- package/dist/store-DzpZBMEm.js +5830 -0
- package/dist/strategy-hook-runner-gBtU47tX.d.ts +16 -0
- package/dist/strategy-hook-runner-zmdIYOmQ.js +110 -0
- package/dist/token-counter-BD1f48Km.js +73 -0
- package/dist/trace-1t1n_wUm.d.ts +86 -0
- package/dist/types-DxKqU60b.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,297 @@
|
|
|
1
|
+
import { StorageError } from "./internal/engine/shared/errors.js";
|
|
2
|
+
import { a as schema_exports, i as migrateLegacyDatabaseNamespace, n as loadSqliteVecExtension, o as applyEntityNameKeyMigration, r as resolveSimpleTokenizerPath, t as migrateUnplacedCandidates } from "./unplaced-candidate-migration-CbQHzcEM.js";
|
|
3
|
+
import { SqliteFileMissingError, openSqliteDatabase } from "./internal/store/sqlite-runtime.js";
|
|
4
|
+
import { createLogger } from "@snoai/utils/logger";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
import { accessSync, constants, existsSync, lstatSync, mkdirSync, realpathSync } from "node:fs";
|
|
7
|
+
import { fileURLToPath } from "node:url";
|
|
8
|
+
import { drizzle } from "drizzle-orm/better-sqlite3";
|
|
9
|
+
import { migrate } from "drizzle-orm/better-sqlite3/migrator";
|
|
10
|
+
//#region src/store/path-validation.ts
|
|
11
|
+
/**
|
|
12
|
+
* Validate and prepare the storage directory for the SQLite database file.
|
|
13
|
+
* Resolves symlinks, creates missing directories, and checks write permissions.
|
|
14
|
+
* Returns the resolved parent directory path on success, or throws a descriptive error.
|
|
15
|
+
*/
|
|
16
|
+
function validateStoragePath(dbPath) {
|
|
17
|
+
const dirPath = dirname(dbPath);
|
|
18
|
+
let resolvedDir = dirPath;
|
|
19
|
+
try {
|
|
20
|
+
if (lstatSync(dirPath).isSymbolicLink()) try {
|
|
21
|
+
resolvedDir = realpathSync(dirPath);
|
|
22
|
+
} catch (err) {
|
|
23
|
+
const e = err;
|
|
24
|
+
throw new Error(`dbPath parent "${dirPath}" is a symlink whose target does not exist.\n Fix: Create the target directory, or update the symlink to a valid path.\n Details: ${e.code ?? ""} ${e.message}`);
|
|
25
|
+
}
|
|
26
|
+
} catch (err) {
|
|
27
|
+
const e = err;
|
|
28
|
+
if (e.code === "ENOENT") {} else if (typeof e.message === "string" && e.message.includes("symlink whose target does not exist")) throw err;
|
|
29
|
+
}
|
|
30
|
+
if (!existsSync(resolvedDir)) try {
|
|
31
|
+
mkdirSync(resolvedDir, { recursive: true });
|
|
32
|
+
} catch (err) {
|
|
33
|
+
const e = err;
|
|
34
|
+
throw new Error(`Failed to create dbPath directory "${resolvedDir}".\n Fix: Ensure the parent directory "${dirname(resolvedDir)}" exists and is writable,\n or create it manually: mkdir -p "${resolvedDir}"\n Details: ${e.code ?? ""} ${e.message}`);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
accessSync(resolvedDir, constants.W_OK);
|
|
38
|
+
} catch (err) {
|
|
39
|
+
const e = err;
|
|
40
|
+
throw new Error(`dbPath directory "${resolvedDir}" is not writable.\n Fix: Check permissions with: ls -la "${dirname(resolvedDir)}"\n Or grant write access: chmod u+w "${resolvedDir}"\n Details: ${e.code ?? ""} ${e.message}`);
|
|
41
|
+
}
|
|
42
|
+
return resolvedDir;
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/store/connection.ts
|
|
46
|
+
/** @file connection.ts
|
|
47
|
+
* @purpose Creates and validates SQLite connections used by the memory store.
|
|
48
|
+
* @boundary Filesystem safety, database pragmas, migrations, and runtime loading.
|
|
49
|
+
* @see sqlite-runtime.ts, schema.ts, store.ts.
|
|
50
|
+
*/
|
|
51
|
+
const log = createLogger("sno-station-mem:db");
|
|
52
|
+
/**
|
|
53
|
+
* Opens the Node SQLite runtime and applies SQLite connection setup fallback behavior for missing data.
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* Reads the locked embedding dimension from the existing `nodix_memory_chunk_vectors`
|
|
57
|
+
* DDL. Returns `undefined` if the DB file does not exist or the table has not
|
|
58
|
+
* been created yet; throws on a corrupt-state DDL.
|
|
59
|
+
*
|
|
60
|
+
* This lets out-of-band tooling (CLI preset switching, diagnostics) detect
|
|
61
|
+
* dim mismatches *before* the gateway boots, without paying the cost of
|
|
62
|
+
* spinning up a real `MemoryStore`. Keeping the regex here means CLI,
|
|
63
|
+
* diagnostics, and store startup agree on one canonical parser.
|
|
64
|
+
*/
|
|
65
|
+
function readChunkVecTableDimension(dbPath) {
|
|
66
|
+
if (!existsSync(dbPath)) return void 0;
|
|
67
|
+
let sqlite;
|
|
68
|
+
try {
|
|
69
|
+
sqlite = openSqliteDatabase(dbPath, {
|
|
70
|
+
readonly: true,
|
|
71
|
+
fileMustExist: true
|
|
72
|
+
});
|
|
73
|
+
} catch (error) {
|
|
74
|
+
if (error instanceof SqliteFileMissingError) return void 0;
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const row = sqlite.db.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'nodix_memory_chunk_vectors' LIMIT 1").get();
|
|
79
|
+
if (!row?.sql) return void 0;
|
|
80
|
+
return parseVecTableDimension(row.sql);
|
|
81
|
+
} finally {
|
|
82
|
+
try {
|
|
83
|
+
sqlite.db.close();
|
|
84
|
+
} catch {}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function parseVecTableDimension(sql) {
|
|
88
|
+
if (!/create\s+virtual\s+table/i.test(sql) || !/using\s+vec0/i.test(sql)) throw new StorageError(`nodix_memory_chunk_vectors exists but is not a sqlite-vec virtual table: ${sql}`);
|
|
89
|
+
const token = sql.match(/embedding\s+float\[(\d+)\]/i)?.[1];
|
|
90
|
+
if (!token) throw new StorageError(`Could not parse embedding dimension from nodix_memory_chunk_vectors DDL: ${sql}`);
|
|
91
|
+
const dim = Number.parseInt(token, 10);
|
|
92
|
+
if (!Number.isFinite(dim) || dim <= 0) throw new StorageError(`Invalid persisted vector dimension '${token}' in nodix_memory_chunk_vectors DDL`);
|
|
93
|
+
return dim;
|
|
94
|
+
}
|
|
95
|
+
/** Phase D: project_id PARTITION KEY on nodix_memory_chunk_vectors. */
|
|
96
|
+
function vecTableDdlHasPartitionKey(sql) {
|
|
97
|
+
return /partition\s+key/i.test(sql);
|
|
98
|
+
}
|
|
99
|
+
function readChunkVecTableState(db) {
|
|
100
|
+
const row = db.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'nodix_memory_chunk_vectors' LIMIT 1").get();
|
|
101
|
+
if (!row?.sql) return void 0;
|
|
102
|
+
const rawCount = db.prepare("SELECT COUNT(*) AS count FROM nodix_memory_chunk_vectors").get()?.count ?? 0;
|
|
103
|
+
const rowCount = typeof rawCount === "bigint" ? Number(rawCount) : Number(rawCount);
|
|
104
|
+
return {
|
|
105
|
+
dimension: parseVecTableDimension(row.sql),
|
|
106
|
+
rowCount: Number.isFinite(rowCount) ? rowCount : 0,
|
|
107
|
+
hasPartitionKey: vecTableDdlHasPartitionKey(row.sql)
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Creates `nodix_memory_chunk_vectors` with the configured embedding dim and the
|
|
112
|
+
* `project_id` PARTITION KEY (Phase D) if it does not already exist. Round A
|
|
113
|
+
* migration 0004 creates the table at a placeholder 1024-d. vec0 virtual
|
|
114
|
+
* tables cannot be ALTERed, so any pre-existing table that doesn't match the
|
|
115
|
+
* current shape — wrong dimension, or predates the partition key — is
|
|
116
|
+
* dropped and recreated. Nothing is shipped until npm publish (see
|
|
117
|
+
* apps/sno-station-mem/host.md), so no installed database has vectors worth
|
|
118
|
+
* migrating in place; a non-empty mismatch preserves the table and disables vector search for this open.
|
|
119
|
+
*/
|
|
120
|
+
function ensureChunkVecTable(db, vectorDim) {
|
|
121
|
+
if (!Number.isInteger(vectorDim) || vectorDim <= 0) throw new StorageError(`Invalid vectorDim ${vectorDim}; must be a positive integer`);
|
|
122
|
+
const existing = readChunkVecTableState(db);
|
|
123
|
+
if (existing && (existing.dimension !== vectorDim || !existing.hasPartitionKey)) {
|
|
124
|
+
if (existing.rowCount > 0) {
|
|
125
|
+
log.error("storage.vector.configuration.mismatch", {
|
|
126
|
+
vectorDim,
|
|
127
|
+
existing
|
|
128
|
+
}, {
|
|
129
|
+
event_name: "storage.vector.configuration.mismatch",
|
|
130
|
+
file: "packages/memory/src/store/connection.ts",
|
|
131
|
+
function: "ensureChunkVecTable",
|
|
132
|
+
site_id: "storage.vector.configuration.mismatch"
|
|
133
|
+
});
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
db.exec("DROP TABLE nodix_memory_chunk_vectors");
|
|
137
|
+
}
|
|
138
|
+
db.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS nodix_memory_chunk_vectors USING vec0(
|
|
139
|
+
id TEXT PRIMARY KEY,
|
|
140
|
+
project_id TEXT PARTITION KEY,
|
|
141
|
+
embedding float[${vectorDim}]
|
|
142
|
+
)`);
|
|
143
|
+
const verified = readChunkVecTableState(db);
|
|
144
|
+
if (!verified) throw new StorageError("nodix_memory_chunk_vectors table is missing after initialization; cannot verify vector dimension");
|
|
145
|
+
if (verified.dimension !== vectorDim) throw new StorageError(`Vector dimension mismatch between configuration (${vectorDim}) and database (${verified.dimension}); wipe or re-import vectors before switching dimensions`);
|
|
146
|
+
if (!verified.hasPartitionKey) throw new StorageError("nodix_memory_chunk_vectors is missing the project_id partition key after initialization");
|
|
147
|
+
return verified.dimension;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Per PRD `cjk-other-fix.md` §D.3.4. Loads the wangfenjin/simple SQLite
|
|
151
|
+
* tokenizer extension and registers its jieba dictionary path. Called once
|
|
152
|
+
* per connection, BEFORE migrations run, so 0006 can create the
|
|
153
|
+
* `nodix_memory_chunks_fts` virtual table with `tokenize='simple 0'`.
|
|
154
|
+
*
|
|
155
|
+
* The trailing smoke test fails fast if the extension load silently no-op'd:
|
|
156
|
+
* creating an FTS5 table with an unregistered tokenizer name surfaces the
|
|
157
|
+
* exact "no such tokenizer" error from sqlite-vec, instead of letting the
|
|
158
|
+
* gateway start and silently fall back to unicode61 on first ingest.
|
|
159
|
+
*/
|
|
160
|
+
function loadSimpleTokenizer(db) {
|
|
161
|
+
const { platform, extensionPath, dictPath } = resolveSimpleTokenizerPath();
|
|
162
|
+
db.loadExtension(extensionPath);
|
|
163
|
+
db.prepare("SELECT jieba_dict(?)").get(dictPath);
|
|
164
|
+
db.exec("CREATE VIRTUAL TABLE temp.nodix_simple_tokenizer_smoke USING fts5(x, tokenize='simple 0'); DROP TABLE temp.nodix_simple_tokenizer_smoke;");
|
|
165
|
+
log.info("simple-tokenizer loaded", {
|
|
166
|
+
platform,
|
|
167
|
+
extensionPath
|
|
168
|
+
}, {
|
|
169
|
+
event_name: "sno_station_mem.connection.simple.tokenizer.loaded",
|
|
170
|
+
file: "packages/memory/src/store/connection.ts",
|
|
171
|
+
function: "loadSimpleTokenizer",
|
|
172
|
+
site_id: "connection.loadSimpleTokenizer.778ee7da6c"
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function loadStorageExtensions(sqlite) {
|
|
176
|
+
loadSqliteVecExtension(sqlite.raw);
|
|
177
|
+
loadSimpleTokenizer(sqlite.db);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Per PRD `cjk-other-fix.md` §D.3.6. Startup invariant: the persisted DDL
|
|
181
|
+
* for `nodix_memory_chunks_fts` must declare `tokenize='simple ...'`. Catches DBs
|
|
182
|
+
* created against an older plugin build (still on `unicode61`) so a stale
|
|
183
|
+
* DB plus a fresh plugin doesn't silently degrade CJK recall to char-level.
|
|
184
|
+
*
|
|
185
|
+
* Mirrors the regex pattern used by `parseVecTableDimension` for
|
|
186
|
+
* `nodix_memory_chunk_vectors` — single SELECT against `sqlite_master`, regex match.
|
|
187
|
+
*/
|
|
188
|
+
/**
|
|
189
|
+
* Round A invariant: detect legacy DBs that pre-date migration 0004
|
|
190
|
+
* (chunk-table swap). If the parent vec/FTS objects still exist, the DB
|
|
191
|
+
* was opened against a build that never ran the new migration — fail loud
|
|
192
|
+
* so the dev wipes the file.
|
|
193
|
+
*/
|
|
194
|
+
function assertNoLegacyBoundarySchema(db) {
|
|
195
|
+
const rows = db.prepare("PRAGMA table_info(nodix_memories)").all();
|
|
196
|
+
if (rows.length === 0) return;
|
|
197
|
+
const columnNames = new Set(rows.map((row) => row.name).filter((name) => !!name));
|
|
198
|
+
const legacyBoundaryColumn = [
|
|
199
|
+
"s",
|
|
200
|
+
"c",
|
|
201
|
+
"o",
|
|
202
|
+
"p",
|
|
203
|
+
"e"
|
|
204
|
+
].join("");
|
|
205
|
+
if (columnNames.has(legacyBoundaryColumn) && !columnNames.has("project_id")) throw new StorageError("legacy boundary schema is unsupported for provider v1");
|
|
206
|
+
}
|
|
207
|
+
function ensureMemoryKindIndexes(db) {
|
|
208
|
+
db.exec("CREATE INDEX IF NOT EXISTS nodix_idx_memories_project_fact_key_active ON nodix_memories(project_id, json_extract(metadata, '$.fact_key')) WHERE json_valid(metadata) AND json_extract(metadata, '$.fact_key') IS NOT NULL AND json_extract(metadata, '$.invalidated_at') IS NULL;");
|
|
209
|
+
}
|
|
210
|
+
const CONNECTION_DIR = dirname(fileURLToPath(import.meta.url));
|
|
211
|
+
function resolveMigrationsDir() {
|
|
212
|
+
const candidates = [
|
|
213
|
+
join(CONNECTION_DIR, "../../drizzle"),
|
|
214
|
+
join(CONNECTION_DIR, "../drizzle"),
|
|
215
|
+
join(CONNECTION_DIR, "../../../drizzle")
|
|
216
|
+
];
|
|
217
|
+
for (const dir of candidates) if (existsSync(join(dir, "meta/_journal.json"))) return dir;
|
|
218
|
+
throw new Error(`drizzle migrations folder not found; checked: ${candidates.join(", ")}`);
|
|
219
|
+
}
|
|
220
|
+
const MIGRATIONS_DIR = resolveMigrationsDir();
|
|
221
|
+
/** Implements init db as the local SQLite connection setup operation. */
|
|
222
|
+
function initDb(dbPath, vectorDim) {
|
|
223
|
+
log.info("initializing database", {
|
|
224
|
+
dbPath,
|
|
225
|
+
vectorDim
|
|
226
|
+
}, {
|
|
227
|
+
event_name: "sno_station_mem.connection.initializing.database",
|
|
228
|
+
file: "packages/memory/src/store/connection.ts",
|
|
229
|
+
function: "initDb",
|
|
230
|
+
site_id: "connection.initDb.ee37a0a971"
|
|
231
|
+
});
|
|
232
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
233
|
+
const sqlite = openSqliteDatabase(dbPath);
|
|
234
|
+
const pending = /* @__PURE__ */ new Map();
|
|
235
|
+
const retrySetup = () => {
|
|
236
|
+
for (const [step, run] of pending) try {
|
|
237
|
+
run();
|
|
238
|
+
pending.delete(step);
|
|
239
|
+
} catch (error) {
|
|
240
|
+
log.error("storage.setup.failed", {
|
|
241
|
+
step,
|
|
242
|
+
error
|
|
243
|
+
}, {
|
|
244
|
+
event_name: "storage.setup.failed",
|
|
245
|
+
file: "packages/memory/src/store/connection.ts",
|
|
246
|
+
function: "retrySetup",
|
|
247
|
+
site_id: "storage.setup.failed"
|
|
248
|
+
});
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
const db = Object.assign(drizzle(sqlite.raw, { schema: schema_exports }), {
|
|
253
|
+
vectorDimension: vectorDim,
|
|
254
|
+
vectorSearchAvailable: false,
|
|
255
|
+
chokepoint: sqlite.db,
|
|
256
|
+
retrySetup
|
|
257
|
+
});
|
|
258
|
+
for (const [step, run] of [
|
|
259
|
+
["extensions", () => loadStorageExtensions(sqlite)],
|
|
260
|
+
["pragmas", () => sqlite.db.exec("PRAGMA journal_mode=WAL; PRAGMA busy_timeout=5000; PRAGMA foreign_keys=ON; PRAGMA synchronous=NORMAL; PRAGMA cache_size=-65536; PRAGMA temp_store=MEMORY; PRAGMA journal_size_limit=67108864;")],
|
|
261
|
+
["namespace", () => migrateLegacyDatabaseNamespace(sqlite.db, vectorDim)],
|
|
262
|
+
["rem-columns", () => ensureRemMigrationCompatibilityColumns(sqlite.db)],
|
|
263
|
+
["migrations", () => migrateCompat(db, { migrationsFolder: MIGRATIONS_DIR })],
|
|
264
|
+
["entity-keys", () => applyEntityNameKeyMigration(sqlite.db)],
|
|
265
|
+
["unplaced-candidates", () => migrateUnplacedCandidates(sqlite.db)],
|
|
266
|
+
["memory-indexes", () => ensureMemoryKindIndexes(sqlite.db)],
|
|
267
|
+
["vectors", () => {
|
|
268
|
+
const dimension = ensureChunkVecTable(sqlite.db, vectorDim);
|
|
269
|
+
db.vectorSearchAvailable = dimension !== void 0;
|
|
270
|
+
if (dimension !== void 0) db.vectorDimension = dimension;
|
|
271
|
+
}]
|
|
272
|
+
]) pending.set(step, run);
|
|
273
|
+
retrySetup();
|
|
274
|
+
return db;
|
|
275
|
+
}
|
|
276
|
+
/** Implements close db as the local SQLite connection setup operation. */
|
|
277
|
+
function closeDb(db) {
|
|
278
|
+
db.$client.close();
|
|
279
|
+
}
|
|
280
|
+
/** Implements migrate compat as the local SQLite connection setup operation. */
|
|
281
|
+
function migrateCompat(db, options) {
|
|
282
|
+
migrate(db, options);
|
|
283
|
+
}
|
|
284
|
+
function ensureRemMigrationCompatibilityColumns(database) {
|
|
285
|
+
ensureColumn(database, "nodix_rem_scan_pairs", "budget_invocation_id", "TEXT");
|
|
286
|
+
ensureColumn(database, "nodix_rem_scan_pairs", "attempt_count", "INTEGER NOT NULL DEFAULT 0 CHECK (attempt_count >= 0)");
|
|
287
|
+
ensureColumn(database, "nodix_rem_scan_pairs", "progress_state", "TEXT NOT NULL DEFAULT 'pending' CHECK (progress_state IN ('pending', 'refused', 'closed', 'exhausted'))");
|
|
288
|
+
ensureColumn(database, "nodix_rem_scan_pairs", "refusal_reason", "TEXT");
|
|
289
|
+
ensureColumn(database, "nodix_rem_scan_pairs", "inherited_from_generation_id", "TEXT");
|
|
290
|
+
}
|
|
291
|
+
function ensureColumn(database, tableName, columnName, declaration) {
|
|
292
|
+
if (database.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(tableName) === void 0) return;
|
|
293
|
+
if (database.prepare(`PRAGMA table_info(${tableName})`).all().some(({ name }) => name === columnName)) return;
|
|
294
|
+
database.exec(`ALTER TABLE ${tableName} ADD COLUMN ${columnName} ${declaration}`);
|
|
295
|
+
}
|
|
296
|
+
//#endregion
|
|
297
|
+
export { parseVecTableDimension as a, vecTableDdlHasPartitionKey as c, loadStorageExtensions as i, validateStoragePath as l, closeDb as n, readChunkVecTableDimension as o, initDb as r, readChunkVecTableState as s, assertNoLegacyBoundarySchema as t };
|