@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.
Files changed (478) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +7 -2
  3. package/config/b-profile-section-registry.json +118 -0
  4. package/config/llm/compiled/2026-05-19T230932Z/manifest.json +25 -0
  5. package/config/llm/compiled/2026-05-19T230932Z/registry-root.json +67 -0
  6. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  7. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openrouter_auto.json +5 -0
  8. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  9. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  10. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openrouter_auto.mda +24 -0
  11. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/sno_ai_extract.mda +24 -0
  12. package/config/llm/compiled/2026-07-21T001311Z/manifest.json +43 -0
  13. package/config/llm/compiled/2026-07-21T001311Z/registry-root.json +97 -0
  14. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  15. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openrouter_auto.json +5 -0
  16. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  17. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  18. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  19. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  20. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  21. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openrouter_auto.mda +24 -0
  22. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_ai_extract.mda +24 -0
  23. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  24. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_chat.mda +27 -0
  25. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_profile.mda +27 -0
  26. package/config/llm/compiled/2026-08-29T060335Z/manifest.json +43 -0
  27. package/config/llm/compiled/2026-08-29T060335Z/registry-root.json +97 -0
  28. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  29. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openrouter_auto.json +5 -0
  30. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  31. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  32. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  33. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  34. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  35. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openrouter_auto.mda +24 -0
  36. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_ai_extract.mda +24 -0
  37. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  38. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_chat.mda +27 -0
  39. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_profile.mda +27 -0
  40. package/config/llm/compiled/2026-09-04T004828Z/manifest.json +43 -0
  41. package/config/llm/compiled/2026-09-04T004828Z/registry-root.json +97 -0
  42. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  43. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openrouter_auto.json +5 -0
  44. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  45. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  46. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  47. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  48. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  49. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openrouter_auto.mda +24 -0
  50. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_ai_extract.mda +24 -0
  51. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  52. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_chat.mda +27 -0
  53. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_profile.mda +27 -0
  54. package/config/llm/current.json +4 -0
  55. package/config/llm/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  56. package/config/llm/source/mem_claw/openrouter_auto.mda +24 -0
  57. package/config/llm/source/mem_claw/sno_ai_extract.mda +24 -0
  58. package/config/llm/source/mem_claw/sno_conflict_verdict.mda +27 -0
  59. package/config/llm/source/mem_claw/sno_extract_chat.mda +27 -0
  60. package/config/llm/source/mem_claw/sno_extract_profile.mda +27 -0
  61. package/config/llm.trust.json +37 -0
  62. package/dist/_types-CUKHSRkS.d.ts +103 -0
  63. package/dist/access-tracker-CSc21GtV.d.ts +110 -0
  64. package/dist/adapter-DMEmCTKo.d.ts +69 -0
  65. package/dist/adapter-XaRHZWZ2.js +333 -0
  66. package/dist/agent-llm-port-5oXgBpzJ.d.ts +53 -0
  67. package/dist/all-resources-BQK2ugjB.js +6379 -0
  68. package/dist/all-resources-Dij6l5h0.d.ts +18 -0
  69. package/dist/ambient-learning-text-normalizer-CxjATmMp.js +170 -0
  70. package/dist/ambient-learning-text-normalizer-_fH3LeuK.d.ts +10 -0
  71. package/dist/atomic-extraction-reply-BJ9XV_9s.js +863 -0
  72. package/dist/atomic-extraction-skill-CcXmuCqL.js +56 -0
  73. package/dist/atomic-memory-extraction-BpOUWPJM.d.ts +327 -0
  74. package/dist/atomic-memory-extraction-sdNf1-B1.js +3605 -0
  75. package/dist/b-profile-section-dictionary-provider-BHkoNqgk.js +1812 -0
  76. package/dist/b-profile-section-dictionary-provider-BxbksLj3.d.ts +62 -0
  77. package/dist/best-effort-BPZSzKk0.d.ts +9 -0
  78. package/dist/calendar-instruction-CzqZbAPG.js +194 -0
  79. package/dist/capture-policy-detector-CHz5GOPA.d.ts +53 -0
  80. package/dist/capture-policy-detector-DaMfy9CZ.js +357 -0
  81. package/dist/classifier-C96uH9OF.d.ts +272 -0
  82. package/dist/client.d.ts +34 -0
  83. package/dist/client.js +305 -0
  84. package/dist/coding-skin.d.ts +51 -0
  85. package/dist/coding-skin.js +55 -0
  86. package/dist/config-tSrvLXgV.js +2577 -0
  87. package/dist/connection-DAbzki8K.d.ts +391 -0
  88. package/dist/connection-DliCOBB2.js +297 -0
  89. package/dist/daily-log-generator-CH_KuWHs.js +469 -0
  90. package/dist/daily-log-generator-CsQPHl4A.d.ts +73 -0
  91. package/dist/daily-spend-estimator-DiwzBlo1.d.ts +8 -0
  92. package/dist/data-bootstrap-CYniFp8b.js +172 -0
  93. package/dist/data-bootstrap-CcJUwkqf.d.ts +30 -0
  94. package/dist/data-paths-C7sNdqvP.d.ts +22 -0
  95. package/dist/derived-suppression-cache-C7bGARc0.d.ts +36 -0
  96. package/dist/diagnostic-encoder.d.ts +6 -0
  97. package/dist/diagnostic-encoder.js +29 -0
  98. package/dist/embedding-provider-client-Q_hJonK9.js +294 -0
  99. package/dist/embedding-provider-client-vynZMuit.d.ts +94 -0
  100. package/dist/entry-metadata-parser-BIVSMCIk.js +20 -0
  101. package/dist/error-D-wb-rZw.js +23 -0
  102. package/dist/error-signals-D8_3vYu4.d.ts +28 -0
  103. package/dist/error-signals-lMH2uAdV.js +134 -0
  104. package/dist/errors-CeVRxf9V.d.ts +49 -0
  105. package/dist/extraction-text-sanitizer-B_AhIecT.d.ts +32 -0
  106. package/dist/i18n-text-DbD6Qify.d.ts +13 -0
  107. package/dist/index-BsMap4It.d.ts +650 -0
  108. package/dist/index-DL8AVj0Z.d.ts +571 -0
  109. package/dist/index-DQ7VL6d3.d.ts +350 -0
  110. package/dist/index.d.ts +65 -0
  111. package/dist/index.js +1201 -0
  112. package/dist/intent-analyzer-B5XVrWwe.d.ts +28 -0
  113. package/dist/internal/config/index.d.ts +2 -0
  114. package/dist/internal/config/index.js +581 -0
  115. package/dist/internal/config/plugin-config-schema.d.ts +2 -0
  116. package/dist/internal/config/plugin-config-schema.js +2 -0
  117. package/dist/internal/config/product-mode.d.ts +2 -0
  118. package/dist/internal/config/product-mode.js +36 -0
  119. package/dist/internal/config/settings.d.ts +2 -0
  120. package/dist/internal/config/settings.js +265 -0
  121. package/dist/internal/config/skill-categories.d.ts +4 -0
  122. package/dist/internal/config/skill-categories.js +68 -0
  123. package/dist/internal/config/skin-defaults.d.ts +6 -0
  124. package/dist/internal/config/skin-defaults.js +6 -0
  125. package/dist/internal/contract/discovery.d.ts +10 -0
  126. package/dist/internal/contract/discovery.js +53 -0
  127. package/dist/internal/contract/profile.d.ts +2 -0
  128. package/dist/internal/contract/profile.js +44 -0
  129. package/dist/internal/contract/routes.d.ts +2 -0
  130. package/dist/internal/contract/routes.js +61 -0
  131. package/dist/internal/engine/bindings/memory-cli-shared.d.ts +47 -0
  132. package/dist/internal/engine/bindings/memory-cli-shared.js +84 -0
  133. package/dist/internal/engine/bindings/memory-forget-tool.d.ts +5 -0
  134. package/dist/internal/engine/bindings/memory-forget-tool.js +66 -0
  135. package/dist/internal/engine/bindings/memory-list-tool.d.ts +5 -0
  136. package/dist/internal/engine/bindings/memory-list-tool.js +57 -0
  137. package/dist/internal/engine/bindings/memory-recall-tool.d.ts +10 -0
  138. package/dist/internal/engine/bindings/memory-recall-tool.js +283 -0
  139. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.d.ts +5 -0
  140. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +150 -0
  141. package/dist/internal/engine/bindings/memory-stats-tool.d.ts +5 -0
  142. package/dist/internal/engine/bindings/memory-stats-tool.js +43 -0
  143. package/dist/internal/engine/bindings/memory-store-tool.d.ts +5 -0
  144. package/dist/internal/engine/bindings/memory-store-tool.js +165 -0
  145. package/dist/internal/engine/bindings/memory-tool-access.d.ts +16 -0
  146. package/dist/internal/engine/bindings/memory-tool-access.js +46 -0
  147. package/dist/internal/engine/bindings/memory-tool-formatting.d.ts +62 -0
  148. package/dist/internal/engine/bindings/memory-tool-formatting.js +106 -0
  149. package/dist/internal/engine/bindings/memory-tool-results.d.ts +8 -0
  150. package/dist/internal/engine/bindings/memory-tool-results.js +41 -0
  151. package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +109 -0
  152. package/dist/internal/engine/bindings/memory-tool-schemas.js +75 -0
  153. package/dist/internal/engine/bindings/memory-update-tool.d.ts +5 -0
  154. package/dist/internal/engine/bindings/memory-update-tool.js +127 -0
  155. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +14 -0
  156. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +248 -0
  157. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +12 -0
  158. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +324 -0
  159. package/dist/internal/engine/bindings/sno-station-mem-hook-types.d.ts +56 -0
  160. package/dist/internal/engine/bindings/sno-station-mem-hook-types.js +1 -0
  161. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +14 -0
  162. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +119 -0
  163. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.d.ts +52 -0
  164. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +145 -0
  165. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +10 -0
  166. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.js +9 -0
  167. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +37 -0
  168. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +105 -0
  169. package/dist/internal/engine/bindings/sno-station-mem-session-state.d.ts +10 -0
  170. package/dist/internal/engine/bindings/sno-station-mem-session-state.js +27 -0
  171. package/dist/internal/engine/eval/trace.d.ts +2 -0
  172. package/dist/internal/engine/eval/trace.js +151 -0
  173. package/dist/internal/engine/extraction/ambient-learning-text-normalizer.d.ts +2 -0
  174. package/dist/internal/engine/extraction/ambient-learning-text-normalizer.js +2 -0
  175. package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +2 -0
  176. package/dist/internal/engine/extraction/atomic-memory-extraction.js +2 -0
  177. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +2 -0
  178. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.js +2 -0
  179. package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +49 -0
  180. package/dist/internal/engine/extraction/b-profile-section-rekey.js +730 -0
  181. package/dist/internal/engine/extraction/capture-policy-detector.d.ts +2 -0
  182. package/dist/internal/engine/extraction/capture-policy-detector.js +2 -0
  183. package/dist/internal/engine/extraction/embedding-provider-client.d.ts +2 -0
  184. package/dist/internal/engine/extraction/embedding-provider-client.js +2 -0
  185. package/dist/internal/engine/extraction/extraction-text-sanitizer.d.ts +2 -0
  186. package/dist/internal/engine/extraction/extraction-text-sanitizer.js +114 -0
  187. package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +3 -0
  188. package/dist/internal/engine/extraction/memory-metadata-codec.js +2 -0
  189. package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +2 -0
  190. package/dist/internal/engine/extraction/memory-temporality-classifier.js +2 -0
  191. package/dist/internal/engine/i18n/all-resources.d.ts +2 -0
  192. package/dist/internal/engine/i18n/all-resources.js +2 -0
  193. package/dist/internal/engine/i18n/locales.d.ts +2 -0
  194. package/dist/internal/engine/i18n/locales.js +19 -0
  195. package/dist/internal/engine/i18n/res/_types.d.ts +2 -0
  196. package/dist/internal/engine/i18n/res/_types.js +11 -0
  197. package/dist/internal/engine/observability/adapter.d.ts +2 -0
  198. package/dist/internal/engine/observability/adapter.js +2 -0
  199. package/dist/internal/engine/observability/best-effort.d.ts +2 -0
  200. package/dist/internal/engine/observability/best-effort.js +41 -0
  201. package/dist/internal/engine/observability/early-diagnostics.js +2 -0
  202. package/dist/internal/engine/observability/memory-snapshot.d.ts +2 -0
  203. package/dist/internal/engine/observability/memory-snapshot.js +44 -0
  204. package/dist/internal/engine/observability/observable-embedder.d.ts +2 -0
  205. package/dist/internal/engine/observability/observable-embedder.js +43 -0
  206. package/dist/internal/engine/observability/observable-llm-client.d.ts +2 -0
  207. package/dist/internal/engine/observability/observable-llm-client.js +98 -0
  208. package/dist/internal/engine/observability/observable-memory-store.d.ts +2 -0
  209. package/dist/internal/engine/observability/observable-memory-store.js +701 -0
  210. package/dist/internal/engine/observability/observable-retriever.d.ts +2 -0
  211. package/dist/internal/engine/observability/observable-retriever.js +95 -0
  212. package/dist/internal/engine/observability/runtime-diagnostics.d.ts +13 -0
  213. package/dist/internal/engine/observability/runtime-diagnostics.js +96 -0
  214. package/dist/internal/engine/observability/session-registry.d.ts +2 -0
  215. package/dist/internal/engine/observability/session-registry.js +58 -0
  216. package/dist/internal/engine/observability/version-metadata.d.ts +7 -0
  217. package/dist/internal/engine/observability/version-metadata.js +59 -0
  218. package/dist/internal/engine/operations/daily-spend-estimator.d.ts +2 -0
  219. package/dist/internal/engine/operations/daily-spend-estimator.js +97 -0
  220. package/dist/internal/engine/operations/learning-file-maintenance.d.ts +2 -0
  221. package/dist/internal/engine/operations/learning-file-maintenance.js +255 -0
  222. package/dist/internal/engine/operations/memory-tier-promoter.d.ts +2 -0
  223. package/dist/internal/engine/operations/memory-tier-promoter.js +95 -0
  224. package/dist/internal/engine/operations/runtime-audit-log.d.ts +3 -0
  225. package/dist/internal/engine/operations/runtime-audit-log.js +3 -0
  226. package/dist/internal/engine/provider/canonical-memory-corpus.d.ts +38 -0
  227. package/dist/internal/engine/provider/canonical-memory-corpus.js +253 -0
  228. package/dist/internal/engine/provider/provider-registration.d.ts +39 -0
  229. package/dist/internal/engine/provider/provider-registration.js +2 -0
  230. package/dist/internal/engine/provider/provider-row-renderer.d.ts +7 -0
  231. package/dist/internal/engine/provider/provider-row-renderer.js +53 -0
  232. package/dist/internal/engine/provider/provider-types.d.ts +2 -0
  233. package/dist/internal/engine/provider/provider-types.js +1 -0
  234. package/dist/internal/engine/reflection/daily-log-generator.d.ts +2 -0
  235. package/dist/internal/engine/reflection/daily-log-generator.js +2 -0
  236. package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +2 -0
  237. package/dist/internal/engine/reflection/reflection-command-hooks.js +2 -0
  238. package/dist/internal/engine/reflection/reflection-deps.d.ts +2 -0
  239. package/dist/internal/engine/reflection/reflection-deps.js +1 -0
  240. package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +2 -0
  241. package/dist/internal/engine/reflection/reflection-embedded-generator.js +2 -0
  242. package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +2 -0
  243. package/dist/internal/engine/reflection/reflection-injection-hooks.js +219 -0
  244. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +2 -0
  245. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +63 -0
  246. package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +4 -0
  247. package/dist/internal/engine/reflection/strategy-hook-runner.js +3 -0
  248. package/dist/internal/engine/rem/classifier.d.ts +2 -0
  249. package/dist/internal/engine/rem/classifier.js +180 -0
  250. package/dist/internal/engine/rem/index.d.ts +4 -0
  251. package/dist/internal/engine/rem/index.js +2551 -0
  252. package/dist/internal/engine/rem/types.d.ts +2 -0
  253. package/dist/internal/engine/rem/types.js +40 -0
  254. package/dist/internal/engine/retrieval/access-tracker.d.ts +2 -0
  255. package/dist/internal/engine/retrieval/access-tracker.js +314 -0
  256. package/dist/internal/engine/retrieval/intent-analyzer.d.ts +2 -0
  257. package/dist/internal/engine/retrieval/intent-analyzer.js +27 -0
  258. package/dist/internal/engine/retrieval/retrieval-gate.d.ts +2 -0
  259. package/dist/internal/engine/retrieval/retrieval-gate.js +47 -0
  260. package/dist/internal/engine/retrieval/retriever.d.ts +2 -0
  261. package/dist/internal/engine/retrieval/retriever.js +2 -0
  262. package/dist/internal/engine/security/memory-scope-policy.d.ts +2 -0
  263. package/dist/internal/engine/security/memory-scope-policy.js +2 -0
  264. package/dist/internal/engine/security/redact.d.ts +2 -0
  265. package/dist/internal/engine/security/redact.js +34 -0
  266. package/dist/internal/engine/security/scopes.d.ts +3 -0
  267. package/dist/internal/engine/security/scopes.js +3 -0
  268. package/dist/internal/engine/shared/errors.d.ts +2 -0
  269. package/dist/internal/engine/shared/errors.js +66 -0
  270. package/dist/internal/engine/shared/i18n-text.d.ts +2 -0
  271. package/dist/internal/engine/shared/i18n-text.js +58 -0
  272. package/dist/internal/engine/shared/iso-date-time.d.ts +16 -0
  273. package/dist/internal/engine/shared/iso-date-time.js +40 -0
  274. package/dist/internal/engine/shared/lru.d.ts +2 -0
  275. package/dist/internal/engine/shared/lru.js +30 -0
  276. package/dist/internal/engine/shared/memory-kind-policy.d.ts +2 -0
  277. package/dist/internal/engine/shared/memory-kind-policy.js +64 -0
  278. package/dist/internal/engine/shared/paths.d.ts +3 -0
  279. package/dist/internal/engine/shared/paths.js +2 -0
  280. package/dist/internal/engine/shared/types.d.ts +3 -0
  281. package/dist/internal/engine/shared/types.js +25 -0
  282. package/dist/internal/engine/shared/utils.d.ts +2 -0
  283. package/dist/internal/engine/shared/utils.js +175 -0
  284. package/dist/internal/engine/telemetry/memory-telemetry-api.d.ts +134 -0
  285. package/dist/internal/engine/telemetry/memory-telemetry-api.js +730 -0
  286. package/dist/internal/engine/telemetry/memory-telemetry-observability.d.ts +24 -0
  287. package/dist/internal/engine/telemetry/memory-telemetry-observability.js +133 -0
  288. package/dist/internal/engine/telemetry/memory-telemetry-outbox.d.ts +2 -0
  289. package/dist/internal/engine/telemetry/memory-telemetry-outbox.js +443 -0
  290. package/dist/internal/engine/telemetry/memory-telemetry-types.d.ts +2 -0
  291. package/dist/internal/engine/telemetry/memory-telemetry-types.js +21 -0
  292. package/dist/internal/engine/telemetry/observe-ledger.d.ts +30 -0
  293. package/dist/internal/engine/telemetry/observe-ledger.js +111 -0
  294. package/dist/internal/model/agent-llm-port.d.ts +2 -0
  295. package/dist/internal/model/agent-llm-port.js +1 -0
  296. package/dist/internal/model/llm-client.d.ts +3 -0
  297. package/dist/internal/model/llm-client.js +3 -0
  298. package/dist/internal/model/llm-failure.d.ts +26 -0
  299. package/dist/internal/model/llm-failure.js +63 -0
  300. package/dist/internal/model/llm-mode-routing.d.ts +22 -0
  301. package/dist/internal/model/llm-mode-routing.js +37 -0
  302. package/dist/internal/store/atomic-memory-cutover-sql.d.ts +13 -0
  303. package/dist/internal/store/atomic-memory-cutover-sql.js +237 -0
  304. package/dist/internal/store/connection.d.ts +2 -0
  305. package/dist/internal/store/connection.js +2 -0
  306. package/dist/internal/store/data-bootstrap.d.ts +2 -0
  307. package/dist/internal/store/data-bootstrap.js +2 -0
  308. package/dist/internal/store/data-paths.d.ts +2 -0
  309. package/dist/internal/store/data-paths.js +65 -0
  310. package/dist/internal/store/maintenance.d.ts +75 -0
  311. package/dist/internal/store/maintenance.js +1401 -0
  312. package/dist/internal/store/memory-kinds-cutover-migrator.d.ts +28 -0
  313. package/dist/internal/store/memory-kinds-cutover-migrator.js +415 -0
  314. package/dist/internal/store/migrations.d.ts +27 -0
  315. package/dist/internal/store/migrations.js +201 -0
  316. package/dist/internal/store/sqlite-runtime.d.ts +2 -0
  317. package/dist/internal/store/sqlite-runtime.js +109 -0
  318. package/dist/internal/store/store.d.ts +3 -0
  319. package/dist/internal/store/store.js +2 -0
  320. package/dist/learning-file-maintenance-9b-Ut6Kv.d.ts +30 -0
  321. package/dist/llm-client-B7Xoxqou.js +1378 -0
  322. package/dist/llm-client-DOTSGzhe.d.ts +51 -0
  323. package/dist/locales-JxGmkG6t.d.ts +7 -0
  324. package/dist/log-site-catalog.generated-B9WYdnAM.js +2321 -0
  325. package/dist/log-site-catalog.json +1 -0
  326. package/dist/lru-DyoaTyIs.d.ts +14 -0
  327. package/dist/memdump.d.ts +52 -0
  328. package/dist/memdump.js +163 -0
  329. package/dist/memory-entry-projector-DHo8jH10.js +1015 -0
  330. package/dist/memory-kind-policy-LKt0u3gy.d.ts +23 -0
  331. package/dist/memory-metadata-codec-C3oQd47V.d.ts +68 -0
  332. package/dist/memory-metadata-codec-DL1sbJiN.js +577 -0
  333. package/dist/memory-runtime-BZtREuwW.js +19459 -0
  334. package/dist/memory-scope-policy-1gg5QlWZ.d.ts +67 -0
  335. package/dist/memory-scope-policy-DICSCURA.js +283 -0
  336. package/dist/memory-snapshot-3e44ND2i.d.ts +16 -0
  337. package/dist/memory-source-order-BtrIxaIt.js +134 -0
  338. package/dist/memory-store-base-XRA4S9Xl.d.ts +1095 -0
  339. package/dist/memory-store-shared-DeIDkhLj.js +158 -0
  340. package/dist/memory-store-write-validation-B_hDG2zf.js +243 -0
  341. package/dist/memory-telemetry-incidents-BWA9kcZx.js +8 -0
  342. package/dist/memory-telemetry-metadata-CA7W8tK6.js +77 -0
  343. package/dist/memory-telemetry-outbox-ddTdImt7.d.ts +74 -0
  344. package/dist/memory-telemetry-receipts-MAJecvXQ.d.ts +34 -0
  345. package/dist/memory-telemetry-receipts-YsxbwOAf.js +91 -0
  346. package/dist/memory-telemetry-types-CufVmrCs.d.ts +14 -0
  347. package/dist/memory-temporality-classifier-CEdRTN5J.d.ts +43 -0
  348. package/dist/memory-temporality-classifier-CKiTAHXe.js +184 -0
  349. package/dist/memory-tier-promoter-DbTpahkP.d.ts +43 -0
  350. package/dist/memory-tool-dependencies-CLODycUw.js +19 -0
  351. package/dist/memory-tool-dependencies-N69chrQc.d.ts +14 -0
  352. package/dist/model-call-table-CspopkBg.js +563 -0
  353. package/dist/model-reply-text-CKopStP2.js +334 -0
  354. package/dist/observable-embedder-DQnNgf9O.d.ts +17 -0
  355. package/dist/observable-llm-client-uwqPADpN.d.ts +21 -0
  356. package/dist/observable-memory-store-BaZKbhgq.d.ts +73 -0
  357. package/dist/observable-retriever-Dt_NUxAA.d.ts +23 -0
  358. package/dist/operation-cancellation-CTKWwNHk.js +81 -0
  359. package/dist/paths-qVF-5uBq.d.ts +1 -0
  360. package/dist/plugin-config-schema-C0UUbOmG.d.ts +413 -0
  361. package/dist/plugin-config-schema-YJLyIIcJ.js +361 -0
  362. package/dist/profile-TWPJ_myr.d.ts +13 -0
  363. package/dist/profile-section-writer-hIphqpUY.js +2149 -0
  364. package/dist/provider-registration-CF1tg8Xy.js +721 -0
  365. package/dist/provider-runtime-types-DFhtdA6d.d.ts +134 -0
  366. package/dist/provider-types-CZGm6v88.d.ts +23 -0
  367. package/dist/redact-BTIZcHQL.d.ts +5 -0
  368. package/dist/reflection-command-hooks-BeQiJI9-.js +644 -0
  369. package/dist/reflection-command-hooks-C1Vxgb-O.d.ts +32 -0
  370. package/dist/reflection-deps-RpLPFrSc.d.ts +19 -0
  371. package/dist/reflection-embedded-generator-CDUhgV96.js +130 -0
  372. package/dist/reflection-embedded-generator-CxOex5xK.d.ts +14 -0
  373. package/dist/reflection-injection-hooks-DfUgqu8f.d.ts +43 -0
  374. package/dist/reflection-lifecycle-hooks-Ct5HBdSG.d.ts +27 -0
  375. package/dist/relation-dictionary-Cev1kyLe.js +4248 -0
  376. package/dist/release-download.d.ts +8 -0
  377. package/dist/release-download.js +32 -0
  378. package/dist/relevant-memories-context-m8nuFZcM.js +23 -0
  379. package/dist/rem-batch-executor-Cbm5gfSe.js +31644 -0
  380. package/dist/rem-batch-executor-bc0IFlp2.js +2 -0
  381. package/dist/rem-consumer-retrieval-CRpvG8KS.js +246 -0
  382. package/dist/rem-trigger-BTxkcjgT.js +729 -0
  383. package/dist/resolver-Dy-hnjCR.js +103 -0
  384. package/dist/results-C3ZLroMb.js +140 -0
  385. package/dist/retrieval-gate-Bx2Zg7jD.d.ts +31 -0
  386. package/dist/retriever-CygHBazG.js +1757 -0
  387. package/dist/retriever-Ruk3zp7_.d.ts +469 -0
  388. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  389. package/dist/routes-Ce7SQKec.js +59 -0
  390. package/dist/runtime-audit-log-BCeujlEp.js +430 -0
  391. package/dist/runtime-audit-log-zpQiR9HT.d.ts +149 -0
  392. package/dist/scopes-CSOn6zdd.js +71 -0
  393. package/dist/scopes-CtrY-YQ3.d.ts +23 -0
  394. package/dist/server-BPAY4NTG.js +1410 -0
  395. package/dist/session-registry-DBoE7AvZ.d.ts +14 -0
  396. package/dist/sidecar/main.d.ts +1 -0
  397. package/dist/sidecar/main.js +56 -0
  398. package/dist/signed-registry-constants-Bv0fgZ8Q.d.ts +12 -0
  399. package/dist/signed-registry-constants-yq3DlG3B.js +82 -0
  400. package/dist/sno-station-mem-runtime-dependencies-Bu-MiqPX.d.ts +31 -0
  401. package/dist/sno-station-mem-runtime-dependencies-DjLOhB45.js +30 -0
  402. package/dist/sqlite-runtime-L_ywirTm.d.ts +58 -0
  403. package/dist/store-2pM0-dZg.d.ts +27 -0
  404. package/dist/store-DzpZBMEm.js +5830 -0
  405. package/dist/strategy-hook-runner-gBtU47tX.d.ts +16 -0
  406. package/dist/strategy-hook-runner-zmdIYOmQ.js +110 -0
  407. package/dist/token-counter-BD1f48Km.js +73 -0
  408. package/dist/trace-1t1n_wUm.d.ts +86 -0
  409. package/dist/types-DxKqU60b.d.ts +477 -0
  410. package/dist/types-pVomjzqR.d.ts +132 -0
  411. package/dist/unplaced-candidate-migration-CbQHzcEM.js +940 -0
  412. package/dist/utils-Ctb9aevJ.d.ts +34 -0
  413. package/drizzle/0000_initial.sql +10 -0
  414. package/drizzle/0001_virtual_tables.sql +34 -0
  415. package/drizzle/0002_add_indexes.sql +11 -0
  416. package/drizzle/0003_content_hash_lookup_index.sql +2 -0
  417. package/drizzle/0004_chunk_swap.sql +60 -0
  418. package/drizzle/0005_drop_legacy_vec_fts.sql +10 -0
  419. package/drizzle/0006_fts_simple.sql +45 -0
  420. package/drizzle/0007_restore_simple_fts.sql +40 -0
  421. package/drizzle/0008_widen_memory_hash_unique_index.sql +4 -0
  422. package/drizzle/0009_memory_telemetry.sql +109 -0
  423. package/drizzle/0010_provider_mappings.sql +27 -0
  424. package/drizzle/0011_db_optimization.sql +82 -0
  425. package/drizzle/0012_b_profile_lanes.sql +9 -0
  426. package/drizzle/0013_extraction_timestamps.sql +6 -0
  427. package/drizzle/0014_extraction_timestamp_source.sql +3 -0
  428. package/drizzle/0015_task_lifecycle_state.sql +101 -0
  429. package/drizzle/0016_task_lifecycle_legacy_migration.sql +144 -0
  430. package/drizzle/0017_unplaced_candidates.sql +15 -0
  431. package/drizzle/0018_rem_batch_chassis.sql +71 -0
  432. package/drizzle/0019_profile_recovery_entries.sql +17 -0
  433. package/drizzle/0020_rem_scan_retry_progress.down.sql +14 -0
  434. package/drizzle/0020_rem_scan_retry_progress.sql +24 -0
  435. package/drizzle/0021_rem_two_facet_storage.down.sql +14 -0
  436. package/drizzle/0021_rem_two_facet_storage.sql +42 -0
  437. package/drizzle/0022_rem_facet_chunk_versions.down.sql +4 -0
  438. package/drizzle/0022_rem_facet_chunk_versions.sql +4 -0
  439. package/drizzle/0023_rem_defect_ledger.sql +40 -0
  440. package/drizzle/0024_rem_unbuilt_foundations.down.sql +13 -0
  441. package/drizzle/0024_rem_unbuilt_foundations.sql +65 -0
  442. package/drizzle/0025_rem_journal_operation_constraint.sql +28 -0
  443. package/drizzle/0026_rem_journal_detail.sql +1 -0
  444. package/drizzle/0027_legacy_nodix_namespace.sql +3 -0
  445. package/drizzle/0028_memory_timezone.sql +23 -0
  446. package/drizzle/0029_rem_write_hash_symmetry.sql +17 -0
  447. package/drizzle/0030_atomic_memory_additive.sql +105 -0
  448. package/drizzle/0031_atomic_extraction_ledger.sql +23 -0
  449. package/drizzle/0032_atomic_memory_entities.sql +12 -0
  450. package/drizzle/0033_todo_own_store.sql +99 -0
  451. package/drizzle/meta/0000_snapshot.json +87 -0
  452. package/drizzle/meta/_journal.json +244 -0
  453. package/generated/rem-operations.json +1 -0
  454. package/package.json +126 -4
  455. package/scripts/download-simple-tokenizer.mjs +254 -0
  456. package/settings.default.json +243 -0
  457. package/skills/extract-atomic-memory/SKILL.md +298 -0
  458. package/skills/extract-atomic-memory/references/account-for-turns.md +9 -0
  459. package/skills/extract-atomic-memory/references/calendar-meaning.md +64 -0
  460. package/skills/extract-atomic-memory/references/capture.md +120 -0
  461. package/skills/extract-atomic-memory/references/enrichment.md +92 -0
  462. package/skills/extract-atomic-memory/references/missing-durable-half.md +6 -0
  463. package/skills/extract-atomic-memory/references/progress-classification.md +21 -0
  464. package/skills/extract-atomic-memory/references/resolve-subject.md +19 -0
  465. package/skills/extract-atomic-memory/references/surrounding-context.md +10 -0
  466. package/skills/extract-atomic-memory/references/user-subject-guard.md +29 -0
  467. package/skills/judge-group-closure/SKILL.md +25 -0
  468. package/skills/judge-rem-memory-updates/SKILL.md +56 -0
  469. package/skills/judge-rem-memory-updates/agents/openai.yaml +4 -0
  470. package/skills/judge-retired-position/SKILL.md +25 -0
  471. package/skills/judge-task-lifecycle/SKILL.md +45 -0
  472. package/skills/key-state-attribute/SKILL.md +16 -0
  473. package/skills/resolve-entity-identity/SKILL.md +24 -0
  474. package/skills/resolve-relative-time/SKILL.md +22 -0
  475. package/sqlite-extensions/LICENSE-simple-tokenizer +28 -0
  476. package/sqlite-extensions/LICENSE-sqlite-vec +21 -0
  477. package/sqlite-extensions/linux-arm64/vec0.so +0 -0
  478. package/sqlite-extensions/linux-x64/vec0.so +0 -0
