beecork 0.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 (118) hide show
  1. package/dist/cli/commands.d.ts +14 -0
  2. package/dist/cli/commands.d.ts.map +1 -0
  3. package/dist/cli/commands.js +215 -0
  4. package/dist/cli/commands.js.map +1 -0
  5. package/dist/cli/helpers.d.ts +4 -0
  6. package/dist/cli/helpers.d.ts.map +1 -0
  7. package/dist/cli/helpers.js +46 -0
  8. package/dist/cli/helpers.js.map +1 -0
  9. package/dist/cli/setup.d.ts +2 -0
  10. package/dist/cli/setup.d.ts.map +1 -0
  11. package/dist/cli/setup.js +145 -0
  12. package/dist/cli/setup.js.map +1 -0
  13. package/dist/config.d.ts +9 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +97 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/cron/scheduler.d.ts +20 -0
  18. package/dist/cron/scheduler.d.ts.map +1 -0
  19. package/dist/cron/scheduler.js +151 -0
  20. package/dist/cron/scheduler.js.map +1 -0
  21. package/dist/cron/store.d.ts +12 -0
  22. package/dist/cron/store.d.ts.map +1 -0
  23. package/dist/cron/store.js +82 -0
  24. package/dist/cron/store.js.map +1 -0
  25. package/dist/daemon.d.ts +2 -0
  26. package/dist/daemon.d.ts.map +1 -0
  27. package/dist/daemon.js +140 -0
  28. package/dist/daemon.js.map +1 -0
  29. package/dist/db/index.d.ts +4 -0
  30. package/dist/db/index.d.ts.map +1 -0
  31. package/dist/db/index.js +66 -0
  32. package/dist/db/index.js.map +1 -0
  33. package/dist/db/migrations.d.ts +3 -0
  34. package/dist/db/migrations.d.ts.map +1 -0
  35. package/dist/db/migrations.js +85 -0
  36. package/dist/db/migrations.js.map +1 -0
  37. package/dist/index.d.ts +3 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +66 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/mcp/server.d.ts +3 -0
  42. package/dist/mcp/server.d.ts.map +1 -0
  43. package/dist/mcp/server.js +304 -0
  44. package/dist/mcp/server.js.map +1 -0
  45. package/dist/memory/extractor.d.ts +6 -0
  46. package/dist/memory/extractor.d.ts.map +1 -0
  47. package/dist/memory/extractor.js +105 -0
  48. package/dist/memory/extractor.js.map +1 -0
  49. package/dist/service/install.d.ts +5 -0
  50. package/dist/service/install.d.ts.map +1 -0
  51. package/dist/service/install.js +118 -0
  52. package/dist/service/install.js.map +1 -0
  53. package/dist/service/templates.d.ts +5 -0
  54. package/dist/service/templates.d.ts.map +1 -0
  55. package/dist/service/templates.js +53 -0
  56. package/dist/service/templates.js.map +1 -0
  57. package/dist/session/approval.d.ts +20 -0
  58. package/dist/session/approval.d.ts.map +1 -0
  59. package/dist/session/approval.js +59 -0
  60. package/dist/session/approval.js.map +1 -0
  61. package/dist/session/circuit-breaker.d.ts +18 -0
  62. package/dist/session/circuit-breaker.d.ts.map +1 -0
  63. package/dist/session/circuit-breaker.js +67 -0
  64. package/dist/session/circuit-breaker.js.map +1 -0
  65. package/dist/session/context-monitor.d.ts +16 -0
  66. package/dist/session/context-monitor.d.ts.map +1 -0
  67. package/dist/session/context-monitor.js +44 -0
  68. package/dist/session/context-monitor.js.map +1 -0
  69. package/dist/session/manager.d.ts +42 -0
  70. package/dist/session/manager.d.ts.map +1 -0
  71. package/dist/session/manager.js +291 -0
  72. package/dist/session/manager.js.map +1 -0
  73. package/dist/session/subprocess.d.ts +23 -0
  74. package/dist/session/subprocess.d.ts.map +1 -0
  75. package/dist/session/subprocess.js +119 -0
  76. package/dist/session/subprocess.js.map +1 -0
  77. package/dist/session/tool-classifier.d.ts +4 -0
  78. package/dist/session/tool-classifier.d.ts.map +1 -0
  79. package/dist/session/tool-classifier.js +57 -0
  80. package/dist/session/tool-classifier.js.map +1 -0
  81. package/dist/telegram/bot.d.ts +25 -0
  82. package/dist/telegram/bot.d.ts.map +1 -0
  83. package/dist/telegram/bot.js +293 -0
  84. package/dist/telegram/bot.js.map +1 -0
  85. package/dist/telegram/formatter.d.ts +11 -0
  86. package/dist/telegram/formatter.d.ts.map +1 -0
  87. package/dist/telegram/formatter.js +54 -0
  88. package/dist/telegram/formatter.js.map +1 -0
  89. package/dist/types.d.ts +131 -0
  90. package/dist/types.d.ts.map +1 -0
  91. package/dist/types.js +3 -0
  92. package/dist/types.js.map +1 -0
  93. package/dist/util/logger.d.ts +17 -0
  94. package/dist/util/logger.d.ts.map +1 -0
  95. package/dist/util/logger.js +56 -0
  96. package/dist/util/logger.js.map +1 -0
  97. package/dist/util/paths.d.ts +11 -0
  98. package/dist/util/paths.d.ts.map +1 -0
  99. package/dist/util/paths.js +40 -0
  100. package/dist/util/paths.js.map +1 -0
  101. package/dist/util/platform.d.ts +3 -0
  102. package/dist/util/platform.d.ts.map +1 -0
  103. package/dist/util/platform.js +10 -0
  104. package/dist/util/platform.js.map +1 -0
  105. package/dist/util/retry.d.ts +3 -0
  106. package/dist/util/retry.d.ts.map +1 -0
  107. package/dist/util/retry.js +19 -0
  108. package/dist/util/retry.js.map +1 -0
  109. package/dist/whatsapp/client.d.ts +23 -0
  110. package/dist/whatsapp/client.d.ts.map +1 -0
  111. package/dist/whatsapp/client.js +125 -0
  112. package/dist/whatsapp/client.js.map +1 -0
  113. package/dist/whatsapp/formatter.d.ts +3 -0
  114. package/dist/whatsapp/formatter.d.ts.map +1 -0
  115. package/dist/whatsapp/formatter.js +25 -0
  116. package/dist/whatsapp/formatter.js.map +1 -0
  117. package/package.json +53 -0
  118. package/templates/CLAUDE.md +25 -0
