@snoai/memory 0.0.0-stage → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +33 -2
  3. package/config/b-profile-section-registry.json +118 -0
  4. package/config/llm/compiled/2026-05-19T230932Z/manifest.json +25 -0
  5. package/config/llm/compiled/2026-05-19T230932Z/registry-root.json +67 -0
  6. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  7. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/openrouter_auto.json +5 -0
  8. package/config/llm/compiled/2026-05-19T230932Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  9. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  10. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/openrouter_auto.mda +24 -0
  11. package/config/llm/compiled/2026-05-19T230932Z/source/mem_claw/sno_ai_extract.mda +24 -0
  12. package/config/llm/compiled/2026-07-21T001311Z/manifest.json +43 -0
  13. package/config/llm/compiled/2026-07-21T001311Z/registry-root.json +97 -0
  14. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  15. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/openrouter_auto.json +5 -0
  16. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  17. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  18. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  19. package/config/llm/compiled/2026-07-21T001311Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  20. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  21. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/openrouter_auto.mda +24 -0
  22. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_ai_extract.mda +24 -0
  23. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  24. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_chat.mda +27 -0
  25. package/config/llm/compiled/2026-07-21T001311Z/source/mem_claw/sno_extract_profile.mda +27 -0
  26. package/config/llm/compiled/2026-08-29T060335Z/manifest.json +43 -0
  27. package/config/llm/compiled/2026-08-29T060335Z/registry-root.json +97 -0
  28. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  29. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/openrouter_auto.json +5 -0
  30. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  31. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  32. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  33. package/config/llm/compiled/2026-08-29T060335Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  34. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  35. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/openrouter_auto.mda +24 -0
  36. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_ai_extract.mda +24 -0
  37. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  38. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_chat.mda +27 -0
  39. package/config/llm/compiled/2026-08-29T060335Z/source/mem_claw/sno_extract_profile.mda +27 -0
  40. package/config/llm/compiled/2026-09-04T004828Z/manifest.json +43 -0
  41. package/config/llm/compiled/2026-09-04T004828Z/registry-root.json +97 -0
  42. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openai_gpt_5_nano.json +5 -0
  43. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/openrouter_auto.json +5 -0
  44. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_ai_extract.json +5 -0
  45. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_conflict_verdict.json +10 -0
  46. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_chat.json +10 -0
  47. package/config/llm/compiled/2026-09-04T004828Z/resolved/mem_claw/sno_extract_profile.json +10 -0
  48. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  49. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/openrouter_auto.mda +24 -0
  50. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_ai_extract.mda +24 -0
  51. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_conflict_verdict.mda +27 -0
  52. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_chat.mda +27 -0
  53. package/config/llm/compiled/2026-09-04T004828Z/source/mem_claw/sno_extract_profile.mda +27 -0
  54. package/config/llm/current.json +4 -0
  55. package/config/llm/source/mem_claw/openai_gpt_5_nano.mda +24 -0
  56. package/config/llm/source/mem_claw/openrouter_auto.mda +24 -0
  57. package/config/llm/source/mem_claw/sno_ai_extract.mda +24 -0
  58. package/config/llm/source/mem_claw/sno_conflict_verdict.mda +27 -0
  59. package/config/llm/source/mem_claw/sno_extract_chat.mda +27 -0
  60. package/config/llm/source/mem_claw/sno_extract_profile.mda +27 -0
  61. package/config/llm.trust.json +37 -0
  62. package/dist/_types-CUKHSRkS.d.ts +103 -0
  63. package/dist/access-tracker-BbEvEocb.d.ts +110 -0
  64. package/dist/adapter-B7Jox9-6.d.ts +69 -0
  65. package/dist/adapter-XaRHZWZ2.js +333 -0
  66. package/dist/agent-llm-port-5oXgBpzJ.d.ts +53 -0
  67. package/dist/all-resources-BQK2ugjB.js +6379 -0
  68. package/dist/all-resources-Dij6l5h0.d.ts +18 -0
  69. package/dist/ambient-learning-text-normalizer-CxjATmMp.js +170 -0
  70. package/dist/ambient-learning-text-normalizer-_fH3LeuK.d.ts +10 -0
  71. package/dist/atomic-extraction-reply-BJ9XV_9s.js +863 -0
  72. package/dist/atomic-extraction-skill-CcXmuCqL.js +56 -0
  73. package/dist/atomic-memory-extraction-C5rmogoY.js +3605 -0
  74. package/dist/atomic-memory-extraction-d9EG-4ti.d.ts +327 -0
  75. package/dist/b-profile-section-dictionary-provider-BHkoNqgk.js +1812 -0
  76. package/dist/b-profile-section-dictionary-provider-BxbksLj3.d.ts +62 -0
  77. package/dist/best-effort-BPZSzKk0.d.ts +9 -0
  78. package/dist/calendar-instruction-CzqZbAPG.js +194 -0
  79. package/dist/capture-policy-detector-CxbHPkMX.d.ts +53 -0
  80. package/dist/capture-policy-detector-DaMfy9CZ.js +357 -0
  81. package/dist/classifier-DnbbtwTS.d.ts +272 -0
  82. package/dist/client.d.ts +34 -0
  83. package/dist/client.js +306 -0
  84. package/dist/coding-skin.d.ts +51 -0
  85. package/dist/coding-skin.js +55 -0
  86. package/dist/config-CL90qYva.js +2576 -0
  87. package/dist/connection-3IVXpuPE.d.ts +391 -0
  88. package/dist/connection-C9YD5sgm.js +297 -0
  89. package/dist/daily-log-generator-CH_KuWHs.js +469 -0
  90. package/dist/daily-log-generator-CsQPHl4A.d.ts +73 -0
  91. package/dist/daily-spend-estimator-DiwzBlo1.d.ts +8 -0
  92. package/dist/data-bootstrap-Bl3lthzE.d.ts +30 -0
  93. package/dist/data-bootstrap-P8sie9WA.js +172 -0
  94. package/dist/data-paths-C7sNdqvP.d.ts +22 -0
  95. package/dist/derived-suppression-cache-CI0durYx.d.ts +36 -0
  96. package/dist/diagnostic-encoder.d.ts +6 -0
  97. package/dist/diagnostic-encoder.js +29 -0
  98. package/dist/embedding-provider-client-Q_hJonK9.js +294 -0
  99. package/dist/embedding-provider-client-vynZMuit.d.ts +94 -0
  100. package/dist/entry-metadata-parser-BIVSMCIk.js +20 -0
  101. package/dist/error-D-wb-rZw.js +23 -0
  102. package/dist/error-signals-D8_3vYu4.d.ts +28 -0
  103. package/dist/error-signals-lMH2uAdV.js +134 -0
  104. package/dist/errors-CeVRxf9V.d.ts +49 -0
  105. package/dist/extraction-text-sanitizer-B_AhIecT.d.ts +32 -0
  106. package/dist/i18n-text-DbD6Qify.d.ts +13 -0
  107. package/dist/index-0aqS8pVF.d.ts +351 -0
  108. package/dist/index-BO4RU_mc.d.ts +650 -0
  109. package/dist/index-DL8AVj0Z.d.ts +571 -0
  110. package/dist/index.d.ts +65 -0
  111. package/dist/index.js +1201 -0
  112. package/dist/intent-analyzer-B5XVrWwe.d.ts +28 -0
  113. package/dist/internal/config/index.d.ts +2 -0
  114. package/dist/internal/config/index.js +581 -0
  115. package/dist/internal/config/plugin-config-schema.d.ts +2 -0
  116. package/dist/internal/config/plugin-config-schema.js +2 -0
  117. package/dist/internal/config/product-mode.d.ts +2 -0
  118. package/dist/internal/config/product-mode.js +36 -0
  119. package/dist/internal/config/settings.d.ts +2 -0
  120. package/dist/internal/config/settings.js +265 -0
  121. package/dist/internal/config/skill-categories.d.ts +4 -0
  122. package/dist/internal/config/skill-categories.js +68 -0
  123. package/dist/internal/config/skin-defaults.d.ts +6 -0
  124. package/dist/internal/config/skin-defaults.js +6 -0
  125. package/dist/internal/contract/discovery.d.ts +10 -0
  126. package/dist/internal/contract/discovery.js +53 -0
  127. package/dist/internal/contract/profile.d.ts +2 -0
  128. package/dist/internal/contract/profile.js +44 -0
  129. package/dist/internal/contract/routes.d.ts +2 -0
  130. package/dist/internal/contract/routes.js +62 -0
  131. package/dist/internal/engine/bindings/memory-cli-shared.d.ts +47 -0
  132. package/dist/internal/engine/bindings/memory-cli-shared.js +84 -0
  133. package/dist/internal/engine/bindings/memory-forget-tool.d.ts +5 -0
  134. package/dist/internal/engine/bindings/memory-forget-tool.js +66 -0
  135. package/dist/internal/engine/bindings/memory-list-tool.d.ts +5 -0
  136. package/dist/internal/engine/bindings/memory-list-tool.js +57 -0
  137. package/dist/internal/engine/bindings/memory-recall-tool.d.ts +10 -0
  138. package/dist/internal/engine/bindings/memory-recall-tool.js +283 -0
  139. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.d.ts +5 -0
  140. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +150 -0
  141. package/dist/internal/engine/bindings/memory-stats-tool.d.ts +5 -0
  142. package/dist/internal/engine/bindings/memory-stats-tool.js +43 -0
  143. package/dist/internal/engine/bindings/memory-store-tool.d.ts +5 -0
  144. package/dist/internal/engine/bindings/memory-store-tool.js +165 -0
  145. package/dist/internal/engine/bindings/memory-tool-access.d.ts +16 -0
  146. package/dist/internal/engine/bindings/memory-tool-access.js +46 -0
  147. package/dist/internal/engine/bindings/memory-tool-formatting.d.ts +62 -0
  148. package/dist/internal/engine/bindings/memory-tool-formatting.js +106 -0
  149. package/dist/internal/engine/bindings/memory-tool-results.d.ts +8 -0
  150. package/dist/internal/engine/bindings/memory-tool-results.js +41 -0
  151. package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +109 -0
  152. package/dist/internal/engine/bindings/memory-tool-schemas.js +75 -0
  153. package/dist/internal/engine/bindings/memory-update-tool.d.ts +5 -0
  154. package/dist/internal/engine/bindings/memory-update-tool.js +127 -0
  155. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +14 -0
  156. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +248 -0
  157. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +12 -0
  158. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +324 -0
  159. package/dist/internal/engine/bindings/sno-station-mem-hook-types.d.ts +56 -0
  160. package/dist/internal/engine/bindings/sno-station-mem-hook-types.js +1 -0
  161. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +14 -0
  162. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +119 -0
  163. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.d.ts +52 -0
  164. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +145 -0
  165. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +10 -0
  166. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.js +9 -0
  167. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +36 -0
  168. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +104 -0
  169. package/dist/internal/engine/bindings/sno-station-mem-session-state.d.ts +10 -0
  170. package/dist/internal/engine/bindings/sno-station-mem-session-state.js +27 -0
  171. package/dist/internal/engine/eval/trace.d.ts +2 -0
  172. package/dist/internal/engine/eval/trace.js +151 -0
  173. package/dist/internal/engine/extraction/ambient-learning-text-normalizer.d.ts +2 -0
  174. package/dist/internal/engine/extraction/ambient-learning-text-normalizer.js +2 -0
  175. package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +2 -0
  176. package/dist/internal/engine/extraction/atomic-memory-extraction.js +2 -0
  177. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +2 -0
  178. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.js +2 -0
  179. package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +49 -0
  180. package/dist/internal/engine/extraction/b-profile-section-rekey.js +730 -0
  181. package/dist/internal/engine/extraction/capture-policy-detector.d.ts +2 -0
  182. package/dist/internal/engine/extraction/capture-policy-detector.js +2 -0
  183. package/dist/internal/engine/extraction/embedding-provider-client.d.ts +2 -0
  184. package/dist/internal/engine/extraction/embedding-provider-client.js +2 -0
  185. package/dist/internal/engine/extraction/extraction-text-sanitizer.d.ts +2 -0
  186. package/dist/internal/engine/extraction/extraction-text-sanitizer.js +114 -0
  187. package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +3 -0
  188. package/dist/internal/engine/extraction/memory-metadata-codec.js +2 -0
  189. package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +2 -0
  190. package/dist/internal/engine/extraction/memory-temporality-classifier.js +2 -0
  191. package/dist/internal/engine/i18n/all-resources.d.ts +2 -0
  192. package/dist/internal/engine/i18n/all-resources.js +2 -0
  193. package/dist/internal/engine/i18n/locales.d.ts +2 -0
  194. package/dist/internal/engine/i18n/locales.js +19 -0
  195. package/dist/internal/engine/i18n/res/_types.d.ts +2 -0
  196. package/dist/internal/engine/i18n/res/_types.js +11 -0
  197. package/dist/internal/engine/observability/adapter.d.ts +2 -0
  198. package/dist/internal/engine/observability/adapter.js +2 -0
  199. package/dist/internal/engine/observability/best-effort.d.ts +2 -0
  200. package/dist/internal/engine/observability/best-effort.js +41 -0
  201. package/dist/internal/engine/observability/early-diagnostics.js +2 -0
  202. package/dist/internal/engine/observability/memory-snapshot.d.ts +2 -0
  203. package/dist/internal/engine/observability/memory-snapshot.js +44 -0
  204. package/dist/internal/engine/observability/observable-embedder.d.ts +2 -0
  205. package/dist/internal/engine/observability/observable-embedder.js +43 -0
  206. package/dist/internal/engine/observability/observable-llm-client.d.ts +2 -0
  207. package/dist/internal/engine/observability/observable-llm-client.js +98 -0
  208. package/dist/internal/engine/observability/observable-memory-store.d.ts +2 -0
  209. package/dist/internal/engine/observability/observable-memory-store.js +701 -0
  210. package/dist/internal/engine/observability/observable-retriever.d.ts +2 -0
  211. package/dist/internal/engine/observability/observable-retriever.js +95 -0
  212. package/dist/internal/engine/observability/runtime-diagnostics.d.ts +13 -0
  213. package/dist/internal/engine/observability/runtime-diagnostics.js +96 -0
  214. package/dist/internal/engine/observability/session-registry.d.ts +2 -0
  215. package/dist/internal/engine/observability/session-registry.js +58 -0
  216. package/dist/internal/engine/observability/version-metadata.d.ts +7 -0
  217. package/dist/internal/engine/observability/version-metadata.js +59 -0
  218. package/dist/internal/engine/operations/daily-spend-estimator.d.ts +2 -0
  219. package/dist/internal/engine/operations/daily-spend-estimator.js +97 -0
  220. package/dist/internal/engine/operations/learning-file-maintenance.d.ts +2 -0
  221. package/dist/internal/engine/operations/learning-file-maintenance.js +255 -0
  222. package/dist/internal/engine/operations/memory-tier-promoter.d.ts +2 -0
  223. package/dist/internal/engine/operations/memory-tier-promoter.js +95 -0
  224. package/dist/internal/engine/operations/runtime-audit-log.d.ts +3 -0
  225. package/dist/internal/engine/operations/runtime-audit-log.js +3 -0
  226. package/dist/internal/engine/provider/canonical-memory-corpus.d.ts +38 -0
  227. package/dist/internal/engine/provider/canonical-memory-corpus.js +253 -0
  228. package/dist/internal/engine/provider/provider-registration.d.ts +39 -0
  229. package/dist/internal/engine/provider/provider-registration.js +2 -0
  230. package/dist/internal/engine/provider/provider-row-renderer.d.ts +7 -0
  231. package/dist/internal/engine/provider/provider-row-renderer.js +53 -0
  232. package/dist/internal/engine/provider/provider-types.d.ts +2 -0
  233. package/dist/internal/engine/provider/provider-types.js +1 -0
  234. package/dist/internal/engine/reflection/daily-log-generator.d.ts +2 -0
  235. package/dist/internal/engine/reflection/daily-log-generator.js +2 -0
  236. package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +2 -0
  237. package/dist/internal/engine/reflection/reflection-command-hooks.js +2 -0
  238. package/dist/internal/engine/reflection/reflection-deps.d.ts +2 -0
  239. package/dist/internal/engine/reflection/reflection-deps.js +1 -0
  240. package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +2 -0
  241. package/dist/internal/engine/reflection/reflection-embedded-generator.js +2 -0
  242. package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +2 -0
  243. package/dist/internal/engine/reflection/reflection-injection-hooks.js +219 -0
  244. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +2 -0
  245. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +63 -0
  246. package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +4 -0
  247. package/dist/internal/engine/reflection/strategy-hook-runner.js +3 -0
  248. package/dist/internal/engine/rem/classifier.d.ts +2 -0
  249. package/dist/internal/engine/rem/classifier.js +180 -0
  250. package/dist/internal/engine/rem/index.d.ts +4 -0
  251. package/dist/internal/engine/rem/index.js +2551 -0
  252. package/dist/internal/engine/rem/types.d.ts +2 -0
  253. package/dist/internal/engine/rem/types.js +40 -0
  254. package/dist/internal/engine/retrieval/access-tracker.d.ts +2 -0
  255. package/dist/internal/engine/retrieval/access-tracker.js +314 -0
  256. package/dist/internal/engine/retrieval/intent-analyzer.d.ts +2 -0
  257. package/dist/internal/engine/retrieval/intent-analyzer.js +27 -0
  258. package/dist/internal/engine/retrieval/retrieval-gate.d.ts +2 -0
  259. package/dist/internal/engine/retrieval/retrieval-gate.js +47 -0
  260. package/dist/internal/engine/retrieval/retriever.d.ts +2 -0
  261. package/dist/internal/engine/retrieval/retriever.js +2 -0
  262. package/dist/internal/engine/security/memory-scope-policy.d.ts +2 -0
  263. package/dist/internal/engine/security/memory-scope-policy.js +2 -0
  264. package/dist/internal/engine/security/redact.d.ts +2 -0
  265. package/dist/internal/engine/security/redact.js +34 -0
  266. package/dist/internal/engine/security/scopes.d.ts +3 -0
  267. package/dist/internal/engine/security/scopes.js +3 -0
  268. package/dist/internal/engine/shared/errors.d.ts +2 -0
  269. package/dist/internal/engine/shared/errors.js +66 -0
  270. package/dist/internal/engine/shared/i18n-text.d.ts +2 -0
  271. package/dist/internal/engine/shared/i18n-text.js +58 -0
  272. package/dist/internal/engine/shared/iso-date-time.d.ts +16 -0
  273. package/dist/internal/engine/shared/iso-date-time.js +40 -0
  274. package/dist/internal/engine/shared/lru.d.ts +2 -0
  275. package/dist/internal/engine/shared/lru.js +30 -0
  276. package/dist/internal/engine/shared/memory-kind-policy.d.ts +2 -0
  277. package/dist/internal/engine/shared/memory-kind-policy.js +64 -0
  278. package/dist/internal/engine/shared/paths.d.ts +3 -0
  279. package/dist/internal/engine/shared/paths.js +2 -0
  280. package/dist/internal/engine/shared/types.d.ts +3 -0
  281. package/dist/internal/engine/shared/types.js +25 -0
  282. package/dist/internal/engine/shared/utils.d.ts +2 -0
  283. package/dist/internal/engine/shared/utils.js +175 -0
  284. package/dist/internal/engine/telemetry/memory-telemetry-api.d.ts +134 -0
  285. package/dist/internal/engine/telemetry/memory-telemetry-api.js +730 -0
  286. package/dist/internal/engine/telemetry/memory-telemetry-observability.d.ts +24 -0
  287. package/dist/internal/engine/telemetry/memory-telemetry-observability.js +133 -0
  288. package/dist/internal/engine/telemetry/memory-telemetry-outbox.d.ts +2 -0
  289. package/dist/internal/engine/telemetry/memory-telemetry-outbox.js +443 -0
  290. package/dist/internal/engine/telemetry/memory-telemetry-types.d.ts +2 -0
  291. package/dist/internal/engine/telemetry/memory-telemetry-types.js +21 -0
  292. package/dist/internal/engine/telemetry/observe-ledger.d.ts +30 -0
  293. package/dist/internal/engine/telemetry/observe-ledger.js +111 -0
  294. package/dist/internal/model/agent-llm-port.d.ts +2 -0
  295. package/dist/internal/model/agent-llm-port.js +1 -0
  296. package/dist/internal/model/llm-client.d.ts +3 -0
  297. package/dist/internal/model/llm-client.js +3 -0
  298. package/dist/internal/model/llm-failure.d.ts +26 -0
  299. package/dist/internal/model/llm-failure.js +63 -0
  300. package/dist/internal/model/llm-mode-routing.d.ts +22 -0
  301. package/dist/internal/model/llm-mode-routing.js +37 -0
  302. package/dist/internal/store/atomic-memory-cutover-sql.d.ts +13 -0
  303. package/dist/internal/store/atomic-memory-cutover-sql.js +237 -0
  304. package/dist/internal/store/connection.d.ts +2 -0
  305. package/dist/internal/store/connection.js +2 -0
  306. package/dist/internal/store/data-bootstrap.d.ts +2 -0
  307. package/dist/internal/store/data-bootstrap.js +2 -0
  308. package/dist/internal/store/data-paths.d.ts +2 -0
  309. package/dist/internal/store/data-paths.js +65 -0
  310. package/dist/internal/store/maintenance.d.ts +75 -0
  311. package/dist/internal/store/maintenance.js +1401 -0
  312. package/dist/internal/store/memory-kinds-cutover-migrator.d.ts +28 -0
  313. package/dist/internal/store/memory-kinds-cutover-migrator.js +415 -0
  314. package/dist/internal/store/migrations.d.ts +27 -0
  315. package/dist/internal/store/migrations.js +201 -0
  316. package/dist/internal/store/sqlite-runtime.d.ts +2 -0
  317. package/dist/internal/store/sqlite-runtime.js +109 -0
  318. package/dist/internal/store/store.d.ts +3 -0
  319. package/dist/internal/store/store.js +2 -0
  320. package/dist/learning-file-maintenance-9b-Ut6Kv.d.ts +30 -0
  321. package/dist/llm-client-BSYUAcUb.js +1374 -0
  322. package/dist/llm-client-DOTSGzhe.d.ts +51 -0
  323. package/dist/locales-JxGmkG6t.d.ts +7 -0
  324. package/dist/log-site-catalog.generated-BMKWj-Nx.js +2321 -0
  325. package/dist/log-site-catalog.json +1 -0
  326. package/dist/lru-DyoaTyIs.d.ts +14 -0
  327. package/dist/memdump.d.ts +52 -0
  328. package/dist/memdump.js +163 -0
  329. package/dist/memory-entry-projector-DHo8jH10.js +1015 -0
  330. package/dist/memory-kind-policy-BiuRjSJc.d.ts +23 -0
  331. package/dist/memory-metadata-codec-DL1sbJiN.js +577 -0
  332. package/dist/memory-metadata-codec-DUvsYe_X.d.ts +68 -0
  333. package/dist/memory-runtime-DqUS4cWi.js +19459 -0
  334. package/dist/memory-scope-policy-1gg5QlWZ.d.ts +67 -0
  335. package/dist/memory-scope-policy-DICSCURA.js +283 -0
  336. package/dist/memory-snapshot-CqY1BUUA.d.ts +16 -0
  337. package/dist/memory-source-order-YMRoeDLd.js +134 -0
  338. package/dist/memory-store-base-CQ_bHlYA.d.ts +1094 -0
  339. package/dist/memory-store-shared-DqpWJXZZ.js +158 -0
  340. package/dist/memory-store-write-validation-B_hDG2zf.js +243 -0
  341. package/dist/memory-telemetry-incidents-BWA9kcZx.js +8 -0
  342. package/dist/memory-telemetry-metadata-CA7W8tK6.js +77 -0
  343. package/dist/memory-telemetry-outbox-ddTdImt7.d.ts +74 -0
  344. package/dist/memory-telemetry-receipts-MAJecvXQ.d.ts +34 -0
  345. package/dist/memory-telemetry-receipts-YsxbwOAf.js +91 -0
  346. package/dist/memory-telemetry-types-CufVmrCs.d.ts +14 -0
  347. package/dist/memory-temporality-classifier-BUjXG5o7.js +184 -0
  348. package/dist/memory-temporality-classifier-Brht5jyK.d.ts +43 -0
  349. package/dist/memory-tier-promoter-CqGxCkue.d.ts +43 -0
  350. package/dist/memory-tool-dependencies-CatGzI9R.d.ts +14 -0
  351. package/dist/memory-tool-dependencies-DjUoelnm.js +19 -0
  352. package/dist/model-call-table-CspopkBg.js +563 -0
  353. package/dist/model-reply-text-CKopStP2.js +334 -0
  354. package/dist/observable-embedder-CNNe9gkg.d.ts +17 -0
  355. package/dist/observable-llm-client-CRuKlefQ.d.ts +21 -0
  356. package/dist/observable-memory-store-CnGDpOY5.d.ts +73 -0
  357. package/dist/observable-retriever-Cooc62Qw.d.ts +23 -0
  358. package/dist/operation-cancellation-CTKWwNHk.js +81 -0
  359. package/dist/paths-qVF-5uBq.d.ts +1 -0
  360. package/dist/plugin-config-schema-C0UUbOmG.d.ts +413 -0
  361. package/dist/plugin-config-schema-YJLyIIcJ.js +361 -0
  362. package/dist/profile-TWPJ_myr.d.ts +13 -0
  363. package/dist/profile-section-writer-BhGKPBjw.js +2149 -0
  364. package/dist/provider-registration-CF1tg8Xy.js +721 -0
  365. package/dist/provider-runtime-types-DFhtdA6d.d.ts +134 -0
  366. package/dist/provider-types-CZGm6v88.d.ts +23 -0
  367. package/dist/redact-BTIZcHQL.d.ts +5 -0
  368. package/dist/reflection-command-hooks-ClUl-iv6.js +644 -0
  369. package/dist/reflection-command-hooks-G1-dI2Av.d.ts +32 -0
  370. package/dist/reflection-deps-Ccm2Jf5W.d.ts +19 -0
  371. package/dist/reflection-embedded-generator-BRvqV5N-.js +130 -0
  372. package/dist/reflection-embedded-generator-kfQfKEYV.d.ts +14 -0
  373. package/dist/reflection-injection-hooks-CS_uhjoD.d.ts +43 -0
  374. package/dist/reflection-lifecycle-hooks-CRSpUdLi.d.ts +27 -0
  375. package/dist/relation-dictionary-Cev1kyLe.js +4248 -0
  376. package/dist/release-download.d.ts +8 -0
  377. package/dist/release-download.js +32 -0
  378. package/dist/relevant-memories-context-m8nuFZcM.js +23 -0
  379. package/dist/rem-batch-executor-Dg2HgROM.js +2 -0
  380. package/dist/rem-batch-executor-DuC4nYyf.js +31640 -0
  381. package/dist/rem-consumer-retrieval-CR0dtcHR.js +246 -0
  382. package/dist/rem-trigger-Hn6od8IV.js +730 -0
  383. package/dist/resolver-Dy-hnjCR.js +103 -0
  384. package/dist/results-C3ZLroMb.js +140 -0
  385. package/dist/retrieval-gate-Bx2Zg7jD.d.ts +31 -0
  386. package/dist/retriever-Dxss5fRv.d.ts +469 -0
  387. package/dist/retriever-ZoLvPRHq.js +1757 -0
  388. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  389. package/dist/routes-DLHT__Ay.js +60 -0
  390. package/dist/runtime-audit-log-BCeujlEp.js +430 -0
  391. package/dist/runtime-audit-log-zpQiR9HT.d.ts +149 -0
  392. package/dist/scopes-CSOn6zdd.js +71 -0
  393. package/dist/scopes-CtrY-YQ3.d.ts +23 -0
  394. package/dist/server-CSvxchqg.js +1412 -0
  395. package/dist/session-registry-DBoE7AvZ.d.ts +14 -0
  396. package/dist/sidecar/main.d.ts +1 -0
  397. package/dist/sidecar/main.js +56 -0
  398. package/dist/signed-registry-constants-Bv0fgZ8Q.d.ts +12 -0
  399. package/dist/signed-registry-constants-yq3DlG3B.js +82 -0
  400. package/dist/sno-station-mem-runtime-dependencies-CoWqUMbK.js +30 -0
  401. package/dist/sno-station-mem-runtime-dependencies-DHESIuPn.d.ts +31 -0
  402. package/dist/sqlite-runtime-L_ywirTm.d.ts +58 -0
  403. package/dist/store-C8sUTssE.d.ts +27 -0
  404. package/dist/store-nPql26YM.js +5830 -0
  405. package/dist/strategy-hook-runner-Bxy851Xx.d.ts +16 -0
  406. package/dist/strategy-hook-runner-Djify5Rw.js +110 -0
  407. package/dist/token-counter-BD1f48Km.js +73 -0
  408. package/dist/trace-C1JxMfs-.d.ts +86 -0
  409. package/dist/types-CWdhXLxr.d.ts +477 -0
  410. package/dist/types-pVomjzqR.d.ts +132 -0
  411. package/dist/unplaced-candidate-migration-CbQHzcEM.js +940 -0
  412. package/dist/utils-Ctb9aevJ.d.ts +34 -0
  413. package/drizzle/0000_initial.sql +10 -0
  414. package/drizzle/0001_virtual_tables.sql +34 -0
  415. package/drizzle/0002_add_indexes.sql +11 -0
  416. package/drizzle/0003_content_hash_lookup_index.sql +2 -0
  417. package/drizzle/0004_chunk_swap.sql +60 -0
  418. package/drizzle/0005_drop_legacy_vec_fts.sql +10 -0
  419. package/drizzle/0006_fts_simple.sql +45 -0
  420. package/drizzle/0007_restore_simple_fts.sql +40 -0
  421. package/drizzle/0008_widen_memory_hash_unique_index.sql +4 -0
  422. package/drizzle/0009_memory_telemetry.sql +109 -0
  423. package/drizzle/0010_provider_mappings.sql +27 -0
  424. package/drizzle/0011_db_optimization.sql +82 -0
  425. package/drizzle/0012_b_profile_lanes.sql +9 -0
  426. package/drizzle/0013_extraction_timestamps.sql +6 -0
  427. package/drizzle/0014_extraction_timestamp_source.sql +3 -0
  428. package/drizzle/0015_task_lifecycle_state.sql +101 -0
  429. package/drizzle/0016_task_lifecycle_legacy_migration.sql +144 -0
  430. package/drizzle/0017_unplaced_candidates.sql +15 -0
  431. package/drizzle/0018_rem_batch_chassis.sql +71 -0
  432. package/drizzle/0019_profile_recovery_entries.sql +17 -0
  433. package/drizzle/0020_rem_scan_retry_progress.down.sql +14 -0
  434. package/drizzle/0020_rem_scan_retry_progress.sql +24 -0
  435. package/drizzle/0021_rem_two_facet_storage.down.sql +14 -0
  436. package/drizzle/0021_rem_two_facet_storage.sql +42 -0
  437. package/drizzle/0022_rem_facet_chunk_versions.down.sql +4 -0
  438. package/drizzle/0022_rem_facet_chunk_versions.sql +4 -0
  439. package/drizzle/0023_rem_defect_ledger.sql +40 -0
  440. package/drizzle/0024_rem_unbuilt_foundations.down.sql +13 -0
  441. package/drizzle/0024_rem_unbuilt_foundations.sql +65 -0
  442. package/drizzle/0025_rem_journal_operation_constraint.sql +28 -0
  443. package/drizzle/0026_rem_journal_detail.sql +1 -0
  444. package/drizzle/0027_legacy_nodix_namespace.sql +3 -0
  445. package/drizzle/0028_memory_timezone.sql +23 -0
  446. package/drizzle/0029_rem_write_hash_symmetry.sql +17 -0
  447. package/drizzle/0030_atomic_memory_additive.sql +105 -0
  448. package/drizzle/0031_atomic_extraction_ledger.sql +23 -0
  449. package/drizzle/0032_atomic_memory_entities.sql +12 -0
  450. package/drizzle/0033_todo_own_store.sql +99 -0
  451. package/drizzle/meta/0000_snapshot.json +87 -0
  452. package/drizzle/meta/_journal.json +244 -0
  453. package/generated/rem-operations.json +1 -0
  454. package/package.json +126 -4
  455. package/scripts/download-simple-tokenizer.mjs +254 -0
  456. package/settings.default.json +243 -0
  457. package/skills/extract-atomic-memory/SKILL.md +298 -0
  458. package/skills/extract-atomic-memory/references/account-for-turns.md +9 -0
  459. package/skills/extract-atomic-memory/references/calendar-meaning.md +64 -0
  460. package/skills/extract-atomic-memory/references/capture.md +120 -0
  461. package/skills/extract-atomic-memory/references/enrichment.md +92 -0
  462. package/skills/extract-atomic-memory/references/missing-durable-half.md +6 -0
  463. package/skills/extract-atomic-memory/references/progress-classification.md +21 -0
  464. package/skills/extract-atomic-memory/references/resolve-subject.md +19 -0
  465. package/skills/extract-atomic-memory/references/surrounding-context.md +10 -0
  466. package/skills/extract-atomic-memory/references/user-subject-guard.md +29 -0
  467. package/skills/judge-group-closure/SKILL.md +25 -0
  468. package/skills/judge-rem-memory-updates/SKILL.md +56 -0
  469. package/skills/judge-rem-memory-updates/agents/openai.yaml +4 -0
  470. package/skills/judge-retired-position/SKILL.md +25 -0
  471. package/skills/judge-task-lifecycle/SKILL.md +45 -0
  472. package/skills/key-state-attribute/SKILL.md +16 -0
  473. package/skills/resolve-entity-identity/SKILL.md +24 -0
  474. package/skills/resolve-relative-time/SKILL.md +22 -0
  475. package/sqlite-extensions/LICENSE-simple-tokenizer +28 -0
  476. package/sqlite-extensions/LICENSE-sqlite-vec +21 -0
  477. package/sqlite-extensions/linux-arm64/vec0.so +0 -0
  478. package/sqlite-extensions/linux-x64/vec0.so +0 -0