@@ -0,0 +1,721 @@
1
+ import { MAX_LIST_LIMIT } from "./internal/config/index.js";
2
+ import { Y as FIXED_MEMORY_ROW_PATH_PATTERN, at as FIXED_PROTOCOL_VALUE_66, ht as FIXED_PROTOCOL_VALUE_76, it as FIXED_PROTOCOL_VALUE_65, ot as FIXED_PROTOCOL_VALUE_67, pt as FIXED_PROTOCOL_VALUE_74, st as FIXED_PROTOCOL_VALUE_68, wt as PERSISTED_PROVIDER_SYSTEM } from "./signed-registry-constants-yq3DlG3B.js";
3
+ import { StorageError } from "./internal/engine/shared/errors.js";
4
+ import { s as parseInsightMetadata } from "./memory-metadata-codec-DL1sbJiN.js";
5
+ import { clampInt } from "./internal/engine/shared/utils.js";
6
+ import { listCanonicalMemoryFiles, readCanonicalMemoryFile, searchCanonicalMemoryFiles } from "./internal/engine/provider/canonical-memory-corpus.js";
7
+ import { isProviderRowId, providerRowPath, renderProviderRowMemory } from "./internal/engine/provider/provider-row-renderer.js";
8
+ import { createLogger, currentLogContext, privateLogReference, withLogContext } from "@snoai/utils/logger";
9
+ import { resolve } from "node:path";
10
+ import { createUUIDv7, isLowercaseCanonicalUUIDv7 } from "@snoai/common-core";
11
+ import { bootstrapIdentity } from "@snoai/observability";
12
+ import { randomUUID } from "node:crypto";
13
+ //#region src/engine/provider/provider-authority.ts
14
+ /** @file provider-authority.ts
15
+ * @purpose Resolves SnoStationMem external project/agent keys to internal provider authority.
16
+ * @boundary SQLite mapping tables and project-agent membership checks.
17
+ */
18
+ function validateAuthorityInput(input) {
19
+ const userId = input.trustedUserId.trim();
20
+ if (userId.length === 0) throw new StorageError("Provider authority userId is required");
21
+ if (!isLowercaseCanonicalUUIDv7(userId)) throw new StorageError("trusted userId must be a lowercase UUID-v7");
22
+ if (input.externalSystem !== "openclaw") throw new StorageError(FIXED_PROTOCOL_VALUE_76);
23
+ const projectKey = input.projectKey.trim();
24
+ if (projectKey.length === 0) throw new StorageError("Provider authority projectKey is required");
25
+ const agentKey = input.agentKey.trim();
26
+ if (agentKey.length === 0) throw new StorageError("Provider authority agentKey is required");
27
+ return {
28
+ userId,
29
+ projectKey,
30
+ agentKey
31
+ };
32
+ }
33
+ function selectProjectMapping(store, userId, projectKey) {
34
+ return store.sqlite.prepare(FIXED_PROTOCOL_VALUE_65).get(userId, projectKey);
35
+ }
36
+ function selectAgentMapping(store, userId, agentKey) {
37
+ return store.sqlite.prepare(FIXED_PROTOCOL_VALUE_66).get(userId, agentKey);
38
+ }
39
+ function ensureProjectMapping(store, userId, projectKey) {
40
+ const existing = selectProjectMapping(store, userId, projectKey);
41
+ if (existing) return {
42
+ projectId: existing.project_id,
43
+ created: false
44
+ };
45
+ const projectId = createUUIDv7();
46
+ store.sqlite.prepare(FIXED_PROTOCOL_VALUE_67).run(userId, projectKey, projectId, Date.now());
47
+ const winner = selectProjectMapping(store, userId, projectKey);
48
+ if (!winner) throw new StorageError("Provider project mapping insert did not persist");
49
+ return {
50
+ projectId: winner.project_id,
51
+ created: winner.project_id === projectId
52
+ };
53
+ }
54
+ function ensureAgentMapping(store, userId, agentKey) {
55
+ const existing = selectAgentMapping(store, userId, agentKey);
56
+ if (existing) return existing.agent_id;
57
+ const agentId = createUUIDv7();
58
+ store.sqlite.prepare(FIXED_PROTOCOL_VALUE_68).run(userId, agentKey, agentId, Date.now());
59
+ const winner = selectAgentMapping(store, userId, agentKey);
60
+ if (!winner) throw new StorageError("Provider agent mapping insert did not persist");
61
+ return winner.agent_id;
62
+ }
63
+ function hasMembership(store, userId, projectId, agentId) {
64
+ return store.sqlite.prepare("SELECT 1 FROM nodix_provider_project_agents WHERE user_id = ? AND project_id = ? AND agent_id = ? LIMIT 1").get(userId, projectId, agentId) !== void 0;
65
+ }
66
+ function insertMembership(store, userId, projectId, agentId) {
67
+ store.sqlite.prepare("INSERT OR IGNORE INTO nodix_provider_project_agents(user_id, project_id, agent_id, created_at_ms) VALUES (?, ?, ?, ?)").run(userId, projectId, agentId, Date.now());
68
+ }
69
+ async function resolveProviderAuthority(store, input) {
70
+ const { userId, projectKey, agentKey } = validateAuthorityInput(input);
71
+ return store.writeMutex.runExclusive(() => {
72
+ let resolved;
73
+ store.sqlite.transaction(() => {
74
+ const project = ensureProjectMapping(store, userId, projectKey);
75
+ const agentId = ensureAgentMapping(store, userId, agentKey);
76
+ insertMembership(store, userId, project.projectId, agentId);
77
+ resolved = {
78
+ userId,
79
+ projectId: project.projectId,
80
+ agentId
81
+ };
82
+ }).immediate();
83
+ if (!resolved) throw new StorageError("Provider authority resolution failed");
84
+ return resolved;
85
+ });
86
+ }
87
+ async function readProviderAuthority(store, input) {
88
+ const { userId, projectKey, agentKey } = validateAuthorityInput(input);
89
+ return store.writeMutex.runExclusive(() => {
90
+ const project = selectProjectMapping(store, userId, projectKey);
91
+ if (!project) throw new StorageError("Provider project provisioning is required");
92
+ const agent = selectAgentMapping(store, userId, agentKey);
93
+ if (!agent || !hasMembership(store, userId, project.project_id, agent.agent_id)) throw new StorageError("Provider project-agent membership is required");
94
+ return {
95
+ userId,
96
+ projectId: project.project_id,
97
+ agentId: agent.agent_id
98
+ };
99
+ });
100
+ }
101
+ //#endregion
102
+ //#region src/engine/provider/provider-search-manager.ts
103
+ const diagnosticLog$1 = createLogger("sno-station-mem:provider-search-manager");
104
+ const ROW_PATH_RE = FIXED_MEMORY_ROW_PATH_PATTERN;
105
+ const DEFAULT_SEARCH_LIMIT = 10;
106
+ const DEFAULT_READ_LINES = 200;
107
+ const MAX_READ_LINES = 2e3;
108
+ const EMBEDDING_FAILURE_RETRY_MS = 3e4;
109
+ function scoreAtLeast(score, minScore) {
110
+ return Number.isFinite(score) && score >= minScore;
111
+ }
112
+ function lineBound(text, from, lines) {
113
+ const allLines = text.split("\n");
114
+ const start = clampInt(from ?? 1, 1, Math.max(allLines.length, 1));
115
+ const requested = clampInt(lines ?? DEFAULT_READ_LINES, 1, MAX_READ_LINES);
116
+ const endExclusive = Math.min(start - 1 + requested, allLines.length);
117
+ const truncated = endExclusive < allLines.length;
118
+ return {
119
+ text: allLines.slice(start - 1, endExclusive).join("\n"),
120
+ truncated,
121
+ from: start,
122
+ lines: requested,
123
+ ...truncated ? { nextFrom: endExclusive + 1 } : {}
124
+ };
125
+ }
126
+ function mapSearchResult(result, source) {
127
+ const rendered = renderProviderRowMemory(result.entry);
128
+ const snippet = result.snippet && result.snippet.length > 0 ? result.snippet : result.entry.text;
129
+ return {
130
+ path: providerRowPath(result.entry.id),
131
+ startLine: 1,
132
+ endLine: rendered.split("\n").length,
133
+ score: result.score,
134
+ ...source === "semantic" ? { vectorScore: result.score } : { textScore: result.score },
135
+ snippet,
136
+ source: "memory",
137
+ citation: providerRowPath(result.entry.id)
138
+ };
139
+ }
140
+ function readCount(value) {
141
+ if (!value || typeof value !== "object") return 0;
142
+ const count = value.count;
143
+ return typeof count === "number" ? count : 0;
144
+ }
145
+ var SnoStationMemProviderSearchManager = class {
146
+ options;
147
+ cachedEmbeddingAvailability = null;
148
+ embeddingRetryAfterMs = 0;
149
+ authorizedCanonicalPaths = /* @__PURE__ */ new Set();
150
+ closed = false;
151
+ constructor(options) {
152
+ this.options = options;
153
+ }
154
+ async search(query, opts = {}) {
155
+ return withLogContext({ operation_id: currentLogContext().operation_id ?? randomUUID() }, async () => {
156
+ const started = performance.now();
157
+ let outcome = "failed";
158
+ let fallback = "none";
159
+ let semanticCount;
160
+ let keywordCount;
161
+ let served = [];
162
+ let failure;
163
+ const canonicalDiagnostics = {
164
+ io_failure_count: 0,
165
+ unavailable_file_count: 0
166
+ };
167
+ try {
168
+ this.assertOpen();
169
+ if (opts.signal?.aborted) throw new Error("Provider memory search aborted");
170
+ if (opts.sources && !opts.sources.includes("memory")) {
171
+ outcome = "skipped";
172
+ return [];
173
+ }
174
+ const maxResults = clampInt(opts.maxResults ?? DEFAULT_SEARCH_LIMIT, 1, MAX_LIST_LIMIT);
175
+ const minScore = opts.minScore ?? 0;
176
+ const searchOptions = {
177
+ limit: maxResults,
178
+ minScore,
179
+ projectIdFilter: [this.options.identity.projectId],
180
+ excludeInvalidatedBefore: Date.now(),
181
+ includeRefused: true
182
+ };
183
+ opts.onDebug?.({
184
+ backend: "qmd",
185
+ effectiveMode: "sno-station-mem-row-semantic"
186
+ });
187
+ let rowResults = [];
188
+ const cachedEmbeddingFailure = Date.now() < this.embeddingRetryAfterMs;
189
+ if (!await this.probeVectorAvailability() || cachedEmbeddingFailure) {
190
+ fallback = cachedEmbeddingFailure ? "cached_embedding_failure" : "vector_unavailable";
191
+ opts.onDebug?.({
192
+ backend: "qmd",
193
+ effectiveMode: "sno-station-mem-row-keyword",
194
+ fallback: "semantic-unavailable"
195
+ });
196
+ } else try {
197
+ const vector = await this.options.store.embedder.embed(query);
198
+ this.cachedEmbeddingAvailability = {
199
+ ok: true,
200
+ checked: true,
201
+ cached: false,
202
+ checkedAtMs: Date.now()
203
+ };
204
+ this.embeddingRetryAfterMs = 0;
205
+ const semantic = await this.options.store.searchSemantic(vector, searchOptions);
206
+ semanticCount = semantic.length;
207
+ const filteredSemantic = this.filterAuthorized(semantic, minScore);
208
+ if (filteredSemantic.length > 0) rowResults = filteredSemantic.map((result) => mapSearchResult(result, "semantic"));
209
+ } catch (error) {
210
+ failure = error;
211
+ fallback = "semantic_failed";
212
+ const checkedAtMs = Date.now();
213
+ this.cachedEmbeddingAvailability = {
214
+ ok: false,
215
+ error: error instanceof Error ? error.message : String(error),
216
+ checked: true,
217
+ cached: false,
218
+ checkedAtMs
219
+ };
220
+ this.embeddingRetryAfterMs = checkedAtMs + EMBEDDING_FAILURE_RETRY_MS;
221
+ opts.onDebug?.({
222
+ backend: "qmd",
223
+ effectiveMode: "sno-station-mem-row-keyword",
224
+ fallback: "semantic-unavailable"
225
+ });
226
+ }
227
+ if (rowResults.length === 0) {
228
+ if (fallback === "none") fallback = "semantic_empty";
229
+ const keyword = await this.options.store.searchKeyword(query, searchOptions);
230
+ keywordCount = keyword.length;
231
+ rowResults = this.filterAuthorized(keyword, minScore).map((result) => mapSearchResult(result, "keyword"));
232
+ }
233
+ const canonicalResults = await this.searchCanonical(query, maxResults, minScore, canonicalDiagnostics);
234
+ served = [...rowResults, ...canonicalResults].sort((left, right) => right.score - left.score || left.path.localeCompare(right.path)).slice(0, maxResults);
235
+ outcome = fallback === "semantic_failed" || fallback === "cached_embedding_failure" || canonicalDiagnostics.io_failure_count > 0 ? "partial" : served.length ? "success" : "empty_success";
236
+ return served;
237
+ } catch (error) {
238
+ failure = error;
239
+ outcome = opts.signal?.aborted ? "cancelled" : "failed";
240
+ throw error;
241
+ } finally {
242
+ diagnosticLog$1[outcome === "failed" ? "error" : "info"]("Provider memory search completed", {
243
+ outcome,
244
+ fallback_reason: fallback,
245
+ error: failure,
246
+ duration_ms: performance.now() - started,
247
+ input_size: query.length,
248
+ scope_count: 1,
249
+ semantic_candidate_count: semanticCount ?? "unavailable",
250
+ keyword_candidate_count: keywordCount ?? "unavailable",
251
+ served_count: served.length,
252
+ canonical_io_failure_count: canonicalDiagnostics.io_failure_count,
253
+ canonical_unavailable_file_count: canonicalDiagnostics.unavailable_file_count,
254
+ canonical_available: this.options.workspaceDir !== void 0,
255
+ served_ids: served.flatMap((row) => {
256
+ const id = ROW_PATH_RE.exec(row.path)?.[1];
257
+ return id ? [id] : [];
258
+ }).slice(0, 128),
259
+ store_reference: privateLogReference(this.options.store.dbPath)
260
+ }, {
261
+ event_name: "memory.provider.search.completed",
262
+ file: "packages/memory/src/engine/provider/provider-search-manager.ts",
263
+ function: "SnoStationMemProviderSearchManager.search",
264
+ site_id: "memory.provider.search.completed"
265
+ });
266
+ }
267
+ });
268
+ }
269
+ async readFile(params) {
270
+ return withLogContext({ operation_id: currentLogContext().operation_id ?? randomUUID() }, async () => {
271
+ const started = performance.now();
272
+ let outcome = "failed";
273
+ let failure;
274
+ let reason = "read_failed";
275
+ const canonicalDiagnostic = {};
276
+ try {
277
+ this.assertOpen();
278
+ const memoryId = ROW_PATH_RE.exec(params.relPath)?.[1];
279
+ if (memoryId) {
280
+ const entry = this.options.store.getById(memoryId);
281
+ if (!this.isAuthorizedEntry(entry)) {
282
+ outcome = "refused";
283
+ reason = entry === void 0 ? "row_missing" : "row_not_authorized";
284
+ throw new Error("Provider memory row not found or not authorized");
285
+ }
286
+ const bounded = lineBound(renderProviderRowMemory(entry), params.from, params.lines);
287
+ outcome = "success";
288
+ reason = "row_read";
289
+ return {
290
+ ...bounded,
291
+ path: providerRowPath(entry.id)
292
+ };
293
+ }
294
+ const canonical = await this.readAuthorizedCanonical(params, canonicalDiagnostic);
295
+ outcome = "success";
296
+ reason = "canonical_read";
297
+ return {
298
+ text: canonical.text,
299
+ path: canonical.path,
300
+ ...canonical.truncated ? { truncated: canonical.truncated } : {},
301
+ ...canonical.from ? { from: canonical.from } : {},
302
+ ...canonical.lines ? { lines: canonical.lines } : {},
303
+ ...canonical.nextFrom ? { nextFrom: canonical.nextFrom } : {}
304
+ };
305
+ } catch (error) {
306
+ failure = error;
307
+ if (canonicalDiagnostic.reason) {
308
+ reason = canonicalDiagnostic.reason;
309
+ outcome = reason === "canonical_not_authorized" ? "refused" : "failed";
310
+ failure = canonicalDiagnostic.error ?? error;
311
+ }
312
+ throw error;
313
+ } finally {
314
+ diagnosticLog$1[outcome === "failed" ? "error" : "info"]("Provider memory read completed", {
315
+ outcome,
316
+ reason_code: reason,
317
+ error: failure,
318
+ duration_ms: performance.now() - started,
319
+ artifact_reference: privateLogReference(params.relPath)
320
+ }, {
321
+ event_name: "memory.provider.read.completed",
322
+ file: "packages/memory/src/engine/provider/provider-search-manager.ts",
323
+ function: "SnoStationMemProviderSearchManager.readFile",
324
+ site_id: "memory.provider.read.completed"
325
+ });
326
+ }
327
+ });
328
+ }
329
+ status() {
330
+ const started = performance.now();
331
+ try {
332
+ this.assertOpen();
333
+ const vectorStoreAvailable = this.hasVectorStore();
334
+ const embeddingAvailable = this.cachedEmbeddingAvailability?.ok === true;
335
+ const semanticAvailable = vectorStoreAvailable && embeddingAvailable;
336
+ const memoryCount = readCount(this.options.store.sqlite.prepare("SELECT COUNT(*) AS count FROM nodix_memories WHERE project_id = ?").get(this.options.identity.projectId));
337
+ const chunkCount = readCount(this.options.store.sqlite.prepare("SELECT COUNT(*) AS count FROM nodix_memory_chunks c JOIN nodix_memories m ON m.id = c.memory_id WHERE m.project_id = ?").get(this.options.identity.projectId));
338
+ diagnosticLog$1.debug("Provider memory status read", {
339
+ outcome: "success",
340
+ memory_count: memoryCount,
341
+ chunk_count: chunkCount,
342
+ vector_available: vectorStoreAvailable,
343
+ embedding_available: embeddingAvailable,
344
+ duration_ms: performance.now() - started
345
+ }, {
346
+ event_name: "memory.provider.status.completed",
347
+ file: "packages/memory/src/engine/provider/provider-search-manager.ts",
348
+ function: "SnoStationMemProviderSearchManager.status",
349
+ site_id: "memory.provider.status.completed"
350
+ });
351
+ return {
352
+ backend: "qmd",
353
+ provider: FIXED_PROTOCOL_VALUE_74,
354
+ model: this.options.store.embedder.model,
355
+ files: memoryCount,
356
+ chunks: chunkCount,
357
+ dbPath: this.options.store.dbPath,
358
+ ...this.options.workspaceDir ? { workspaceDir: this.options.workspaceDir } : {},
359
+ sources: ["memory"],
360
+ sourceCounts: [{
361
+ source: "memory",
362
+ files: memoryCount,
363
+ chunks: chunkCount
364
+ }],
365
+ fts: {
366
+ enabled: true,
367
+ available: this.options.store.hasFtsSupport
368
+ },
369
+ vector: {
370
+ enabled: true,
371
+ storeAvailable: vectorStoreAvailable,
372
+ semanticAvailable,
373
+ available: semanticAvailable,
374
+ dims: this.options.store.vectorDim,
375
+ ...this.cachedEmbeddingAvailability?.ok === false ? { loadError: this.cachedEmbeddingAvailability.error ?? "embedding unavailable" } : {}
376
+ },
377
+ custom: {
378
+ userId: this.options.identity.userId,
379
+ projectId: this.options.identity.projectId,
380
+ agentId: this.options.identity.agentId
381
+ }
382
+ };
383
+ } catch (error) {
384
+ diagnosticLog$1.error("Provider memory status failed", {
385
+ outcome: "failed",
386
+ error,
387
+ duration_ms: performance.now() - started
388
+ }, {
389
+ event_name: "memory.provider.status.completed",
390
+ file: "packages/memory/src/engine/provider/provider-search-manager.ts",
391
+ function: "SnoStationMemProviderSearchManager.status",
392
+ site_id: "memory.provider.status.failed"
393
+ });
394
+ throw error;
395
+ }
396
+ }
397
+ async sync(params = {}) {
398
+ this.assertOpen();
399
+ if (!this.options.workspaceDir) {
400
+ params.progress?.({
401
+ completed: 1,
402
+ total: 1,
403
+ label: "sno-station-mem rows are live"
404
+ });
405
+ return;
406
+ }
407
+ const canonicalFiles = await listCanonicalMemoryFiles(this.options.workspaceDir);
408
+ for (const file of canonicalFiles) this.authorizedCanonicalPaths.add(file.path);
409
+ params.progress?.({
410
+ completed: canonicalFiles.length,
411
+ total: canonicalFiles.length,
412
+ label: "canonical memory files indexed"
413
+ });
414
+ }
415
+ getCachedEmbeddingAvailability() {
416
+ return this.cachedEmbeddingAvailability;
417
+ }
418
+ async probeEmbeddingAvailability() {
419
+ this.assertOpen();
420
+ const checkedAtMs = Date.now();
421
+ try {
422
+ await this.options.store.embedder.embed("provider availability probe");
423
+ this.cachedEmbeddingAvailability = {
424
+ ok: true,
425
+ checked: true,
426
+ cached: false,
427
+ checkedAtMs
428
+ };
429
+ this.embeddingRetryAfterMs = 0;
430
+ } catch (error) {
431
+ this.cachedEmbeddingAvailability = {
432
+ ok: false,
433
+ error: error instanceof Error ? error.message : String(error),
434
+ checked: true,
435
+ cached: false,
436
+ checkedAtMs
437
+ };
438
+ this.embeddingRetryAfterMs = checkedAtMs + EMBEDDING_FAILURE_RETRY_MS;
439
+ }
440
+ return this.cachedEmbeddingAvailability;
441
+ }
442
+ async probeVectorStoreAvailability() {
443
+ return this.probeVectorAvailability();
444
+ }
445
+ async probeVectorAvailability() {
446
+ this.assertOpen();
447
+ return this.hasVectorStore();
448
+ }
449
+ async close() {
450
+ const alreadyClosed = this.closed;
451
+ this.closed = true;
452
+ diagnosticLog$1.debug("Provider memory manager closed", {
453
+ outcome: "success",
454
+ already_closed: alreadyClosed
455
+ }, {
456
+ event_name: "memory.provider.manager.closed",
457
+ file: "packages/memory/src/engine/provider/provider-search-manager.ts",
458
+ function: "SnoStationMemProviderSearchManager.close",
459
+ site_id: "memory.provider.manager.closed"
460
+ });
461
+ }
462
+ hasVectorStore() {
463
+ return !!this.options.store.sqlite.prepare("SELECT 1 AS ok FROM sqlite_master WHERE name = 'nodix_memory_chunk_vectors' LIMIT 1").get();
464
+ }
465
+ assertOpen() {
466
+ if (this.closed) throw new Error("Provider memory manager is closed");
467
+ }
468
+ filterAuthorized(results, minScore) {
469
+ return results.filter((result) => this.isAuthorizedEntry(result.entry) && isProviderRowId(result.entry.id) && scoreAtLeast(result.score, minScore));
470
+ }
471
+ isAuthorizedEntry(entry) {
472
+ if (entry?.projectId !== this.options.identity.projectId) return false;
473
+ try {
474
+ return parseInsightMetadata(entry.metadata, entry).invalidated_at === void 0;
475
+ } catch {
476
+ return false;
477
+ }
478
+ }
479
+ async searchCanonical(query, maxResults, minScore, diagnostics) {
480
+ if (!this.options.workspaceDir) return [];
481
+ const filtered = (await searchCanonicalMemoryFiles({
482
+ diagnostics,
483
+ workspaceDir: this.options.workspaceDir,
484
+ query,
485
+ maxResults
486
+ })).filter((result) => scoreAtLeast(result.score, minScore));
487
+ for (const result of filtered) this.authorizedCanonicalPaths.add(result.path);
488
+ return filtered;
489
+ }
490
+ async readAuthorizedCanonical(params, diagnostics) {
491
+ if (!this.options.workspaceDir || !this.authorizedCanonicalPaths.has(params.relPath)) {
492
+ if (diagnostics) diagnostics.reason = "canonical_not_authorized";
493
+ throw new Error("Provider canonical memory file not found or not authorized");
494
+ }
495
+ try {
496
+ return await readCanonicalMemoryFile({
497
+ workspaceDir: this.options.workspaceDir,
498
+ relPath: params.relPath,
499
+ from: params.from,
500
+ lines: params.lines
501
+ });
502
+ } catch (error) {
503
+ if (diagnostics) {
504
+ diagnostics.reason = "canonical_read_unavailable";
505
+ diagnostics.error = error;
506
+ }
507
+ throw new Error("Provider canonical memory file not found or not authorized");
508
+ }
509
+ }
510
+ };
511
+ //#endregion
512
+ //#region src/engine/provider/provider-registration.ts
513
+ const diagnosticLog = createLogger("sno-station-mem:provider-registration");
514
+ let machineUserId;
515
+ /** The configured provider.userId, else this machine's identity (the same id every skin sees). */
516
+ function readTrustedUserId(config) {
517
+ const configured = config.provider.userId;
518
+ let trimmed;
519
+ if (typeof configured === "string" && configured.trim().length > 0) trimmed = configured.trim();
520
+ else {
521
+ machineUserId ??= bootstrapIdentity().machine_uuid;
522
+ trimmed = machineUserId;
523
+ }
524
+ if (!isLowercaseCanonicalUUIDv7(trimmed)) throw new Error("sno-station-mem provider userId must be a lowercase UUID-v7");
525
+ return trimmed;
526
+ }
527
+ function readConfiguredAgents(cfg) {
528
+ const entries = cfg.agents?.entries;
529
+ if (entries && Object.keys(entries).length > 0) return Object.entries(entries).filter(([id]) => id.length > 0).map(([id, entry]) => ({
530
+ ...entry,
531
+ id
532
+ }));
533
+ return cfg.agents?.list ?? [];
534
+ }
535
+ function readAgentWorkspace(cfg, agentId) {
536
+ const agent = readConfiguredAgents(cfg).find((entry) => entry.id === agentId);
537
+ if (!agent) throw new Error("sno-station-mem provider requires a configured sno-station-mem agent");
538
+ const workspace = agent?.workspace ?? cfg.agents?.defaults?.workspace;
539
+ if (typeof workspace !== "string" || workspace.trim().length === 0) throw new Error("sno-station-mem provider requires an explicit sno-station-mem agent workspace");
540
+ return resolve(workspace);
541
+ }
542
+ async function resolveProviderIdentity(params) {
543
+ const userId = readTrustedUserId(params.config);
544
+ const workspaceDir = readAgentWorkspace(params.cfg, params.agentId);
545
+ return {
546
+ identity: await resolveProviderAuthority(params.store, {
547
+ trustedUserId: userId,
548
+ externalSystem: PERSISTED_PROVIDER_SYSTEM,
549
+ projectKey: workspaceDir,
550
+ agentKey: params.agentId
551
+ }),
552
+ workspaceDir
553
+ };
554
+ }
555
+ async function readProviderIdentity(params) {
556
+ const userId = readTrustedUserId(params.config);
557
+ const workspaceDir = readAgentWorkspace(params.cfg, params.agentId);
558
+ return {
559
+ identity: await readProviderAuthority(params.store, {
560
+ trustedUserId: userId,
561
+ externalSystem: PERSISTED_PROVIDER_SYSTEM,
562
+ projectKey: workspaceDir,
563
+ agentKey: params.agentId
564
+ }),
565
+ workspaceDir
566
+ };
567
+ }
568
+ function createMemoryRuntime(params) {
569
+ const managers = /* @__PURE__ */ new Map();
570
+ const failedClosingManagers = /* @__PURE__ */ new Map();
571
+ function managerKey(identity, workspaceDir) {
572
+ return `${identity.userId}:${identity.projectId}:${identity.agentId}:${workspaceDir}`;
573
+ }
574
+ function rememberFailedClose(key, manager) {
575
+ const existing = failedClosingManagers.get(key);
576
+ if (existing) {
577
+ existing.add(manager);
578
+ return;
579
+ }
580
+ failedClosingManagers.set(key, /* @__PURE__ */ new Set([manager]));
581
+ }
582
+ async function closeFailedManagers(key) {
583
+ const failed = failedClosingManagers.get(key);
584
+ if (!failed) return;
585
+ for (const manager of Array.from(failed)) {
586
+ await manager.close();
587
+ failed.delete(manager);
588
+ }
589
+ if (failed.size === 0) failedClosingManagers.delete(key);
590
+ }
591
+ return {
592
+ async getMemorySearchManager({ cfg, agentId }) {
593
+ const started = performance.now();
594
+ let outcome = "success";
595
+ let failure;
596
+ try {
597
+ const resolved = await resolveProviderIdentity({
598
+ cfg,
599
+ config: params.config,
600
+ store: params.store,
601
+ agentId
602
+ });
603
+ const key = managerKey(resolved.identity, resolved.workspaceDir);
604
+ const existing = managers.get(key);
605
+ if (existing) return { manager: existing };
606
+ const manager = new SnoStationMemProviderSearchManager({
607
+ store: params.store,
608
+ identity: resolved.identity,
609
+ workspaceDir: resolved.workspaceDir
610
+ });
611
+ const winner = managers.get(key);
612
+ if (winner) {
613
+ await manager.close();
614
+ return { manager: winner };
615
+ }
616
+ managers.set(key, manager);
617
+ return { manager };
618
+ } catch (error) {
619
+ outcome = "failed";
620
+ failure = error;
621
+ return {
622
+ manager: null,
623
+ error: error instanceof Error ? error.message : String(error)
624
+ };
625
+ } finally {
626
+ diagnosticLog[outcome === "failed" ? "error" : "debug"]("Provider memory manager resolved", {
627
+ outcome,
628
+ error: failure,
629
+ duration_ms: performance.now() - started
630
+ }, {
631
+ event_name: "memory.provider.manager.resolved",
632
+ file: "packages/memory/src/engine/provider/provider-registration.ts",
633
+ function: "createMemoryRuntime.getMemorySearchManager",
634
+ site_id: "memory.provider.manager.resolved"
635
+ });
636
+ }
637
+ },
638
+ resolveMemoryBackendConfig() {
639
+ return { backend: "qmd" };
640
+ },
641
+ async closeMemorySearchManager({ cfg, agentId }) {
642
+ let resolved;
643
+ try {
644
+ resolved = await resolveProviderIdentity({
645
+ cfg,
646
+ config: params.config,
647
+ store: params.store,
648
+ agentId
649
+ });
650
+ } catch (error) {
651
+ diagnosticLog.warn("Provider manager close lacks identity", {
652
+ outcome: "skipped",
653
+ error
654
+ }, {
655
+ event_name: "memory.provider.manager.close.skipped",
656
+ file: "packages/memory/src/engine/provider/provider-registration.ts",
657
+ function: "createMemoryRuntime.closeMemorySearchManager",
658
+ site_id: "memory.provider.manager.close.skipped"
659
+ });
660
+ return;
661
+ }
662
+ const key = managerKey(resolved.identity, resolved.workspaceDir);
663
+ await closeFailedManagers(key);
664
+ const manager = managers.get(key);
665
+ if (!manager) return;
666
+ managers.delete(key);
667
+ try {
668
+ await manager.close();
669
+ } catch (error) {
670
+ if (managers.has(key)) rememberFailedClose(key, manager);
671
+ else managers.set(key, manager);
672
+ diagnosticLog.warn("Provider manager close retained for retry", {
673
+ outcome: "failed",
674
+ error
675
+ }, {
676
+ event_name: "memory.provider.manager.close.failed",
677
+ file: "packages/memory/src/engine/provider/provider-registration.ts",
678
+ function: "createMemoryRuntime.closeMemorySearchManager",
679
+ site_id: "memory.provider.manager.close.failed"
680
+ });
681
+ throw error;
682
+ }
683
+ },
684
+ async closeAllMemorySearchManagers() {
685
+ const started = performance.now();
686
+ let closedCount = 0;
687
+ let failure;
688
+ let failed = false;
689
+ try {
690
+ for (const failed of failedClosingManagers.values()) for (const manager of failed) {
691
+ await manager.close();
692
+ closedCount += 1;
693
+ }
694
+ failedClosingManagers.clear();
695
+ for (const manager of managers.values()) {
696
+ await manager.close();
697
+ closedCount += 1;
698
+ }
699
+ managers.clear();
700
+ } catch (error) {
701
+ failure = error;
702
+ failed = true;
703
+ throw error;
704
+ } finally {
705
+ diagnosticLog[failed ? "warn" : "debug"]("Provider managers shutdown completed", {
706
+ outcome: failed ? "partial" : "success",
707
+ closed_count: closedCount,
708
+ error: failure,
709
+ duration_ms: performance.now() - started
710
+ }, {
711
+ event_name: "memory.provider.managers.shutdown.completed",
712
+ file: "packages/memory/src/engine/provider/provider-registration.ts",
713
+ function: "createMemoryRuntime.closeAllMemorySearchManagers",
714
+ site_id: "memory.provider.managers.shutdown.completed"
715
+ });
716
+ }
717
+ }
718
+ };
719
+ }
720
+ //#endregion
721
+ export { readTrustedUserId as a, readProviderIdentity as i, readAgentWorkspace as n, resolveProviderIdentity as o, readConfiguredAgents as r, SnoStationMemProviderSearchManager as s, createMemoryRuntime as t };