abmind 0.0.1 → 0.1.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 (532) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE +190 -0
  3. package/README.md +191 -0
  4. package/dist/cli/abmind-backfill.d.ts +3 -0
  5. package/dist/cli/abmind-backfill.d.ts.map +1 -0
  6. package/dist/cli/abmind-backfill.js +64 -0
  7. package/dist/cli/abmind-backfill.js.map +1 -0
  8. package/dist/cli/abmind-backup.d.ts +5 -0
  9. package/dist/cli/abmind-backup.d.ts.map +1 -0
  10. package/dist/cli/abmind-backup.js +44 -0
  11. package/dist/cli/abmind-backup.js.map +1 -0
  12. package/dist/cli/abmind-bundle.d.ts +7 -0
  13. package/dist/cli/abmind-bundle.d.ts.map +1 -0
  14. package/dist/cli/abmind-bundle.js +17 -0
  15. package/dist/cli/abmind-bundle.js.map +1 -0
  16. package/dist/cli/abmind-edit.d.ts +10 -0
  17. package/dist/cli/abmind-edit.d.ts.map +1 -0
  18. package/dist/cli/abmind-edit.js +160 -0
  19. package/dist/cli/abmind-edit.js.map +1 -0
  20. package/dist/cli/abmind-embed.d.ts +3 -0
  21. package/dist/cli/abmind-embed.d.ts.map +1 -0
  22. package/dist/cli/abmind-embed.js +83 -0
  23. package/dist/cli/abmind-embed.js.map +1 -0
  24. package/dist/cli/abmind-expand.d.ts +6 -0
  25. package/dist/cli/abmind-expand.d.ts.map +1 -0
  26. package/dist/cli/abmind-expand.js +100 -0
  27. package/dist/cli/abmind-expand.js.map +1 -0
  28. package/dist/cli/abmind-hook-doctor.d.ts +8 -0
  29. package/dist/cli/abmind-hook-doctor.d.ts.map +1 -0
  30. package/dist/cli/abmind-hook-doctor.js +73 -0
  31. package/dist/cli/abmind-hook-doctor.js.map +1 -0
  32. package/dist/cli/abmind-hook-recall.d.ts +16 -0
  33. package/dist/cli/abmind-hook-recall.d.ts.map +1 -0
  34. package/dist/cli/abmind-hook-recall.js +123 -0
  35. package/dist/cli/abmind-hook-recall.js.map +1 -0
  36. package/dist/cli/abmind-hook-store.d.ts +17 -0
  37. package/dist/cli/abmind-hook-store.d.ts.map +1 -0
  38. package/dist/cli/abmind-hook-store.js +115 -0
  39. package/dist/cli/abmind-hook-store.js.map +1 -0
  40. package/dist/cli/abmind-hook-wakeup.d.ts +12 -0
  41. package/dist/cli/abmind-hook-wakeup.d.ts.map +1 -0
  42. package/dist/cli/abmind-hook-wakeup.js +143 -0
  43. package/dist/cli/abmind-hook-wakeup.js.map +1 -0
  44. package/dist/cli/abmind-ingest.d.ts +7 -0
  45. package/dist/cli/abmind-ingest.d.ts.map +1 -0
  46. package/dist/cli/abmind-ingest.js +96 -0
  47. package/dist/cli/abmind-ingest.js.map +1 -0
  48. package/dist/cli/abmind-install.d.ts +10 -0
  49. package/dist/cli/abmind-install.d.ts.map +1 -0
  50. package/dist/cli/abmind-install.js +240 -0
  51. package/dist/cli/abmind-install.js.map +1 -0
  52. package/dist/cli/abmind-mcp.d.ts +3 -0
  53. package/dist/cli/abmind-mcp.d.ts.map +1 -0
  54. package/dist/cli/abmind-mcp.js +26 -0
  55. package/dist/cli/abmind-mcp.js.map +1 -0
  56. package/dist/cli/abmind-memory-stats.d.ts +3 -0
  57. package/dist/cli/abmind-memory-stats.d.ts.map +1 -0
  58. package/dist/cli/abmind-memory-stats.js +45 -0
  59. package/dist/cli/abmind-memory-stats.js.map +1 -0
  60. package/dist/cli/abmind-migrate-openclaw.d.ts +12 -0
  61. package/dist/cli/abmind-migrate-openclaw.d.ts.map +1 -0
  62. package/dist/cli/abmind-migrate-openclaw.js +247 -0
  63. package/dist/cli/abmind-migrate-openclaw.js.map +1 -0
  64. package/dist/cli/abmind-recall.d.ts +8 -0
  65. package/dist/cli/abmind-recall.d.ts.map +1 -0
  66. package/dist/cli/abmind-recall.js +94 -0
  67. package/dist/cli/abmind-recall.js.map +1 -0
  68. package/dist/cli/abmind-reset.d.ts +11 -0
  69. package/dist/cli/abmind-reset.d.ts.map +1 -0
  70. package/dist/cli/abmind-reset.js +143 -0
  71. package/dist/cli/abmind-reset.js.map +1 -0
  72. package/dist/cli/abmind-restore.d.ts +5 -0
  73. package/dist/cli/abmind-restore.d.ts.map +1 -0
  74. package/dist/cli/abmind-restore.js +64 -0
  75. package/dist/cli/abmind-restore.js.map +1 -0
  76. package/dist/cli/abmind-retro-extract.d.ts +15 -0
  77. package/dist/cli/abmind-retro-extract.d.ts.map +1 -0
  78. package/dist/cli/abmind-retro-extract.js +113 -0
  79. package/dist/cli/abmind-retro-extract.js.map +1 -0
  80. package/dist/cli/abmind-rollback.d.ts +8 -0
  81. package/dist/cli/abmind-rollback.d.ts.map +1 -0
  82. package/dist/cli/abmind-rollback.js +76 -0
  83. package/dist/cli/abmind-rollback.js.map +1 -0
  84. package/dist/cli/abmind-secrets.d.ts +12 -0
  85. package/dist/cli/abmind-secrets.d.ts.map +1 -0
  86. package/dist/cli/abmind-secrets.js +83 -0
  87. package/dist/cli/abmind-secrets.js.map +1 -0
  88. package/dist/cli/abmind-sleep-apply.d.ts +3 -0
  89. package/dist/cli/abmind-sleep-apply.d.ts.map +1 -0
  90. package/dist/cli/abmind-sleep-apply.js +50 -0
  91. package/dist/cli/abmind-sleep-apply.js.map +1 -0
  92. package/dist/cli/abmind-sleep-report.d.ts +3 -0
  93. package/dist/cli/abmind-sleep-report.d.ts.map +1 -0
  94. package/dist/cli/abmind-sleep-report.js +40 -0
  95. package/dist/cli/abmind-sleep-report.js.map +1 -0
  96. package/dist/cli/abmind-sleep-state.d.ts +3 -0
  97. package/dist/cli/abmind-sleep-state.d.ts.map +1 -0
  98. package/dist/cli/abmind-sleep-state.js +33 -0
  99. package/dist/cli/abmind-sleep-state.js.map +1 -0
  100. package/dist/cli/abmind-sleep.d.ts +14 -0
  101. package/dist/cli/abmind-sleep.d.ts.map +1 -0
  102. package/dist/cli/abmind-sleep.js +186 -0
  103. package/dist/cli/abmind-sleep.js.map +1 -0
  104. package/dist/cli/abmind-status-runtime.d.ts +9 -0
  105. package/dist/cli/abmind-status-runtime.d.ts.map +1 -0
  106. package/dist/cli/abmind-status-runtime.js +132 -0
  107. package/dist/cli/abmind-status-runtime.js.map +1 -0
  108. package/dist/cli/abmind-status.d.ts +3 -0
  109. package/dist/cli/abmind-status.d.ts.map +1 -0
  110. package/dist/cli/abmind-status.js +45 -0
  111. package/dist/cli/abmind-status.js.map +1 -0
  112. package/dist/cli/abmind-store.d.ts +54 -0
  113. package/dist/cli/abmind-store.d.ts.map +1 -0
  114. package/dist/cli/abmind-store.js +251 -0
  115. package/dist/cli/abmind-store.js.map +1 -0
  116. package/dist/cli/abmind-update.d.ts +11 -0
  117. package/dist/cli/abmind-update.d.ts.map +1 -0
  118. package/dist/cli/abmind-update.js +160 -0
  119. package/dist/cli/abmind-update.js.map +1 -0
  120. package/dist/cli/abmind-wakeup.d.ts +3 -0
  121. package/dist/cli/abmind-wakeup.d.ts.map +1 -0
  122. package/dist/cli/abmind-wakeup.js +36 -0
  123. package/dist/cli/abmind-wakeup.js.map +1 -0
  124. package/dist/cli/abmind.d.ts +10 -0
  125. package/dist/cli/abmind.d.ts.map +1 -0
  126. package/dist/cli/abmind.js +100 -0
  127. package/dist/cli/abmind.js.map +1 -0
  128. package/dist/src/abm-v2-vocab.d.ts +10 -0
  129. package/dist/src/abm-v2-vocab.d.ts.map +1 -0
  130. package/dist/src/abm-v2-vocab.js +66 -0
  131. package/dist/src/abm-v2-vocab.js.map +1 -0
  132. package/dist/src/adapters/openclaw.d.ts +66 -0
  133. package/dist/src/adapters/openclaw.d.ts.map +1 -0
  134. package/dist/src/adapters/openclaw.js +97 -0
  135. package/dist/src/adapters/openclaw.js.map +1 -0
  136. package/dist/src/backend-factory.d.ts +9 -0
  137. package/dist/src/backend-factory.d.ts.map +1 -0
  138. package/dist/src/backend-factory.js +23 -0
  139. package/dist/src/backend-factory.js.map +1 -0
  140. package/dist/src/backup.d.ts +19 -0
  141. package/dist/src/backup.d.ts.map +1 -0
  142. package/dist/src/backup.js +191 -0
  143. package/dist/src/backup.js.map +1 -0
  144. package/dist/src/brain-patterns.d.ts +20 -0
  145. package/dist/src/brain-patterns.d.ts.map +1 -0
  146. package/dist/src/brain-patterns.js +72 -0
  147. package/dist/src/brain-patterns.js.map +1 -0
  148. package/dist/src/cli-entry.d.ts +10 -0
  149. package/dist/src/cli-entry.d.ts.map +1 -0
  150. package/dist/src/cli-entry.js +29 -0
  151. package/dist/src/cli-entry.js.map +1 -0
  152. package/dist/src/cli-flags.d.ts +29 -0
  153. package/dist/src/cli-flags.d.ts.map +1 -0
  154. package/dist/src/cli-flags.js +72 -0
  155. package/dist/src/cli-flags.js.map +1 -0
  156. package/dist/src/cli-runner-raw.d.ts +21 -0
  157. package/dist/src/cli-runner-raw.d.ts.map +1 -0
  158. package/dist/src/cli-runner-raw.js +41 -0
  159. package/dist/src/cli-runner-raw.js.map +1 -0
  160. package/dist/src/cli-runner.d.ts +26 -0
  161. package/dist/src/cli-runner.d.ts.map +1 -0
  162. package/dist/src/cli-runner.js +51 -0
  163. package/dist/src/cli-runner.js.map +1 -0
  164. package/dist/src/consolidation-search.d.ts +17 -0
  165. package/dist/src/consolidation-search.d.ts.map +1 -0
  166. package/dist/src/consolidation-search.js +83 -0
  167. package/dist/src/consolidation-search.js.map +1 -0
  168. package/dist/src/context-engine.d.ts +89 -0
  169. package/dist/src/context-engine.d.ts.map +1 -0
  170. package/dist/src/context-engine.js +216 -0
  171. package/dist/src/context-engine.js.map +1 -0
  172. package/dist/src/context-tier-renderer.d.ts +79 -0
  173. package/dist/src/context-tier-renderer.d.ts.map +1 -0
  174. package/dist/src/context-tier-renderer.js +223 -0
  175. package/dist/src/context-tier-renderer.js.map +1 -0
  176. package/dist/src/contradiction-checker.d.ts +16 -0
  177. package/dist/src/contradiction-checker.d.ts.map +1 -0
  178. package/dist/src/contradiction-checker.js +40 -0
  179. package/dist/src/contradiction-checker.js.map +1 -0
  180. package/dist/src/crypto.d.ts +15 -0
  181. package/dist/src/crypto.d.ts.map +1 -0
  182. package/dist/src/crypto.js +86 -0
  183. package/dist/src/crypto.js.map +1 -0
  184. package/dist/src/deploy-lib/cleanup.d.ts +38 -0
  185. package/dist/src/deploy-lib/cleanup.d.ts.map +1 -0
  186. package/dist/src/deploy-lib/cleanup.js +71 -0
  187. package/dist/src/deploy-lib/cleanup.js.map +1 -0
  188. package/dist/src/deploy-lib/index.d.ts +20 -0
  189. package/dist/src/deploy-lib/index.d.ts.map +1 -0
  190. package/dist/src/deploy-lib/index.js +20 -0
  191. package/dist/src/deploy-lib/index.js.map +1 -0
  192. package/dist/src/deploy-lib/lock.d.ts +37 -0
  193. package/dist/src/deploy-lib/lock.d.ts.map +1 -0
  194. package/dist/src/deploy-lib/lock.js +107 -0
  195. package/dist/src/deploy-lib/lock.js.map +1 -0
  196. package/dist/src/deploy-lib/manifest.d.ts +42 -0
  197. package/dist/src/deploy-lib/manifest.d.ts.map +1 -0
  198. package/dist/src/deploy-lib/manifest.js +38 -0
  199. package/dist/src/deploy-lib/manifest.js.map +1 -0
  200. package/dist/src/deploy-lib/paths.d.ts +29 -0
  201. package/dist/src/deploy-lib/paths.d.ts.map +1 -0
  202. package/dist/src/deploy-lib/paths.js +40 -0
  203. package/dist/src/deploy-lib/paths.js.map +1 -0
  204. package/dist/src/deploy-lib/releases.d.ts +52 -0
  205. package/dist/src/deploy-lib/releases.d.ts.map +1 -0
  206. package/dist/src/deploy-lib/releases.js +119 -0
  207. package/dist/src/deploy-lib/releases.js.map +1 -0
  208. package/dist/src/deploy-lib/safe-copy.d.ts +16 -0
  209. package/dist/src/deploy-lib/safe-copy.d.ts.map +1 -0
  210. package/dist/src/deploy-lib/safe-copy.js +32 -0
  211. package/dist/src/deploy-lib/safe-copy.js.map +1 -0
  212. package/dist/src/embedding-health.d.ts +12 -0
  213. package/dist/src/embedding-health.d.ts.map +1 -0
  214. package/dist/src/embedding-health.js +18 -0
  215. package/dist/src/embedding-health.js.map +1 -0
  216. package/dist/src/embedding-provider.d.ts +48 -0
  217. package/dist/src/embedding-provider.d.ts.map +1 -0
  218. package/dist/src/embedding-provider.js +145 -0
  219. package/dist/src/embedding-provider.js.map +1 -0
  220. package/dist/src/embedding-quantize.d.ts +11 -0
  221. package/dist/src/embedding-quantize.d.ts.map +1 -0
  222. package/dist/src/embedding-quantize.js +38 -0
  223. package/dist/src/embedding-quantize.js.map +1 -0
  224. package/dist/src/emotion-arc.d.ts +17 -0
  225. package/dist/src/emotion-arc.d.ts.map +1 -0
  226. package/dist/src/emotion-arc.js +62 -0
  227. package/dist/src/emotion-arc.js.map +1 -0
  228. package/dist/src/emotion-tagger.d.ts +8 -0
  229. package/dist/src/emotion-tagger.d.ts.map +1 -0
  230. package/dist/src/emotion-tagger.js +45 -0
  231. package/dist/src/emotion-tagger.js.map +1 -0
  232. package/dist/src/emotion-utils.d.ts +13 -0
  233. package/dist/src/emotion-utils.d.ts.map +1 -0
  234. package/dist/src/emotion-utils.js +76 -0
  235. package/dist/src/emotion-utils.js.map +1 -0
  236. package/dist/src/entity-graph.d.ts +33 -0
  237. package/dist/src/entity-graph.d.ts.map +1 -0
  238. package/dist/src/entity-graph.js +42 -0
  239. package/dist/src/entity-graph.js.map +1 -0
  240. package/dist/src/env-schema.d.ts +46 -0
  241. package/dist/src/env-schema.d.ts.map +1 -0
  242. package/dist/src/env-schema.js +93 -0
  243. package/dist/src/env-schema.js.map +1 -0
  244. package/dist/src/hook-helpers.d.ts +16 -0
  245. package/dist/src/hook-helpers.d.ts.map +1 -0
  246. package/dist/src/hook-helpers.js +64 -0
  247. package/dist/src/hook-helpers.js.map +1 -0
  248. package/dist/src/imemory-system.d.ts +138 -0
  249. package/dist/src/imemory-system.d.ts.map +1 -0
  250. package/dist/src/imemory-system.js +40 -0
  251. package/dist/src/imemory-system.js.map +1 -0
  252. package/dist/src/importance-flagger.d.ts +8 -0
  253. package/dist/src/importance-flagger.d.ts.map +1 -0
  254. package/dist/src/importance-flagger.js +24 -0
  255. package/dist/src/importance-flagger.js.map +1 -0
  256. package/dist/src/index.d.ts +79 -0
  257. package/dist/src/index.d.ts.map +1 -0
  258. package/dist/src/index.js +79 -0
  259. package/dist/src/index.js.map +1 -0
  260. package/dist/src/ingest-pipeline.d.ts +32 -0
  261. package/dist/src/ingest-pipeline.d.ts.map +1 -0
  262. package/dist/src/ingest-pipeline.js +58 -0
  263. package/dist/src/ingest-pipeline.js.map +1 -0
  264. package/dist/src/injection-scanner.d.ts +16 -0
  265. package/dist/src/injection-scanner.d.ts.map +1 -0
  266. package/dist/src/injection-scanner.js +182 -0
  267. package/dist/src/injection-scanner.js.map +1 -0
  268. package/dist/src/local-time.d.ts +12 -0
  269. package/dist/src/local-time.d.ts.map +1 -0
  270. package/dist/src/local-time.js +23 -0
  271. package/dist/src/local-time.js.map +1 -0
  272. package/dist/src/maintenance-service.d.ts +46 -0
  273. package/dist/src/maintenance-service.d.ts.map +1 -0
  274. package/dist/src/maintenance-service.js +280 -0
  275. package/dist/src/maintenance-service.js.map +1 -0
  276. package/dist/src/mcp-server.d.ts +6 -0
  277. package/dist/src/mcp-server.d.ts.map +1 -0
  278. package/dist/src/mcp-server.js +50 -0
  279. package/dist/src/mcp-server.js.map +1 -0
  280. package/dist/src/media-sanitizer.d.ts +11 -0
  281. package/dist/src/media-sanitizer.d.ts.map +1 -0
  282. package/dist/src/media-sanitizer.js +56 -0
  283. package/dist/src/media-sanitizer.js.map +1 -0
  284. package/dist/src/mem-config-env.d.ts +18 -0
  285. package/dist/src/mem-config-env.d.ts.map +1 -0
  286. package/dist/src/mem-config-env.js +43 -0
  287. package/dist/src/mem-config-env.js.map +1 -0
  288. package/dist/src/mem-env.d.ts +5 -0
  289. package/dist/src/mem-env.d.ts.map +1 -0
  290. package/dist/src/mem-env.js +19 -0
  291. package/dist/src/mem-env.js.map +1 -0
  292. package/dist/src/mem-logger.d.ts +20 -0
  293. package/dist/src/mem-logger.d.ts.map +1 -0
  294. package/dist/src/mem-logger.js +24 -0
  295. package/dist/src/mem-logger.js.map +1 -0
  296. package/dist/src/mem-paths.d.ts +20 -0
  297. package/dist/src/mem-paths.d.ts.map +1 -0
  298. package/dist/src/mem-paths.js +43 -0
  299. package/dist/src/mem-paths.js.map +1 -0
  300. package/dist/src/mem-types.d.ts +157 -0
  301. package/dist/src/mem-types.d.ts.map +1 -0
  302. package/dist/src/mem-types.js +2 -0
  303. package/dist/src/mem-types.js.map +1 -0
  304. package/dist/src/memory-backend.d.ts +65 -0
  305. package/dist/src/memory-backend.d.ts.map +1 -0
  306. package/dist/src/memory-backend.js +43 -0
  307. package/dist/src/memory-backend.js.map +1 -0
  308. package/dist/src/memory-compressor.d.ts +17 -0
  309. package/dist/src/memory-compressor.d.ts.map +1 -0
  310. package/dist/src/memory-compressor.js +147 -0
  311. package/dist/src/memory-compressor.js.map +1 -0
  312. package/dist/src/memory-config.d.ts +30 -0
  313. package/dist/src/memory-config.d.ts.map +1 -0
  314. package/dist/src/memory-config.js +62 -0
  315. package/dist/src/memory-config.js.map +1 -0
  316. package/dist/src/memory-db.d.ts +7 -0
  317. package/dist/src/memory-db.d.ts.map +1 -0
  318. package/dist/src/memory-db.js +173 -0
  319. package/dist/src/memory-db.js.map +1 -0
  320. package/dist/src/memory-editor.d.ts +32 -0
  321. package/dist/src/memory-editor.d.ts.map +1 -0
  322. package/dist/src/memory-editor.js +339 -0
  323. package/dist/src/memory-editor.js.map +1 -0
  324. package/dist/src/memory-index.d.ts +91 -0
  325. package/dist/src/memory-index.d.ts.map +1 -0
  326. package/dist/src/memory-index.js +310 -0
  327. package/dist/src/memory-index.js.map +1 -0
  328. package/dist/src/memory-ipc-client.d.ts +22 -0
  329. package/dist/src/memory-ipc-client.d.ts.map +1 -0
  330. package/dist/src/memory-ipc-client.js +75 -0
  331. package/dist/src/memory-ipc-client.js.map +1 -0
  332. package/dist/src/memory-ipc-server.d.ts +17 -0
  333. package/dist/src/memory-ipc-server.d.ts.map +1 -0
  334. package/dist/src/memory-ipc-server.js +86 -0
  335. package/dist/src/memory-ipc-server.js.map +1 -0
  336. package/dist/src/memory-manager.d.ts +155 -0
  337. package/dist/src/memory-manager.d.ts.map +1 -0
  338. package/dist/src/memory-manager.js +463 -0
  339. package/dist/src/memory-manager.js.map +1 -0
  340. package/dist/src/memory-renderer.d.ts +15 -0
  341. package/dist/src/memory-renderer.d.ts.map +1 -0
  342. package/dist/src/memory-renderer.js +126 -0
  343. package/dist/src/memory-renderer.js.map +1 -0
  344. package/dist/src/message-store.d.ts +42 -0
  345. package/dist/src/message-store.d.ts.map +1 -0
  346. package/dist/src/message-store.js +145 -0
  347. package/dist/src/message-store.js.map +1 -0
  348. package/dist/src/mmr.d.ts +17 -0
  349. package/dist/src/mmr.d.ts.map +1 -0
  350. package/dist/src/mmr.js +48 -0
  351. package/dist/src/mmr.js.map +1 -0
  352. package/dist/src/ollama-embed.d.ts +46 -0
  353. package/dist/src/ollama-embed.d.ts.map +1 -0
  354. package/dist/src/ollama-embed.js +139 -0
  355. package/dist/src/ollama-embed.js.map +1 -0
  356. package/dist/src/openclaw-plugin/engine.d.ts +87 -0
  357. package/dist/src/openclaw-plugin/engine.d.ts.map +1 -0
  358. package/dist/src/openclaw-plugin/engine.js +121 -0
  359. package/dist/src/openclaw-plugin/engine.js.map +1 -0
  360. package/dist/src/openclaw-plugin/hooks.d.ts +41 -0
  361. package/dist/src/openclaw-plugin/hooks.d.ts.map +1 -0
  362. package/dist/src/openclaw-plugin/hooks.js +155 -0
  363. package/dist/src/openclaw-plugin/hooks.js.map +1 -0
  364. package/dist/src/openclaw-plugin/index.d.ts +20 -0
  365. package/dist/src/openclaw-plugin/index.d.ts.map +1 -0
  366. package/dist/src/openclaw-plugin/index.js +145 -0
  367. package/dist/src/openclaw-plugin/index.js.map +1 -0
  368. package/dist/src/openclaw-plugin/message-adapter.d.ts +13 -0
  369. package/dist/src/openclaw-plugin/message-adapter.d.ts.map +1 -0
  370. package/dist/src/openclaw-plugin/message-adapter.js +49 -0
  371. package/dist/src/openclaw-plugin/message-adapter.js.map +1 -0
  372. package/dist/src/openclaw-plugin/prompt-builder.d.ts +17 -0
  373. package/dist/src/openclaw-plugin/prompt-builder.d.ts.map +1 -0
  374. package/dist/src/openclaw-plugin/prompt-builder.js +22 -0
  375. package/dist/src/openclaw-plugin/prompt-builder.js.map +1 -0
  376. package/dist/src/openclaw-plugin/public-artifacts.d.ts +20 -0
  377. package/dist/src/openclaw-plugin/public-artifacts.d.ts.map +1 -0
  378. package/dist/src/openclaw-plugin/public-artifacts.js +59 -0
  379. package/dist/src/openclaw-plugin/public-artifacts.js.map +1 -0
  380. package/dist/src/openclaw-plugin/runtime-adapter.d.ts +26 -0
  381. package/dist/src/openclaw-plugin/runtime-adapter.d.ts.map +1 -0
  382. package/dist/src/openclaw-plugin/runtime-adapter.js +161 -0
  383. package/dist/src/openclaw-plugin/runtime-adapter.js.map +1 -0
  384. package/dist/src/openclaw-plugin/session-mapper.d.ts +11 -0
  385. package/dist/src/openclaw-plugin/session-mapper.d.ts.map +1 -0
  386. package/dist/src/openclaw-plugin/session-mapper.js +17 -0
  387. package/dist/src/openclaw-plugin/session-mapper.js.map +1 -0
  388. package/dist/src/openclaw-plugin/tools.d.ts +31 -0
  389. package/dist/src/openclaw-plugin/tools.d.ts.map +1 -0
  390. package/dist/src/openclaw-plugin/tools.js +127 -0
  391. package/dist/src/openclaw-plugin/tools.js.map +1 -0
  392. package/dist/src/openclaw-plugin/types.d.ts +34 -0
  393. package/dist/src/openclaw-plugin/types.d.ts.map +1 -0
  394. package/dist/src/openclaw-plugin/types.js +2 -0
  395. package/dist/src/openclaw-plugin/types.js.map +1 -0
  396. package/dist/src/query-tokenizer.d.ts +33 -0
  397. package/dist/src/query-tokenizer.d.ts.map +1 -0
  398. package/dist/src/query-tokenizer.js +84 -0
  399. package/dist/src/query-tokenizer.js.map +1 -0
  400. package/dist/src/recall-benchmark.d.ts +13 -0
  401. package/dist/src/recall-benchmark.d.ts.map +1 -0
  402. package/dist/src/recall-benchmark.js +256 -0
  403. package/dist/src/recall-benchmark.js.map +1 -0
  404. package/dist/src/recall-engine.d.ts +81 -0
  405. package/dist/src/recall-engine.d.ts.map +1 -0
  406. package/dist/src/recall-engine.js +387 -0
  407. package/dist/src/recall-engine.js.map +1 -0
  408. package/dist/src/redact-secrets.d.ts +20 -0
  409. package/dist/src/redact-secrets.d.ts.map +1 -0
  410. package/dist/src/redact-secrets.js +42 -0
  411. package/dist/src/redact-secrets.js.map +1 -0
  412. package/dist/src/runtime-store.d.ts +47 -0
  413. package/dist/src/runtime-store.d.ts.map +1 -0
  414. package/dist/src/runtime-store.js +78 -0
  415. package/dist/src/runtime-store.js.map +1 -0
  416. package/dist/src/session-context.d.ts +10 -0
  417. package/dist/src/session-context.d.ts.map +1 -0
  418. package/dist/src/session-context.js +83 -0
  419. package/dist/src/session-context.js.map +1 -0
  420. package/dist/src/session-memory.d.ts +8 -0
  421. package/dist/src/session-memory.d.ts.map +1 -0
  422. package/dist/src/session-memory.js +45 -0
  423. package/dist/src/session-memory.js.map +1 -0
  424. package/dist/src/signature-generator.d.ts +15 -0
  425. package/dist/src/signature-generator.d.ts.map +1 -0
  426. package/dist/src/signature-generator.js +78 -0
  427. package/dist/src/signature-generator.js.map +1 -0
  428. package/dist/src/sleep/basic.d.ts +48 -0
  429. package/dist/src/sleep/basic.d.ts.map +1 -0
  430. package/dist/src/sleep/basic.js +147 -0
  431. package/dist/src/sleep/basic.js.map +1 -0
  432. package/dist/src/sleep/levels.d.ts +20 -0
  433. package/dist/src/sleep/levels.d.ts.map +1 -0
  434. package/dist/src/sleep/levels.js +11 -0
  435. package/dist/src/sleep/levels.js.map +1 -0
  436. package/dist/src/sleep/native.d.ts +41 -0
  437. package/dist/src/sleep/native.d.ts.map +1 -0
  438. package/dist/src/sleep/native.js +112 -0
  439. package/dist/src/sleep/native.js.map +1 -0
  440. package/dist/src/sleep/orchestrator.d.ts +64 -0
  441. package/dist/src/sleep/orchestrator.d.ts.map +1 -0
  442. package/dist/src/sleep/orchestrator.js +960 -0
  443. package/dist/src/sleep/orchestrator.js.map +1 -0
  444. package/dist/src/sleep/runtime.d.ts +15 -0
  445. package/dist/src/sleep/runtime.d.ts.map +1 -0
  446. package/dist/src/sleep/runtime.js +2 -0
  447. package/dist/src/sleep/runtime.js.map +1 -0
  448. package/dist/src/sleep/sleep-daily-summary.d.ts +64 -0
  449. package/dist/src/sleep/sleep-daily-summary.d.ts.map +1 -0
  450. package/dist/src/sleep/sleep-daily-summary.js +273 -0
  451. package/dist/src/sleep/sleep-daily-summary.js.map +1 -0
  452. package/dist/src/sleep/sleep-extract-daily.d.ts +12 -0
  453. package/dist/src/sleep/sleep-extract-daily.d.ts.map +1 -0
  454. package/dist/src/sleep/sleep-extract-daily.js +55 -0
  455. package/dist/src/sleep/sleep-extract-daily.js.map +1 -0
  456. package/dist/src/sleep/sleep-prompt-loader.d.ts +27 -0
  457. package/dist/src/sleep/sleep-prompt-loader.d.ts.map +1 -0
  458. package/dist/src/sleep/sleep-prompt-loader.js +116 -0
  459. package/dist/src/sleep/sleep-prompt-loader.js.map +1 -0
  460. package/dist/src/sleep/test-harness.d.ts +67 -0
  461. package/dist/src/sleep/test-harness.d.ts.map +1 -0
  462. package/dist/src/sleep/test-harness.js +121 -0
  463. package/dist/src/sleep/test-harness.js.map +1 -0
  464. package/dist/src/sleep/trigger.d.ts +3 -0
  465. package/dist/src/sleep/trigger.d.ts.map +1 -0
  466. package/dist/src/sleep/trigger.js +66 -0
  467. package/dist/src/sleep/trigger.js.map +1 -0
  468. package/dist/src/sleep-data-access.d.ts +54 -0
  469. package/dist/src/sleep-data-access.d.ts.map +1 -0
  470. package/dist/src/sleep-data-access.js +176 -0
  471. package/dist/src/sleep-data-access.js.map +1 -0
  472. package/dist/src/sleep-pipeline.d.ts +9 -0
  473. package/dist/src/sleep-pipeline.d.ts.map +1 -0
  474. package/dist/src/sleep-pipeline.js +8 -0
  475. package/dist/src/sleep-pipeline.js.map +1 -0
  476. package/dist/src/sleep-state-gatherer.d.ts +74 -0
  477. package/dist/src/sleep-state-gatherer.d.ts.map +1 -0
  478. package/dist/src/sleep-state-gatherer.js +275 -0
  479. package/dist/src/sleep-state-gatherer.js.map +1 -0
  480. package/dist/src/sqlite-backend.d.ts +23 -0
  481. package/dist/src/sqlite-backend.d.ts.map +1 -0
  482. package/dist/src/sqlite-backend.js +48 -0
  483. package/dist/src/sqlite-backend.js.map +1 -0
  484. package/dist/src/test-helpers.d.ts +3 -0
  485. package/dist/src/test-helpers.d.ts.map +1 -0
  486. package/dist/src/test-helpers.js +5 -0
  487. package/dist/src/test-helpers.js.map +1 -0
  488. package/dist/src/tier-llm-refinement.d.ts +35 -0
  489. package/dist/src/tier-llm-refinement.d.ts.map +1 -0
  490. package/dist/src/tier-llm-refinement.js +131 -0
  491. package/dist/src/tier-llm-refinement.js.map +1 -0
  492. package/dist/src/timeline-builder.d.ts +45 -0
  493. package/dist/src/timeline-builder.d.ts.map +1 -0
  494. package/dist/src/timeline-builder.js +147 -0
  495. package/dist/src/timeline-builder.js.map +1 -0
  496. package/dist/src/trigram-search.d.ts +28 -0
  497. package/dist/src/trigram-search.d.ts.map +1 -0
  498. package/dist/src/trigram-search.js +192 -0
  499. package/dist/src/trigram-search.js.map +1 -0
  500. package/dist/src/turn-classifier.d.ts +29 -0
  501. package/dist/src/turn-classifier.d.ts.map +1 -0
  502. package/dist/src/turn-classifier.js +186 -0
  503. package/dist/src/turn-classifier.js.map +1 -0
  504. package/dist/src/user-utils.d.ts +6 -0
  505. package/dist/src/user-utils.d.ts.map +1 -0
  506. package/dist/src/user-utils.js +27 -0
  507. package/dist/src/user-utils.js.map +1 -0
  508. package/dist/src/wake-up-builder.d.ts +12 -0
  509. package/dist/src/wake-up-builder.d.ts.map +1 -0
  510. package/dist/src/wake-up-builder.js +45 -0
  511. package/dist/src/wake-up-builder.js.map +1 -0
  512. package/dist/src/wake-up-renderer.d.ts +29 -0
  513. package/dist/src/wake-up-renderer.d.ts.map +1 -0
  514. package/dist/src/wake-up-renderer.js +182 -0
  515. package/dist/src/wake-up-renderer.js.map +1 -0
  516. package/package.json +87 -5
  517. package/prompts/sleep/01-gc-noise.md +28 -0
  518. package/prompts/sleep/02-daily-summary.md +3 -0
  519. package/prompts/sleep/03-extract-from-daily.md +3 -0
  520. package/prompts/sleep/04-retrospective.md +30 -0
  521. package/prompts/sleep/06-feedback.md +17 -0
  522. package/prompts/sleep/07-topic-assignment.md +23 -0
  523. package/prompts/sleep/08-core-promotion.md +26 -0
  524. package/prompts/sleep/09-merge.md +19 -0
  525. package/prompts/sleep/10-translation.md +17 -0
  526. package/prompts/sleep/11-skill-review.md +12 -0
  527. package/prompts/sleep/12-core-knowledge.md +14 -0
  528. package/prompts/sleep/13-consolidation.md +11 -0
  529. package/prompts/sleep/14-emotion-context.md +17 -0
  530. package/prompts/sleep/15-contradiction-and-graph.md +48 -0
  531. package/prompts/sleep/16-rem-synthesis.md +31 -0
  532. package/prompts/sleep/basic.md +12 -0
