@snoai/memory 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +33 -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-BbEvEocb.d.ts +110 -0
  64. package/dist/adapter-B7Jox9-6.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-C5rmogoY.js +3605 -0
  74. package/dist/atomic-memory-extraction-d9EG-4ti.d.ts +327 -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-CxbHPkMX.d.ts +53 -0
  80. package/dist/capture-policy-detector-DaMfy9CZ.js +357 -0
  81. package/dist/classifier-DnbbtwTS.d.ts +272 -0
  82. package/dist/client.d.ts +34 -0
  83. package/dist/client.js +306 -0
  84. package/dist/coding-skin.d.ts +51 -0
  85. package/dist/coding-skin.js +55 -0
  86. package/dist/config-CL90qYva.js +2576 -0
  87. package/dist/connection-3IVXpuPE.d.ts +391 -0
  88. package/dist/connection-C9YD5sgm.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-Bl3lthzE.d.ts +30 -0
  93. package/dist/data-bootstrap-P8sie9WA.js +172 -0
  94. package/dist/data-paths-C7sNdqvP.d.ts +22 -0
  95. package/dist/derived-suppression-cache-CI0durYx.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-0aqS8pVF.d.ts +351 -0
  108. package/dist/index-BO4RU_mc.d.ts +650 -0
  109. package/dist/index-DL8AVj0Z.d.ts +571 -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 +62 -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 +36 -0
  168. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +104 -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-BSYUAcUb.js +1374 -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-BMKWj-Nx.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-BiuRjSJc.d.ts +23 -0
  331. package/dist/memory-metadata-codec-DL1sbJiN.js +577 -0
  332. package/dist/memory-metadata-codec-DUvsYe_X.d.ts +68 -0
  333. package/dist/memory-runtime-DqUS4cWi.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-CqY1BUUA.d.ts +16 -0
  337. package/dist/memory-source-order-YMRoeDLd.js +134 -0
  338. package/dist/memory-store-base-CQ_bHlYA.d.ts +1094 -0
  339. package/dist/memory-store-shared-DqpWJXZZ.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-BUjXG5o7.js +184 -0
  348. package/dist/memory-temporality-classifier-Brht5jyK.d.ts +43 -0
  349. package/dist/memory-tier-promoter-CqGxCkue.d.ts +43 -0
  350. package/dist/memory-tool-dependencies-CatGzI9R.d.ts +14 -0
  351. package/dist/memory-tool-dependencies-DjUoelnm.js +19 -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-CNNe9gkg.d.ts +17 -0
  355. package/dist/observable-llm-client-CRuKlefQ.d.ts +21 -0
  356. package/dist/observable-memory-store-CnGDpOY5.d.ts +73 -0
  357. package/dist/observable-retriever-Cooc62Qw.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-BhGKPBjw.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-ClUl-iv6.js +644 -0
  369. package/dist/reflection-command-hooks-G1-dI2Av.d.ts +32 -0
  370. package/dist/reflection-deps-Ccm2Jf5W.d.ts +19 -0
  371. package/dist/reflection-embedded-generator-BRvqV5N-.js +130 -0
  372. package/dist/reflection-embedded-generator-kfQfKEYV.d.ts +14 -0
  373. package/dist/reflection-injection-hooks-CS_uhjoD.d.ts +43 -0
  374. package/dist/reflection-lifecycle-hooks-CRSpUdLi.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-Dg2HgROM.js +2 -0
  380. package/dist/rem-batch-executor-DuC4nYyf.js +31640 -0
  381. package/dist/rem-consumer-retrieval-CR0dtcHR.js +246 -0
  382. package/dist/rem-trigger-Hn6od8IV.js +730 -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-Dxss5fRv.d.ts +469 -0
  387. package/dist/retriever-ZoLvPRHq.js +1757 -0
  388. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  389. package/dist/routes-DLHT__Ay.js +60 -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-CSvxchqg.js +1412 -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-CoWqUMbK.js +30 -0
  401. package/dist/sno-station-mem-runtime-dependencies-DHESIuPn.d.ts +31 -0
  402. package/dist/sqlite-runtime-L_ywirTm.d.ts +58 -0
  403. package/dist/store-C8sUTssE.d.ts +27 -0
  404. package/dist/store-nPql26YM.js +5830 -0
  405. package/dist/strategy-hook-runner-Bxy851Xx.d.ts +16 -0
  406. package/dist/strategy-hook-runner-Djify5Rw.js +110 -0
  407. package/dist/token-counter-BD1f48Km.js +73 -0
  408. package/dist/trace-C1JxMfs-.d.ts +86 -0
  409. package/dist/types-CWdhXLxr.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,255 @@