@@ -0,0 +1,28 @@
1
+ //#region src/engine/retrieval/intent-analyzer.d.ts
2
+ /** @file intent-analyzer.ts
3
+ * @purpose Renders a recalled memory as one line of text for context injection.
4
+ * @boundary Pure formatting; no query parsing, no pattern banks, no locale rules.
5
+ *
6
+ * The name is historical. This file used to read the query's wording through nine locale rule
7
+ * banks and return a category set plus a rendering depth: a match restricted which categories
8
+ * were eligible and how much of each memory was shown, and a miss returned the shortest form.
9
+ * All of it was deleted on 2026-08-21 — a keyword may hint at scoring, never decide the path or
10
+ * shorten the answer. What survived is the renderer below.
11
+ */
12
+ /**
13
+ * Format a memory entry as one line for context injection.
14
+ *
15
+ * One form only: the complete text. The shorter tiers were chosen from the query's wording, so
16
+ * a question phrased outside the pattern banks received the shortest one. Deleted 2026-08-21.
17
+ */
18
+ declare function formatAtDepth(entry: {
19
+ text: string;
20
+ category: string;
21
+ }, score: number, _index: number, extra?: {
22
+ bm25Hit?: boolean;
23
+ reranked?: boolean;
24
+ sanitize?: (text: string) => string;
25
+ eventDate?: string;
26
+ }): string;
27
+ //#endregion
28
+ export { formatAtDepth as t };
@@ -0,0 +1,2 @@
1
+ import { $ as DEFAULT_VECTOR_WEIGHT, $t as REFLECTION_MAX_FILENAME_ATTEMPTS, A as DEFAULT_BM25_WEIGHT, At as MAX_RECALLED_TODOS, B as DEFAULT_REFLECTION_ERROR_SCAN_MAX_CHARS, Bt as NOISE_MIN_TEXT_LENGTH, C as CHUNK_MAX_TOKENS, Cn as experimentCandidatePoolOverride, Ct as MAINTENANCE_TICK_MS, D as CHUNK_TOKENIZER_MODE, Dt as MAX_CHUNKS_PER_PARENT, E as CHUNK_TARGET_TOKENS, Et as MAX_CANDIDATE_POOL_SIZE, F as DEFAULT_MAX_LINES_PER_CHUNK, Ft as MEMORY_SHUTDOWN_TIMEOUT_MS, G as DEFAULT_REFLECTION_TIMEOUT_MS, Gt as RECENCY_HALF_LIFE_DAYS, H as DEFAULT_REFLECTION_MAX_TRACKED_SESSIONS, Ht as PLUGIN_VERSION, I as DEFAULT_MIN_SCORE, It as MIN_RECALL_TOKEN_BUDGET, J as DEFAULT_RERANK_TIMEOUT_MS, Jt as REFLECTION_DEDUP_MIN_SCORE, K as DEFAULT_RERANK_BATCH_CONCURRENCY, Kt as RECENCY_WEIGHT, L as DEFAULT_RECALL_LIFECYCLE, Lt as MMR_LAMBDA, M as DEFAULT_IMPORTANCE, Mt as MAX_RECALL_TOOL_CANDIDATES, N as DEFAULT_LIST_LIMIT, Nt as MAX_SESSION_RECALL_ENTRIES, O as COST_ESTIMATE_CACHE_TTL_MS, Ot as MAX_CHUNK_FETCH_LIMIT, P as DEFAULT_MAX_CONTEXT_TOKENS, Pt as MAX_TRACKED_SESSIONS, Q as DEFAULT_TOP_K, Qt as REFLECTION_MAX_DERIVED, R as DEFAULT_RECALL_TOKEN_BUDGET, Rt as MULTI_HIT_BONUS_CAP, S as CHUNKING_VERSION, Sn as VECTOR_DIMENSION_DEFAULT, St as LIGHTWEIGHT_RERANK_PENALTY, T as CHUNK_OVERLAP_TOKENS, Tn as recallLifecycleSchema, Tt as MAX_AGGREGATION_ROWS, U as DEFAULT_REFLECTION_MESSAGE_COUNT, Ut as PRECISION_RECALL_POOL_SIZE_FACTOR, V as DEFAULT_REFLECTION_MAX_INPUT_CHARS, Vt as PLANNER_STATISTICS_INTERVAL_MS, W as DEFAULT_REFLECTION_SESSION_TTL_MS, Wt as PROFILE_MERGE_THRESHOLD, X as DEFAULT_SESSION_MESSAGE_COUNT, Xt as REFLECTION_DERIVED_MAX_AGE_MS, Y as DEFAULT_SCOPE, Yt as REFLECTION_DEDUP_THRESHOLD, Z as DEFAULT_TEI_RERANK_MAX_CANDIDATES, Zt as REFLECTION_IMPORTANCE, _ as CACHE_TTL_MS, _n as TEMPORAL_WEIGHTING_DEFAULT, _t as KILL_SWITCH_CACHE_TTL_MS, a as ARRIVAL_RETIREMENT_JUDGED_CANDIDATE_CAP, an as RERANK_PROMPT_TEMPLATE_TOKENS, at as EVAL_QA_TRACES_FILENAME, b as CAPTURE_MIN_LENGTH_CJK, bn as USAGE_EVENT_RETENTION_INTERVAL_MS, bt as LIGHTWEIGHT_COSINE_WEIGHT, c as ATOMIC_ENRICHMENT_OUTPUT_TOKEN_BUDGET, cn as SESSION_SUMMARY_CHUNK_TOKENS, ct as FORGET_QUERY_MIN_SCORE, d as AUTO_RECALL_LEAN_TOP_K, dn as SNIPPET_NEIGHBOR_AFTER, dt as HEAD_EXTRACT_MIN_CONTENT_TOKENS, en as REFLECTION_MAX_INVARIANTS, et as DELETE_BATCH_SIZE, f as BACKUP_INTERVAL_MS, fn as SNIPPET_NEIGHBOR_BEFORE, ft as HEAD_EXTRACT_OVERLAP_DROP_RATIO, g as CACHE_SIZE, gn as TEMPORAL_DYNAMIC_HALF_LIFE_DIVISOR, gt as INTRA_MEMORY_COSINE_THRESHOLD, h as BONUS_TOTAL_INVARIANT, hn as SNO_OBSERVE_FLUSH_TIMEOUT_MS, ht as INTEGRITY_CHECK_INTERVAL_MS, i as ARRIVAL_RETIREMENT_CANDIDATE_CAP, in as RERANK_BLEND_VECTOR, it as EVAL_CONFIG_SNAPSHOT_FILENAME, j as DEFAULT_HARD_MIN_SCORE, jt as MAX_RECALLED_TODO_TOKENS, k as DEFAULT_AUTO_RECALL_MAX_QUERY_LENGTH, kt as MAX_LIST_LIMIT, l as ATOMIC_EXTRACTION_MAX_INPUT_TOKENS, ln as SESSION_SUMMARY_MAX_CHUNKS, lt as FTS_MERGE_INTERVAL_MS, m as BACKUP_RETENTION_COUNT, mn as SNO_OBSERVE_DEFAULT_BASE_URL, mt as IMPORTANCE_WEIGHT_BASE, n as ADJACENCY_BONUS_PER_PAIR, nn as REM_TRIGGER_CHECK_INTERVAL_MS, nt as EMBEDDER_MODEL_DEFAULT, o as ATOMIC_CAPTURE_OUTPUT_TOKEN_BUDGET, on as RETRIEVAL_STORAGE_CHUNK_PROFILE, ot as EVAL_TRACE_ENABLED, p as BACKUP_MIN_FREE_DISK_RATIO, pn as SNO_OBSERVE_DEFAULT_AGENT_ID, pt as HEAD_EXTRACT_TOKEN_BUDGET, q as DEFAULT_RERANK_MODEL, qt as RECENCY_WEIGHT_MAX, r as AMBIENT_LEARNING_REQUIRE_TRIGGER_MATCH, rn as RERANK_BLEND_CROSS, rt as EMBEDDER_PROVIDER_DEFAULT, s as ATOMIC_CAPTURE_TIMEOUT_MS, sn as RecallLifecycleConfig, st as FORGET_QUERY_DEFAULT_LIMIT, t as ADJACENCY_BONUS_CAP, tn as REFLECTION_SLICE_CACHE_TTL_MS, tt as EMBEDDER_DIM, u as AUTO_RECALL_INJECTION_TOP_K, un as SESSION_SUMMARY_MAX_INPUT_TOKENS, ut as FTS_QUERY_TOKEN_CAP, v as CANDIDATE_POOL_SIZE, vn as TIME_DECAY_FLOOR, vt as LAST_JSON_LINE_CHUNK_BYTES, w as CHUNK_MIN_TOKENS, wn as experimentMmrDisabled, wt as MAX_AGGREGATION_RESULT_TOKENS, x as CAPTURE_MIN_LENGTH_STANDARD, xn as USAGE_OUTBOX_INTERVAL_MS, xt as LIGHTWEIGHT_FUSION_WEIGHT, y as CAPTURE_MAX_EMOJI_COUNT, yn as TIME_DECAY_HALF_LIFE_DAYS, yt as LENGTH_NORM_ANCHOR, z as DEFAULT_REFLECTION_ERROR_REMINDER_MAX_ENTRIES, zt as MULTI_HIT_BONUS_PER_HIT } from "../../index-DL8AVj0Z.js";
2
+ export { ADJACENCY_BONUS_CAP, ADJACENCY_BONUS_PER_PAIR, AMBIENT_LEARNING_REQUIRE_TRIGGER_MATCH, ARRIVAL_RETIREMENT_CANDIDATE_CAP, ARRIVAL_RETIREMENT_JUDGED_CANDIDATE_CAP, ATOMIC_CAPTURE_OUTPUT_TOKEN_BUDGET, ATOMIC_CAPTURE_TIMEOUT_MS, ATOMIC_ENRICHMENT_OUTPUT_TOKEN_BUDGET, ATOMIC_EXTRACTION_MAX_INPUT_TOKENS, AUTO_RECALL_INJECTION_TOP_K, AUTO_RECALL_LEAN_TOP_K, BACKUP_INTERVAL_MS, BACKUP_MIN_FREE_DISK_RATIO, BACKUP_RETENTION_COUNT, BONUS_TOTAL_INVARIANT, CACHE_SIZE, CACHE_TTL_MS, CANDIDATE_POOL_SIZE, CAPTURE_MAX_EMOJI_COUNT, CAPTURE_MIN_LENGTH_CJK, CAPTURE_MIN_LENGTH_STANDARD, CHUNKING_VERSION, CHUNK_MAX_TOKENS, CHUNK_MIN_TOKENS, CHUNK_OVERLAP_TOKENS, CHUNK_TARGET_TOKENS, CHUNK_TOKENIZER_MODE, COST_ESTIMATE_CACHE_TTL_MS, DEFAULT_AUTO_RECALL_MAX_QUERY_LENGTH, DEFAULT_BM25_WEIGHT, DEFAULT_HARD_MIN_SCORE, DEFAULT_IMPORTANCE, DEFAULT_LIST_LIMIT, DEFAULT_MAX_CONTEXT_TOKENS, DEFAULT_MAX_LINES_PER_CHUNK, DEFAULT_MIN_SCORE, DEFAULT_RECALL_LIFECYCLE, DEFAULT_RECALL_TOKEN_BUDGET, DEFAULT_REFLECTION_ERROR_REMINDER_MAX_ENTRIES, DEFAULT_REFLECTION_ERROR_SCAN_MAX_CHARS, DEFAULT_REFLECTION_MAX_INPUT_CHARS, DEFAULT_REFLECTION_MAX_TRACKED_SESSIONS, DEFAULT_REFLECTION_MESSAGE_COUNT, DEFAULT_REFLECTION_SESSION_TTL_MS, DEFAULT_REFLECTION_TIMEOUT_MS, DEFAULT_RERANK_BATCH_CONCURRENCY, DEFAULT_RERANK_MODEL, DEFAULT_RERANK_TIMEOUT_MS, DEFAULT_SCOPE, DEFAULT_SESSION_MESSAGE_COUNT, DEFAULT_TEI_RERANK_MAX_CANDIDATES, DEFAULT_TOP_K, DEFAULT_VECTOR_WEIGHT, DELETE_BATCH_SIZE, EMBEDDER_DIM, EMBEDDER_MODEL_DEFAULT, EMBEDDER_PROVIDER_DEFAULT, EVAL_CONFIG_SNAPSHOT_FILENAME, EVAL_QA_TRACES_FILENAME, EVAL_TRACE_ENABLED, FORGET_QUERY_DEFAULT_LIMIT, FORGET_QUERY_MIN_SCORE, FTS_MERGE_INTERVAL_MS, FTS_QUERY_TOKEN_CAP, HEAD_EXTRACT_MIN_CONTENT_TOKENS, HEAD_EXTRACT_OVERLAP_DROP_RATIO, HEAD_EXTRACT_TOKEN_BUDGET, IMPORTANCE_WEIGHT_BASE, INTEGRITY_CHECK_INTERVAL_MS, INTRA_MEMORY_COSINE_THRESHOLD, KILL_SWITCH_CACHE_TTL_MS, LAST_JSON_LINE_CHUNK_BYTES, LENGTH_NORM_ANCHOR, LIGHTWEIGHT_COSINE_WEIGHT, LIGHTWEIGHT_FUSION_WEIGHT, LIGHTWEIGHT_RERANK_PENALTY, MAINTENANCE_TICK_MS, MAX_AGGREGATION_RESULT_TOKENS, MAX_AGGREGATION_ROWS, MAX_CANDIDATE_POOL_SIZE, MAX_CHUNKS_PER_PARENT, MAX_CHUNK_FETCH_LIMIT, MAX_LIST_LIMIT, MAX_RECALLED_TODOS, MAX_RECALLED_TODO_TOKENS, MAX_RECALL_TOOL_CANDIDATES, MAX_SESSION_RECALL_ENTRIES, MAX_TRACKED_SESSIONS, MEMORY_SHUTDOWN_TIMEOUT_MS, MIN_RECALL_TOKEN_BUDGET, MMR_LAMBDA, MULTI_HIT_BONUS_CAP, MULTI_HIT_BONUS_PER_HIT, NOISE_MIN_TEXT_LENGTH, PLANNER_STATISTICS_INTERVAL_MS, PLUGIN_VERSION, PRECISION_RECALL_POOL_SIZE_FACTOR, PROFILE_MERGE_THRESHOLD, RECENCY_HALF_LIFE_DAYS, RECENCY_WEIGHT, RECENCY_WEIGHT_MAX, REFLECTION_DEDUP_MIN_SCORE, REFLECTION_DEDUP_THRESHOLD, REFLECTION_DERIVED_MAX_AGE_MS, REFLECTION_IMPORTANCE, REFLECTION_MAX_DERIVED, REFLECTION_MAX_FILENAME_ATTEMPTS, REFLECTION_MAX_INVARIANTS, REFLECTION_SLICE_CACHE_TTL_MS, REM_TRIGGER_CHECK_INTERVAL_MS, RERANK_BLEND_CROSS, RERANK_BLEND_VECTOR, RERANK_PROMPT_TEMPLATE_TOKENS, RETRIEVAL_STORAGE_CHUNK_PROFILE, RecallLifecycleConfig, SESSION_SUMMARY_CHUNK_TOKENS, SESSION_SUMMARY_MAX_CHUNKS, SESSION_SUMMARY_MAX_INPUT_TOKENS, SNIPPET_NEIGHBOR_AFTER, SNIPPET_NEIGHBOR_BEFORE, SNO_OBSERVE_DEFAULT_AGENT_ID, SNO_OBSERVE_DEFAULT_BASE_URL, SNO_OBSERVE_FLUSH_TIMEOUT_MS, TEMPORAL_DYNAMIC_HALF_LIFE_DIVISOR, TEMPORAL_WEIGHTING_DEFAULT, TIME_DECAY_FLOOR, TIME_DECAY_HALF_LIFE_DAYS, USAGE_EVENT_RETENTION_INTERVAL_MS, USAGE_OUTBOX_INTERVAL_MS, VECTOR_DIMENSION_DEFAULT, experimentCandidatePoolOverride, experimentMmrDisabled, recallLifecycleSchema };
@@ -0,0 +1,581 @@
1
+ import { z } from "zod";
2
+ import { CHUNKING_VERSION, DEFAULT_AGGREGATION_CONFIG, DEFAULT_CHUNK_CONFIG, HEAD_EXTRACT_MIN_CONTENT_TOKENS, HEAD_EXTRACT_OVERLAP_DROP_RATIO, HEAD_EXTRACT_TOKEN_BUDGET } from "@snoai/chunking";
3
+ import { LOCAL_EMBEDDING_MODEL } from "@snoai/embedder";
4
+ //#region config/index.ts
5
+ /**
6
+ * Sno Station Memory centralized configuration.
7
+ * Shared tunable constants for every memory skin.
8
+ * Organized by domain: Scoring → Retrieval → Storage → Backup → Cache → Session → Capture → Reflection
9
+ */
10
+ /** Maximum wait for sidecar requests and resource cleanup during shutdown. */
11
+ const MEMORY_SHUTDOWN_TIMEOUT_MS = 5e3;
12
+ /**
13
+ * Final result floor, applied to the POST-scoring-pipeline score (after the
14
+ * multiplicative shrinker chain: importance, length-norm, time-decay,
15
+ * retention). That chain routinely compresses a genuinely relevant match to
16
+ * 0.03-0.06 once a memory ages past its decay half-life — a real, expected
17
+ * production scenario, not an edge case. The old value (0.37) was calibrated
18
+ * against the PRE-shrinker fused score scale and silently rejected almost
19
+ * all real recall once shrinkers applied (confirmed 2026-07-05 scoring-
20
+ * pipeline audit). 0 matches the only value ever proven end-to-end
21
+ * (LoCoMo stratified-100, 86%, `evals/locomo/outputs/stratified-100-20260705-002827`);
22
+ * shipped and tested must be the same config. Re-introducing a nonzero floor
23
+ * needs fresh measured data post the A2/A3 fixes below, not a guess.
24
+ */
25
+ const DEFAULT_MIN_SCORE = 0;
26
+ /** Hard floor applied before any score amplification in the pipeline. See
27
+ * `DEFAULT_MIN_SCORE` — same reasoning, same fix. */
28
+ const DEFAULT_HARD_MIN_SCORE = 0;
29
+ /** Default importance score for new memories (0.0–1.0) */
30
+ const DEFAULT_IMPORTANCE = .7;
31
+ /** Default scope for memories without explicit scope */
32
+ const DEFAULT_SCOPE = "global";
33
+ /** Default embedding vector dimension (Voyage AI 1024-d) */
34
+ const VECTOR_DIMENSION_DEFAULT = 1024;
35
+ /** Plugin version identifier */
36
+ const PLUGIN_VERSION = "0.9.74";
37
+ /** Production sno.ai host origin used by @snoai/observability. */
38
+ const SNO_OBSERVE_DEFAULT_BASE_URL = "https://www.sno.ai";
39
+ /** Default observability agent id for OpenClaw plugin emits. */
40
+ const SNO_OBSERVE_DEFAULT_AGENT_ID = "openclaw";
41
+ /** Bounded lifecycle observe flush — enough headroom for the SDK to complete one HTTP POST batch. */
42
+ const SNO_OBSERVE_FLUSH_TIMEOUT_MS = 8e3;
43
+ /** Default top-K results returned from search */
44
+ const DEFAULT_TOP_K = 10;
45
+ /** Default and minimum character-estimated token budgets for one recall result. */
46
+ const DEFAULT_RECALL_TOKEN_BUDGET = 7e3;
47
+ const MIN_RECALL_TOKEN_BUDGET = 5e3;
48
+ /** Weight for vector (semantic) branch in hybrid score fusion */
49
+ const DEFAULT_VECTOR_WEIGHT = .7;
50
+ /** Weight for BM25 (keyword) branch in hybrid score fusion */
51
+ const DEFAULT_BM25_WEIGHT = .3;
52
+ /** Initial candidate pool size for precision recall search */
53
+ const CANDIDATE_POOL_SIZE = 64;
54
+ /**
55
+ * Hard ceiling for candidate pool expansion. Also the retrieval limit `memory_recall` asks for,
56
+ * so it bounds how much of a live store one answer can see. Raised 100 → 512 on 2026-09-06 (owner
57
+ * order): atomic rows are small and many, and at 100 a 159-row live store served 76 rows per
58
+ * question, cutting live to-dos the question asked for; at 512 the whole store came back for
59
+ * 3,476 tokens, half the recall token budget. Raised again 512 -> 2048 on 2026-09-15: the pool is
60
+ * `max(candidatePoolSize, limit * 2)` clamped here, so at 512 a caller asking for more than 256
61
+ * memories silently got fewer, and the ceiling — not the ranking — decided what the model saw.
62
+ */
63
+ const MAX_CANDIDATE_POOL_SIZE = 2048;
64
+ /**
65
+ * How many candidates one `memory_recall` call retrieves and ranks.
66
+ *
67
+ * Split from `MAX_CANDIDATE_POOL_SIZE` on 2026-09-15. The tool used to ask for that ceiling
68
+ * directly, so raising the ceiling to let auto-recall inject more memories would also have made
69
+ * every tool call fuse and rerank four times as many rows for a result the token packer bounds
70
+ * at `DEFAULT_RECALL_TOKEN_BUDGET` anyway. This keeps the tool's cost where it was measured.
71
+ */
72
+ const MAX_RECALL_TOOL_CANDIDATES = 512;
73
+ /**
74
+ * How many of a subject's live profile and state rows, most similar first, the REM replace wave
75
+ * pairs each such row with (PRD 140 REQ-8). A persona's live profile holds 72–107 rows (measured
76
+ * 2026-09-07), so 128 reaches every row of one subject; it catches what the write-time cap below
77
+ * leaves out.
78
+ */
79
+ const ARRIVAL_RETIREMENT_CANDIDATE_CAP = 128;
80
+ /**
81
+ * How many older live profile and state rows of the project, most similar first, a newly
82
+ * written row is judged against at write time, one conflict-adjudication call per pair (PRD 140
83
+ * REQ-2). A measured correction pair was its subject's most similar pair (0.688 against 0.495–0.618
84
+ * for the others, 2026-09-23); a target outside this cap is left to the REM replace wave.
85
+ */
86
+ const ARRIVAL_RETIREMENT_JUDGED_CANDIDATE_CAP = 10;
87
+ /**
88
+ * Measurement-only overrides for the block 210 retrieval-breadth experiment.
89
+ *
90
+ * Both are OFF unless the named environment variable is set, and neither is
91
+ * reachable from the plugin configuration schema, so a deployed plugin cannot
92
+ * turn them on: the experiment harness sets them on the process it starts and
93
+ * nothing else does. They exist because the runtime and the schema both stop
94
+ * the candidate pool at `MAX_CANDIDATE_POOL_SIZE`, which makes the pool-200
95
+ * cell impossible to run at all without one enabling edit (PRD 210 DEC-1).
96
+ *
97
+ * Read at call time, not at import time, so a harness that sets the variable
98
+ * after this module loads still gets the value it asked for.
99
+ */
100
+ function experimentCandidatePoolOverride() {
101
+ const raw = process.env.MEM_CLAW_EXPERIMENT_CANDIDATE_POOL_SIZE?.trim();
102
+ if (!raw) return void 0;
103
+ const parsed = Number(raw);
104
+ if (!Number.isSafeInteger(parsed) || parsed < 1) return void 0;
105
+ return parsed;
106
+ }
107
+ /** True only while the block 210 experiment harness has asked for MMR off. */
108
+ function experimentMmrDisabled() {
109
+ return process.env.MEM_CLAW_EXPERIMENT_DISABLE_MMR?.trim() === "1";
110
+ }
111
+ /**
112
+ * Maximum aggregation evidence rows materialized into one recall result.
113
+ * Derived from the largest measured population (290) plus ~10% headroom, then raised with the
114
+ * candidate pool ceiling on 2026-09-06 so a whole-population read can serve past that ceiling.
115
+ * This bounds the synchronous storage read; a separate token budget bounds
116
+ * the serialized tool result.
117
+ */
118
+ const MAX_AGGREGATION_ROWS = 640;
119
+ /**
120
+ * Token budget for the aggregation payload ONE consumer receives.
121
+ *
122
+ * Derived, and every number is a measurement. The answering engine's context is 64K tokens (owner,
123
+ * 2026-08-14, raised from 32K with the Qwen 3.8 rollout); half is reserved for the question, the
124
+ * surrounding prompt and the answer, leaving 32K for recalled evidence. Measured with
125
+ * `dev-scripts/census-aggregation-payload.mts` against the largest real store
126
+ * (`academic_researcher_weekly`, 138 active profile/episodic rows): the ENTIRE population renders in
127
+ * 43,699 characters ~= 10,925 tokens, a sixth of the context. A complete aggregation is therefore
128
+ * the ordinary case on real data, not an aspiration.
129
+ *
130
+ * The HALF is the load-bearing part, not the literal number. When the context moved to 64K this
131
+ * constant did not move with it for one commit, and a budget that stays put while its derivation
132
+ * doubles silently becomes a quarter of the context — a tightening nobody decided and nobody would
133
+ * find. That is the same shape as defect 2 below. If the context changes again, this changes.
134
+ *
135
+ * Known trade, stated rather than discovered later: widening this window is what raised aggregation
136
+ * from 0.045 to 0.744 on 2026-08-13, and it is also what dropped FAA 0.647 -> 0.600 in the same
137
+ * run, because retired rows the old ceiling had hidden came back into view. The answer to that is
138
+ * REM removing them (PRD 30/40), never a smaller recall window — shrinking this to protect FAA
139
+ * re-severs the counting path, which is the defect this constant exists to record.
140
+ *
141
+ * This replaces three ceilings that stacked on one path and severed it. Measured on the full
142
+ * benchmark run of 2026-08-13: 30 counting questions scored 0.045 mean with 28 of them exactly
143
+ * 0.000, while the same personas' other 60 questions scored 0.748. The model was not wrong — asked
144
+ * for a week of steps it answered "14,392 steps (recorded on June 7). No other step data is logged
145
+ * for the rest of the week", because 8 rows of 138 reached it. A model cannot total rows it was
146
+ * never shown. The three were:
147
+ *
148
+ * 1. `MAX_AGGREGATION_OUTPUT_ROWS = 8` — no derivation anywhere; 5.8% of a population handed to a
149
+ * question whose entire job is to total that population.
150
+ * 2. `MAX_AGGREGATION_TOOL_RESULT_CHARS = 16_384` — a unit error. 16,384 was the OLD 16K context
151
+ * in TOKENS, applied as a CHARACTER count, binding 3-4x tighter than it read.
152
+ * 3. Charging each consumer for the other's copy: the budget measured `JSON.stringify(result)`,
153
+ * which carries every row twice — once rendered, once in `memories` — while the OpenClaw host
154
+ * reads only the rendered text and the eval reads only `memories`.
155
+ *
156
+ * So this budget is counted in tokens, against the larger of the two consumer views, never a sum.
157
+ */
158
+ const MAX_AGGREGATION_RESULT_TOKENS = 32768;
159
+ /** Pool size = max(candidatePoolSize, limit * PRECISION_RECALL_POOL_SIZE_FACTOR) */
160
+ const PRECISION_RECALL_POOL_SIZE_FACTOR = 2;
161
+ /** Enable age-based retrieval scoring only when explicitly requested. */
162
+ const TEMPORAL_WEIGHTING_DEFAULT = false;
163
+ /** Recency boost half-life in days (entries this old get 50% boost) */
164
+ const RECENCY_HALF_LIFE_DAYS = 14;
165
+ /** Additive recency boost magnitude */
166
+ const RECENCY_WEIGHT = .1;
167
+ /** Maximum allowed recency weight */
168
+ const RECENCY_WEIGHT_MAX = .5;
169
+ /** Base multiplier for importance weighting (score * (base + importance * base)) */
170
+ const IMPORTANCE_WEIGHT_BASE = .7;
171
+ /**
172
+ * Reference text length for log normalization (longer texts penalized).
173
+ * 0 disables the stage (see `applyLengthNormalization`'s early-return).
174
+ * Disabled 2026-07-05: confirmed actively harmful, not just miscalibrated —
175
+ * it demotes memories by parent-document verbosity, not by how much of the
176
+ * matched chunk is relevant, and was the dominant compressor feeding the
177
+ * MMR scale-mismatch bug (see MMR_LAMBDA below). Anchor value 500 (chars)
178
+ * also never matched the chunk geometry (256-448 tokens) it was scoring.
179
+ */
180
+ const LENGTH_NORM_ANCHOR = 0;
181
+ /** Time decay half-life in days */
182
+ const TIME_DECAY_HALF_LIFE_DAYS = 60;
183
+ /** Minimum time decay multiplier (floor for very old entries) */
184
+ const TIME_DECAY_FLOOR = .6;
185
+ /** Dynamic memories use a shorter half-life when temporal decay is enabled */
186
+ const TEMPORAL_DYNAMIC_HALF_LIFE_DIVISOR = 3;
187
+ /**
188
+ * Relevance vs diversity tradeoff for MMR (0.7 = 70% relevance, 30% diversity).
189
+ * `applyMmrDiversity` normalizes the relevance term to [0,1] (batch-max) before
190
+ * applying this weight — without that normalization, the shrinker chain above
191
+ * compresses relevance so far below the [0,1] cosine-similarity diversity term
192
+ * that this ratio was moot (diversity always won). Fixed 2026-07-05.
193
+ */
194
+ const MMR_LAMBDA = .7;
195
+ /** Weight for fusion score in rerank blend */
196
+ const RERANK_BLEND_VECTOR = .3;
197
+ /** Weight for cross-encoder score in rerank blend */
198
+ const RERANK_BLEND_CROSS = .7;
199
+ /** Fusion-score weight in local cosine-blend rerank */
200
+ const LIGHTWEIGHT_FUSION_WEIGHT = .7;
201
+ /** Cosine-similarity weight in local cosine-blend rerank */
202
+ const LIGHTWEIGHT_COSINE_WEIGHT = .3;
203
+ /** Default rerank model identifier */
204
+ const DEFAULT_RERANK_MODEL = "rerank-2";
205
+ /** Default timeout for rerank API calls in milliseconds */
206
+ const DEFAULT_RERANK_TIMEOUT_MS = 15e3;
207
+ /**
208
+ * How many rerank batches may be in flight at once. A candidate pool of
209
+ * `MAX_CANDIDATE_POOL_SIZE` divided by a provider's per-request batch limit is 11 requests for
210
+ * TEI, and sending them one after another put `DEFAULT_RERANK_TIMEOUT_MS` on the clock 11 times
211
+ * over. Four is what the Sno GPU serves concurrently at near-linear 4x (owner-measured
212
+ * 2026-08-17); the first failing wave still ends the whole rerank, so a wedged reranker costs one
213
+ * timeout rather than one per batch.
214
+ */
215
+ const DEFAULT_RERANK_BATCH_CONCURRENCY = 4;
216
+ /**
217
+ * Texts per HTTP request, applied whatever `rerankMaxCandidates` allows out in total: that one
218
+ * is the operator's budget, this one is the transport's own per-request limit.
219
+ *
220
+ * Confirmed 2026-09-14 against the deployed self-hosted ranker, which answers a 51-text request
221
+ * with `{"error":"too many texts: max 50, got 51"}`. Such a deployment rejects an over-limit
222
+ * batch outright rather than truncating it, and the retriever files that HTTP 400 as "reranker
223
+ * unavailable" — so getting this wrong degrades every call to raw fusion order with no visible
224
+ * error.
225
+ *
226
+ * It binds every provider, not only the self-hosted one it was measured against. Making it
227
+ * conditional on the configured provider name put the guarantee in a deploy script instead of
228
+ * in the code. Hosted providers (voyage, jina, pinecone, dashscope) document much higher
229
+ * limits, so holding them to this one only sends more, smaller requests, which the rerank waves
230
+ * already run four at a time.
231
+ */
232
+ const DEFAULT_TEI_RERANK_MAX_CANDIDATES = 50;
233
+ /**
234
+ * THE per-record token ceiling, and the only number of its kind in this repository (owner
235
+ * ruling 2026-09-14). One stored memory record, one embedder input, one rerank candidate,
236
+ * one row rendered into an aggregation answer: each is at most this many tokens, counted by
237
+ * the embedder's own tokenizer (`Embedder.countTokens`), never estimated from characters.
238
+ * Why one number: the local ONNX embedder silently truncates past its context window, the
239
+ * Sno reranker silently truncates past its own, and a record longer than either scores on
240
+ * its first half only — measured 2026-09-14, a claim placed past the cut ranked 0.0001.
241
+ * The reranker's window is shared with the query and a fixed instruction, so this ceiling
242
+ * must leave that room. It does NOT leave it by itself: a record at this ceiling plus any
243
+ * query at all is already past the reranker's window, which is why the rerank path cuts the
244
+ * request copy of a candidate down to what the query leaves, inside this same number.
245
+ * The two tokenizers are no longer one vocabulary either — the deployed ranking model is not
246
+ * the embedder's model (measured 2026-09-14), so a count taken here is an estimate of the
247
+ * ranker's count, and the ranker's own refusal is the only exact measure.
248
+ * Extraction is told to split anything longer (skill `extract-atomic-memory`); the store
249
+ * refuses a longer record outright. Every other size in this file that describes a piece
250
+ * of a record derives from this constant — do not write its value, or a fraction of it, as
251
+ * a literal anywhere else.
252
+ */
253
+ const DEFAULT_MAX_CONTEXT_TOKENS = 512;
254
+ /**
255
+ * Tokens the ranking model's own prompt template adds to a pair, on top of the query and the
256
+ * document. Measured against the deployed endpoint 2026-09-14: a 509-token pair is accepted
257
+ * and reported back as 512 input tokens, and a 510-token pair is refused as 513.
258
+ */
259
+ const RERANK_PROMPT_TEMPLATE_TOKENS = 3;
260
+ /** Maximum lines per chunk before forcing an earlier split at a line boundary */
261
+ const DEFAULT_MAX_LINES_PER_CHUNK = 50;
262
+ /** Default list query page size */
263
+ const DEFAULT_LIST_LIMIT = 50;
264
+ /**
265
+ * Maximum allowed list query page size; also caps each search branch
266
+ * (`memory-store-search-api.ts` clamps both the semantic and the keyword branch to it), so it
267
+ * stays >= the pool ceiling. Derived, not written: left at a literal 512 when the pool ceiling
268
+ * went 512 -> 2048 on 2026-09-15, every branch silently returned at most 512 candidates while
269
+ * retrieval asked for up to 2048, and the ceiling decided what ranking never saw.
270
+ */
271
+ const MAX_LIST_LIMIT = MAX_CANDIDATE_POOL_SIZE;
272
+ /** Maximum number of to-dos prepended to one recall result */
273
+ const MAX_RECALLED_TODOS = 50;
274
+ const MAX_RECALLED_TODO_TOKENS = 1e3;
275
+ /**
276
+ * Ceiling for chunk-level fetch budgets (semantic/keyword chunk search).
277
+ * Deliberately independent of MAX_LIST_LIMIT: memory-level wrappers overfetch
278
+ * chunks (limit * 8) so one high-recall parent cannot collapse parent diversity.
279
+ */
280
+ const MAX_CHUNK_FETCH_LIMIT = 4096;
281
+ /** Batch size for bulk delete operations (respects SQLite ~32k bind-param limit) */
282
+ const DELETE_BATCH_SIZE = 500;
283
+ /** Default limit for forget-query similarity search */
284
+ const FORGET_QUERY_DEFAULT_LIMIT = 10;
285
+ /** Minimum score threshold for forget-query matches */
286
+ const FORGET_QUERY_MIN_SCORE = .8;
287
+ /**
288
+ * Minimum age of the newest backup before another is taken (1 day). A backup is a full copy of
289
+ * the store, so an hourly cadence cost a 1.7 GB store 40 GB of disk a day.
290
+ */
291
+ const BACKUP_INTERVAL_MS = 864e5;
292
+ /** Number of backup files to retain before rotation */
293
+ const BACKUP_RETENTION_COUNT = 6;
294
+ /**
295
+ * Share of the backup volume that must stay free. Before a backup is written the oldest backups are
296
+ * deleted until the copy fits above this floor, and again afterwards if the volume is still under
297
+ * it; the newest backup is always kept, and when even that is not enough the backup is skipped.
298
+ */
299
+ const BACKUP_MIN_FREE_DISK_RATIO = .1;
300
+ /** How often the maintenance timer wakes to see which jobs are due (1 hour). */
301
+ const MAINTENANCE_TICK_MS = 36e5;
302
+ /** Full-page integrity sweep (1 hour). */
303
+ const INTEGRITY_CHECK_INTERVAL_MS = 36e5;
304
+ /** Usage-telemetry outbox drain and quarantine cleanup (1 hour). */
305
+ const USAGE_OUTBOX_INTERVAL_MS = 36e5;
306
+ /** Pruning of expired recall/inject usage events (1 hour). */
307
+ const USAGE_EVENT_RETENTION_INTERVAL_MS = 36e5;
308
+ /** Full-text index segment merge (1 hour). */
309
+ const FTS_MERGE_INTERVAL_MS = 36e5;
310
+ /** Query-planner statistics refresh (1 hour). */
311
+ const PLANNER_STATISTICS_INTERVAL_MS = 36e5;
312
+ /**
313
+ * How often the automatic REM trigger is evaluated (1 hour). Evaluating is only a check: REM
314
+ * itself runs on its own daily schedule and volume rule in src/sidecar/rem-trigger.ts.
315
+ */
316
+ const REM_TRIGGER_CHECK_INTERVAL_MS = 36e5;
317
+ /** Embedder LRU cache max entries */
318
+ const CACHE_SIZE = 256;
319
+ /** Embedder LRU cache TTL in milliseconds (30 minutes) */
320
+ const CACHE_TTL_MS = 18e5;
321
+ /** Kill switch file check interval in milliseconds */
322
+ const KILL_SWITCH_CACHE_TTL_MS = 100;
323
+ /** Cost estimate cache TTL in milliseconds */
324
+ const COST_ESTIMATE_CACHE_TTL_MS = 5e3;
325
+ /** Max sessions tracked in LRU map */
326
+ const MAX_TRACKED_SESSIONS = 100;
327
+ /** Max recall history entries per session */
328
+ const MAX_SESSION_RECALL_ENTRIES = 200;
329
+ /** Default number of recent messages to read from a session file */
330
+ const DEFAULT_SESSION_MESSAGE_COUNT = 15;
331
+ /** Chunk size for reading last JSON line from session files */
332
+ const LAST_JSON_LINE_CHUNK_BYTES = 4096;
333
+ /** Token budget per session-summary chunk sent to the model */
334
+ const SESSION_SUMMARY_CHUNK_TOKENS = 4096;
335
+ /**
336
+ * Total token budget for a session-summary transcript before chunking. Message count is bounded
337
+ * upstream but per-message text is not, so a handful of very large messages can otherwise produce
338
+ * an effectively unlimited number of chunks. The most-recent portion is kept (drop-oldest).
339
+ */
340
+ const SESSION_SUMMARY_MAX_INPUT_TOKENS = 32768;
341
+ /**
342
+ * Hard cap on sequential model calls in one reset-time session-summary capture. Backstops the input
343
+ * budget so a single capture can never run indefinitely even if the pre-chunk budget has a gap. At
344
+ * the default 30s per-chunk timeout this bounds a capture to roughly SESSION_SUMMARY_MAX_CHUNKS × 30s.
345
+ */
346
+ const SESSION_SUMMARY_MAX_CHUNKS = 8;
347
+ /** Transcript budget shared by an atomic window and its preceding context. */
348
+ const ATOMIC_EXTRACTION_MAX_INPUT_TOKENS = 4096;
349
+ const ATOMIC_ENRICHMENT_OUTPUT_TOKEN_BUDGET = 1400;
350
+ /**
351
+ * Output cap of one capture call. The capture reply lists every claim and then every fact with
352
+ * its quote, roughly 70 tokens per fact; at 4,096 a 35-turn session replayed as one turn hit the
353
+ * cap and lost the whole window (43 of 272 LoCoMo sessions, measured 2026-09-13). A window is
354
+ * split by turns when a reply truncates, so a single long turn (a pasted document, a replayed
355
+ * session) has only this cap between it and total loss. Sized from the budget, not the failure:
356
+ * the prompt (skill, calendar reference, response schema, dictionaries) is about 10K tokens, the
357
+ * transcript at most ATOMIC_EXTRACTION_MAX_INPUT_TOKENS, and the model serves a 64K context, so
358
+ * 16,384 keeps the whole call near 30K; the longest LoCoMo session (40 messages, ~100 facts)
359
+ * needs about 10K, which 8,192 only just covered.
360
+ */
361
+ const ATOMIC_CAPTURE_OUTPUT_TOKEN_BUDGET = 16384;
362
+ /**
363
+ * Wall time one capture call is given. The generic client timeout is what an installation sets
364
+ * for short judgments (30s by default, 60s on the LoCoMo VM) and does not know this call's output
365
+ * budget, so raising the budget silently made the call unfinishable: measured 2026-09-20, four
366
+ * sessions produced `LlmClientTerminalError category=timeout` at 60s after 105-130s of work and
367
+ * stored nothing. Sized from the budget at the extraction model's measured ~60 output tokens per
368
+ * second, with the same headroom the budget carries.
369
+ */
370
+ const ATOMIC_CAPTURE_TIMEOUT_MS = 3e5;
371
+ /** Minimum text length for CJK content to be captured */
372
+ const CAPTURE_MIN_LENGTH_CJK = 4;
373
+ /** Minimum text length for non-CJK content to be captured */
374
+ const CAPTURE_MIN_LENGTH_STANDARD = 10;
375
+ /** Maximum character length of auto-recall query before truncation */
376
+ const DEFAULT_AUTO_RECALL_MAX_QUERY_LENGTH = 2e3;
377
+ /** Maximum emoji count before content is rejected as noise */
378
+ const CAPTURE_MAX_EMOJI_COUNT = 3;
379
+ /** Minimum trimmed text length before content is classified as noise */
380
+ const NOISE_MIN_TEXT_LENGTH = 5;
381
+ /**
382
+ * Whether ambient-learning requires a text to match the `MEMORY_TRIGGERS` regex
383
+ * whitelist (e.g. `i prefer`, `my X is Y`, `we decided`, `remember`, ...).
384
+ *
385
+ * When `true`, texts lacking any trigger keyword are dropped — high precision,
386
+ * low recall. The bench corpus exposes the cost: teach turns like
387
+ * "My team lead at Anthropic is Maya Patel" (fails `my\s+\w+\s+is` — 4 words)
388
+ * "My go-to coffee is an oat milk latte" (fails — "go-to" has hyphen)
389
+ * "My teammates on Glacier are Jin ..." (fails — "are" not "is")
390
+ * were silently dropped, contributing 5 of 7 missing probes at 53%.
391
+ *
392
+ * When `false`, only length / noise / prompt-injection filters apply.
393
+ * Content-hash dedup in the store keeps volume bounded.
394
+ *
395
+ * Bench history:
396
+ * - true → 53% (post-runtime-fix baseline).
397
+ * - false → TBD (under evaluation 2026-04-17).
398
+ */
399
+ const AMBIENT_LEARNING_REQUIRE_TRIGGER_MATCH = false;
400
+ /**
401
+ * Top-K memories injected into the agent's prepend context at
402
+ * `before_agent_start`. Higher values expose more facts but increase
403
+ * prompt size + reranker workload.
404
+ *
405
+ * Bench history (LoCoMo mid, 50 rows, isolated sessions, 2026-04-22):
406
+ * - 5 → 52% (original default) — too many R3 refusals on specific-date/object
407
+ * queries because the answer memory wasn't ranked in the top 5.
408
+ * - 15 → 66% (+14pp) — opens the budget for list/count/temporal queries.
409
+ * Peak score; the remaining failures are memories ranked beyond 15 or
410
+ * wrong-content retrievals (architectural, not budget).
411
+ * - 25 → 64% (−2pp vs 15) — wider top-k dilutes with noise; agent surfaces
412
+ * adjacent-but-wrong memories.
413
+ *
414
+ * 2026-04-27 (commit 6a3ab60): raised to 20 — the Round-B chunked retrieval
415
+ * pipeline tightened candidate quality enough that the K=15→20 dilution risk
416
+ * noted above no longer dominated, and the wider budget caught list/count/
417
+ * temporal queries whose answer ranked 16-20 on conv0.
418
+ *
419
+ * 2026-07-02: re-tightened to 10 after the RETRIEVAL_CHUNK_PROFILE migration
420
+ * (target 384→512, max 448→1536) ballooned per-question prompts to ~123k
421
+ * chars and the score fell to 58%. That large-chunk profile was itself
422
+ * reverted the next day (`RETRIEVAL_STORAGE_CHUNK_PROFILE` back to
423
+ * 256/384/448/32, validated 86% on 2026-07-03) — but this constant was never
424
+ * reverted alongside it, leaving it stuck compensating for a regression that
425
+ * no longer exists.
426
+ *
427
+ * 2026-07-05: reverted to 20 to match. The shipped default must equal what
428
+ * the eval harness actually validates (`run-eval.sh` pins `recallTopK: 20`;
429
+ * the 86% run above used it) — production and eval must not diverge.
430
+ */
431
+ const AUTO_RECALL_INJECTION_TOP_K = 20;
432
+ /**
433
+ * Lean recall top-K — the lower-cost alternative surfaced in onboarding copy.
434
+ * Pre-512-geometry history (K=15 lean vs K=20 default, LoCoMo conv0 74-fact
435
+ * corpus, 4-run avg ±0.88pp): 86.25% correctness, ~9.3M prompt tokens /
436
+ * 400 QAs, ~25% cheaper than the then-default K=20.
437
+ *
438
+ * 2026-07-02: rescaled 15 → 8 alongside the default's 20 → 10 for a
439
+ * large-chunk profile that was itself reverted the next day. 2026-07-05:
440
+ * reverted to 15 alongside AUTO_RECALL_INJECTION_TOP_K's 10 → 20 revert,
441
+ * restoring the original ~0.75 lean:default ratio.
442
+ *
443
+ * This constant is the source of truth for the "Lean N" token in
444
+ * `openclaw.plugin.json` uiHints and the Path A install nudge.
445
+ * The plugin configuration test
446
+ * pins all four surfaces to this constant.
447
+ */
448
+ const AUTO_RECALL_LEAN_TOP_K = 15;
449
+ /** Default number of recent messages used for reflection input */
450
+ const DEFAULT_REFLECTION_MESSAGE_COUNT = 120;
451
+ /** Maximum input characters for reflection prompt */
452
+ const DEFAULT_REFLECTION_MAX_INPUT_CHARS = 24e3;
453
+ /** Timeout for individual reflection LLM calls in milliseconds */
454
+ const DEFAULT_REFLECTION_TIMEOUT_MS = 2e4;
455
+ /** Maximum error reminder entries included in reflection prompt */
456
+ const DEFAULT_REFLECTION_ERROR_REMINDER_MAX_ENTRIES = 3;
457
+ /** Session TTL in reflection tracking map (30 minutes) */
458
+ const DEFAULT_REFLECTION_SESSION_TTL_MS = 18e5;
459
+ /** Maximum sessions tracked in reflection state */
460
+ const DEFAULT_REFLECTION_MAX_TRACKED_SESSIONS = 200;
461
+ /** Maximum chars scanned for error signals in conversation */
462
+ const DEFAULT_REFLECTION_ERROR_SCAN_MAX_CHARS = 8e3;
463
+ /** Maximum invariant entries extracted from a single reflection */
464
+ const REFLECTION_MAX_INVARIANTS = 8;
465
+ /** Maximum derived delta entries extracted from a single reflection */
466
+ const REFLECTION_MAX_DERIVED = 10;
467
+ /** Cosine similarity threshold above which a reflection is considered duplicate */
468
+ const REFLECTION_DEDUP_THRESHOLD = .97;
469
+ /** Minimum score for dedup similarity search (low to catch near-dupes) */
470
+ const REFLECTION_DEDUP_MIN_SCORE = .1;
471
+ /** Importance score assigned to stored reflection entries */
472
+ const REFLECTION_IMPORTANCE = .75;
473
+ /** Maximum filename collision retries for reflection FS output */
474
+ const REFLECTION_MAX_FILENAME_ATTEMPTS = 10;
475
+ /** Cache TTL for loaded reflection slices in milliseconds */
476
+ const REFLECTION_SLICE_CACHE_TTL_MS = 15e3;
477
+ /** Maximum age for derived deltas to be included in context (2 hours) */
478
+ const REFLECTION_DERIVED_MAX_AGE_MS = 72e5;
479
+ /**
480
+ * Minimum cosine score for `handleProfileMerge` to fire an unconditional merge
481
+ * on an identity row. NO dedup LLM gate runs after this — the threshold is
482
+ * the only filter — so it must be tight enough that "plausibly related"
483
+ * identity facts do not get merged together. Matched to the compaction
484
+ * clustering bar.
485
+ */
486
+ const PROFILE_MERGE_THRESHOLD = .88;
487
+ const RETRIEVAL_STORAGE_CHUNK_PROFILE = {
488
+ minTokens: 256,
489
+ targetTokens: 384,
490
+ maxTokens: 448,
491
+ overlapTokens: 32
492
+ };
493
+ /** Minimum tokens per chunk before merge (mirrors RETRIEVAL_STORAGE_CHUNK_PROFILE). */
494
+ const CHUNK_MIN_TOKENS = RETRIEVAL_STORAGE_CHUNK_PROFILE.minTokens;
495
+ /** Target tokens per chunk (mirrors RETRIEVAL_STORAGE_CHUNK_PROFILE). */
496
+ const CHUNK_TARGET_TOKENS = RETRIEVAL_STORAGE_CHUNK_PROFILE.targetTokens;
497
+ /** Max tokens per chunk before split (mirrors RETRIEVAL_STORAGE_CHUNK_PROFILE). */
498
+ const CHUNK_MAX_TOKENS = RETRIEVAL_STORAGE_CHUNK_PROFILE.maxTokens;
499
+ /** Overlap tokens between adjacent chunks (mirrors RETRIEVAL_STORAGE_CHUNK_PROFILE). */
500
+ const CHUNK_OVERLAP_TOKENS = RETRIEVAL_STORAGE_CHUNK_PROFILE.overlapTokens;
501
+ /** Tokenizer mode used by the chunker (mirrors DEFAULT_CHUNK_CONFIG.tokenizerMode). */
502
+ const CHUNK_TOKENIZER_MODE = DEFAULT_CHUNK_CONFIG.tokenizerMode;
503
+ /**
504
+ * Diagnostic threshold for intra-memory chunk cosine similarity (PRD §8.1).
505
+ * Pairs above this score are flagged as redundant during eval / introspection.
506
+ */
507
+ const INTRA_MEMORY_COSINE_THRESHOLD = .92;
508
+ /** Alias for VECTOR_DIMENSION_DEFAULT — the embedder output dimension. */
509
+ const EMBEDDER_DIM = VECTOR_DIMENSION_DEFAULT;
510
+ /** Default embedder provider id stamped into chunk provenance. */
511
+ const EMBEDDER_PROVIDER_DEFAULT = "local-onnx";
512
+ /**
513
+ * Default embedder model id stamped into chunk provenance.
514
+ *
515
+ * Codex 2026-04-30 (batch-C C1): the previous hard-coded
516
+ * `qwen3-embedding-4b@1024` did not match the actual local default
517
+ * (`LOCAL_EMBEDDING_MODEL`, the bundled local embedding model), which would
518
+ * mislabel every default-provider chunk in eval traces. Tracking the
519
+ * embedder package's constant keeps provenance honest by construction.
520
+ */
521
+ const EMBEDDER_MODEL_DEFAULT = LOCAL_EMBEDDING_MODEL;
522
+ /** SQL window cap on chunks per parent memory (prevents parent flooding). */
523
+ const MAX_CHUNKS_PER_PARENT = 16;
524
+ /** Per-hit bonus for repeated chunk hits inside one parent. */
525
+ const MULTI_HIT_BONUS_PER_HIT = DEFAULT_AGGREGATION_CONFIG.multiHitBonusPerHit;
526
+ /** Cap on the cumulative multi-hit bonus per parent. */
527
+ const MULTI_HIT_BONUS_CAP = DEFAULT_AGGREGATION_CONFIG.multiHitBonusCap;
528
+ /** Per-pair bonus for adjacent chunk hits within one parent. */
529
+ const ADJACENCY_BONUS_PER_PAIR = DEFAULT_AGGREGATION_CONFIG.adjacencyBonusPerPair;
530
+ /** Cap on the cumulative adjacency bonus per parent. */
531
+ const ADJACENCY_BONUS_CAP = DEFAULT_AGGREGATION_CONFIG.adjacencyBonusCap;
532
+ /** Invariant: bonusTotalInvariant >= MULTI_HIT_BONUS_CAP + ADJACENCY_BONUS_CAP. */
533
+ const BONUS_TOTAL_INVARIANT = DEFAULT_AGGREGATION_CONFIG.bonusTotalInvariant;
534
+ /**
535
+ * Number of preceding chunks pulled into a snippet window.
536
+ *
537
+ * Override (not the package default) — LoCoMo eval showed multi-fact
538
+ * questions that span 4+ messages were partially answered when the window
539
+ * was 1 (e.g. "what events has Caroline done to help children" landed on
540
+ * mentorship but missed the school-speech chunk two messages away). Bumped
541
+ * to 2 paired with the head-extract metadata-preserve fix (2026-05-01).
542
+ * A later LoCoMo `3/3` trial improved mid-50 but regressed full conv0 by
543
+ * adding nearby distractors, so the stable default remains `2/2`.
544
+ */
545
+ const SNIPPET_NEIGHBOR_BEFORE = 2;
546
+ /** Number of following chunks pulled into a snippet window. See above. */
547
+ const SNIPPET_NEIGHBOR_AFTER = 2;
548
+ /** When false, retrieval traces are not written. Eval harness flips this on. */
549
+ const EVAL_TRACE_ENABLED = false;
550
+ /** Filename for the per-eval-run config snapshot. */
551
+ const EVAL_CONFIG_SNAPSHOT_FILENAME = "config-snapshot.json";
552
+ /** Filename for per-QA retrieval traces emitted during eval runs. */
553
+ const EVAL_QA_TRACES_FILENAME = "qa_traces.jsonl";
554
+ /** Multiplicative penalty applied to unreturned candidates after rerank. */
555
+ const LIGHTWEIGHT_RERANK_PENALTY = .8;
556
+ /** Maximum tokens kept in a sanitized FTS5 MATCH expression. */
557
+ const FTS_QUERY_TOKEN_CAP = 50;
558
+ /**
559
+ * Zod schema for the `recallLifecycle` config block. The whole block defaults
560
+ * to `{}` so existing configs without it continue to parse and behave
561
+ * bit-for-bit identically to the pre-Phase-0 baseline.
562
+ *
563
+ * Spec: openspec/changes/mem-lifecycle/specs/config/spec.md.
564
+ */
565
+ const recallLifecycleSchema = z.object({
566
+ retentionScorer: z.boolean().default(true),
567
+ tierPromoter: z.boolean().default(true),
568
+ autoRecallAccessTracking: z.boolean().default(true),
569
+ traceEnabled: z.boolean().default(true),
570
+ tierFloorMode: z.enum(["bare", "withFloor"]).default("bare"),
571
+ tierPromotionTopK: z.number().int().positive().default(3),
572
+ accessRateLimitMs: z.number().int().nonnegative().default(36e5),
573
+ accessCountCeiling: z.number().int().positive().default(20)
574
+ }).prefault({});
575
+ /**
576
+ * Resolved default `recallLifecycle` config. Use in code paths that need a
577
+ * literal default object instead of re-parsing the schema each time.
578
+ */
579
+ const DEFAULT_RECALL_LIFECYCLE = recallLifecycleSchema.parse(void 0);
580
+ //#endregion
581
+ export { ADJACENCY_BONUS_CAP, ADJACENCY_BONUS_PER_PAIR, AMBIENT_LEARNING_REQUIRE_TRIGGER_MATCH, ARRIVAL_RETIREMENT_CANDIDATE_CAP, ARRIVAL_RETIREMENT_JUDGED_CANDIDATE_CAP, ATOMIC_CAPTURE_OUTPUT_TOKEN_BUDGET, ATOMIC_CAPTURE_TIMEOUT_MS, ATOMIC_ENRICHMENT_OUTPUT_TOKEN_BUDGET, ATOMIC_EXTRACTION_MAX_INPUT_TOKENS, AUTO_RECALL_INJECTION_TOP_K, AUTO_RECALL_LEAN_TOP_K, BACKUP_INTERVAL_MS, BACKUP_MIN_FREE_DISK_RATIO, BACKUP_RETENTION_COUNT, BONUS_TOTAL_INVARIANT, CACHE_SIZE, CACHE_TTL_MS, CANDIDATE_POOL_SIZE, CAPTURE_MAX_EMOJI_COUNT, CAPTURE_MIN_LENGTH_CJK, CAPTURE_MIN_LENGTH_STANDARD, CHUNKING_VERSION, CHUNK_MAX_TOKENS, CHUNK_MIN_TOKENS, CHUNK_OVERLAP_TOKENS, CHUNK_TARGET_TOKENS, CHUNK_TOKENIZER_MODE, COST_ESTIMATE_CACHE_TTL_MS, DEFAULT_AUTO_RECALL_MAX_QUERY_LENGTH, DEFAULT_BM25_WEIGHT, DEFAULT_HARD_MIN_SCORE, DEFAULT_IMPORTANCE, DEFAULT_LIST_LIMIT, DEFAULT_MAX_CONTEXT_TOKENS, DEFAULT_MAX_LINES_PER_CHUNK, DEFAULT_MIN_SCORE, DEFAULT_RECALL_LIFECYCLE, DEFAULT_RECALL_TOKEN_BUDGET, DEFAULT_REFLECTION_ERROR_REMINDER_MAX_ENTRIES, DEFAULT_REFLECTION_ERROR_SCAN_MAX_CHARS, DEFAULT_REFLECTION_MAX_INPUT_CHARS, DEFAULT_REFLECTION_MAX_TRACKED_SESSIONS, DEFAULT_REFLECTION_MESSAGE_COUNT, DEFAULT_REFLECTION_SESSION_TTL_MS, DEFAULT_REFLECTION_TIMEOUT_MS, DEFAULT_RERANK_BATCH_CONCURRENCY, DEFAULT_RERANK_MODEL, DEFAULT_RERANK_TIMEOUT_MS, DEFAULT_SCOPE, DEFAULT_SESSION_MESSAGE_COUNT, DEFAULT_TEI_RERANK_MAX_CANDIDATES, DEFAULT_TOP_K, DEFAULT_VECTOR_WEIGHT, DELETE_BATCH_SIZE, EMBEDDER_DIM, EMBEDDER_MODEL_DEFAULT, EMBEDDER_PROVIDER_DEFAULT, EVAL_CONFIG_SNAPSHOT_FILENAME, EVAL_QA_TRACES_FILENAME, EVAL_TRACE_ENABLED, FORGET_QUERY_DEFAULT_LIMIT, FORGET_QUERY_MIN_SCORE, FTS_MERGE_INTERVAL_MS, FTS_QUERY_TOKEN_CAP, HEAD_EXTRACT_MIN_CONTENT_TOKENS, HEAD_EXTRACT_OVERLAP_DROP_RATIO, HEAD_EXTRACT_TOKEN_BUDGET, IMPORTANCE_WEIGHT_BASE, INTEGRITY_CHECK_INTERVAL_MS, INTRA_MEMORY_COSINE_THRESHOLD, KILL_SWITCH_CACHE_TTL_MS, LAST_JSON_LINE_CHUNK_BYTES, LENGTH_NORM_ANCHOR, LIGHTWEIGHT_COSINE_WEIGHT, LIGHTWEIGHT_FUSION_WEIGHT, LIGHTWEIGHT_RERANK_PENALTY, MAINTENANCE_TICK_MS, MAX_AGGREGATION_RESULT_TOKENS, MAX_AGGREGATION_ROWS, MAX_CANDIDATE_POOL_SIZE, MAX_CHUNKS_PER_PARENT, MAX_CHUNK_FETCH_LIMIT, MAX_LIST_LIMIT, MAX_RECALLED_TODOS, MAX_RECALLED_TODO_TOKENS, MAX_RECALL_TOOL_CANDIDATES, MAX_SESSION_RECALL_ENTRIES, MAX_TRACKED_SESSIONS, MEMORY_SHUTDOWN_TIMEOUT_MS, MIN_RECALL_TOKEN_BUDGET, MMR_LAMBDA, MULTI_HIT_BONUS_CAP, MULTI_HIT_BONUS_PER_HIT, NOISE_MIN_TEXT_LENGTH, PLANNER_STATISTICS_INTERVAL_MS, PLUGIN_VERSION, PRECISION_RECALL_POOL_SIZE_FACTOR, PROFILE_MERGE_THRESHOLD, RECENCY_HALF_LIFE_DAYS, RECENCY_WEIGHT, RECENCY_WEIGHT_MAX, REFLECTION_DEDUP_MIN_SCORE, REFLECTION_DEDUP_THRESHOLD, REFLECTION_DERIVED_MAX_AGE_MS, REFLECTION_IMPORTANCE, REFLECTION_MAX_DERIVED, REFLECTION_MAX_FILENAME_ATTEMPTS, REFLECTION_MAX_INVARIANTS, REFLECTION_SLICE_CACHE_TTL_MS, REM_TRIGGER_CHECK_INTERVAL_MS, RERANK_BLEND_CROSS, RERANK_BLEND_VECTOR, RERANK_PROMPT_TEMPLATE_TOKENS, RETRIEVAL_STORAGE_CHUNK_PROFILE, SESSION_SUMMARY_CHUNK_TOKENS, SESSION_SUMMARY_MAX_CHUNKS, SESSION_SUMMARY_MAX_INPUT_TOKENS, SNIPPET_NEIGHBOR_AFTER, SNIPPET_NEIGHBOR_BEFORE, SNO_OBSERVE_DEFAULT_AGENT_ID, SNO_OBSERVE_DEFAULT_BASE_URL, SNO_OBSERVE_FLUSH_TIMEOUT_MS, TEMPORAL_DYNAMIC_HALF_LIFE_DIVISOR, TEMPORAL_WEIGHTING_DEFAULT, TIME_DECAY_FLOOR, TIME_DECAY_HALF_LIFE_DAYS, USAGE_EVENT_RETENTION_INTERVAL_MS, USAGE_OUTBOX_INTERVAL_MS, VECTOR_DIMENSION_DEFAULT, experimentCandidatePoolOverride, experimentMmrDisabled, recallLifecycleSchema };
@@ -0,0 +1,2 @@
1
+ import { n as pluginConfigSchema, t as PluginConfig } from "../../plugin-config-schema-C0UUbOmG.js";
2
+ export { PluginConfig, pluginConfigSchema };
@@ -0,0 +1,2 @@
1
+ import { t as pluginConfigSchema } from "../../plugin-config-schema-YJLyIIcJ.js";
2
+ export { pluginConfigSchema };
@@ -0,0 +1,2 @@
1
+ import { _ as llmRoutingConfigSchema, d as LLM_OCCASIONS, f as LlmOccasion, g as ProductMode, h as PRODUCT_MODES, m as LlmRoutingConfigInput, p as LlmRoutingConfig, u as DEFAULT_MODEL_MODE, v as remEnhancedConfigSchema } from "../../plugin-config-schema-C0UUbOmG.js";
2
+ export { DEFAULT_MODEL_MODE, LLM_OCCASIONS, LlmOccasion, LlmRoutingConfig, LlmRoutingConfigInput, PRODUCT_MODES, ProductMode, llmRoutingConfigSchema, remEnhancedConfigSchema };