@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,103 @@
1
+ //#region src/engine/i18n/res/_types.d.ts
2
+ type TemporalIntervalAnchor = "today" | "yesterday" | "tomorrow" | "day_after_tomorrow" | "this_week" | "next_week" | "last_week" | "this_month" | "next_month" | "tonight" | "this_morning" | "recent";
3
+ interface TemporalPhraseRule {
4
+ patterns: ReadonlyArray<RegExp>;
5
+ anchor: TemporalIntervalAnchor;
6
+ }
7
+ interface CategoryRoutingNs {
8
+ identity: ReadonlyArray<RegExp>;
9
+ preference: ReadonlyArray<RegExp>;
10
+ entity: ReadonlyArray<RegExp>;
11
+ event: ReadonlyArray<RegExp>;
12
+ lesson: ReadonlyArray<RegExp>;
13
+ }
14
+ interface CaptureTriggersNs {
15
+ categoryRouting: CategoryRoutingNs;
16
+ identityPattern: RegExp;
17
+ preferencePattern: RegExp;
18
+ entityPattern: RegExp;
19
+ eventPattern: RegExp;
20
+ lessonPattern: RegExp;
21
+ temporalPhrases?: ReadonlyArray<TemporalPhraseRule>;
22
+ /**
23
+ * Matches a clock time stated in this locale's own words, e.g. Korean "오후 3시" or "세 시".
24
+ *
25
+ * `temporalPhrases` only knows day-sized anchors. A sentence that names a day AND an hour is
26
+ * therefore only partly readable from the table, and the hour is the part a model has to read.
27
+ * Declaring the marker here — beside the phrases it qualifies — keeps the natural language in
28
+ * the locale resource, where a reader of that language can check it, rather than inline in the
29
+ * resolver.
30
+ */
31
+ temporalClockTimePattern?: RegExp;
32
+ weekStartDay: 0 | 1 | 2 | 3 | 4 | 5 | 6;
33
+ /**
34
+ * Native imperative patterns the user issues to explicitly persist a memory
35
+ * (e.g. English "Remember X", Chinese "记住 X"). Used by the parser's
36
+ * deterministic fallback when LLM extraction misses an explicit teach.
37
+ * Each pattern must encode its own gating — bare "save" / "store" variants
38
+ * are intentionally excluded.
39
+ */
40
+ explicitMemoryCommandPositivePatterns: ReadonlyArray<RegExp>;
41
+ /**
42
+ * Native question forms that ask the system to recall a prior memory
43
+ * (e.g. English "do you remember", Chinese "你还记得...吗"). Must NOT
44
+ * be treated as a store-imperative.
45
+ */
46
+ explicitMemoryCommandRecallQuestionPatterns: ReadonlyArray<RegExp>;
47
+ /**
48
+ * Native verbs that ask the system to drop or clear a memory
49
+ * (e.g. English "forget", Chinese "忘记"). Must NOT be treated as
50
+ * a store-imperative.
51
+ */
52
+ explicitMemoryCommandManagementPatterns: ReadonlyArray<RegExp>;
53
+ }
54
+ interface NoiseNs {
55
+ denialPatterns: ReadonlyArray<RegExp>;
56
+ correctionSignals: ReadonlyArray<RegExp>;
57
+ metaQuestionPatterns: ReadonlyArray<RegExp>;
58
+ /** User frustration aimed at the memory system ("you never remember", "why is my memory broken"). */
59
+ metaFrustrationPatterns: ReadonlyArray<RegExp>;
60
+ ackTokens: ReadonlyArray<RegExp>;
61
+ memoryIntent: ReadonlyArray<RegExp>;
62
+ }
63
+ interface ToolDescriptionsNs {
64
+ memoryRecall: string;
65
+ memoryStore: string;
66
+ memoryForget: string;
67
+ memoryUpdate: string;
68
+ memoryStats: string;
69
+ memoryList: string;
70
+ }
71
+ interface ExtractionPromptsNs {
72
+ buildDateResolutionPrompt(): string;
73
+ buildExtractionPrompt(conversationText: string, user: string, sessionDateTime?: string, sessionTimezone?: string, activeProfileSectionNames?: readonly string[]): string;
74
+ buildDedupPrompt(candidateAbstract: string, candidateOverview: string, candidateContent: string, existingMemories: string): string;
75
+ }
76
+ interface ReflectionErrorSignalLike {
77
+ toolName: string;
78
+ summary: string;
79
+ signatureHash: string;
80
+ }
81
+ interface ReflectionPromptsNs {
82
+ buildReflectionPrompt(conversation: string, maxInputChars: number, toolErrorSignals?: ReadonlyArray<ReflectionErrorSignalLike>): string;
83
+ buildReflectionFallbackText(): string;
84
+ }
85
+ interface ReflectionSliceClassifiersNs {
86
+ invariantSignals: ReadonlyArray<RegExp>;
87
+ derivedSignals: ReadonlyArray<RegExp>;
88
+ openLoopSignals: ReadonlyArray<RegExp>;
89
+ invariantLegacySignals: ReadonlyArray<RegExp>;
90
+ derivedLegacySignals: ReadonlyArray<RegExp>;
91
+ }
92
+ interface LocaleResources {
93
+ captureTriggers: CaptureTriggersNs;
94
+ noise: NoiseNs;
95
+ toolDescriptions: ToolDescriptionsNs;
96
+ extractionPrompts: ExtractionPromptsNs;
97
+ reflectionPrompts: ReflectionPromptsNs;
98
+ reflectionSliceClassifiers: ReflectionSliceClassifiersNs;
99
+ }
100
+ type Namespace = keyof LocaleResources;
101
+ declare const ALL_NAMESPACES: ReadonlyArray<Namespace>;
102
+ //#endregion
103
+ export { LocaleResources as a, ReflectionErrorSignalLike as c, TemporalIntervalAnchor as d, TemporalPhraseRule as f, ExtractionPromptsNs as i, ReflectionPromptsNs as l, CaptureTriggersNs as n, Namespace as o, ToolDescriptionsNs as p, CategoryRoutingNs as r, NoiseNs as s, ALL_NAMESPACES as t, ReflectionSliceClassifiersNs as u };
@@ -0,0 +1,110 @@
1
+ import { v as MemoryMetadata } from "./types-DxKqU60b.js";
2
+ import { sn as RecallLifecycleConfig } from "./index-DL8AVj0Z.js";
3
+ import { C as MemoryStore } from "./memory-store-base-XRA4S9Xl.js";
4
+ import "./store-2pM0-dZg.js";
5
+ //#region src/engine/retrieval/access-tracker.d.ts
6
+ interface AccessMetadata {
7
+ readonly accessCount: number;
8
+ readonly lastAccessedAt: number;
9
+ }
10
+ interface AccessTrackerOptions {
11
+ readonly store: MemoryStore;
12
+ readonly debounceMs?: number;
13
+ readonly recallLifecycle?: RecallLifecycleConfig;
14
+ }
15
+ /**
16
+ * Parse access-related fields from a metadata JSON string.
17
+ *
18
+ * Handles: undefined, empty string, malformed JSON, negative numbers,
19
+ * numbers exceeding 10000. Always returns a valid AccessMetadata.
20
+ */
21
+ declare function parseAccessMetadata(metadata: string | undefined): AccessMetadata & Partial<MemoryMetadata>;
22
+ /**
23
+ * Merge an access-count increment into existing metadata JSON.
24
+ *
25
+ * Preserves ALL existing fields in the metadata object — only overwrites
26
+ * `accessCount` and `lastAccessedAt`. Returns a new JSON string.
27
+ */
28
+ declare function buildUpdatedMetadata(existingMetadata: string | undefined, accessDelta: number, ceiling?: number): string;
29
+ /**
30
+ * Compute the effective half-life for a memory based on its access history.
31
+ *
32
+ * The access count itself decays over time (30-day half-life for access
33
+ * freshness), so stale accesses contribute less reinforcement. The extension
34
+ * uses a logarithmic curve (`Math.log1p`) to provide diminishing returns.
35
+ *
36
+ * @param baseHalfLife - Base half-life in days (e.g. 30)
37
+ * @param accessCount - Raw number of times the memory was accessed
38
+ * @param lastAccessedAt - Timestamp (ms) of last access
39
+ * @param reinforcementFactor - Scaling factor for reinforcement (0 = disabled)
40
+ * @param maxMultiplier - Hard cap: result <= baseHalfLife * maxMultiplier
41
+ * @returns Effective half-life in days
42
+ */
43
+ declare function computeEffectiveHalfLife(baseHalfLife: number, accessCount: number, lastAccessedAt: number, reinforcementFactor: number, maxMultiplier: number, now?: number): number;
44
+ /**
45
+ * Debounced write-back tracker for memory access events.
46
+ *
47
+ * `recordAccess()` is synchronous (Map update only, no I/O). Pending deltas
48
+ * accumulate until `flush()` is called (or after debounceMs timeout).
49
+ * On flush, each pending entry is read via `store.getById()`, its metadata
50
+ * is merged with the accumulated access delta, and written back via
51
+ * `store.update()`.
52
+ */
53
+ declare class AccessTracker {
54
+ private readonly pending;
55
+ private debounceTimer;
56
+ private flushPromise;
57
+ private readonly debounceMs;
58
+ private readonly store;
59
+ private retryDelayMs;
60
+ private readonly writeFailures;
61
+ private destroying;
62
+ private readonly recallLifecycle;
63
+ private readonly clampedOnce;
64
+ /**
65
+ * Initializes access reinforcement metadata collaborators while keeping runtime work in
66
+ * explicit methods.
67
+ */
68
+ constructor(options: AccessTrackerOptions);
69
+ /**
70
+ * Record one access for each of the given memory IDs.
71
+ * Synchronous — only updates the in-memory pending map.
72
+ */
73
+ recordAccess(ids: readonly string[]): void;
74
+ /** Return a snapshot of all pending (id -> delta) entries. */
75
+ getPendingUpdates(): Map<string, number>;
76
+ /**
77
+ * Flush pending access deltas to the store.
78
+ *
79
+ * If a flush is already in progress, awaits the current flush to complete.
80
+ * If new pending data accumulated during the in-flight flush, a follow-up
81
+ * flush is automatically triggered.
82
+ */
83
+ flush(): Promise<void>;
84
+ /** Tear down the tracker with one final best-effort flush. */
85
+ destroy(): Promise<void>;
86
+ /**
87
+ * Flushes all pending deltas in ONE store call (one mutex acquisition + one
88
+ * transaction), instead of the historical per-id mutex+transaction+full
89
+ * update() round trip. Policy (rate-limit window, ceiling clamp) stays here,
90
+ * delivered through per-id delta callbacks; the store only merges and writes.
91
+ */
92
+ private doFlush;
93
+ /**
94
+ * Per-id policy transform executed inside the store's batch transaction.
95
+ * Returns undefined to skip the write (rate-limited). Both metadata key
96
+ * styles are written — see the cross-subsystem naming note on
97
+ * buildUpdatedMetadata.
98
+ */
99
+ private buildAccessDelta;
100
+ /** Implements reset timer as the local access reinforcement metadata operation. */
101
+ private resetTimer;
102
+ /** Implements schedule retry as the local access reinforcement metadata operation. */
103
+ private scheduleRetry;
104
+ /** Implements reset timer with delay as the local access reinforcement metadata operation. */
105
+ private resetTimerWithDelay;
106
+ /** Removes timer while preserving access reinforcement metadata invariants. */
107
+ private clearTimer;
108
+ }
109
+ //#endregion
110
+ export { computeEffectiveHalfLife as a, buildUpdatedMetadata as i, AccessTracker as n, parseAccessMetadata as o, AccessTrackerOptions as r, AccessMetadata as t };
@@ -0,0 +1,69 @@
1
+ import { t as PluginConfig } from "./plugin-config-schema-C0UUbOmG.js";
2
+ import "./types-DxKqU60b.js";
3
+ import { t as ObserveLogger } from "./best-effort-BPZSzKk0.js";
4
+ import { AgentId, EventType, JsonObject } from "@snoai/observability";
5
+ //#region src/engine/observability/cost-aggregator.d.ts
6
+ type CostSummaryPayload = JsonObject & {
7
+ session_uuid: string;
8
+ tokens_in: number;
9
+ tokens_out: number;
10
+ llm_calls: number;
11
+ memory_writes: number;
12
+ memory_reads: number;
13
+ tool_calls: number;
14
+ host_agent_prompt_tokens: number;
15
+ host_agent_completion_tokens: number;
16
+ plugin_internal_prompt_tokens: number;
17
+ plugin_internal_completion_tokens: number;
18
+ local_memory_input_tokens: number;
19
+ local_memory_output_tokens: number;
20
+ };
21
+ declare class CostAggregator {
22
+ private readonly sessions;
23
+ start(sessionUuid: string): void;
24
+ /** Takes over another aggregator's open sessions, so a re-registration keeps their tallies. */
25
+ adopt(other: CostAggregator): void;
26
+ record(eventType: EventType, sessionUuid: string | undefined, payload: JsonObject): void;
27
+ summary(sessionUuid: string): CostSummaryPayload;
28
+ delete(sessionUuid: string): void;
29
+ summaryAndDelete(sessionUuid: string): CostSummaryPayload;
30
+ clear(): void;
31
+ }
32
+ //#endregion
33
+ //#region src/engine/observability/adapter.d.ts
34
+ type EmitInput = {
35
+ eventType: EventType;
36
+ eventId?: string;
37
+ tsEdgeMs?: number;
38
+ scope?: JsonObject;
39
+ payload: JsonObject;
40
+ sessionUuid?: string;
41
+ };
42
+ type FlushOptions = {
43
+ force?: boolean;
44
+ timeoutMs?: number;
45
+ };
46
+ declare class PluginObservability {
47
+ private readonly runtime;
48
+ readonly logger: ObserveLogger | undefined;
49
+ private readonly pending;
50
+ readonly agentId: AgentId;
51
+ readonly enabled: boolean;
52
+ readonly aggregator: CostAggregator;
53
+ constructor(config: PluginConfig, cwd: string, logger?: ObserveLogger, options?: {
54
+ agentVersion?: string;
55
+ }, redactionRules?: readonly string[]);
56
+ hashText(input: string): string | undefined;
57
+ emit(input: EmitInput): Promise<void>;
58
+ tryEmit(input: EmitInput): Promise<boolean>;
59
+ private runEmitWithTimeout;
60
+ emitError(kind: string, error: unknown, sessionUuid?: string): Promise<void>;
61
+ trackBestEffort(label: string, task: () => void | Promise<void>): void;
62
+ private runBackgroundTask;
63
+ drain(options?: Pick<FlushOptions, "timeoutMs">): Promise<void>;
64
+ drainBuffer(options?: Pick<FlushOptions, "timeoutMs">): Promise<void>;
65
+ flush(options?: FlushOptions): Promise<void>;
66
+ shutdown(): Promise<void>;
67
+ }
68
+ //#endregion
69
+ export { PluginObservability as n, EmitInput as t };
@@ -0,0 +1,333 @@
1
+ import { bestEffort, bestEffortSync } from "./internal/engine/observability/best-effort.js";
2
+ import { readInstalledPackageVersion, readSnoStationCoreWorkspaceVersion } from "./internal/engine/observability/version-metadata.js";
3
+ import { createLogger } from "@snoai/utils/logger";
4
+ import { createSnoObserve, laneForEventType } from "@snoai/observability";
5
+ //#region src/engine/observability/cost-aggregator.ts
6
+ function emptyCounters() {
7
+ return {
8
+ hostAgentPromptTokens: 0,
9
+ hostAgentCompletionTokens: 0,
10
+ pluginInternalPromptTokens: 0,
11
+ pluginInternalCompletionTokens: 0,
12
+ localMemoryInputTokens: 0,
13
+ localMemoryOutputTokens: 0,
14
+ llmCalls: 0,
15
+ memoryWrites: 0,
16
+ memoryReads: 0,
17
+ toolCalls: 0
18
+ };
19
+ }
20
+ function numberFromPayload(payload, key) {
21
+ const value = payload[key];
22
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
23
+ }
24
+ var CostAggregator = class {
25
+ sessions = /* @__PURE__ */ new Map();
26
+ start(sessionUuid) {
27
+ if (!this.sessions.has(sessionUuid)) this.sessions.set(sessionUuid, emptyCounters());
28
+ }
29
+ /** Takes over another aggregator's open sessions, so a re-registration keeps their tallies. */
30
+ adopt(other) {
31
+ for (const [sessionUuid, counters] of other.sessions) if (!this.sessions.has(sessionUuid)) this.sessions.set(sessionUuid, counters);
32
+ }
33
+ record(eventType, sessionUuid, payload) {
34
+ if (!sessionUuid) return;
35
+ const counters = this.sessions.get(sessionUuid) ?? emptyCounters();
36
+ let changed = true;
37
+ if (eventType === "memory.write") {
38
+ counters.memoryWrites += 1;
39
+ counters.localMemoryInputTokens += numberFromPayload(payload, "content_tokens");
40
+ } else if (eventType === "memory.read") {
41
+ counters.memoryReads += 1;
42
+ counters.localMemoryInputTokens += numberFromPayload(payload, "query_tokens");
43
+ counters.localMemoryOutputTokens += numberFromPayload(payload, "result_tokens");
44
+ } else if (eventType === "llm.call") {
45
+ counters.llmCalls += 1;
46
+ if (payload.token_source === "plugin_internal_paid") {
47
+ counters.pluginInternalPromptTokens += numberFromPayload(payload, "prompt_tokens");
48
+ counters.pluginInternalCompletionTokens += numberFromPayload(payload, "completion_tokens");
49
+ } else {
50
+ counters.hostAgentPromptTokens += numberFromPayload(payload, "prompt_tokens");
51
+ counters.hostAgentCompletionTokens += numberFromPayload(payload, "completion_tokens");
52
+ }
53
+ } else if (eventType === "tool.call") counters.toolCalls += 1;
54
+ else changed = false;
55
+ if (changed) this.sessions.set(sessionUuid, counters);
56
+ }
57
+ summary(sessionUuid) {
58
+ const counters = this.sessions.get(sessionUuid) ?? emptyCounters();
59
+ return {
60
+ session_uuid: sessionUuid,
61
+ tokens_in: counters.hostAgentPromptTokens + counters.pluginInternalPromptTokens,
62
+ tokens_out: counters.hostAgentCompletionTokens + counters.pluginInternalCompletionTokens,
63
+ llm_calls: counters.llmCalls,
64
+ memory_writes: counters.memoryWrites,
65
+ memory_reads: counters.memoryReads,
66
+ tool_calls: counters.toolCalls,
67
+ host_agent_prompt_tokens: counters.hostAgentPromptTokens,
68
+ host_agent_completion_tokens: counters.hostAgentCompletionTokens,
69
+ plugin_internal_prompt_tokens: counters.pluginInternalPromptTokens,
70
+ plugin_internal_completion_tokens: counters.pluginInternalCompletionTokens,
71
+ local_memory_input_tokens: counters.localMemoryInputTokens,
72
+ local_memory_output_tokens: counters.localMemoryOutputTokens
73
+ };
74
+ }
75
+ delete(sessionUuid) {
76
+ this.sessions.delete(sessionUuid);
77
+ }
78
+ summaryAndDelete(sessionUuid) {
79
+ const summary = this.summary(sessionUuid);
80
+ this.delete(sessionUuid);
81
+ return summary;
82
+ }
83
+ clear() {
84
+ this.sessions.clear();
85
+ }
86
+ };
87
+ //#endregion
88
+ //#region src/engine/observability/adapter.ts
89
+ /** @file adapter.ts
90
+ * @purpose Adapts plugin events to the public @snoai/observability SDK.
91
+ * @boundary Plugin emits only public SDK events; the SDK owns buffering and HTTP delivery.
92
+ */
93
+ const diagnosticLog = createLogger("sno-station-mem:adapter");
94
+ const OBSERVE_EMIT_TIMEOUT_MS = 5e3;
95
+ const OBSERVE_BACKGROUND_TIMEOUT_MS = 5e3;
96
+ function formatErrorMessage(error) {
97
+ if (error instanceof Error) return error.message;
98
+ if (typeof error === "string") return error;
99
+ if (typeof error === "object" && error !== null) try {
100
+ return JSON.stringify(error);
101
+ } catch {
102
+ return "[unserializable]";
103
+ }
104
+ return String(error);
105
+ }
106
+ var PluginObservability = class {
107
+ runtime;
108
+ logger;
109
+ pending = /* @__PURE__ */ new Set();
110
+ agentId;
111
+ enabled;
112
+ aggregator = new CostAggregator();
113
+ constructor(config, cwd, logger, options = {}, redactionRules = []) {
114
+ this.enabled = config.observe.enabled;
115
+ this.agentId = config.observe.agentId;
116
+ this.logger = logger;
117
+ if (this.enabled) {
118
+ const pluginVersion = readSnoStationCoreWorkspaceVersion() ?? readInstalledPackageVersion();
119
+ this.runtime = createSnoObserve({
120
+ cwd,
121
+ baseUrl: config.observe.baseUrl,
122
+ redactionRules,
123
+ ...pluginVersion ? {
124
+ cliVersion: pluginVersion,
125
+ pluginVersion
126
+ } : {},
127
+ ...options.agentVersion ? { agentVersion: options.agentVersion } : {}
128
+ });
129
+ }
130
+ }
131
+ hashText(input) {
132
+ if (!this.runtime) return void 0;
133
+ return bestEffortSync("hashRedactedText", () => this.runtime?.hashRedactedText(input), this.logger);
134
+ }
135
+ async emit(input) {
136
+ await this.tryEmit(input);
137
+ }
138
+ async tryEmit(input) {
139
+ if (!this.runtime) return false;
140
+ const scope = input.sessionUuid ? {
141
+ ...input.scope ?? {},
142
+ session_uuid: input.sessionUuid
143
+ } : input.scope;
144
+ const event = {
145
+ event_type: input.eventType,
146
+ ...input.tsEdgeMs !== void 0 ? { ts_edge_ms: input.tsEdgeMs } : {},
147
+ ...input.eventId ? { event_id: input.eventId } : {},
148
+ agent_id: this.agentId,
149
+ lane: laneForEventType(input.eventType),
150
+ ...scope ? { scope } : {},
151
+ payload: input.payload
152
+ };
153
+ if (input.eventType !== "tool.call") bestEffortSync("costAggregator.record", () => this.aggregator.record(input.eventType, input.sessionUuid, input.payload), this.logger);
154
+ try {
155
+ return await this.runEmitWithTimeout(event, { timeoutMs: OBSERVE_EMIT_TIMEOUT_MS });
156
+ } catch (error) {
157
+ diagnosticLog.error("Cloud event emission failed", {
158
+ event_type: input.eventType,
159
+ error,
160
+ outcome: "failed"
161
+ }, {
162
+ event_name: "observability.emit.failed",
163
+ file: "packages/memory/src/engine/observability/adapter.ts",
164
+ function: "PluginObservability.tryEmit",
165
+ site_id: "observability.emit.failed"
166
+ });
167
+ return false;
168
+ }
169
+ }
170
+ async runEmitWithTimeout(event, options) {
171
+ let timeoutHandle;
172
+ const run = Promise.resolve().then(() => this.runtime?.emit(event)).then(() => true);
173
+ run.catch(() => void 0);
174
+ try {
175
+ return await Promise.race([run, new Promise((resolve) => {
176
+ timeoutHandle = setTimeout(() => {
177
+ diagnosticLog.error("sno-station-mem observability: emit timed out", { event_type: event.event_type }, {
178
+ event_name: "sno_station_mem.adapter.sno.station.mem.observability.emit.timed.out",
179
+ file: "packages/memory/src/engine/observability/adapter.ts",
180
+ function: "<anonymous callback>",
181
+ site_id: "adapter.<anonymous callback>.82f49c57a7"
182
+ });
183
+ resolve(false);
184
+ }, options.timeoutMs);
185
+ timeoutHandle.unref?.();
186
+ })]);
187
+ } finally {
188
+ if (timeoutHandle) clearTimeout(timeoutHandle);
189
+ }
190
+ }
191
+ async emitError(kind, error, sessionUuid) {
192
+ const messageHash = this.hashText(formatErrorMessage(error));
193
+ if (!messageHash) return;
194
+ await this.emit({
195
+ eventType: "error",
196
+ sessionUuid,
197
+ payload: {
198
+ kind,
199
+ component: {
200
+ "claude-code": "mem-claude",
201
+ codex: "mem-codex",
202
+ openclaw: "mem-claw",
203
+ hermes: "mem-hermes"
204
+ }[this.agentId],
205
+ context: kind.split(":", 1)[0] ?? kind,
206
+ message_hash: messageHash,
207
+ recoverable: false
208
+ }
209
+ });
210
+ }
211
+ trackBestEffort(label, task) {
212
+ const run = bestEffort(label, task, this.logger);
213
+ const tracked = this.runBackgroundTask(label, run).finally(() => {
214
+ this.pending.delete(tracked);
215
+ });
216
+ this.pending.add(tracked);
217
+ }
218
+ async runBackgroundTask(label, run) {
219
+ let timeoutHandle;
220
+ run.catch(() => void 0);
221
+ try {
222
+ await Promise.race([run, new Promise((resolve) => {
223
+ timeoutHandle = setTimeout(() => {
224
+ diagnosticLog.error("Background telemetry action timed out", {
225
+ action: label,
226
+ timeout_ms: OBSERVE_BACKGROUND_TIMEOUT_MS
227
+ }, {
228
+ event_name: "observability.background.timed_out",
229
+ file: "packages/memory/src/engine/observability/adapter.ts",
230
+ function: "PluginObservability.runBackgroundTask",
231
+ site_id: "observability.background.timed_out"
232
+ });
233
+ resolve();
234
+ }, OBSERVE_BACKGROUND_TIMEOUT_MS);
235
+ timeoutHandle.unref?.();
236
+ })]);
237
+ } finally {
238
+ if (timeoutHandle) clearTimeout(timeoutHandle);
239
+ }
240
+ }
241
+ async drain(options = {}) {
242
+ if (this.pending.size === 0) return;
243
+ const pending = Promise.allSettled([...this.pending]).then(() => void 0);
244
+ if (!options.timeoutMs) {
245
+ await bestEffort("drain", () => pending, this.logger);
246
+ return;
247
+ }
248
+ await bestEffort("drain", async () => {
249
+ let timeoutHandle;
250
+ try {
251
+ await Promise.race([pending, new Promise((resolve) => {
252
+ timeoutHandle = setTimeout(() => {
253
+ diagnosticLog.warn("sno observe drain timed out", void 0, {
254
+ event_name: "sno_station_mem.adapter.sno.observe.drain.timed.out",
255
+ file: "packages/memory/src/engine/observability/adapter.ts",
256
+ function: "<anonymous callback>",
257
+ site_id: "adapter.<anonymous callback>.f036514cb8"
258
+ });
259
+ resolve();
260
+ }, options.timeoutMs);
261
+ timeoutHandle.unref?.();
262
+ })]);
263
+ } finally {
264
+ if (timeoutHandle) clearTimeout(timeoutHandle);
265
+ }
266
+ }, this.logger);
267
+ }
268
+ async drainBuffer(options = {}) {
269
+ if (!this.runtime) return;
270
+ const run = this.runtime.drain().then(() => void 0);
271
+ run.catch(() => void 0);
272
+ if (!options.timeoutMs) {
273
+ await bestEffort("drainBuffer", () => run, this.logger);
274
+ return;
275
+ }
276
+ await bestEffort("drainBuffer", async () => {
277
+ let timeoutHandle;
278
+ try {
279
+ await Promise.race([run, new Promise((resolve) => {
280
+ timeoutHandle = setTimeout(() => {
281
+ diagnosticLog.warn("sno observe buffer drain timed out", void 0, {
282
+ event_name: "sno_station_mem.adapter.sno.observe.buffer.drain.timed.out",
283
+ file: "packages/memory/src/engine/observability/adapter.ts",
284
+ function: "<anonymous callback>",
285
+ site_id: "adapter.<anonymous callback>.9aedc01548"
286
+ });
287
+ resolve();
288
+ }, options.timeoutMs);
289
+ timeoutHandle.unref?.();
290
+ })]);
291
+ } finally {
292
+ if (timeoutHandle) clearTimeout(timeoutHandle);
293
+ }
294
+ }, this.logger);
295
+ }
296
+ async flush(options = {}) {
297
+ if (!this.runtime) return;
298
+ const force = options.force ?? true;
299
+ const run = this.runtime.flush({ force }).then(() => void 0);
300
+ run.catch(() => void 0);
301
+ if (!options.timeoutMs) {
302
+ await bestEffort("flush", () => run, this.logger);
303
+ return;
304
+ }
305
+ await bestEffort("flush", async () => {
306
+ let timeoutHandle;
307
+ try {
308
+ await Promise.race([run, new Promise((resolve) => {
309
+ timeoutHandle = setTimeout(() => {
310
+ diagnosticLog.warn("sno observe flush timed out", void 0, {
311
+ event_name: "sno_station_mem.adapter.sno.observe.flush.timed.out",
312
+ file: "packages/memory/src/engine/observability/adapter.ts",
313
+ function: "<anonymous callback>",
314
+ site_id: "adapter.<anonymous callback>.52f64c2607"
315
+ });
316
+ resolve();
317
+ }, options.timeoutMs);
318
+ timeoutHandle.unref?.();
319
+ })]);
320
+ } finally {
321
+ if (timeoutHandle) clearTimeout(timeoutHandle);
322
+ }
323
+ }, this.logger);
324
+ }
325
+ async shutdown() {
326
+ if (!this.runtime) return;
327
+ await bestEffort("shutdown", async () => {
328
+ await this.runtime?.shutdown();
329
+ }, this.logger);
330
+ }
331
+ };
332
+ //#endregion
333
+ export { PluginObservability as t };
@@ -0,0 +1,53 @@
1
+ //#region src/model/agent-llm-port.d.ts
2
+ /** @file agent-llm-port.ts
3
+ * @purpose Universal call surface for borrowing the host agent's LLM (the agent-host-seam transport).
4
+ * @boundary Types and result contracts only; host bindings live in plugin/, dispatch in llm-client.ts.
5
+ */
6
+ /**
7
+ * One completion request against the host agent's configured model. The
8
+ * binding absorbs its transport's limitations (OAuth, cancellation shape,
9
+ * unsupported knobs) — callers never branch on host specifics.
10
+ */
11
+ type AgentLlmRequest = {
12
+ /** System prompt; the binding places it wherever its transport expects. */
13
+ system?: string;
14
+ /** User prompt content. */
15
+ prompt: string;
16
+ /** Best-effort output bound; stripped when the transport rejects it. */
17
+ maxTokens?: number;
18
+ /** Overrides the host binding's default-off reasoning mode for this request. */
19
+ enableThinking?: boolean;
20
+ /** Deadline; the binding MUST terminate the underlying request. */
21
+ timeoutMs?: number;
22
+ /** Cooperative cancellation; the binding MUST honor it. */
23
+ signal?: AbortSignal;
24
+ };
25
+ /**
26
+ * Typed completion result. Cancellation and errors are values, not thrown:
27
+ * a cancelled call must never be readable as "the model found nothing"
28
+ * (the SnoStationMem seam resolves aborted calls with a normal-shaped empty
29
+ * response, which is exactly the trap this shape exists to close).
30
+ */
31
+ type AgentLlmCompletion = {
32
+ kind: "ok";
33
+ text: string;
34
+ } | {
35
+ kind: "cancelled";
36
+ reason: string;
37
+ } | {
38
+ kind: "error";
39
+ /**
40
+ * auth: generic credential rejection. credential-expired and
41
+ * credential-revoked preserve actionable OAuth states. exhausted:
42
+ * the subscription has reached a hard usage limit. throttle:
43
+ * transient rate limit. transport: the seam is unavailable.
44
+ * unknown: everything else.
45
+ */
46
+ category: "auth" | "credential-expired" | "credential-revoked" | "exhausted" | "throttle" | "transport" | "unknown";
47
+ message: string;
48
+ };
49
+ interface AgentLlmPort {
50
+ complete(request: AgentLlmRequest): Promise<AgentLlmCompletion>;
51
+ }
52
+ //#endregion
53
+ export { AgentLlmPort as n, AgentLlmRequest as r, AgentLlmCompletion as t };