@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,23 @@
|
|
|
1
|
+
import { h as MemoryCategory } from "./types-CWdhXLxr.js";
|
|
2
|
+
//#region src/engine/shared/memory-kind-policy.d.ts
|
|
3
|
+
type WritePolicy = "append-only" | "mutation-native" | "derived-only";
|
|
4
|
+
type DedupePolicy = {
|
|
5
|
+
mode: "none";
|
|
6
|
+
} | {
|
|
7
|
+
mode: "signature";
|
|
8
|
+
field: "anti_pattern_signature";
|
|
9
|
+
};
|
|
10
|
+
type WriterAuthority = "extraction" | "profile-writer" | "offline-family";
|
|
11
|
+
declare function isAppendOnly(kind: MemoryCategory): boolean;
|
|
12
|
+
declare function isMutationNative(kind: MemoryCategory): boolean;
|
|
13
|
+
declare function isDerivedOnly(kind: MemoryCategory): boolean;
|
|
14
|
+
declare function writePolicy(kind: MemoryCategory): WritePolicy;
|
|
15
|
+
declare function dedupePolicy(kind: MemoryCategory): DedupePolicy;
|
|
16
|
+
declare function allowedWriters(kind: MemoryCategory): readonly WriterAuthority[];
|
|
17
|
+
declare function canExtractorWrite(kind: MemoryCategory): boolean;
|
|
18
|
+
declare function canProfileWriterWrite(kind: MemoryCategory): boolean;
|
|
19
|
+
declare function canToolWrite(kind: MemoryCategory): boolean;
|
|
20
|
+
declare function canTrustedWrite(kind: MemoryCategory): boolean;
|
|
21
|
+
declare function canOfflineFamilyWrite(kind: MemoryCategory): boolean;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { canExtractorWrite as a, canToolWrite as c, isAppendOnly as d, isDerivedOnly as f, allowedWriters as i, canTrustedWrite as l, writePolicy as m, WritePolicy as n, canOfflineFamilyWrite as o, isMutationNative as p, WriterAuthority as r, canProfileWriterWrite as s, DedupePolicy as t, dedupePolicy as u };
|
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
import { MEMORY_CATEGORIES, normalizeCategory } from "./internal/engine/shared/types.js";
|
|
2
|
+
import { normalizeIsoDateTimeString } from "./internal/engine/shared/iso-date-time.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
//#region src/engine/extraction/memory-metadata-normalizers.ts
|
|
5
|
+
function validateMemoryCategory(raw) {
|
|
6
|
+
return normalizeCategory(raw) ?? void 0;
|
|
7
|
+
}
|
|
8
|
+
function clamp01(value, fallback) {
|
|
9
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
10
|
+
if (!Number.isFinite(n)) return fallback;
|
|
11
|
+
return Math.min(1, Math.max(0, n));
|
|
12
|
+
}
|
|
13
|
+
function clampCount(value, fallback = 0) {
|
|
14
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
15
|
+
if (!Number.isFinite(n) || n < 0) return fallback;
|
|
16
|
+
return Math.floor(n);
|
|
17
|
+
}
|
|
18
|
+
function normalizeTier(value) {
|
|
19
|
+
switch (value) {
|
|
20
|
+
case "core":
|
|
21
|
+
case "working":
|
|
22
|
+
case "peripheral": return value;
|
|
23
|
+
default: return "working";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function normalizeState(value) {
|
|
27
|
+
switch (value) {
|
|
28
|
+
case "pending":
|
|
29
|
+
case "confirmed":
|
|
30
|
+
case "archived": return value;
|
|
31
|
+
default: return "confirmed";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function normalizeSource(value) {
|
|
35
|
+
switch (value) {
|
|
36
|
+
case "manual":
|
|
37
|
+
case "ambient-learning":
|
|
38
|
+
case "agent_end":
|
|
39
|
+
case "reflection":
|
|
40
|
+
case "session-summary":
|
|
41
|
+
case "legacy": return value;
|
|
42
|
+
default: return "legacy";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function normalizeLayer(value) {
|
|
46
|
+
switch (value) {
|
|
47
|
+
case "durable":
|
|
48
|
+
case "working":
|
|
49
|
+
case "reflection":
|
|
50
|
+
case "archive": return value;
|
|
51
|
+
default: return "working";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function deriveDefaultLayer(source, memoryCategory, state) {
|
|
55
|
+
if (source === "reflection" || source === "session-summary") return "reflection";
|
|
56
|
+
if (state === "archived") return "archive";
|
|
57
|
+
if (memoryCategory === "summary") return "reflection";
|
|
58
|
+
if (memoryCategory === "profile" || memoryCategory === "persona" || memoryCategory === "episodic" || memoryCategory === "lesson") return "durable";
|
|
59
|
+
return "working";
|
|
60
|
+
}
|
|
61
|
+
function defaultOverview(text) {
|
|
62
|
+
return `- ${text}`;
|
|
63
|
+
}
|
|
64
|
+
function normalizeText(value, fallback) {
|
|
65
|
+
return typeof value === "string" && value.trim() ? value.trim() : fallback;
|
|
66
|
+
}
|
|
67
|
+
function normalizeOptionalString(value) {
|
|
68
|
+
return typeof value === "string" && value.trim() ? value.trim() : void 0;
|
|
69
|
+
}
|
|
70
|
+
function normalizeTimestamp(value, fallback) {
|
|
71
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
72
|
+
if (!Number.isFinite(n) || n <= 0) return fallback;
|
|
73
|
+
return Math.floor(n);
|
|
74
|
+
}
|
|
75
|
+
function normalizeOptionalTimestamp(value) {
|
|
76
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
77
|
+
if (!Number.isFinite(n) || n <= 0) return void 0;
|
|
78
|
+
return Math.floor(n);
|
|
79
|
+
}
|
|
80
|
+
function deriveFactKey(metadata) {
|
|
81
|
+
if (metadata.kind === "profile" || metadata.kind === "persona") {
|
|
82
|
+
const sectionName = normalizeOptionalString(metadata.section_name);
|
|
83
|
+
if (metadata.kind === "profile" && sectionName === "active_tasks" && metadata.active_task_kind === "task") {
|
|
84
|
+
const taskId = normalizeOptionalString(metadata.active_task_id);
|
|
85
|
+
return taskId ? `profile:active_tasks:${taskId}` : void 0;
|
|
86
|
+
}
|
|
87
|
+
return sectionName ? `${metadata.kind}:${sectionName}` : void 0;
|
|
88
|
+
}
|
|
89
|
+
if (metadata.kind === "lesson") {
|
|
90
|
+
const signature = normalizeOptionalString(metadata.anti_pattern_signature);
|
|
91
|
+
return signature ? `lesson:${signature}` : void 0;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region src/engine/extraction/memory-metadata-types.ts
|
|
96
|
+
/** @file memory-metadata-types.ts
|
|
97
|
+
* @purpose Defines typed insight metadata contracts via Zod discriminated union.
|
|
98
|
+
* @boundary Metadata shape declarations only.
|
|
99
|
+
*/
|
|
100
|
+
const memoryCategory = z.enum(MEMORY_CATEGORIES);
|
|
101
|
+
const memoryTier = z.enum([
|
|
102
|
+
"core",
|
|
103
|
+
"working",
|
|
104
|
+
"peripheral"
|
|
105
|
+
]);
|
|
106
|
+
const memoryState = z.enum([
|
|
107
|
+
"pending",
|
|
108
|
+
"confirmed",
|
|
109
|
+
"archived"
|
|
110
|
+
]);
|
|
111
|
+
const memorySource = z.enum([
|
|
112
|
+
"manual",
|
|
113
|
+
"ambient-learning",
|
|
114
|
+
"agent_end",
|
|
115
|
+
"reflection",
|
|
116
|
+
"session-summary",
|
|
117
|
+
"legacy"
|
|
118
|
+
]);
|
|
119
|
+
const memoryLayer = z.enum([
|
|
120
|
+
"durable",
|
|
121
|
+
"working",
|
|
122
|
+
"reflection",
|
|
123
|
+
"archive"
|
|
124
|
+
]);
|
|
125
|
+
const memoryRelation = z.object({
|
|
126
|
+
type: z.string(),
|
|
127
|
+
targetId: z.string(),
|
|
128
|
+
source: z.string().optional()
|
|
129
|
+
});
|
|
130
|
+
const activeTaskStatus = z.enum([
|
|
131
|
+
"active",
|
|
132
|
+
"completed",
|
|
133
|
+
"removed"
|
|
134
|
+
]);
|
|
135
|
+
const activeTaskOrigin = z.discriminatedUnion("kind", [z.object({
|
|
136
|
+
kind: z.literal("runtime"),
|
|
137
|
+
source_id: z.string().min(1),
|
|
138
|
+
normalized_description: z.string().min(1)
|
|
139
|
+
}), z.object({
|
|
140
|
+
kind: z.literal("legacy"),
|
|
141
|
+
omnibus_row_id: z.string().min(1),
|
|
142
|
+
item_index: z.number().int().nonnegative(),
|
|
143
|
+
legacy_item_id: z.string().min(1)
|
|
144
|
+
})]);
|
|
145
|
+
const activeTaskLifecycleEvent = z.object({
|
|
146
|
+
from: activeTaskStatus.nullable(),
|
|
147
|
+
to: activeTaskStatus,
|
|
148
|
+
at: z.number(),
|
|
149
|
+
source_id: z.string().min(1)
|
|
150
|
+
});
|
|
151
|
+
const memoryMetadataBase = z.object({
|
|
152
|
+
kind: memoryCategory,
|
|
153
|
+
l0_abstract: z.string(),
|
|
154
|
+
l1_overview: z.string(),
|
|
155
|
+
l2_content: z.string(),
|
|
156
|
+
memory_category: memoryCategory,
|
|
157
|
+
tier: memoryTier,
|
|
158
|
+
access_count: z.number(),
|
|
159
|
+
confidence: z.number(),
|
|
160
|
+
last_accessed_at: z.number(),
|
|
161
|
+
asserted_at: z.number(),
|
|
162
|
+
valid_from: z.number(),
|
|
163
|
+
invalidated_at: z.number().optional(),
|
|
164
|
+
fact_key: z.string().optional(),
|
|
165
|
+
supersedes: z.string().optional(),
|
|
166
|
+
superseded_by: z.string().optional(),
|
|
167
|
+
relations: z.array(memoryRelation).optional(),
|
|
168
|
+
source_session: z.string().optional(),
|
|
169
|
+
state: memoryState,
|
|
170
|
+
source: memorySource,
|
|
171
|
+
memory_layer: memoryLayer,
|
|
172
|
+
injected_count: z.number(),
|
|
173
|
+
last_injected_at: z.number().optional(),
|
|
174
|
+
last_confirmed_use_at: z.number().optional(),
|
|
175
|
+
bad_recall_count: z.number(),
|
|
176
|
+
suppressed_until_turn: z.number(),
|
|
177
|
+
canonical_id: z.string().optional(),
|
|
178
|
+
memory_temporal_type: z.enum(["static", "dynamic"]).optional(),
|
|
179
|
+
temporal_resolution_status: z.enum([
|
|
180
|
+
"resolved",
|
|
181
|
+
"unresolved",
|
|
182
|
+
"static"
|
|
183
|
+
]).optional(),
|
|
184
|
+
temporal_phrase: z.string().optional(),
|
|
185
|
+
valid_until: z.number().optional(),
|
|
186
|
+
merge_lineage: z.array(z.string()).optional()
|
|
187
|
+
});
|
|
188
|
+
const episodicMetadata = memoryMetadataBase.extend({
|
|
189
|
+
kind: z.literal("episodic"),
|
|
190
|
+
memory_category: z.literal("episodic"),
|
|
191
|
+
valid_from: z.number().optional(),
|
|
192
|
+
event_at: z.union([z.string(), z.number()]).optional(),
|
|
193
|
+
entity_kind: z.string().optional()
|
|
194
|
+
}).catchall(z.unknown());
|
|
195
|
+
const profileMetadata = memoryMetadataBase.extend({
|
|
196
|
+
kind: z.literal("profile"),
|
|
197
|
+
memory_category: z.literal("profile"),
|
|
198
|
+
section_name: z.string().min(1),
|
|
199
|
+
rawTopicPhrase: z.string().optional(),
|
|
200
|
+
active_task_kind: z.enum(["task", "projection"]).optional(),
|
|
201
|
+
active_task_id: z.string().min(1).optional(),
|
|
202
|
+
active_task_origin: activeTaskOrigin.optional(),
|
|
203
|
+
active_task_status: activeTaskStatus.optional(),
|
|
204
|
+
active_task_created_at: z.number().optional(),
|
|
205
|
+
active_task_transitioned_at: z.number().optional(),
|
|
206
|
+
active_task_lifecycle: z.array(activeTaskLifecycleEvent).optional(),
|
|
207
|
+
active_task_ids: z.array(z.string().min(1)).optional(),
|
|
208
|
+
active_task_titles: z.array(z.string()).optional()
|
|
209
|
+
}).catchall(z.unknown());
|
|
210
|
+
const personaMetadata = memoryMetadataBase.extend({
|
|
211
|
+
kind: z.literal("persona"),
|
|
212
|
+
memory_category: z.literal("persona"),
|
|
213
|
+
section_name: z.string().min(1)
|
|
214
|
+
}).catchall(z.unknown());
|
|
215
|
+
const lessonMetadata = memoryMetadataBase.extend({
|
|
216
|
+
kind: z.literal("lesson"),
|
|
217
|
+
memory_category: z.literal("lesson"),
|
|
218
|
+
anti_pattern_signature: z.string().min(1)
|
|
219
|
+
}).catchall(z.unknown());
|
|
220
|
+
const summaryMetadata = memoryMetadataBase.extend({
|
|
221
|
+
kind: z.literal("summary"),
|
|
222
|
+
memory_category: z.literal("summary"),
|
|
223
|
+
children_ids: z.array(z.string()),
|
|
224
|
+
depth: z.number().int().min(1)
|
|
225
|
+
}).catchall(z.unknown());
|
|
226
|
+
const stateMetadata = memoryMetadataBase.extend({
|
|
227
|
+
kind: z.literal("state"),
|
|
228
|
+
memory_category: z.literal("state")
|
|
229
|
+
}).catchall(z.unknown());
|
|
230
|
+
const memoryMetadata = z.discriminatedUnion("kind", [
|
|
231
|
+
episodicMetadata,
|
|
232
|
+
profileMetadata,
|
|
233
|
+
personaMetadata,
|
|
234
|
+
lessonMetadata,
|
|
235
|
+
summaryMetadata,
|
|
236
|
+
stateMetadata
|
|
237
|
+
]);
|
|
238
|
+
//#endregion
|
|
239
|
+
//#region src/engine/extraction/memory-support-info.ts
|
|
240
|
+
/** @file memory-support-info.ts
|
|
241
|
+
* @purpose Parses and updates contextual support statistics for memories.
|
|
242
|
+
* @boundary Support-info V2 vocabulary, parsing, and bounded updates only.
|
|
243
|
+
*/
|
|
244
|
+
const SUPPORT_CONTEXT_VOCABULARY = [
|
|
245
|
+
"general",
|
|
246
|
+
"morning",
|
|
247
|
+
"afternoon",
|
|
248
|
+
"evening",
|
|
249
|
+
"night",
|
|
250
|
+
"weekday",
|
|
251
|
+
"weekend",
|
|
252
|
+
"work",
|
|
253
|
+
"leisure",
|
|
254
|
+
"summer",
|
|
255
|
+
"winter",
|
|
256
|
+
"travel"
|
|
257
|
+
];
|
|
258
|
+
const MAX_SUPPORT_SLICES = 8;
|
|
259
|
+
/** Normalizes context at the boundary before insight metadata parsing uses it. */
|
|
260
|
+
function normalizeContext(raw) {
|
|
261
|
+
if (!raw?.trim()) return "general";
|
|
262
|
+
const lower = raw.trim().toLowerCase();
|
|
263
|
+
if (SUPPORT_CONTEXT_VOCABULARY.includes(lower)) return lower;
|
|
264
|
+
return {
|
|
265
|
+
早上: "morning",
|
|
266
|
+
上午: "morning",
|
|
267
|
+
早晨: "morning",
|
|
268
|
+
下午: "afternoon",
|
|
269
|
+
傍晚: "evening",
|
|
270
|
+
晚上: "evening",
|
|
271
|
+
深夜: "night",
|
|
272
|
+
夜晚: "night",
|
|
273
|
+
凌晨: "night",
|
|
274
|
+
工作日: "weekday",
|
|
275
|
+
平时: "weekday",
|
|
276
|
+
周末: "weekend",
|
|
277
|
+
假日: "weekend",
|
|
278
|
+
休息日: "weekend",
|
|
279
|
+
工作: "work",
|
|
280
|
+
上班: "work",
|
|
281
|
+
办公: "work",
|
|
282
|
+
休闲: "leisure",
|
|
283
|
+
放松: "leisure",
|
|
284
|
+
休息: "leisure",
|
|
285
|
+
夏天: "summer",
|
|
286
|
+
夏季: "summer",
|
|
287
|
+
冬天: "winter",
|
|
288
|
+
冬季: "winter",
|
|
289
|
+
旅行: "travel",
|
|
290
|
+
出差: "travel",
|
|
291
|
+
旅游: "travel"
|
|
292
|
+
}[lower] ?? lower;
|
|
293
|
+
}
|
|
294
|
+
/** Parses support info into the normalized shape used by insight metadata parsing. */
|
|
295
|
+
function parseSupportInfo(raw) {
|
|
296
|
+
const defaultV2 = {
|
|
297
|
+
global_strength: .5,
|
|
298
|
+
total_observations: 0,
|
|
299
|
+
slices: []
|
|
300
|
+
};
|
|
301
|
+
if (!raw || typeof raw !== "object") return defaultV2;
|
|
302
|
+
const obj = raw;
|
|
303
|
+
if (Array.isArray(obj.slices)) return {
|
|
304
|
+
global_strength: typeof obj.global_strength === "number" ? obj.global_strength : .5,
|
|
305
|
+
total_observations: typeof obj.total_observations === "number" ? obj.total_observations : 0,
|
|
306
|
+
slices: obj.slices.filter((s) => s && typeof s.context === "string").map((s) => ({
|
|
307
|
+
context: String(s.context),
|
|
308
|
+
confirmations: typeof s.confirmations === "number" && s.confirmations >= 0 ? s.confirmations : 0,
|
|
309
|
+
contradictions: typeof s.contradictions === "number" && s.contradictions >= 0 ? s.contradictions : 0,
|
|
310
|
+
strength: typeof s.strength === "number" && s.strength >= 0 && s.strength <= 1 ? s.strength : .5,
|
|
311
|
+
last_observed_at: typeof s.last_observed_at === "number" ? s.last_observed_at : Date.now()
|
|
312
|
+
}))
|
|
313
|
+
};
|
|
314
|
+
const conf = typeof obj.confirmations === "number" ? obj.confirmations : 0;
|
|
315
|
+
const contra = typeof obj.contradictions === "number" ? obj.contradictions : 0;
|
|
316
|
+
const total = conf + contra;
|
|
317
|
+
if (total === 0) return defaultV2;
|
|
318
|
+
return {
|
|
319
|
+
global_strength: total > 0 ? conf / total : .5,
|
|
320
|
+
total_observations: total,
|
|
321
|
+
slices: [{
|
|
322
|
+
context: "general",
|
|
323
|
+
confirmations: conf,
|
|
324
|
+
contradictions: contra,
|
|
325
|
+
strength: total > 0 ? conf / total : .5,
|
|
326
|
+
last_observed_at: Date.now()
|
|
327
|
+
}]
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Implements update support stats as the local insight metadata parsing
|
|
332
|
+
* operation. `at` is the observation event time (the session date when one is
|
|
333
|
+
* known); it defaults to the wall clock only when no session anchor exists.
|
|
334
|
+
*/
|
|
335
|
+
function updateSupportStats(existing, contextLabel, event, at = Date.now()) {
|
|
336
|
+
const ctx = normalizeContext(contextLabel);
|
|
337
|
+
const base = {
|
|
338
|
+
...existing,
|
|
339
|
+
slices: [...existing.slices.map((s) => ({ ...s }))]
|
|
340
|
+
};
|
|
341
|
+
let slice = base.slices.find((s) => s.context === ctx);
|
|
342
|
+
if (!slice) {
|
|
343
|
+
slice = {
|
|
344
|
+
context: ctx,
|
|
345
|
+
confirmations: 0,
|
|
346
|
+
contradictions: 0,
|
|
347
|
+
strength: .5,
|
|
348
|
+
last_observed_at: at
|
|
349
|
+
};
|
|
350
|
+
base.slices.push(slice);
|
|
351
|
+
}
|
|
352
|
+
if (event === "support") slice.confirmations++;
|
|
353
|
+
else slice.contradictions++;
|
|
354
|
+
const sliceTotal = slice.confirmations + slice.contradictions;
|
|
355
|
+
slice.strength = sliceTotal > 0 ? slice.confirmations / sliceTotal : .5;
|
|
356
|
+
slice.last_observed_at = Math.max(slice.last_observed_at, at);
|
|
357
|
+
let slices = base.slices;
|
|
358
|
+
let droppedConf = 0;
|
|
359
|
+
let droppedContra = 0;
|
|
360
|
+
if (slices.length > 8) {
|
|
361
|
+
slices = slices.sort((a, b) => b.last_observed_at - a.last_observed_at);
|
|
362
|
+
const dropped = slices.slice(8);
|
|
363
|
+
for (const d of dropped) {
|
|
364
|
+
droppedConf += d.confirmations;
|
|
365
|
+
droppedContra += d.contradictions;
|
|
366
|
+
}
|
|
367
|
+
slices = slices.slice(0, 8);
|
|
368
|
+
}
|
|
369
|
+
let totalConf = droppedConf;
|
|
370
|
+
let totalContra = droppedContra;
|
|
371
|
+
for (const s of slices) {
|
|
372
|
+
totalConf += s.confirmations;
|
|
373
|
+
totalContra += s.contradictions;
|
|
374
|
+
}
|
|
375
|
+
const totalObs = totalConf + totalContra;
|
|
376
|
+
return {
|
|
377
|
+
global_strength: totalObs > 0 ? totalConf / totalObs : .5,
|
|
378
|
+
total_observations: totalObs,
|
|
379
|
+
slices
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
//#endregion
|
|
383
|
+
//#region src/engine/extraction/memory-metadata-codec.ts
|
|
384
|
+
/** @file memory-metadata-codec.ts
|
|
385
|
+
* @purpose Normalizes extracted metadata into typed fields for ranking and filtering.
|
|
386
|
+
* @boundary Extractor output, preference slots, and store metadata persistence.
|
|
387
|
+
* @see memory-metadata-normalizers.ts, memory-support-info.ts.
|
|
388
|
+
*/
|
|
389
|
+
function normalizeEventTime(value) {
|
|
390
|
+
const iso = normalizeIsoDateTimeString(value);
|
|
391
|
+
if (iso !== void 0) return iso;
|
|
392
|
+
if (typeof value === "number" && Number.isFinite(new Date(value).getTime())) return value;
|
|
393
|
+
}
|
|
394
|
+
var ExtractionError = class extends Error {
|
|
395
|
+
constructor(message) {
|
|
396
|
+
super(message);
|
|
397
|
+
this.name = "ExtractionError";
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
/** Check if a memory has passed its temporal expiry (valid_until). */
|
|
401
|
+
function isMemoryExpired(metadata, at = Date.now()) {
|
|
402
|
+
if (metadata.memory_category === "episodic") return false;
|
|
403
|
+
return metadata.valid_until != null && metadata.valid_until <= at;
|
|
404
|
+
}
|
|
405
|
+
function parseRawMetadata(rawMetadata) {
|
|
406
|
+
if (!rawMetadata) return {};
|
|
407
|
+
try {
|
|
408
|
+
const obj = JSON.parse(rawMetadata);
|
|
409
|
+
if (obj && typeof obj === "object") return obj;
|
|
410
|
+
} catch {
|
|
411
|
+
return {};
|
|
412
|
+
}
|
|
413
|
+
return {};
|
|
414
|
+
}
|
|
415
|
+
function readCategoryField(label, value) {
|
|
416
|
+
if (value === void 0) return void 0;
|
|
417
|
+
if (typeof value !== "string") throw new Error(`memory-metadata-codec: ${label} category must be a string`);
|
|
418
|
+
const category = validateMemoryCategory(value);
|
|
419
|
+
if (!category) throw new Error(`memory-metadata-codec: unrecognized ${label} category: ${value}`);
|
|
420
|
+
return category;
|
|
421
|
+
}
|
|
422
|
+
function resolveMemoryCategory(fields) {
|
|
423
|
+
const categories = fields.map((field) => readCategoryField(field.label, field.value)).filter((category) => category !== void 0);
|
|
424
|
+
const first = categories[0];
|
|
425
|
+
if (!first) throw new Error("memory-metadata-codec: missing memory category/kind");
|
|
426
|
+
if (categories.some((category) => category !== first)) throw new Error(`memory-metadata-codec: row/category/kind mismatch (${fields.map((field) => `${field.label}=${String(field.value)}`).join(", ")})`);
|
|
427
|
+
return first;
|
|
428
|
+
}
|
|
429
|
+
function parseNormalizedMetadata(candidate) {
|
|
430
|
+
const result = memoryMetadata.safeParse(candidate);
|
|
431
|
+
if (result.success) return result.data;
|
|
432
|
+
const message = result.error.issues.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`).join("; ");
|
|
433
|
+
throw new Error(`memory-metadata-codec: invalid metadata (${message})`);
|
|
434
|
+
}
|
|
435
|
+
function requireNonEmptyField(kind, field, value) {
|
|
436
|
+
const normalized = normalizeOptionalString(value);
|
|
437
|
+
if (normalized) return normalized;
|
|
438
|
+
throw new ExtractionError(`memory-metadata-codec: ${field} is required for ${kind} metadata`);
|
|
439
|
+
}
|
|
440
|
+
function normalizeInsightMetadata(parsed, entry, patch = {}) {
|
|
441
|
+
const text = typeof patch.l2_content === "string" ? patch.l2_content : entry.text ?? "";
|
|
442
|
+
const timestamp = typeof entry.timestamp === "number" && Number.isFinite(entry.timestamp) ? entry.timestamp : Date.now();
|
|
443
|
+
const memoryCategory = resolveMemoryCategory([
|
|
444
|
+
{
|
|
445
|
+
label: "metadata.kind",
|
|
446
|
+
value: parsed.kind
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
label: "metadata.memory_category",
|
|
450
|
+
value: parsed.memory_category
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
label: "entry",
|
|
454
|
+
value: entry.category
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
label: "patch.kind",
|
|
458
|
+
value: patch.kind
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
label: "patch.memory_category",
|
|
462
|
+
value: patch.memory_category
|
|
463
|
+
}
|
|
464
|
+
]);
|
|
465
|
+
const l0 = normalizeText(patch.l0_abstract ?? parsed.l0_abstract, text);
|
|
466
|
+
const l2 = normalizeText(patch.l2_content ?? parsed.l2_content, text);
|
|
467
|
+
const validFrom = normalizeTimestamp(patch.valid_from ?? parsed.valid_from, timestamp);
|
|
468
|
+
const invalidatedAt = patch.invalidated_at === void 0 ? normalizeOptionalTimestamp(parsed.invalidated_at) : normalizeOptionalTimestamp(patch.invalidated_at);
|
|
469
|
+
const fallbackSource = parsed.type === "session-summary" ? "session-summary" : parsed.type === "memory-reflection" || parsed.type === "memory-reflection-item" || parsed.type === "memory-reflection-event" || parsed.type === "memory-reflection-mapped" ? "reflection" : "legacy";
|
|
470
|
+
const source = normalizeSource(patch.source ?? parsed.source ?? fallbackSource);
|
|
471
|
+
const defaultState = source === "session-summary" ? "archived" : "confirmed";
|
|
472
|
+
const state = normalizeState(patch.state ?? parsed.state ?? defaultState);
|
|
473
|
+
const memoryLayer = normalizeLayer(patch.memory_layer ?? parsed.memory_layer ?? deriveDefaultLayer(source, memoryCategory, state));
|
|
474
|
+
const candidate = {
|
|
475
|
+
...parsed,
|
|
476
|
+
...patch,
|
|
477
|
+
kind: memoryCategory,
|
|
478
|
+
l0_abstract: l0,
|
|
479
|
+
l1_overview: normalizeText(patch.l1_overview ?? parsed.l1_overview, defaultOverview(l0)),
|
|
480
|
+
l2_content: l2,
|
|
481
|
+
memory_category: memoryCategory,
|
|
482
|
+
tier: normalizeTier(patch.tier ?? parsed.tier ?? (memoryCategory === "profile" ? "core" : "working")),
|
|
483
|
+
access_count: clampCount(patch.access_count ?? parsed.access_count, 0),
|
|
484
|
+
confidence: clamp01(patch.confidence ?? parsed.confidence, .7),
|
|
485
|
+
last_accessed_at: clampCount(patch.last_accessed_at ?? parsed.last_accessed_at, timestamp),
|
|
486
|
+
asserted_at: normalizeTimestamp(patch.asserted_at ?? parsed.asserted_at, timestamp),
|
|
487
|
+
valid_from: validFrom,
|
|
488
|
+
invalidated_at: invalidatedAt && invalidatedAt >= validFrom ? invalidatedAt : void 0,
|
|
489
|
+
supersedes: normalizeOptionalString(patch.supersedes ?? parsed.supersedes),
|
|
490
|
+
superseded_by: normalizeOptionalString(patch.superseded_by ?? parsed.superseded_by),
|
|
491
|
+
source_session: typeof (patch.source_session ?? parsed.source_session) === "string" ? patch.source_session ?? parsed.source_session : void 0,
|
|
492
|
+
state,
|
|
493
|
+
source,
|
|
494
|
+
memory_layer: memoryLayer,
|
|
495
|
+
injected_count: clampCount(patch.injected_count ?? parsed.injected_count, 0),
|
|
496
|
+
last_injected_at: normalizeOptionalTimestamp(patch.last_injected_at ?? parsed.last_injected_at),
|
|
497
|
+
last_confirmed_use_at: normalizeOptionalTimestamp(patch.last_confirmed_use_at ?? parsed.last_confirmed_use_at),
|
|
498
|
+
bad_recall_count: clampCount(patch.bad_recall_count ?? parsed.bad_recall_count, 0),
|
|
499
|
+
suppressed_until_turn: clampCount(patch.suppressed_until_turn ?? parsed.suppressed_until_turn, 0),
|
|
500
|
+
canonical_id: normalizeOptionalString(patch.canonical_id ?? parsed.canonical_id),
|
|
501
|
+
memory_temporal_type: (patch.memory_temporal_type ?? parsed.memory_temporal_type) === "static" || (patch.memory_temporal_type ?? parsed.memory_temporal_type) === "dynamic" ? patch.memory_temporal_type ?? parsed.memory_temporal_type : void 0,
|
|
502
|
+
temporal_resolution_status: (patch.temporal_resolution_status ?? parsed.temporal_resolution_status) === "resolved" || (patch.temporal_resolution_status ?? parsed.temporal_resolution_status) === "unresolved" || (patch.temporal_resolution_status ?? parsed.temporal_resolution_status) === "static" ? patch.temporal_resolution_status ?? parsed.temporal_resolution_status : void 0,
|
|
503
|
+
temporal_phrase: normalizeOptionalString(patch.temporal_phrase ?? parsed.temporal_phrase),
|
|
504
|
+
valid_until: normalizeOptionalTimestamp(patch.valid_until ?? parsed.valid_until)
|
|
505
|
+
};
|
|
506
|
+
if (memoryCategory === "episodic") {
|
|
507
|
+
const dayUnknown = candidate.temporal_resolution_status === "unresolved" || candidate.temporal_resolution_status === "static" || [
|
|
508
|
+
"year",
|
|
509
|
+
"month",
|
|
510
|
+
"week"
|
|
511
|
+
].includes(String(candidate.temporal_precision));
|
|
512
|
+
if (candidate.temporal_resolution_status === "unresolved" || candidate.temporal_resolution_status === "static") {
|
|
513
|
+
delete candidate.valid_from;
|
|
514
|
+
delete candidate.valid_until;
|
|
515
|
+
}
|
|
516
|
+
candidate.event_at = normalizeEventTime(patch.event_at) ?? (dayUnknown ? void 0 : normalizeEventTime(parsed.event_at));
|
|
517
|
+
if (candidate.event_at === void 0 && candidate.temporal_date === void 0 && candidate.temporal_resolution_status === void 0) {
|
|
518
|
+
candidate.temporal_resolution_status = "unresolved";
|
|
519
|
+
delete candidate.valid_from;
|
|
520
|
+
delete candidate.valid_until;
|
|
521
|
+
}
|
|
522
|
+
candidate.entity_kind = normalizeOptionalString(patch.entity_kind ?? parsed.entity_kind);
|
|
523
|
+
}
|
|
524
|
+
if (memoryCategory === "profile") {
|
|
525
|
+
candidate.section_name = requireNonEmptyField(memoryCategory, "section_name", patch.section_name ?? parsed.section_name);
|
|
526
|
+
candidate.rawTopicPhrase = normalizeOptionalString(patch.rawTopicPhrase ?? parsed.rawTopicPhrase);
|
|
527
|
+
}
|
|
528
|
+
if (memoryCategory === "persona") candidate.section_name = requireNonEmptyField(memoryCategory, "section_name", patch.section_name ?? parsed.section_name);
|
|
529
|
+
if (memoryCategory === "lesson") candidate.anti_pattern_signature = requireNonEmptyField(memoryCategory, "anti_pattern_signature", patch.anti_pattern_signature ?? parsed.anti_pattern_signature);
|
|
530
|
+
if (memoryCategory === "summary") {
|
|
531
|
+
candidate.children_ids = patch.children_ids ?? parsed.children_ids;
|
|
532
|
+
candidate.depth = patch.depth ?? parsed.depth;
|
|
533
|
+
}
|
|
534
|
+
candidate.fact_key = deriveFactKey(candidate) ?? (memoryCategory === "episodic" ? normalizeOptionalString(patch.fact_key ?? parsed.fact_key) : void 0);
|
|
535
|
+
return parseNormalizedMetadata(candidate);
|
|
536
|
+
}
|
|
537
|
+
/** Parses insight metadata into the normalized shape expected by insight metadata parsing. */
|
|
538
|
+
function parseInsightMetadata(rawMetadata, entry = {}) {
|
|
539
|
+
return normalizeInsightMetadata(parseRawMetadata(rawMetadata), entry);
|
|
540
|
+
}
|
|
541
|
+
/** Assembles insight metadata from validated inputs for deterministic insight metadata parsing. */
|
|
542
|
+
function buildInsightMetadata(entry, patch = {}) {
|
|
543
|
+
return normalizeInsightMetadata(parseRawMetadata(entry.metadata), entry, patch);
|
|
544
|
+
}
|
|
545
|
+
const MAX_SOURCES = 20;
|
|
546
|
+
const MAX_HISTORY = 50;
|
|
547
|
+
const MAX_RELATIONS = 16;
|
|
548
|
+
const DEFAULT_MERGE_LINEAGE_MAX = 32;
|
|
549
|
+
function appendLineage(existing, additions, max = 32) {
|
|
550
|
+
const cap = Number.isInteger(max) && max > 0 ? max : 32;
|
|
551
|
+
const prior = Array.isArray(existing) ? existing.filter((item) => typeof item === "string" && item.length > 0) : [];
|
|
552
|
+
const appended = additions.filter((item) => item.length > 0);
|
|
553
|
+
return [...prior, ...appended].slice(-cap);
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Append a relation to an existing relations array, deduplicating by the
|
|
557
|
+
* full triple (`source`, `type`, `targetId`). When `source` is absent the
|
|
558
|
+
* parent record's `fact_key` is the implicit subject — two relations with
|
|
559
|
+
* the same `(type, targetId)` and no explicit source are considered duplicates.
|
|
560
|
+
*/
|
|
561
|
+
function appendRelation(existing, relation) {
|
|
562
|
+
const rows = Array.isArray(existing) ? existing.filter((item) => !!item && typeof item === "object" && typeof item.type === "string" && typeof item.targetId === "string") : [];
|
|
563
|
+
const sameSource = (a, b) => (a.source ?? "") === (b.source ?? "");
|
|
564
|
+
if (rows.some((item) => item.type === relation.type && item.targetId === relation.targetId && sameSource(item, relation))) return rows;
|
|
565
|
+
return [...rows, relation];
|
|
566
|
+
}
|
|
567
|
+
/** Implements stringify insight metadata as the local insight metadata parsing operation. */
|
|
568
|
+
function stringifyInsightMetadata(metadata) {
|
|
569
|
+
const capped = { ...metadata };
|
|
570
|
+
if (Array.isArray(capped.sources) && capped.sources.length > MAX_SOURCES) capped.sources = capped.sources.slice(-20);
|
|
571
|
+
if (Array.isArray(capped.history) && capped.history.length > MAX_HISTORY) capped.history = capped.history.slice(-50);
|
|
572
|
+
if (Array.isArray(capped.relations) && capped.relations.length > MAX_RELATIONS) capped.relations = capped.relations.slice(-16);
|
|
573
|
+
delete capped.memory_layer;
|
|
574
|
+
return JSON.stringify(capped);
|
|
575
|
+
}
|
|
576
|
+
//#endregion
|
|
577
|
+
export { normalizeState as _, buildInsightMetadata as a, stringifyInsightMetadata as c, normalizeContext as d, parseSupportInfo as f, normalizeSource as g, deriveFactKey as h, appendRelation as i, MAX_SUPPORT_SLICES as l, deriveDefaultLayer as m, ExtractionError as n, isMemoryExpired as o, updateSupportStats as p, appendLineage as r, parseInsightMetadata as s, DEFAULT_MERGE_LINEAGE_MAX as t, SUPPORT_CONTEXT_VOCABULARY as u };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { C as EntryLike, D as MemoryRelation, T as InsightMetadataPatch, h as MemoryCategory, w as InsightMetadata } from "./types-CWdhXLxr.js";
|
|
2
|
+
//#region src/engine/extraction/memory-metadata-normalizers.d.ts
|
|
3
|
+
type FactKeySource = {
|
|
4
|
+
kind: MemoryCategory;
|
|
5
|
+
section_name?: unknown;
|
|
6
|
+
anti_pattern_signature?: unknown;
|
|
7
|
+
active_task_kind?: unknown;
|
|
8
|
+
active_task_id?: unknown;
|
|
9
|
+
};
|
|
10
|
+
declare function deriveFactKey(metadata: FactKeySource): string | undefined;
|
|
11
|
+
//#endregion
|
|
12
|
+
//#region src/engine/extraction/memory-support-info.d.ts
|
|
13
|
+
/** @file memory-support-info.ts
|
|
14
|
+
* @purpose Parses and updates contextual support statistics for memories.
|
|
15
|
+
* @boundary Support-info V2 vocabulary, parsing, and bounded updates only.
|
|
16
|
+
*/
|
|
17
|
+
declare const SUPPORT_CONTEXT_VOCABULARY: readonly ["general", "morning", "afternoon", "evening", "night", "weekday", "weekend", "work", "leisure", "summer", "winter", "travel"];
|
|
18
|
+
type SupportContext = (typeof SUPPORT_CONTEXT_VOCABULARY)[number] | string;
|
|
19
|
+
declare const MAX_SUPPORT_SLICES = 8;
|
|
20
|
+
interface ContextualSupport {
|
|
21
|
+
context: SupportContext;
|
|
22
|
+
confirmations: number;
|
|
23
|
+
contradictions: number;
|
|
24
|
+
/** confirmations / (confirmations + contradictions) */
|
|
25
|
+
strength: number;
|
|
26
|
+
last_observed_at: number;
|
|
27
|
+
}
|
|
28
|
+
interface SupportInfoV2 {
|
|
29
|
+
/** Weighted average across all slices. */
|
|
30
|
+
global_strength: number;
|
|
31
|
+
/** Sum of all confirmations + contradictions. */
|
|
32
|
+
total_observations: number;
|
|
33
|
+
slices: ContextualSupport[];
|
|
34
|
+
}
|
|
35
|
+
/** Normalizes context at the boundary before insight metadata parsing uses it. */
|
|
36
|
+
declare function normalizeContext(raw: string | undefined): SupportContext;
|
|
37
|
+
/** Parses support info into the normalized shape used by insight metadata parsing. */
|
|
38
|
+
declare function parseSupportInfo(raw: unknown): SupportInfoV2;
|
|
39
|
+
/**
|
|
40
|
+
* Implements update support stats as the local insight metadata parsing
|
|
41
|
+
* operation. `at` is the observation event time (the session date when one is
|
|
42
|
+
* known); it defaults to the wall clock only when no session anchor exists.
|
|
43
|
+
*/
|
|
44
|
+
declare function updateSupportStats(existing: SupportInfoV2, contextLabel: string | undefined, event: "support" | "contradict", at?: number): SupportInfoV2;
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/engine/extraction/memory-metadata-codec.d.ts
|
|
47
|
+
declare class ExtractionError extends Error {
|
|
48
|
+
constructor(message: string);
|
|
49
|
+
}
|
|
50
|
+
/** Check if a memory has passed its temporal expiry (valid_until). */
|
|
51
|
+
declare function isMemoryExpired(metadata: Pick<InsightMetadata, "valid_until" | "memory_category">, at?: number): boolean;
|
|
52
|
+
/** Parses insight metadata into the normalized shape expected by insight metadata parsing. */
|
|
53
|
+
declare function parseInsightMetadata(rawMetadata: string | undefined, entry?: EntryLike): InsightMetadata;
|
|
54
|
+
/** Assembles insight metadata from validated inputs for deterministic insight metadata parsing. */
|
|
55
|
+
declare function buildInsightMetadata(entry: EntryLike, patch?: InsightMetadataPatch): InsightMetadata;
|
|
56
|
+
declare const DEFAULT_MERGE_LINEAGE_MAX = 32;
|
|
57
|
+
declare function appendLineage(existing: unknown, additions: readonly string[], max?: number): string[];
|
|
58
|
+
/**
|
|
59
|
+
* Append a relation to an existing relations array, deduplicating by the
|
|
60
|
+
* full triple (`source`, `type`, `targetId`). When `source` is absent the
|
|
61
|
+
* parent record's `fact_key` is the implicit subject — two relations with
|
|
62
|
+
* the same `(type, targetId)` and no explicit source are considered duplicates.
|
|
63
|
+
*/
|
|
64
|
+
declare function appendRelation(existing: unknown, relation: MemoryRelation): MemoryRelation[];
|
|
65
|
+
/** Implements stringify insight metadata as the local insight metadata parsing operation. */
|
|
66
|
+
declare function stringifyInsightMetadata(metadata: InsightMetadata | Record<string, unknown>): string;
|
|
67
|
+
//#endregion
|
|
68
|
+
export { deriveFactKey as _, buildInsightMetadata as a, stringifyInsightMetadata as c, SUPPORT_CONTEXT_VOCABULARY as d, SupportContext as f, updateSupportStats as g, parseSupportInfo as h, appendRelation as i, ContextualSupport as l, normalizeContext as m, ExtractionError as n, isMemoryExpired as o, SupportInfoV2 as p, appendLineage as r, parseInsightMetadata as s, DEFAULT_MERGE_LINEAGE_MAX as t, MAX_SUPPORT_SLICES as u };
|