beecork 0.3.0 → 0.3.2

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 (82) hide show
  1. package/dist/cli/commands.d.ts.map +1 -1
  2. package/dist/cli/commands.js +30 -10
  3. package/dist/cli/commands.js.map +1 -1
  4. package/dist/cli/helpers.d.ts +1 -2
  5. package/dist/cli/helpers.d.ts.map +1 -1
  6. package/dist/cli/helpers.js +1 -25
  7. package/dist/cli/helpers.js.map +1 -1
  8. package/dist/config.d.ts +0 -1
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +12 -6
  11. package/dist/config.js.map +1 -1
  12. package/dist/cron/scheduler.d.ts +3 -4
  13. package/dist/cron/scheduler.d.ts.map +1 -1
  14. package/dist/cron/scheduler.js +20 -14
  15. package/dist/cron/scheduler.js.map +1 -1
  16. package/dist/daemon.js +63 -21
  17. package/dist/daemon.js.map +1 -1
  18. package/dist/dashboard/html.d.ts +2 -0
  19. package/dist/dashboard/html.d.ts.map +1 -0
  20. package/dist/dashboard/html.js +357 -0
  21. package/dist/dashboard/html.js.map +1 -0
  22. package/dist/dashboard/server.d.ts +2 -0
  23. package/dist/dashboard/server.d.ts.map +1 -0
  24. package/dist/dashboard/server.js +129 -0
  25. package/dist/dashboard/server.js.map +1 -0
  26. package/dist/db/index.d.ts.map +1 -1
  27. package/dist/db/index.js +1 -0
  28. package/dist/db/index.js.map +1 -1
  29. package/dist/index.js +10 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/mcp/server.js +81 -80
  32. package/dist/mcp/server.js.map +1 -1
  33. package/dist/memory/extractor.d.ts.map +1 -1
  34. package/dist/memory/extractor.js +28 -8
  35. package/dist/memory/extractor.js.map +1 -1
  36. package/dist/pipe/anthropic-client.d.ts +3 -1
  37. package/dist/pipe/anthropic-client.d.ts.map +1 -1
  38. package/dist/pipe/anthropic-client.js +7 -5
  39. package/dist/pipe/anthropic-client.js.map +1 -1
  40. package/dist/pipe/brain.d.ts.map +1 -1
  41. package/dist/pipe/brain.js +7 -8
  42. package/dist/pipe/brain.js.map +1 -1
  43. package/dist/pipe/memory-store.d.ts.map +1 -1
  44. package/dist/pipe/types.d.ts +0 -9
  45. package/dist/pipe/types.d.ts.map +1 -1
  46. package/dist/session/manager.d.ts +1 -0
  47. package/dist/session/manager.d.ts.map +1 -1
  48. package/dist/session/manager.js +21 -8
  49. package/dist/session/manager.js.map +1 -1
  50. package/dist/session/subprocess.d.ts +0 -2
  51. package/dist/session/subprocess.d.ts.map +1 -1
  52. package/dist/session/subprocess.js +0 -10
  53. package/dist/session/subprocess.js.map +1 -1
  54. package/dist/telegram/bot.d.ts.map +1 -1
  55. package/dist/telegram/bot.js +15 -17
  56. package/dist/telegram/bot.js.map +1 -1
  57. package/dist/telegram/formatter.d.ts +2 -4
  58. package/dist/telegram/formatter.d.ts.map +1 -1
  59. package/dist/telegram/formatter.js +3 -44
  60. package/dist/telegram/formatter.js.map +1 -1
  61. package/dist/types.d.ts +0 -11
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js +3 -0
  64. package/dist/types.js.map +1 -1
  65. package/dist/util/text.d.ts +10 -0
  66. package/dist/util/text.d.ts.map +1 -0
  67. package/dist/util/text.js +53 -0
  68. package/dist/util/text.js.map +1 -0
  69. package/dist/version.d.ts +2 -0
  70. package/dist/version.d.ts.map +1 -0
  71. package/dist/version.js +5 -0
  72. package/dist/version.js.map +1 -0
  73. package/dist/whatsapp/client.d.ts +3 -0
  74. package/dist/whatsapp/client.d.ts.map +1 -1
  75. package/dist/whatsapp/client.js +32 -12
  76. package/dist/whatsapp/client.js.map +1 -1
  77. package/dist/whatsapp/formatter.d.ts +2 -2
  78. package/dist/whatsapp/formatter.d.ts.map +1 -1
  79. package/dist/whatsapp/formatter.js +5 -23
  80. package/dist/whatsapp/formatter.js.map +1 -1
  81. package/package.json +2 -5
  82. package/templates/CLAUDE.md +0 -25
@@ -1,5 +1,7 @@
1
1
  import { logger } from '../util/logger.js';
2
+ import { retryWithBackoff } from '../util/retry.js';
2
3
  import { chunkTextWA } from './formatter.js';
