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.
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +30 -10
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/helpers.d.ts +1 -2
- package/dist/cli/helpers.d.ts.map +1 -1
- package/dist/cli/helpers.js +1 -25
- package/dist/cli/helpers.js.map +1 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -6
- package/dist/config.js.map +1 -1
- package/dist/cron/scheduler.d.ts +3 -4
- package/dist/cron/scheduler.d.ts.map +1 -1
- package/dist/cron/scheduler.js +20 -14
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/daemon.js +63 -21
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/html.d.ts +2 -0
- package/dist/dashboard/html.d.ts.map +1 -0
- package/dist/dashboard/html.js +357 -0
- package/dist/dashboard/html.js.map +1 -0
- package/dist/dashboard/server.d.ts +2 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +129 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +81 -80
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/extractor.d.ts.map +1 -1
- package/dist/memory/extractor.js +28 -8
- package/dist/memory/extractor.js.map +1 -1
- package/dist/pipe/anthropic-client.d.ts +3 -1
- package/dist/pipe/anthropic-client.d.ts.map +1 -1
- package/dist/pipe/anthropic-client.js +7 -5
- package/dist/pipe/anthropic-client.js.map +1 -1
- package/dist/pipe/brain.d.ts.map +1 -1
- package/dist/pipe/brain.js +7 -8
- package/dist/pipe/brain.js.map +1 -1
- package/dist/pipe/memory-store.d.ts.map +1 -1
- package/dist/pipe/types.d.ts +0 -9
- package/dist/pipe/types.d.ts.map +1 -1
- package/dist/session/manager.d.ts +1 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +21 -8
- package/dist/session/manager.js.map +1 -1
- package/dist/session/subprocess.d.ts +0 -2
- package/dist/session/subprocess.d.ts.map +1 -1
- package/dist/session/subprocess.js +0 -10
- package/dist/session/subprocess.js.map +1 -1
- package/dist/telegram/bot.d.ts.map +1 -1
- package/dist/telegram/bot.js +15 -17
- package/dist/telegram/bot.js.map +1 -1
- package/dist/telegram/formatter.d.ts +2 -4
- package/dist/telegram/formatter.d.ts.map +1 -1
- package/dist/telegram/formatter.js +3 -44
- package/dist/telegram/formatter.js.map +1 -1
- package/dist/types.d.ts +0 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/util/text.d.ts +10 -0
- package/dist/util/text.d.ts.map +1 -0
- package/dist/util/text.js +53 -0
- package/dist/util/text.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/whatsapp/client.d.ts +3 -0
- package/dist/whatsapp/client.d.ts.map +1 -1
- package/dist/whatsapp/client.js +32 -12
- package/dist/whatsapp/client.js.map +1 -1
- package/dist/whatsapp/formatter.d.ts +2 -2
- package/dist/whatsapp/formatter.d.ts.map +1 -1
- package/dist/whatsapp/formatter.js +5 -23
- package/dist/whatsapp/formatter.js.map +1 -1
- package/package.json +2 -5
- package/templates/CLAUDE.md +0 -25
package/dist/whatsapp/client.js
CHANGED
|
@@ -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
|
-
|
|
38
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/whatsapp/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export declare function chunkTextWA(text: 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":"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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,
|
|
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.
|
|
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",
|
package/templates/CLAUDE.md
DELETED
|
@@ -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.
|