abmind 0.0.1 → 0.1.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 (533) 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 +151 -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 +32 -0
  389. package/dist/src/openclaw-plugin/tools.d.ts.map +1 -0
  390. package/dist/src/openclaw-plugin/tools.js +131 -0
  391. package/dist/src/openclaw-plugin/tools.js.map +1 -0
  392. package/dist/src/openclaw-plugin/types.d.ts +35 -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/openclaw.plugin.json +72 -0
  517. package/package.json +92 -5
  518. package/prompts/sleep/01-gc-noise.md +28 -0
  519. package/prompts/sleep/02-daily-summary.md +3 -0
  520. package/prompts/sleep/03-extract-from-daily.md +3 -0
  521. package/prompts/sleep/04-retrospective.md +30 -0
  522. package/prompts/sleep/06-feedback.md +17 -0
  523. package/prompts/sleep/07-topic-assignment.md +23 -0
  524. package/prompts/sleep/08-core-promotion.md +26 -0
  525. package/prompts/sleep/09-merge.md +19 -0
  526. package/prompts/sleep/10-translation.md +17 -0
  527. package/prompts/sleep/11-skill-review.md +12 -0
  528. package/prompts/sleep/12-core-knowledge.md +14 -0
  529. package/prompts/sleep/13-consolidation.md +11 -0
  530. package/prompts/sleep/14-emotion-context.md +17 -0
  531. package/prompts/sleep/15-contradiction-and-graph.md +48 -0
  532. package/prompts/sleep/16-rem-synthesis.md +31 -0
  533. package/prompts/sleep/basic.md +12 -0