4
+ import { parseTabMessage } from '../util/text.js';
3
5
  /**
4
6
  * WhatsApp client via Baileys.
5
7
  * Uses @whiskeysockets/baileys for reverse-engineered WhatsApp Web connection.
@@ -12,6 +14,9 @@ export class BeecorkWhatsAppClient {
12
14
  tabManager;
13
15
  config;
14
16
  allowedNumbers;
17
+ reconnectAttempts = 0;
18
+ maxReconnectAttempts = 10;
19
+ backoffDelays = [1000, 5000, 15000, 30000, 60000]; // ms
15
20
  constructor(config, tabManager) {
16
21
  this.config = config;
17
22
  this.tabManager = tabManager;
@@ -34,14 +39,26 @@ export class BeecorkWhatsAppClient {
34
39
  if (connection === 'close') {
35
40
  const reason = lastDisconnect?.error?.output?.statusCode;
36
41
  if (reason !== DisconnectReason.loggedOut) {
37
- logger.warn('WhatsApp connection closed, reconnecting...');
38
- this.start(); // Reconnect
42
+ this.reconnectAttempts++;
43
+ if (this.reconnectAttempts > this.maxReconnectAttempts) {
44
+ logger.error(`WhatsApp reconnect failed after ${this.maxReconnectAttempts} attempts, giving up`);
45
+ return;
46
+ }
47
+ const delayIdx = Math.min(this.reconnectAttempts - 1, this.backoffDelays.length - 1);
48
+ const delay = this.backoffDelays[delayIdx];
49
+ logger.warn(`WhatsApp connection closed, reconnecting in ${delay / 1000}s (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})...`);
50
+ setTimeout(() => {
51
+ this.start().catch(err => {
52
+ logger.error('WhatsApp reconnect failed:', err);
53
+ });
54
+ }, delay);
39
55
  }
40
56
  else {
41
57
  logger.error('WhatsApp logged out. Please re-scan QR code.');
42
58
  }
43
59
  }
44
60
  else if (connection === 'open') {
61
+ this.reconnectAttempts = 0; // Reset on successful connection
45
62
  logger.info('WhatsApp connected');
46
63
  }
47
64
  });
@@ -60,14 +77,19 @@ export class BeecorkWhatsAppClient {
60
77
  const { tabName, prompt } = this.parseMessage(text);
61
78
  if (!prompt)
62
79
  return;
80
+ // Show typing indicator while processing
81
+ await sock.sendPresenceUpdate('composing', sender).catch(() => { });
63
82
  const result = await this.tabManager.sendMessage(tabName, prompt);
64
83
  const responseText = result.error
65
84
  ? `Error: ${result.text}`
66
85
  : result.text || '(empty response)';
86
+ await sock.sendPresenceUpdate('paused', sender).catch(() => { });
67
87
  await this.sendResponse(sender, responseText, tabName);
68
88
  }
69
89
  catch (err) {
70
90
  logger.error('WhatsApp message handler error:', err);
91
+ // Send error feedback to user (unlike silent failure before)
92
+ await sock.sendMessage(sender, { text: 'Something went wrong processing your message. Check daemon logs for details.' }).catch(() => { });
71
93
  }
72
94
  });
73
95
  }
@@ -77,21 +99,19 @@ export class BeecorkWhatsAppClient {
77
99
  }
78
100
  }
79
101
  parseMessage(text) {
80
- if (text.startsWith('/tab ')) {
81
- const rest = text.slice(5);
82
- const spaceIdx = rest.indexOf(' ');
83
- if (spaceIdx === -1)
84
- return { tabName: rest, prompt: '' };
85
- return { tabName: rest.slice(0, spaceIdx), prompt: rest.slice(spaceIdx + 1).trim() };
86
- }
87
- return { tabName: 'default', prompt: text };
102
+ return parseTabMessage(text);
88
103
  }
89
104
  async sendResponse(jid, text, tabName) {
90
105
  const prefix = tabName && tabName !== 'default' ? `[${tabName}] ` : '';
91
106
  const chunks = chunkTextWA(prefix + text);
92
107
  const sock = this.sock;
93
108
  for (const chunk of chunks) {
94
- await sock.sendMessage(jid, { text: chunk });
109
+ try {
110
+ await retryWithBackoff(() => sock.sendMessage(jid, { text: chunk }), [1000, 5000, 15000], 'whatsapp-send');
111
+ }
112
+ catch (err) {
113
+ logger.error(`WhatsApp delivery failed for ${jid}:`, err);
114
+ }
95
115
  }
96
116
  }
97
117
  async sendNotification(text) {
@@ -117,7 +137,7 @@ export class BeecorkWhatsAppClient {
117
137
  }
118
138
  isAllowed(jid) {
119
139
  if (this.allowedNumbers.size === 0)
120
- return true; // No filter = allow all
140
+ return false; // Deny by default require explicit allowlist
121
141
  const number = jid.replace('@s.whatsapp.net', '');
122
142
  return this.allowedNumbers.has(number);
123
143
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/whatsapp/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/whatsapp/client.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- /** Split long text into chunks for WhatsApp */
2
- export declare function chunkTextWA(text: string, maxLength?: number): string[];
1
+ /** Chunk text for WhatsApp's larger message limit */
2
+ export declare function chunkTextWA(text: string): string[];
3
3
  //# sourceMappingURL=formatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/whatsapp/formatter.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAA4B,GAAG,MAAM,EAAE,CAyB3F"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/whatsapp/formatter.ts"],"names":[],"mappings":"AAIA,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAElD"}
