beecork 1.2.0 → 1.3.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 (390) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/dist/capabilities/index.d.ts +0 -1
  4. package/dist/capabilities/index.js +0 -1
  5. package/dist/capabilities/manager.d.ts +0 -1
  6. package/dist/capabilities/manager.js +0 -1
  7. package/dist/capabilities/packs.d.ts +0 -1
  8. package/dist/capabilities/packs.js +7 -8
  9. package/dist/capabilities/types.d.ts +0 -1
  10. package/dist/capabilities/types.js +0 -1
  11. package/dist/channels/command-handler.d.ts +0 -1
  12. package/dist/channels/command-handler.js +26 -1
  13. package/dist/channels/discord.d.ts +1 -1
  14. package/dist/channels/discord.js +36 -47
  15. package/dist/channels/index.d.ts +0 -1
  16. package/dist/channels/index.js +0 -1
  17. package/dist/channels/loader.d.ts +0 -1
  18. package/dist/channels/loader.js +6 -1
  19. package/dist/channels/pipeline.d.ts +50 -0
  20. package/dist/channels/pipeline.js +83 -0
  21. package/dist/channels/registry.d.ts +0 -1
  22. package/dist/channels/registry.js +0 -1
  23. package/dist/channels/telegram.d.ts +1 -1
  24. package/dist/channels/telegram.js +99 -60
  25. package/dist/channels/types.d.ts +0 -1
  26. package/dist/channels/types.js +0 -1
  27. package/dist/channels/webhook.d.ts +0 -1
  28. package/dist/channels/webhook.js +0 -1
  29. package/dist/channels/whatsapp.d.ts +1 -1
  30. package/dist/channels/whatsapp.js +26 -52
  31. package/dist/cli/capabilities.d.ts +0 -1
  32. package/dist/cli/capabilities.js +0 -1
  33. package/dist/cli/channel.d.ts +0 -1
  34. package/dist/cli/channel.js +1 -2
  35. package/dist/cli/commands.d.ts +2 -1
  36. package/dist/cli/commands.js +49 -15
  37. package/dist/cli/doctor.d.ts +0 -1
  38. package/dist/cli/doctor.js +2 -2
  39. package/dist/cli/handoff.d.ts +0 -1
  40. package/dist/cli/handoff.js +0 -1
  41. package/dist/cli/helpers.d.ts +0 -1
  42. package/dist/cli/helpers.js +0 -1
  43. package/dist/cli/mcp.d.ts +0 -1
  44. package/dist/cli/mcp.js +0 -1
  45. package/dist/cli/media.d.ts +0 -1
  46. package/dist/cli/media.js +0 -1
  47. package/dist/cli/setup.d.ts +0 -1
  48. package/dist/cli/setup.js +13 -12
  49. package/dist/cli/store.d.ts +3 -0
  50. package/dist/cli/store.js +91 -0
  51. package/dist/config.d.ts +0 -1
  52. package/dist/config.js +0 -1
  53. package/dist/daemon.d.ts +0 -1
  54. package/dist/daemon.js +21 -11
  55. package/dist/dashboard/html.d.ts +0 -1
  56. package/dist/dashboard/html.js +169 -42
  57. package/dist/dashboard/server.d.ts +0 -1
  58. package/dist/dashboard/server.js +166 -35
  59. package/dist/db/index.d.ts +11 -1
  60. package/dist/db/index.js +12 -1
  61. package/dist/db/migrations.d.ts +0 -1
  62. package/dist/db/migrations.js +44 -1
  63. package/dist/delegation/manager.d.ts +0 -3
  64. package/dist/delegation/manager.js +0 -5
  65. package/dist/index.d.ts +0 -1
  66. package/dist/index.js +124 -6
  67. package/dist/knowledge/index.d.ts +2 -0
  68. package/dist/knowledge/index.js +1 -0
  69. package/dist/knowledge/manager.d.ts +17 -0
  70. package/dist/knowledge/manager.js +146 -0
  71. package/dist/knowledge/types.d.ts +7 -0
  72. package/dist/knowledge/types.js +1 -0
  73. package/dist/machines/index.d.ts +1 -3
  74. package/dist/machines/index.js +1 -3
  75. package/dist/machines/registry.d.ts +0 -7
  76. package/dist/machines/registry.js +0 -25
  77. package/dist/mcp/server.d.ts +0 -1
  78. package/dist/mcp/server.js +275 -80
  79. package/dist/media/factory.d.ts +0 -1
  80. package/dist/media/factory.js +0 -1
  81. package/dist/media/generators/dall-e.d.ts +0 -1
  82. package/dist/media/generators/dall-e.js +0 -1
  83. package/dist/media/generators/elevenlabs-music.d.ts +0 -1
  84. package/dist/media/generators/elevenlabs-music.js +0 -1
  85. package/dist/media/generators/elevenlabs-sfx.d.ts +0 -1
  86. package/dist/media/generators/elevenlabs-sfx.js +0 -1
  87. package/dist/media/generators/kling.d.ts +0 -1
  88. package/dist/media/generators/kling.js +14 -20
  89. package/dist/media/generators/lyria.d.ts +0 -1
  90. package/dist/media/generators/lyria.js +0 -1
  91. package/dist/media/generators/nano-banana.d.ts +0 -1
  92. package/dist/media/generators/nano-banana.js +0 -1
  93. package/dist/media/generators/poll-util.d.ts +12 -0
  94. package/dist/media/generators/poll-util.js +22 -0
  95. package/dist/media/generators/recraft.d.ts +0 -1
  96. package/dist/media/generators/recraft.js +0 -1
  97. package/dist/media/generators/runway.d.ts +0 -1
  98. package/dist/media/generators/runway.js +14 -23
  99. package/dist/media/generators/stable-diffusion.d.ts +0 -1
  100. package/dist/media/generators/stable-diffusion.js +0 -1
  101. package/dist/media/generators/veo.d.ts +0 -1
  102. package/dist/media/generators/veo.js +0 -1
  103. package/dist/media/index.d.ts +0 -2
  104. package/dist/media/index.js +0 -2
  105. package/dist/media/store.d.ts +0 -1
  106. package/dist/media/store.js +0 -1
  107. package/dist/media/types.d.ts +0 -1
  108. package/dist/media/types.js +0 -1
  109. package/dist/memory/extractor.d.ts +0 -1
  110. package/dist/memory/extractor.js +8 -3
  111. package/dist/notifications/index.d.ts +0 -1
  112. package/dist/notifications/index.js +0 -1
  113. package/dist/notifications/ntfy.d.ts +0 -1
  114. package/dist/notifications/ntfy.js +0 -1
  115. package/dist/notifications/pushover.d.ts +0 -1
  116. package/dist/notifications/pushover.js +0 -1
  117. package/dist/notifications/types.d.ts +0 -1
  118. package/dist/notifications/types.js +0 -1
  119. package/dist/notifications/webhook-provider.d.ts +0 -1
  120. package/dist/notifications/webhook-provider.js +0 -1
  121. package/dist/observability/analytics.d.ts +0 -1
  122. package/dist/observability/analytics.js +1 -2
  123. package/dist/pipe/anthropic-client.d.ts +0 -1
  124. package/dist/pipe/anthropic-client.js +5 -3
  125. package/dist/pipe/brain.d.ts +0 -1
  126. package/dist/pipe/brain.js +0 -1
  127. package/dist/pipe/memory-store.d.ts +0 -1
  128. package/dist/pipe/memory-store.js +0 -1
  129. package/dist/pipe/project-scanner.d.ts +5 -3
  130. package/dist/pipe/project-scanner.js +21 -90
  131. package/dist/pipe/types.d.ts +0 -11
  132. package/dist/pipe/types.js +0 -1
  133. package/dist/projects/index.d.ts +0 -1
  134. package/dist/projects/index.js +0 -1
  135. package/dist/projects/manager.d.ts +0 -1
  136. package/dist/projects/manager.js +0 -1
  137. package/dist/projects/router.d.ts +0 -1
  138. package/dist/projects/router.js +1 -2
  139. package/dist/projects/types.d.ts +0 -7
  140. package/dist/projects/types.js +0 -1
  141. package/dist/service/install.d.ts +0 -1
  142. package/dist/service/install.js +0 -1
  143. package/dist/service/templates.d.ts +0 -1
  144. package/dist/service/templates.js +0 -1
  145. package/dist/service/windows.d.ts +0 -3
  146. package/dist/service/windows.js +0 -11
  147. package/dist/session/circuit-breaker.d.ts +0 -1
  148. package/dist/session/circuit-breaker.js +0 -1
  149. package/dist/session/context-monitor.d.ts +0 -1
  150. package/dist/session/context-monitor.js +0 -1
  151. package/dist/session/manager.d.ts +0 -1
  152. package/dist/session/manager.js +18 -6
  153. package/dist/session/subprocess.d.ts +0 -1
  154. package/dist/session/subprocess.js +0 -1
  155. package/dist/session/tool-classifier.d.ts +0 -1
  156. package/dist/session/tool-classifier.js +0 -1
  157. package/dist/{cron → tasks}/scheduler.d.ts +5 -4
  158. package/dist/{cron → tasks}/scheduler.js +31 -29
  159. package/dist/tasks/store.d.ts +11 -0
  160. package/dist/{cron → tasks}/store.js +12 -13
  161. package/dist/timeline/index.d.ts +3 -0
  162. package/dist/timeline/index.js +2 -0
  163. package/dist/timeline/logger.d.ts +8 -0
  164. package/dist/timeline/logger.js +9 -0
  165. package/dist/timeline/query.d.ts +11 -0
  166. package/dist/timeline/query.js +57 -0
  167. package/dist/timeline/types.d.ts +12 -0
  168. package/dist/timeline/types.js +1 -0
  169. package/dist/types.d.ts +6 -6
  170. package/dist/types.js +0 -1
  171. package/dist/users/index.d.ts +1 -2
  172. package/dist/users/index.js +1 -2
  173. package/dist/users/service.d.ts +0 -8
  174. package/dist/users/service.js +0 -19
  175. package/dist/util/logger.d.ts +0 -1
  176. package/dist/util/logger.js +0 -1
  177. package/dist/util/paths.d.ts +0 -1
  178. package/dist/util/paths.js +0 -1
  179. package/dist/util/platform.d.ts +0 -1
  180. package/dist/util/platform.js +0 -1
  181. package/dist/util/progress.d.ts +0 -1
  182. package/dist/util/progress.js +0 -1
  183. package/dist/util/rate-limiter.d.ts +0 -1
  184. package/dist/util/rate-limiter.js +0 -1
  185. package/dist/util/retry.d.ts +0 -1
  186. package/dist/util/retry.js +1 -2
  187. package/dist/util/text.d.ts +0 -1
  188. package/dist/util/text.js +0 -1
  189. package/dist/version.d.ts +0 -1
  190. package/dist/version.js +0 -1
  191. package/dist/voice/index.d.ts +8 -1
  192. package/dist/voice/index.js +23 -1
  193. package/dist/voice/stt.d.ts +2 -1
  194. package/dist/voice/stt.js +10 -1
  195. package/dist/voice/tts.d.ts +0 -1
  196. package/dist/voice/tts.js +0 -1
  197. package/dist/watchers/evaluator.d.ts +5 -0
  198. package/dist/watchers/evaluator.js +45 -0
  199. package/dist/watchers/index.d.ts +4 -0
  200. package/dist/watchers/index.js +3 -0
  201. package/dist/watchers/scheduler.d.ts +13 -0
  202. package/dist/watchers/scheduler.js +133 -0
  203. package/dist/watchers/store.d.ts +10 -0
  204. package/dist/watchers/store.js +56 -0
  205. package/dist/watchers/types.d.ts +15 -0
  206. package/dist/watchers/types.js +1 -0
  207. package/package.json +25 -2
  208. package/dist/capabilities/index.d.ts.map +0 -1
  209. package/dist/capabilities/index.js.map +0 -1
  210. package/dist/capabilities/manager.d.ts.map +0 -1
  211. package/dist/capabilities/manager.js.map +0 -1
  212. package/dist/capabilities/packs.d.ts.map +0 -1
  213. package/dist/capabilities/packs.js.map +0 -1
  214. package/dist/capabilities/types.d.ts.map +0 -1
  215. package/dist/capabilities/types.js.map +0 -1
  216. package/dist/channels/command-handler.d.ts.map +0 -1
  217. package/dist/channels/command-handler.js.map +0 -1
  218. package/dist/channels/discord.d.ts.map +0 -1
  219. package/dist/channels/discord.js.map +0 -1
  220. package/dist/channels/index.d.ts.map +0 -1
  221. package/dist/channels/index.js.map +0 -1
  222. package/dist/channels/loader.d.ts.map +0 -1
  223. package/dist/channels/loader.js.map +0 -1
  224. package/dist/channels/registry.d.ts.map +0 -1
  225. package/dist/channels/registry.js.map +0 -1
  226. package/dist/channels/telegram.d.ts.map +0 -1
  227. package/dist/channels/telegram.js.map +0 -1
  228. package/dist/channels/types.d.ts.map +0 -1
  229. package/dist/channels/types.js.map +0 -1
  230. package/dist/channels/webhook.d.ts.map +0 -1
  231. package/dist/channels/webhook.js.map +0 -1
  232. package/dist/channels/whatsapp.d.ts.map +0 -1
  233. package/dist/channels/whatsapp.js.map +0 -1
  234. package/dist/cli/capabilities.d.ts.map +0 -1
  235. package/dist/cli/capabilities.js.map +0 -1
  236. package/dist/cli/channel.d.ts.map +0 -1
  237. package/dist/cli/channel.js.map +0 -1
  238. package/dist/cli/commands.d.ts.map +0 -1
  239. package/dist/cli/commands.js.map +0 -1
  240. package/dist/cli/doctor.d.ts.map +0 -1
  241. package/dist/cli/doctor.js.map +0 -1
  242. package/dist/cli/handoff.d.ts.map +0 -1
  243. package/dist/cli/handoff.js.map +0 -1
  244. package/dist/cli/helpers.d.ts.map +0 -1
  245. package/dist/cli/helpers.js.map +0 -1
  246. package/dist/cli/mcp.d.ts.map +0 -1
  247. package/dist/cli/mcp.js.map +0 -1
  248. package/dist/cli/media.d.ts.map +0 -1
  249. package/dist/cli/media.js.map +0 -1
  250. package/dist/cli/setup.d.ts.map +0 -1
  251. package/dist/cli/setup.js.map +0 -1
  252. package/dist/config.d.ts.map +0 -1
  253. package/dist/config.js.map +0 -1
  254. package/dist/cron/scheduler.d.ts.map +0 -1
  255. package/dist/cron/scheduler.js.map +0 -1
  256. package/dist/cron/store.d.ts +0 -12
  257. package/dist/cron/store.d.ts.map +0 -1
  258. package/dist/cron/store.js.map +0 -1
  259. package/dist/daemon.d.ts.map +0 -1
  260. package/dist/daemon.js.map +0 -1
  261. package/dist/dashboard/html.d.ts.map +0 -1
  262. package/dist/dashboard/html.js.map +0 -1
  263. package/dist/dashboard/server.d.ts.map +0 -1
  264. package/dist/dashboard/server.js.map +0 -1
  265. package/dist/db/index.d.ts.map +0 -1
  266. package/dist/db/index.js.map +0 -1
  267. package/dist/db/migrations.d.ts.map +0 -1
  268. package/dist/db/migrations.js.map +0 -1
  269. package/dist/delegation/manager.d.ts.map +0 -1
  270. package/dist/delegation/manager.js.map +0 -1
  271. package/dist/index.d.ts.map +0 -1
  272. package/dist/index.js.map +0 -1
  273. package/dist/machines/forwarder.d.ts +0 -7
  274. package/dist/machines/forwarder.d.ts.map +0 -1
  275. package/dist/machines/forwarder.js +0 -35
  276. package/dist/machines/forwarder.js.map +0 -1
  277. package/dist/machines/index.d.ts.map +0 -1
  278. package/dist/machines/index.js.map +0 -1
  279. package/dist/machines/registry.d.ts.map +0 -1
  280. package/dist/machines/registry.js.map +0 -1
  281. package/dist/mcp/server.d.ts.map +0 -1
  282. package/dist/mcp/server.js.map +0 -1
  283. package/dist/media/factory.d.ts.map +0 -1
  284. package/dist/media/factory.js.map +0 -1
  285. package/dist/media/generators/dall-e.d.ts.map +0 -1
  286. package/dist/media/generators/dall-e.js.map +0 -1
  287. package/dist/media/generators/elevenlabs-music.d.ts.map +0 -1
  288. package/dist/media/generators/elevenlabs-music.js.map +0 -1
  289. package/dist/media/generators/elevenlabs-sfx.d.ts.map +0 -1
  290. package/dist/media/generators/elevenlabs-sfx.js.map +0 -1
  291. package/dist/media/generators/kling.d.ts.map +0 -1
  292. package/dist/media/generators/kling.js.map +0 -1
  293. package/dist/media/generators/lyria.d.ts.map +0 -1
  294. package/dist/media/generators/lyria.js.map +0 -1
  295. package/dist/media/generators/nano-banana.d.ts.map +0 -1
  296. package/dist/media/generators/nano-banana.js.map +0 -1
  297. package/dist/media/generators/recraft.d.ts.map +0 -1
  298. package/dist/media/generators/recraft.js.map +0 -1
  299. package/dist/media/generators/runway.d.ts.map +0 -1
  300. package/dist/media/generators/runway.js.map +0 -1
  301. package/dist/media/generators/stable-diffusion.d.ts.map +0 -1
  302. package/dist/media/generators/stable-diffusion.js.map +0 -1
  303. package/dist/media/generators/veo.d.ts.map +0 -1
  304. package/dist/media/generators/veo.js.map +0 -1
  305. package/dist/media/index.d.ts.map +0 -1
  306. package/dist/media/index.js.map +0 -1
  307. package/dist/media/loader.d.ts +0 -8
  308. package/dist/media/loader.d.ts.map +0 -1
  309. package/dist/media/loader.js +0 -46
  310. package/dist/media/loader.js.map +0 -1
  311. package/dist/media/store.d.ts.map +0 -1
  312. package/dist/media/store.js.map +0 -1
  313. package/dist/media/types.d.ts.map +0 -1
  314. package/dist/media/types.js.map +0 -1
  315. package/dist/memory/extractor.d.ts.map +0 -1
  316. package/dist/memory/extractor.js.map +0 -1
  317. package/dist/notifications/index.d.ts.map +0 -1
  318. package/dist/notifications/index.js.map +0 -1
  319. package/dist/notifications/ntfy.d.ts.map +0 -1
  320. package/dist/notifications/ntfy.js.map +0 -1
  321. package/dist/notifications/pushover.d.ts.map +0 -1
  322. package/dist/notifications/pushover.js.map +0 -1
  323. package/dist/notifications/types.d.ts.map +0 -1
  324. package/dist/notifications/types.js.map +0 -1
  325. package/dist/notifications/webhook-provider.d.ts.map +0 -1
  326. package/dist/notifications/webhook-provider.js.map +0 -1
  327. package/dist/observability/analytics.d.ts.map +0 -1
  328. package/dist/observability/analytics.js.map +0 -1
  329. package/dist/pipe/anthropic-client.d.ts.map +0 -1
  330. package/dist/pipe/anthropic-client.js.map +0 -1
  331. package/dist/pipe/brain.d.ts.map +0 -1
  332. package/dist/pipe/brain.js.map +0 -1
  333. package/dist/pipe/memory-store.d.ts.map +0 -1
  334. package/dist/pipe/memory-store.js.map +0 -1
  335. package/dist/pipe/project-scanner.d.ts.map +0 -1
  336. package/dist/pipe/project-scanner.js.map +0 -1
  337. package/dist/pipe/types.d.ts.map +0 -1
  338. package/dist/pipe/types.js.map +0 -1
  339. package/dist/projects/index.d.ts.map +0 -1
  340. package/dist/projects/index.js.map +0 -1
  341. package/dist/projects/manager.d.ts.map +0 -1
  342. package/dist/projects/manager.js.map +0 -1
  343. package/dist/projects/router.d.ts.map +0 -1
  344. package/dist/projects/router.js.map +0 -1
  345. package/dist/projects/types.d.ts.map +0 -1
  346. package/dist/projects/types.js.map +0 -1
  347. package/dist/service/install.d.ts.map +0 -1
  348. package/dist/service/install.js.map +0 -1
  349. package/dist/service/templates.d.ts.map +0 -1
  350. package/dist/service/templates.js.map +0 -1
  351. package/dist/service/windows.d.ts.map +0 -1
  352. package/dist/service/windows.js.map +0 -1
  353. package/dist/session/circuit-breaker.d.ts.map +0 -1
  354. package/dist/session/circuit-breaker.js.map +0 -1
  355. package/dist/session/context-monitor.d.ts.map +0 -1
  356. package/dist/session/context-monitor.js.map +0 -1
  357. package/dist/session/manager.d.ts.map +0 -1
  358. package/dist/session/manager.js.map +0 -1
  359. package/dist/session/subprocess.d.ts.map +0 -1
  360. package/dist/session/subprocess.js.map +0 -1
  361. package/dist/session/tool-classifier.d.ts.map +0 -1
  362. package/dist/session/tool-classifier.js.map +0 -1
  363. package/dist/types.d.ts.map +0 -1
  364. package/dist/types.js.map +0 -1
  365. package/dist/users/index.d.ts.map +0 -1
  366. package/dist/users/index.js.map +0 -1
  367. package/dist/users/service.d.ts.map +0 -1
  368. package/dist/users/service.js.map +0 -1
  369. package/dist/util/logger.d.ts.map +0 -1
  370. package/dist/util/logger.js.map +0 -1
  371. package/dist/util/paths.d.ts.map +0 -1
  372. package/dist/util/paths.js.map +0 -1
  373. package/dist/util/platform.d.ts.map +0 -1
  374. package/dist/util/platform.js.map +0 -1
  375. package/dist/util/progress.d.ts.map +0 -1
  376. package/dist/util/progress.js.map +0 -1
  377. package/dist/util/rate-limiter.d.ts.map +0 -1
  378. package/dist/util/rate-limiter.js.map +0 -1
  379. package/dist/util/retry.d.ts.map +0 -1
  380. package/dist/util/retry.js.map +0 -1
  381. package/dist/util/text.d.ts.map +0 -1
  382. package/dist/util/text.js.map +0 -1
  383. package/dist/version.d.ts.map +0 -1
  384. package/dist/version.js.map +0 -1
  385. package/dist/voice/index.d.ts.map +0 -1
  386. package/dist/voice/index.js.map +0 -1
  387. package/dist/voice/stt.d.ts.map +0 -1
  388. package/dist/voice/stt.js.map +0 -1
  389. package/dist/voice/tts.d.ts.map +0 -1
  390. package/dist/voice/tts.js.map +0 -1
