beecork 0.3.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/dist/channels/discord.d.ts +23 -0
  2. package/dist/channels/discord.d.ts.map +1 -0
  3. package/dist/channels/discord.js +352 -0
  4. package/dist/channels/discord.js.map +1 -0
  5. package/dist/channels/index.d.ts +8 -0
  6. package/dist/channels/index.d.ts.map +1 -0
  7. package/dist/channels/index.js +7 -0
  8. package/dist/channels/index.js.map +1 -0
  9. package/dist/channels/loader.d.ts +8 -0
  10. package/dist/channels/loader.d.ts.map +1 -0
  11. package/dist/channels/loader.js +72 -0
  12. package/dist/channels/loader.js.map +1 -0
  13. package/dist/channels/registry.d.ts +24 -0
  14. package/dist/channels/registry.d.ts.map +1 -0
  15. package/dist/channels/registry.js +65 -0
  16. package/dist/channels/registry.js.map +1 -0
  17. package/dist/channels/telegram.d.ts +41 -0
  18. package/dist/channels/telegram.d.ts.map +1 -0
  19. package/dist/channels/telegram.js +720 -0
  20. package/dist/channels/telegram.js.map +1 -0
  21. package/dist/channels/types.d.ts +67 -0
  22. package/dist/channels/types.d.ts.map +1 -0
  23. package/dist/channels/types.js +2 -0
  24. package/dist/channels/types.js.map +1 -0
  25. package/dist/channels/webhook.d.ts +28 -0
  26. package/dist/channels/webhook.d.ts.map +1 -0
  27. package/dist/channels/webhook.js +164 -0
  28. package/dist/channels/webhook.js.map +1 -0
  29. package/dist/channels/whatsapp.d.ts +27 -0
  30. package/dist/channels/whatsapp.d.ts.map +1 -0
  31. package/dist/channels/whatsapp.js +373 -0
  32. package/dist/channels/whatsapp.js.map +1 -0
  33. package/dist/cli/channel.d.ts +4 -0
  34. package/dist/cli/channel.d.ts.map +1 -0
  35. package/dist/cli/channel.js +194 -0
  36. package/dist/cli/channel.js.map +1 -0
  37. package/dist/cli/doctor.d.ts +2 -0
  38. package/dist/cli/doctor.d.ts.map +1 -0
  39. package/dist/cli/doctor.js +150 -0
  40. package/dist/cli/doctor.js.map +1 -0
  41. package/dist/cli/handoff.d.ts +16 -0
  42. package/dist/cli/handoff.d.ts.map +1 -0
  43. package/dist/cli/handoff.js +69 -0
  44. package/dist/cli/handoff.js.map +1 -0
  45. package/dist/cli/mcp.d.ts +4 -0
  46. package/dist/cli/mcp.d.ts.map +1 -0
  47. package/dist/cli/mcp.js +48 -0
  48. package/dist/cli/mcp.js.map +1 -0
  49. package/dist/cli/media.d.ts +3 -0
  50. package/dist/cli/media.d.ts.map +1 -0
  51. package/dist/cli/media.js +113 -0
  52. package/dist/cli/media.js.map +1 -0
  53. package/dist/cli/setup.d.ts.map +1 -1
  54. package/dist/cli/setup.js +249 -19
  55. package/dist/cli/setup.js.map +1 -1
  56. package/dist/config.d.ts.map +1 -1
  57. package/dist/config.js +10 -1
  58. package/dist/config.js.map +1 -1
  59. package/dist/cron/scheduler.d.ts +2 -0
  60. package/dist/cron/scheduler.d.ts.map +1 -1
  61. package/dist/cron/scheduler.js +32 -10
  62. package/dist/cron/scheduler.js.map +1 -1
  63. package/dist/daemon.js +87 -25
  64. package/dist/daemon.js.map +1 -1
  65. package/dist/dashboard/html.d.ts +1 -1
  66. package/dist/dashboard/html.d.ts.map +1 -1
  67. package/dist/dashboard/html.js +396 -111
  68. package/dist/dashboard/html.js.map +1 -1
  69. package/dist/dashboard/server.d.ts.map +1 -1
  70. package/dist/dashboard/server.js +176 -16
  71. package/dist/dashboard/server.js.map +1 -1
  72. package/dist/db/index.d.ts.map +1 -1
  73. package/dist/db/index.js +15 -0
  74. package/dist/db/index.js.map +1 -1
  75. package/dist/db/migrations.d.ts.map +1 -1
  76. package/dist/db/migrations.js +94 -0
  77. package/dist/db/migrations.js.map +1 -1
  78. package/dist/delegation/manager.d.ts +21 -0
  79. package/dist/delegation/manager.d.ts.map +1 -0
  80. package/dist/delegation/manager.js +88 -0
  81. package/dist/delegation/manager.js.map +1 -0
  82. package/dist/index.js +283 -0
  83. package/dist/index.js.map +1 -1
  84. package/dist/machines/forwarder.d.ts +7 -0
  85. package/dist/machines/forwarder.d.ts.map +1 -0
  86. package/dist/machines/forwarder.js +25 -0
  87. package/dist/machines/forwarder.js.map +1 -0
  88. package/dist/machines/index.d.ts +3 -0
  89. package/dist/machines/index.d.ts.map +1 -0
  90. package/dist/machines/index.js +3 -0
  91. package/dist/machines/index.js.map +1 -0
  92. package/dist/machines/registry.d.ts +22 -0
  93. package/dist/machines/registry.d.ts.map +1 -0
  94. package/dist/machines/registry.js +71 -0
  95. package/dist/machines/registry.js.map +1 -0
  96. package/dist/mcp/server.js +418 -32
  97. package/dist/mcp/server.js.map +1 -1
  98. package/dist/media/factory.d.ts +7 -0
  99. package/dist/media/factory.d.ts.map +1 -0
  100. package/dist/media/factory.js +33 -0
  101. package/dist/media/factory.js.map +1 -0
  102. package/dist/media/generators/dall-e.d.ts +11 -0
  103. package/dist/media/generators/dall-e.d.ts.map +1 -0
  104. package/dist/media/generators/dall-e.js +42 -0
  105. package/dist/media/generators/dall-e.js.map +1 -0
  106. package/dist/media/generators/elevenlabs-music.d.ts +10 -0
  107. package/dist/media/generators/elevenlabs-music.d.ts.map +1 -0
  108. package/dist/media/generators/elevenlabs-music.js +35 -0
  109. package/dist/media/generators/elevenlabs-music.js.map +1 -0
  110. package/dist/media/generators/elevenlabs-sfx.d.ts +10 -0
  111. package/dist/media/generators/elevenlabs-sfx.d.ts.map +1 -0
  112. package/dist/media/generators/elevenlabs-sfx.js +34 -0
  113. package/dist/media/generators/elevenlabs-sfx.js.map +1 -0
  114. package/dist/media/generators/kling.d.ts +10 -0
  115. package/dist/media/generators/kling.d.ts.map +1 -0
  116. package/dist/media/generators/kling.js +53 -0
  117. package/dist/media/generators/kling.js.map +1 -0
  118. package/dist/media/generators/lyria.d.ts +11 -0
  119. package/dist/media/generators/lyria.d.ts.map +1 -0
  120. package/dist/media/generators/lyria.js +42 -0
  121. package/dist/media/generators/lyria.js.map +1 -0
  122. package/dist/media/generators/nano-banana.d.ts +11 -0
  123. package/dist/media/generators/nano-banana.d.ts.map +1 -0
  124. package/dist/media/generators/nano-banana.js +46 -0
  125. package/dist/media/generators/nano-banana.js.map +1 -0
  126. package/dist/media/generators/recraft.d.ts +10 -0
  127. package/dist/media/generators/recraft.d.ts.map +1 -0
  128. package/dist/media/generators/recraft.js +53 -0
  129. package/dist/media/generators/recraft.js.map +1 -0
  130. package/dist/media/generators/runway.d.ts +10 -0
  131. package/dist/media/generators/runway.d.ts.map +1 -0
  132. package/dist/media/generators/runway.js +58 -0
  133. package/dist/media/generators/runway.js.map +1 -0
  134. package/dist/media/generators/stable-diffusion.d.ts +10 -0
  135. package/dist/media/generators/stable-diffusion.d.ts.map +1 -0
  136. package/dist/media/generators/stable-diffusion.js +36 -0
  137. package/dist/media/generators/stable-diffusion.js.map +1 -0
  138. package/dist/media/generators/veo.d.ts +10 -0
  139. package/dist/media/generators/veo.d.ts.map +1 -0
  140. package/dist/media/generators/veo.js +33 -0
  141. package/dist/media/generators/veo.js.map +1 -0
  142. package/dist/media/index.d.ts +13 -0
  143. package/dist/media/index.d.ts.map +1 -0
  144. package/dist/media/index.js +10 -0
  145. package/dist/media/index.js.map +1 -0
  146. package/dist/media/loader.d.ts +8 -0
  147. package/dist/media/loader.d.ts.map +1 -0
  148. package/dist/media/loader.js +46 -0
  149. package/dist/media/loader.js.map +1 -0
  150. package/dist/media/store.d.ts +11 -0
  151. package/dist/media/store.d.ts.map +1 -0
  152. package/dist/media/store.js +53 -0
  153. package/dist/media/store.js.map +1 -0
  154. package/dist/media/types.d.ts +22 -0
  155. package/dist/media/types.d.ts.map +1 -0
  156. package/dist/media/types.js +2 -0
  157. package/dist/media/types.js.map +1 -0
  158. package/dist/memory/extractor.js +1 -1
  159. package/dist/memory/extractor.js.map +1 -1
  160. package/dist/notifications/index.d.ts +7 -0
  161. package/dist/notifications/index.d.ts.map +1 -0
  162. package/dist/notifications/index.js +35 -0
  163. package/dist/notifications/index.js.map +1 -0
  164. package/dist/notifications/ntfy.d.ts +10 -0
  165. package/dist/notifications/ntfy.d.ts.map +1 -0
  166. package/dist/notifications/ntfy.js +26 -0
  167. package/dist/notifications/ntfy.js.map +1 -0
  168. package/dist/notifications/pushover.d.ts +10 -0
  169. package/dist/notifications/pushover.d.ts.map +1 -0
  170. package/dist/notifications/pushover.js +27 -0
  171. package/dist/notifications/pushover.js.map +1 -0
  172. package/dist/notifications/types.d.ts +6 -0
  173. package/dist/notifications/types.d.ts.map +1 -0
  174. package/dist/notifications/types.js +2 -0
  175. package/dist/notifications/types.js.map +1 -0
  176. package/dist/notifications/webhook-provider.d.ts +10 -0
  177. package/dist/notifications/webhook-provider.d.ts.map +1 -0
  178. package/dist/notifications/webhook-provider.js +25 -0
  179. package/dist/notifications/webhook-provider.js.map +1 -0
  180. package/dist/observability/analytics.d.ts +26 -0
  181. package/dist/observability/analytics.d.ts.map +1 -0
  182. package/dist/observability/analytics.js +94 -0
  183. package/dist/observability/analytics.js.map +1 -0
  184. package/dist/pipe/memory-store.d.ts +1 -6
  185. package/dist/pipe/memory-store.d.ts.map +1 -1
  186. package/dist/pipe/memory-store.js +0 -24
  187. package/dist/pipe/memory-store.js.map +1 -1
  188. package/dist/pipe/types.d.ts +0 -9
  189. package/dist/pipe/types.d.ts.map +1 -1
  190. package/dist/projects/index.d.ts +4 -0
  191. package/dist/projects/index.d.ts.map +1 -0
  192. package/dist/projects/index.js +3 -0
  193. package/dist/projects/index.js.map +1 -0
  194. package/dist/projects/manager.d.ts +20 -0
  195. package/dist/projects/manager.d.ts.map +1 -0
  196. package/dist/projects/manager.js +135 -0
  197. package/dist/projects/manager.js.map +1 -0
  198. package/dist/projects/router.d.ts +6 -0
  199. package/dist/projects/router.d.ts.map +1 -0
  200. package/dist/projects/router.js +177 -0
  201. package/dist/projects/router.js.map +1 -0
  202. package/dist/projects/types.d.ts +26 -0
  203. package/dist/projects/types.d.ts.map +1 -0
  204. package/dist/projects/types.js +2 -0
  205. package/dist/projects/types.js.map +1 -0
  206. package/dist/service/install.d.ts.map +1 -1
  207. package/dist/service/install.js +26 -7
  208. package/dist/service/install.js.map +1 -1
  209. package/dist/service/windows.d.ts +11 -0
  210. package/dist/service/windows.d.ts.map +1 -0
  211. package/dist/service/windows.js +70 -0
  212. package/dist/service/windows.js.map +1 -0
  213. package/dist/session/manager.d.ts +3 -1
  214. package/dist/session/manager.d.ts.map +1 -1
  215. package/dist/session/manager.js +46 -9
  216. package/dist/session/manager.js.map +1 -1
  217. package/dist/session/subprocess.d.ts +2 -1
  218. package/dist/session/subprocess.d.ts.map +1 -1
  219. package/dist/session/subprocess.js +8 -2
  220. package/dist/session/subprocess.js.map +1 -1
  221. package/dist/types.d.ts +54 -2
  222. package/dist/types.d.ts.map +1 -1
  223. package/dist/types.js +1 -3
  224. package/dist/types.js.map +1 -1
  225. package/dist/users/index.d.ts +3 -0
  226. package/dist/users/index.d.ts.map +1 -0
  227. package/dist/users/index.js +2 -0
  228. package/dist/users/index.js.map +1 -0
  229. package/dist/users/service.d.ts +25 -0
  230. package/dist/users/service.d.ts.map +1 -0
  231. package/dist/users/service.js +65 -0
  232. package/dist/users/service.js.map +1 -0
  233. package/dist/util/logger.d.ts +2 -0
  234. package/dist/util/logger.d.ts.map +1 -1
  235. package/dist/util/logger.js +24 -0
  236. package/dist/util/logger.js.map +1 -1
  237. package/dist/util/platform.d.ts +1 -1
  238. package/dist/util/platform.d.ts.map +1 -1
  239. package/dist/util/platform.js +3 -1
  240. package/dist/util/platform.js.map +1 -1
  241. package/dist/util/progress.d.ts +35 -0
  242. package/dist/util/progress.d.ts.map +1 -0
  243. package/dist/util/progress.js +134 -0
  244. package/dist/util/progress.js.map +1 -0
  245. package/dist/util/rate-limiter.d.ts +15 -0
  246. package/dist/util/rate-limiter.d.ts.map +1 -0
  247. package/dist/util/rate-limiter.js +43 -0
  248. package/dist/util/rate-limiter.js.map +1 -0
  249. package/dist/util/text.d.ts +3 -0
  250. package/dist/util/text.d.ts.map +1 -1
  251. package/dist/util/text.js +19 -0
  252. package/dist/util/text.js.map +1 -1
  253. package/dist/voice/index.d.ts +10 -0
  254. package/dist/voice/index.d.ts.map +1 -0
  255. package/dist/voice/index.js +16 -0
  256. package/dist/voice/index.js.map +1 -0
  257. package/dist/voice/stt.d.ts +15 -0
  258. package/dist/voice/stt.d.ts.map +1 -0
  259. package/dist/voice/stt.js +40 -0
  260. package/dist/voice/stt.js.map +1 -0
  261. package/dist/voice/tts.d.ts +24 -0
  262. package/dist/voice/tts.d.ts.map +1 -0
  263. package/dist/voice/tts.js +85 -0
  264. package/dist/voice/tts.js.map +1 -0
  265. package/package.json +2 -1
  266. package/dist/session/approval.d.ts +0 -20
  267. package/dist/session/approval.d.ts.map +0 -1
  268. package/dist/session/approval.js +0 -59
  269. package/dist/session/approval.js.map +0 -1
  270. package/dist/telegram/bot.d.ts +0 -25
  271. package/dist/telegram/bot.d.ts.map +0 -1
  272. package/dist/telegram/bot.js +0 -307
  273. package/dist/telegram/bot.js.map +0 -1
  274. package/dist/telegram/formatter.d.ts +0 -9
  275. package/dist/telegram/formatter.d.ts.map +0 -1
  276. package/dist/telegram/formatter.js +0 -13
  277. package/dist/telegram/formatter.js.map +0 -1
  278. package/dist/whatsapp/client.d.ts +0 -26
  279. package/dist/whatsapp/client.d.ts.map +0 -1
  280. package/dist/whatsapp/client.js +0 -145
  281. package/dist/whatsapp/client.js.map +0 -1
  282. package/dist/whatsapp/formatter.d.ts +0 -3
  283. package/dist/whatsapp/formatter.d.ts.map +0 -1
  284. package/dist/whatsapp/formatter.js +0 -7
  285. package/dist/whatsapp/formatter.js.map +0 -1
