@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,334 @@
1
+ //#region src/model/llm-json-utils.ts
2
+ /** @file llm-json-utils.ts
3
+ * @purpose Extracts and repairs JSON returned by LLM providers.
4
+ * @boundary Response-text normalization only; schema validation remains with callers.
5
+ */
6
+ /**
7
+ * Extract JSON from an LLM response that may be wrapped in markdown fences
8
+ * or contain surrounding text.
9
+ */
10
+ function extractJsonFromResponse(text) {
11
+ for (const fence of text.matchAll(/```(?:json)?\s*\n?([\s\S]*?)```/g)) {
12
+ const body = (fence[1] ?? "").trim();
13
+ if (isRecoverableJson(body)) return body;
14
+ }
15
+ let searchFrom = 0;
16
+ while (searchFrom < text.length) {
17
+ const slice = balancedSliceFrom(text, searchFrom);
18
+ if (slice === null || slice.text === null) return null;
19
+ if (isRecoverableJson(slice.text)) return slice.text;
20
+ searchFrom = slice.start + 1;
21
+ }
22
+ return null;
23
+ }
24
+ /** True when the slice is JSON or the existing repair pass can make it JSON. */
25
+ function isRecoverableJson(candidate) {
26
+ try {
27
+ JSON.parse(candidate);
28
+ return true;
29
+ } catch {
30
+ const repaired = repairCommonJson(candidate);
31
+ if (repaired === candidate) return false;
32
+ try {
33
+ JSON.parse(repaired);
34
+ return true;
35
+ } catch {
36
+ return false;
37
+ }
38
+ }
39
+ }
40
+ /** The first balanced `{...}` or `[...]` at or after `from`, with the index it started at. */
41
+ function balancedSliceFrom(text, from) {
42
+ const start = firstContainerIndex(text, from);
43
+ if (start === -1) return null;
44
+ const opener = text[start];
45
+ const closer = opener === "[" ? "]" : "}";
46
+ let depth = 0;
47
+ let inString = false;
48
+ let escaped = false;
49
+ for (let i = start; i < text.length; i++) {
50
+ const ch = text[i];
51
+ if (ch === void 0) continue;
52
+ if (escaped) {
53
+ escaped = false;
54
+ continue;
55
+ }
56
+ if (ch === "\\") {
57
+ escaped = inString;
58
+ continue;
59
+ }
60
+ if (ch === "\"") {
61
+ inString = !inString;
62
+ continue;
63
+ }
64
+ if (inString) continue;
65
+ if (ch === opener) depth++;
66
+ else if (ch === closer) {
67
+ depth--;
68
+ if (depth === 0) return {
69
+ text: text.substring(start, i + 1),
70
+ start
71
+ };
72
+ }
73
+ }
74
+ return {
75
+ text: null,
76
+ start
77
+ };
78
+ }
79
+ /** First `{` or `[` that is not inside a string, or -1. */
80
+ function firstContainerIndex(text, from = 0) {
81
+ let inString = false;
82
+ let escaped = false;
83
+ for (let i = from; i < text.length; i++) {
84
+ const ch = text[i];
85
+ if (ch === void 0) continue;
86
+ if (escaped) {
87
+ escaped = false;
88
+ continue;
89
+ }
90
+ if (ch === "\\") {
91
+ escaped = inString;
92
+ continue;
93
+ }
94
+ if (ch === "\"") {
95
+ inString = !inString;
96
+ continue;
97
+ }
98
+ if (inString) continue;
99
+ if (ch === "{" || ch === "[") return i;
100
+ }
101
+ return -1;
102
+ }
103
+ /** Implements preview text as the local LLM transport operation. */
104
+ function previewText(value, maxLen = 200) {
105
+ const normalized = value.replace(/\s+/g, " ").trim();
106
+ if (normalized.length <= maxLen) return normalized;
107
+ return `${normalized.slice(0, maxLen - 3)}...`;
108
+ }
109
+ /** Implements next non whitespace char as the local LLM transport operation. */
110
+ function nextNonWhitespaceChar(text, start) {
111
+ for (let i = start; i < text.length; i++) {
112
+ const ch = text[i];
113
+ if (ch !== void 0 && !/\s/.test(ch)) return ch;
114
+ }
115
+ }
116
+ /**
117
+ * Best-effort repair for common LLM JSON issues:
118
+ * - unescaped quotes inside string values
119
+ * - raw newlines / tabs inside strings
120
+ * - trailing commas before } or ]
121
+ */
122
+ function repairCommonJson(text) {
123
+ let result = "";
124
+ let inString = false;
125
+ let escaped = false;
126
+ for (let i = 0; i < text.length; i++) {
127
+ const ch = text[i];
128
+ if (ch === void 0) continue;
129
+ if (escaped) {
130
+ result += ch;
131
+ escaped = false;
132
+ continue;
133
+ }
134
+ if (inString) {
135
+ if (ch === "\\") {
136
+ result += ch;
137
+ escaped = true;
138
+ continue;
139
+ }
140
+ if (ch === "\"") {
141
+ const nextCh = nextNonWhitespaceChar(text, i + 1);
142
+ if (nextCh === void 0 || nextCh === "," || nextCh === "}" || nextCh === "]" || nextCh === ":") {
143
+ result += ch;
144
+ inString = false;
145
+ } else result += "\\\"";
146
+ continue;
147
+ }
148
+ if (ch === "\n") {
149
+ result += "\\n";
150
+ continue;
151
+ }
152
+ if (ch === "\r") {
153
+ result += "\\r";
154
+ continue;
155
+ }
156
+ if (ch === " ") {
157
+ result += "\\t";
158
+ continue;
159
+ }
160
+ result += ch;
161
+ continue;
162
+ }
163
+ if (ch === "\"") {
164
+ result += ch;
165
+ inString = true;
166
+ continue;
167
+ }
168
+ if (ch === ",") {
169
+ const nextCh = nextNonWhitespaceChar(text, i + 1);
170
+ if (nextCh === "}" || nextCh === "]") continue;
171
+ }
172
+ result += ch;
173
+ }
174
+ return result;
175
+ }
176
+ //#endregion
177
+ //#region src/engine/shared/model-reply-text.ts
178
+ /** @file model-reply-text.ts
179
+ * @purpose Turns one raw model reply into the ordered JSON payload candidates a caller may accept.
180
+ * @boundary Response-text normalization only; the caller owns every schema decision.
181
+ */
182
+ /**
183
+ * Balanced container starting at `start`, or undefined when it never closes.
184
+ *
185
+ * String state is tracked so a brace inside a string value does not close the container.
186
+ */
187
+ function balancedEnd(text, start) {
188
+ let inString = false;
189
+ let escaped = false;
190
+ const stack = [];
191
+ for (let index = start; index < text.length; index += 1) {
192
+ const char = text[index];
193
+ if (inString) {
194
+ if (escaped) escaped = false;
195
+ else if (char === "\\") escaped = true;
196
+ else if (char === "\"") inString = false;
197
+ continue;
198
+ }
199
+ if (char === "\"") {
200
+ inString = true;
201
+ continue;
202
+ }
203
+ if (char === "{" || char === "[") stack.push(char);
204
+ else if (char === "}" || char === "]") {
205
+ const opening = stack.at(-1);
206
+ if (opening === "{" && char !== "}" || opening === "[" && char !== "]") return void 0;
207
+ stack.pop();
208
+ if (stack.length === 0) return index + 1;
209
+ }
210
+ }
211
+ }
212
+ /**
213
+ * Every top-level balanced container, NON-OVERLAPPING.
214
+ *
215
+ * Resuming after each container instead of scanning from every index is what keeps the scan out of
216
+ * string values. Measured 2026-09-04 on a live reply that echoed the transcript back —
217
+ * `[{"role":"assistant","content":"{\"records\":[]}"}]` — the per-index scan offered the escaped
218
+ * inner `{"records":[]}` as a candidate and it passed the caller's schema, so an echoed turn was
219
+ * about to be recorded as "nothing to record" and its real content lost.
220
+ */
221
+ function balancedSpans(text) {
222
+ const spans = [];
223
+ let start = 0;
224
+ while (start < text.length) {
225
+ const char = text[start];
226
+ if (char !== "{" && char !== "[") {
227
+ start += 1;
228
+ continue;
229
+ }
230
+ const end = balancedEnd(text, start);
231
+ if (end === void 0) {
232
+ start += 1;
233
+ continue;
234
+ }
235
+ spans.push({
236
+ start,
237
+ end
238
+ });
239
+ start = end;
240
+ }
241
+ return spans;
242
+ }
243
+ /**
244
+ * Spans of every JSON string literal in `text`, so a tag the user typed can be told apart from a
245
+ * tag the model wrote. Unterminated strings are ignored: only closed literals are protected.
246
+ */
247
+ function stringSpans(text) {
248
+ const spans = [];
249
+ let start = -1;
250
+ let escaped = false;
251
+ for (let index = 0; index < text.length; index += 1) {
252
+ const char = text[index];
253
+ if (start === -1) {
254
+ if (char === "\"") start = index;
255
+ continue;
256
+ }
257
+ if (escaped) escaped = false;
258
+ else if (char === "\\") escaped = true;
259
+ else if (char === "\"") {
260
+ spans.push({
261
+ start,
262
+ end: index + 1
263
+ });
264
+ start = -1;
265
+ }
266
+ }
267
+ return spans;
268
+ }
269
+ const THINK_BLOCK = /<think>[\s\S]*?<\/think>|<think>[\s\S]*$/giu;
270
+ /**
271
+ * Removes think blocks unless they start inside a JSON string literal.
272
+ *
273
+ * The rule is "is this tag part of someone's data", not "does this block contain JSON". Keying on
274
+ * whether the block overlapped a balanced container kept exactly the dangerous case: a model that
275
+ * drafts a wrong payload inside `<think>` and writes the right one after it — measured, the draft
276
+ * was returned as candidate 0 and won. A `<think>` inside a string value is user content and is
277
+ * left byte-identical.
278
+ */
279
+ function stripThinkOutsideCandidates(raw) {
280
+ const protectedSpans = stringSpans(raw);
281
+ const inString = (index) => protectedSpans.some((span) => index >= span.start && index < span.end);
282
+ let out = "";
283
+ let cursor = 0;
284
+ THINK_BLOCK.lastIndex = 0;
285
+ for (const match = { value: THINK_BLOCK.exec(raw) }; match.value !== null; match.value = THINK_BLOCK.exec(raw)) {
286
+ const at = match.value.index;
287
+ if (inString(at)) continue;
288
+ out += raw.slice(cursor, at);
289
+ cursor = at + match.value[0].length;
290
+ }
291
+ return out + raw.slice(cursor);
292
+ }
293
+ function fencedBlocks(text) {
294
+ return [...text.matchAll(/```(?:json)?\s*\n?([\s\S]*?)```/gu)].map((match) => (match[1] ?? "").trim()).filter((body) => body.length > 0);
295
+ }
296
+ /**
297
+ * The JSON payload candidates in one reply, in the order a caller should try them.
298
+ *
299
+ * Fenced blocks first: a model that fences its answer fences the answer, not its commentary.
300
+ * Then the non-overlapping balanced containers. Each candidate appears as written and, when it
301
+ * does not parse, once more repaired.
302
+ */
303
+ function modelReplyJsonCandidates(raw) {
304
+ const text = stripThinkOutsideCandidates(raw).trim();
305
+ const ordered = [...fencedBlocks(text), ...balancedSpans(text).map((span) => text.slice(span.start, span.end))];
306
+ const candidates = [];
307
+ for (const candidate of ordered) {
308
+ if (!candidates.includes(candidate)) candidates.push(candidate);
309
+ const repaired = repairCommonJson(candidate);
310
+ if (repaired !== candidate && !candidates.includes(repaired)) candidates.push(repaired);
311
+ }
312
+ return candidates;
313
+ }
314
+ /**
315
+ * The first candidate `accept` admits, or undefined when none does.
316
+ *
317
+ * The caller decides what a payload is. Handing back a single "best" candidate instead let a
318
+ * syntactically valid but wrong-shaped example consume the caller's only chance while the real
319
+ * payload sat behind it.
320
+ */
321
+ function readModelReplyJson(raw, accept) {
322
+ for (const candidate of modelReplyJsonCandidates(raw)) {
323
+ let parsed;
324
+ try {
325
+ parsed = JSON.parse(candidate);
326
+ } catch {
327
+ continue;
328
+ }
329
+ const admitted = accept(parsed);
330
+ if (admitted !== void 0) return admitted;
331
+ }
332
+ }
333
+ //#endregion
334
+ export { repairCommonJson as a, previewText as i, readModelReplyJson as n, extractJsonFromResponse as r, modelReplyJsonCandidates as t };
@@ -0,0 +1,17 @@
1
+ import { n as PluginObservability } from "./adapter-DMEmCTKo.js";
2
+ import { r as EmbeddingConfig, t as Embedder } from "./embedding-provider-client-vynZMuit.js";
3
+ //#region src/engine/observability/observable-embedder.d.ts
4
+ type SessionUuidProvider = () => string | undefined;
5
+ declare class ObservableEmbedder extends Embedder {
6
+ private readonly observability;
7
+ private readonly sessionUuidProvider;
8
+ private readonly observationScope;
9
+ constructor(config: EmbeddingConfig, stateDir: string, observability: PluginObservability, sessionUuidProvider: SessionUuidProvider);
10
+ override embed(text: string): Promise<Float32Array>;
11
+ protected override embedDirect(text: string): Promise<Float32Array>;
12
+ override embedMany(values: string[]): Promise<Float32Array[]>;
13
+ override embedChunks(texts: string[]): Promise<Float32Array[]>;
14
+ private observeEmbedding;
15
+ }
16
+ //#endregion
17
+ export { ObservableEmbedder as t };
@@ -0,0 +1,21 @@
1
+ import { i as LlmClientConfig, r as LlmClient, s as MemoryLlmRequest } from "./plugin-config-schema-C0UUbOmG.js";
2
+ import { n as PluginObservability } from "./adapter-DMEmCTKo.js";
3
+ import "./llm-client-DOTSGzhe.js";
4
+ //#region src/engine/observability/observable-llm-client.d.ts
5
+ type SessionUuidProvider = () => string | undefined;
6
+ declare class ObservableLlmClient implements LlmClient {
7
+ private readonly inner;
8
+ private readonly config;
9
+ private readonly observability;
10
+ private readonly sessionUuidProvider;
11
+ private readonly usageMutex;
12
+ constructor(inner: LlmClient, config: Pick<LlmClientConfig, "preset" | "routing">, observability: PluginObservability, sessionUuidProvider: SessionUuidProvider);
13
+ completeJson<T>(request: MemoryLlmRequest): Promise<T | null>;
14
+ completeText(request: MemoryLlmRequest): Promise<string | null>;
15
+ private observeCall;
16
+ getResolvedConfig(): ReturnType<LlmClient["getResolvedConfig"]>;
17
+ getLastError(): string | null;
18
+ getLastUsage(): ReturnType<LlmClient["getLastUsage"]>;
19
+ }
20
+ //#endregion
21
+ export { ObservableLlmClient as t };
@@ -0,0 +1,73 @@
1
+ import { b as MemoryTier, g as MemoryEntry, v as MemoryMetadata, y as MemorySearchResult } from "./types-DxKqU60b.js";
2
+ import { n as PluginObservability } from "./adapter-DMEmCTKo.js";
3
+ import { r as EmbeddingConfig } from "./embedding-provider-client-vynZMuit.js";
4
+ import { C as MemoryStore, F as TaskLifecycleBatchWriteResult, M as SupersedeClose, N as SupersedePreserveExisting, P as TaskLifecycleBatchWriteInput, at as ListOptions, dt as RecordUnplacedCandidateResult, f as AtomicExtractionWriteResult, ft as SearchOptions, gt as StoreResult, ht as StoreInput, j as SupersedeActiveFactGuard, mt as StoreConfig, ot as MemoryRow, rt as ChunkSearchResult, u as AtomicExtractionWriteInput, ut as RecordUnplacedCandidateInput, w as MemoryStoreInternals, yt as UpdateChanges } from "./memory-store-base-XRA4S9Xl.js";
5
+ import "./store-2pM0-dZg.js";
6
+ //#region src/engine/observability/observable-memory-store.d.ts
7
+ type SessionUuidProvider = () => string | undefined;
8
+ declare class ObservableMemoryStore extends MemoryStore {
9
+ private readonly observability;
10
+ private readonly sessionUuidProvider;
11
+ private readonly embeddingConfig;
12
+ constructor(config: StoreConfig, observability: PluginObservability, sessionUuidProvider: SessionUuidProvider, embeddingConfig: Pick<EmbeddingConfig, "provider" | "model">);
13
+ override store(entry: StoreInput): Promise<StoreResult>;
14
+ override storeAtomicExtractionChunk(input: AtomicExtractionWriteInput): Promise<AtomicExtractionWriteResult>;
15
+ override applyTaskLifecycleBatchWithAtomicWrite(input: TaskLifecycleBatchWriteInput): Promise<TaskLifecycleBatchWriteResult>;
16
+ private emitCreatedWrites;
17
+ override update(id: string, changes: UpdateChanges): Promise<MemoryEntry | null>;
18
+ override bulkStore(entries: Array<StoreInput | null | undefined>): Promise<StoreResult[]>;
19
+ override supersede(args: {
20
+ create: StoreInput;
21
+ closes: SupersedeClose[];
22
+ activeFactGuard?: SupersedeActiveFactGuard;
23
+ preserveExisting?: SupersedePreserveExisting;
24
+ }): Promise<StoreResult>;
25
+ override createMergeWithRawLineage(args: Parameters<MemoryStore["createMergeWithRawLineage"]>[0]): ReturnType<MemoryStore["createMergeWithRawLineage"]>;
26
+ override createEventAndSupersede(args: Parameters<MemoryStore["createEventAndSupersede"]>[0]): ReturnType<MemoryStore["createEventAndSupersede"]>;
27
+ override importEntry(entry: Parameters<MemoryStore["importEntry"]>[0]): ReturnType<MemoryStore["importEntry"]>;
28
+ backfillMissingChunks(): Promise<number>;
29
+ override findByContentHash(hash: string, projectId?: string): MemoryEntry | undefined;
30
+ override findByExtractionIdempotencyKey(projectId: string, key: string): MemoryEntry | undefined;
31
+ /**
32
+ * Audited like a write, because it is one — a preserved failure that leaves no
33
+ * audit trail is a write nobody can find afterwards.
34
+ */
35
+ override recordUnplacedCandidate(input: RecordUnplacedCandidateInput): RecordUnplacedCandidateResult;
36
+ override getById(id: string): MemoryEntry | undefined;
37
+ override getByFactKey(projectId: string, factKey: string): MemoryEntry | undefined;
38
+ override hasId(id: string): Promise<boolean>;
39
+ override searchChunksSemantic(vector: Float32Array, opts: SearchOptions): Promise<ChunkSearchResult[]>;
40
+ override searchChunksKeyword(query: string, opts: SearchOptions): Promise<ChunkSearchResult[]>;
41
+ override searchSemantic(vector: Float32Array, opts?: SearchOptions): Promise<MemorySearchResult[]>;
42
+ override searchKeyword(query: string, opts?: SearchOptions): Promise<MemorySearchResult[]>;
43
+ fetchMemoriesInOrder(memoryIds: string[], opts?: SearchOptions): MemoryRow[];
44
+ override getVectorsByIds(ids: string[]): Map<string, Float32Array>;
45
+ override getChunksByParent(memoryIds: string[], facetPolicy?: SearchOptions["facetPolicy"]): Map<string, Array<{
46
+ chunkIndex: number;
47
+ chunkText: string;
48
+ facet: "current" | "history";
49
+ }>>;
50
+ override list(opts?: ListOptions): Promise<MemoryEntry[]>;
51
+ override listReflectionItems(opts: Parameters<MemoryStore["listReflectionItems"]>[0]): ReturnType<MemoryStore["listReflectionItems"]>;
52
+ override getMemoryMetadata(memoryId: string): Promise<MemoryMetadata | undefined>;
53
+ override updateTier(memoryId: string, newTier: MemoryTier, options?: {
54
+ writerAuthority?: "offline-family";
55
+ }): Promise<void>;
56
+ override updateMetadata(memoryId: string, patch: Partial<MemoryMetadata>): Promise<void>;
57
+ override applyMetadataDelta(memoryId: string, deltaFn: (current: MemoryMetadata) => Partial<MemoryMetadata>): Promise<void>;
58
+ override applyMetadataDeltas(entries: Parameters<MemoryStore["applyMetadataDeltas"]>[0]): Promise<void>;
59
+ override resolveReflectionItem(memoryId: string, opts: Parameters<MemoryStore["resolveReflectionItem"]>[1]): ReturnType<MemoryStore["resolveReflectionItem"]>;
60
+ override delete(idOrPrefix: string, options?: Parameters<MemoryStore["delete"]>[1]): Promise<number>;
61
+ override deleteMany(ids: string[], options?: Parameters<MemoryStore["deleteMany"]>[1]): Promise<number>;
62
+ deleteByIds(ids: string[], options?: Parameters<MemoryStoreInternals["deleteByIds"]>[1]): void;
63
+ override bulkDelete(filter: Parameters<MemoryStore["bulkDelete"]>[0], options?: Parameters<MemoryStore["bulkDelete"]>[1]): ReturnType<MemoryStore["bulkDelete"]>;
64
+ private auditEntryReadSync;
65
+ private auditSearch;
66
+ private auditMemorySearch;
67
+ private auditMetadataMutation;
68
+ private resolveDeleteIds;
69
+ private readExistingMemoryIds;
70
+ private emitWrite;
71
+ }
72
+ //#endregion
73
+ export { ObservableMemoryStore as t };
@@ -0,0 +1,23 @@
1
+ import { x as RetrievalResult } from "./types-DxKqU60b.js";
2
+ import { n as PluginObservability } from "./adapter-DMEmCTKo.js";
3
+ import { r as EmbeddingConfig, t as Embedder } from "./embedding-provider-client-vynZMuit.js";
4
+ import { d as RetrievalConfig, f as RetrievalContext, t as MemoryRetriever } from "./retriever-Ruk3zp7_.js";
5
+ import { C as MemoryStore } from "./memory-store-base-XRA4S9Xl.js";
6
+ import "./store-2pM0-dZg.js";
7
+ //#region src/engine/observability/observable-retriever.d.ts
8
+ type SessionUuidProvider = () => string | undefined;
9
+ type RetrievalTraceResult = Awaited<ReturnType<MemoryRetriever["retrieveWithTrace"]>>;
10
+ declare class ObservableMemoryRetriever extends MemoryRetriever {
11
+ private readonly observability;
12
+ private readonly sessionUuidProvider;
13
+ private readonly embeddingConfig;
14
+ constructor(store: MemoryStore, embedder: Embedder, logger: {
15
+ warn: (message: string, fields?: Record<string, unknown>) => void;
16
+ } | undefined, config: RetrievalConfig | undefined, observability: PluginObservability, sessionUuidProvider: SessionUuidProvider, embeddingConfig: Pick<EmbeddingConfig, "provider" | "model">);
17
+ override retrieve(context: RetrievalContext): Promise<RetrievalResult[]>;
18
+ override retrieveWithTrace(context: RetrievalContext): Promise<RetrievalTraceResult>;
19
+ private observeRead;
20
+ private emitRead;
21
+ }
22
+ //#endregion
23
+ export { ObservableMemoryRetriever as t };
@@ -0,0 +1,81 @@
1
+ import { createLogger } from "@snoai/utils/logger";
2
+ import { randomUUID } from "node:crypto";
3
+ import { AsyncLocalStorage } from "node:async_hooks";
4
+ //#region src/engine/operation-cancellation.ts
5
+ const operations = new AsyncLocalStorage();
6
+ const log = createLogger("sno-station-mem:cancellation");
7
+ /** Carries cancellation through the existing nested extraction and reflection writers. */
8
+ async function withMemoryOperation(method, signal, run) {
9
+ const operation = {
10
+ id: randomUUID(),
11
+ signal,
12
+ writes: 0,
13
+ transactionDepth: 0
14
+ };
15
+ return operations.run(operation, async () => {
16
+ try {
17
+ signal?.throwIfAborted();
18
+ const result = await run();
19
+ signal?.throwIfAborted();
20
+ return result;
21
+ } finally {
22
+ if (signal?.aborted) log.error("memory.operation.aborted", {
23
+ method,
24
+ outcome: "aborted",
25
+ writes: operation.writes
26
+ }, {
27
+ event_name: "memory.operation.aborted",
28
+ file: "packages/memory/src/engine/operation-cancellation.ts",
29
+ function: "withMemoryOperation",
30
+ site_id: "memory.operation.aborted"
31
+ });
32
+ }
33
+ });
34
+ }
35
+ function memoryOperationId() {
36
+ return operations.getStore()?.id;
37
+ }
38
+ function memoryOperationSignal(signal) {
39
+ const request = operations.getStore()?.signal;
40
+ if (!request) return signal;
41
+ if (!signal || request === signal) return request;
42
+ return AbortSignal.any([request, signal]);
43
+ }
44
+ function checkMemoryOperation() {
45
+ const operation = operations.getStore();
46
+ if (!operation?.transactionDepth) operation?.signal?.throwIfAborted();
47
+ }
48
+ /** One synchronous SQL statement; failed statements never count as completed writes. */
49
+ function memoryWrite(write) {
50
+ checkMemoryOperation();
51
+ const result = write();
52
+ const operation = operations.getStore();
53
+ if (operation) operation.writes++;
54
+ return result;
55
+ }
56
+ /** A started transaction finishes atomically; rollback also restores its write count. */
57
+ function memoryTransaction(transaction) {
58
+ checkMemoryOperation();
59
+ const operation = operations.getStore();
60
+ if (!operation) return transaction();
61
+ const writes = operation.writes;
62
+ operation.transactionDepth++;
63
+ try {
64
+ return transaction();
65
+ } catch (error) {
66
+ operation.writes = writes;
67
+ throw error;
68
+ } finally {
69
+ operation.transactionDepth--;
70
+ }
71
+ }
72
+ /** Do not cancel an in-progress file write; check before starting the next step. */
73
+ async function memoryFileWrite(write) {
74
+ checkMemoryOperation();
75
+ const result = await write();
76
+ const operation = operations.getStore();
77
+ if (operation) operation.writes++;
78
+ return result;
79
+ }
80
+ //#endregion
81
+ export { memoryTransaction as a, memoryOperationSignal as i, memoryFileWrite as n, memoryWrite as o, memoryOperationId as r, withMemoryOperation as s, checkMemoryOperation as t };
@@ -0,0 +1 @@
1
+ import "./profile-TWPJ_myr.js";