1
+ import "../../../signed-registry-constants-yq3DlG3B.js";
2
+ import { i as memoryOperationSignal, n as memoryFileWrite, t as checkMemoryOperation } from "../../../operation-cancellation-CTKWwNHk.js";
3
+ import { createLogger } from "@snoai/utils/logger";
4
+ import { join } from "node:path";
5
+ import { appendFile, mkdir, open, readFile, rm, stat, writeFile } from "node:fs/promises";
6
+ //#region src/engine/operations/learning-file-maintenance.ts
7
+ /** @file learning-file-maintenance.ts
8
+ * @purpose Manages learning files and skill extraction artifacts for improvement loops.
9
+ * @boundary Filesystem layout, markdown records, and promotion state.
10
+ * @see learning-file-hooks.ts, daily-log-generator.ts, memory-tool-registration.ts.
11
+ */
12
+ const diagnosticLog = createLogger("sno-station-mem:learning-file-maintenance");
13
+ const DEFAULT_LEARNINGS_TEMPLATE = `# Learnings
14
+
15
+ Append structured entries:
16
+ - LRN-YYYYMMDD-XXX for corrections / best practices / knowledge gaps
17
+ - Include summary, details, suggested action, metadata, and status`;
18
+ const DEFAULT_ERRORS_TEMPLATE = `# Errors
19
+
20
+ Append structured entries:
21
+ - ERR-YYYYMMDD-XXX for command/tool/integration failures
22
+ - Include symptom, context, probable cause, and prevention`;
23
+ const DEFAULT_FEATURE_REQUESTS_TEMPLATE = `# Feature Requests
24
+
25
+ Append structured entries:
26
+ - FEAT-YYYYMMDD-XXX for missing capabilities or workflow gaps
27
+ - Include the requested capability, why it matters, and a concrete suggested action`;
28
+ const fileWriteQueues = /* @__PURE__ */ new Map();
29
+ const FILE_APPEND_LOCK_STALE_MS = 3e4;
30
+ const FILE_APPEND_LOCK_RETRY_MS = 25;
31
+ const ENTRY_DESTINATIONS = {
32
+ learning: {
33
+ fileName: "LEARNINGS.md",
34
+ idPrefix: "LRN"
35
+ },
36
+ error: {
37
+ fileName: "ERRORS.md",
38
+ idPrefix: "ERR"
39
+ },
40
+ feature: {
41
+ fileName: "FEATURE_REQUESTS.md",
42
+ idPrefix: "FEAT"
43
+ }
44
+ };
45
+ /** Implements with file write queue as the local self-improvement learning files operation. */
46
+ async function withFileWriteQueue(filePath, action) {
47
+ const previous = fileWriteQueues.get(filePath) ?? Promise.resolve();
48
+ let release;
49
+ const lock = new Promise((resolve) => {
50
+ release = resolve;
51
+ });
52
+ const next = previous.then(() => lock);
53
+ fileWriteQueues.set(filePath, next);
54
+ await previous;
55
+ try {
56
+ return await action();
57
+ } finally {
58
+ release?.();
59
+ if (fileWriteQueues.get(filePath) === next) fileWriteQueues.delete(filePath);
60
+ }
61
+ }
62
+ /** Implements today ymd as the local self-improvement learning files operation. */
63
+ function todayYmd() {
64
+ return (/* @__PURE__ */ new Date()).toISOString().slice(0, 10).replace(/-/g, "");
65
+ }
66
+ /** Implements sleep as the local self-improvement learning files operation. */
67
+ function sleep(ms) {
68
+ return new Promise((resolve) => {
69
+ setTimeout(resolve, ms);
70
+ });
71
+ }
72
+ /** Implements with append lock as the local self-improvement learning files operation. */
73
+ async function withAppendLock(filePath, action) {
74
+ const lockPath = `${filePath}.lock`;
75
+ for (;;) {
76
+ checkMemoryOperation();
77
+ let handle;
78
+ try {
79
+ handle = await open(lockPath, "wx");
80
+ try {
81
+ return await action();
82
+ } finally {
83
+ await handle.close().catch((error) => {
84
+ diagnosticLog.warn("Learning lock handle close failed", { error }, {
85
+ event_name: "memory.learning.lock.close.failed",
86
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
87
+ function: "withAppendLock",
88
+ site_id: "memory.learning.lock.close.failed"
89
+ });
90
+ });
91
+ await rm(lockPath, { force: true }).catch((error) => {
92
+ diagnosticLog.warn("Learning lock cleanup failed", { error }, {
93
+ event_name: "memory.learning.lock.cleanup.failed",
94
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
95
+ function: "withAppendLock",
96
+ site_id: "memory.learning.lock.cleanup.failed"
97
+ });
98
+ });
99
+ }
100
+ } catch (error) {
101
+ if (!(error instanceof Error) || !("code" in error) || error.code !== "EEXIST") throw error;
102
+ const lockStats = await stat(lockPath).catch((error) => {
103
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) diagnosticLog.warn("Learning lock metadata unavailable", { error }, {
104
+ event_name: "memory.learning.lock.stat.failed",
105
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
106
+ function: "withAppendLock",
107
+ site_id: "memory.learning.lock.stat.failed"
108
+ });
109
+ return null;
110
+ });
111
+ if (lockStats && Date.now() - lockStats.mtimeMs > FILE_APPEND_LOCK_STALE_MS) {
112
+ await rm(lockPath, { force: true }).catch((error) => {
113
+ diagnosticLog.warn("Stale learning lock removal failed", { error }, {
114
+ event_name: "memory.learning.lock.stale.cleanup.failed",
115
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
116
+ function: "withAppendLock",
117
+ site_id: "memory.learning.lock.stale.cleanup.failed"
118
+ });
119
+ });
120
+ continue;
121
+ }
122
+ await sleep(FILE_APPEND_LOCK_RETRY_MS);
123
+ }
124
+ }
125
+ }
126
+ /** Implements next learning id as the local self-improvement learning files operation. */
127
+ async function nextLearningId(filePath, prefix) {
128
+ const date = todayYmd();
129
+ let count = 0;
130
+ try {
131
+ count = (await readFile(filePath, {
132
+ encoding: "utf8",
133
+ signal: memoryOperationSignal()
134
+ })).match(new RegExp(`\\[${prefix}-${date}-\\d{3}\\]`, "g"))?.length ?? 0;
135
+ } catch (error) {
136
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) diagnosticLog.warn("Learning identifier history unavailable", { error }, {
137
+ event_name: "memory.learning.history.read.failed",
138
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
139
+ function: "nextLearningId",
140
+ site_id: "memory.learning.history.read.failed"
141
+ });
142
+ }
143
+ return `${prefix}-${date}-${String(count + 1).padStart(3, "0")}`;
144
+ }
145
+ function learningFilesDir(baseDir) {
146
+ return join(baseDir, ".learnings");
147
+ }
148
+ async function ensureLearningFile(filePath, content) {
149
+ try {
150
+ if ((await readFile(filePath, {
151
+ encoding: "utf8",
152
+ signal: memoryOperationSignal()
153
+ })).trim().length > 0) return;
154
+ } catch (error) {
155
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) diagnosticLog.warn("Learning file read failed before creation", { error }, {
156
+ event_name: "memory.learning.ensure.read.failed",
157
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
158
+ function: "ensureLearningFile",
159
+ site_id: "memory.learning.ensure.read.failed"
160
+ });
161
+ }
162
+ await memoryFileWrite(() => writeFile(filePath, `${content.trim()}\n`, "utf-8"));
163
+ }
164
+ async function ensureLearningFileWithLock(filePath, content) {
165
+ await withFileWriteQueue(filePath, async () => {
166
+ await withAppendLock(filePath, async () => {
167
+ await ensureLearningFile(filePath, content);
168
+ });
169
+ });
170
+ }
171
+ /**
172
+ * Ensures the self-improvement learning directory has the baseline files required by tools.
173
+ */
174
+ async function ensureSelfImprovementLearningFiles(baseDir) {
175
+ const learningsDir = learningFilesDir(baseDir);
176
+ checkMemoryOperation();
177
+ await mkdir(learningsDir, { recursive: true });
178
+ await ensureLearningFileWithLock(join(learningsDir, "LEARNINGS.md"), DEFAULT_LEARNINGS_TEMPLATE);
179
+ await ensureLearningFileWithLock(join(learningsDir, "ERRORS.md"), DEFAULT_ERRORS_TEMPLATE);
180
+ await ensureLearningFileWithLock(join(learningsDir, "FEATURE_REQUESTS.md"), DEFAULT_FEATURE_REQUESTS_TEMPLATE);
181
+ }
182
+ function normalizeSelfImprovementEntryParams(params) {
183
+ return {
184
+ baseDir: params.baseDir,
185
+ type: params.type,
186
+ summary: params.summary,
187
+ details: params.details ?? "",
188
+ suggestedAction: params.suggestedAction ?? "",
189
+ category: params.category ?? "best_practice",
190
+ area: params.area ?? "config",
191
+ priority: params.priority ?? "medium",
192
+ status: params.status ?? "pending",
193
+ source: params.source ?? "mem-claw/self_improvement_log"
194
+ };
195
+ }
196
+ function renderSelfImprovementEntry(params, entryId, loggedAtIso) {
197
+ return [
198
+ `## [${entryId}]${params.type === "learning" ? ` ${params.category}` : ""}`,
199
+ "",
200
+ `**Logged**: ${loggedAtIso}`,
201
+ `**Priority**: ${params.priority}`,
202
+ `**Status**: ${params.status}`,
203
+ `**Area**: ${params.area}`,
204
+ "",
205
+ "### Summary",
206
+ params.summary.trim(),
207
+ "",
208
+ "### Details",
209
+ params.details.trim() || "-",
210
+ "",
211
+ "### Suggested Action",
212
+ params.suggestedAction.trim() || "-",
213
+ "",
214
+ "### Metadata",
215
+ `- Source: ${params.source}`,
216
+ "---",
217
+ ""
218
+ ].join("\n");
219
+ }
220
+ /**
221
+ * Persists self improvement entry through the single self-improvement learning files write
222
+ * path.
223
+ */
224
+ async function appendSelfImprovementEntry(params) {
225
+ const normalized = normalizeSelfImprovementEntryParams(params);
226
+ await ensureSelfImprovementLearningFiles(normalized.baseDir);
227
+ const destination = ENTRY_DESTINATIONS[normalized.type];
228
+ const filePath = join(learningFilesDir(normalized.baseDir), destination.fileName);
229
+ return {
230
+ id: await withFileWriteQueue(filePath, async () => {
231
+ return withAppendLock(filePath, async () => {
232
+ const entryId = await nextLearningId(filePath, destination.idPrefix);
233
+ const nowIso = (/* @__PURE__ */ new Date()).toISOString();
234
+ const entry = renderSelfImprovementEntry(normalized, entryId, nowIso);
235
+ const separator = (await readFile(filePath, {
236
+ encoding: "utf8",
237
+ signal: memoryOperationSignal()
238
+ }).catch((error) => {
239
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) diagnosticLog.warn("Learning file read failed before append", { error }, {
240
+ event_name: "memory.learning.append.read.failed",
241
+ file: "packages/memory/src/engine/operations/learning-file-maintenance.ts",
242
+ function: "appendSelfImprovementEntry",
243
+ site_id: "memory.learning.append.read.failed"
244
+ });
245
+ return "";
246
+ })).trimEnd().length > 0 ? "\n\n" : "";
247
+ await memoryFileWrite(() => appendFile(filePath, `${separator}${entry}`, "utf-8"));
248
+ return entryId;
249
+ });
250
+ }),
251
+ filePath
252
+ };
253
+ }
254
+ //#endregion
255
+ export { DEFAULT_ERRORS_TEMPLATE, DEFAULT_FEATURE_REQUESTS_TEMPLATE, DEFAULT_LEARNINGS_TEMPLATE, appendSelfImprovementEntry, ensureSelfImprovementLearningFiles };
@@ -0,0 +1,2 @@
1
+ import { a as TierableMemory, i as TierTransition, n as TierConfig, o as createTierPromoter, r as TierPromoter, t as DEFAULT_TIER_CONFIG } from "../../../memory-tier-promoter-CqGxCkue.js";
2
+ export { DEFAULT_TIER_CONFIG, TierConfig, TierPromoter, TierTransition, TierableMemory, createTierPromoter };
@@ -0,0 +1,95 @@
1
+ //#region src/engine/operations/memory-tier-promoter.ts
2
+ const DEFAULT_TIER_CONFIG = {
3
+ coreAccessThreshold: 10,
4
+ coreCompositeThreshold: .7,
5
+ coreImportanceThreshold: .8,
6
+ peripheralCompositeThreshold: .15,
7
+ peripheralAgeDays: 60,
8
+ workingAccessThreshold: 3,
9
+ workingCompositeThreshold: .4
10
+ };
11
+ const MS_PER_DAY = 864e5;
12
+ function createTransition(context, toTier, reason) {
13
+ return {
14
+ memoryId: context.memory.id,
15
+ fromTier: context.memory.tier,
16
+ toTier,
17
+ reason
18
+ };
19
+ }
20
+ const TIER_RULES = [
21
+ {
22
+ from: "peripheral",
23
+ matches({ memory, score, config }) {
24
+ return memory.accessCount >= config.workingAccessThreshold && score.composite >= config.workingCompositeThreshold;
25
+ },
26
+ transition(context) {
27
+ const { memory, score, config } = context;
28
+ return createTransition(context, "working", `Access count (${memory.accessCount}) >= ${config.workingAccessThreshold} and composite (${score.composite.toFixed(2)}) >= ${config.workingCompositeThreshold}`);
29
+ }
30
+ },
31
+ {
32
+ from: "working",
33
+ matches({ memory, score, config }) {
34
+ return memory.accessCount >= config.coreAccessThreshold && score.composite >= config.coreCompositeThreshold && memory.importance >= config.coreImportanceThreshold;
35
+ },
36
+ transition(context) {
37
+ const { memory, score } = context;
38
+ return createTransition(context, "core", `High access (${memory.accessCount}), composite (${score.composite.toFixed(2)}), importance (${memory.importance})`);
39
+ }
40
+ },
41
+ {
42
+ from: "working",
43
+ matches({ memory, score, ageDays, config }) {
44
+ return score.composite < config.peripheralCompositeThreshold || ageDays > config.peripheralAgeDays && memory.accessCount < config.workingAccessThreshold;
45
+ },
46
+ transition(context) {
47
+ const { memory, score, ageDays } = context;
48
+ return createTransition(context, "peripheral", `Low composite (${score.composite.toFixed(2)}) or aged ${ageDays.toFixed(0)} days with low access (${memory.accessCount})`);
49
+ }
50
+ },
51
+ {
52
+ from: "core",
53
+ matches({ memory, score, config }) {
54
+ return score.composite < config.peripheralCompositeThreshold && memory.accessCount < config.workingAccessThreshold;
55
+ },
56
+ transition(context) {
57
+ const { memory, score } = context;
58
+ return createTransition(context, "working", `Severely low composite (${score.composite.toFixed(2)}) and access (${memory.accessCount})`);
59
+ }
60
+ }
61
+ ];
62
+ /** Creates the tier promoter that translates decay scores into promotion/demotion decisions.
63
+ * Promote is bidirectional here: Peripheral→Working→Core (up) and Core→Working→Peripheral (down). */
64
+ function createTierPromoter(config = DEFAULT_TIER_CONFIG) {
65
+ function createContext(memory, score, now) {
66
+ return {
67
+ memory,
68
+ score,
69
+ now,
70
+ ageDays: (now - memory.timestamp) / MS_PER_DAY,
71
+ config
72
+ };
73
+ }
74
+ function evaluate(memory, decayScore, now = Date.now()) {
75
+ const context = createContext(memory, decayScore, now);
76
+ const rule = TIER_RULES.find((candidate) => candidate.from === memory.tier && candidate.matches(context));
77
+ return rule ? rule.transition(context) : null;
78
+ }
79
+ return {
80
+ evaluate,
81
+ evaluateAll(memories, decayScores, now = Date.now()) {
82
+ const scoreMap = new Map(decayScores.map((s) => [s.memoryId, s]));
83
+ const transitions = [];
84
+ for (const memory of memories) {
85
+ const score = scoreMap.get(memory.id);
86
+ if (!score) continue;
87
+ const transition = evaluate(memory, score, now);
88
+ if (transition) transitions.push(transition);
89
+ }
90
+ return transitions;
91
+ }
92
+ };
93
+ }
94
+ //#endregion
95
+ export { DEFAULT_TIER_CONFIG, createTierPromoter };
@@ -0,0 +1,3 @@
1
+ import { c as getStateDir, o as getSnoStationMemStateDir } from "../../../profile-TWPJ_myr.js";
2
+ import { S as runWithMutationAttempt, _ as getAuditPath, a as MemoryAuditEvent, b as runWithMemoryAudit, c as MutationAttemptCompletion, d as MutationAttemptWriter, f as appendAuditEntry, g as flushAuditWrites, h as currentMutationAttemptId, i as MemoryAuditDetailsByEvent, l as MutationAttemptOutcome, m as appendAuditEntrySync, n as AuditEvent, o as MemoryAuditRunOptions, p as appendAuditEntryStrict, r as AuditStatus, s as MemoryAuditSyncRunOptions, t as AuditEntry, u as MutationAttemptRunOptions, v as getCostPath, x as runWithMemoryAuditSync, y as recoverInterruptedMutationAttempts } from "../../../runtime-audit-log-zpQiR9HT.js";
3
+ export { AuditEntry, AuditEvent, AuditStatus, MemoryAuditDetailsByEvent, MemoryAuditEvent, MemoryAuditRunOptions, MemoryAuditSyncRunOptions, MutationAttemptCompletion, MutationAttemptOutcome, MutationAttemptRunOptions, MutationAttemptWriter, appendAuditEntry, appendAuditEntryStrict, appendAuditEntrySync, currentMutationAttemptId, flushAuditWrites, getAuditPath, getCostPath, getSnoStationMemStateDir, getStateDir, recoverInterruptedMutationAttempts, runWithMemoryAudit, runWithMemoryAuditSync, runWithMutationAttempt };
@@ -0,0 +1,3 @@
1
+ import { a as flushAuditWrites, c as recoverInterruptedMutationAttempts, d as runWithMutationAttempt, i as currentMutationAttemptId, l as runWithMemoryAudit, n as appendAuditEntryStrict, o as getAuditPath, r as appendAuditEntrySync, s as getCostPath, t as appendAuditEntry, u as runWithMemoryAuditSync } from "../../../runtime-audit-log-BCeujlEp.js";
2
+ import { getSnoStationMemStateDir, getStateDir } from "../../contract/profile.js";
3
+ export { appendAuditEntry, appendAuditEntryStrict, appendAuditEntrySync, currentMutationAttemptId, flushAuditWrites, getAuditPath, getCostPath, getSnoStationMemStateDir, getStateDir, recoverInterruptedMutationAttempts, runWithMemoryAudit, runWithMemoryAuditSync, runWithMutationAttempt };
@@ -0,0 +1,38 @@
1
+ import { r as SnoStationMemMemorySearchResult } from "../../../provider-runtime-types-DFhtdA6d.js";
2
+ //#region src/engine/provider/canonical-memory-corpus.d.ts
3
+ export interface CanonicalMemoryFile {
4
+ path: string;
5
+ absolutePath: string;
6
+ realPath: string;
7
+ lineCount: number;
8
+ }
9
+ export interface CanonicalMemoryDiagnostics {
10
+ io_failure_count: number;
11
+ unavailable_file_count: number;
12
+ }
13
+ export interface CanonicalMemoryReadResult {
14
+ text: string;
15
+ path: string;
16
+ startLine: number;
17
+ endLine: number;
18
+ truncated?: boolean;
19
+ from?: number;
20
+ lines?: number;
21
+ nextFrom?: number;
22
+ }
23
+ export declare function normalizeCanonicalMemoryPath(relPath: string): string;
24
+ export declare function listCanonicalMemoryFiles(workspaceDir: string, diagnostics?: CanonicalMemoryDiagnostics): Promise<CanonicalMemoryFile[]>;
25
+ export declare function searchCanonicalMemoryFiles(params: {
26
+ diagnostics?: CanonicalMemoryDiagnostics;
27
+ workspaceDir: string;
28
+ query: string;
29
+ maxResults: number;
30
+ }): Promise<SnoStationMemMemorySearchResult[]>;
31
+ export declare function readCanonicalMemoryFile(params: {
32
+ workspaceDir: string;
33
+ relPath: string;
34
+ from?: number;
35
+ lines?: number;
36
+ }): Promise<CanonicalMemoryReadResult>;
37
+ export declare function canonicalMemoryWorkspaceFingerprint(workspaceDir: string): string;
38
+ //#endregion
@@ -0,0 +1,253 @@
1
+ import { rt as FIXED_PROTOCOL_VALUE_64 } from "../../../signed-registry-constants-yq3DlG3B.js";
2
+ import { clampInt } from "../shared/utils.js";
3
+ import { createLogger } from "@snoai/utils/logger";
4
+ import { isAbsolute, posix, relative, resolve, sep } from "node:path";
5
+ import { lstat, readFile, readdir, realpath, stat } from "node:fs/promises";
6
+ //#region src/engine/provider/canonical-memory-corpus.ts
7
+ /** @file canonical-memory-corpus.ts
8
+ * @purpose Searches and reads the built-in SnoStationMem canonical memory Markdown corpus.
9
+ * @boundary Only exposes root MEMORY.md and ordinary Markdown files under memory/ in one workspace.
10
+ */
11
+ const diagnosticLog = createLogger("sno-station-mem:canonical-memory-corpus");
12
+ const ROOT_MEMORY_FILE = "MEMORY.md";
13
+ const MEMORY_DIR = "memory";
14
+ const DEFAULT_READ_LINES = 200;
15
+ const MAX_READ_LINES = 2e3;
16
+ const DENIED_SEGMENTS = /* @__PURE__ */ new Set([
17
+ FIXED_PROTOCOL_VALUE_64,
18
+ "config",
19
+ "configs",
20
+ "context",
21
+ "contexts",
22
+ "dream",
23
+ "dreaming",
24
+ "instruction",
25
+ "instructions",
26
+ "mapping",
27
+ "mappings",
28
+ "personality",
29
+ "personalities",
30
+ "raw",
31
+ "secret",
32
+ "secrets",
33
+ "session",
34
+ "sessions",
35
+ "store",
36
+ "stores",
37
+ "telemetry",
38
+ "trace",
39
+ "traces",
40
+ "audit",
41
+ "audits",
42
+ "vector",
43
+ "vectors"
44
+ ]);
45
+ function canonicalDeniedError() {
46
+ return /* @__PURE__ */ new Error("Canonical memory file not found or not authorized");
47
+ }
48
+ function isInside(parent, child) {
49
+ const relative$1 = relative(parent, child);
50
+ return relative$1 === "" || !relative$1.startsWith("..") && !isAbsolute(relative$1);
51
+ }
52
+ function normalizeWorkspaceDir(workspaceDir) {
53
+ const trimmed = workspaceDir.trim();
54
+ if (!trimmed) throw canonicalDeniedError();
55
+ return resolve(trimmed);
56
+ }
57
+ function isDeniedSegment(segment) {
58
+ const lower = segment.toLowerCase();
59
+ const markdownStem = lower.endsWith(".md") ? lower.slice(0, -3) : lower;
60
+ return lower.startsWith(".") || lower === "user.md" || DENIED_SEGMENTS.has(lower) || DENIED_SEGMENTS.has(markdownStem);
61
+ }
62
+ function normalizeCanonicalMemoryPath(relPath) {
63
+ if (!relPath || relPath.includes("\\") || isAbsolute(relPath)) throw canonicalDeniedError();
64
+ if (relPath === ROOT_MEMORY_FILE) return relPath;
65
+ const segments = relPath.split("/");
66
+ if (segments[0] !== MEMORY_DIR || segments.length < 2 || !segments.at(-1)?.endsWith(".md") || segments.some((segment) => segment === "" || segment === "." || segment === "..")) throw canonicalDeniedError();
67
+ if (segments.some(isDeniedSegment)) throw canonicalDeniedError();
68
+ return posix.join(...segments);
69
+ }
70
+ async function resolveCanonicalPath(workspaceDir, relPath) {
71
+ const workspaceRoot = await realpath(normalizeWorkspaceDir(workspaceDir));
72
+ const normalized = normalizeCanonicalMemoryPath(relPath);
73
+ const absolutePath = resolve(workspaceRoot, ...normalized.split("/"));
74
+ if (!isInside(workspaceRoot, absolutePath)) throw canonicalDeniedError();
75
+ if (!(await lstat(absolutePath).catch(() => {
76
+ throw canonicalDeniedError();
77
+ })).isFile()) throw canonicalDeniedError();
78
+ const realFilePath = await realpath(absolutePath).catch(() => {
79
+ throw canonicalDeniedError();
80
+ });
81
+ if (!isInside(workspaceRoot, realFilePath)) throw canonicalDeniedError();
82
+ if (!(await stat(realFilePath).catch(() => {
83
+ throw canonicalDeniedError();
84
+ })).isFile()) throw canonicalDeniedError();
85
+ return {
86
+ workspaceRoot,
87
+ path: normalized,
88
+ absolutePath,
89
+ realPath: realFilePath
90
+ };
91
+ }
92
+ async function readCanonicalText(workspaceDir, relPath) {
93
+ const resolved = await resolveCanonicalPath(workspaceDir, relPath);
94
+ const text = await readFile(resolved.realPath, "utf8");
95
+ return {
96
+ resolved,
97
+ text,
98
+ lines: text.split("\n")
99
+ };
100
+ }
101
+ async function walkMemoryDir(workspaceRoot, currentDir, relDir, files, diagnostics) {
102
+ if (!(await lstat(currentDir).catch((error) => {
103
+ if ((typeof error === "object" && error ? error.code : void 0) === "ENOENT") return void 0;
104
+ throw error;
105
+ }))?.isDirectory()) return;
106
+ const realDir = await realpath(currentDir).catch((error) => {
107
+ if (diagnostics) {
108
+ diagnostics.unavailable_file_count += 1;
109
+ if (!(error instanceof Error && "code" in error && error.code === "ENOENT")) diagnostics.io_failure_count += 1;
110
+ }
111
+ });
112
+ if (!realDir || !isInside(workspaceRoot, realDir)) return;
113
+ const entries = await readdir(currentDir, { withFileTypes: true }).catch((error) => {
114
+ if ((typeof error === "object" && error ? error.code : void 0) === "ENOENT") return [];
115
+ throw error;
116
+ });
117
+ for (const entry of entries.sort((left, right) => left.name.localeCompare(right.name))) {
118
+ if (isDeniedSegment(entry.name)) continue;
119
+ const relPath = posix.join(relDir, entry.name);
120
+ const absPath = resolve(workspaceRoot, ...relPath.split("/"));
121
+ if (entry.isDirectory()) {
122
+ await walkMemoryDir(workspaceRoot, absPath, relPath, files, diagnostics);
123
+ continue;
124
+ }
125
+ if (!entry.isFile()) continue;
126
+ if (!entry.name.endsWith(".md")) continue;
127
+ const file = await loadCanonicalFileByPath(workspaceRoot, relPath).catch((error) => {
128
+ if (diagnostics) {
129
+ diagnostics.unavailable_file_count += 1;
130
+ if (error instanceof Error && "code" in error && error.code !== "ENOENT") diagnostics.io_failure_count += 1;
131
+ }
132
+ });
133
+ if (file) files.push(file);
134
+ }
135
+ }
136
+ async function loadCanonicalFileByPath(workspaceRoot, relPath) {
137
+ const normalized = normalizeCanonicalMemoryPath(relPath);
138
+ const absolutePath = resolve(workspaceRoot, ...normalized.split("/"));
139
+ if (!(await lstat(absolutePath)).isFile()) throw canonicalDeniedError();
140
+ const realFilePath = await realpath(absolutePath);
141
+ if (!isInside(workspaceRoot, realFilePath)) throw canonicalDeniedError();
142
+ if (!(await stat(realFilePath)).isFile()) throw canonicalDeniedError();
143
+ const text = await readFile(realFilePath, "utf8");
144
+ return {
145
+ path: normalized,
146
+ absolutePath,
147
+ realPath: realFilePath,
148
+ lineCount: Math.max(text.split("\n").length, 1)
149
+ };
150
+ }
151
+ async function listCanonicalMemoryFiles(workspaceDir, diagnostics = {
152
+ io_failure_count: 0,
153
+ unavailable_file_count: 0
154
+ }) {
155
+ const workspaceRoot = await realpath(normalizeWorkspaceDir(workspaceDir));
156
+ const files = [];
157
+ const rootFile = await loadCanonicalFileByPath(workspaceRoot, ROOT_MEMORY_FILE).catch((error) => {
158
+ if (diagnostics) {
159
+ diagnostics.unavailable_file_count += 1;
160
+ if (error instanceof Error && "code" in error && error.code !== "ENOENT") diagnostics.io_failure_count += 1;
161
+ }
162
+ });
163
+ if (rootFile) files.push(rootFile);
164
+ await walkMemoryDir(workspaceRoot, resolve(workspaceRoot, MEMORY_DIR), MEMORY_DIR, files, diagnostics);
165
+ if (diagnostics.io_failure_count > 0) diagnosticLog.warn("Canonical memory discovery degraded", {
166
+ outcome: "partial",
167
+ io_failure_count: diagnostics.io_failure_count,
168
+ unavailable_file_count: diagnostics.unavailable_file_count,
169
+ file_count: files.length
170
+ }, {
171
+ event_name: "memory.provider.canonical.discovery.degraded",
172
+ file: "packages/memory/src/engine/provider/canonical-memory-corpus.ts",
173
+ function: "listCanonicalMemoryFiles",
174
+ site_id: "memory.provider.canonical.discovery.degraded"
175
+ });
176
+ return files.sort((left, right) => left.path.localeCompare(right.path));
177
+ }
178
+ function normalizeSearchText(text) {
179
+ return text.normalize("NFKC").toLowerCase();
180
+ }
181
+ function queryTerms(query) {
182
+ const normalized = normalizeSearchText(query).split(/[^\p{L}\p{M}\p{N}]+/u).filter((term) => term.length > 1);
183
+ return [...new Set(normalized)];
184
+ }
185
+ function scoreText(text, terms) {
186
+ const lower = normalizeSearchText(text);
187
+ const matched = terms.filter((term) => lower.includes(term)).length;
188
+ if (matched === 0) return 0;
189
+ return matched / Math.max(terms.length, 1);
190
+ }
191
+ function bestSnippet(lines, terms) {
192
+ let bestLine = 0;
193
+ let bestScore = 0;
194
+ for (let index = 0; index < lines.length; index += 1) {
195
+ const score = scoreText(lines[index] ?? "", terms);
196
+ if (score > bestScore) {
197
+ bestLine = index;
198
+ bestScore = score;
199
+ }
200
+ }
201
+ const snippet = (lines[bestLine] ?? "").trim() || lines.slice(0, 2).join(" ").trim();
202
+ return {
203
+ line: bestLine + 1,
204
+ snippet
205
+ };
206
+ }
207
+ async function searchCanonicalMemoryFiles(params) {
208
+ const terms = queryTerms(params.query);
209
+ if (terms.length === 0) return [];
210
+ const files = await listCanonicalMemoryFiles(params.workspaceDir, params.diagnostics);
211
+ const results = [];
212
+ for (const file of files) {
213
+ const text = await readFile(file.realPath, "utf8");
214
+ const score = scoreText(text, terms);
215
+ if (score <= 0) continue;
216
+ const { line, snippet } = bestSnippet(text.split("\n"), terms);
217
+ results.push({
218
+ path: file.path,
219
+ startLine: line,
220
+ endLine: line,
221
+ score,
222
+ textScore: score,
223
+ snippet,
224
+ source: "memory",
225
+ citation: `${file.path}:${line}`
226
+ });
227
+ }
228
+ return results.sort((left, right) => right.score - left.score || left.path.localeCompare(right.path)).slice(0, clampInt(params.maxResults, 1, MAX_READ_LINES));
229
+ }
230
+ async function readCanonicalMemoryFile(params) {
231
+ const { resolved, lines: allLines } = await readCanonicalText(params.workspaceDir, params.relPath);
232
+ const start = clampInt(params.from ?? 1, 1, Math.max(allLines.length, 1));
233
+ const requested = clampInt(params.lines ?? DEFAULT_READ_LINES, 1, MAX_READ_LINES);
234
+ const endExclusive = Math.min(start - 1 + requested, allLines.length);
235
+ const truncated = endExclusive < allLines.length;
236
+ return {
237
+ text: allLines.slice(start - 1, endExclusive).join("\n"),
238
+ path: resolved.path,
239
+ startLine: start,
240
+ endLine: Math.max(start, endExclusive),
241
+ ...truncated ? {
242
+ truncated,
243
+ nextFrom: endExclusive + 1
244
+ } : {},
245
+ from: start,
246
+ lines: requested
247
+ };
248
+ }
249
+ function canonicalMemoryWorkspaceFingerprint(workspaceDir) {
250
+ return normalizeWorkspaceDir(workspaceDir).split(sep).join("/");
251
+ }
252
+ //#endregion
253
+ export { canonicalMemoryWorkspaceFingerprint, listCanonicalMemoryFiles, normalizeCanonicalMemoryPath, readCanonicalMemoryFile, searchCanonicalMemoryFiles };