@@ -6,6 +6,3 @@ export declare function startWindowsService(): void;
6
6
  export declare function stopWindowsService(): void;
7
7
  /** Uninstall the Windows service */
8
8
  export declare function uninstallWindowsService(): void;
9
- /** Check if the Windows service is installed */
10
- export declare function isWindowsServiceInstalled(): boolean;
11
- //# sourceMappingURL=windows.d.ts.map
@@ -57,14 +57,3 @@ export function uninstallWindowsService() {
57
57
  console.error('Failed to uninstall service.');
58
58
  }
59
59
  }
60
- /** Check if the Windows service is installed */
61
- export function isWindowsServiceInstalled() {
62
- try {
63
- execSync(`schtasks /Query /TN "${TASK_NAME}" 2>nul`, { stdio: 'ignore' });
64
- return true;
65
- }
66
- catch {
67
- return false;
68
- }
69
- }
70
- //# sourceMappingURL=windows.js.map
@@ -15,4 +15,3 @@ export declare class CircuitBreaker {
15
15
  reset(): void;
16
16
  get isTripped(): boolean;
17
17
  }
18
- //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -64,4 +64,3 @@ export class CircuitBreaker {
64
64
  return this.tripped;
65
65
  }
66
66
  }
67
- //# sourceMappingURL=circuit-breaker.js.map
@@ -13,4 +13,3 @@ export declare class ContextMonitor {
13
13
  get usageRatio(): number;
14
14
  reset(): void;
15
15
  }