@@ -0,0 +1,387 @@
1
+ import { localISO } from "./local-time.js";
2
+ import { searchConsolidationFiles } from "./consolidation-search.js";
3
+ import { applyMMR } from "./mmr.js";
4
+ import { embedText, vectorSearch, loadEmbedConfig } from "./ollama-embed.js";
5
+ import { trigramSearch } from "./trigram-search.js";
6
+ import { logWarn, logDebug } from "./mem-logger.js";
7
+ const TAG = "recall";
8
+ // ── Constants ───────────────────────────────────────────────────────────────
9
+ const ALL_STAGES = ["Sf", "Ss", "Se", "S6"];
10
+ const DEFAULT_LIMIT = 10;
11
+ const SS_THRESHOLD = 0.65;
12
+ const SS_CAP = 5;
13
+ // Context boost weights (env-tunable)
14
+ const CTX_HOUR_BOOST = parseFloat(process.env.RECALL_CONTEXT_HOUR_BOOST ?? "0.02");
15
+ const CTX_DOW_BOOST = parseFloat(process.env.RECALL_CONTEXT_DOW_BOOST ?? "0.015");
16
+ const CTX_TOPIC_BOOST = parseFloat(process.env.RECALL_CONTEXT_TOPIC_BOOST ?? "0.03");
17
+ // ── Context Boost ───────────────────────────────────────────────────────────
18
+ function hourBucket(hour) {
19
+ if (hour >= 6 && hour < 12)
20
+ return 0; // morning
21
+ if (hour >= 12 && hour < 18)
22
+ return 1; // afternoon
23
+ if (hour >= 18 && hour < 23)
24
+ return 2; // evening
25
+ return 3; // night
26
+ }
27
+ function isWeekend(dow) { return dow === 0 || dow === 6; }
28
+ export function applyContextBoost(results, ctx) {
29
+ if (!ctx.hour && ctx.hour !== 0 && !ctx.dayOfWeek && ctx.dayOfWeek !== 0 && !ctx.topic)
30
+ return results;
31
+ let boostedCount = 0;
32
+ const boosted = results.map(hit => {
33
+ let boost = 0;
34
+ const ts = hit.createdAt;
35
+ if (ts && (ctx.hour != null || ctx.dayOfWeek != null)) {
36
+ const d = new Date(ts);
37
+ if (ctx.hour != null && hourBucket(d.getHours()) === hourBucket(ctx.hour)) {
38
+ boost += CTX_HOUR_BOOST;
39
+ }
40
+ if (ctx.dayOfWeek != null) {
41
+ const storedDow = d.getDay();
42
+ if (storedDow === ctx.dayOfWeek)
43
+ boost += CTX_DOW_BOOST;
44
+ else if (isWeekend(storedDow) === isWeekend(ctx.dayOfWeek))
45
+ boost += CTX_DOW_BOOST * 0.5;
46
+ }
47
+ }
48
+ if (ctx.topic && hit.topic && hit.topic !== "general" && hit.topic === ctx.topic) {
49
+ boost += CTX_TOPIC_BOOST;
50
+ }
51
+ if (boost > 0)
52
+ boostedCount++;
53
+ return boost > 0 ? { ...hit, score: hit.score + boost } : hit;
54
+ });
55
+ if (boostedCount > 0) {
56
+ logDebug(TAG, `context-boost applied to ${boostedCount}/${results.length} candidates`);
57
+ }
58
+ return boosted;
59
+ }
60
+ // ── Spacing boost (#244) ────────────────────────────────────────────────────
61
+ const DAY_MS = 86400000;
62
+ function spacingBoost(timestamps) {
63
+ if (timestamps.length < 2)
64
+ return 1.0;
65
+ const intervals = [];
66
+ for (let i = 1; i < timestamps.length; i++)
67
+ intervals.push(timestamps[i] - timestamps[i - 1]);
68
+ const avg = intervals.reduce((a, b) => a + b, 0) / intervals.length;
69
+ if (avg >= 7 * DAY_MS)
70
+ return 1.3;
71
+ if (avg >= 1 * DAY_MS)
72
+ return 1.15;
73
+ return 1.0;
74
+ }
75
+ function applySpacingBoost(results, db) {
76
+ if (results.length === 0)
77
+ return results;
78
+ const ids = results.filter(r => r.id != null).map(r => r.id);
79
+ if (ids.length === 0)
80
+ return results;
81
+ const ph = ids.map(() => "?").join(",");
82
+ const rows = db.prepare(`SELECT id, recall_timestamps FROM extracted_memories WHERE id IN (${ph})`).all(...ids);
83
+ const tsMap = new Map(rows.map(r => [r.id, JSON.parse(r.recall_timestamps ?? "[]")]));
84
+ return results.map(hit => {
85
+ if (!hit.id)
86
+ return hit;
87
+ const ts = tsMap.get(hit.id);
88
+ if (!ts || ts.length < 2)
89
+ return hit;
90
+ const mult = spacingBoost(ts);
91
+ return mult > 1.0 ? { ...hit, score: hit.score * mult } : hit;
92
+ });
93
+ }
94
+ // ── Helpers ─────────────────────────────────────────────────────────────────
95
+ function elapsed(start) {
96
+ return Math.round(performance.now() - start);
97
+ }
98
+ // ── Engine ──────────────────────────────────────────────────────────────────
99
+ export async function recallSearch(deps, params) {
100
+ const limit = params.limit ?? DEFAULT_LIMIT;
101
+ const activeStages = new Set(params.stages ?? ALL_STAGES);
102
+ const query = params.translated.join(" ");
103
+ // --- Se: fire embedding async at start ---
104
+ const embedConfig = loadEmbedConfig();
105
+ let embeddingPromise = null;
106
+ if (embedConfig.enabled && activeStages.has("Se")) {
107
+ // Prefer the injected provider (#173); fall back to legacy embedText for backward compat
108
+ // with callers (sqlite-backend.ts, index.ts re-export) that don't thread a provider through.
109
+ embeddingPromise = deps.embeddingProvider
110
+ ? deps.embeddingProvider.embedText(query)
111
+ : embedText(embedConfig, query);
112
+ }
113
+ const seenIds = new Set();
114
+ const extractedIds = [];
115
+ const stages = {};
116
+ // Collect results in priority order
117
+ const sfHits = [];
118
+ const seHits = [];
119
+ const ssHits = [];
120
+ const s6Hits = [];
121
+ // --- Sf: Three-query fuzzy search ---
122
+ if (activeStages.has("Sf")) {
123
+ const t = performance.now();
124
+ const sfOpts = {
125
+ translated: params.translated,
126
+ original: params.original,
127
+ userId: params.userId,
128
+ limit,
129
+ maxClassification: params.maxClassification ?? 2,
130
+ timeStart: params.timeStart,
131
+ timeEnd: params.timeEnd,
132
+ topic: params.topic,
133
+ tier: params.tier,
134
+ emotion: params.emotion,
135
+ includeExpired: params.includeExpired,
136
+ resolution: params.resolution,
137
+ };
138
+ const sf = trigramSearch(deps.db, sfOpts);
139
+ for (const h of sf.hits)
140
+ sfHits.push(h);
141
+ for (const id of sf.extractedIds) {
142
+ seenIds.add(id);
143
+ extractedIds.push(id);
144
+ }
145
+ stages["Sf"] = { hits: sfHits, ms: elapsed(t) };
146
+ }
147
+ const sfFull = sfHits.length >= limit;
148
+ // --- Se: merge embedding results (skip if Sf full) ---
149
+ if (embeddingPromise && !sfFull) {
150
+ const t = performance.now();
151
+ const queryVector = await embeddingPromise;
152
+ if (queryVector) {
153
+ const vecResults = vectorSearch(deps.db, queryVector, {
154
+ userId: params.userId, limit: limit * 3, threshold: embedConfig.threshold,
155
+ maxClassification: params.maxClassification ?? 2,
156
+ });
157
+ for (const r of vecResults) {
158
+ if (seenIds.has(r.id))
159
+ continue;
160
+ seenIds.add(r.id);
161
+ extractedIds.push(r.id);
162
+ seHits.push({
163
+ id: r.id,
164
+ content: r.content_en, date: localISO(new Date(r.created_at)),
165
+ source: "Se:embedding", score: r.score,
166
+ ...(r.source_message_ids ? { source_ids: r.source_message_ids } : {}),
167
+ contentOriginal: r.content_original ?? undefined, memoryType: r.memory_type ?? undefined,
168
+ trust: r.trust ?? undefined, integrity: r.integrity ?? undefined,
169
+ credibility: r.credibility ?? undefined, classification: r.classification ?? undefined,
170
+ });
171
+ }
172
+ stages["Se"] = { hits: seHits, ms: elapsed(t) };
173
+ }
174
+ }
175
+ else if (embeddingPromise) {
176
+ // Sf full — don't await, just discard
177
+ embeddingPromise.catch(() => { });
178
+ }
179
+ // --- Ss: Signature Hamming (skip if Sf full) ---
180
+ if (activeStages.has("Ss") && !sfFull) {
181
+ const t = performance.now();
182
+ try {
183
+ const { generateSignature, hammingSimilarity } = await import("./signature-generator.js");
184
+ const queryText = [...params.translated, params.original ?? ""].join(" ");
185
+ const querySig = generateSignature(queryText);
186
+ const conditions = ["signature IS NOT NULL"];
187
+ const bindParams = [];
188
+ if (params.topic) {
189
+ conditions.push("topic = ?");
190
+ bindParams.push(params.topic);
191
+ }
192
+ if (params.tier) {
193
+ conditions.push("tier = ?");
194
+ bindParams.push(params.tier);
195
+ }
196
+ if (!params.includeExpired) {
197
+ conditions.push("valid_to IS NULL");
198
+ }
199
+ const rows = deps.db.prepare(`SELECT id, content_en, content_original, memory_type, created_at, signature, emotion_score
200
+ FROM extracted_memories WHERE ${conditions.join(" AND ")}`).all(...bindParams);
201
+ const scored = [];
202
+ for (const row of rows) {
203
+ if (seenIds.has(row.id))
204
+ continue;
205
+ const sig = new Uint8Array(row.signature);
206
+ scored.push({ row, sim: hammingSimilarity(querySig, sig) });
207
+ }
208
+ scored.sort((a, b) => b.sim - a.sim);
209
+ for (const { row, sim } of scored.slice(0, SS_CAP)) {
210
+ if (sim < SS_THRESHOLD)
211
+ break;
212
+ seenIds.add(row.id);
213
+ extractedIds.push(row.id);
214
+ ssHits.push({
215
+ id: row.id,
216
+ content: row.content_en ?? "",
217
+ date: localISO(new Date(row.created_at)),
218
+ source: "Ss:signature", score: sim,
219
+ contentOriginal: row.content_original ?? undefined,
220
+ memoryType: row.memory_type ?? undefined,
221
+ });
222
+ }
223
+ }
224
+ catch { /* signature module not available */ }
225
+ stages["Ss"] = { hits: ssHits, ms: elapsed(t) };
226
+ }
227
+ // --- S6: Consolidation files (always runs) ---
228
+ if (activeStages.has("S6")) {
229
+ const t = performance.now();
230
+ const allKw = [...params.translated];
231
+ if (params.original)
232
+ allKw.push(params.original);
233
+ const consolidationResults = searchConsolidationFiles(deps.memoryDir, allKw, {
234
+ startTime: params.timeStart, endTime: params.timeEnd,
235
+ });
236
+ const s6Seen = new Set();
237
+ for (const c of consolidationResults) {
238
+ const key = `${c.timestamp}:${c.content.slice(0, 80)}`;
239
+ if (s6Seen.has(key))
240
+ continue;
241
+ s6Seen.add(key);
242
+ s6Hits.push({
243
+ content: c.content, date: localISO(new Date(c.timestamp)),
244
+ source: `S6:consolidation:${c.tier}`, score: 0.5,
245
+ });
246
+ }
247
+ stages["S6"] = { hits: s6Hits, ms: elapsed(t) };
248
+ }
249
+ // --- S8: Entity graph (always runs — different data type) ---
250
+ const s8Hits = [];
251
+ {
252
+ const t = performance.now();
253
+ try {
254
+ const { queryEntityRelationships, isKnownEntity } = await import("./entity-graph.js");
255
+ // #362 — extract word runs so possessives ("alice's" → "alice", "s") and commas
256
+ // ("alice," → "alice") match entities stored lowercase by upsertEdge.
257
+ // \p{L} = any unicode letter, \p{N} = digit. Unicode-safe (Hungarian etc).
258
+ const words = (query.toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? [])
259
+ .filter(w => w.length > 2);
260
+ for (const word of words) {
261
+ if (!isKnownEntity(deps.db, word))
262
+ continue;
263
+ const edges = queryEntityRelationships(deps.db, word, params.maxClassification ?? 2);
264
+ for (const edge of edges) {
265
+ s8Hits.push({
266
+ content: `${edge.entity_a} —[${edge.relation}]→ ${edge.entity_b}`,
267
+ date: localISO(new Date(edge.last_seen_at)),
268
+ source: "S8:entity-graph", score: 0.6,
269
+ });
270
+ }
271
+ break; // one entity match is enough
272
+ }
273
+ }
274
+ catch { /* entity-graph module or table not available */ }
275
+ if (s8Hits.length > 0)
276
+ stages["S8"] = { hits: s8Hits, ms: elapsed(t) };
277
+ }
278
+ // --- Merge in priority order, context boost, MMR rerank ---
279
+ const allResults = [...sfHits, ...seHits, ...ssHits, ...s6Hits, ...s8Hits];
280
+ const boosted = params.currentContext ? applyContextBoost(allResults, params.currentContext) : allResults;
281
+ const spaced = applySpacingBoost(boosted, deps.db);
282
+ const reranked = applyMMR(spaced, 0.7);
283
+ const finalResults = await enrichResults(reranked.slice(0, limit), deps.db);
284
+ // --- Track recalls (spacing effect #244) ---
285
+ if (extractedIds.length > 0 && params.trackRecalls !== false) {
286
+ const now = Date.now();
287
+ const ph = extractedIds.map(() => "?").join(",");
288
+ deps.db.prepare(`UPDATE extracted_memories SET recall_count = recall_count + 1, last_recalled_at = ? WHERE id IN (${ph})`).run(now, ...extractedIds);
289
+ // Append timestamps for spacing boost
290
+ for (const id of extractedIds) {
291
+ const row = deps.db.prepare("SELECT recall_timestamps FROM extracted_memories WHERE id = ?").get(id);
292
+ const ts = JSON.parse(row?.recall_timestamps ?? "[]");
293
+ ts.push(now);
294
+ if (ts.length > 20)
295
+ ts.shift();
296
+ deps.db.prepare("UPDATE extracted_memories SET recall_timestamps = ? WHERE id = ?").run(JSON.stringify(ts), id);
297
+ }
298
+ }
299
+ return {
300
+ results: finalResults,
301
+ stages,
302
+ shortCircuitAfter: sfFull ? "Sf" : null,
303
+ extractedIds,
304
+ };
305
+ }
306
+ /**
307
+ * Enrich recall results with timeline context and interference warnings.
308
+ * Matches timeline context to hits by hit.id (identity) rather than positional
309
+ * index — MMR reordering breaks any positional correspondence to the original
310
+ * stage-accumulation order.
311
+ * Returns a new array; input array is not mutated.
312
+ */
313
+ async function enrichResults(results, db) {
314
+ const enriched = results.map(r => ({ ...r }));
315
+ // Timeline context enrichment — skip if no hit has an ID (all S6)
316
+ if (enriched.some(h => h.id !== undefined)) {
317
+ try {
318
+ const { buildTimelines, renderTimeline } = await import("./timeline-builder.js");
319
+ const topics = new Set();
320
+ for (const hit of enriched) {
321
+ const topicMatch = hit.content.match(/\|([a-z]+)\|/);
322
+ if (topicMatch)
323
+ topics.add(topicMatch[1]);
324
+ }
325
+ if (topics.size > 0) {
326
+ const topicList = [...topics].map(t => `'${t}'`).join(",");
327
+ const siblings = db.prepare(`SELECT id, content_en, topic, memory_type, emotion_tags, importance_flags, confidence, created_at, emotion_context
328
+ FROM extracted_memories WHERE topic IN (${topicList}) AND valid_to IS NULL AND content_en IS NOT NULL
329
+ ORDER BY created_at`).all();
330
+ const timelines = buildTimelines(siblings);
331
+ const idToTimeline = new Map();
332
+ for (const tl of timelines) {
333
+ const rendered = renderTimeline(tl);
334
+ for (const id of rendered.memoryIds)
335
+ idToTimeline.set(id, rendered.rendered);
336
+ }
337
+ for (const hit of enriched) {
338
+ if (hit.id !== undefined && idToTimeline.has(hit.id)) {
339
+ hit.timelineContext = idToTimeline.get(hit.id);
340
+ }
341
+ }
342
+ }
343
+ }
344
+ catch (err) {
345
+ logWarn("recall-enrich", `timeline enrichment failed: ${err instanceof Error ? err.message : String(err)}`);
346
+ }
347
+ }
348
+ // Interference detection: flag similar-but-different results
349
+ try {
350
+ const { detectInterference } = await import("./brain-patterns.js");
351
+ for (let i = 0; i < enriched.length; i++) {
352
+ for (let j = i + 1; j < enriched.length; j++) {
353
+ const a = enriched[i], b = enriched[j];
354
+ const topicA = a.content.match(/\|([a-z]+)\|/)?.[1] ?? "";
355
+ const topicB = b.content.match(/\|([a-z]+)\|/)?.[1] ?? "";
356
+ if (detectInterference(a.content, b.content, topicA, topicB)) {
357
+ a.interferenceWarning = `⚠️ Conflicts with another result — verify which is current`;
358
+ b.interferenceWarning = `⚠️ Conflicts with another result — verify which is current`;
359
+ }
360
+ }
361
+ }
362
+ }
363
+ catch { /* brain-patterns not available */ }
364
+ // Compress-field enrichment: fetch topic, emotion_tags, importance_flags, confidence for ABM-L rendering
365
+ const idsToEnrich = enriched.filter(h => h.id !== undefined).map(h => h.id);
366
+ if (idsToEnrich.length > 0) {
367
+ try {
368
+ const placeholders = idsToEnrich.map(() => "?").join(",");
369
+ const rows = db.prepare(`SELECT id, topic, emotion_tags, importance_flags, confidence, created_at
370
+ FROM extracted_memories WHERE id IN (${placeholders})`).all(...idsToEnrich);
371
+ const byId = new Map(rows.map(r => [r.id, r]));
372
+ for (const hit of enriched) {
373
+ const row = hit.id !== undefined ? byId.get(hit.id) : undefined;
374
+ if (row) {
375
+ hit.topic = row.topic ?? undefined;
376
+ hit.emotionTags = row.emotion_tags ?? undefined;
377
+ hit.importanceFlags = row.importance_flags ?? undefined;
378
+ hit.confidence = row.confidence ?? undefined;
379
+ hit.createdAt = row.created_at;
380
+ }
381
+ }
382
+ }
383
+ catch { /* non-critical */ }
384
+ }
385
+ return enriched;
386
+ }
387
+ //# sourceMappingURL=recall-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recall-engine.js","sourceRoot":"","sources":["../../src/recall-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * redactSecrets — secret-pattern sanitization for log/file output.
3
+ *
4
+ * INTENTIONALLY DUPLICATED across abtars and abmind — they are
5
+ * independent products that both need this utility. If you add or
6
+ * modify a pattern here, also update the sibling file:
7
+ * abtars/src/components/logger.ts (SECRET_PATTERNS + redactSecrets)
8
+ * abmind/src/redact-secrets.ts (SECRET_PATTERNS + redactSecrets)
9
+ *
10
+ * Do NOT create an import relationship between them. Each product stays
11
+ * independent so the bridge can run against a different memory backend
12
+ * and abmind can ship as a standalone npm package without pulling
13
+ * abtars in for a utility function.
14
+ *
15
+ * See abproject/docs/plans/178-redact-secrets-move.md for the rationale.
16
+ */
17
+ export declare const SECRET_PATTERNS: ReadonlyArray<[RegExp, string]>;
18
+ /** Strip known secret patterns from a log line or file content. */
19
+ export declare function redactSecrets(text: string): string;
20
+ //# sourceMappingURL=redact-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact-secrets.d.ts","sourceRoot":"","sources":["../../src/redact-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,eAAe,EAAE,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB3D,CAAC;AAEF,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * redactSecrets — secret-pattern sanitization for log/file output.
3
+ *
4
+ * INTENTIONALLY DUPLICATED across abtars and abmind — they are
5
+ * independent products that both need this utility. If you add or
6
+ * modify a pattern here, also update the sibling file:
7
+ * abtars/src/components/logger.ts (SECRET_PATTERNS + redactSecrets)
8
+ * abmind/src/redact-secrets.ts (SECRET_PATTERNS + redactSecrets)
9
+ *
10
+ * Do NOT create an import relationship between them. Each product stays
11
+ * independent so the bridge can run against a different memory backend
12
+ * and abmind can ship as a standalone npm package without pulling
13
+ * abtars in for a utility function.
14
+ *
15
+ * See abproject/docs/plans/178-redact-secrets-move.md for the rationale.
16
+ */
17
+ export const SECRET_PATTERNS = [
18
+ [/sk-[A-Za-z0-9_-]{20,}/g, "sk-***REDACTED***"],
19
+ [/ghp_[A-Za-z0-9]{36,}/g, "ghp_***REDACTED***"],
20
+ [/github_pat_[A-Za-z0-9_]{20,}/g, "github_pat_***REDACTED***"],
21
+ [/xox[baprs]-[A-Za-z0-9-]{10,}/g, "xox_-***REDACTED***"],
22
+ [/AIza[A-Za-z0-9_-]{30,}/g, "AIza***REDACTED***"],
23
+ [/AKIA[A-Z0-9]{16}/g, "AKIA***REDACTED***"],
24
+ [/\d{8,12}:[A-Za-z0-9_-]{35,}/g, "***BOT_TOKEN***"],
25
+ [/Bearer [A-Za-z0-9._-]{20,}/g, "Bearer ***REDACTED***"],
26
+ [/hf_[A-Za-z0-9]{20,}/g, "hf_***REDACTED***"],
27
+ [/npm_[A-Za-z0-9]{20,}/g, "npm_***REDACTED***"],
28
+ [/sk_live_[A-Za-z0-9]{20,}/g, "sk_live_***REDACTED***"],
29
+ [/sk_test_[A-Za-z0-9]{20,}/g, "sk_test_***REDACTED***"],
30
+ [/SG\.[A-Za-z0-9_-]{20,}/g, "SG.***REDACTED***"],
31
+ [/("(?:api[_-]?key|token|secret|password|authorization|credential)"\s*:\s*")[^"]{8,}"/gi, '$1***REDACTED***"'],
32
+ [/([A-Z_]*(?:KEY|TOKEN|SECRET|PASSWORD)=)[^\s]{8,}/g, "$1***REDACTED***"],
33
+ ];
34
+ /** Strip known secret patterns from a log line or file content. */
35
+ export function redactSecrets(text) {
36
+ let result = text;
37
+ for (const [pattern, replacement] of SECRET_PATTERNS) {
38
+ result = result.replace(pattern, replacement);
39
+ }
40
+ return result;
41
+ }
42
+ //# sourceMappingURL=redact-secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact-secrets.js","sourceRoot":"","sources":["../../src/redact-secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAoC;IAC9D,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;IAC/C,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;IAC/C,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IAC9D,CAAC,+BAA+B,EAAE,qBAAqB,CAAC;IACxD,CAAC,yBAAyB,EAAE,oBAAoB,CAAC;IACjD,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;IAC3C,CAAC,8BAA8B,EAAE,iBAAiB,CAAC;IACnD,CAAC,6BAA6B,EAAE,uBAAuB,CAAC;IACxD,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;IAC7C,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;IAC/C,CAAC,2BAA2B,EAAE,wBAAwB,CAAC;IACvD,CAAC,2BAA2B,EAAE,wBAAwB,CAAC;IACvD,CAAC,yBAAyB,EAAE,mBAAmB,CAAC;IAChD,CAAC,uFAAuF,EAAE,mBAAmB,CAAC;IAC9G,CAAC,mDAAmD,EAAE,kBAAkB,CAAC;CAC1E,CAAC;AAEF,mEAAmE;AACnE,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,eAAe,EAAE,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * runtime-store.ts — per-plugin runtime isolation via Symbol.for registry.
3
+ *
4
+ * When abmind is loaded as a plugin host (OpenClaw ContextEngine, future multi-
5
+ * session embedders), multiple instances may coexist in a single Node process.
6
+ * Module-level state or process.env mutations leak across instances.
7
+ *
8
+ * This registry uses Symbol.for as a process-wide key that survives module
9
+ * re-loading (bundler duplication, different resolution paths). Each plugin
10
+ * instance registers its runtime under a unique pluginId and retrieves it
11
+ * by that id — no shared mutable state, no env pollution.
12
+ *
13
+ * Pattern borrowed from openclaw/src/plugin-sdk/runtime-store.ts (Apache-2.0).
14
+ * See abproject/docs/plans/346-runtime-store-pattern.md for design rationale.
15
+ */
16
+ /**
17
+ * Register a runtime under a pluginId.
18
+ * Throws if the pluginId is already in use — callers must dispose before re-registering.
19
+ */
20
+ export declare function registerRuntime<R>(pluginId: string, runtime: R): void;
21
+ /**
22
+ * Retrieve a runtime by pluginId.
23
+ * Throws if no runtime is registered — callers should register at plugin init
24
+ * and only call getRuntime during request handling (after init completes).
25
+ */
26
+ export declare function getRuntime<R>(pluginId: string): R;
27
+ /**
28
+ * Check whether a runtime is registered for a pluginId.
29
+ * Use this to guard against double-registration in idempotent plugin init paths.
30
+ */
31
+ export declare function hasRuntime(pluginId: string): boolean;
32
+ /**
33
+ * Remove a runtime. Call from plugin dispose/shutdown.
34
+ * No-op if the pluginId isn't registered (safe to call multiple times).
35
+ */
36
+ export declare function removeRuntime(pluginId: string): void;
37
+ /**
38
+ * List all currently-registered pluginIds. Primarily for debugging/tests.
39
+ * Order is insertion order.
40
+ */
41
+ export declare function listRuntimes(): readonly string[];
42
+ /**
43
+ * Clear all runtimes. Test-only helper — production code should use removeRuntime.
44
+ * @internal
45
+ */
46
+ export declare function _clearAllRuntimes(): void;
47
+ //# sourceMappingURL=runtime-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-store.d.ts","sourceRoot":"","sources":["../../src/runtime-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAWrE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAQjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,SAAS,MAAM,EAAE,CAEhD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * runtime-store.ts — per-plugin runtime isolation via Symbol.for registry.
3
+ *
4
+ * When abmind is loaded as a plugin host (OpenClaw ContextEngine, future multi-
5
+ * session embedders), multiple instances may coexist in a single Node process.
6
+ * Module-level state or process.env mutations leak across instances.
7
+ *
8
+ * This registry uses Symbol.for as a process-wide key that survives module
9
+ * re-loading (bundler duplication, different resolution paths). Each plugin
10
+ * instance registers its runtime under a unique pluginId and retrieves it
11
+ * by that id — no shared mutable state, no env pollution.
12
+ *
13
+ * Pattern borrowed from openclaw/src/plugin-sdk/runtime-store.ts (Apache-2.0).
14
+ * See abproject/docs/plans/346-runtime-store-pattern.md for design rationale.
15
+ */
16
+ const REGISTRY_KEY = Symbol.for("abmind.plugin-sdk.runtime-store");
17
+ function getRegistry() {
18
+ const g = globalThis;
19
+ if (!g[REGISTRY_KEY]) {
20
+ g[REGISTRY_KEY] = new Map();
21
+ }
22
+ return g[REGISTRY_KEY];
23
+ }
24
+ /**
25
+ * Register a runtime under a pluginId.
26
+ * Throws if the pluginId is already in use — callers must dispose before re-registering.
27
+ */
28
+ export function registerRuntime(pluginId, runtime) {
29
+ if (!pluginId || typeof pluginId !== "string") {
30
+ throw new Error("registerRuntime: pluginId must be a non-empty string");
31
+ }
32
+ const registry = getRegistry();
33
+ if (registry.has(pluginId)) {
34
+ throw new Error(`registerRuntime: pluginId "${pluginId}" already registered — call removeRuntime first`);
35
+ }
36
+ registry.set(pluginId, { runtime, pluginId, createdAt: Date.now() });
37
+ }
38
+ /**
39
+ * Retrieve a runtime by pluginId.
40
+ * Throws if no runtime is registered — callers should register at plugin init
41
+ * and only call getRuntime during request handling (after init completes).
42
+ */
43
+ export function getRuntime(pluginId) {
44
+ const entry = getRegistry().get(pluginId);
45
+ if (!entry) {
46
+ throw new Error(`getRuntime: no runtime registered for pluginId "${pluginId}" (register at plugin init)`);
47
+ }
48
+ return entry.runtime;
49
+ }
50
+ /**
51
+ * Check whether a runtime is registered for a pluginId.
52
+ * Use this to guard against double-registration in idempotent plugin init paths.
53
+ */
54
+ export function hasRuntime(pluginId) {
55
+ return getRegistry().has(pluginId);
56
+ }
57
+ /**
58
+ * Remove a runtime. Call from plugin dispose/shutdown.
59
+ * No-op if the pluginId isn't registered (safe to call multiple times).
60
+ */
61
+ export function removeRuntime(pluginId) {
62
+ getRegistry().delete(pluginId);
63
+ }
64
+ /**
65
+ * List all currently-registered pluginIds. Primarily for debugging/tests.
66
+ * Order is insertion order.
67
+ */
68
+ export function listRuntimes() {
69
+ return [...getRegistry().keys()];
70
+ }
71
+ /**
72
+ * Clear all runtimes. Test-only helper — production code should use removeRuntime.
73
+ * @internal
74
+ */
75
+ export function _clearAllRuntimes() {
76
+ getRegistry().clear();
77
+ }
78
+ //# sourceMappingURL=runtime-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-store.js","sourceRoot":"","sources":["../../src/runtime-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAcnE,SAAS,WAAW;IAClB,MAAM,CAAC,GAAG,UAA2C,CAAC;IACtD,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,CAAC,YAAY,CAAE,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAI,QAAgB,EAAE,OAAU;IAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,iDAAiD,CACxF,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAI,QAAgB;IAC5C,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,mDAAmD,QAAQ,6BAA6B,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,OAAY,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,WAAW,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,GAAG,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { MemoryManager } from "./memory-manager.js";
2
+ export declare const RECENT_MSG_LIMIT = 8;
3
+ export declare const RECENT_MSG_CAP = 2500;
4
+ /**
5
+ * Build session-start context for injection after /new, /reset, or restart.
6
+ * Returns the latest daily summary, or recent messages if no daily covers the gap.
7
+ * Wrapped in REQ-4 temporal markers.
8
+ */
9
+ export declare function buildSessionStartContext(memory: MemoryManager, userId: string): string | null;
10
+ //# sourceMappingURL=session-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../src/session-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,cAAc,OAAO,CAAC;AA0BnC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuD7F"}