@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,111 @@
1
+ import { z } from "zod";
2
+ import { createLogger } from "@snoai/utils/logger";
3
+ import { dirname, join } from "node:path";
4
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
+ //#region src/engine/telemetry/observe-ledger.ts
6
+ const log = createLogger("sno-station-mem:observe-ledger");
7
+ const rowSchema = z.object({
8
+ ts_ms: z.number().int().nonnegative(),
9
+ event_type: z.string(),
10
+ lane: z.string(),
11
+ project_id: z.string().min(1).optional(),
12
+ payload: z.record(z.string(), z.json())
13
+ });
14
+ function observeLedgerPath(profileDir) {
15
+ return join(profileDir, "observe", "ledger.jsonl");
16
+ }
17
+ function observeLedgerSyncedPath(profileDir) {
18
+ return join(profileDir, "observe", "ledger.synced");
19
+ }
20
+ function appendObserveLedgerRows(profileDir, rows) {
21
+ if (rows.length === 0) return;
22
+ const path = observeLedgerPath(profileDir);
23
+ mkdirSync(dirname(path), {
24
+ recursive: true,
25
+ mode: 448
26
+ });
27
+ appendFileSync(path, rows.map((row) => `${JSON.stringify(row)}\n`).join(""), { mode: 384 });
28
+ }
29
+ function warn(observe, message) {
30
+ if (observe.logger) observe.logger.warn(message);
31
+ else log.warn(message, void 0, {
32
+ event_name: "observe.ledger.failed",
33
+ file: "packages/memory/src/engine/telemetry/observe-ledger.ts",
34
+ function: "forwardObserveLedger",
35
+ site_id: "observe.ledger.failed"
36
+ });
37
+ }
38
+ async function reportRowFailure(observe, kind, row, error) {
39
+ const message = `observe.ledger:${kind} bytes ${row.start}-${row.end}: ${String(error)}`;
40
+ warn(observe, message);
41
+ try {
42
+ await observe.emitError?.(`observe.ledger:${kind}`, new Error(message));
43
+ } catch (reportError) {
44
+ warn(observe, `observe.ledger:error bytes ${row.start}-${row.end}: ${String(reportError)}`);
45
+ }
46
+ }
47
+ function consumeRows(profileDir, observe, batchSize) {
48
+ const syncedPath = observeLedgerSyncedPath(profileDir);
49
+ let offset = existsSync(syncedPath) ? Number(readFileSync(syncedPath, "utf8").trim()) : 0;
50
+ const path = observeLedgerPath(profileDir);
51
+ const rows = [];
52
+ if (!existsSync(path)) return {
53
+ rows,
54
+ offset
55
+ };
56
+ const ledger = readFileSync(path);
57
+ if (offset > ledger.length) {
58
+ warn(observe, `offset beyond ledger: ${offset} > ${ledger.length}`);
59
+ return {
60
+ rows,
61
+ offset
62
+ };
63
+ }
64
+ while (rows.length < batchSize) {
65
+ const newline = ledger.indexOf(10, offset);
66
+ if (newline === -1) break;
67
+ rows.push({
68
+ start: offset,
69
+ end: newline + 1,
70
+ text: ledger.toString("utf8", offset, newline)
71
+ });
72
+ offset = newline + 1;
73
+ }
74
+ if (rows.length) writeFileSync(syncedPath, String(offset), { mode: 384 });
75
+ return {
76
+ rows,
77
+ offset
78
+ };
79
+ }
80
+ async function forwardObserveLedger(options) {
81
+ const { profileDir, observe } = options;
82
+ const { rows, offset } = consumeRows(profileDir, observe, Math.min(50, Math.max(1, Math.trunc(options.batchSize ?? 50))));
83
+ let forwarded = 0;
84
+ for (const line of rows) {
85
+ let row;
86
+ try {
87
+ row = rowSchema.parse(JSON.parse(line.text));
88
+ } catch (error) {
89
+ await reportRowFailure(observe, "parse", line, error);
90
+ continue;
91
+ }
92
+ try {
93
+ if (await observe.tryEmit({
94
+ eventType: row.event_type,
95
+ payload: row.payload,
96
+ tsEdgeMs: row.ts_ms,
97
+ ...row.project_id ? { scope: { project_id: row.project_id } } : {}
98
+ })) forwarded++;
99
+ else await reportRowFailure(observe, "rejected", line, "tryEmit returned false");
100
+ } catch (error) {
101
+ await reportRowFailure(observe, "throw", line, error);
102
+ }
103
+ }
104
+ return {
105
+ status: rows.length === 0 ? "idle" : forwarded ? "forwarded" : "failed",
106
+ forwarded,
107
+ offset
108
+ };
109
+ }
110
+ //#endregion
111
+ export { appendObserveLedgerRows, forwardObserveLedger, observeLedgerPath, observeLedgerSyncedPath };
@@ -0,0 +1,2 @@
1
+ import { n as AgentLlmPort, r as AgentLlmRequest, t as AgentLlmCompletion } from "../../agent-llm-port-5oXgBpzJ.js";
2
+ export { AgentLlmCompletion, AgentLlmPort, AgentLlmRequest };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { a as LlmPreset, c as ResolvedLlmConfig, i as LlmClientConfig, o as LlmProvider, r as LlmClient, s as MemoryLlmRequest } from "../../plugin-config-schema-C0UUbOmG.js";
2
+ import { a as isTerminalLlmFailure, i as createLlmClient, n as LlmClientTerminalError, o as extractJsonFromResponse, r as ModelCallRefusedError, s as repairCommonJson, t as JSON_SYSTEM_CONTENT } from "../../llm-client-DOTSGzhe.js";
3
+ export { JSON_SYSTEM_CONTENT, type LlmClient, type LlmClientConfig, LlmClientTerminalError, type LlmPreset, type LlmProvider, type MemoryLlmRequest, ModelCallRefusedError, type ResolvedLlmConfig, createLlmClient, extractJsonFromResponse, isTerminalLlmFailure, repairCommonJson };
@@ -0,0 +1,3 @@
1
+ import { a as isTerminalLlmFailure, i as createLlmClient, n as LlmClientTerminalError, r as ModelCallRefusedError, t as JSON_SYSTEM_CONTENT } from "../../llm-client-B7Xoxqou.js";
2
+ import { a as repairCommonJson, r as extractJsonFromResponse } from "../../model-reply-text-CKopStP2.js";
3
+ export { JSON_SYSTEM_CONTENT, LlmClientTerminalError, ModelCallRefusedError, createLlmClient, extractJsonFromResponse, isTerminalLlmFailure, repairCommonJson };
@@ -0,0 +1,26 @@
1
+ //#region src/model/llm-failure.d.ts
2
+ /** @file llm-failure.ts
3
+ * @purpose The one place that decides what a failed LLM / host-model call means.
4
+ * @boundary Every caller that sees an HTTP status or error message from a model endpoint
5
+ * classifies it here; no other module compares status codes or error text itself.
6
+ */
7
+ export type LlmFailureCategory = "auth" | "credential-expired" | "credential-revoked" | "exhausted" | "throttle" | "transport" | "unknown";
8
+ export interface LlmFailure {
9
+ category: LlmFailureCategory;
10
+ /** Retrying the same endpoint with the same credential cannot succeed. */
11
+ terminal: boolean;
12
+ /** The endpoint itself is gone or refuses the caller; a fallback tier may not substitute. */
13
+ endpointRefused: boolean;
14
+ }
15
+ export declare function readErrorStatus(error: unknown): number | undefined;
16
+ export declare function readErrorMessage(error: unknown): string;
17
+ /** Classifies one failed model call from whatever the transport surfaced: a status, a message, or both. */
18
+ export declare function classifyLlmFailure(input: {
19
+ status?: number;
20
+ message?: string;
21
+ }): LlmFailure;
22
+ export declare function isCredentialFailure(category: LlmFailureCategory): boolean;
23
+ export declare function isTerminalLlmFailure(category: LlmFailureCategory): boolean;
24
+ /** A status worth one more attempt against the same endpoint. */
25
+ export declare function isTransientLlmStatus(status: number): boolean;
26
+ //#endregion
@@ -0,0 +1,63 @@
1
+ //#region src/model/llm-failure.ts
2
+ const CREDENTIAL_CATEGORIES = /* @__PURE__ */ new Set([
3
+ "auth",
4
+ "credential-expired",
5
+ "credential-revoked"
6
+ ]);
7
+ const TERMINAL_CATEGORIES = /* @__PURE__ */ new Set([...CREDENTIAL_CATEGORIES, "exhausted"]);
8
+ function readErrorStatus(error) {
9
+ if (typeof error !== "object" || error === null) return void 0;
10
+ if ("status" in error && typeof error.status === "number") return error.status;
11
+ if ("statusCode" in error && typeof error.statusCode === "number") return error.statusCode;
12
+ }
13
+ function readErrorMessage(error) {
14
+ if (error instanceof Error) return error.message;
15
+ if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") return error.message;
16
+ return String(error);
17
+ }
18
+ function isCredentialRevokedMessage(message) {
19
+ return /oauth token refresh failed for openai:.*\binvalid_grant\b.*\btoken revoked\b/i.test(message);
20
+ }
21
+ function isCredentialExpiredMessage(message) {
22
+ return /\bexpired access token\b/i.test(message);
23
+ }
24
+ function isAuthMessage(message) {
25
+ return /\b(?:401|403)\b/.test(message) || /unauthori[sz]ed/i.test(message) || /no api key found/i.test(message) || /(?:invalid|incorrect) api[- ]?key/i.test(message) || /(?:invalid|expired) (?:access |oauth )?token/i.test(message) || /(?:api[- ]?key|token).*(?:invalid|expired|rejected)/i.test(message) || /credential (?:is )?(?:invalid|expired|rejected)/i.test(message) || /no (?:valid )?credential (?:found|available|configured)/i.test(message) || /re-?authenticate/i.test(message) || /no authentication configured/i.test(message);
26
+ }
27
+ function isExhaustedMessage(message) {
28
+ return /you(?:'|’)ve reached your codex subscription usage limit/i.test(message);
29
+ }
30
+ function isThrottleMessage(message) {
31
+ return /\b429\b/.test(message) || /rate.?limit/i.test(message) || /quota/i.test(message);
32
+ }
33
+ function categoryOf(status, message) {
34
+ if (isCredentialRevokedMessage(message)) return "credential-revoked";
35
+ if (isCredentialExpiredMessage(message)) return "credential-expired";
36
+ if (status === 401 || status === 403 || isAuthMessage(message)) return "auth";
37
+ if (isExhaustedMessage(message)) return "exhausted";
38
+ if (status === 429 || isThrottleMessage(message)) return "throttle";
39
+ if (status !== void 0 && (status === 404 || status === 408 || status >= 500)) return "transport";
40
+ return "unknown";
41
+ }
42
+ /** Classifies one failed model call from whatever the transport surfaced: a status, a message, or both. */
43
+ function classifyLlmFailure(input) {
44
+ const category = categoryOf(input.status, input.message ?? "");
45
+ const terminal = TERMINAL_CATEGORIES.has(category);
46
+ return {
47
+ category,
48
+ terminal,
49
+ endpointRefused: terminal || input.status === 404 || input.status === 503
50
+ };
51
+ }
52
+ function isCredentialFailure(category) {
53
+ return CREDENTIAL_CATEGORIES.has(category);
54
+ }
55
+ function isTerminalLlmFailure(category) {
56
+ return TERMINAL_CATEGORIES.has(category);
57
+ }
58
+ /** A status worth one more attempt against the same endpoint. */
59
+ function isTransientLlmStatus(status) {
60
+ return status === 408 || status === 429 || status >= 500;
61
+ }
62
+ //#endregion
63
+ export { classifyLlmFailure, isCredentialFailure, isTerminalLlmFailure, isTransientLlmStatus, readErrorMessage, readErrorStatus };
@@ -0,0 +1,22 @@
1
+ import { l as ModelCallId, m as LlmRoutingConfigInput, p as LlmRoutingConfig } from "../../plugin-config-schema-C0UUbOmG.js";
2
+ //#region src/model/llm-mode-routing.d.ts
3
+ export type LlmTransport = "chat-completions" | "raw-completions" | "agent-host-seam";
4
+ export type LlmParser = "json" | "json-or-single-token-verdict" | "single-token-verdict" | "text";
5
+ export type LlmRouteTarget = {
6
+ tier: "agent" | "snoRemMem";
7
+ destination: "host" | "sno-gpu";
8
+ transport: LlmTransport;
9
+ parser: LlmParser;
10
+ };
11
+ export type LlmRouteOff = {
12
+ off: true;
13
+ reason: "configured-off";
14
+ };
15
+ export type LlmRouteDecision = LlmRouteTarget | LlmRouteOff;
16
+ export declare function pickLlmRoutingConfig(config: LlmRoutingConfigInput): LlmRoutingConfig;
17
+ export declare function resolveLlmRoute(input: {
18
+ callId: ModelCallId;
19
+ config: LlmRoutingConfigInput;
20
+ }): LlmRouteDecision;
21
+ //#endregion
22
+ export type { LlmRoutingConfig };
@@ -0,0 +1,37 @@
1
+ import { llmRoutingConfigSchema } from "../config/product-mode.js";
2
+ import { n as modelCallDestination, t as MODEL_CALLS } from "../../model-call-table-CspopkBg.js";
3
+ //#region src/model/llm-mode-routing.ts
4
+ /** @file llm-mode-routing.ts
5
+ * @purpose Resolve one model call id to its configured destination and transport.
6
+ */
7
+ function pickLlmRoutingConfig(config) {
8
+ return llmRoutingConfigSchema.parse({
9
+ mode: config.mode,
10
+ language: config.language,
11
+ modelCalls: config.modelCalls
12
+ });
13
+ }
14
+ function resolveLlmRoute(input) {
15
+ const routing = pickLlmRoutingConfig(input.config);
16
+ const call = MODEL_CALLS[input.callId];
17
+ if (!routing.modelCalls) throw new Error("modelCalls unavailable");
18
+ const destination = modelCallDestination(input.callId, routing.mode, routing.modelCalls);
19
+ if (destination === "off") return {
20
+ off: true,
21
+ reason: "configured-off"
22
+ };
23
+ if (destination === "host") return {
24
+ tier: "agent",
25
+ destination,
26
+ transport: call.transport.host,
27
+ parser: call.replyParser.host
28
+ };
29
+ return {
30
+ tier: "snoRemMem",
31
+ destination,
32
+ transport: call.transport.snoGpu,
33
+ parser: call.replyParser.snoGpu
34
+ };
35
+ }
36
+ //#endregion
37
+ export { pickLlmRoutingConfig, resolveLlmRoute };
@@ -0,0 +1,13 @@
1
+ import { r as SqliteDatabaseLike } from "../../sqlite-runtime-L_ywirTm.js";
2
+ //#region src/store/atomic-memory-cutover-sql.d.ts
3
+ export declare const ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER = "nodix_memories_text_immutable";
4
+ export declare const ATOMIC_MEMORY_VALID_INTERVAL_CHECK_SQL = "valid_until IS NULL OR (valid_from IS NOT NULL AND valid_until > valid_from)";
5
+ export declare const CREATE_ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER_SQL: string;
6
+ export declare const ATOMIC_MEMORY_ROW_CONSTRAINTS: ReadonlyArray<{
7
+ name: string;
8
+ predicate: string;
9
+ }>;
10
+ export declare const CREATE_ATOMIC_MEMORY_CUTOVER_TABLE_SQL: string;
11
+ export declare function installAtomicMemoryTextImmutabilityTrigger(database: SqliteDatabaseLike): void;
12
+ export declare function applyAtomicMemoryCutoverMigration(database: SqliteDatabaseLike): void;
13
+ //#endregion
@@ -0,0 +1,237 @@
1
+ import { MEMORY_CATEGORIES } from "../engine/shared/types.js";
2
+ import { StorageError } from "../engine/shared/errors.js";
3
+ import "../../memory-store-shared-DeIDkhLj.js";
4
+ //#region src/store/atomic-memory-cutover-sql.ts
5
+ /** @file atomic-memory-cutover-sql.ts
6
+ * @purpose Holds the text-immutability trigger until the ordered Phase F cutover activates it.
7
+ * @boundary Exported SQL only; importing this module never changes a store.
8
+ */
9
+ const ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER = "nodix_memories_text_immutable";
10
+ const ATOMIC_MEMORY_VALID_INTERVAL_CHECK_SQL = "valid_until IS NULL OR (valid_from IS NOT NULL AND valid_until > valid_from)";
11
+ const CREATE_ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER_SQL = `
12
+ CREATE TRIGGER ${ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER}
13
+ BEFORE UPDATE OF text ON nodix_memories
14
+ WHEN NEW.text IS NOT OLD.text
15
+ BEGIN
16
+ SELECT RAISE(ABORT, 'nodix_memories.text is immutable; create a new card');
17
+ END;
18
+ `;
19
+ const ATOMIC_MEMORY_ROW_CONSTRAINTS = [
20
+ {
21
+ name: "text",
22
+ predicate: "text IS NOT NULL"
23
+ },
24
+ {
25
+ name: "category_not_null",
26
+ predicate: "category IS NOT NULL"
27
+ },
28
+ {
29
+ name: "category",
30
+ predicate: `category IN (${[...MEMORY_CATEGORIES, "foresight"].map((category) => `'${category}'`).join(", ")})`
31
+ },
32
+ {
33
+ name: "project_id",
34
+ predicate: "project_id IS NOT NULL"
35
+ },
36
+ {
37
+ name: "importance",
38
+ predicate: "importance IS NOT NULL AND importance >= 0.0 AND importance <= 1.0"
39
+ },
40
+ {
41
+ name: "timestamp",
42
+ predicate: "timestamp IS NOT NULL"
43
+ },
44
+ {
45
+ name: "content_hash",
46
+ predicate: "content_hash IS NOT NULL"
47
+ },
48
+ {
49
+ name: "lane",
50
+ predicate: "lane IS NOT NULL AND lane IN ('active', 'parked', 'quarantined')"
51
+ },
52
+ {
53
+ name: "timezone",
54
+ predicate: "timezone IS NOT NULL"
55
+ },
56
+ {
57
+ name: "maturity",
58
+ predicate: "maturity IS NOT NULL AND maturity IN ('extracted', 'distilled', 'compiled')"
59
+ },
60
+ {
61
+ name: "source",
62
+ predicate: "source IS NOT NULL AND source IN ('edge', 'cloud', 'manual')"
63
+ },
64
+ {
65
+ name: "extractor_version",
66
+ predicate: "extractor_version IS NOT NULL"
67
+ },
68
+ {
69
+ name: "valid_interval",
70
+ predicate: ATOMIC_MEMORY_VALID_INTERVAL_CHECK_SQL
71
+ },
72
+ {
73
+ name: "maturity_derived_from",
74
+ predicate: "maturity = 'extracted' OR (derived_from IS NOT NULL AND length(trim(derived_from)) > 0)"
75
+ },
76
+ {
77
+ name: "compiled_category",
78
+ predicate: "maturity != 'compiled' OR category = 'lesson'"
79
+ },
80
+ {
81
+ name: "foresight_source",
82
+ predicate: "category != 'foresight' OR source = 'cloud'"
83
+ },
84
+ {
85
+ name: "persona_subject",
86
+ predicate: "category != 'persona' OR (subject IS NOT NULL AND subject = 'agent')"
87
+ },
88
+ {
89
+ name: "lesson_subject",
90
+ predicate: "category != 'lesson' OR subject IS NULL OR subject = 'agent'"
91
+ },
92
+ {
93
+ name: "state_subject_metadata",
94
+ predicate: `category != 'state'
95
+ OR (
96
+ subject IS NOT NULL
97
+ AND subject GLOB 'entity:*'
98
+ AND length(subject) > length('entity:')
99
+ AND json_valid(metadata)
100
+ AND json_type(metadata, '$.event_at') IS NULL
101
+ )`
102
+ },
103
+ {
104
+ name: "foresight_subject",
105
+ predicate: `category != 'foresight'
106
+ OR (
107
+ subject IS NOT NULL
108
+ AND (
109
+ subject = 'user'
110
+ OR (subject GLOB 'entity:*' AND length(subject) > length('entity:'))
111
+ )
112
+ )`
113
+ },
114
+ {
115
+ name: "foresight_interval",
116
+ predicate: `category != 'foresight'
117
+ OR (
118
+ valid_from IS NOT NULL
119
+ AND valid_until IS NOT NULL
120
+ AND valid_from > timestamp
121
+ AND valid_until > valid_from
122
+ )`
123
+ }
124
+ ];
125
+ const CREATE_ATOMIC_MEMORY_CUTOVER_TABLE_SQL = `
126
+ CREATE TABLE nodix_memories_cutover (
127
+ id TEXT PRIMARY KEY,
128
+ text TEXT,
129
+ category TEXT,
130
+ project_id TEXT,
131
+ importance REAL DEFAULT 0.7,
132
+ timestamp INTEGER,
133
+ metadata TEXT DEFAULT '{}',
134
+ content_hash TEXT,
135
+ fact_id TEXT,
136
+ derived_from TEXT,
137
+ consolidation_epoch_id TEXT,
138
+ confidence_source TEXT,
139
+ lane TEXT DEFAULT 'active',
140
+ raw_candidate_json TEXT,
141
+ disposition_reason TEXT,
142
+ dispositioned_at_ms INTEGER,
143
+ timezone TEXT DEFAULT '__missing_timezone__',
144
+ subject TEXT,
145
+ attribute TEXT,
146
+ valid_from INTEGER,
147
+ valid_until INTEGER,
148
+ maturity TEXT,
149
+ source TEXT,
150
+ extractor_version TEXT,
151
+ ${ATOMIC_MEMORY_ROW_CONSTRAINTS.map(({ predicate }) => `CHECK (${predicate})`).join(",\n ")}
152
+ );
153
+ `;
154
+ const ATOMIC_MEMORY_CUTOVER_SCHEMA_SQL = `
155
+ ${CREATE_ATOMIC_MEMORY_CUTOVER_TABLE_SQL}
156
+
157
+ DROP TABLE nodix_memories;
158
+ ALTER TABLE nodix_memories_cutover RENAME TO nodix_memories;
159
+
160
+ CREATE INDEX nodix_idx_memories_content_hash ON nodix_memories(content_hash);
161
+ CREATE UNIQUE INDEX nodix_idx_memories_project_content_hash
162
+ ON nodix_memories(project_id, content_hash, category);
163
+ CREATE INDEX nodix_idx_memories_category ON nodix_memories(category);
164
+ CREATE INDEX nodix_idx_memories_project_timestamp ON nodix_memories(project_id, timestamp DESC);
165
+ CREATE INDEX nodix_idx_memories_fact_id ON nodix_memories(fact_id);
166
+ CREATE INDEX nodix_idx_memories_reflection_items ON nodix_memories(timestamp DESC)
167
+ WHERE json_valid(metadata) AND json_extract(metadata, '$.type') = 'memory-reflection-item';
168
+ CREATE INDEX nodix_idx_memories_idempotency_key
169
+ ON nodix_memories(project_id, json_extract(metadata, '$.idempotency_key'))
170
+ WHERE json_valid(metadata) AND json_extract(metadata, '$.idempotency_key') IS NOT NULL;
171
+ CREATE INDEX nodix_idx_memories_lane_project ON nodix_memories(lane, project_id);
172
+ CREATE INDEX nodix_idx_memories_project_subject_attribute
173
+ ON nodix_memories(project_id, subject, attribute);
174
+ CREATE INDEX nodix_idx_memories_project_valid_time
175
+ ON nodix_memories(project_id, valid_from, valid_until);
176
+ CREATE INDEX nodix_idx_memories_project_maturity ON nodix_memories(project_id, maturity);
177
+ CREATE INDEX nodix_idx_memories_project_source ON nodix_memories(project_id, source);
178
+ CREATE INDEX nodix_idx_memories_project_extractor_version
179
+ ON nodix_memories(project_id, extractor_version);
180
+ CREATE INDEX nodix_idx_memories_project_derived_from ON nodix_memories(project_id, derived_from);
181
+ CREATE INDEX nodix_idx_memories_project_importance ON nodix_memories(project_id, importance);
182
+
183
+ CREATE TRIGGER nodix_memories_fact_id_insert_guard
184
+ BEFORE INSERT ON nodix_memories
185
+ WHEN NEW.fact_id IS NULL
186
+ BEGIN SELECT RAISE(ABORT, 'nodix_memories.fact_id is required'); END;
187
+
188
+ CREATE TRIGGER nodix_memories_fact_id_update_guard
189
+ BEFORE UPDATE ON nodix_memories
190
+ WHEN NEW.fact_id IS NULL
191
+ BEGIN SELECT RAISE(ABORT, 'nodix_memories.fact_id is required'); END;
192
+
193
+ CREATE TRIGGER nodix_memories_timezone_required_before_insert
194
+ BEFORE INSERT ON nodix_memories
195
+ WHEN NEW.timezone = '__missing_timezone__' OR trim(NEW.timezone) = ''
196
+ BEGIN SELECT RAISE(ABORT, 'timezone is required'); END;
197
+
198
+ CREATE TRIGGER nodix_memories_timezone_required_before_update
199
+ BEFORE UPDATE OF timezone ON nodix_memories
200
+ WHEN NEW.timezone = '__missing_timezone__' OR trim(NEW.timezone) = ''
201
+ BEGIN SELECT RAISE(ABORT, 'timezone is required'); END;
202
+
203
+ CREATE TRIGGER rem_memory_facets_after_insert
204
+ AFTER INSERT ON nodix_memories
205
+ BEGIN
206
+ INSERT INTO nodix_rem_memory_facets (memory_id, facet, text, updated_at_ms)
207
+ VALUES (NEW.id, 'current', NEW.text, NEW.timestamp);
208
+ END;
209
+
210
+ CREATE TRIGGER rem_memory_facets_after_text_update
211
+ AFTER UPDATE OF text ON nodix_memories
212
+ BEGIN
213
+ INSERT INTO nodix_rem_memory_facets (memory_id, facet, text, updated_at_ms)
214
+ VALUES (NEW.id, 'current', NEW.text, NEW.timestamp)
215
+ ON CONFLICT(memory_id, facet) DO UPDATE SET
216
+ text = excluded.text, updated_at_ms = excluded.updated_at_ms;
217
+ END;
218
+
219
+ ${CREATE_ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER_SQL}
220
+ `;
221
+ function installAtomicMemoryTextImmutabilityTrigger(database) {
222
+ database.exec(CREATE_ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER_SQL);
223
+ }
224
+ function applyAtomicMemoryCutoverMigration(database) {
225
+ database.exec("PRAGMA foreign_keys = OFF");
226
+ try {
227
+ database.transaction(() => {
228
+ const row = database.prepare("SELECT COUNT(*) AS count FROM nodix_memories").get();
229
+ if (row?.count !== 0) throw new StorageError(`Atomic memory cutover requires zero stored memories; found ${String(row?.count ?? "unknown")}`);
230
+ database.exec(ATOMIC_MEMORY_CUTOVER_SCHEMA_SQL);
231
+ }).immediate();
232
+ } finally {
233
+ database.exec("PRAGMA foreign_keys = ON");
234
+ }
235
+ }
236
+ //#endregion
237
+ export { ATOMIC_MEMORY_ROW_CONSTRAINTS, ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER, ATOMIC_MEMORY_VALID_INTERVAL_CHECK_SQL, CREATE_ATOMIC_MEMORY_CUTOVER_TABLE_SQL, CREATE_ATOMIC_MEMORY_TEXT_IMMUTABILITY_TRIGGER_SQL, applyAtomicMemoryCutoverMigration, installAtomicMemoryTextImmutabilityTrigger };
@@ -0,0 +1,2 @@
1
+ import { a as initDb, c as readChunkVecTableDimension, d as validateStoragePath, i as closeDb, l as readChunkVecTableState, n as VecTableState, o as loadStorageExtensions, r as assertNoLegacyBoundarySchema, s as parseVecTableDimension, t as DrizzleDB, u as vecTableDdlHasPartitionKey } from "../../connection-DAbzki8K.js";
2
+ export { DrizzleDB, VecTableState, assertNoLegacyBoundarySchema, closeDb, initDb, loadStorageExtensions, parseVecTableDimension, readChunkVecTableDimension, readChunkVecTableState, validateStoragePath, vecTableDdlHasPartitionKey };
@@ -0,0 +1,2 @@
1
+ import { a as parseVecTableDimension, c as vecTableDdlHasPartitionKey, i as loadStorageExtensions, l as validateStoragePath, n as closeDb, o as readChunkVecTableDimension, r as initDb, s as readChunkVecTableState, t as assertNoLegacyBoundarySchema } from "../../connection-DliCOBB2.js";
2
+ export { assertNoLegacyBoundarySchema, closeDb, initDb, loadStorageExtensions, parseVecTableDimension, readChunkVecTableDimension, readChunkVecTableState, validateStoragePath, vecTableDdlHasPartitionKey };
@@ -0,0 +1,2 @@
1
+ import { n as bootstrapDataLayout, t as BootstrapResult } from "../../data-bootstrap-CcJUwkqf.js";
2
+ export { BootstrapResult, bootstrapDataLayout };
@@ -0,0 +1,2 @@
1
+ import { t as bootstrapDataLayout } from "../../data-bootstrap-CYniFp8b.js";
2
+ export { bootstrapDataLayout };
@@ -0,0 +1,2 @@
1
+ import { a as getCostLogPath, c as getSnoStationMemDataDir, i as getBackupsDir, n as assertLocalFilesystem, o as getInstallManifestPath, r as getAuditLogPath, s as getKillswitchPath, t as NonLocalFilesystemError } from "../../data-paths-C7sNdqvP.js";
2
+ export { NonLocalFilesystemError, assertLocalFilesystem, getAuditLogPath, getBackupsDir, getCostLogPath, getInstallManifestPath, getKillswitchPath, getSnoStationMemDataDir };
@@ -0,0 +1,65 @@
1
+ import { getSnoStationMemStateDir } from "../contract/profile.js";
2
+ import { join } from "node:path";
3
+ import { statfsSync } from "node:fs";
4
+ //#region src/store/data-paths.ts
5
+ /** @file data-paths.ts
6
+ * @purpose Resolve the safe-uninstall data directory layout for
7
+ * `@snoai/memory`: persistent user data under
8
+ * `<profile root>/sno-station-mem/data/`, separate from service state. POSIX only.
9
+ * @boundary Path resolution + filesystem-class assertion. No I/O beyond
10
+ * a single `statfs` probe in `assertLocalFilesystem`.
11
+ */
12
+ /** File-system kinds that DO NOT guarantee atomic POSIX rename. */
13
+ const NON_LOCAL_FS_TYPES = /* @__PURE__ */ new Set([
14
+ 26985,
15
+ 4283649346,
16
+ 4266872130,
17
+ 20859,
18
+ 1702057286
19
+ ]);
20
+ /** Typed boundary error for refuse-to-operate when data dir is on NFS/SMB/FUSE. */
21
+ var NonLocalFilesystemError = class extends Error {
22
+ dir;
23
+ fsType;
24
+ kind = "NonLocalFilesystemError";
25
+ constructor(dir, fsType) {
26
+ super(`Refusing to operate on non-local filesystem (type=0x${fsType.toString(16)}) at ${dir}. Atomic rename is not guaranteed at ${dir}.`);
27
+ this.dir = dir;
28
+ this.fsType = fsType;
29
+ this.name = "NonLocalFilesystemError";
30
+ }
31
+ };
32
+ function getSnoStationMemDataDir() {
33
+ return join(getSnoStationMemStateDir(), "data");
34
+ }
35
+ function getInstallManifestPath() {
36
+ return join(getSnoStationMemDataDir(), "install.json");
37
+ }
38
+ function getAuditLogPath() {
39
+ return join(getSnoStationMemDataDir(), "audit.jsonl");
40
+ }
41
+ function getCostLogPath() {
42
+ return join(getSnoStationMemDataDir(), "cost.jsonl");
43
+ }
44
+ function getKillswitchPath() {
45
+ return join(getSnoStationMemDataDir(), "killswitch");
46
+ }
47
+ function getBackupsDir() {
48
+ return join(getSnoStationMemDataDir(), "backups");
49
+ }
50
+ /**
51
+ * `statfs(2)`-based check: throws `NonLocalFilesystemError` when `dir` sits on
52
+ * NFS / SMB / FUSE (which includes iCloud-Drive-watched directories). POSIX
53
+ * only — Windows is out of v1 projectId.
54
+ */
55
+ function assertLocalFilesystem(dir) {
56
+ let info;
57
+ try {
58
+ info = statfsSync(dir);
59
+ } catch {
60
+ return;
61
+ }
62
+ if (NON_LOCAL_FS_TYPES.has(info.type)) throw new NonLocalFilesystemError(dir, info.type);
63
+ }
64
+ //#endregion
65
+ export { NonLocalFilesystemError, assertLocalFilesystem, getAuditLogPath, getBackupsDir, getCostLogPath, getInstallManifestPath, getKillswitchPath, getSnoStationMemDataDir };