16
- //# sourceMappingURL=context-monitor.d.ts.map
@@ -42,4 +42,3 @@ export class ContextMonitor {
42
42
  this.checkpointed = false;
43
43
  }
44
44
  }
45
- //# sourceMappingURL=context-monitor.js.map
@@ -43,4 +43,3 @@ export declare class TabManager {
43
43
  private updateTabStatus;
44
44
  private clearQueue;
45
45
  }
46
- //# sourceMappingURL=manager.d.ts.map
@@ -6,6 +6,8 @@ import { getDb } from '../db/index.js';
6
6
  import { resolveWorkingDir, validateTabName } from '../config.js';
7
7
  import { logger } from '../util/logger.js';
8
8
  import { extractMemories, getRelevantMemories } from '../memory/extractor.js';
9
+ import { logActivity } from '../timeline/index.js';
10
+ import { getAllKnowledge, formatKnowledgeForContext } from '../knowledge/index.js';
9
11
  function rowToTab(row) {
10
12
  return {
11
13
  id: row.id,
@@ -128,7 +130,7 @@ export class TabManager {
128
130
  if (pendingPollCount % 100 === 0) {
129
131
  db.prepare("DELETE FROM pending_messages WHERE processed = 1 AND created_at < datetime('now', '-1 day')").run();
130
132
  }
131
- const pending = db.prepare('SELECT * FROM pending_messages WHERE processed = 0 ORDER BY created_at ASC').all();
133
+ const pending = db.prepare('SELECT * FROM pending_messages WHERE processed = 0 ORDER BY created_at ASC LIMIT 50').all();
132
134
  if (pending.length === 0)
133
135
  return;
134
136
  for (const msg of pending) {
@@ -147,6 +149,7 @@ export class TabManager {
147
149
  }
148
150
  async executeMessage(tab, prompt, resume, onTextChunk, skipExtraction, onToolUse, compactionDepth) {
149
151
  const db = getDb();
152
+ logActivity('task_started', 'Processing message', { tabName: tab.name, details: prompt.slice(0, 500) });
150
153
  // Budget check before spawning
151
154
  if (this.config.claudeCode.maxBudgetUsd) {
152
155
  const tabSpend = db.prepare('SELECT COALESCE(SUM(cost_usd), 0) as total FROM messages WHERE tab_id = ?').get(tab.id).total;
@@ -165,12 +168,20 @@ export class TabManager {
165
168
  if (tabConfig?.approvalMode && tabConfig.approvalMode !== 'yolo') {
166
169
  logger.warn(`Tab "${tab.name}" has approvalMode="${tabConfig.approvalMode}" — interactive approval not yet implemented, running in yolo mode`);
167
170
  }
168
- // Inject relevant memories into the prompt
169
- const memories = getRelevantMemories(tab.name);
171
+ // Inject knowledge from all three layers
172
+ const knowledge = getAllKnowledge(tab.workingDir, tab.name);
173
+ const knowledgeContext = formatKnowledgeForContext(knowledge);
170
174
  let enrichedPrompt = prompt;
175
+ if (knowledgeContext) {
176
+ enrichedPrompt = `${knowledgeContext}\n\n${prompt}`;
177
+ }
178
+ // Also inject relevant memories as fallback (additive)
179
+ const memories = getRelevantMemories(tab.name);
171
180
  if (memories.length > 0) {
172
181
  const memoryContext = memories.map(m => `- ${m}`).join('\n');
173
- enrichedPrompt = `[Context from memory:\n${memoryContext}\n]\n\n${prompt}`;
182
+ if (!knowledgeContext) {
183
+ enrichedPrompt = `[Context from memory:\n${memoryContext}\n]\n\n${prompt}`;
184
+ }
174
185
  }
175
186
  // Store user message
176
187
  db.prepare('INSERT INTO messages (tab_id, role, content) VALUES (?, ?, ?)')
@@ -252,7 +263,7 @@ export class TabManager {
252
263
  error: resultEvent?.is_error ?? (code !== 0),
253
264
  };
254
265
  // Handle resume failure (session expired/not found) — retry with fresh session + context
255
- if (result.error && shouldResume && result.text.includes('session')) {
266
+ if (result.error && shouldResume && result.text.match(/session (not found|expired|invalid)/i)) {
256
267
  logger.info(`[${tab.name}] Session resume failed, retrying with context injection`);
257
268
  const recentMsgs = db.prepare('SELECT role, content FROM messages WHERE tab_id = ? ORDER BY created_at DESC LIMIT 5').all(tab.id);
258
269
  const context = recentMsgs.reverse().map(m => `${m.role}: ${m.content.slice(0, 200)}`).join('\n');
@@ -269,6 +280,7 @@ export class TabManager {
269
280
  // Update tab
270
281
  db.prepare('UPDATE tabs SET status = ?, last_activity_at = ?, pid = NULL WHERE name = ?')
271
282
  .run('idle', new Date().toISOString(), tab.name);
283
+ logActivity('task_completed', 'Message processed', { tabName: tab.name, durationMs: result.durationMs, costUsd: result.costUsd, details: result.text.slice(0, 500) });
272
284
  // Context window compaction: if checkpoint was triggered, restart with summary
273
285
  const currentDepth = compactionDepth ?? 0;
274
286
  if (checkpointTriggered && !result.error && result.text && currentDepth < 2) {
@@ -325,6 +337,7 @@ export class TabManager {
325
337
  this.subprocesses.delete(tab.name);
326
338
  this.circuitBreakers.delete(tab.name);
327
339
  this.updateTabStatus(tab.name, 'error');
340
+ logActivity('task_failed', 'Message failed', { tabName: tab.name, details: err instanceof Error ? err.message : String(err) });
328
341
  reject(err);
329
342
  this.processNextInQueue(tab.name);
330
343
  },
@@ -363,4 +376,3 @@ export class TabManager {
363
376
  }
364
377
  }
365
378
  }
366
- //# sourceMappingURL=manager.js.map
@@ -20,4 +20,3 @@ export declare class ClaudeSubprocess {
20
20
  get pid(): number | null;
21
21
  private buildArgs;
22
22
  }
23
- //# sourceMappingURL=subprocess.d.ts.map
@@ -144,4 +144,3 @@ export class ClaudeSubprocess {
144
144
  return args;
145
145
  }
146
146
  }
147
- //# sourceMappingURL=subprocess.js.map
@@ -2,4 +2,3 @@
2
2
  export type ToolRisk = 'safe' | 'dangerous';
3
3
  /** Classify a tool call as safe or dangerous */
4
4
  export declare function classifyTool(toolName: string, input: Record<string, unknown>): ToolRisk;
5
- //# sourceMappingURL=tool-classifier.d.ts.map
@@ -54,4 +54,3 @@ export function classifyTool(toolName, input) {
54
54
  // Unknown tools: default to dangerous
55
55
  return 'dangerous';
56
56
  }
57
- //# sourceMappingURL=tool-classifier.js.map
@@ -1,15 +1,17 @@
1
+ import { exec } from 'node:child_process';
1
2
  import type { TabManager, NotifyCallback } from '../session/manager.js';
2
- export declare class CronScheduler {
3
+ export declare const execAsync: typeof exec.__promisify__;
4
+ export declare class TaskScheduler {
3
5
  private tabManager;
4
6
  private onNotify;
5
7
  private scheduledJobs;
6
8
  private store;
7
9
  constructor(tabManager: TabManager, onNotify: NotifyCallback | null);
8
- /** Load all cron jobs from store and schedule them */
10
+ /** Load all tasks from store and schedule them */
9
11
  loadAndSchedule(): void;
10
12
  /** Check for the reload signal file and reload if present */
11
13
  checkForReload(): void;
12
- /** Stop all scheduled jobs */
14
+ /** Stop all scheduled tasks */
13
15
  stopAll(): void;
14
16
  private scheduleJob;
15
17
  private fireJob;
@@ -19,4 +21,3 @@ export declare class CronScheduler {
19
21
  export declare function intervalToMs(interval: string): number | null;
20
22
  /** Convert human interval (30m, 2h, 1d, 1h30m, 2w) to cron expression */
21
23
  export declare function intervalToCron(interval: string): string | null;
22
- //# sourceMappingURL=scheduler.d.ts.map
@@ -1,19 +1,22 @@
1
1
  import cron from 'node-cron';
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { CronStore } from './store.js';
4
+ import { exec } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ import { TaskStore } from './store.js';
5
7
  import { getCronReloadSignalPath, getLogsDir } from '../util/paths.js';
6
8
  import { logger } from '../util/logger.js';
7
- export class CronScheduler {
9
+ export const execAsync = promisify(exec);
10
+ export class TaskScheduler {
8
11
  tabManager;
9
12
  onNotify;
10
13
  scheduledJobs = new Map();
11
- store = new CronStore();
14
+ store = new TaskStore();
12
15
  constructor(tabManager, onNotify) {
13
16
  this.tabManager = tabManager;
14
17
  this.onNotify = onNotify;
15
18
  }
16
- /** Load all cron jobs from store and schedule them */
19
+ /** Load all tasks from store and schedule them */
17
20
  loadAndSchedule() {
18
21
  // Cancel existing
19
22
  for (const [, task] of this.scheduledJobs) {
@@ -30,7 +33,7 @@ export class CronScheduler {
30
33
  if (job.scheduleType === 'at' && !job.lastRunAt) {
31
34
  const targetTime = new Date(job.schedule).getTime();
32
35
  if (targetTime <= Date.now()) {
33
- logger.warn(`Cron: missed fire detected for "${job.name}" (was scheduled for ${job.schedule}), firing now`);
36
+ logger.warn(`Task: missed fire detected for "${job.name}" (was scheduled for ${job.schedule}), firing now`);
34
37
  missedFires++;
35
38
  this.fireJob(job);
36
39
  this.store.update(job.id, { enabled: false }); // Disable after one-time execution
@@ -40,7 +43,7 @@ export class CronScheduler {
40
43
  this.scheduleJob(job);
41
44
  scheduled++;
42
45
  }
43
- logger.info(`Cron: loaded ${scheduled} active jobs (${jobs.length} total)${missedFires > 0 ? `, fired ${missedFires} missed` : ''}`);
46
+ logger.info(`Tasks: loaded ${scheduled} active tasks (${jobs.length} total)${missedFires > 0 ? `, fired ${missedFires} missed` : ''}`);
44
47
  }
45
48
  /** Check for the reload signal file and reload if present */
46
49
  checkForReload() {
@@ -50,11 +53,11 @@ export class CronScheduler {
50
53
  fs.unlinkSync(signalPath);
51
54
  }
52
55
  catch { /* race condition, ok */ }
53
- logger.info('Cron: reload signal detected, reloading schedules');
56
+ logger.info('Tasks: reload signal detected, reloading schedules');
54
57
  this.loadAndSchedule();
55
58
  }
56
59
  }
57
- /** Stop all scheduled jobs */
60
+ /** Stop all scheduled tasks */
58
61
  stopAll() {
59
62
  for (const [, task] of this.scheduledJobs) {
60
63
  task.stop();
@@ -65,7 +68,7 @@ export class CronScheduler {
65
68
  switch (job.scheduleType) {
66
69
  case 'cron': {
67
70
  if (!cron.validate(job.schedule)) {
68
- logger.error(`Cron: invalid expression for "${job.name}": ${job.schedule}`);
71
+ logger.error(`Task: invalid expression for "${job.name}": ${job.schedule}`);
69
72
  return;
70
73
  }
71
74
  const task = cron.schedule(job.schedule, () => this.fireJob(job));
@@ -76,7 +79,7 @@ export class CronScheduler {
76
79
  const cronExpr = intervalToCron(job.schedule);
77
80
  if (cronExpr) {
78
81
  if (!cron.validate(cronExpr)) {
79
- logger.error(`Cron: invalid cron expression for "${job.name}": ${cronExpr}`);
82
+ logger.error(`Task: invalid cron expression for "${job.name}": ${cronExpr}`);
80
83
  return;
81
84
  }
82
85
  const task = cron.schedule(cronExpr, () => this.fireJob(job));
@@ -90,7 +93,7 @@ export class CronScheduler {
90
93
  this.scheduledJobs.set(job.id, { stop: () => clearInterval(timer) });
91
94
  }
92
95
  else {
93
- logger.error(`Cron: invalid interval for "${job.name}": ${job.schedule}`);
96
+ logger.error(`Task: invalid interval for "${job.name}": ${job.schedule}`);
94
97
  }
95
98
  }
96
99
  break;
@@ -99,7 +102,7 @@ export class CronScheduler {
99
102
  const targetTime = new Date(job.schedule).getTime();
100
103
  const delay = targetTime - Date.now();
101
104
  if (delay <= 0) {
102
- logger.warn(`Cron: one-time job "${job.name}" is in the past, skipping`);
105
+ logger.warn(`Task: one-time task "${job.name}" is in the past, skipping`);
103
106
  return;
104
107
  }
105
108
  const timer = setTimeout(() => {
@@ -112,19 +115,19 @@ export class CronScheduler {
112
115
  }
113
116
  }
114
117
  async fireJob(job) {
115
- logger.info(`Cron firing: "${job.name}" (${job.payloadType || 'agentTurn'}) → tab:${job.tabName}`);
116
- const logFile = path.join(getLogsDir(), `cron-${job.name}.log`);
117
- // Handle systemEvent — internal Beecork actions, not Claude Code
118
+ logger.info(`Task firing: "${job.name}" (${job.payloadType || 'agentTurn'}) -> tab:${job.tabName}`);
119
+ const logFile = path.join(getLogsDir(), `task-${job.name}.log`);
120
+ // Handle systemEvent -- internal Beecork actions, not Claude Code
118
121
  if (job.payloadType === 'systemEvent') {
119
122
  try {
120
123
  await this.handleSystemEvent(job);
121
124
  this.store.update(job.id, { lastRunAt: new Date().toISOString() });
122
- fs.appendFileSync(logFile, `[${new Date().toISOString()}] SYSTEM: ${job.message}\n`);
125
+ await fs.promises.appendFile(logFile, `[${new Date().toISOString()}] SYSTEM: ${job.message}\n`);
123
126
  }
124
127
  catch (err) {
125
128
  const errMsg = err instanceof Error ? err.message : String(err);
126
129
  logger.error(`System event "${job.name}" failed:`, err);
127
- fs.appendFileSync(logFile, `[${new Date().toISOString()}] ERROR: ${errMsg}\n`);
130
+ await fs.promises.appendFile(logFile, `[${new Date().toISOString()}] ERROR: ${errMsg}\n`);
128
131
  }
129
132
  return;
130
133
  }
@@ -134,28 +137,28 @@ export class CronScheduler {
134
137
  this.store.update(job.id, { lastRunAt: new Date().toISOString() });
135
138
  const firstLine = result.text.split('\n')[0]?.slice(0, 200) || '(no output)';
136
139
  // Log result
137
- fs.appendFileSync(logFile, `[${new Date().toISOString()}] SUCCESS: ${firstLine}\n`);
138
- // Notify (separate try/catch — notification failure shouldn't be reported as job failure)
140
+ await fs.promises.appendFile(logFile, `[${new Date().toISOString()}] SUCCESS: ${firstLine}\n`);
141
+ // Notify (separate try/catch -- notification failure shouldn't be reported as job failure)
139
142
  try {
140
143
  if (this.onNotify) {
141
144
  if (result.error) {
142
- await this.onNotify(`āŒ [${job.name}] Failed — ${firstLine}`);
145
+ await this.onNotify(`[${job.name}] Failed -- ${firstLine}`);
143
146
  }
144
147
  else {
145
- await this.onNotify(`āœ… [${job.name}] Done — ${firstLine}`);
148
+ await this.onNotify(`[${job.name}] Done -- ${firstLine}`);
146
149
  }
147
150
  }
148
151
  }
149
152
  catch (notifyErr) {
150
- logger.warn(`Cron job "${job.name}" notification failed:`, notifyErr);
153
+ logger.warn(`Task "${job.name}" notification failed:`, notifyErr);
151
154
  }
152
155
  }
153
156
  catch (err) {
154
157
  const errMsg = err instanceof Error ? err.message : String(err);
155
- logger.error(`Cron job "${job.name}" failed:`, err);
156
- fs.appendFileSync(logFile, `[${new Date().toISOString()}] ERROR: ${errMsg}\n`);
158
+ logger.error(`Task "${job.name}" failed:`, err);
159
+ await fs.promises.appendFile(logFile, `[${new Date().toISOString()}] ERROR: ${errMsg}\n`);
157
160
  try {
158
- await this.onNotify?.(`āŒ [${job.name}] Failed — ${errMsg}`);
161
+ await this.onNotify?.(`[${job.name}] Failed -- ${errMsg}`);
159
162
  }
160
163
  catch { /* notification best-effort */ }
161
164
  }
@@ -163,9 +166,9 @@ export class CronScheduler {
163
166
  async handleSystemEvent(job) {
164
167
  switch (job.message) {
165
168
  case 'health_check':
166
- logger.info('System event: health check — daemon alive');
169
+ logger.info('System event: health check -- daemon alive');
167
170
  if (this.onNotify) {
168
- await this.onNotify('🟢 Beecork health check: all systems operational');
171
+ await this.onNotify('Beecork health check: all systems operational');
169
172
  }
170
173
  break;
171
174
  case 'memory_compaction':
@@ -214,7 +217,6 @@ export function intervalToCron(interval) {
214
217
  // Weekly intervals
215
218
  if (mins === 0 && hours === 0 && days === 0 && weeks > 0)
216
219
  return `0 0 * * 0`;
217
- // Combined or large intervals — return null, handled by setInterval in scheduleJob
220
+ // Combined or large intervals -- return null, handled by setInterval in scheduleJob
218
221
  return null;
219
222
  }
220
- //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1,11 @@
1
+ import type { Task } from '../types.js';
2
+ export declare class TaskStore {
3
+ constructor();
4
+ list(): Task[];
5
+ get(id: string): Task | undefined;
6
+ add(job: Task): void;
7
+ update(id: string, updates: Partial<Task>): boolean;
8
+ delete(id: string): boolean;
9
+ /** One-time migration from crontab.json to SQLite */
10
+ private migrateFromJson;
11
+ }
@@ -2,7 +2,7 @@ import fs from 'node:fs';
2
2
  import { getDb } from '../db/index.js';
3
3
  import { getCrontabPath } from '../util/paths.js';
4
4
  import { logger } from '../util/logger.js';
5
- function rowToJob(row) {
5
+ function rowToTask(row) {
6
6
  return {
7
7
  id: row.id, name: row.name,
8
8
  scheduleType: row.schedule_type,
@@ -12,22 +12,22 @@ function rowToJob(row) {
12
12
  lastRunAt: row.last_run_at, nextRunAt: row.next_run_at,
13
13
  };
14
14
  }
15
- export class CronStore {
15
+ export class TaskStore {
16
16
  constructor() {
17
17
  this.migrateFromJson();
18
18
  }
19
19
  list() {
20
20
  const db = getDb();
21
- return db.prepare('SELECT * FROM cron_jobs WHERE user_id = ? ORDER BY created_at').all('local').map(rowToJob);
21
+ return db.prepare('SELECT * FROM tasks WHERE user_id = ? ORDER BY created_at').all('local').map(rowToTask);
22
22
  }
23
23
  get(id) {
24
24
  const db = getDb();
25
- const row = db.prepare('SELECT * FROM cron_jobs WHERE id = ?').get(id);
26
- return row ? rowToJob(row) : undefined;
25
+ const row = db.prepare('SELECT * FROM tasks WHERE id = ?').get(id);
26
+ return row ? rowToTask(row) : undefined;
27
27
  }
28
28
  add(job) {
29
29
  const db = getDb();
30
- db.prepare(`INSERT INTO cron_jobs (id, name, schedule_type, schedule, tab_name, message, payload_type, enabled, user_id, created_at, last_run_at, next_run_at)
30
+ db.prepare(`INSERT INTO tasks (id, name, schedule_type, schedule, tab_name, message, payload_type, enabled, user_id, created_at, last_run_at, next_run_at)
31
31
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(job.id, job.name, job.scheduleType, job.schedule, job.tabName, job.message, job.payloadType || 'agentTurn', job.enabled ? 1 : 0, 'local', job.createdAt, job.lastRunAt, job.nextRunAt);
32
32
  }
33
33
  update(id, updates) {
@@ -36,12 +36,12 @@ export class CronStore {
36
36
  if (!existing)
37
37
  return false;
38
38
  const merged = { ...existing, ...updates };
39
- db.prepare(`UPDATE cron_jobs SET name=?, schedule_type=?, schedule=?, tab_name=?, message=?, enabled=?, last_run_at=?, next_run_at=? WHERE id=?`).run(merged.name, merged.scheduleType, merged.schedule, merged.tabName, merged.message, merged.enabled ? 1 : 0, merged.lastRunAt, merged.nextRunAt, id);
39
+ db.prepare(`UPDATE tasks SET name=?, schedule_type=?, schedule=?, tab_name=?, message=?, enabled=?, last_run_at=?, next_run_at=? WHERE id=?`).run(merged.name, merged.scheduleType, merged.schedule, merged.tabName, merged.message, merged.enabled ? 1 : 0, merged.lastRunAt, merged.nextRunAt, id);
40
40
  return true;
41
41
  }
42
42
  delete(id) {
43
43
  const db = getDb();
44
- const result = db.prepare('DELETE FROM cron_jobs WHERE id = ?').run(id);
44
+ const result = db.prepare('DELETE FROM tasks WHERE id = ?').run(id);
45
45
  return result.changes > 0;
46
46
  }
47
47
  /** One-time migration from crontab.json to SQLite */
@@ -50,7 +50,7 @@ export class CronStore {
50
50
  if (!fs.existsSync(jsonPath))
51
51
  return;
52
52
  const db = getDb();
53
- const count = db.prepare('SELECT COUNT(*) as count FROM cron_jobs').get();
53
+ const count = db.prepare('SELECT COUNT(*) as count FROM tasks').get();
54
54
  if (count.count > 0) {
55
55
  // Already migrated, clean up JSON
56
56
  try {
@@ -64,7 +64,7 @@ export class CronStore {
64
64
  const jobs = data.jobs || [];
65
65
  if (jobs.length === 0)
66
66
  return;
67
- const insert = db.prepare(`INSERT OR IGNORE INTO cron_jobs (id, name, schedule_type, schedule, tab_name, message, enabled, user_id, created_at, last_run_at, next_run_at)
67
+ const insert = db.prepare(`INSERT OR IGNORE INTO tasks (id, name, schedule_type, schedule, tab_name, message, enabled, user_id, created_at, last_run_at, next_run_at)
68
68
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
69
69
  const tx = db.transaction(() => {
70
70
  for (const j of jobs) {
@@ -73,11 +73,10 @@ export class CronStore {
73
73
  });
74
74
  tx();
75
75
  fs.renameSync(jsonPath, jsonPath + '.bak');
76
- logger.info(`Migrated ${jobs.length} cron jobs from JSON to SQLite`);
76
+ logger.info(`Migrated ${jobs.length} tasks from JSON to SQLite`);
77
77
  }
78
78
  catch (err) {
79
- logger.error('Failed to migrate cron jobs from JSON:', err);
79
+ logger.error('Failed to migrate tasks from JSON:', err);
80
80
  }
81
81
  }
82
82
  }
83
- //# sourceMappingURL=store.js.map
@@ -0,0 +1,3 @@
1
+ export type { ActivityEvent, EventType } from './types.js';
2
+ export { logActivity } from './logger.js';
3
+ export { getTimeline, formatTimeline, getReplayInfo } from './query.js';
@@ -0,0 +1,2 @@
1
+ export { logActivity } from './logger.js';
2
+ export { getTimeline, formatTimeline, getReplayInfo } from './query.js';
@@ -0,0 +1,8 @@
1
+ import type { EventType } from './types.js';
2
+ export declare function logActivity(eventType: EventType, summary: string, options?: {
3
+ projectName?: string;
4
+ tabName?: string;
5
+ details?: string;
6
+ durationMs?: number;
7
+ costUsd?: number;
8
+ }): void;
@@ -0,0 +1,9 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { getDb } from '../db/index.js';
3
+ export function logActivity(eventType, summary, options) {
4
+ try {
5
+ const db = getDb();
6
+ db.prepare('INSERT INTO activity_log (id, event_type, project_name, tab_name, summary, details, duration_ms, cost_usd) VALUES (?, ?, ?, ?, ?, ?, ?, ?)').run(uuidv4(), eventType, options?.projectName || null, options?.tabName || null, summary, options?.details || null, options?.durationMs || null, options?.costUsd || null);
7
+ }
8
+ catch { /* non-critical — don't crash if logging fails */ }
9
+ }
@@ -0,0 +1,11 @@
1
+ import type { ActivityEvent } from './types.js';
2
+ export declare function getTimeline(options?: {
3
+ date?: string;
4
+ tabName?: string;
5
+ limit?: number;
6
+ }): ActivityEvent[];
7
+ export declare function formatTimeline(events: ActivityEvent[]): string;
8
+ export declare function getReplayInfo(eventId: string): {
9
+ tabName: string;
10
+ message: string;
11
+ } | null;
@@ -0,0 +1,57 @@
1
+ import { getDb } from '../db/index.js';
2
+ function rowToEvent(r) {
3
+ return {
4
+ id: r.id, eventType: r.event_type, projectName: r.project_name,
5
+ tabName: r.tab_name, summary: r.summary, details: r.details,
6
+ durationMs: r.duration_ms, costUsd: r.cost_usd, createdAt: r.created_at,
7
+ };
8
+ }
9
+ export function getTimeline(options) {
10
+ const db = getDb();
11
+ let query = 'SELECT * FROM activity_log';
12
+ const conditions = [];
13
+ const params = [];
14
+ if (options?.date) {
15
+ conditions.push('date(created_at) = ?');
16
+ params.push(options.date);
17
+ }
18
+ if (options?.tabName) {
19
+ conditions.push('tab_name = ?');
20
+ params.push(options.tabName);
21
+ }
22
+ if (conditions.length > 0)
23
+ query += ' WHERE ' + conditions.join(' AND ');
24
+ query += ' ORDER BY created_at DESC';
25
+ query += ' LIMIT ?';
26
+ params.push(options?.limit || 50);
27
+ return db.prepare(query).all(...params).map(rowToEvent);
28
+ }
29
+ export function formatTimeline(events) {
30
+ if (events.length === 0)
31
+ return 'No activity recorded.';
32
+ const byDate = new Map();
33
+ for (const event of events.reverse()) {
34
+ const date = event.createdAt.slice(0, 10);
35
+ if (!byDate.has(date))
36
+ byDate.set(date, []);
37
+ byDate.get(date).push(event);
38
+ }
39
+ const lines = [];
40
+ for (const [date, dayEvents] of byDate) {
41
+ lines.push(`\nšŸ“… ${date}`);
42
+ for (const e of dayEvents) {
43
+ const time = e.createdAt.slice(11, 16);
44
+ const tab = e.tabName ? `[${e.tabName}]` : '';
45
+ const cost = e.costUsd ? ` $${e.costUsd.toFixed(4)}` : '';
46
+ lines.push(` ${time} ${tab} ${e.summary}${cost}`);
47
+ }
48
+ }
49
+ return lines.join('\n');
50
+ }
51
+ export function getReplayInfo(eventId) {
52
+ const db = getDb();
53
+ const event = db.prepare('SELECT * FROM activity_log WHERE id = ?').get(eventId);
54
+ if (!event || !event.tab_name || !event.details)
55
+ return null;
56
+ return { tabName: event.tab_name, message: event.details };
57
+ }
@@ -0,0 +1,12 @@
1
+ export type EventType = 'task_started' | 'task_completed' | 'task_failed' | 'watcher_triggered' | 'media_generated' | 'delegation_completed' | 'user_command' | 'system_event';
2
+ export interface ActivityEvent {
3
+ id: string;
4
+ eventType: EventType;
5
+ projectName: string | null;
6
+ tabName: string | null;
7
+ summary: string;
8
+ details: string | null;
9
+ durationMs: number | null;
10
+ costUsd: number | null;
11
+ createdAt: string;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
package/dist/types.d.ts CHANGED
@@ -95,6 +95,7 @@ export interface BeecorkConfig {
95
95
  groups?: GroupConfig;
96
96
  notifications?: NotificationConfig[];
97
97
  mediaGenerators?: MediaGeneratorConfig[];
98
+ communityChannels?: string[];
98
99
  deployment: 'local' | 'vps';
99
100
  }
100
101
  export type TabStatus = 'idle' | 'running' | 'error' | 'stopped';
@@ -161,16 +162,16 @@ export interface StreamUsage {
161
162
  cache_read_input_tokens: number;
162
163
  }
163
164
  export type StreamEvent = StreamInit | StreamAssistant | StreamResult;
164
- export type CronScheduleType = 'at' | 'every' | 'cron';
165
- export type CronPayloadType = 'agentTurn' | 'systemEvent';
166
- export interface CronJob {
165
+ export type TaskScheduleType = 'at' | 'every' | 'cron';
166
+ export type TaskPayloadType = 'agentTurn' | 'systemEvent';
167
+ export interface Task {
167
168
  id: string;
168
169
  name: string;
169
- scheduleType: CronScheduleType;
170
+ scheduleType: TaskScheduleType;
170
171
  schedule: string;
171
172
  tabName: string;
172
173
  message: string;
173
- payloadType: CronPayloadType;
174
+ payloadType: TaskPayloadType;
174
175
  enabled: boolean;
175
176
  createdAt: string;
176
177
  lastRunAt: string | null;
@@ -187,4 +188,3 @@ export interface CircuitBreakerConfig {
187
188
  maxRepeats: number;
188
189
  windowSize: number;
189
190
  }
190
- //# sourceMappingURL=types.d.ts.map
package/dist/types.js CHANGED
@@ -1,4 +1,3 @@
1
1
  // ─── Config ───
2
2
  export {};
3
3
  // Channel interface: see src/channels/types.ts
4
- //# sourceMappingURL=types.js.map
@@ -1,3 +1,2 @@
1
- export { resolveUser, registerUser, linkIdentity, listUsers, hasAdmin, getUserIdentities, ensureAdminFromConfig } from './service.js';
1
+ export { resolveUser, registerUser, linkIdentity, listUsers, hasAdmin } from './service.js';
2
2
  export type { User } from './service.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1 @@
1
- export { resolveUser, registerUser, linkIdentity, listUsers, hasAdmin, getUserIdentities, ensureAdminFromConfig } from './service.js';
2
- //# sourceMappingURL=index.js.map
1
+ export { resolveUser, registerUser, linkIdentity, listUsers, hasAdmin } from './service.js';
@@ -15,11 +15,3 @@ export declare function linkIdentity(userId: string, channelId: string, peerId:
15
15
  export declare function listUsers(): User[];
16
16
  /** Check if any admin exists */
17
17
  export declare function hasAdmin(): boolean;
18
- /** Get user's identities across channels */
19
- export declare function getUserIdentities(userId: string): Array<{
20
- channelId: string;
21
- peerId: string;
22
- }>;
23
- /** Auto-create admin user from config's allowed IDs (migration helper) */
24
- export declare function ensureAdminFromConfig(channelId: string, peerIds: Array<string | number>): void;
25
- //# sourceMappingURL=service.d.ts.map