@kernel.chat/kbot 3.61.8 → 3.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (648) hide show
  1. package/README.md +275 -1
  2. package/dist/agent.js +4 -1
  3. package/dist/cli.js +75 -1
  4. package/dist/dream.d.ts +66 -0
  5. package/dist/dream.js +377 -0
  6. package/dist/tools/dream-tools.d.ts +2 -0
  7. package/dist/tools/dream-tools.js +159 -0
  8. package/dist/tools/index.js +1 -0
  9. package/ollama-manifest.json +1 -1
  10. package/package.json +9 -122
  11. package/dist/a2a-client.d.ts.map +0 -1
  12. package/dist/a2a-client.js.map +0 -1
  13. package/dist/a2a.d.ts.map +0 -1
  14. package/dist/a2a.js.map +0 -1
  15. package/dist/agent-create.d.ts.map +0 -1
  16. package/dist/agent-create.js.map +0 -1
  17. package/dist/agent-protocol.d.ts.map +0 -1
  18. package/dist/agent-protocol.js.map +0 -1
  19. package/dist/agent-protocol.test.d.ts +0 -2
  20. package/dist/agent-protocol.test.d.ts.map +0 -1
  21. package/dist/agent-protocol.test.js +0 -730
  22. package/dist/agent-protocol.test.js.map +0 -1
  23. package/dist/agent-teams.d.ts.map +0 -1
  24. package/dist/agent-teams.js.map +0 -1
  25. package/dist/agent.d.ts.map +0 -1
  26. package/dist/agent.js.map +0 -1
  27. package/dist/agents/agents.test.d.ts +0 -2
  28. package/dist/agents/agents.test.d.ts.map +0 -1
  29. package/dist/agents/agents.test.js +0 -127
  30. package/dist/agents/agents.test.js.map +0 -1
  31. package/dist/agents/creative.d.ts.map +0 -1
  32. package/dist/agents/creative.js.map +0 -1
  33. package/dist/agents/developer.d.ts.map +0 -1
  34. package/dist/agents/developer.js.map +0 -1
  35. package/dist/agents/gamedev.d.ts.map +0 -1
  36. package/dist/agents/gamedev.js.map +0 -1
  37. package/dist/agents/playtester.d.ts.map +0 -1
  38. package/dist/agents/playtester.js.map +0 -1
  39. package/dist/agents/producer.d.ts.map +0 -1
  40. package/dist/agents/producer.js.map +0 -1
  41. package/dist/agents/replit.d.ts.map +0 -1
  42. package/dist/agents/replit.js.map +0 -1
  43. package/dist/agents/specialists.d.ts.map +0 -1
  44. package/dist/agents/specialists.js.map +0 -1
  45. package/dist/agents/trader.d.ts.map +0 -1
  46. package/dist/agents/trader.js.map +0 -1
  47. package/dist/architect.d.ts.map +0 -1
  48. package/dist/architect.js.map +0 -1
  49. package/dist/auth.d.ts.map +0 -1
  50. package/dist/auth.js.map +0 -1
  51. package/dist/auth.test.d.ts +0 -2
  52. package/dist/auth.test.d.ts.map +0 -1
  53. package/dist/auth.test.js +0 -87
  54. package/dist/auth.test.js.map +0 -1
  55. package/dist/automations.d.ts.map +0 -1
  56. package/dist/automations.js.map +0 -1
  57. package/dist/autonomous-contributor.d.ts.map +0 -1
  58. package/dist/autonomous-contributor.js.map +0 -1
  59. package/dist/autopoiesis.d.ts.map +0 -1
  60. package/dist/autopoiesis.js.map +0 -1
  61. package/dist/behaviour.d.ts.map +0 -1
  62. package/dist/behaviour.js.map +0 -1
  63. package/dist/bench.d.ts.map +0 -1
  64. package/dist/bench.js.map +0 -1
  65. package/dist/bootstrap.d.ts.map +0 -1
  66. package/dist/bootstrap.js.map +0 -1
  67. package/dist/briefing.d.ts.map +0 -1
  68. package/dist/briefing.js.map +0 -1
  69. package/dist/build-targets.d.ts.map +0 -1
  70. package/dist/build-targets.js.map +0 -1
  71. package/dist/changelog.d.ts.map +0 -1
  72. package/dist/changelog.js.map +0 -1
  73. package/dist/channels/kbot-channel.d.ts.map +0 -1
  74. package/dist/channels/kbot-channel.js.map +0 -1
  75. package/dist/checkpoint.d.ts.map +0 -1
  76. package/dist/checkpoint.js.map +0 -1
  77. package/dist/cli.d.ts.map +0 -1
  78. package/dist/cli.js.map +0 -1
  79. package/dist/cloud-agent.d.ts.map +0 -1
  80. package/dist/cloud-agent.js.map +0 -1
  81. package/dist/cloud-sync.d.ts.map +0 -1
  82. package/dist/cloud-sync.js.map +0 -1
  83. package/dist/codebase-guardian.d.ts.map +0 -1
  84. package/dist/codebase-guardian.js.map +0 -1
  85. package/dist/collective-learning.d.ts.map +0 -1
  86. package/dist/collective-learning.js.map +0 -1
  87. package/dist/collective-network.d.ts.map +0 -1
  88. package/dist/collective-network.js.map +0 -1
  89. package/dist/collective.d.ts.map +0 -1
  90. package/dist/collective.js.map +0 -1
  91. package/dist/community-autopilot.d.ts.map +0 -1
  92. package/dist/community-autopilot.js.map +0 -1
  93. package/dist/community-manager.d.ts.map +0 -1
  94. package/dist/community-manager.js.map +0 -1
  95. package/dist/compete.d.ts.map +0 -1
  96. package/dist/compete.js.map +0 -1
  97. package/dist/completions.d.ts.map +0 -1
  98. package/dist/completions.js.map +0 -1
  99. package/dist/confidence.d.ts.map +0 -1
  100. package/dist/confidence.js.map +0 -1
  101. package/dist/consultation.d.ts.map +0 -1
  102. package/dist/consultation.js.map +0 -1
  103. package/dist/consultation.test.d.ts +0 -2
  104. package/dist/consultation.test.d.ts.map +0 -1
  105. package/dist/consultation.test.js +0 -86
  106. package/dist/consultation.test.js.map +0 -1
  107. package/dist/context-manager.d.ts.map +0 -1
  108. package/dist/context-manager.js.map +0 -1
  109. package/dist/context-manager.test.d.ts +0 -2
  110. package/dist/context-manager.test.d.ts.map +0 -1
  111. package/dist/context-manager.test.js +0 -121
  112. package/dist/context-manager.test.js.map +0 -1
  113. package/dist/context.d.ts.map +0 -1
  114. package/dist/context.js.map +0 -1
  115. package/dist/context.test.d.ts +0 -2
  116. package/dist/context.test.d.ts.map +0 -1
  117. package/dist/context.test.js +0 -561
  118. package/dist/context.test.js.map +0 -1
  119. package/dist/cross-device-sync.d.ts.map +0 -1
  120. package/dist/cross-device-sync.js.map +0 -1
  121. package/dist/daemon.d.ts.map +0 -1
  122. package/dist/daemon.js.map +0 -1
  123. package/dist/dashboard.d.ts.map +0 -1
  124. package/dist/dashboard.js.map +0 -1
  125. package/dist/decision-journal.d.ts.map +0 -1
  126. package/dist/decision-journal.js.map +0 -1
  127. package/dist/digest.d.ts.map +0 -1
  128. package/dist/digest.js.map +0 -1
  129. package/dist/discovery.d.ts.map +0 -1
  130. package/dist/discovery.js.map +0 -1
  131. package/dist/doctor.d.ts.map +0 -1
  132. package/dist/doctor.js.map +0 -1
  133. package/dist/doctor.test.d.ts +0 -2
  134. package/dist/doctor.test.d.ts.map +0 -1
  135. package/dist/doctor.test.js +0 -432
  136. package/dist/doctor.test.js.map +0 -1
  137. package/dist/dream-mode.d.ts.map +0 -1
  138. package/dist/dream-mode.js.map +0 -1
  139. package/dist/email-agent.d.ts.map +0 -1
  140. package/dist/email-agent.js.map +0 -1
  141. package/dist/email-service.d.ts.map +0 -1
  142. package/dist/email-service.js.map +0 -1
  143. package/dist/embeddings.d.ts.map +0 -1
  144. package/dist/embeddings.js.map +0 -1
  145. package/dist/emergent-swarm.d.ts.map +0 -1
  146. package/dist/emergent-swarm.js.map +0 -1
  147. package/dist/entropy-context.d.ts.map +0 -1
  148. package/dist/entropy-context.js.map +0 -1
  149. package/dist/episodic-memory.d.ts.map +0 -1
  150. package/dist/episodic-memory.js.map +0 -1
  151. package/dist/error-correction.d.ts.map +0 -1
  152. package/dist/error-correction.js.map +0 -1
  153. package/dist/evolution.d.ts.map +0 -1
  154. package/dist/evolution.js.map +0 -1
  155. package/dist/evolution.test.d.ts +0 -2
  156. package/dist/evolution.test.d.ts.map +0 -1
  157. package/dist/evolution.test.js +0 -160
  158. package/dist/evolution.test.js.map +0 -1
  159. package/dist/export.d.ts.map +0 -1
  160. package/dist/export.js.map +0 -1
  161. package/dist/forge-marketplace-server.d.ts.map +0 -1
  162. package/dist/forge-marketplace-server.js.map +0 -1
  163. package/dist/forge-marketplace.d.ts.map +0 -1
  164. package/dist/forge-marketplace.js.map +0 -1
  165. package/dist/forge-registry.d.ts.map +0 -1
  166. package/dist/forge-registry.js.map +0 -1
  167. package/dist/free-energy.d.ts.map +0 -1
  168. package/dist/free-energy.js.map +0 -1
  169. package/dist/gitagent-export.d.ts.map +0 -1
  170. package/dist/gitagent-export.js.map +0 -1
  171. package/dist/github-release.d.ts.map +0 -1
  172. package/dist/github-release.js.map +0 -1
  173. package/dist/godel-limits.d.ts.map +0 -1
  174. package/dist/godel-limits.js.map +0 -1
  175. package/dist/graph-memory.d.ts.map +0 -1
  176. package/dist/graph-memory.js.map +0 -1
  177. package/dist/graph-memory.test.d.ts +0 -2
  178. package/dist/graph-memory.test.d.ts.map +0 -1
  179. package/dist/graph-memory.test.js +0 -946
  180. package/dist/graph-memory.test.js.map +0 -1
  181. package/dist/guardrails.d.ts.map +0 -1
  182. package/dist/guardrails.js.map +0 -1
  183. package/dist/handoffs.d.ts.map +0 -1
  184. package/dist/handoffs.js.map +0 -1
  185. package/dist/hooks-integration.d.ts.map +0 -1
  186. package/dist/hooks-integration.js.map +0 -1
  187. package/dist/hooks.d.ts.map +0 -1
  188. package/dist/hooks.js.map +0 -1
  189. package/dist/ide/acp-server.d.ts.map +0 -1
  190. package/dist/ide/acp-server.js.map +0 -1
  191. package/dist/ide/bridge.d.ts.map +0 -1
  192. package/dist/ide/bridge.js.map +0 -1
  193. package/dist/ide/index.d.ts.map +0 -1
  194. package/dist/ide/index.js.map +0 -1
  195. package/dist/ide/lsp-bridge.d.ts.map +0 -1
  196. package/dist/ide/lsp-bridge.js.map +0 -1
  197. package/dist/ide/mcp-server.d.ts.map +0 -1
  198. package/dist/ide/mcp-server.js.map +0 -1
  199. package/dist/imessage-agent.d.ts.map +0 -1
  200. package/dist/imessage-agent.js.map +0 -1
  201. package/dist/inference.d.ts.map +0 -1
  202. package/dist/inference.js.map +0 -1
  203. package/dist/init-science.d.ts.map +0 -1
  204. package/dist/init-science.js.map +0 -1
  205. package/dist/init.d.ts.map +0 -1
  206. package/dist/init.js.map +0 -1
  207. package/dist/init.test.d.ts +0 -2
  208. package/dist/init.test.d.ts.map +0 -1
  209. package/dist/init.test.js +0 -91
  210. package/dist/init.test.js.map +0 -1
  211. package/dist/integrated-information.d.ts.map +0 -1
  212. package/dist/integrated-information.js.map +0 -1
  213. package/dist/integrations/ableton-live.d.ts.map +0 -1
  214. package/dist/integrations/ableton-live.js.map +0 -1
  215. package/dist/integrations/ableton-m4l.d.ts.map +0 -1
  216. package/dist/integrations/ableton-m4l.js.map +0 -1
  217. package/dist/integrations/ableton-osc-installer.d.ts.map +0 -1
  218. package/dist/integrations/ableton-osc-installer.js.map +0 -1
  219. package/dist/integrations/ableton-osc.d.ts.map +0 -1
  220. package/dist/integrations/ableton-osc.js.map +0 -1
  221. package/dist/integrations/openclaw/plugin.d.ts.map +0 -1
  222. package/dist/integrations/openclaw/plugin.js.map +0 -1
  223. package/dist/intentionality.d.ts.map +0 -1
  224. package/dist/intentionality.js.map +0 -1
  225. package/dist/interactive-buttons.d.ts.map +0 -1
  226. package/dist/interactive-buttons.js.map +0 -1
  227. package/dist/interference.d.ts.map +0 -1
  228. package/dist/interference.js.map +0 -1
  229. package/dist/introspection.d.ts.map +0 -1
  230. package/dist/introspection.js.map +0 -1
  231. package/dist/kbot-service.d.ts.map +0 -1
  232. package/dist/kbot-service.js.map +0 -1
  233. package/dist/knowledge-base.d.ts.map +0 -1
  234. package/dist/knowledge-base.js.map +0 -1
  235. package/dist/lab.d.ts.map +0 -1
  236. package/dist/lab.js.map +0 -1
  237. package/dist/learned-router.d.ts.map +0 -1
  238. package/dist/learned-router.js.map +0 -1
  239. package/dist/learning.d.ts.map +0 -1
  240. package/dist/learning.js.map +0 -1
  241. package/dist/learning.test.d.ts +0 -2
  242. package/dist/learning.test.d.ts.map +0 -1
  243. package/dist/learning.test.js +0 -106
  244. package/dist/learning.test.js.map +0 -1
  245. package/dist/lsp-client.d.ts.map +0 -1
  246. package/dist/lsp-client.js.map +0 -1
  247. package/dist/lsp-deep.d.ts.map +0 -1
  248. package/dist/lsp-deep.js.map +0 -1
  249. package/dist/machine.d.ts.map +0 -1
  250. package/dist/machine.js.map +0 -1
  251. package/dist/marketplace.d.ts.map +0 -1
  252. package/dist/marketplace.js.map +0 -1
  253. package/dist/matrix.d.ts.map +0 -1
  254. package/dist/matrix.js.map +0 -1
  255. package/dist/mcp-apps.d.ts.map +0 -1
  256. package/dist/mcp-apps.js.map +0 -1
  257. package/dist/mcp-plugins.d.ts.map +0 -1
  258. package/dist/mcp-plugins.js.map +0 -1
  259. package/dist/memory-hotswap.d.ts.map +0 -1
  260. package/dist/memory-hotswap.js.map +0 -1
  261. package/dist/memory-synthesis.d.ts.map +0 -1
  262. package/dist/memory-synthesis.js.map +0 -1
  263. package/dist/memory-synthesis.test.d.ts +0 -2
  264. package/dist/memory-synthesis.test.d.ts.map +0 -1
  265. package/dist/memory-synthesis.test.js +0 -83
  266. package/dist/memory-synthesis.test.js.map +0 -1
  267. package/dist/memory.d.ts.map +0 -1
  268. package/dist/memory.js.map +0 -1
  269. package/dist/memory.test.d.ts +0 -2
  270. package/dist/memory.test.d.ts.map +0 -1
  271. package/dist/memory.test.js +0 -450
  272. package/dist/memory.test.js.map +0 -1
  273. package/dist/meta-agent.d.ts.map +0 -1
  274. package/dist/meta-agent.js.map +0 -1
  275. package/dist/migrate.d.ts.map +0 -1
  276. package/dist/migrate.js.map +0 -1
  277. package/dist/multi-session.d.ts.map +0 -1
  278. package/dist/multi-session.js.map +0 -1
  279. package/dist/multimodal.d.ts.map +0 -1
  280. package/dist/multimodal.js.map +0 -1
  281. package/dist/music-learning.d.ts.map +0 -1
  282. package/dist/music-learning.js.map +0 -1
  283. package/dist/notifications.d.ts.map +0 -1
  284. package/dist/notifications.js.map +0 -1
  285. package/dist/observer.d.ts.map +0 -1
  286. package/dist/observer.js.map +0 -1
  287. package/dist/openclaw-connect.d.ts.map +0 -1
  288. package/dist/openclaw-connect.js.map +0 -1
  289. package/dist/packages/kbot/src/tools/mcp-client.d.ts.map +0 -1
  290. package/dist/packages/kbot/src/tools/mcp-client.js.map +0 -1
  291. package/dist/packages/kbot/src/tools/mcp-discovery.d.ts.map +0 -1
  292. package/dist/packages/kbot/src/tools/mcp-discovery.js.map +0 -1
  293. package/dist/packages/kbot/src/tools/memory-harness.d.ts.map +0 -1
  294. package/dist/packages/kbot/src/tools/memory-harness.js.map +0 -1
  295. package/dist/pair.d.ts.map +0 -1
  296. package/dist/pair.js.map +0 -1
  297. package/dist/pattern-feed.d.ts.map +0 -1
  298. package/dist/pattern-feed.js.map +0 -1
  299. package/dist/permissions.d.ts.map +0 -1
  300. package/dist/permissions.js.map +0 -1
  301. package/dist/personal-security.d.ts.map +0 -1
  302. package/dist/personal-security.js.map +0 -1
  303. package/dist/planner.d.ts.map +0 -1
  304. package/dist/planner.js.map +0 -1
  305. package/dist/plugin/index.d.ts.map +0 -1
  306. package/dist/plugin/index.js.map +0 -1
  307. package/dist/plugin-sdk.d.ts.map +0 -1
  308. package/dist/plugin-sdk.js.map +0 -1
  309. package/dist/plugins.d.ts.map +0 -1
  310. package/dist/plugins.js.map +0 -1
  311. package/dist/predictive-processing.d.ts.map +0 -1
  312. package/dist/predictive-processing.js.map +0 -1
  313. package/dist/privacy-router.d.ts.map +0 -1
  314. package/dist/privacy-router.js.map +0 -1
  315. package/dist/prompt-cache.d.ts.map +0 -1
  316. package/dist/prompt-cache.js.map +0 -1
  317. package/dist/prompt-evolution.d.ts.map +0 -1
  318. package/dist/prompt-evolution.js.map +0 -1
  319. package/dist/provider-fallback.d.ts.map +0 -1
  320. package/dist/provider-fallback.js.map +0 -1
  321. package/dist/quality-diversity.d.ts.map +0 -1
  322. package/dist/quality-diversity.js.map +0 -1
  323. package/dist/rate-limiter.d.ts.map +0 -1
  324. package/dist/rate-limiter.js.map +0 -1
  325. package/dist/reasoning.d.ts.map +0 -1
  326. package/dist/reasoning.js.map +0 -1
  327. package/dist/record.d.ts.map +0 -1
  328. package/dist/record.js.map +0 -1
  329. package/dist/reflection.d.ts.map +0 -1
  330. package/dist/reflection.js.map +0 -1
  331. package/dist/replit.d.ts.map +0 -1
  332. package/dist/replit.js.map +0 -1
  333. package/dist/repo-map.d.ts.map +0 -1
  334. package/dist/repo-map.js.map +0 -1
  335. package/dist/sandbox-policy.d.ts.map +0 -1
  336. package/dist/sandbox-policy.js.map +0 -1
  337. package/dist/sdk.d.ts.map +0 -1
  338. package/dist/sdk.js.map +0 -1
  339. package/dist/seed-knowledge.d.ts.map +0 -1
  340. package/dist/seed-knowledge.js.map +0 -1
  341. package/dist/self-defense.d.ts.map +0 -1
  342. package/dist/self-defense.js.map +0 -1
  343. package/dist/self-eval.d.ts.map +0 -1
  344. package/dist/self-eval.js.map +0 -1
  345. package/dist/serve.d.ts.map +0 -1
  346. package/dist/serve.js.map +0 -1
  347. package/dist/sessions.d.ts.map +0 -1
  348. package/dist/sessions.js.map +0 -1
  349. package/dist/sessions.test.d.ts +0 -2
  350. package/dist/sessions.test.d.ts.map +0 -1
  351. package/dist/sessions.test.js +0 -55
  352. package/dist/sessions.test.js.map +0 -1
  353. package/dist/share.d.ts.map +0 -1
  354. package/dist/share.js.map +0 -1
  355. package/dist/side-conversation.d.ts.map +0 -1
  356. package/dist/side-conversation.js.map +0 -1
  357. package/dist/simulation.d.ts.map +0 -1
  358. package/dist/simulation.js.map +0 -1
  359. package/dist/skill-library.d.ts.map +0 -1
  360. package/dist/skill-library.js.map +0 -1
  361. package/dist/skill-rating.d.ts.map +0 -1
  362. package/dist/skill-rating.js.map +0 -1
  363. package/dist/skill-system.d.ts.map +0 -1
  364. package/dist/skill-system.js.map +0 -1
  365. package/dist/skills-loader.d.ts.map +0 -1
  366. package/dist/skills-loader.js.map +0 -1
  367. package/dist/spec.d.ts.map +0 -1
  368. package/dist/spec.js.map +0 -1
  369. package/dist/strange-loops.d.ts.map +0 -1
  370. package/dist/strange-loops.js.map +0 -1
  371. package/dist/streaming.d.ts.map +0 -1
  372. package/dist/streaming.js.map +0 -1
  373. package/dist/streaming.test.d.ts +0 -2
  374. package/dist/streaming.test.d.ts.map +0 -1
  375. package/dist/streaming.test.js +0 -41
  376. package/dist/streaming.test.js.map +0 -1
  377. package/dist/synthesis-engine.d.ts.map +0 -1
  378. package/dist/synthesis-engine.js.map +0 -1
  379. package/dist/task-ledger.d.ts.map +0 -1
  380. package/dist/task-ledger.js.map +0 -1
  381. package/dist/teach.d.ts.map +0 -1
  382. package/dist/teach.js.map +0 -1
  383. package/dist/team.d.ts.map +0 -1
  384. package/dist/team.js.map +0 -1
  385. package/dist/telemetry.d.ts.map +0 -1
  386. package/dist/telemetry.js.map +0 -1
  387. package/dist/temporal.d.ts.map +0 -1
  388. package/dist/temporal.js.map +0 -1
  389. package/dist/terminal-caps.d.ts.map +0 -1
  390. package/dist/terminal-caps.js.map +0 -1
  391. package/dist/tool-pipeline.d.ts.map +0 -1
  392. package/dist/tool-pipeline.js.map +0 -1
  393. package/dist/tools/ableton-knowledge.d.ts.map +0 -1
  394. package/dist/tools/ableton-knowledge.js.map +0 -1
  395. package/dist/tools/ableton.d.ts.map +0 -1
  396. package/dist/tools/ableton.js.map +0 -1
  397. package/dist/tools/admin.d.ts.map +0 -1
  398. package/dist/tools/admin.js.map +0 -1
  399. package/dist/tools/analytics.d.ts.map +0 -1
  400. package/dist/tools/analytics.js.map +0 -1
  401. package/dist/tools/arrangement-engine.d.ts.map +0 -1
  402. package/dist/tools/arrangement-engine.js.map +0 -1
  403. package/dist/tools/audit.d.ts.map +0 -1
  404. package/dist/tools/audit.js.map +0 -1
  405. package/dist/tools/background.d.ts.map +0 -1
  406. package/dist/tools/background.js.map +0 -1
  407. package/dist/tools/bash.d.ts.map +0 -1
  408. package/dist/tools/bash.js.map +0 -1
  409. package/dist/tools/bash.test.d.ts +0 -2
  410. package/dist/tools/bash.test.d.ts.map +0 -1
  411. package/dist/tools/bash.test.js +0 -284
  412. package/dist/tools/bash.test.js.map +0 -1
  413. package/dist/tools/bootstrapper.d.ts.map +0 -1
  414. package/dist/tools/bootstrapper.js.map +0 -1
  415. package/dist/tools/browser-agent.d.ts.map +0 -1
  416. package/dist/tools/browser-agent.js.map +0 -1
  417. package/dist/tools/browser.d.ts.map +0 -1
  418. package/dist/tools/browser.js.map +0 -1
  419. package/dist/tools/build-matrix.d.ts.map +0 -1
  420. package/dist/tools/build-matrix.js.map +0 -1
  421. package/dist/tools/comfyui-plugin.d.ts.map +0 -1
  422. package/dist/tools/comfyui-plugin.js.map +0 -1
  423. package/dist/tools/composio.d.ts.map +0 -1
  424. package/dist/tools/composio.js.map +0 -1
  425. package/dist/tools/computer.d.ts.map +0 -1
  426. package/dist/tools/computer.js.map +0 -1
  427. package/dist/tools/containers.d.ts.map +0 -1
  428. package/dist/tools/containers.js.map +0 -1
  429. package/dist/tools/content-engine.d.ts.map +0 -1
  430. package/dist/tools/content-engine.js.map +0 -1
  431. package/dist/tools/contribute.d.ts.map +0 -1
  432. package/dist/tools/contribute.js.map +0 -1
  433. package/dist/tools/creative.d.ts.map +0 -1
  434. package/dist/tools/creative.js.map +0 -1
  435. package/dist/tools/creative.test.d.ts +0 -2
  436. package/dist/tools/creative.test.d.ts.map +0 -1
  437. package/dist/tools/creative.test.js +0 -281
  438. package/dist/tools/creative.test.js.map +0 -1
  439. package/dist/tools/ctf.d.ts.map +0 -1
  440. package/dist/tools/ctf.js.map +0 -1
  441. package/dist/tools/database.d.ts.map +0 -1
  442. package/dist/tools/database.js.map +0 -1
  443. package/dist/tools/db-admin.d.ts.map +0 -1
  444. package/dist/tools/db-admin.js.map +0 -1
  445. package/dist/tools/deploy-all.d.ts.map +0 -1
  446. package/dist/tools/deploy-all.js.map +0 -1
  447. package/dist/tools/deploy.d.ts.map +0 -1
  448. package/dist/tools/deploy.js.map +0 -1
  449. package/dist/tools/dj-set-builder.d.ts.map +0 -1
  450. package/dist/tools/dj-set-builder.js.map +0 -1
  451. package/dist/tools/documents.d.ts.map +0 -1
  452. package/dist/tools/documents.js.map +0 -1
  453. package/dist/tools/e2b-sandbox.d.ts.map +0 -1
  454. package/dist/tools/e2b-sandbox.js.map +0 -1
  455. package/dist/tools/email.d.ts.map +0 -1
  456. package/dist/tools/email.js.map +0 -1
  457. package/dist/tools/emergent.d.ts.map +0 -1
  458. package/dist/tools/emergent.js.map +0 -1
  459. package/dist/tools/env-manager.d.ts.map +0 -1
  460. package/dist/tools/env-manager.js.map +0 -1
  461. package/dist/tools/fetch.d.ts.map +0 -1
  462. package/dist/tools/fetch.js.map +0 -1
  463. package/dist/tools/fetch.test.d.ts +0 -2
  464. package/dist/tools/fetch.test.d.ts.map +0 -1
  465. package/dist/tools/fetch.test.js +0 -363
  466. package/dist/tools/fetch.test.js.map +0 -1
  467. package/dist/tools/files.d.ts.map +0 -1
  468. package/dist/tools/files.js.map +0 -1
  469. package/dist/tools/files.test.d.ts +0 -2
  470. package/dist/tools/files.test.d.ts.map +0 -1
  471. package/dist/tools/files.test.js +0 -395
  472. package/dist/tools/files.test.js.map +0 -1
  473. package/dist/tools/finance.d.ts.map +0 -1
  474. package/dist/tools/finance.js.map +0 -1
  475. package/dist/tools/finance.test.d.ts +0 -2
  476. package/dist/tools/finance.test.d.ts.map +0 -1
  477. package/dist/tools/finance.test.js +0 -245
  478. package/dist/tools/finance.test.js.map +0 -1
  479. package/dist/tools/forge.d.ts.map +0 -1
  480. package/dist/tools/forge.js.map +0 -1
  481. package/dist/tools/forge.test.d.ts +0 -2
  482. package/dist/tools/forge.test.d.ts.map +0 -1
  483. package/dist/tools/forge.test.js +0 -250
  484. package/dist/tools/forge.test.js.map +0 -1
  485. package/dist/tools/gamedev.d.ts.map +0 -1
  486. package/dist/tools/gamedev.js.map +0 -1
  487. package/dist/tools/gamedev.test.d.ts +0 -2
  488. package/dist/tools/gamedev.test.d.ts.map +0 -1
  489. package/dist/tools/gamedev.test.js +0 -937
  490. package/dist/tools/gamedev.test.js.map +0 -1
  491. package/dist/tools/git.d.ts.map +0 -1
  492. package/dist/tools/git.js.map +0 -1
  493. package/dist/tools/git.test.d.ts +0 -2
  494. package/dist/tools/git.test.d.ts.map +0 -1
  495. package/dist/tools/git.test.js +0 -303
  496. package/dist/tools/git.test.js.map +0 -1
  497. package/dist/tools/github.d.ts.map +0 -1
  498. package/dist/tools/github.js.map +0 -1
  499. package/dist/tools/hacker-toolkit.d.ts.map +0 -1
  500. package/dist/tools/hacker-toolkit.js.map +0 -1
  501. package/dist/tools/hypothesis-engine.d.ts.map +0 -1
  502. package/dist/tools/hypothesis-engine.js.map +0 -1
  503. package/dist/tools/index.d.ts.map +0 -1
  504. package/dist/tools/index.js.map +0 -1
  505. package/dist/tools/index.test.d.ts +0 -2
  506. package/dist/tools/index.test.d.ts.map +0 -1
  507. package/dist/tools/index.test.js +0 -155
  508. package/dist/tools/index.test.js.map +0 -1
  509. package/dist/tools/kbot-local.d.ts.map +0 -1
  510. package/dist/tools/kbot-local.js.map +0 -1
  511. package/dist/tools/lab-bio.d.ts.map +0 -1
  512. package/dist/tools/lab-bio.js.map +0 -1
  513. package/dist/tools/lab-chem.d.ts.map +0 -1
  514. package/dist/tools/lab-chem.js.map +0 -1
  515. package/dist/tools/lab-core.d.ts.map +0 -1
  516. package/dist/tools/lab-core.js.map +0 -1
  517. package/dist/tools/lab-data.d.ts.map +0 -1
  518. package/dist/tools/lab-data.js.map +0 -1
  519. package/dist/tools/lab-earth.d.ts.map +0 -1
  520. package/dist/tools/lab-earth.js.map +0 -1
  521. package/dist/tools/lab-frontier.d.ts.map +0 -1
  522. package/dist/tools/lab-frontier.js.map +0 -1
  523. package/dist/tools/lab-health.d.ts.map +0 -1
  524. package/dist/tools/lab-health.js.map +0 -1
  525. package/dist/tools/lab-humanities.d.ts.map +0 -1
  526. package/dist/tools/lab-humanities.js.map +0 -1
  527. package/dist/tools/lab-math.d.ts.map +0 -1
  528. package/dist/tools/lab-math.js.map +0 -1
  529. package/dist/tools/lab-neuro.d.ts.map +0 -1
  530. package/dist/tools/lab-neuro.js.map +0 -1
  531. package/dist/tools/lab-physics.d.ts.map +0 -1
  532. package/dist/tools/lab-physics.js.map +0 -1
  533. package/dist/tools/lab-social.d.ts.map +0 -1
  534. package/dist/tools/lab-social.js.map +0 -1
  535. package/dist/tools/lsp-tools.d.ts.map +0 -1
  536. package/dist/tools/lsp-tools.js.map +0 -1
  537. package/dist/tools/machine-tools.d.ts.map +0 -1
  538. package/dist/tools/machine-tools.js.map +0 -1
  539. package/dist/tools/magenta-plugin.d.ts.map +0 -1
  540. package/dist/tools/magenta-plugin.js.map +0 -1
  541. package/dist/tools/matrix.d.ts.map +0 -1
  542. package/dist/tools/matrix.js.map +0 -1
  543. package/dist/tools/mcp-client.d.ts.map +0 -1
  544. package/dist/tools/mcp-client.js.map +0 -1
  545. package/dist/tools/mcp-marketplace.d.ts.map +0 -1
  546. package/dist/tools/mcp-marketplace.js.map +0 -1
  547. package/dist/tools/memory-tools.d.ts.map +0 -1
  548. package/dist/tools/memory-tools.js.map +0 -1
  549. package/dist/tools/monitor.d.ts.map +0 -1
  550. package/dist/tools/monitor.js.map +0 -1
  551. package/dist/tools/music-theory.d.ts.map +0 -1
  552. package/dist/tools/music-theory.js.map +0 -1
  553. package/dist/tools/notebook.d.ts.map +0 -1
  554. package/dist/tools/notebook.js.map +0 -1
  555. package/dist/tools/openclaw.d.ts.map +0 -1
  556. package/dist/tools/openclaw.js.map +0 -1
  557. package/dist/tools/parallel.d.ts.map +0 -1
  558. package/dist/tools/parallel.js.map +0 -1
  559. package/dist/tools/pentest.d.ts.map +0 -1
  560. package/dist/tools/pentest.js.map +0 -1
  561. package/dist/tools/producer-engine.d.ts.map +0 -1
  562. package/dist/tools/producer-engine.js.map +0 -1
  563. package/dist/tools/quality.d.ts.map +0 -1
  564. package/dist/tools/quality.js.map +0 -1
  565. package/dist/tools/redblue.d.ts.map +0 -1
  566. package/dist/tools/redblue.js.map +0 -1
  567. package/dist/tools/research-notebook.d.ts.map +0 -1
  568. package/dist/tools/research-notebook.js.map +0 -1
  569. package/dist/tools/research-pipeline.d.ts.map +0 -1
  570. package/dist/tools/research-pipeline.js.map +0 -1
  571. package/dist/tools/research.d.ts.map +0 -1
  572. package/dist/tools/research.js.map +0 -1
  573. package/dist/tools/sandbox.d.ts.map +0 -1
  574. package/dist/tools/sandbox.js.map +0 -1
  575. package/dist/tools/science-graph.d.ts.map +0 -1
  576. package/dist/tools/science-graph.js.map +0 -1
  577. package/dist/tools/search.d.ts.map +0 -1
  578. package/dist/tools/search.js.map +0 -1
  579. package/dist/tools/search.test.d.ts +0 -2
  580. package/dist/tools/search.test.d.ts.map +0 -1
  581. package/dist/tools/search.test.js +0 -311
  582. package/dist/tools/search.test.js.map +0 -1
  583. package/dist/tools/security-brain.d.ts.map +0 -1
  584. package/dist/tools/security-brain.js.map +0 -1
  585. package/dist/tools/security-hunt.d.ts.map +0 -1
  586. package/dist/tools/security-hunt.js.map +0 -1
  587. package/dist/tools/security.d.ts.map +0 -1
  588. package/dist/tools/security.js.map +0 -1
  589. package/dist/tools/sentiment.d.ts.map +0 -1
  590. package/dist/tools/sentiment.js.map +0 -1
  591. package/dist/tools/serum2-preset.d.ts.map +0 -1
  592. package/dist/tools/serum2-preset.js.map +0 -1
  593. package/dist/tools/social.d.ts.map +0 -1
  594. package/dist/tools/social.js.map +0 -1
  595. package/dist/tools/sound-designer.d.ts.map +0 -1
  596. package/dist/tools/sound-designer.js.map +0 -1
  597. package/dist/tools/stocks.d.ts.map +0 -1
  598. package/dist/tools/stocks.js.map +0 -1
  599. package/dist/tools/stocks.test.d.ts +0 -2
  600. package/dist/tools/stocks.test.d.ts.map +0 -1
  601. package/dist/tools/stocks.test.js +0 -82
  602. package/dist/tools/stocks.test.js.map +0 -1
  603. package/dist/tools/subagent.d.ts.map +0 -1
  604. package/dist/tools/subagent.js.map +0 -1
  605. package/dist/tools/tasks.d.ts.map +0 -1
  606. package/dist/tools/tasks.js.map +0 -1
  607. package/dist/tools/test-runner.d.ts.map +0 -1
  608. package/dist/tools/test-runner.js.map +0 -1
  609. package/dist/tools/training.d.ts.map +0 -1
  610. package/dist/tools/training.js.map +0 -1
  611. package/dist/tools/vfx.d.ts.map +0 -1
  612. package/dist/tools/vfx.js.map +0 -1
  613. package/dist/tools/visa-payments.d.ts.map +0 -1
  614. package/dist/tools/visa-payments.js.map +0 -1
  615. package/dist/tools/wallet.d.ts.map +0 -1
  616. package/dist/tools/wallet.js.map +0 -1
  617. package/dist/tools/wallet.test.d.ts +0 -2
  618. package/dist/tools/wallet.test.d.ts.map +0 -1
  619. package/dist/tools/wallet.test.js +0 -205
  620. package/dist/tools/wallet.test.js.map +0 -1
  621. package/dist/tools/weather.d.ts.map +0 -1
  622. package/dist/tools/weather.js.map +0 -1
  623. package/dist/tools/worktree.d.ts.map +0 -1
  624. package/dist/tools/worktree.js.map +0 -1
  625. package/dist/tree-planner.d.ts.map +0 -1
  626. package/dist/tree-planner.js.map +0 -1
  627. package/dist/tui.d.ts.map +0 -1
  628. package/dist/tui.js.map +0 -1
  629. package/dist/tutorial.d.ts.map +0 -1
  630. package/dist/tutorial.js.map +0 -1
  631. package/dist/ui-adapter.d.ts.map +0 -1
  632. package/dist/ui-adapter.js.map +0 -1
  633. package/dist/ui.d.ts.map +0 -1
  634. package/dist/ui.js.map +0 -1
  635. package/dist/updater.d.ts.map +0 -1
  636. package/dist/updater.js.map +0 -1
  637. package/dist/user-graph.d.ts.map +0 -1
  638. package/dist/user-graph.js.map +0 -1
  639. package/dist/voice-loop.d.ts.map +0 -1
  640. package/dist/voice-loop.js.map +0 -1
  641. package/dist/voice-realtime.d.ts.map +0 -1
  642. package/dist/voice-realtime.js.map +0 -1
  643. package/dist/voice.d.ts.map +0 -1
  644. package/dist/voice.js.map +0 -1
  645. package/dist/watch.d.ts.map +0 -1
  646. package/dist/watch.js.map +0 -1
  647. package/dist/workflows.d.ts.map +0 -1
  648. package/dist/workflows.js.map +0 -1