@@ -1,25 +1,7 @@
1
- const WHATSAPP_MAX_LENGTH = 4096;
2
- /** Split long text into chunks for WhatsApp */
3
- export function chunkTextWA(text, maxLength = WHATSAPP_MAX_LENGTH) {
4
- if (text.length <= maxLength)
5
- return [text];
6
- const chunks = [];
7
- let remaining = text;
8
- while (remaining.length > 0) {
9
- if (remaining.length <= maxLength) {
10
- chunks.push(remaining);
11
- break;
12
- }
13
- let breakPoint = remaining.lastIndexOf('\n', maxLength);
14
- if (breakPoint <= 0 || breakPoint < maxLength * 0.5) {
15
- breakPoint = remaining.lastIndexOf(' ', maxLength);
16
- }
17
- if (breakPoint <= 0 || breakPoint < maxLength * 0.5) {
18
- breakPoint = maxLength;
19
- }
20
- chunks.push(remaining.slice(0, breakPoint));
21
- remaining = remaining.slice(breakPoint).trimStart();
22
- }
23
- return chunks;
1
+ import { chunkText } from '../util/text.js';
2
+ const WHATSAPP_MAX_LENGTH = 8192;
3
+ /** Chunk text for WhatsApp's larger message limit */
4
+ export function chunkTextWA(text) {
5
+ return chunkText(text, WHATSAPP_MAX_LENGTH);
24
6
  }
25
7
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/whatsapp/formatter.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,+CAA+C;AAC/C,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,YAAoB,mBAAmB;IAC/E,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,MAAM;QACR,CAAC;QAED,IAAI,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;YACpD,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;YACpD,UAAU,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAC5C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/whatsapp/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,SAAS,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beecork",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Claude Code always-on infrastructure — a phone number, a memory, and an alarm clock",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,7 +18,6 @@
18
18
  "prepublishOnly": "npm run build"
19
19
  },
20
20
  "dependencies": {
21
- "@anthropic-ai/claude-code": "^2.1.0",
22
21
  "@anthropic-ai/sdk": "^0.80.0",
23
22
  "@modelcontextprotocol/sdk": "^1.28.0",
24
23
  "@whiskeysockets/baileys": "^6.7.0",
@@ -26,7 +25,6 @@
26
25
  "commander": "^13.0.0",
27
26
  "node-cron": "^4.0.0",
28
27
  "node-telegram-bot-api": "^0.67.0",
29
- "qrcode-terminal": "^0.12.0",
30
28
  "uuid": "^11.0.0"
31
29
  },
32
30
  "devDependencies": {
@@ -40,8 +38,7 @@
40
38
  "vitest": "^3.0.0"
41
39
  },
42
40
  "files": [
43
- "dist/",
44
- "templates/"
41
+ "dist/"
45
42
  ],
46
43
  "keywords": [
47
44
  "claude",
@@ -1,25 +0,0 @@
1
- # Beecork Context
2
-
3
- You are running inside Beecork, an always-on infrastructure for Claude Code.
4
-
5
- ## Available Beecork Tools (via MCP)
6
-
7
- - **beecork_remember** — Store important facts in long-term memory. Use for preferences, server addresses, decisions, outcomes.
8
- - **beecork_recall** — Search long-term memory for relevant facts from past sessions. Call this at the start of complex tasks.
9
- - **beecork_cron_create** — Schedule a recurring task. Types: "at" (one-time ISO datetime), "every" (interval like "30m", "2h", "1d"), "cron" (cron expression like "0 9 * * 1").
10
- - **beecork_cron_list** — See all scheduled tasks.
11
- - **beecork_cron_delete** — Remove a scheduled task by ID.
12
- - **beecork_tab_create** — Create a new virtual tab for a separate task context.
13
- - **beecork_tab_list** — See all active tabs and their status.
14
- - **beecork_send_message** — Send a message to another tab (cross-tab communication).
15
- - **beecork_notify** — Send the user a notification mid-task without stopping work. Use for progress updates or intermediate results.
16
- - **beecork_status** — Check system status: active tabs, cron jobs, memory count.
17
-
18
- ## Guidelines
19
-
20
- - You are running unattended. The user may not be watching. Be thorough and complete tasks fully.
21
- - Always call `beecork_recall` at the start of any task to check relevant memories.
22
- - Always call `beecork_remember` when you learn something important about the user's setup, preferences, or environment.
23
- - When asked to do something recurring, use `beecork_cron_create` instead of reminding the user to ask again.
24
- - Use `beecork_notify` to send the user progress updates during long-running tasks.
25
- - If a task is too large for one session, break it into steps and use `beecork_cron_create` to schedule follow-ups.