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,62 @@
1
+ /**
2
+ * emotion-arc.ts — Track emotional trajectory per topic over time.
3
+ * Built during sleep from emotion_tags on recent memories.
4
+ */
5
+ const VALENCE = {
6
+ joy: 1, love: 1, gratitude: 1, pride: 1, excitement: 1, hope: 1, relief: 1,
7
+ trust: 0.5, peace: 0.5, humor: 0.5, tenderness: 0.5, curiosity: 0.3,
8
+ conviction: 0.5, determination: 0.3, surprise: 0,
9
+ doubt: -0.3, confusion: -0.3, vulnerability: -0.3,
10
+ fear: -0.5, anxiety: -0.5, frustration: -0.5, exhaustion: -0.5,
11
+ anger: -1, grief: -1, raw_honesty: -0.2,
12
+ };
13
+ function tagValence(tag) {
14
+ return VALENCE[tag] ?? 0;
15
+ }
16
+ /** Build emotional arc from a sequence of memories (ordered by time). */
17
+ export function buildArc(memories) {
18
+ if (memories.length === 0)
19
+ return { tags: [], direction: "stable", symbol: "—" };
20
+ const allTags = [];
21
+ const valences = [];
22
+ for (const m of memories) {
23
+ const tags = m.emotion_tags.split(",").map(t => t.trim()).filter(Boolean);
24
+ for (const t of tags)
25
+ if (!allTags.includes(t))
26
+ allTags.push(t);
27
+ const avg = tags.length > 0 ? tags.reduce((s, t) => s + tagValence(t), 0) / tags.length : 0;
28
+ valences.push(avg);
29
+ }
30
+ if (valences.length < 2)
31
+ return { tags: allTags, direction: "stable", symbol: "—" };
32
+ // Compute direction from trend
33
+ const first = valences.slice(0, Math.ceil(valences.length / 2));
34
+ const second = valences.slice(Math.ceil(valences.length / 2));
35
+ const avgFirst = first.reduce((a, b) => a + b, 0) / first.length;
36
+ const avgSecond = second.reduce((a, b) => a + b, 0) / second.length;
37
+ const diff = avgSecond - avgFirst;
38
+ // Check volatility (standard deviation)
39
+ const mean = valences.reduce((a, b) => a + b, 0) / valences.length;
40
+ const variance = valences.reduce((s, v) => s + (v - mean) ** 2, 0) / valences.length;
41
+ const stddev = Math.sqrt(variance);
42
+ let direction;
43
+ let symbol;
44
+ if (stddev > 0.8) {
45
+ direction = "volatile";
46
+ symbol = "↕";
47
+ }
48
+ else if (diff > 0.2) {
49
+ direction = "rising";
50
+ symbol = "↑";
51
+ }
52
+ else if (diff < -0.2) {
53
+ direction = "falling";
54
+ symbol = "↓";
55
+ }
56
+ else {
57
+ direction = "stable";
58
+ symbol = "→";
59
+ }
60
+ return { tags: allTags, direction, symbol };
61
+ }
62
+ //# sourceMappingURL=emotion-arc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion-arc.js","sourceRoot":"","sources":["../../src/emotion-arc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * emotion-tagger.ts — Pattern-based emotion detection.
3
+ * Pure function, no LLM, ~1ms per call.
4
+ */
5
+ export type EmotionTag = "joy" | "trust" | "hope" | "fear" | "grief" | "anger" | "doubt" | "relief" | "pride" | "curiosity" | "frustration" | "surprise" | "determination" | "exhaustion" | "anxiety" | "gratitude" | "love" | "humor" | "vulnerability" | "conviction" | "peace" | "confusion" | "excitement" | "tenderness" | "raw_honesty";
6
+ /** Detect emotions from text via keyword patterns. Returns deduplicated tags. */
7
+ export declare function detectEmotions(text: string): EmotionTag[];
8
+ //# sourceMappingURL=emotion-tagger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion-tagger.d.ts","sourceRoot":"","sources":["../../src/emotion-tagger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,UAAU,GAClB,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GACrD,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,GAC1D,UAAU,GAAG,eAAe,GAAG,YAAY,GAAG,SAAS,GACvD,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,GAAG,YAAY,GAC/D,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;AAqCxE,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,CAMzD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * emotion-tagger.ts — Pattern-based emotion detection.
3
+ * Pure function, no LLM, ~1ms per call.
4
+ */
5
+ const PATTERNS = [
6
+ // joy / positive
7
+ [/\b(happy|glad|delighted|wonderful|amazing|fantastic|brilliant|perfect)\b/i, "joy"],
8
+ [/\b(love|adore|cherish|devoted)\b/i, "love"],
9
+ [/\b(grateful|thankful|appreciate|thanks)\b/i, "gratitude"],
10
+ [/\b(proud|pride|accomplished|nailed it)\b/i, "pride"],
11
+ [/\b(excited|thrilled|can't wait|pumped)\b/i, "excitement"],
12
+ [/\b(funny|hilarious|lol|lmao|haha|😂|🤣)\b/i, "humor"],
13
+ [/\b(peaceful|calm|serene|at ease)\b/i, "peace"],
14
+ [/\b(tender|gentle|warm|caring)\b/i, "tenderness"],
15
+ // trust / conviction
16
+ [/\b(trust|reliable|dependable|count on)\b/i, "trust"],
17
+ [/\b(decided|committed|convinced|certain|absolutely)\b/i, "conviction"],
18
+ [/\b(determined|persistent|won't give up|keep going)\b/i, "determination"],
19
+ // hope / relief
20
+ [/\b(hope|hopeful|optimistic|looking forward)\b/i, "hope"],
21
+ [/\b(relief|relieved|finally|phew|thank god)\b/i, "relief"],
22
+ [/\b(surprised|unexpected|didn't expect|wow|whoa)\b/i, "surprise"],
23
+ [/\b(curious|wondering|interesting|intrigued|fascinated)\b/i, "curiosity"],
24
+ // negative
25
+ [/\b(afraid|scared|terrified|frightened|worried about)\b/i, "fear"],
26
+ [/\b(anxious|nervous|uneasy|stressed|overwhelmed)\b/i, "anxiety"],
27
+ [/\b(angry|furious|rage|pissed|infuriated|hate)\b/i, "anger"],
28
+ [/\b(frustrated|annoying|irritating|ugh|damn)\b/i, "frustration"],
29
+ [/\b(confused|lost|don't understand|makes no sense|wtf)\b/i, "confusion"],
30
+ [/\b(sad|grief|mourning|loss|heartbroken|devastated)\b/i, "grief"],
31
+ [/\b(doubt|uncertain|not sure|skeptical|questionable)\b/i, "doubt"],
32
+ [/\b(exhausted|burned out|drained|tired of|fed up)\b/i, "exhaustion"],
33
+ [/\b(vulnerable|exposed|raw|honest truth|admit)\b/i, "vulnerability"],
34
+ [/\b(brutal honesty|hard truth|real talk|no sugar)\b/i, "raw_honesty"],
35
+ ];
36
+ /** Detect emotions from text via keyword patterns. Returns deduplicated tags. */
37
+ export function detectEmotions(text) {
38
+ const seen = new Set();
39
+ for (const [pattern, tag] of PATTERNS) {
40
+ if (pattern.test(text) && !seen.has(tag))
41
+ seen.add(tag);
42
+ }
43
+ return [...seen];
44
+ }
45
+ //# sourceMappingURL=emotion-tagger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion-tagger.js","sourceRoot":"","sources":["../../src/emotion-tagger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,QAAQ,GAAiD;IAC7D,iBAAiB;IACjB,CAAC,2EAA2E,EAAE,KAAK,CAAC;IACpF,CAAC,mCAAmC,EAAE,MAAM,CAAC;IAC7C,CAAC,4CAA4C,EAAE,WAAW,CAAC;IAC3D,CAAC,2CAA2C,EAAE,OAAO,CAAC;IACtD,CAAC,2CAA2C,EAAE,YAAY,CAAC;IAC3D,CAAC,4CAA4C,EAAE,OAAO,CAAC;IACvD,CAAC,qCAAqC,EAAE,OAAO,CAAC;IAChD,CAAC,kCAAkC,EAAE,YAAY,CAAC;IAElD,qBAAqB;IACrB,CAAC,2CAA2C,EAAE,OAAO,CAAC;IACtD,CAAC,uDAAuD,EAAE,YAAY,CAAC;IACvE,CAAC,uDAAuD,EAAE,eAAe,CAAC;IAE1E,gBAAgB;IAChB,CAAC,gDAAgD,EAAE,MAAM,CAAC;IAC1D,CAAC,+CAA+C,EAAE,QAAQ,CAAC;IAC3D,CAAC,oDAAoD,EAAE,UAAU,CAAC;IAClE,CAAC,2DAA2D,EAAE,WAAW,CAAC;IAE1E,WAAW;IACX,CAAC,yDAAyD,EAAE,MAAM,CAAC;IACnE,CAAC,oDAAoD,EAAE,SAAS,CAAC;IACjE,CAAC,kDAAkD,EAAE,OAAO,CAAC;IAC7D,CAAC,gDAAgD,EAAE,aAAa,CAAC;IACjE,CAAC,0DAA0D,EAAE,WAAW,CAAC;IACzE,CAAC,uDAAuD,EAAE,OAAO,CAAC;IAClE,CAAC,wDAAwD,EAAE,OAAO,CAAC;IACnE,CAAC,qDAAqD,EAAE,YAAY,CAAC;IACrE,CAAC,kDAAkD,EAAE,eAAe,CAAC;IACrE,CAAC,qDAAqD,EAAE,aAAa,CAAC;CACvE,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAC;IACnC,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Clamp a value to [-5, +5]. Non-integer or missing values default to 0. */
2
+ export declare function clampEmotionScore(value: unknown): number;
3
+ /** Map a reaction emoji to an emotion score [-5, +5]. Unknown emojis default to +1. */
4
+ export declare function emojiToScore(emoji: string): number;
5
+ /** Derive emotion_score from tags using max absolute valence. */
6
+ export declare function scoreFromTags(tags: string): number;
7
+ /** Recency-decayed emotion: recent emotions are vivid, old ones fade. */
8
+ export declare function effectiveEmotion(score: number, daysSinceCreated: number): number;
9
+ /** Map a reaction emoji to an emotion tag. Unknown emojis default to "gratitude". */
10
+ export declare function emojiToTag(emoji: string): string;
11
+ /** Reverse-derive a default tag from a numeric score (for backfill). */
12
+ export declare function tagFromScore(score: number): string;
13
+ //# sourceMappingURL=emotion-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion-utils.d.ts","sourceRoot":"","sources":["../../src/emotion-utils.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKxD;AASD,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAYD,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAGhF;AAYD,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlD"}
@@ -0,0 +1,76 @@
1
+ /** Clamp a value to [-5, +5]. Non-integer or missing values default to 0. */
2
+ export function clampEmotionScore(value) {
3
+ if (value === null || value === undefined)
4
+ return 0;
5
+ const n = Number(value);
6
+ if (!Number.isInteger(n))
7
+ return 0;
8
+ return Math.max(-5, Math.min(5, n));
9
+ }
10
+ const EMOJI_SCORES = {
11
+ "❤️": 4, "🔥": 4, "🎉": 3, "👏": 4, "❤": 4,
12
+ "👍": 3, "😂": 3, "🤩": 4, "💯": 3, "⚡": 3,
13
+ "😊": 2, "🙏": 2, "🤔": 1, "😮": 1,
14
+ "👎": -3, "😢": -3, "😡": -4, "🤮": -4, "💩": -5,
15
+ };
16
+ /** Map a reaction emoji to an emotion score [-5, +5]. Unknown emojis default to +1. */
17
+ export function emojiToScore(emoji) {
18
+ return EMOJI_SCORES[emoji] ?? 1;
19
+ }
20
+ // ── Tag valence map (positive/negative weight per tag) ──────────────────────
21
+ const TAG_VALENCE = {
22
+ joy: 4, love: 5, gratitude: 3, pride: 4, excitement: 4, humor: 3,
23
+ peace: 2, tenderness: 3, trust: 2, conviction: 3, determination: 3,
24
+ hope: 3, relief: 3, surprise: 2, curiosity: 2,
25
+ fear: -3, anxiety: -3, anger: -4, frustration: -3, confusion: -2,
26
+ grief: -5, doubt: -2, exhaustion: -3, vulnerability: -2, raw_honesty: -1,
27
+ };
28
+ /** Derive emotion_score from tags using max absolute valence. */
29
+ export function scoreFromTags(tags) {
30
+ if (!tags)
31
+ return 0;
32
+ let maxAbs = 0;
33
+ let maxVal = 0;
34
+ for (const tag of tags.split(",")) {
35
+ const v = TAG_VALENCE[tag.trim()];
36
+ if (v !== undefined && Math.abs(v) > maxAbs) {
37
+ maxAbs = Math.abs(v);
38
+ maxVal = v;
39
+ }
40
+ }
41
+ return clampEmotionScore(maxVal);
42
+ }
43
+ /** Recency-decayed emotion: recent emotions are vivid, old ones fade. */
44
+ export function effectiveEmotion(score, daysSinceCreated) {
45
+ const decay = Math.max(0.2, 1 - daysSinceCreated / 180); // 6-month half-life, floor 0.2
46
+ return Math.round(score * decay * 10) / 10;
47
+ }
48
+ // ── Emoji → tags mapping ────────────────────────────────────────────────────
49
+ const EMOJI_TAGS = {
50
+ "❤️": "love", "❤": "love", "🔥": "excitement", "🎉": "joy",
51
+ "👏": "pride", "👍": "gratitude", "😂": "humor", "🤩": "excitement",
52
+ "💯": "conviction", "⚡": "determination", "😊": "joy", "🙏": "gratitude",
53
+ "🤔": "curiosity", "😮": "surprise",
54
+ "👎": "frustration", "😢": "grief", "😡": "anger", "🤮": "anger", "💩": "frustration",
55
+ };
56
+ /** Map a reaction emoji to an emotion tag. Unknown emojis default to "gratitude". */
57
+ export function emojiToTag(emoji) {
58
+ return EMOJI_TAGS[emoji] ?? "gratitude";
59
+ }
60
+ /** Reverse-derive a default tag from a numeric score (for backfill). */
61
+ export function tagFromScore(score) {
62
+ if (score >= 4)
63
+ return "pride";
64
+ if (score >= 2)
65
+ return "joy";
66
+ if (score === 1)
67
+ return "gratitude";
68
+ if (score === 0)
69
+ return "";
70
+ if (score >= -2)
71
+ return "doubt";
72
+ if (score >= -4)
73
+ return "frustration";
74
+ return "anger";
75
+ }
76
+ //# sourceMappingURL=emotion-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emotion-utils.js","sourceRoot":"","sources":["../../src/emotion-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * entity-graph.ts — Entity relationship store + query for S8 recall layer.
3
+ */
4
+ import type Database from "better-sqlite3";
5
+ export type EntityEdge = {
6
+ id: number;
7
+ entity_a: string;
8
+ entity_b: string;
9
+ relation: string;
10
+ source_memory_id: number | null;
11
+ created_at: number;
12
+ last_seen_at: number;
13
+ };
14
+ /** Insert or update an entity relationship edge. */
15
+ export declare function upsertEdge(db: Database.Database, edge: {
16
+ entity_a: string;
17
+ entity_b: string;
18
+ relation: string;
19
+ source_memory_id?: number;
20
+ }): void;
21
+ /**
22
+ * S8 recall: find relationships for a given entity.
23
+ * Respects BLP (classification) — SECRET edges only visible when caller allows.
24
+ *
25
+ * Historical note: this used to also filter `credibility <= 3` under the
26
+ * comment "skip contradicted sources". That was wrong: contradictions never
27
+ * decrement credibility (only 7-day aging does, 6→3), so the filter silently
28
+ * hid all fresh edges. Removed in #361.
29
+ */
30
+ export declare function queryEntityRelationships(db: Database.Database, entity: string, maxClassification: number): EntityEdge[];
31
+ /** Check if an entity exists in the graph. */
32
+ export declare function isKnownEntity(db: Database.Database, entity: string): boolean;
33
+ //# sourceMappingURL=entity-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-graph.d.ts","sourceRoot":"","sources":["../../src/entity-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,oDAAoD;AACpD,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,GACxF,IAAI,CASN;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,GACxB,UAAU,EAAE,CAWd;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAM5E"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * entity-graph.ts — Entity relationship store + query for S8 recall layer.
3
+ */
4
+ /** Insert or update an entity relationship edge. */
5
+ export function upsertEdge(db, edge) {
6
+ const now = Date.now();
7
+ db.prepare(`
8
+ INSERT INTO entity_graph (entity_a, entity_b, relation, source_memory_id, created_at, last_seen_at)
9
+ VALUES (lower(?), lower(?), ?, ?, ?, ?)
10
+ ON CONFLICT(entity_a, entity_b, relation) DO UPDATE SET
11
+ last_seen_at = excluded.last_seen_at,
12
+ source_memory_id = excluded.source_memory_id
13
+ `).run(edge.entity_a, edge.entity_b, edge.relation, edge.source_memory_id ?? null, now, now);
14
+ }
15
+ /**
16
+ * S8 recall: find relationships for a given entity.
17
+ * Respects BLP (classification) — SECRET edges only visible when caller allows.
18
+ *
19
+ * Historical note: this used to also filter `credibility <= 3` under the
20
+ * comment "skip contradicted sources". That was wrong: contradictions never
21
+ * decrement credibility (only 7-day aging does, 6→3), so the filter silently
22
+ * hid all fresh edges. Removed in #361.
23
+ */
24
+ export function queryEntityRelationships(db, entity, maxClassification) {
25
+ const normalized = entity.toLowerCase();
26
+ return db.prepare(`
27
+ SELECT eg.*
28
+ FROM entity_graph eg
29
+ LEFT JOIN extracted_memories em ON eg.source_memory_id = em.id
30
+ WHERE (eg.entity_a = ? OR eg.entity_b = ?)
31
+ AND (em.id IS NULL OR em.classification <= ?)
32
+ ORDER BY eg.last_seen_at DESC
33
+ LIMIT 10
34
+ `).all(normalized, normalized, maxClassification);
35
+ }
36
+ /** Check if an entity exists in the graph. */
37
+ export function isKnownEntity(db, entity) {
38
+ const normalized = entity.toLowerCase();
39
+ const row = db.prepare(`SELECT 1 FROM entity_graph WHERE entity_a = ? OR entity_b = ? LIMIT 1`).get(normalized, normalized);
40
+ return row !== undefined;
41
+ }
42
+ //# sourceMappingURL=entity-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-graph.js","sourceRoot":"","sources":["../../src/entity-graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,oDAAoD;AACpD,MAAM,UAAU,UAAU,CACxB,EAAqB,EACrB,IAAyF;IAEzF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,EAAE,CAAC,OAAO,CAAC;;;;;;GAMV,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,EAAqB,EACrB,MAAc,EACd,iBAAyB;IAEzB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;;;GAQjB,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,CAAiB,CAAC;AACpE,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,MAAc;IACjE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CACpB,uEAAuE,CACxE,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9B,OAAO,GAAG,KAAK,SAAS,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * env-schema.ts — Central env var schema for abmind.
3
+ * Single source of truth. All env access goes through getAbmindEnv().
4
+ */
5
+ export interface AbmindEnvConfig {
6
+ readonly abmindHome: string;
7
+ readonly memoryDir: string;
8
+ readonly memorySearchMode: string;
9
+ readonly memoryMaxDbSizeMb: number;
10
+ readonly memoryOriginalTtlDays: number;
11
+ readonly memoryEnglishTtlDays: number;
12
+ readonly memoryAgingEnabled: boolean;
13
+ readonly memoryIpc: boolean;
14
+ readonly memoryBackend: string;
15
+ readonly embeddingEnabled: boolean;
16
+ readonly embeddingProvider: "ollama" | "openai";
17
+ readonly embeddingModel: string;
18
+ readonly embeddingUrl: string;
19
+ readonly embeddingApiKey: string;
20
+ readonly embeddingDimensions: number;
21
+ readonly embeddingSimilarityThreshold: number;
22
+ readonly signatureBits: number;
23
+ readonly recallDecayDays: number;
24
+ readonly recallDecayFloor: number;
25
+ readonly recallEmotionBoost: number;
26
+ readonly abmlMinChars: number;
27
+ readonly abmlVersion: "plain" | "v0" | "v1" | "v2";
28
+ readonly contextTierEnabled: boolean;
29
+ readonly contextTierTail: number;
30
+ readonly contextTierMiddle: number;
31
+ readonly compactionLlmEnabled: boolean;
32
+ readonly sleepQuality: string | undefined;
33
+ readonly sleepTimeoutMin: number;
34
+ readonly sleepMaxLlmCalls: number;
35
+ readonly sleepCurationDay: string;
36
+ readonly sleepModelName: string;
37
+ readonly sleepCtxWindow: number;
38
+ readonly keyFile: string;
39
+ }
40
+ /** Get parsed env config. Auto-initializes on first call. */
41
+ export declare function getAbmindEnv(): Readonly<AbmindEnvConfig>;
42
+ /** Initialize env config from process.env. Call once at boot or auto-called by getAbmindEnv(). */
43
+ export declare function initAbmindEnv(): Readonly<AbmindEnvConfig>;
44
+ /** Reset singleton (for tests only). */
45
+ export declare function _resetAbmindEnv(): void;
46
+ //# sourceMappingURL=env-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-schema.d.ts","sourceRoot":"","sources":["../../src/env-schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2BH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAEnD,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD,6DAA6D;AAC7D,wBAAgB,YAAY,IAAI,QAAQ,CAAC,eAAe,CAAC,CAGxD;AAED,kGAAkG;AAClG,wBAAgB,aAAa,IAAI,QAAQ,CAAC,eAAe,CAAC,CAuDzD;AAED,wCAAwC;AACxC,wBAAgB,eAAe,IAAI,IAAI,CAAiB"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * env-schema.ts — Central env var schema for abmind.
3
+ * Single source of truth. All env access goes through getAbmindEnv().
4
+ */
5
+ import { logInfo, logWarn } from "./mem-logger.js";
6
+ import { homedir } from "node:os";
7
+ import { join } from "node:path";
8
+ // ── Parsing helpers ─────────────────────────────────────────────────────────
9
+ function intSafe(raw, name, fallback) {
10
+ const n = parseInt(raw, 10);
11
+ if (isNaN(n)) {
12
+ logWarn("env", `Invalid ${name}: "${raw}" — using default ${fallback}`);
13
+ return fallback;
14
+ }
15
+ return n;
16
+ }
17
+ function floatSafe(raw, name, fallback) {
18
+ const n = parseFloat(raw);
19
+ if (isNaN(n)) {
20
+ logWarn("env", `Invalid ${name}: "${raw}" — using default ${fallback}`);
21
+ return fallback;
22
+ }
23
+ return n;
24
+ }
25
+ function clamp(val, min, max, name, fallback) {
26
+ if (val < min || val > max) {
27
+ logWarn("env", `${name}=${val} out of range [${min},${max}] — using default ${fallback}`);
28
+ return fallback;
29
+ }
30
+ return val;
31
+ }
32
+ // ── Singleton ───────────────────────────────────────────────────────────────
33
+ let _env = null;
34
+ /** Get parsed env config. Auto-initializes on first call. */
35
+ export function getAbmindEnv() {
36
+ if (!_env)
37
+ initAbmindEnv();
38
+ return _env;
39
+ }
40
+ /** Initialize env config from process.env. Call once at boot or auto-called by getAbmindEnv(). */
41
+ export function initAbmindEnv() {
42
+ const read = (k) => process.env[k]?.trim() || undefined;
43
+ const readOr = (k, d) => read(k) ?? d;
44
+ const abmindHome = readOr("ABMIND_HOME", join(homedir(), ".abmind"));
45
+ const env = {
46
+ abmindHome,
47
+ memoryDir: readOr("MEMORY_DIR", join(abmindHome, "memory")),
48
+ memorySearchMode: readOr("MEMORY_SEARCH_MODE", "hybrid"),
49
+ memoryMaxDbSizeMb: intSafe(readOr("MEMORY_MAX_DB_SIZE_MB", "4096"), "MEMORY_MAX_DB_SIZE_MB", 4096),
50
+ memoryOriginalTtlDays: intSafe(readOr("MEMORY_ORIGINAL_TTL_DAYS", "90"), "MEMORY_ORIGINAL_TTL_DAYS", 90),
51
+ memoryEnglishTtlDays: intSafe(readOr("MEMORY_ENGLISH_TTL_DAYS", "14"), "MEMORY_ENGLISH_TTL_DAYS", 14),
52
+ memoryAgingEnabled: read("MEMORY_AGING_ENABLED") !== "false",
53
+ memoryIpc: read("MEMORY_IPC") !== "0",
54
+ memoryBackend: readOr("MEMORY_BACKEND", "sqlite"),
55
+ embeddingEnabled: read("EMBEDDING_ENABLED") === "true",
56
+ embeddingProvider: (() => {
57
+ const v = readOr("EMBEDDING_PROVIDER", "ollama").toLowerCase();
58
+ return v === "openai" ? "openai" : "ollama";
59
+ })(),
60
+ embeddingModel: readOr("EMBEDDING_MODEL", "nomic-embed-text"),
61
+ embeddingUrl: readOr("EMBEDDING_URL", "http://localhost:11434"),
62
+ embeddingApiKey: readOr("EMBEDDING_API_KEY", ""),
63
+ embeddingDimensions: intSafe(readOr("EMBEDDING_DIMENSIONS", "768"), "EMBEDDING_DIMENSIONS", 768),
64
+ embeddingSimilarityThreshold: clamp(floatSafe(readOr("EMBEDDING_SIMILARITY_THRESHOLD", "0.5"), "EMBEDDING_SIMILARITY_THRESHOLD", 0.5), 0, 1, "EMBEDDING_SIMILARITY_THRESHOLD", 0.5),
65
+ signatureBits: intSafe(readOr("SIGNATURE_BITS", "256"), "SIGNATURE_BITS", 256),
66
+ recallDecayDays: intSafe(readOr("RECALL_DECAY_DAYS", "365"), "RECALL_DECAY_DAYS", 365),
67
+ recallDecayFloor: clamp(floatSafe(readOr("RECALL_DECAY_FLOOR", "0.3"), "RECALL_DECAY_FLOOR", 0.3), 0, 1, "RECALL_DECAY_FLOOR", 0.3),
68
+ recallEmotionBoost: floatSafe(readOr("RECALL_EMOTION_BOOST", "0.1"), "RECALL_EMOTION_BOOST", 0.1),
69
+ abmlMinChars: intSafe(readOr("ABML_MIN_CHARS", "100"), "ABML_MIN_CHARS", 100),
70
+ abmlVersion: (() => { const v = readOr("ABML_VERSION", "plain"); if (v === "v2")
71
+ return "v2"; if (v === "v1")
72
+ return "v1"; if (v === "v0")
73
+ return "v0"; return "plain"; })(),
74
+ // #348 — three-tier context assembly
75
+ contextTierEnabled: readOr("CONTEXT_TIER_ENABLED", "true").toLowerCase() !== "false",
76
+ contextTierTail: intSafe(readOr("CONTEXT_TIER_TAIL", "20"), "CONTEXT_TIER_TAIL", 20),
77
+ contextTierMiddle: intSafe(readOr("CONTEXT_TIER_MIDDLE", "50"), "CONTEXT_TIER_MIDDLE", 50),
78
+ compactionLlmEnabled: readOr("COMPACTION_LLM_ENABLED", "false").toLowerCase() === "true",
79
+ sleepQuality: read("SLEEP_QUALITY"),
80
+ sleepTimeoutMin: intSafe(readOr("SLEEP_TIMEOUT_MIN", "55"), "SLEEP_TIMEOUT_MIN", 55),
81
+ sleepMaxLlmCalls: Math.min(intSafe(readOr("SLEEP_MAX_LLM_CALLS", "15"), "SLEEP_MAX_LLM_CALLS", 15), 50),
82
+ sleepCurationDay: readOr("SLEEP_CURATION_DAY", "sunday").toLowerCase(),
83
+ sleepModelName: readOr("SLEEP_MODEL_NAME", "unknown"),
84
+ sleepCtxWindow: intSafe(readOr("AGENT_SLEEP_CTX_WINDOW", "128000"), "AGENT_SLEEP_CTX_WINDOW", 128000),
85
+ keyFile: readOr("ABMIND_KEY_FILE", join(abmindHome, "secret", "abmind.key")),
86
+ };
87
+ logInfo("env", `${Object.keys(env).length} vars loaded`);
88
+ _env = Object.freeze(env);
89
+ return _env;
90
+ }
91
+ /** Reset singleton (for tests only). */
92
+ export function _resetAbmindEnv() { _env = null; }
93
+ //# sourceMappingURL=env-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-schema.js","sourceRoot":"","sources":["../../src/env-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared helpers for Kiro hook subcommands (#344).
3
+ *
4
+ * Hook subcommands must NEVER block the user's chat turn. On any unexpected
5
+ * failure, they write to the error log and exit 0 with empty stdout. The
6
+ * error log is surfaced via `abmind hook doctor` and `abmind status`.
7
+ */
8
+ /** Append a timestamped entry to the hook error log. Never throws. */
9
+ export declare function logHookError(hookName: string, err: unknown): void;
10
+ /** Ensure the hooks dir exists. Never throws. */
11
+ export declare function ensureHooksDir(): void;
12
+ /** Read and parse JSON from stdin. Returns null on any error. */
13
+ export declare function readStdinJson<T = unknown>(): Promise<T | null>;
14
+ /** Whether hooks are globally disabled via env var. */
15
+ export declare function hooksDisabled(): boolean;
16
+ //# sourceMappingURL=hook-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-helpers.d.ts","sourceRoot":"","sources":["../../src/hook-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,IAAI,CAUjE;AAED,iDAAiD;AACjD,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAED,iEAAiE;AACjE,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAgBpE;AAED,uDAAuD;AACvD,wBAAgB,aAAa,IAAI,OAAO,CAGvC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Shared helpers for Kiro hook subcommands (#344).
3
+ *
4
+ * Hook subcommands must NEVER block the user's chat turn. On any unexpected
5
+ * failure, they write to the error log and exit 0 with empty stdout. The
6
+ * error log is surfaced via `abmind hook doctor` and `abmind status`.
7
+ */
8
+ import { appendFileSync, mkdirSync } from "node:fs";
9
+ import { dirname } from "node:path";
10
+ import { abmindHooksDir, hookErrorLogPath } from "./mem-paths.js";
11
+ /** Append a timestamped entry to the hook error log. Never throws. */
12
+ export function logHookError(hookName, err) {
13
+ try {
14
+ const ts = new Date().toISOString();
15
+ const msg = err instanceof Error ? err.message : String(err);
16
+ const line = `${ts} [${hookName}] ${msg}\n`;
17
+ mkdirSync(dirname(hookErrorLogPath()), { recursive: true });
18
+ appendFileSync(hookErrorLogPath(), line);
19
+ }
20
+ catch {
21
+ // If even the error log write fails, silently give up — don't block the hook.
22
+ }
23
+ }
24
+ /** Ensure the hooks dir exists. Never throws. */
25
+ export function ensureHooksDir() {
26
+ try {
27
+ mkdirSync(abmindHooksDir(), { recursive: true });
28
+ }
29
+ catch {
30
+ // Ignore — individual writers will surface their own errors if needed.
31
+ }
32
+ }
33
+ /** Read and parse JSON from stdin. Returns null on any error. */
34
+ export async function readStdinJson() {
35
+ return new Promise((resolve) => {
36
+ let buf = "";
37
+ process.stdin.setEncoding("utf-8");
38
+ process.stdin.on("data", (chunk) => { buf += chunk; });
39
+ process.stdin.on("end", () => {
40
+ if (!buf.trim()) {
41
+ resolve(null);
42
+ return;
43
+ }
44
+ try {
45
+ resolve(JSON.parse(buf));
46
+ }
47
+ catch {
48
+ resolve(null);
49
+ }
50
+ });
51
+ process.stdin.on("error", () => resolve(null));
52
+ // If stdin closed already with no data, resolve null after tick
53
+ setTimeout(() => {
54
+ if (!buf)
55
+ resolve(null);
56
+ }, 100);
57
+ });
58
+ }
59
+ /** Whether hooks are globally disabled via env var. */
60
+ export function hooksDisabled() {
61
+ const v = process.env.ABMIND_HOOKS_DISABLED?.toLowerCase().trim();
62
+ return v === "true" || v === "1" || v === "yes";
63
+ }
64
+ //# sourceMappingURL=hook-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-helpers.js","sourceRoot":"","sources":["../../src/hook-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElE,sEAAsE;AACtE,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,GAAY;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,GAAG,EAAE,KAAK,QAAQ,KAAK,GAAG,IAAI,CAAC;QAC5C,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,cAAc,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,8EAA8E;IAChF,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,EAAE;QACvC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YAC3C,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC,CAAC;YAAC,CAAC;YACtC,MAAM,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,gEAAgE;QAChE,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,GAAG;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAClE,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;AAClD,CAAC"}