package/dist/dream.js ADDED
@@ -0,0 +1,377 @@
1
+ // kbot Dream Engine — In-Process Memory Consolidation
2
+ //
3
+ // Inspired by Claude Code's autoDream system, but built kbot's way:
4
+ // - Uses local Ollama models ($0 cost) instead of cloud API
5
+ // - Runs post-session or on-demand via `kbot dream`
6
+ // - Ages memories with exponential decay scoring
7
+ // - Extracts cross-session insights ("dreams")
8
+ // - Produces a dream journal that feeds back into system prompts
9
+ //
10
+ // The metaphor: after a session, kbot "sleeps" — consolidating short-term
11
+ // session history into long-term durable insights, just like biological memory.
12
+ //
13
+ // Storage: ~/.kbot/memory/dreams/
14
+ // - journal.json — consolidated insights (the "dream journal")
15
+ // - state.json — last dream timestamp, cycle count, stats
16
+ // - archive/ — old dreams that aged out (kept for archaeology)
17
+ import { homedir } from 'node:os';
18
+ import { join } from 'node:path';
19
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync } from 'node:fs';
20
+ import { getHistory } from './memory.js';
21
+ import { loadMemory } from './memory.js';
22
+ // ── Constants ──
23
+ const DREAM_DIR = join(homedir(), '.kbot', 'memory', 'dreams');
24
+ const JOURNAL_FILE = join(DREAM_DIR, 'journal.json');
25
+ const STATE_FILE = join(DREAM_DIR, 'state.json');
26
+ const ARCHIVE_DIR = join(DREAM_DIR, 'archive');
27
+ const MAX_INSIGHTS = 100; // Keep top 100 insights
28
+ const DECAY_RATE = 0.03; // ~3% relevance loss per day
29
+ const MIN_RELEVANCE = 0.15; // Below this → archive
30
+ const CONSOLIDATION_MODEL = 'kernel:latest'; // Local Ollama model
31
+ const OLLAMA_URL = 'http://localhost:11434';
32
+ const OLLAMA_TIMEOUT = 60_000; // 60s per generation
33
+ // ── Helpers ──
34
+ function ensureDirs() {
35
+ for (const dir of [DREAM_DIR, ARCHIVE_DIR]) {
36
+ if (!existsSync(dir))
37
+ mkdirSync(dir, { recursive: true });
38
+ }
39
+ }
40
+ function loadJournal() {
41
+ ensureDirs();
42
+ if (!existsSync(JOURNAL_FILE))
43
+ return [];
44
+ try {
45
+ return JSON.parse(readFileSync(JOURNAL_FILE, 'utf-8'));
46
+ }
47
+ catch {
48
+ return [];
49
+ }
50
+ }
51
+ function saveJournal(insights) {
52
+ ensureDirs();
53
+ writeFileSync(JOURNAL_FILE, JSON.stringify(insights, null, 2));
54
+ }
55
+ function loadState() {
56
+ ensureDirs();
57
+ const defaults = {
58
+ cycles: 0, lastDream: null, totalInsights: 0,
59
+ totalArchived: 0, activeInsights: 0, lastSessionTurns: 0,
60
+ };
61
+ if (!existsSync(STATE_FILE))
62
+ return defaults;
63
+ try {
64
+ return { ...defaults, ...JSON.parse(readFileSync(STATE_FILE, 'utf-8')) };
65
+ }
66
+ catch {
67
+ return defaults;
68
+ }
69
+ }
70
+ function saveState(state) {
71
+ ensureDirs();
72
+ writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
73
+ }
74
+ function generateId() {
75
+ return `dream_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
76
+ }
77
+ /** Calculate days between two ISO dates */
78
+ function daysBetween(a, b) {
79
+ return Math.abs(new Date(b).getTime() - new Date(a).getTime()) / (1000 * 60 * 60 * 24);
80
+ }
81
+ // ── Ollama Integration ──
82
+ async function ollamaGenerate(prompt, model = CONSOLIDATION_MODEL) {
83
+ try {
84
+ const controller = new AbortController();
85
+ const timer = setTimeout(() => controller.abort(), OLLAMA_TIMEOUT);
86
+ const res = await fetch(`${OLLAMA_URL}/api/generate`, {
87
+ method: 'POST',
88
+ headers: { 'Content-Type': 'application/json' },
89
+ body: JSON.stringify({
90
+ model,
91
+ prompt,
92
+ stream: false,
93
+ options: { temperature: 0.3, num_predict: 512 },
94
+ }),
95
+ signal: controller.signal,
96
+ });
97
+ clearTimeout(timer);
98
+ if (!res.ok)
99
+ return null;
100
+ const data = await res.json();
101
+ return data.response?.trim() || null;
102
+ }
103
+ catch {
104
+ return null;
105
+ }
106
+ }
107
+ async function isOllamaAvailable() {
108
+ try {
109
+ const res = await fetch(`${OLLAMA_URL}/api/tags`, { signal: AbortSignal.timeout(3000) });
110
+ return res.ok;
111
+ }
112
+ catch {
113
+ return false;
114
+ }
115
+ }
116
+ // ── Memory Aging ──
117
+ /** Apply exponential decay to all insights based on time elapsed */
118
+ export function ageMemories(insights) {
119
+ const now = new Date().toISOString();
120
+ const aged = [];
121
+ const archived = [];
122
+ for (const insight of insights) {
123
+ const days = daysBetween(insight.lastReinforced, now);
124
+ // Exponential decay: relevance * e^(-rate * days)
125
+ const decayed = insight.relevance * Math.exp(-DECAY_RATE * days);
126
+ if (decayed < MIN_RELEVANCE) {
127
+ archived.push({ ...insight, relevance: decayed });
128
+ }
129
+ else {
130
+ aged.push({ ...insight, relevance: Math.round(decayed * 1000) / 1000 });
131
+ }
132
+ }
133
+ return { aged, archived };
134
+ }
135
+ /** Archive old insights to disk */
136
+ function archiveInsights(insights) {
137
+ if (insights.length === 0)
138
+ return;
139
+ ensureDirs();
140
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
141
+ const archivePath = join(ARCHIVE_DIR, `archived_${timestamp}.json`);
142
+ writeFileSync(archivePath, JSON.stringify(insights, null, 2));
143
+ }
144
+ // ── Consolidation Prompts ──
145
+ function buildConsolidationPrompt(sessionHistory, existingInsights, existingMemory) {
146
+ const historyText = sessionHistory
147
+ .map(t => `[${t.role}]: ${t.content.slice(0, 500)}`)
148
+ .join('\n');
149
+ const existingText = existingInsights.length > 0
150
+ ? existingInsights.slice(0, 20).map(i => `- [${i.category}] ${i.content}`).join('\n')
151
+ : '(none yet)';
152
+ return `You are a memory consolidation system. Analyze this conversation session and extract durable insights.
153
+
154
+ EXISTING INSIGHTS:
155
+ ${existingText}
156
+
157
+ EXISTING PERSISTENT MEMORY:
158
+ ${existingMemory.slice(0, 2000) || '(empty)'}
159
+
160
+ SESSION TO CONSOLIDATE:
161
+ ${historyText}
162
+
163
+ INSTRUCTIONS:
164
+ Extract 1-5 insights from this session. Each insight should be:
165
+ - Durable (useful beyond this session)
166
+ - Non-obvious (not derivable from reading code)
167
+ - About the USER, their preferences, patterns, or project context
168
+
169
+ Format each insight as a JSON array of objects:
170
+ [
171
+ {
172
+ "content": "the insight text",
173
+ "category": "pattern|preference|skill|project|relationship",
174
+ "keywords": ["keyword1", "keyword2"]
175
+ }
176
+ ]
177
+
178
+ If the session is too short or trivial for insights, return: []
179
+
180
+ Respond ONLY with the JSON array, no other text.`;
181
+ }
182
+ function buildReinforcePrompt(sessionHistory, existingInsights) {
183
+ const historyText = sessionHistory
184
+ .map(t => `[${t.role}]: ${t.content.slice(0, 300)}`)
185
+ .join('\n');
186
+ const insightList = existingInsights
187
+ .map((i, idx) => `${idx}: [${i.category}] ${i.content}`)
188
+ .join('\n');
189
+ return `You are a memory reinforcement system. Given this conversation, which existing insights are confirmed/relevant?
190
+
191
+ EXISTING INSIGHTS (by index):
192
+ ${insightList}
193
+
194
+ SESSION:
195
+ ${historyText}
196
+
197
+ Return a JSON array of insight indices that this session reinforces. Example: [0, 3, 7]
198
+ If none are reinforced, return: []
199
+
200
+ Respond ONLY with the JSON array.`;
201
+ }
202
+ // ── Core Dream Functions ──
203
+ /** Run a full dream cycle — consolidate, reinforce, age */
204
+ export async function dream(sessionId = 'default') {
205
+ const result = {
206
+ success: false,
207
+ newInsights: 0,
208
+ reinforced: 0,
209
+ archived: 0,
210
+ cycle: 0,
211
+ duration: 0,
212
+ error: null,
213
+ };
214
+ const start = Date.now();
215
+ // Check Ollama availability
216
+ if (!(await isOllamaAvailable())) {
217
+ // Fallback: still do aging even without Ollama
218
+ const journal = loadJournal();
219
+ if (journal.length > 0) {
220
+ const { aged, archived } = ageMemories(journal);
221
+ archiveInsights(archived);
222
+ saveJournal(aged);
223
+ result.archived = archived.length;
224
+ }
225
+ result.error = 'Ollama not available — aging only (no new consolidation)';
226
+ result.duration = Date.now() - start;
227
+ return result;
228
+ }
229
+ const state = loadState();
230
+ let journal = loadJournal();
231
+ const history = getHistory(sessionId);
232
+ const memory = loadMemory();
233
+ // Skip if session too short
234
+ if (history.length < 4) {
235
+ result.error = 'Session too short for consolidation (< 4 turns)';
236
+ result.duration = Date.now() - start;
237
+ return result;
238
+ }
239
+ // Phase 1: Age existing memories
240
+ const { aged, archived } = ageMemories(journal);
241
+ archiveInsights(archived);
242
+ journal = aged;
243
+ result.archived = archived.length;
244
+ // Phase 2: Extract new insights from session
245
+ const consolidationPrompt = buildConsolidationPrompt(history, journal, memory);
246
+ const rawInsights = await ollamaGenerate(consolidationPrompt);
247
+ if (rawInsights) {
248
+ try {
249
+ const parsed = JSON.parse(rawInsights);
250
+ if (Array.isArray(parsed)) {
251
+ const now = new Date().toISOString();
252
+ for (const p of parsed.slice(0, 5)) {
253
+ // Dedup: skip if very similar content exists
254
+ const isDupe = journal.some(j => j.content.toLowerCase().includes(p.content.toLowerCase().slice(0, 50)) ||
255
+ p.content.toLowerCase().includes(j.content.toLowerCase().slice(0, 50)));
256
+ if (isDupe)
257
+ continue;
258
+ journal.push({
259
+ id: generateId(),
260
+ content: p.content,
261
+ category: p.category || 'pattern',
262
+ keywords: p.keywords || [],
263
+ relevance: 0.9,
264
+ sessions: 1,
265
+ created: now,
266
+ lastReinforced: now,
267
+ source: `session_${state.cycles + 1}`,
268
+ });
269
+ result.newInsights++;
270
+ }
271
+ }
272
+ }
273
+ catch {
274
+ // JSON parse failed — Ollama output wasn't clean
275
+ }
276
+ }
277
+ // Phase 3: Reinforce existing insights mentioned in session
278
+ if (journal.length > 0 && history.length >= 4) {
279
+ const reinforcePrompt = buildReinforcePrompt(history, journal);
280
+ const rawReinforce = await ollamaGenerate(reinforcePrompt);
281
+ if (rawReinforce) {
282
+ try {
283
+ const indices = JSON.parse(rawReinforce);
284
+ if (Array.isArray(indices)) {
285
+ const now = new Date().toISOString();
286
+ for (const idx of indices) {
287
+ if (idx >= 0 && idx < journal.length) {
288
+ journal[idx].relevance = Math.min(1, journal[idx].relevance + 0.15);
289
+ journal[idx].sessions++;
290
+ journal[idx].lastReinforced = now;
291
+ result.reinforced++;
292
+ }
293
+ }
294
+ }
295
+ }
296
+ catch {
297
+ // Reinforcement parse failed — non-critical
298
+ }
299
+ }
300
+ }
301
+ // Phase 4: Sort by relevance, trim to max
302
+ journal.sort((a, b) => b.relevance - a.relevance);
303
+ if (journal.length > MAX_INSIGHTS) {
304
+ const overflow = journal.slice(MAX_INSIGHTS);
305
+ archiveInsights(overflow);
306
+ journal = journal.slice(0, MAX_INSIGHTS);
307
+ result.archived += overflow.length;
308
+ }
309
+ // Save everything
310
+ saveJournal(journal);
311
+ state.cycles++;
312
+ state.lastDream = new Date().toISOString();
313
+ state.totalInsights += result.newInsights;
314
+ state.totalArchived += result.archived;
315
+ state.activeInsights = journal.length;
316
+ state.lastSessionTurns = history.length;
317
+ saveState(state);
318
+ result.success = true;
319
+ result.cycle = state.cycles;
320
+ result.duration = Date.now() - start;
321
+ return result;
322
+ }
323
+ // ── Query Functions ──
324
+ /** Get dream insights for inclusion in system prompt */
325
+ export function getDreamPrompt(maxInsights = 10) {
326
+ const journal = loadJournal();
327
+ if (journal.length === 0)
328
+ return '';
329
+ const top = journal
330
+ .filter(i => i.relevance > 0.3)
331
+ .slice(0, maxInsights);
332
+ if (top.length === 0)
333
+ return '';
334
+ const lines = top.map(i => `- [${i.category}] ${i.content} (relevance: ${Math.round(i.relevance * 100)}%)`);
335
+ return `\n[Dream Journal — Consolidated Insights]\n${lines.join('\n')}\n`;
336
+ }
337
+ /** Get full dream status */
338
+ export function getDreamStatus() {
339
+ const state = loadState();
340
+ const insights = loadJournal();
341
+ let archiveCount = 0;
342
+ if (existsSync(ARCHIVE_DIR)) {
343
+ archiveCount = readdirSync(ARCHIVE_DIR).filter(f => f.endsWith('.json')).length;
344
+ }
345
+ return { state, insights, archiveCount };
346
+ }
347
+ /** Search dream insights by keyword */
348
+ export function searchDreams(query) {
349
+ const journal = loadJournal();
350
+ const terms = query.toLowerCase().split(/\s+/);
351
+ return journal
352
+ .filter(i => {
353
+ const text = `${i.content} ${i.keywords.join(' ')} ${i.category}`.toLowerCase();
354
+ return terms.some(t => text.includes(t));
355
+ })
356
+ .sort((a, b) => b.relevance - a.relevance);
357
+ }
358
+ /** Manually reinforce a specific insight (user confirms it's still relevant) */
359
+ export function reinforceInsight(insightId) {
360
+ const journal = loadJournal();
361
+ const insight = journal.find(i => i.id === insightId);
362
+ if (!insight)
363
+ return false;
364
+ insight.relevance = Math.min(1, insight.relevance + 0.2);
365
+ insight.lastReinforced = new Date().toISOString();
366
+ insight.sessions++;
367
+ saveJournal(journal);
368
+ return true;
369
+ }
370
+ /** Run dream after session ends (non-blocking) */
371
+ export function dreamAfterSession(sessionId = 'default') {
372
+ // Fire and forget — don't block the user
373
+ dream(sessionId).catch(() => {
374
+ // Dream failed silently — non-critical
375
+ });
376
+ }
377
+ //# sourceMappingURL=dream.js.map
@@ -0,0 +1,2 @@
1
+ export declare function registerDreamTools(): void;
2
+ //# sourceMappingURL=dream-tools.d.ts.map
@@ -0,0 +1,159 @@
1
+ // kbot Dream Tools — Agent-accessible memory consolidation
2
+ //
3
+ // Exposes the dream engine to kbot's tool system so agents can:
4
+ // - Trigger consolidation on demand
5
+ // - Query the dream journal for insights
6
+ // - Check dream system status
7
+ // - Search dreams by keyword
8
+ // - Reinforce insights that are still relevant
9
+ import { registerTool } from './index.js';
10
+ import { dream, getDreamStatus, getDreamPrompt, searchDreams, reinforceInsight } from '../dream.js';
11
+ export function registerDreamTools() {
12
+ // ── dream_now ──
13
+ // Trigger a full dream cycle: consolidate, reinforce, age
14
+ registerTool({
15
+ name: 'dream_now',
16
+ description: 'Run a dream cycle — consolidate session memories into durable insights using local AI. Ages old memories, extracts new patterns, reinforces confirmed knowledge. Uses Ollama ($0 cost). Call this at session end or when the user says "dream" or "consolidate".',
17
+ parameters: {
18
+ session_id: {
19
+ type: 'string',
20
+ description: 'Session ID to consolidate (default: "default")',
21
+ required: false,
22
+ default: 'default',
23
+ },
24
+ },
25
+ tier: 'free',
26
+ timeout: 120_000, // 2 min — Ollama can be slow on first run
27
+ execute: async (args) => {
28
+ const sessionId = args.session_id || 'default';
29
+ const result = await dream(sessionId);
30
+ if (!result.success && result.error) {
31
+ return `Dream cycle (partial): ${result.error}\n` +
32
+ `Archived: ${result.archived} aged-out insights\n` +
33
+ `Duration: ${result.duration}ms`;
34
+ }
35
+ const lines = [
36
+ `Dream cycle #${result.cycle} complete`,
37
+ ` New insights: ${result.newInsights}`,
38
+ ` Reinforced: ${result.reinforced} existing insights`,
39
+ ` Archived: ${result.archived} aged-out insights`,
40
+ ` Duration: ${result.duration}ms`,
41
+ ];
42
+ if (result.newInsights === 0) {
43
+ lines.push(' (Session may have been too short or trivial for new insights)');
44
+ }
45
+ return lines.join('\n');
46
+ },
47
+ });
48
+ // ── dream_status ──
49
+ // Check the dream system's current state
50
+ registerTool({
51
+ name: 'dream_status',
52
+ description: 'Show dream engine status — cycle count, active insights, archive size, last dream timestamp. Use this to check if the dream system is healthy and working.',
53
+ parameters: {},
54
+ tier: 'free',
55
+ execute: async () => {
56
+ const { state, insights, archiveCount } = getDreamStatus();
57
+ const categoryBreakdown = {};
58
+ for (const i of insights) {
59
+ categoryBreakdown[i.category] = (categoryBreakdown[i.category] || 0) + 1;
60
+ }
61
+ const avgRelevance = insights.length > 0
62
+ ? Math.round(insights.reduce((sum, i) => sum + i.relevance, 0) / insights.length * 100)
63
+ : 0;
64
+ const lines = [
65
+ 'Dream Engine Status',
66
+ '═══════════════════',
67
+ `Cycles completed: ${state.cycles}`,
68
+ `Last dream: ${state.lastDream || 'never'}`,
69
+ `Active insights: ${state.activeInsights}`,
70
+ `Total created: ${state.totalInsights}`,
71
+ `Total archived: ${state.totalArchived}`,
72
+ `Archive files: ${archiveCount}`,
73
+ `Average relevance: ${avgRelevance}%`,
74
+ '',
75
+ 'Category breakdown:',
76
+ ...Object.entries(categoryBreakdown).map(([cat, count]) => ` ${cat}: ${count}`),
77
+ ];
78
+ if (insights.length > 0) {
79
+ lines.push('', 'Top 5 insights:');
80
+ for (const i of insights.slice(0, 5)) {
81
+ lines.push(` [${Math.round(i.relevance * 100)}%] [${i.category}] ${i.content}`);
82
+ }
83
+ }
84
+ return lines.join('\n');
85
+ },
86
+ });
87
+ // ── dream_journal ──
88
+ // Get dream insights formatted for system prompt injection
89
+ registerTool({
90
+ name: 'dream_journal',
91
+ description: 'Retrieve the dream journal — consolidated insights from past sessions, ranked by relevance. Use this to understand accumulated knowledge about the user and their projects.',
92
+ parameters: {
93
+ max_insights: {
94
+ type: 'number',
95
+ description: 'Maximum insights to return (default: 15)',
96
+ required: false,
97
+ default: 15,
98
+ },
99
+ },
100
+ tier: 'free',
101
+ execute: async (args) => {
102
+ const max = args.max_insights || 15;
103
+ const prompt = getDreamPrompt(max);
104
+ return prompt || 'Dream journal is empty — no consolidation cycles have run yet. Use dream_now to start.';
105
+ },
106
+ });
107
+ // ── dream_search ──
108
+ // Search dreams by keyword
109
+ registerTool({
110
+ name: 'dream_search',
111
+ description: 'Search dream insights by keyword. Returns matching insights sorted by relevance.',
112
+ parameters: {
113
+ query: {
114
+ type: 'string',
115
+ description: 'Search query (keywords)',
116
+ required: true,
117
+ },
118
+ },
119
+ tier: 'free',
120
+ execute: async (args) => {
121
+ const query = args.query;
122
+ if (!query)
123
+ return 'Error: query is required';
124
+ const results = searchDreams(query);
125
+ if (results.length === 0)
126
+ return `No dream insights match "${query}"`;
127
+ const lines = [`Dream search: "${query}" — ${results.length} results`, ''];
128
+ for (const i of results.slice(0, 10)) {
129
+ lines.push(`[${i.id}] [${Math.round(i.relevance * 100)}%] [${i.category}] ${i.content}`);
130
+ lines.push(` Keywords: ${i.keywords.join(', ')} | Sessions: ${i.sessions} | Created: ${i.created.split('T')[0]}`);
131
+ }
132
+ return lines.join('\n');
133
+ },
134
+ });
135
+ // ── dream_reinforce ──
136
+ // Manually boost an insight's relevance
137
+ registerTool({
138
+ name: 'dream_reinforce',
139
+ description: 'Reinforce a dream insight — boost its relevance when the user confirms it is still accurate/useful. Prevents important insights from aging out.',
140
+ parameters: {
141
+ insight_id: {
142
+ type: 'string',
143
+ description: 'The dream insight ID to reinforce',
144
+ required: true,
145
+ },
146
+ },
147
+ tier: 'free',
148
+ execute: async (args) => {
149
+ const id = args.insight_id;
150
+ if (!id)
151
+ return 'Error: insight_id is required';
152
+ const success = reinforceInsight(id);
153
+ return success
154
+ ? `Reinforced insight ${id} — relevance boosted, decay clock reset.`
155
+ : `Insight ${id} not found.`;
156
+ },
157
+ });
158
+ } // end registerDreamTools
159
+ //# sourceMappingURL=dream-tools.js.map
@@ -298,6 +298,7 @@ const LAZY_MODULE_IMPORTS = [
298
298
  { path: './hacker-toolkit.js', registerFn: 'registerHackerToolkitTools' },
299
299
  { path: './dj-set-builder.js', registerFn: 'registerDjSetBuilderTools' },
300
300
  { path: './serum2-preset.js', registerFn: 'registerSerum2PresetTools' },
301
+ { path: './dream-tools.js', registerFn: 'registerDreamTools' },
301
302
  ];
302
303
  /** Track whether lazy tools have been registered */
303
304
  let lazyToolsRegistered = false;
@@ -2,7 +2,7 @@
2
2
  "name": "kbot",
3
3
  "display_name": "kbot",
4
4
  "description": "Open-source terminal AI agent — 670+ tools, 35 agents, science, finance, security, music production, and more.",
5
- "version": "3.60.1",
5
+ "version": "3.62.0",
6
6
  "homepage": "https://kernel.chat",
7
7
  "repository": "https://github.com/isaacsight/kernel",
8
8
  "license": "MIT",