@@ -0,0 +1,291 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ import { ClaudeSubprocess } from './subprocess.js';
3
+ import { CircuitBreaker } from './circuit-breaker.js';
4
+ import { ContextMonitor } from './context-monitor.js';
5
+ import { getDb } from '../db/index.js';
6
+ import { resolveWorkingDir } from '../config.js';
7
+ import { logger } from '../util/logger.js';
8
+ import { extractMemories, getRelevantMemories } from '../memory/extractor.js';
9
+ function rowToTab(row) {
10
+ return {
11
+ id: row.id,
12
+ name: row.name,
13
+ sessionId: row.session_id,
14
+ status: row.status,
15
+ workingDir: row.working_dir,
16
+ createdAt: row.created_at,
17
+ lastActivityAt: row.last_activity_at,
18
+ pid: row.pid,
19
+ };
20
+ }
21
+ const MAX_QUEUE_SIZE = 10;
22
+ export class TabManager {
23
+ config;
24
+ subprocesses = new Map();
25
+ circuitBreakers = new Map();
26
+ messageQueues = new Map();
27
+ onNotify = null;
28
+ constructor(config) {
29
+ this.config = config;
30
+ }
31
+ /** Set a callback for sending notifications (e.g., via Telegram) */
32
+ setNotifyCallback(cb) {
33
+ this.onNotify = cb;
34
+ }
35
+ /** Ensure a tab exists in the database. Creates it if missing. */
36
+ ensureTab(tabName) {
37
+ const db = getDb();
38
+ const existing = this.queryTab(db, tabName);
39
+ if (existing)
40
+ return existing;
41
+ const tab = {
42
+ id: uuidv4(),
43
+ name: tabName,
44
+ sessionId: uuidv4(),
45
+ status: 'idle',
46
+ workingDir: resolveWorkingDir(tabName),
47
+ createdAt: new Date().toISOString(),
48
+ lastActivityAt: new Date().toISOString(),
49
+ pid: null,
50
+ };
51
+ db.prepare(`
52
+ INSERT INTO tabs (id, name, session_id, status, working_dir, created_at, last_activity_at)
53
+ VALUES (?, ?, ?, ?, ?, ?, ?)
54
+ `).run(tab.id, tab.name, tab.sessionId, tab.status, tab.workingDir, tab.createdAt, tab.lastActivityAt);
55
+ logger.info(`Created tab: ${tabName}`);
56
+ return tab;
57
+ }
58
+ /** Send a message to a tab. Creates the tab if it doesn't exist. Queues if busy. */
59
+ async sendMessage(tabName, prompt, options) {
60
+ const tab = this.ensureTab(tabName);
61
+ // If a subprocess is already running on this tab, queue the message
62
+ if (this.subprocesses.get(tabName)?.isRunning) {
63
+ const queue = this.messageQueues.get(tabName) ?? [];
64
+ if (queue.length >= MAX_QUEUE_SIZE) {
65
+ return Promise.reject(new Error(`Queue full for tab "${tabName}" (max ${MAX_QUEUE_SIZE}). Try again later.`));
66
+ }
67
+ return new Promise((resolve, reject) => {
68
+ if (!this.messageQueues.has(tabName)) {
69
+ this.messageQueues.set(tabName, []);
70
+ }
71
+ this.messageQueues.get(tabName).push({ prompt, resolve, reject });
72
+ logger.info(`[${tabName}] Message queued (queue size: ${this.messageQueues.get(tabName).length})`);
73
+ });
74
+ }
75
+ return this.executeMessage(tab, prompt, options?.resume ?? false, options?.onTextChunk);
76
+ }
77
+ /** Get all tabs from the database */
78
+ listTabs() {
79
+ const db = getDb();
80
+ return db.prepare('SELECT * FROM tabs ORDER BY last_activity_at DESC').all().map(rowToTab);
81
+ }
82
+ /** Get a specific tab */
83
+ getTab(tabName) {
84
+ const db = getDb();
85
+ return this.queryTab(db, tabName);
86
+ }
87
+ queryTab(db, tabName) {
88
+ const row = db.prepare('SELECT * FROM tabs WHERE name = ?').get(tabName);
89
+ return row ? rowToTab(row) : undefined;
90
+ }
91
+ /** Stop a tab's running subprocess */
92
+ stopTab(tabName) {
93
+ const sub = this.subprocesses.get(tabName);
94
+ if (sub?.isRunning) {
95
+ sub.kill();
96
+ }
97
+ this.updateTabStatus(tabName, 'stopped');
98
+ this.clearQueue(tabName);
99
+ }
100
+ /** Stop all running subprocesses (clean shutdown) */
101
+ stopAll() {
102
+ for (const [tabName, sub] of this.subprocesses) {
103
+ if (sub.isRunning) {
104
+ sub.kill();
105
+ }
106
+ this.updateTabStatus(tabName, 'stopped');
107
+ }
108
+ this.subprocesses.clear();
109
+ this.circuitBreakers.clear();
110
+ this.messageQueues.clear();
111
+ }
112
+ /** Process pending messages from MCP server IPC */
113
+ processPendingMessages() {
114
+ const db = getDb();
115
+ const pending = db.prepare('SELECT * FROM pending_messages WHERE processed = 0 ORDER BY created_at ASC').all();
116
+ if (pending.length === 0)
117
+ return;
118
+ for (const msg of pending) {
119
+ db.prepare('UPDATE pending_messages SET processed = 1 WHERE id = ?').run(msg.id);
120
+ if (msg.type === 'notification') {
121
+ // Route notifications to Telegram/WhatsApp via the notify callback
122
+ this.onNotify?.(msg.message);
123
+ }
124
+ else {
125
+ // Route regular messages to tabs
126
+ this.sendMessage(msg.tab_name, msg.message).catch(err => {
127
+ logger.error(`Failed to process pending message for tab ${msg.tab_name}:`, err);
128
+ });
129
+ }
130
+ }
131
+ }
132
+ async executeMessage(tab, prompt, resume, onTextChunk) {
133
+ const db = getDb();
134
+ // Inject relevant memories into the prompt
135
+ const memories = getRelevantMemories(tab.name);
136
+ let enrichedPrompt = prompt;
137
+ if (memories.length > 0) {
138
+ const memoryContext = memories.map(m => `- ${m}`).join('\n');
139
+ enrichedPrompt = `[Context from memory:\n${memoryContext}\n]\n\n${prompt}`;
140
+ }
141
+ // Store user message
142
+ db.prepare('INSERT INTO messages (tab_id, role, content) VALUES (?, ?, ?)')
143
+ .run(tab.id, 'user', prompt);
144
+ this.updateTabStatus(tab.name, 'running');
145
+ const subprocess = new ClaudeSubprocess(tab.name, tab.workingDir, this.config, tab.sessionId);
146
+ this.subprocesses.set(tab.name, subprocess);
147
+ const breaker = new CircuitBreaker(tab.name);
148
+ this.circuitBreakers.set(tab.name, breaker);
149
+ const contextMonitor = new ContextMonitor(tab.name);
150
+ // Resume if: explicitly requested or DB has prior successful responses for this tab
151
+ const hasDbHistory = db.prepare('SELECT COUNT(*) as count FROM messages WHERE tab_id = ? AND role = ?').get(tab.id, 'assistant');
152
+ const shouldResume = resume || hasDbHistory.count > 0;
153
+ return new Promise((resolve, reject) => {
154
+ let resultText = '';
155
+ let resultEvent = null;
156
+ let loopWarningPending = false;
157
+ const callbacks = {
158
+ onEvent: (event) => {
159
+ // Capture session_id from StreamInit and update tab record
160
+ if (event.type === 'system' && 'subtype' in event && event.subtype === 'init') {
161
+ const initEvent = event;
162
+ if (initEvent.session_id) {
163
+ db.prepare('UPDATE tabs SET session_id = ? WHERE id = ?')
164
+ .run(initEvent.session_id, tab.id);
165
+ }
166
+ }
167
+ if (event.type === 'assistant') {
168
+ const assistant = event;
169
+ // Track context usage
170
+ if (assistant.message.usage) {
171
+ const contextAction = contextMonitor.recordUsage(assistant.message.usage);
172
+ if (contextAction === 'warn') {
173
+ // Will inject warning on next message
174
+ logger.info(`[${tab.name}] Context window warning — will summarize on next turn`);
175
+ }
176
+ else if (contextAction === 'checkpoint') {
177
+ // Need to checkpoint — handled after subprocess exits
178
+ logger.warn(`[${tab.name}] Context window checkpoint triggered`);
179
+ }
180
+ }
181
+ for (const block of assistant.message.content) {
182
+ if (block.type === 'text') {
183
+ resultText += block.text;
184
+ onTextChunk?.(block.text);
185
+ }
186
+ else if (block.type === 'tool_use') {
187
+ const toolUse = block;
188
+ const action = breaker.recordToolCall(toolUse);
189
+ if (action === 'break') {
190
+ logger.warn(`[${tab.name}] Circuit breaker tripped, killing subprocess`);
191
+ subprocess.kill();
192
+ }
193
+ else if (action === 'notify') {
194
+ this.onNotify?.(`Loop detected in tab "${tab.name}": ${toolUse.name} repeated 10+ times. Send /stop ${tab.name} to kill it.`);
195
+ }
196
+ else if (action === 'warn') {
197
+ loopWarningPending = true;
198
+ }
199
+ }
200
+ }
201
+ }
202
+ else if (event.type === 'result') {
203
+ resultEvent = event;
204
+ }
205
+ },
206
+ onExit: (code) => {
207
+ this.subprocesses.delete(tab.name);
208
+ this.circuitBreakers.delete(tab.name);
209
+ const result = {
210
+ text: resultEvent?.result ?? resultText,
211
+ costUsd: resultEvent?.total_cost_usd ?? 0,
212
+ durationMs: resultEvent?.duration_ms ?? 0,
213
+ sessionId: subprocess.sessionId,
214
+ error: resultEvent?.is_error ?? (code !== 0),
215
+ };
216
+ // Handle resume failure (session expired/not found) — retry with fresh session + context
217
+ if (result.error && shouldResume && result.text.includes('session')) {
218
+ logger.info(`[${tab.name}] Session resume failed, retrying with context injection`);
219
+ const recentMsgs = db.prepare('SELECT role, content FROM messages WHERE tab_id = ? ORDER BY created_at DESC LIMIT 5').all(tab.id);
220
+ const context = recentMsgs.reverse().map(m => `${m.role}: ${m.content.slice(0, 200)}`).join('\n');
221
+ const contextPrompt = `[Previous conversation context:\n${context}\n]\n\n${enrichedPrompt}`;
222
+ // Reset session ID for fresh start
223
+ const newSessionId = uuidv4();
224
+ db.prepare('UPDATE tabs SET session_id = ?, status = ? WHERE id = ?').run(newSessionId, 'idle', tab.id);
225
+ this.executeMessage({ ...tab, sessionId: newSessionId }, contextPrompt, false, onTextChunk)
226
+ .then(resolve).catch(reject);
227
+ return;
228
+ }
229
+ // Store assistant response
230
+ db.prepare('INSERT INTO messages (tab_id, role, content, cost_usd, tokens_in, tokens_out) VALUES (?, ?, ?, ?, ?, ?)').run(tab.id, 'assistant', result.text, result.costUsd, resultEvent?.usage?.input_tokens ?? null, resultEvent?.usage?.output_tokens ?? null);
231
+ // Update tab
232
+ db.prepare('UPDATE tabs SET status = ?, last_activity_at = ?, pid = NULL WHERE name = ?')
233
+ .run('idle', new Date().toISOString(), tab.name);
234
+ resolve(result);
235
+ // Auto-extract memories from completed sessions (fire and forget)
236
+ if (!result.error && result.text) {
237
+ extractMemories(this.config, tab.name, result.text, result.durationMs).catch(err => {
238
+ logger.error(`[${tab.name}] Memory extraction error:`, err);
239
+ });
240
+ }
241
+ // Process next queued message (prepend loop warning if needed)
242
+ if (loopWarningPending && this.messageQueues.get(tab.name)?.length) {
243
+ const next = this.messageQueues.get(tab.name)[0];
244
+ next.prompt = `[WARNING: You appear to be repeating the same action. Reassess your approach.]\n\n${next.prompt}`;
245
+ loopWarningPending = false;
246
+ }
247
+ this.processNextInQueue(tab.name);
248
+ },
249
+ onError: (err) => {
250
+ this.subprocesses.delete(tab.name);
251
+ this.circuitBreakers.delete(tab.name);
252
+ this.updateTabStatus(tab.name, 'error');
253
+ reject(err);
254
+ this.processNextInQueue(tab.name);
255
+ },
256
+ };
257
+ subprocess.send(prompt, callbacks, shouldResume).catch(reject);
258
+ // Update tab with PID
259
+ if (subprocess.pid) {
260
+ db.prepare('UPDATE tabs SET pid = ? WHERE name = ?').run(subprocess.pid, tab.name);
261
+ }
262
+ });
263
+ }
264
+ processNextInQueue(tabName) {
265
+ const queue = this.messageQueues.get(tabName);
266
+ if (!queue || queue.length === 0)
267
+ return;
268
+ const next = queue.shift();
269
+ const tab = this.getTab(tabName);
270
+ if (!tab) {
271
+ next.reject(new Error(`Tab "${tabName}" not found`));
272
+ return;
273
+ }
274
+ this.executeMessage(tab, next.prompt, false).then(next.resolve).catch(next.reject);
275
+ }
276
+ updateTabStatus(tabName, status) {
277
+ const db = getDb();
278
+ db.prepare('UPDATE tabs SET status = ?, last_activity_at = ? WHERE name = ?')
279
+ .run(status, new Date().toISOString(), tabName);
280
+ }
281
+ clearQueue(tabName) {
282
+ const queue = this.messageQueues.get(tabName);
283
+ if (queue) {
284
+ for (const item of queue) {
285
+ item.reject(new Error(`Tab "${tabName}" was stopped`));
286
+ }
287
+ this.messageQueues.delete(tabName);
288
+ }
289
+ }
290
+ }
291
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { BeecorkConfig, StreamEvent } from '../types.js';
2
+ export interface SubprocessCallbacks {
3
+ onEvent: (event: StreamEvent) => void;
4
+ onExit: (code: number | null) => void;
5
+ onError: (err: Error) => void;
6
+ }
7
+ export declare class ClaudeSubprocess {
8
+ private tabName;
9
+ private workingDir;
10
+ private config;
11
+ private proc;
12
+ private buffer;
13
+ readonly sessionId: string;
14
+ constructor(tabName: string, workingDir: string, config: BeecorkConfig, sessionId?: string);
15
+ send(prompt: string, callbacks: SubprocessCallbacks, resume?: boolean): Promise<void>;
16
+ /** Wait for the subprocess to finish. Returns the exit code. */
17
+ waitForExit(): Promise<number | null>;
18
+ kill(): void;
19
+ get isRunning(): boolean;
20
+ get pid(): number | null;
21
+ private buildArgs;
22
+ }
23
+ //# sourceMappingURL=subprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/session/subprocess.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAC/B;AAED,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAPhB,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,MAAM,CAAc;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAGjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,EAC7B,SAAS,CAAC,EAAE,MAAM;IAKd,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDlG,gEAAgE;IAChE,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUrC,IAAI,IAAI,IAAI;IAUZ,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,OAAO,CAAC,SAAS;CA4BlB"}
@@ -0,0 +1,119 @@
1
+ import { spawn } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import { v4 as uuidv4 } from 'uuid';
4
+ import { logger } from '../util/logger.js';
5
+ import { getMcpConfigPath } from '../util/paths.js';
6
+ export class ClaudeSubprocess {
7
+ tabName;
8
+ workingDir;
9
+ config;
10
+ proc = null;
11
+ buffer = '';
12
+ sessionId;
13
+ constructor(tabName, workingDir, config, sessionId) {
14
+ this.tabName = tabName;
15
+ this.workingDir = workingDir;
16
+ this.config = config;
17
+ this.sessionId = sessionId ?? uuidv4();
18
+ }
19
+ async send(prompt, callbacks, resume = false) {
20
+ if (this.proc) {
21
+ throw new Error(`Subprocess for tab "${this.tabName}" is already running`);
22
+ }
23
+ const args = this.buildArgs(prompt, resume);
24
+ logger.debug(`[${this.tabName}] Spawning: ${this.config.claudeCode.bin} ${args.join(' ')}`);
25
+ this.proc = spawn(this.config.claudeCode.bin, args, {
26
+ cwd: this.workingDir,
27
+ stdio: ['ignore', 'pipe', 'pipe'],
28
+ env: { ...process.env },
29
+ });
30
+ const pid = this.proc.pid;
31
+ logger.info(`[${this.tabName}] Claude subprocess started (PID: ${pid})`);
32
+ this.proc.stdout.on('data', (chunk) => {
33
+ this.buffer += chunk.toString();
34
+ const lines = this.buffer.split('\n');
35
+ this.buffer = lines.pop() || '';
36
+ for (const line of lines) {
37
+ if (!line.trim())
38
+ continue;
39
+ try {
40
+ const event = JSON.parse(line);
41
+ callbacks.onEvent(event);
42
+ }
43
+ catch {
44
+ // Non-JSON line (verbose debug output), skip
45
+ logger.debug(`[${this.tabName}] non-json: ${line.slice(0, 200)}`);
46
+ }
47
+ }
48
+ });
49
+ this.proc.stderr.on('data', (chunk) => {
50
+ const text = chunk.toString().trim();
51
+ if (text) {
52
+ logger.debug(`[${this.tabName}] stderr: ${text.slice(0, 500)}`);
53
+ }
54
+ });
55
+ this.proc.on('error', (err) => {
56
+ this.proc = null;
57
+ callbacks.onError(err);
58
+ });
59
+ this.proc.on('exit', (code) => {
60
+ this.proc = null;
61
+ logger.info(`[${this.tabName}] Claude subprocess exited (code: ${code})`);
62
+ callbacks.onExit(code);
63
+ });
64
+ }
65
+ /** Wait for the subprocess to finish. Returns the exit code. */
66
+ waitForExit() {
67
+ return new Promise((resolve) => {
68
+ if (!this.proc) {
69
+ resolve(null);
70
+ return;
71
+ }
72
+ this.proc.on('exit', (code) => resolve(code));
73
+ });
74
+ }
75
+ kill() {
76
+ if (!this.proc)
77
+ return;
78
+ logger.info(`[${this.tabName}] Killing subprocess (PID: ${this.proc.pid})`);
79
+ this.proc.kill('SIGTERM');
80
+ const proc = this.proc;
81
+ setTimeout(() => {
82
+ try {
83
+ proc.kill('SIGKILL');
84
+ }
85
+ catch { /* already dead */ }
86
+ }, 5000);
87
+ }
88
+ get isRunning() {
89
+ return this.proc !== null;
90
+ }
91
+ get pid() {
92
+ return this.proc?.pid ?? null;
93
+ }
94
+ buildArgs(prompt, resume) {
95
+ const args = [
96
+ '-p',
97
+ '--output-format', 'stream-json',
98
+ '--verbose',
99
+ ...this.config.claudeCode.defaultFlags,
100
+ ];
101
+ // Only add MCP config if the file exists
102
+ const mcpConfig = getMcpConfigPath();
103
+ if (fs.existsSync(mcpConfig)) {
104
+ args.push('--mcp-config', mcpConfig);
105
+ }
106
+ if (resume) {
107
+ args.push('--resume', this.sessionId);
108
+ }
109
+ else {
110
+ args.push('--session-id', this.sessionId);
111
+ }
112
+ if (this.config.claudeCode.maxBudgetUsd) {
113
+ args.push('--max-budget-usd', String(this.config.claudeCode.maxBudgetUsd));
114
+ }
115
+ args.push(prompt);
116
+ return args;
117
+ }
118
+ }
119
+ //# sourceMappingURL=subprocess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subprocess.js","sourceRoot":"","sources":["../../src/session/subprocess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type ToolRisk = 'safe' | 'dangerous';
2
+ /** Classify a tool call as safe or dangerous */
3
+ export declare function classifyTool(toolName: string, input: Record<string, unknown>): ToolRisk;
4
+ //# sourceMappingURL=tool-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-classifier.d.ts","sourceRoot":"","sources":["../../src/session/tool-classifier.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAoC5C,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAsBvF"}
@@ -0,0 +1,57 @@
1
+ const SAFE_TOOLS = new Set([
2
+ 'Read', 'Glob', 'Grep', 'LSP', 'WebFetch', 'WebSearch',
3
+ 'ToolSearch', 'TaskGet', 'TaskList',
4
+ ]);
5
+ const DANGEROUS_TOOLS = new Set([
6
+ 'Write', 'Edit', 'NotebookEdit',
7
+ 'TaskCreate', 'TaskUpdate', 'TaskStop',
8
+ ]);
9
+ const SAFE_BASH_PATTERNS = [
10
+ /^(ls|cat|head|tail|wc|file|stat|which|type|echo|printf)\b/,
11
+ /^git\s+(status|log|diff|show|branch|tag|remote)\b/,
12
+ /^(pwd|whoami|hostname|date|uname|env|printenv)\b/,
13
+ /^(find|grep|rg|fd|ag)\b/,
14
+ /^(node|python|ruby|go)\s+--?(version|help)/,
15
+ /^npm\s+(list|ls|view|info|outdated|audit)\b/,
16
+ /^curl\s.*-X\s*GET\b/,
17
+ /^curl\s+(?!.*-X\s*(POST|PUT|DELETE|PATCH))(?!.*--data)(?!.*-d\s)/,
18
+ ];
19
+ const DANGEROUS_BASH_PATTERNS = [
20
+ /^rm\b/,
21
+ /^(mv|cp)\b.*--?(force|f)\b/,
22
+ /^chmod\b/,
23
+ /^chown\b/,
24
+ /^git\s+(push|reset|rebase|merge|checkout\s+--)\b/,
25
+ /^(docker|kubectl|terraform|ansible)\b/,
26
+ /^(sudo|su)\b/,
27
+ /^npm\s+(publish|install|uninstall|link)\b/,
28
+ /^(kill|killall|pkill)\b/,
29
+ /^curl\s.*-X\s*(POST|PUT|DELETE|PATCH)\b/,
30
+ ];
31
+ /** Classify a tool call as safe or dangerous */
32
+ export function classifyTool(toolName, input) {
33
+ if (SAFE_TOOLS.has(toolName))
34
+ return 'safe';
35
+ if (DANGEROUS_TOOLS.has(toolName))
36
+ return 'dangerous';
37
+ // Bash tool: inspect the command
38
+ if (toolName === 'Bash') {
39
+ const command = String(input.command || '').trim();
40
+ for (const pattern of SAFE_BASH_PATTERNS) {
41
+ if (pattern.test(command))
42
+ return 'safe';
43
+ }
44
+ for (const pattern of DANGEROUS_BASH_PATTERNS) {
45
+ if (pattern.test(command))
46
+ return 'dangerous';
47
+ }
48
+ // Default: unknown bash commands are dangerous
49
+ return 'dangerous';
50
+ }
51
+ // MCP tools from external servers: default to dangerous
52
+ if (toolName.startsWith('mcp__'))
53
+ return 'dangerous';
54
+ // Unknown tools: default to dangerous
55
+ return 'dangerous';
56
+ }
57
+ //# sourceMappingURL=tool-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-classifier.js","sourceRoot":"","sources":["../../src/session/tool-classifier.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW;IACtD,YAAY,EAAE,SAAS,EAAE,UAAU;CACpC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,cAAc;IAC/B,YAAY,EAAE,YAAY,EAAE,UAAU;CACvC,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG;IACzB,2DAA2D;IAC3D,mDAAmD;IACnD,kDAAkD;IAClD,yBAAyB;IACzB,4CAA4C;IAC5C,6CAA6C;IAC7C,qBAAqB;IACrB,kEAAkE;CACnE,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC9B,OAAO;IACP,4BAA4B;IAC5B,UAAU;IACV,UAAU;IACV,kDAAkD;IAClD,uCAAuC;IACvC,cAAc;IACd,2CAA2C;IAC3C,yBAAyB;IACzB,yCAAyC;CAC1C,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,KAA8B;IAC3E,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAC;IAC5C,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,WAAW,CAAC;IAEtD,iCAAiC;IACjC,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,MAAM,CAAC;QAC3C,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,uBAAuB,EAAE,CAAC;YAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,WAAW,CAAC;QAChD,CAAC;QACD,+CAA+C;QAC/C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,wDAAwD;IACxD,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,WAAW,CAAC;IAErD,sCAAsC;IACtC,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { TabManager } from '../session/manager.js';
2
+ import type { BeecorkConfig } from '../types.js';
3
+ export declare class BeecorkTelegramBot {
4
+ private bot;
5
+ private tabManager;
6
+ private config;
7
+ private activeChatIds;
8
+ private debounceTimers;
9
+ private debounceBuffers;
10
+ constructor(config: BeecorkConfig, tabManager: TabManager);
11
+ private setupHandlers;
12
+ private handleCommand;
13
+ private handleMessage;
14
+ private parseMessage;
15
+ sendResponse(chatId: number, text: string, tabName?: string): Promise<void>;
16
+ private sendWithRetry;
17
+ /** Send a notification to all allowed users */
18
+ sendNotification(text: string): Promise<void>;
19
+ stop(): void;
20
+ private isAllowed;
21
+ private isAdmin;
22
+ /** Set emoji reaction on a message via raw Telegram API */
23
+ private setReaction;
24
+ }
25
+ //# sourceMappingURL=bot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../../src/telegram/bot.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAA0B;IAE/C,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,eAAe,CAAqF;gBAEhG,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;IAQzD,OAAO,CAAC,aAAa;YAiDP,aAAa;YAwCb,aAAa;IAqF3B,OAAO,CAAC,YAAY;IAUd,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAuBnE,aAAa;IAsB3B,+CAA+C;IACzC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBnD,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,OAAO;IAKf,2DAA2D;YAC7C,WAAW;CAgB1B"}