@@ -0,0 +1,373 @@
1
+ import fs from 'node:fs';
2
+ import { logger } from '../util/logger.js';
3
+ import { saveMedia, isOversized } from '../media/store.js';
4
+ import { retryWithBackoff } from '../util/retry.js';
5
+ import { chunkText, parseTabMessage, buildMediaPrompt } from '../util/text.js';
6
+ import { inboundLimiter } from '../util/rate-limiter.js';
7
+ import { ProgressTracker } from '../util/progress.js';
8
+ import { initVoiceProviders } from '../voice/index.js';
9
+ const WHATSAPP_MAX_LENGTH = 8192;
10
+ export class WhatsAppChannel {
11
+ id = 'whatsapp';
12
+ name = 'WhatsApp';
13
+ maxMessageLength = WHATSAPP_MAX_LENGTH;
14
+ supportsStreaming = false;
15
+ supportsMedia = true;
16
+ sock = null;
17
+ ctx;
18
+ allowedNumbers;
19
+ reconnectAttempts = 0;
20
+ maxReconnectAttempts = 10;
21
+ backoffDelays = [1000, 5000, 15000, 30000, 60000];
22
+ messageHandler = null;
23
+ sttProvider = null;
24
+ ttsProvider = null;
25
+ constructor(ctx) {
26
+ this.ctx = ctx;
27
+ this.allowedNumbers = new Set(ctx.config.whatsapp?.allowedNumbers ?? []);
28
+ }
29
+ async start() {
30
+ // Initialize voice providers
31
+ const { stt, tts } = initVoiceProviders(this.ctx.config.voice);
32
+ this.sttProvider = stt;
33
+ this.ttsProvider = tts;
34
+ try {
35
+ const { default: makeWASocket, useMultiFileAuthState, DisconnectReason, downloadMediaMessage } = await import('@whiskeysockets/baileys');
36
+ const sessionPath = this.ctx.config.whatsapp?.sessionPath ?? `${process.env.HOME}/.beecork/whatsapp-session`;
37
+ fs.mkdirSync(sessionPath, { recursive: true, mode: 0o700 });
38
+ const { state, saveCreds } = await useMultiFileAuthState(sessionPath);
39
+ this.sock = makeWASocket({
40
+ auth: state,
41
+ printQRInTerminal: true,
42
+ });
43
+ const sock = this.sock;
44
+ sock.ev.on('creds.update', saveCreds);
45
+ sock.ev.on('connection.update', (update) => {
46
+ const { connection, lastDisconnect } = update;
47
+ if (connection === 'close') {
48
+ const reason = lastDisconnect?.error?.output?.statusCode;
49
+ if (reason !== DisconnectReason.loggedOut) {
50
+ this.reconnectAttempts++;
51
+ if (this.reconnectAttempts > this.maxReconnectAttempts) {
52
+ logger.error(`WhatsApp reconnect failed after ${this.maxReconnectAttempts} attempts, giving up`);
53
+ return;
54
+ }
55
+ const delayIdx = Math.min(this.reconnectAttempts - 1, this.backoffDelays.length - 1);
56
+ const delay = this.backoffDelays[delayIdx];
57
+ logger.warn(`WhatsApp connection closed, reconnecting in ${delay / 1000}s (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
58
+ setTimeout(() => {
59
+ this.start().catch(err => {
60
+ logger.error('WhatsApp reconnect failed:', err);
61
+ });
62
+ }, delay);
63
+ }
64
+ else {
65
+ logger.error('WhatsApp logged out. Please re-scan QR code.');
66
+ }
67
+ }
68
+ else if (connection === 'open') {
69
+ this.reconnectAttempts = 0;
70
+ logger.info('WhatsApp connected');
71
+ }
72
+ });
73
+ sock.ev.on('messages.upsert', async (m) => {
74
+ const msg = m.messages[0];
75
+ if (!msg?.message || msg.key.fromMe)
76
+ return;
77
+ const sender = msg.key.remoteJid;
78
+ if (!sender || !this.isAllowed(sender))
79
+ return;
80
+ // Rate limit check
81
+ if (!inboundLimiter.check(this.id)) {
82
+ await sock.sendMessage(sender, { text: "I'm receiving too many messages right now. Please wait a moment." }).catch(() => { });
83
+ return;
84
+ }
85
+ const text = msg.message.conversation ||
86
+ msg.message.extendedTextMessage?.text ||
87
+ msg.message.imageMessage?.caption ||
88
+ msg.message.videoMessage?.caption || '';
89
+ // Download media (in parallel)
90
+ const waDownloadTasks = [];
91
+ if (msg.message.imageMessage) {
92
+ waDownloadTasks.push(downloadMediaMessage(msg, 'buffer', {})
93
+ .then((buffer) => {
94
+ if (buffer && !isOversized(buffer.length)) {
95
+ const filePath = saveMedia(buffer, 'jpg');
96
+ return { type: 'image', mimeType: msg.message.imageMessage.mimetype || 'image/jpeg', filePath };
97
+ }
98
+ return null;
99
+ })
100
+ .catch(() => null));
101
+ }
102
+ if (msg.message.audioMessage) {
103
+ waDownloadTasks.push(downloadMediaMessage(msg, 'buffer', {})
104
+ .then((buffer) => {
105
+ if (buffer && !isOversized(buffer.length)) {
106
+ const ext = msg.message.audioMessage.ptt ? 'ogg' : 'mp3';
107
+ const filePath = saveMedia(buffer, ext);
108
+ return {
109
+ type: (msg.message.audioMessage.ptt ? 'voice' : 'audio'),
110
+ mimeType: msg.message.audioMessage.mimetype || 'audio/ogg',
111
+ filePath,
112
+ duration: msg.message.audioMessage.seconds ?? undefined,
113
+ };
114
+ }
115
+ return null;
116
+ })
117
+ .catch(() => null));
118
+ }
119
+ if (msg.message.documentMessage) {
120
+ waDownloadTasks.push(downloadMediaMessage(msg, 'buffer', {})
121
+ .then((buffer) => {
122
+ if (buffer && !isOversized(buffer.length)) {
123
+ const ext = msg.message.documentMessage.fileName?.split('.').pop() || 'bin';
124
+ const filePath = saveMedia(buffer, ext, msg.message.documentMessage.fileName ?? undefined);
125
+ return { type: 'document', mimeType: msg.message.documentMessage.mimetype || 'application/octet-stream', filePath, fileName: msg.message.documentMessage.fileName ?? undefined };
126
+ }
127
+ return null;
128
+ })
129
+ .catch(() => null));
130
+ }
131
+ if (msg.message.videoMessage) {
132
+ waDownloadTasks.push(downloadMediaMessage(msg, 'buffer', {})
133
+ .then((buffer) => {
134
+ if (buffer && !isOversized(buffer.length)) {
135
+ const filePath = saveMedia(buffer, 'mp4');
136
+ return { type: 'video', mimeType: msg.message.videoMessage.mimetype || 'video/mp4', filePath, duration: msg.message.videoMessage.seconds ?? undefined };
137
+ }
138
+ return null;
139
+ })
140
+ .catch(() => null));
141
+ }
142
+ const waResults = await Promise.allSettled(waDownloadTasks);
143
+ const media = waResults
144
+ .filter((r) => r.status === 'fulfilled' && r.value !== null)
145
+ .map(r => r.value);
146
+ // Transcribe voice messages if STT is configured
147
+ if (this.sttProvider) {
148
+ for (const att of media) {
149
+ if (att.type === 'voice' && att.filePath) {
150
+ try {
151
+ const transcription = await this.sttProvider.transcribe(att.filePath);
152
+ att.caption = `[Transcribed from voice message]: ${transcription}`;
153
+ }
154
+ catch (err) {
155
+ logger.warn('Voice transcription failed, passing file path instead:', err);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ if (!text && media.length === 0)
161
+ return;
162
+ try {
163
+ // Handle project commands
164
+ if (text === '/projects') {
165
+ const { listProjects } = await import('../projects/index.js');
166
+ const projects = listProjects();
167
+ if (projects.length === 0) {
168
+ await sock.sendMessage(sender, { text: 'No projects found. Create one with /newproject <name>' });
169
+ return;
170
+ }
171
+ const userProjects = projects.filter((p) => p.type === 'user-project');
172
+ const categories = projects.filter((p) => p.type === 'category');
173
+ let msg2 = '📦 Projects:\n';
174
+ if (userProjects.length > 0) {
175
+ msg2 += userProjects.map((p) => ` • ${p.name} — ${p.path}`).join('\n');
176
+ }
177
+ if (categories.length > 0) {
178
+ msg2 += '\n\n📁 Categories:\n';
179
+ msg2 += categories.map((p) => ` • ${p.name}`).join('\n');
180
+ }
181
+ await sock.sendMessage(sender, { text: msg2 });
182
+ return;
183
+ }
184
+ if (text.startsWith('/project ') && !text.startsWith('/projects')) {
185
+ const pname = text.slice(9).trim();
186
+ const { getProject, setUserContext } = await import('../projects/index.js');
187
+ const project = getProject(pname);
188
+ if (!project) {
189
+ await sock.sendMessage(sender, { text: `Project "${pname}" not found. Use /projects to list or /newproject to create.` });
190
+ return;
191
+ }
192
+ const waNumber = sender.replace('@s.whatsapp.net', '');
193
+ setUserContext(waNumber, project.name, project.name);
194
+ await sock.sendMessage(sender, { text: `Switched to project: ${project.name}\nPath: ${project.path}\n\nNext messages will work in this project.` });
195
+ return;
196
+ }
197
+ if (text.startsWith('/newproject ')) {
198
+ const parts = text.slice(12).trim().split(/\s+/);
199
+ const pname = parts[0];
200
+ const customPath = parts[1] || undefined;
201
+ if (!pname) {
202
+ await sock.sendMessage(sender, { text: 'Usage: /newproject <name> [path]' });
203
+ return;
204
+ }
205
+ const { createProject, setUserContext } = await import('../projects/index.js');
206
+ const project = createProject(pname, customPath);
207
+ const waNumber = sender.replace('@s.whatsapp.net', '');
208
+ setUserContext(waNumber, project.name, project.name);
209
+ await sock.sendMessage(sender, { text: `✓ Project "${pname}" created at ${project.path}\nSwitched to this project.` });
210
+ return;
211
+ }
212
+ if (text.startsWith('/close ')) {
213
+ const tabToClose = text.slice(7).trim();
214
+ if (!tabToClose) {
215
+ await sock.sendMessage(sender, { text: 'Usage: /close <tabname>' });
216
+ return;
217
+ }
218
+ const { closeTab } = await import('../projects/index.js');
219
+ const closed = closeTab(tabToClose);
220
+ if (closed) {
221
+ await sock.sendMessage(sender, { text: `Tab "${tabToClose}" permanently closed. History deleted.` });
222
+ }
223
+ else {
224
+ await sock.sendMessage(sender, { text: `Tab "${tabToClose}" not found.` });
225
+ }
226
+ return;
227
+ }
228
+ if (text.startsWith('/fresh ')) {
229
+ const projectName = text.slice(7).trim();
230
+ const { getProject, setUserContext } = await import('../projects/index.js');
231
+ const project = getProject(projectName);
232
+ if (!project) {
233
+ await sock.sendMessage(sender, { text: `Project "${projectName}" not found.` });
234
+ return;
235
+ }
236
+ const freshTab = `${projectName}-${Date.now().toString(36).slice(-4)}`;
237
+ const waNumber = sender.replace('@s.whatsapp.net', '');
238
+ setUserContext(waNumber, project.name, freshTab);
239
+ await sock.sendMessage(sender, { text: `Fresh start in "${projectName}" (tab: ${freshTab})\nSend your message now.` });
240
+ return;
241
+ }
242
+ const { tabName, prompt: rawPrompt } = parseTabMessage(text);
243
+ if (!rawPrompt && media.length === 0)
244
+ return;
245
+ // Build prompt with media references
246
+ const prompt = buildMediaPrompt(media, rawPrompt);
247
+ // Smart project routing (if no explicit /tab command)
248
+ let effectiveTabName = tabName;
249
+ let projectPath;
250
+ if (tabName === 'default' && !text.startsWith('/tab ')) {
251
+ try {
252
+ const { routeMessage, setUserContext } = await import('../projects/index.js');
253
+ const waNumber = sender.replace('@s.whatsapp.net', '');
254
+ const decision = routeMessage(rawPrompt, {
255
+ userId: waNumber,
256
+ });
257
+ if (decision.needsConfirmation) {
258
+ const { listProjects } = await import('../projects/index.js');
259
+ const projects = listProjects().filter((p) => p.type === 'user-project');
260
+ const options = projects.map((p, i) => `${i + 1}) ${p.name}`).join('\n');
261
+ await sock.sendMessage(sender, { text: `Which project?\n${options}\n\nReply with the number, or just send your message with /project <name> first.` });
262
+ return;
263
+ }
264
+ effectiveTabName = decision.tabName;
265
+ projectPath = decision.project.path;
266
+ setUserContext(waNumber, decision.project.name, decision.tabName);
267
+ }
268
+ catch (err) {
269
+ logger.warn('Project routing failed, using default:', err);
270
+ }
271
+ }
272
+ await sock.sendPresenceUpdate('composing', sender).catch(() => { });
273
+ // Progress updates for long tasks (every 30 seconds)
274
+ const progressTracker = new ProgressTracker(effectiveTabName, (msg) => {
275
+ sock.sendMessage(sender, { text: msg }).catch(() => { });
276
+ });
277
+ const result = await this.ctx.tabManager.sendMessage(effectiveTabName, prompt, {
278
+ onToolUse: (name, input) => progressTracker.record(name, input),
279
+ projectPath,
280
+ });
281
+ progressTracker.stop();
282
+ const responseText = result.error
283
+ ? `Error: ${result.text}`
284
+ : result.text || '(empty response)';
285
+ await sock.sendPresenceUpdate('paused', sender).catch(() => { });
286
+ // TTS: send voice reply if configured
287
+ const voiceReplyMode = this.ctx.config.voice?.replyMode;
288
+ if (this.ttsProvider && (voiceReplyMode === 'voice' || voiceReplyMode === 'both')) {
289
+ try {
290
+ const audioPath = await this.ttsProvider.synthesize(responseText);
291
+ await sock.sendMessage(sender, { audio: { url: audioPath }, mimetype: 'audio/ogg; codecs=opus', ptt: true });
292
+ if (voiceReplyMode === 'voice')
293
+ return; // Don't send text
294
+ }
295
+ catch (err) {
296
+ logger.warn('TTS failed, sending text reply:', err);
297
+ }
298
+ }
299
+ await this.sendResponse(sender, responseText, effectiveTabName);
300
+ }
301
+ catch (err) {
302
+ logger.error('WhatsApp message handler error:', err);
303
+ await sock.sendMessage(sender, { text: 'Something went wrong processing your message. Check daemon logs for details.' }).catch(() => { });
304
+ }
305
+ });
306
+ }
307
+ catch (err) {
308
+ logger.error('Failed to start WhatsApp client:', err);
309
+ throw err;
310
+ }
311
+ }
312
+ stop() {
313
+ const sock = this.sock;
314
+ if (sock) {
315
+ sock.end(undefined);
316
+ this.sock = null;
317
+ }
318
+ logger.info('WhatsApp client stopped');
319
+ }
320
+ async sendMessage(peerId, text, _options) {
321
+ const sock = this.sock;
322
+ if (!sock)
323
+ return;
324
+ const chunks = chunkText(text, WHATSAPP_MAX_LENGTH);
325
+ for (const chunk of chunks) {
326
+ await retryWithBackoff(() => sock.sendMessage(peerId, { text: chunk }), [1000, 5000, 15000], 'whatsapp-send');
327
+ }
328
+ }
329
+ async sendNotification(message, _urgent) {
330
+ const sock = this.sock;
331
+ if (!sock)
332
+ return;
333
+ for (const number of this.allowedNumbers) {
334
+ try {
335
+ await sock.sendMessage(`${number}@s.whatsapp.net`, { text: message });
336
+ }
337
+ catch (err) {
338
+ logger.error(`Failed to send WhatsApp notification to ${number}:`, err);
339
+ }
340
+ }
341
+ }
342
+ async setTyping(peerId, active) {
343
+ const sock = this.sock;
344
+ if (!sock)
345
+ return;
346
+ const status = active ? 'composing' : 'paused';
347
+ await sock.sendPresenceUpdate(status, peerId).catch(() => { });
348
+ }
349
+ onMessage(handler) {
350
+ this.messageHandler = handler;
351
+ }
352
+ // ─── Private ───
353
+ async sendResponse(jid, text, tabName) {
354
+ const prefix = tabName && tabName !== 'default' ? `[${tabName}] ` : '';
355
+ const chunks = chunkText(prefix + text, WHATSAPP_MAX_LENGTH);
356
+ const sock = this.sock;
357
+ for (const chunk of chunks) {
358
+ try {
359
+ await retryWithBackoff(() => sock.sendMessage(jid, { text: chunk }), [1000, 5000, 15000], 'whatsapp-send');
360
+ }
361
+ catch (err) {
362
+ logger.error(`WhatsApp delivery failed for ${jid}:`, err);
363
+ }
364
+ }
365
+ }
366
+ isAllowed(jid) {
367
+ if (this.allowedNumbers.size === 0)
368
+ return false;
369
+ const number = jid.replace('@s.whatsapp.net', '');
370
+ return this.allowedNumbers.has(number);
371
+ }
372
+ }
373
+ //# sourceMappingURL=whatsapp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../src/channels/whatsapp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function channelInstall(packageName: string): void;
2
+ export declare function channelCreate(name: string): void;
3
+ export declare function channelList(): void;
4
+ //# sourceMappingURL=channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/cli/channel.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAaxD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAkKhD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAiBlC"}
@@ -0,0 +1,194 @@
1
+ import { execSync } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ const CHANNEL_PREFIX = 'beecork-channel-';
5
+ export function channelInstall(packageName) {
6
+ // Normalize name
7
+ const fullName = packageName.startsWith(CHANNEL_PREFIX) ? packageName : `${CHANNEL_PREFIX}${packageName}`;
8
+ console.log(`Installing channel: ${fullName}...`);
9
+ try {
10
+ execSync(`npm install -g ${fullName}`, { stdio: 'inherit' });
11
+ console.log(`\nChannel "${fullName}" installed.`);
12
+ console.log('Restart the daemon to activate: beecork stop && beecork start');
13
+ }
14
+ catch (err) {
15
+ console.error(`Failed to install ${fullName}. Check the package name and try again.`);
16
+ process.exit(1);
17
+ }
18
+ }
19
+ export function channelCreate(name) {
20
+ const pkgName = `${CHANNEL_PREFIX}${name}`;
21
+ const dir = pkgName;
22
+ if (fs.existsSync(dir)) {
23
+ console.error(`Directory "${dir}" already exists.`);
24
+ process.exit(1);
25
+ }
26
+ fs.mkdirSync(dir, { recursive: true });
27
+ fs.mkdirSync(path.join(dir, 'src'), { recursive: true });
28
+ // package.json
29
+ fs.writeFileSync(path.join(dir, 'package.json'), JSON.stringify({
30
+ name: pkgName,
31
+ version: '0.1.0',
32
+ description: `Beecork channel: ${name}`,
33
+ main: 'dist/index.js',
34
+ type: 'module',
35
+ scripts: {
36
+ build: 'tsc',
37
+ dev: 'tsc --watch',
38
+ },
39
+ keywords: ['beecork', 'beecork-channel', name],
40
+ peerDependencies: {
41
+ beecork: '>=0.4.0',
42
+ },
43
+ devDependencies: {
44
+ typescript: '^5.7.0',
45
+ '@types/node': '^22.0.0',
46
+ },
47
+ }, null, 2) + '\n');
48
+ // tsconfig.json
49
+ fs.writeFileSync(path.join(dir, 'tsconfig.json'), JSON.stringify({
50
+ compilerOptions: {
51
+ target: 'ES2022',
52
+ module: 'NodeNext',
53
+ moduleResolution: 'NodeNext',
54
+ outDir: 'dist',
55
+ rootDir: 'src',
56
+ strict: true,
57
+ esModuleInterop: true,
58
+ declaration: true,
59
+ },
60
+ include: ['src'],
61
+ }, null, 2) + '\n');
62
+ // Main source file
63
+ const className = name.charAt(0).toUpperCase() + name.slice(1);
64
+ fs.writeFileSync(path.join(dir, 'src', 'index.ts'), `// ${pkgName} — Beecork channel implementation
65
+ // See: https://github.com/beecork/beecork for Channel interface docs
66
+
67
+ // Import the Channel interface type from beecork
68
+ // Note: beecork is a peer dependency
69
+ interface Channel {
70
+ readonly id: string;
71
+ readonly name: string;
72
+ readonly maxMessageLength: number;
73
+ readonly supportsStreaming: boolean;
74
+ readonly supportsMedia: boolean;
75
+ start(): Promise<void>;
76
+ stop(): void;
77
+ sendMessage(peerId: string, text: string): Promise<void>;
78
+ sendNotification(message: string, urgent?: boolean): Promise<void>;
79
+ setTyping(peerId: string, active: boolean): Promise<void>;
80
+ onMessage(handler: (msg: any) => Promise<void>): void;
81
+ }
82
+
83
+ interface ChannelContext {
84
+ config: any;
85
+ tabManager: any;
86
+ pipeBrain: any;
87
+ }
88
+
89
+ export default class ${className}Channel implements Channel {
90
+ readonly id = '${name}';
91
+ readonly name = '${className}';
92
+ readonly maxMessageLength = 4096;
93
+ readonly supportsStreaming = false;
94
+ readonly supportsMedia = false;
95
+
96
+ private ctx: ChannelContext;
97
+ private handler: ((msg: any) => Promise<void>) | null = null;
98
+
99
+ constructor(ctx: ChannelContext) {
100
+ this.ctx = ctx;
101
+ }
102
+
103
+ async start(): Promise<void> {
104
+ // TODO: Connect to your service, start polling/websocket
105
+ console.log(\`${name} channel started\`);
106
+ }
107
+
108
+ stop(): void {
109
+ // TODO: Disconnect, cleanup
110
+ console.log(\`${name} channel stopped\`);
111
+ }
112
+
113
+ onMessage(handler: (msg: any) => Promise<void>): void {
114
+ this.handler = handler;
115
+ }
116
+
117
+ async sendMessage(peerId: string, text: string): Promise<void> {
118
+ // TODO: Send a message to the user
119
+ }
120
+
121
+ async sendNotification(message: string, urgent?: boolean): Promise<void> {
122
+ // TODO: Send a notification to all configured users
123
+ }
124
+
125
+ async setTyping(peerId: string, active: boolean): Promise<void> {
126
+ // TODO: Show typing indicator
127
+ }
128
+ }
129
+ `);
130
+ // README
131
+ fs.writeFileSync(path.join(dir, 'README.md'), `# ${pkgName}
132
+
133
+ A Beecork channel plugin for ${name}.
134
+
135
+ ## Installation
136
+
137
+ \`\`\`bash
138
+ beecork channel install ${name}
139
+ # or: npm install -g ${pkgName}
140
+ \`\`\`
141
+
142
+ ## Configuration
143
+
144
+ Add to your \`~/.beecork/config.json\`:
145
+
146
+ \`\`\`json
147
+ {
148
+ "${name}": {
149
+ "enabled": true
150
+ }
151
+ }
152
+ \`\`\`
153
+
154
+ ## Development
155
+
156
+ \`\`\`bash
157
+ npm install
158
+ npm run build
159
+ \`\`\`
160
+
161
+ ## Publishing
162
+
163
+ \`\`\`bash
164
+ npm publish
165
+ \`\`\`
166
+ `);
167
+ console.log(`\nChannel scaffold created: ${dir}/`);
168
+ console.log(`\nNext steps:`);
169
+ console.log(` cd ${dir}`);
170
+ console.log(` npm install`);
171
+ console.log(` # Edit src/index.ts to implement your channel`);
172
+ console.log(` npm run build`);
173
+ console.log(` npm publish`);
174
+ }
175
+ export function channelList() {
176
+ try {
177
+ const output = execSync('npm list -g --depth=0 2>/dev/null', { encoding: 'utf-8' });
178
+ const lines = output.split('\n').filter(line => line.includes(CHANNEL_PREFIX));
179
+ if (lines.length === 0) {
180
+ console.log('No community channels installed.');
181
+ console.log(`Install one: beecork channel install <name>`);
182
+ return;
183
+ }
184
+ console.log(`\n${lines.length} community channel(s):\n`);
185
+ for (const line of lines) {
186
+ console.log(` ${line.trim()}`);
187
+ }
188
+ console.log('');
189
+ }
190
+ catch {
191
+ console.log('No community channels installed.');
192
+ }
193
+ }
194
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/cli/channel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runDoctor(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAWA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA0I/C"}