@@ -0,0 +1,43 @@
1
+ /**
2
+ * MemoryBackend — transport-agnostic memory API for CLI tools + tool-registry.
3
+ *
4
+ * ┌────────────────────────────────────────────────────────────────────────────┐
5
+ * │ When to use │
6
+ * ├────────────────────────────────────────────────────────────────────────────┤
7
+ * │ Consumers that may run in-process OR talk to a separate abmind process │
8
+ * │ over an IPC socket. The interface hides the transport — the caller just │
9
+ * │ awaits a Promise and doesn't care whether storage is local SQLite or │
10
+ * │ remote-over-socket. │
11
+ * │ │
12
+ * │ Use when: │
13
+ * │ - CLI tools (abmind store/edit/merge/recall — they use createMemoryBackend) │
14
+ * │ - Direct-API tool-registry (agentbridge's memory_store / memory_recall / │
15
+ * │ memory_edit tools register a MemoryBackend once at boot) │
16
+ * │ - MCP server adapter │
17
+ * │ - Ecosystem plugins (openclaw, future hosts) that don't own the process │
18
+ * └────────────────────────────────────────────────────────────────────────────┘
19
+ *
20
+ * Implementations:
21
+ * SqliteBackend in-process (sqlite-backend.ts) — wraps MemoryManager
22
+ * IpcBackend over Unix socket (memory-ipc-client.ts) — talks to a
23
+ * long-running abmind process via memory-ipc-server.ts
24
+ *
25
+ * Factory: `createMemoryBackend(config)` in backend-factory.ts picks the
26
+ * right one (tries IPC socket first, falls back to SQLite).
27
+ *
28
+ * Relationship to IMemoryCore/IMemorySystem (see imemory-system.ts):
29
+ * IMemoryCore/IMemorySystem = in-process, direct object reference,
30
+ * includes read + context-building methods
31
+ * MemoryBackend = transport-agnostic, async-only, focused on
32
+ * the write + recall paths callers need from
33
+ * outside the host's process
34
+ *
35
+ * Rule of thumb:
36
+ * - Running inside the host process? → IMemoryCore (read) or IMemorySystem (full)
37
+ * - Shelled-out CLI / tool call / IPC boundary? → MemoryBackend
38
+ *
39
+ * All methods are async — even local SQLite calls return Promises — so swap
40
+ * of transport is source-compatible.
41
+ */
42
+ export {};
43
+ //# sourceMappingURL=memory-backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-backend.js","sourceRoot":"","sources":["../../src/memory-backend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG"}
@@ -0,0 +1,17 @@
1
+ export declare function setKnownEntities(entities: Map<string, string>): void;
2
+ export interface CompressInput {
3
+ content_en: string;
4
+ topic: string;
5
+ emotion_tags: string;
6
+ importance_flags: string;
7
+ memory_type?: string;
8
+ confidence?: number;
9
+ date?: string;
10
+ }
11
+ /**
12
+ * Compress a memory into ABM-L format.
13
+ * Primary flag from memory_type. Secondary flags from detection (additive).
14
+ * No truncation — wake-up builder handles length.
15
+ */
16
+ export declare function compress(input: CompressInput): string;
17
+ //# sourceMappingURL=memory-compressor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-compressor.d.ts","sourceRoot":"","sources":["../../src/memory-compressor.ts"],"names":[],"mappings":"AAuDA,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEpE;AAyED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAwCrD"}
@@ -0,0 +1,147 @@
1
+ import { localMonth } from "./local-time.js";
2
+ /** Memory type → primary flag character. */
3
+ const TYPE_FLAG = {
4
+ fact: "F", decision: "D", preference: "P", event: "E",
5
+ lesson: "L", feedback: "K", story: "S",
6
+ };
7
+ /** Detected importance flag → secondary flag character. */
8
+ const DETECTED_FLAG = {
9
+ decision: "D", origin: "O", core_belief: "B", pivot: "V",
10
+ technical: "T", correction: "C", preference: "P", milestone: "M",
11
+ };
12
+ /**
13
+ * Filler words to strip. Excludes:
14
+ * - Negations (don't, not, never, no, won't, can't, haven't, shouldn't, isn't, aren't, wasn't, weren't)
15
+ * - Pronouns (I, my, me, you, your, we, our, they, their)
16
+ */
17
+ const FILLER = /\b(basically|essentially|actually|really|very|just|quite|rather|simply|that|this|these|those|its|also|so|then|well|some|about|there)\b/gi;
18
+ const MULTI_SPACE = /\s{2,}/g;
19
+ /** Platform/term abbreviations. */
20
+ const ABBREVIATIONS = [
21
+ [/\bTelegram\b/g, "TG"],
22
+ [/\bDiscord\b/g, "DC"],
23
+ [/\bOpenRouter\b/g, "OR"],
24
+ [/\bauthentication\b/gi, "auth"],
25
+ [/\bconfiguration\b/gi, "config"],
26
+ [/\bdevelopment\b/gi, "dev"],
27
+ [/\bdeveloper experience\b/gi, "DX"],
28
+ [/\bGoogle Drive\b/g, "GDrive"],
29
+ ];
30
+ /** Topic inference from content keywords. */
31
+ const TOPIC_HINTS = [
32
+ [/\b(code|deploy|api|database|server|framework|stack|pipeline|git|npm|typescript|sqlite|fts5|bug|error|crash|architecture|refactor)\b/i, "coding"],
33
+ [/\b(prefer|language|timezone|CET|bilingual|dark.?mode|vim|style|personality|sarcastic|humor)\b/i, "personal"],
34
+ [/\b(cron|schedule|task|backup|report|daily|weekly|heartbeat|deploy\.sh)\b/i, "work"],
35
+ [/\b(price|pricing|cost|budget|subscription|billing|invoice|money)\b/i, "finance"],
36
+ [/\b(health|sleep|exercise|stress|burnout|tired)\b/i, "health"],
37
+ [/\b(project|ship|launch|release|milestone|roadmap)\b/i, "projects"],
38
+ ];
39
+ /** Known entity whitelist — only these get @referenced. */
40
+ /** Set known entities from core-tier memories. Called before compression. */
41
+ let knownEntities = new Map();
42
+ export function setKnownEntities(entities) {
43
+ knownEntities = entities;
44
+ }
45
+ function applyEntities(text) {
46
+ let result = text;
47
+ // Apply known entities (longest first)
48
+ const sorted = [...knownEntities.entries()].sort((a, b) => b[0].length - a[0].length);
49
+ for (const [name, ref] of sorted) {
50
+ result = result.replace(new RegExp(`\\b${name}\\b`, "gi"), ref);
51
+ }
52
+ return result;
53
+ }
54
+ function applyAbbreviations(text) {
55
+ let result = text;
56
+ for (const [pattern, replacement] of ABBREVIATIONS) {
57
+ result = result.replace(pattern, replacement);
58
+ }
59
+ return result;
60
+ }
61
+ function applyRelationships(text) {
62
+ return text
63
+ .replace(/\binstead of\b/gi, ">over")
64
+ .replace(/\breplaces?\b/gi, ">replaces")
65
+ .replace(/\bcauses?\b/gi, ">causes")
66
+ .replace(/\bblocks?\b/gi, ">blocks")
67
+ .replace(/\bleads? to\b/gi, "→")
68
+ .replace(/\bbecomes?\b/gi, "→")
69
+ .replace(/\bbecause\b/gi, "∵");
70
+ }
71
+ function stripFiller(text) {
72
+ return text.replace(FILLER, "").replace(MULTI_SPACE, " ").trim();
73
+ }
74
+ function preserveTechnical(text) {
75
+ const preserved = new Map();
76
+ let idx = 0;
77
+ const cleaned = text.replace(/(?:\/[\w./-]+|~\/[\w./-]+|https?:\/\/\S+|`[^`]+`|\b\d+\.\d+\.\d+\b|-\d{4,})/g, (match) => {
78
+ const key = `__TECH${idx++}__`;
79
+ preserved.set(key, match);
80
+ return key;
81
+ });
82
+ return { preserved, cleaned };
83
+ }
84
+ function restoreTechnical(text, preserved) {
85
+ let result = text;
86
+ for (const [key, value] of preserved) {
87
+ result = result.replace(key, value);
88
+ }
89
+ return result;
90
+ }
91
+ /** Infer topic from content when topic is 'general'. */
92
+ function inferTopic(content, currentTopic) {
93
+ if (currentTopic !== "general")
94
+ return currentTopic;
95
+ for (const [pattern, topic] of TOPIC_HINTS) {
96
+ if (pattern.test(content))
97
+ return topic;
98
+ }
99
+ return "general";
100
+ }
101
+ /** Convert numbered/bulleted lists to pipe-separated. */
102
+ function pipeifyLists(text) {
103
+ // "1) foo. 2) bar. 3) baz" → "foo | bar | baz"
104
+ return text
105
+ .replace(/\d+\)\s*/g, "")
106
+ .replace(/\s*\.\s*(?=\S)/g, " | ")
107
+ .replace(/\s*;\s*/g, " | ")
108
+ .replace(/\s*,\s*(?=\d{1,2}[:.])/g, " | "); // comma before times: "10:00, 10:15" → "10:00 | 10:15"
109
+ }
110
+ /**
111
+ * Compress a memory into ABM-L format.
112
+ * Primary flag from memory_type. Secondary flags from detection (additive).
113
+ * No truncation — wake-up builder handles length.
114
+ */
115
+ export function compress(input) {
116
+ const { content_en, emotion_tags, importance_flags, confidence, date } = input;
117
+ // Infer topic
118
+ const topic = inferTopic(content_en, input.topic);
119
+ // Build prefix: primary flag from memory_type, secondary from detection
120
+ const primaryFlag = TYPE_FLAG[input.memory_type ?? "fact"] ?? "F";
121
+ const secondaryFlags = importance_flags
122
+ .split(",").filter(Boolean)
123
+ .map(f => DETECTED_FLAG[f.trim()] ?? "")
124
+ .filter(f => f && f !== primaryFlag) // don't duplicate primary
125
+ .join("");
126
+ const flags = primaryFlag + secondaryFlags;
127
+ const emotionShort = emotion_tags.split(",")[0]?.trim().slice(0, 6) || "—";
128
+ const conf = confidence ?? 3;
129
+ const dateStr = date ?? localMonth();
130
+ const prefix = `[${flags}|${topic}|${emotionShort}|${conf}|${dateStr}]`;
131
+ // Compress content
132
+ const { preserved, cleaned } = preserveTechnical(content_en);
133
+ let body = cleaned;
134
+ body = applyEntities(body);
135
+ body = applyAbbreviations(body);
136
+ body = applyRelationships(body);
137
+ body = pipeifyLists(body);
138
+ body = stripFiller(body);
139
+ body = restoreTechnical(body, preserved);
140
+ // Collapse parenthetical reasons
141
+ body = body.replace(/\s*∵\s*(.{3,60}?)(?:\.|$)/g, " ($1)");
142
+ // Clean up
143
+ body = body.replace(MULTI_SPACE, " ").replace(/\s+([.,;:!?])/g, "$1").trim();
144
+ // No truncation — stored ABM-L captures everything
145
+ return `${prefix} ${body}`;
146
+ }
147
+ //# sourceMappingURL=memory-compressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-compressor.js","sourceRoot":"","sources":["../../src/memory-compressor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /** Configuration for the local memory layer. */
2
+ export type MemoryConfig = {
3
+ memoryEnabled: boolean;
4
+ memoryDir: string;
5
+ maxMessagesPerChat: number;
6
+ diskBudgetBytes: number;
7
+ stalenessThresholdMs: number;
8
+ restoreMessageCount: number;
9
+ /** Maximum token size per ingestion chunk. */
10
+ ingestChunkMaxTokens: number;
11
+ /** Embedding model name for hot-swap detection. */
12
+ embeddingModel: string;
13
+ /** Relevance threshold for topic-based forgetting. */
14
+ forgetThreshold: number;
15
+ /** Search enhancement configuration for temporal decay, MMR, and timeouts. */
16
+ searchEnhancements: {
17
+ searchTimeoutMs: number;
18
+ decayHalflifeDays: number;
19
+ mmrLambda: number;
20
+ compactThresholdPct: number;
21
+ };
22
+ };
23
+ /** Default values for all memory configuration fields. */
24
+ export declare const MEMORY_CONFIG_DEFAULTS: MemoryConfig;
25
+ /**
26
+ * Load memory configuration from `process.env` with sensible defaults.
27
+ * Invalid values produce a warning and fall back to defaults (never throws).
28
+ */
29
+ export declare function loadMemoryConfig(): MemoryConfig;
30
+ //# sourceMappingURL=memory-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-config.d.ts","sourceRoot":"","sources":["../../src/memory-config.ts"],"names":[],"mappings":"AAMA,gDAAgD;AAChD,MAAM,MAAM,YAAY,GAAG;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,sDAAsD;IACtD,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,kBAAkB,EAAE;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACH,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,sBAAsB,EAAE,YAgBpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAkD/C"}
@@ -0,0 +1,62 @@
1
+ import { getAbmindEnv } from "./env-schema.js";
2
+ import { join } from "node:path";
3
+ import { parseBoolEnv, parseNumberEnv } from "./mem-env.js";
4
+ import { abmindHome } from "./mem-paths.js";
5
+ import { loadMemoryEnv } from "./mem-config-env.js";
6
+ /** Default values for all memory configuration fields. */
7
+ export const MEMORY_CONFIG_DEFAULTS = {
8
+ memoryEnabled: true,
9
+ memoryDir: join(abmindHome(), "memory"),
10
+ maxMessagesPerChat: 1000,
11
+ diskBudgetBytes: 500 * 1024 * 1024,
12
+ stalenessThresholdMs: 24 * 3600_000,
13
+ restoreMessageCount: 50,
14
+ ingestChunkMaxTokens: 512,
15
+ embeddingModel: "nomic-embed-text",
16
+ forgetThreshold: 0.8,
17
+ searchEnhancements: {
18
+ searchTimeoutMs: 1000,
19
+ decayHalflifeDays: 30,
20
+ mmrLambda: 0.7,
21
+ compactThresholdPct: 85,
22
+ },
23
+ };
24
+ /**
25
+ * Load memory configuration from `process.env` with sensible defaults.
26
+ * Invalid values produce a warning and fall back to defaults (never throws).
27
+ */
28
+ export function loadMemoryConfig() {
29
+ // Source ~/.abmind/config/.env.memory into process.env before reading.
30
+ // Host env wins via ?? semantics. Eliminates the bug class where callers
31
+ // (CLI/MCP/plugin) would forget to invoke the loader. See #210.
32
+ loadMemoryEnv();
33
+ const memoryEnabled = parseBoolEnv("MEMORY_ENABLED", MEMORY_CONFIG_DEFAULTS.memoryEnabled);
34
+ const memoryDir = getAbmindEnv().memoryDir;
35
+ const maxMessagesPerChat = parseNumberEnv("MEMORY_MAX_MESSAGES_PER_CHAT", MEMORY_CONFIG_DEFAULTS.maxMessagesPerChat);
36
+ const diskBudgetMb = parseNumberEnv("MEMORY_DISK_BUDGET_MB", 500);
37
+ const diskBudgetBytes = diskBudgetMb * 1024 * 1024;
38
+ const stalenessHours = parseNumberEnv("MEMORY_STALENESS_HOURS", 24);
39
+ const stalenessThresholdMs = stalenessHours * 3_600_000;
40
+ const restoreMessageCount = parseNumberEnv("MEMORY_RESTORE_MESSAGES", MEMORY_CONFIG_DEFAULTS.restoreMessageCount);
41
+ const ingestChunkMaxTokens = parseNumberEnv("MEMORY_INGEST_CHUNK_MAX_TOKENS", MEMORY_CONFIG_DEFAULTS.ingestChunkMaxTokens);
42
+ const embeddingModel = getAbmindEnv().embeddingModel;
43
+ const forgetThreshold = parseNumberEnv("MEMORY_FORGET_THRESHOLD", MEMORY_CONFIG_DEFAULTS.forgetThreshold);
44
+ return {
45
+ memoryEnabled,
46
+ memoryDir,
47
+ maxMessagesPerChat,
48
+ diskBudgetBytes,
49
+ stalenessThresholdMs,
50
+ restoreMessageCount,
51
+ ingestChunkMaxTokens,
52
+ embeddingModel,
53
+ forgetThreshold,
54
+ searchEnhancements: {
55
+ searchTimeoutMs: parseNumberEnv("MEMORY_SEARCH_TIMEOUT_MS", MEMORY_CONFIG_DEFAULTS.searchEnhancements.searchTimeoutMs),
56
+ decayHalflifeDays: parseNumberEnv("MEMORY_DECAY_HALFLIFE_DAYS", MEMORY_CONFIG_DEFAULTS.searchEnhancements.decayHalflifeDays),
57
+ mmrLambda: parseNumberEnv("MEMORY_MMR_LAMBDA", MEMORY_CONFIG_DEFAULTS.searchEnhancements.mmrLambda),
58
+ compactThresholdPct: parseNumberEnv("MEMORY_COMPACT_THRESHOLD_PCT", MEMORY_CONFIG_DEFAULTS.searchEnhancements.compactThresholdPct),
59
+ },
60
+ };
61
+ }
62
+ //# sourceMappingURL=memory-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-config.js","sourceRoot":"","sources":["../../src/memory-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAyBpD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAiB;IAClD,aAAa,EAAE,IAAI;IACnB,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC;IACvC,kBAAkB,EAAE,IAAI;IACxB,eAAe,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAClC,oBAAoB,EAAE,EAAE,GAAG,QAAQ;IACnC,mBAAmB,EAAE,EAAE;IACvB,oBAAoB,EAAE,GAAG;IACzB,cAAc,EAAE,kBAAkB;IAClC,eAAe,EAAE,GAAG;IACpB,kBAAkB,EAAE;QAClB,eAAe,EAAE,IAAI;QACrB,iBAAiB,EAAE,EAAE;QACrB,SAAS,EAAE,GAAG;QACd,mBAAmB,EAAE,EAAE;KACxB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,uEAAuE;IACvE,yEAAyE;IACzE,gEAAgE;IAChE,aAAa,EAAE,CAAC;IAEhB,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;IAC3F,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC,SAAS,CAAC;IAE3C,MAAM,kBAAkB,GAAG,cAAc,CACvC,8BAA8B,EAC9B,sBAAsB,CAAC,kBAAkB,CAC1C,CAAC;IACF,MAAM,YAAY,GAAG,cAAc,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,eAAe,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAEnD,MAAM,cAAc,GAAG,cAAc,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,oBAAoB,GAAG,cAAc,GAAG,SAAS,CAAC;IAExD,MAAM,mBAAmB,GAAG,cAAc,CACxC,yBAAyB,EACzB,sBAAsB,CAAC,mBAAmB,CAC3C,CAAC;IAEF,MAAM,oBAAoB,GAAG,cAAc,CACzC,gCAAgC,EAChC,sBAAsB,CAAC,oBAAoB,CAC5C,CAAC;IAEF,MAAM,cAAc,GAAG,YAAY,EAAE,CAAC,cAAc,CAAC;IAErD,MAAM,eAAe,GAAG,cAAc,CAAC,yBAAyB,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IAE1G,OAAO;QACL,aAAa;QACb,SAAS;QACT,kBAAkB;QAClB,eAAe;QACf,oBAAoB;QACpB,mBAAmB;QACnB,oBAAoB;QACpB,cAAc;QACd,eAAe;QACf,kBAAkB,EAAE;YAClB,eAAe,EAAE,cAAc,CAAC,0BAA0B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,eAAe,CAAC;YACtH,iBAAiB,EAAE,cAAc,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,iBAAiB,CAAC;YAC5H,SAAS,EAAE,cAAc,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,SAAS,CAAC;YACnG,mBAAmB,EAAE,cAAc,CAAC,8BAA8B,EAAE,sBAAsB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;SACnI;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import Database from "better-sqlite3";
2
+ /**
3
+ * Opens (or creates) the SQLite database at the given path, registers
4
+ * custom functions, and ensures the schema exists.
5
+ */
6
+ export declare function initializeDatabase(dbPath: string): Database.Database;
7
+ //# sourceMappingURL=memory-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-db.d.ts","sourceRoot":"","sources":["../../src/memory-db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAkKtC;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAYpE"}
@@ -0,0 +1,173 @@
1
+ import Database from "better-sqlite3";
2
+ import { mkdirSync } from "node:fs";
3
+ import { dirname } from "node:path";
4
+ import { logInfo } from "./mem-logger.js";
5
+ const TAG = "memory-db";
6
+ // ── Custom scalar functions (registered before schema init, used at runtime) ──
7
+ function registerFunctions(db) {
8
+ db.function("strip_emojis", (text) => {
9
+ if (typeof text !== "string")
10
+ return text;
11
+ return text.replace(/[\p{Emoji_Presentation}\p{Extended_Pictographic}]/gu, "").replace(/ {2,}/g, " ").trim();
12
+ });
13
+ db.function("strip_diacritics", (text) => {
14
+ if (typeof text !== "string")
15
+ return text;
16
+ return text.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
17
+ });
18
+ }
19
+ // ── Schema ──────────────────────────────────────────────────────────────────
20
+ function ensureSchema(db) {
21
+ db.exec(`
22
+ CREATE TABLE IF NOT EXISTS messages (
23
+ id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT NOT NULL, session_id TEXT NOT NULL,
24
+ role TEXT NOT NULL, content TEXT NOT NULL, timestamp INTEGER NOT NULL,
25
+ platform_message_id INTEGER, emotion_score INTEGER DEFAULT 0,
26
+ type_hint TEXT, topic_hint TEXT, emotion_hint TEXT
27
+ );
28
+ CREATE INDEX IF NOT EXISTS idx_messages_chat_ts ON messages(user_id, timestamp);
29
+ CREATE INDEX IF NOT EXISTS idx_messages_platform_id ON messages(user_id, platform_message_id);
30
+
31
+ CREATE TABLE IF NOT EXISTS ingested_documents (
32
+ id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT NOT NULL, source_type TEXT NOT NULL,
33
+ identifier TEXT NOT NULL, chunk_count INTEGER NOT NULL, ingested_at INTEGER NOT NULL
34
+ );
35
+ CREATE INDEX IF NOT EXISTS idx_ingested_docs_chat ON ingested_documents(user_id);
36
+
37
+ CREATE TABLE IF NOT EXISTS extracted_memories (
38
+ id INTEGER PRIMARY KEY AUTOINCREMENT, user_id TEXT NOT NULL,
39
+ content_original TEXT NOT NULL, content_en TEXT NOT NULL,
40
+ memory_type TEXT NOT NULL DEFAULT 'fact', source_timestamp INTEGER NOT NULL,
41
+ preserve_original INTEGER NOT NULL DEFAULT 0, preserved_keyword TEXT, created_at INTEGER NOT NULL,
42
+ emotion_score INTEGER DEFAULT 0, recall_count INTEGER DEFAULT 0, last_recalled_at INTEGER,
43
+ relevance_score INTEGER DEFAULT 0, confidence INTEGER DEFAULT 3, source_message_ids TEXT,
44
+ classification INTEGER DEFAULT 1, trust INTEGER DEFAULT 0, integrity INTEGER DEFAULT 2,
45
+ credibility INTEGER DEFAULT 6, embedding BLOB, edited_at INTEGER, edited_by TEXT,
46
+ emotion_tags TEXT, importance_flags TEXT, emotion_arc TEXT, signature BLOB,
47
+ source_type TEXT DEFAULT 'conversation', topic TEXT DEFAULT 'general', tier TEXT DEFAULT 'general',
48
+ valid_from TEXT, valid_to TEXT, emotion_context TEXT,
49
+ encrypted INTEGER DEFAULT 0
50
+ );
51
+ CREATE INDEX IF NOT EXISTS idx_extracted_memories_chat_ts ON extracted_memories(user_id, source_timestamp DESC);
52
+ CREATE INDEX IF NOT EXISTS idx_extracted_memories_preserve ON extracted_memories(preserve_original) WHERE preserve_original = 1;
53
+ CREATE INDEX IF NOT EXISTS idx_extracted_memories_chat_created ON extracted_memories(user_id, created_at DESC);
54
+ CREATE INDEX IF NOT EXISTS idx_em_topic ON extracted_memories(topic);
55
+ CREATE INDEX IF NOT EXISTS idx_em_tier ON extracted_memories(tier);
56
+ CREATE INDEX IF NOT EXISTS idx_em_valid ON extracted_memories(valid_to);
57
+
58
+ CREATE VIRTUAL TABLE IF NOT EXISTS extracted_memories_fts USING fts5(
59
+ content_en, content=extracted_memories, content_rowid=id, tokenize='porter unicode61'
60
+ );
61
+ CREATE TRIGGER IF NOT EXISTS extracted_memories_ai AFTER INSERT ON extracted_memories BEGIN
62
+ INSERT INTO extracted_memories_fts(rowid, content_en) VALUES (new.id, new.content_en);
63
+ END;
64
+ CREATE TRIGGER IF NOT EXISTS extracted_memories_ad AFTER DELETE ON extracted_memories BEGIN
65
+ INSERT INTO extracted_memories_fts(extracted_memories_fts, rowid, content_en) VALUES('delete', old.id, old.content_en);
66
+ END;
67
+ CREATE TRIGGER IF NOT EXISTS extracted_memories_au AFTER UPDATE OF content_en ON extracted_memories BEGIN
68
+ INSERT INTO extracted_memories_fts(extracted_memories_fts, rowid, content_en) VALUES('delete', old.id, old.content_en);
69
+ INSERT INTO extracted_memories_fts(rowid, content_en) VALUES (new.id, new.content_en);
70
+ END;
71
+
72
+ CREATE TABLE IF NOT EXISTS extraction_watermarks (user_id TEXT PRIMARY KEY, last_processed_timestamp INTEGER NOT NULL);
73
+
74
+ CREATE VIRTUAL TABLE IF NOT EXISTS content_en_trigram USING fts5(content, tokenize='trigram');
75
+ CREATE TRIGGER IF NOT EXISTS content_en_trigram_ai AFTER INSERT ON extracted_memories BEGIN
76
+ INSERT INTO content_en_trigram(rowid, content) VALUES (new.id, strip_diacritics(COALESCE(new.content_en, '') || ' ' || COALESCE(new.preserved_keyword, '')));
77
+ END;
78
+ CREATE TRIGGER IF NOT EXISTS content_en_trigram_ad AFTER DELETE ON extracted_memories BEGIN
79
+ DELETE FROM content_en_trigram WHERE rowid = old.id;
80
+ END;
81
+ CREATE TRIGGER IF NOT EXISTS content_en_trigram_au AFTER UPDATE OF content_en, preserved_keyword ON extracted_memories BEGIN
82
+ DELETE FROM content_en_trigram WHERE rowid = old.id;
83
+ INSERT INTO content_en_trigram(rowid, content) VALUES (new.id, strip_diacritics(COALESCE(new.content_en, '') || ' ' || COALESCE(new.preserved_keyword, '')));
84
+ END;
85
+
86
+ CREATE VIRTUAL TABLE IF NOT EXISTS content_original_trigram USING fts5(content, tokenize='trigram');
87
+ CREATE TRIGGER IF NOT EXISTS content_original_trigram_ai AFTER INSERT ON extracted_memories BEGIN
88
+ INSERT INTO content_original_trigram(rowid, content) VALUES (new.id, strip_diacritics(COALESCE(new.content_original, '')));
89
+ END;
90
+ CREATE TRIGGER IF NOT EXISTS content_original_trigram_ad AFTER DELETE ON extracted_memories BEGIN
91
+ DELETE FROM content_original_trigram WHERE rowid = old.id;
92
+ END;
93
+ CREATE TRIGGER IF NOT EXISTS content_original_trigram_au AFTER UPDATE OF content_original ON extracted_memories BEGIN
94
+ DELETE FROM content_original_trigram WHERE rowid = old.id;
95
+ INSERT INTO content_original_trigram(rowid, content) VALUES (new.id, strip_diacritics(COALESCE(new.content_original, '')));
96
+ END;
97
+
98
+ CREATE TABLE IF NOT EXISTS entity_graph (
99
+ id INTEGER PRIMARY KEY,
100
+ entity_a TEXT NOT NULL,
101
+ entity_b TEXT NOT NULL,
102
+ relation TEXT NOT NULL,
103
+ source_memory_id INTEGER,
104
+ created_at INTEGER NOT NULL,
105
+ last_seen_at INTEGER NOT NULL,
106
+ UNIQUE(entity_a, entity_b, relation)
107
+ );
108
+ CREATE INDEX IF NOT EXISTS idx_eg_a ON entity_graph(entity_a);
109
+ CREATE INDEX IF NOT EXISTS idx_eg_b ON entity_graph(entity_b);
110
+
111
+ CREATE TABLE IF NOT EXISTS context_watermarks (
112
+ chat_id TEXT PRIMARY KEY,
113
+ watermark_message_id INTEGER NOT NULL,
114
+ compaction_count INTEGER DEFAULT 0,
115
+ last_compacted_at INTEGER,
116
+ last_failed_at INTEGER,
117
+ pending_compaction INTEGER DEFAULT 0,
118
+ model TEXT,
119
+ token_estimate INTEGER
120
+ );
121
+
122
+ CREATE TABLE IF NOT EXISTS context_summaries (
123
+ id INTEGER PRIMARY KEY,
124
+ chat_id TEXT NOT NULL,
125
+ depth INTEGER NOT NULL DEFAULT 0,
126
+ content TEXT NOT NULL,
127
+ token_estimate INTEGER NOT NULL,
128
+ source_message_start INTEGER NOT NULL,
129
+ source_message_end INTEGER NOT NULL,
130
+ classification INTEGER NOT NULL DEFAULT 1,
131
+ archived INTEGER NOT NULL DEFAULT 0,
132
+ model TEXT,
133
+ created_at INTEGER NOT NULL
134
+ );
135
+ CREATE INDEX IF NOT EXISTS idx_ctx_summaries_chat ON context_summaries(chat_id, archived, created_at);
136
+ `);
137
+ // Migrations for existing DBs — ALTER TABLE ADD COLUMN is idempotent via try/catch.
138
+ // Adds #348 turn-classifier hint columns (nullable, backwards-compatible).
139
+ for (const col of ["type_hint", "topic_hint", "emotion_hint"]) {
140
+ try {
141
+ db.exec(`ALTER TABLE messages ADD COLUMN ${col} TEXT`);
142
+ }
143
+ catch (err) {
144
+ // Column already exists (from CREATE TABLE path on fresh DB, or prior migration run)
145
+ if (!(err instanceof Error && err.message.includes("duplicate column")))
146
+ throw err;
147
+ }
148
+ }
149
+ // #244 — recall_timestamps for spacing effect
150
+ try {
151
+ db.exec(`ALTER TABLE extracted_memories ADD COLUMN recall_timestamps TEXT DEFAULT '[]'`);
152
+ }
153
+ catch (err) {
154
+ if (!(err instanceof Error && err.message.includes("duplicate column")))
155
+ throw err;
156
+ }
157
+ }
158
+ // ── Public API ──────────────────────────────────────────────────────────────
159
+ /**
160
+ * Opens (or creates) the SQLite database at the given path, registers
161
+ * custom functions, and ensures the schema exists.
162
+ */
163
+ export function initializeDatabase(dbPath) {
164
+ mkdirSync(dirname(dbPath), { recursive: true });
165
+ const db = new Database(dbPath);
166
+ db.pragma("journal_mode = WAL");
167
+ db.pragma("foreign_keys = ON");
168
+ registerFunctions(db);
169
+ ensureSchema(db);
170
+ logInfo(TAG, `Database initialized at ${dbPath}`);
171
+ return db;
172
+ }
173
+ //# sourceMappingURL=memory-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-db.js","sourceRoot":"","sources":["../../src/memory-db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,GAAG,GAAG,WAAW,CAAC;AAExB,iFAAiF;AAEjF,SAAS,iBAAiB,CAAC,EAAqB;IAC9C,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAa,EAAE,EAAE;QAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,qDAAqD,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,IAAa,EAAE,EAAE;QAChD,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAE/E,SAAS,YAAY,CAAC,EAAqB;IACzC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmHP,CAAC,CAAC;IAEH,oFAAoF;IACpF,2EAA2E;IAC3E,KAAK,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC;YACH,EAAE,CAAC,IAAI,CAAC,mCAAmC,GAAG,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,qFAAqF;YACrF,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAAE,MAAM,GAAG,CAAC;QACrF,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAAE,MAAM,GAAG,CAAC;IACrF,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,CAAC;IAEjB,OAAO,CAAC,GAAG,EAAE,2BAA2B,MAAM,EAAE,CAAC,CAAC;IAClD,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { InstantStoreParams, InstantStoreResult, EditMemoryParams, EditMemoryResult, ForgetResult } from "./mem-types.js";
3
+ /** Handles all mutations on extracted memories: edit, store, merge, delete. */
4
+ export declare class MemoryEditor {
5
+ private readonly db;
6
+ constructor(db: Database.Database);
7
+ /** Edit an existing extracted memory. Unified mutation path for all field updates. */
8
+ editMemory(params: EditMemoryParams): EditMemoryResult;
9
+ /** Immediately persist a memory from the agent's instant_store tool. */
10
+ instantStore(params: InstantStoreParams): Promise<InstantStoreResult>;
11
+ /** Adjust relevance_score on an existing extracted memory. */
12
+ adjustRelevance(id: number, delta: number): void;
13
+ /** Reclassify a memory's confidentiality level. */
14
+ reclassifyMemory(id: number, level: number, userOverride?: boolean): {
15
+ ok: boolean;
16
+ error?: string;
17
+ };
18
+ /** Merge two extracted memories: keep newer, combine Darwinism scores, delete older. */
19
+ mergeMemories(idA: number, idB: number): {
20
+ merged: boolean;
21
+ keptId: number;
22
+ deletedId: number;
23
+ } | {
24
+ merged: false;
25
+ error: string;
26
+ };
27
+ /** Cascade deletion through all storage layers for the given message IDs. */
28
+ cascadeDelete(messageIds: number[], userId: string): ForgetResult;
29
+ /** Embed a newly inserted memory (fire-and-forget). */
30
+ private embedNewMemory;
31
+ }
32
+ //# sourceMappingURL=memory-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-editor.d.ts","sourceRoot":"","sources":["../../src/memory-editor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAe/H,+EAA+E;AAC/E,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAElD,sFAAsF;IACtF,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB;IAiItD,wEAAwE;IAClE,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA+F3E,8DAA8D;IAC9D,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhD,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAIlG,wFAAwF;IACxF,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAuBlI,6EAA6E;IAC7E,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY;IAajE,uDAAuD;IACvD,OAAO,CAAC,cAAc;CAUvB"}