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,14 @@
1
+ export declare function startDaemon(): Promise<void>;
2
+ export declare function stopDaemon(): Promise<void>;
3
+ export declare function showStatus(): Promise<void>;
4
+ export declare function listTabs(): Promise<void>;
5
+ export declare function tailLogs(tabName?: string): Promise<void>;
6
+ export declare function listCrons(): Promise<void>;
7
+ export declare function deleteCron(id: string): Promise<void>;
8
+ export declare function listMemories(): Promise<void>;
9
+ export declare function deleteMemory(id: string): Promise<void>;
10
+ export declare function updateBeecork(options: {
11
+ check?: boolean;
12
+ }): Promise<void>;
13
+ export declare function sendMessage(message: string): Promise<void>;
14
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAgBA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBjD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBhD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAqChD;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB9C;AAED,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9D;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB/C;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBlD;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU5D;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC/E;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhE"}
@@ -0,0 +1,215 @@
1
+ import fs from 'node:fs';
2
+ import { spawn, execSync } from 'node:child_process';
3
+ import { getDb, closeDb } from '../db/index.js';
4
+ import { getConfig } from '../config.js';
5
+ import { CronStore } from '../cron/store.js';
6
+ import { getDaemonPid, timeAgo } from './helpers.js';
7
+ import { startService, stopService } from '../service/install.js';
8
+ import { getPidPath, getLogsDir } from '../util/paths.js';
9
+ export async function startDaemon() {
10
+ const existingPid = getDaemonPid();
11
+ if (existingPid) {
12
+ console.log(`Beecork daemon is already running (PID: ${existingPid})`);
13
+ return;
14
+ }
15
+ try {
16
+ startService();
17
+ console.log('Beecork daemon started via system service.');
18
+ }
19
+ catch {
20
+ // Fallback: start daemon directly
21
+ console.log('Starting daemon directly...');
22
+ const daemonPath = new URL('../daemon.js', import.meta.url).pathname;
23
+ const child = spawn('node', [daemonPath], {
24
+ detached: true,
25
+ stdio: 'ignore',
26
+ });
27
+ child.unref();
28
+ console.log(`Beecork daemon started (PID: ${child.pid})`);
29
+ }
30
+ }
31
+ export async function stopDaemon() {
32
+ const pid = getDaemonPid();
33
+ if (!pid) {
34
+ console.log('Beecork daemon is not running.');
35
+ return;
36
+ }
37
+ try {
38
+ stopService();
39
+ }
40
+ catch {
41
+ // Fallback: kill by PID
42
+ process.kill(pid, 'SIGTERM');
43
+ const pidPath = getPidPath();
44
+ if (fs.existsSync(pidPath))
45
+ fs.unlinkSync(pidPath);
46
+ }
47
+ console.log('Beecork daemon stopped.');
48
+ }
49
+ export async function showStatus() {
50
+ const pid = getDaemonPid();
51
+ const config = getConfig();
52
+ console.log(`\nBeecork v0.1.0`);
53
+ console.log(`Daemon: ${pid ? `running (PID ${pid})` : 'stopped'}`);
54
+ console.log(`Deployment: ${config.deployment}`);
55
+ try {
56
+ const db = getDb();
57
+ const tabs = db.prepare('SELECT * FROM tabs ORDER BY last_activity_at DESC').all();
58
+ console.log(`\nTabs (${tabs.length}):`);
59
+ for (const tab of tabs) {
60
+ const ago = timeAgo(tab.last_activity_at);
61
+ const pidInfo = tab.pid ? ` (PID ${tab.pid})` : '';
62
+ console.log(` ${tab.name.padEnd(20)} ${tab.status.padEnd(12)} last active: ${ago}${pidInfo}`);
63
+ }
64
+ const store = new CronStore();
65
+ const jobs = store.list();
66
+ const activeJobs = jobs.filter(j => j.enabled);
67
+ console.log(`\nCron jobs: ${activeJobs.length} active (${jobs.length} total)`);
68
+ if (activeJobs.length > 0) {
69
+ for (const job of activeJobs.slice(0, 5)) {
70
+ const lastRun = job.lastRunAt ? `last: ${timeAgo(job.lastRunAt)}` : 'never run';
71
+ console.log(` ${job.name.padEnd(20)} ${job.scheduleType}:${job.schedule.padEnd(15)} → tab:${job.tabName} (${lastRun})`);
72
+ }
73
+ }
74
+ closeDb();
75
+ }
76
+ catch {
77
+ console.log('\n(database not initialized — run "beecork setup" first)');
78
+ }
79
+ console.log('');
80
+ }
81
+ export async function listTabs() {
82
+ const db = getDb();
83
+ const tabs = db.prepare('SELECT * FROM tabs ORDER BY last_activity_at DESC').all();
84
+ closeDb();
85
+ if (tabs.length === 0) {
86
+ console.log('No tabs.');
87
+ return;
88
+ }
89
+ console.log(`\nTabs (${tabs.length}):\n`);
90
+ for (const tab of tabs) {
91
+ const ago = timeAgo(tab.last_activity_at);
92
+ console.log(` ${tab.name.padEnd(20)} [${tab.status}] dir:${tab.working_dir} — ${ago}`);
93
+ }
94
+ console.log('');
95
+ }
96
+ export async function tailLogs(tabName) {
97
+ const logFile = tabName
98
+ ? `${getLogsDir()}/${tabName}.log`
99
+ : `${getLogsDir()}/daemon.stdout.log`;
100
+ if (!fs.existsSync(logFile)) {
101
+ console.log(`No log file found: ${logFile}`);
102
+ return;
103
+ }
104
+ const child = spawn('tail', ['-f', '-n', '50', logFile], { stdio: 'inherit' });
105
+ process.on('SIGINT', () => child.kill());
106
+ }
107
+ export async function listCrons() {
108
+ const store = new CronStore();
109
+ const jobs = store.list();
110
+ if (jobs.length === 0) {
111
+ console.log('No cron jobs.');
112
+ return;
113
+ }
114
+ console.log(`\nCron jobs (${jobs.length}):\n`);
115
+ for (const job of jobs) {
116
+ const status = job.enabled ? 'enabled' : 'disabled';
117
+ const lastRun = job.lastRunAt ? timeAgo(job.lastRunAt) : 'never';
118
+ console.log(` ${job.name.padEnd(20)} [${status}] ${job.scheduleType}:${job.schedule}`);
119
+ console.log(` → tab:${job.tabName} | last: ${lastRun} | ID: ${job.id}`);
120
+ }
121
+ console.log('');
122
+ }
123
+ export async function deleteCron(id) {
124
+ const store = new CronStore();
125
+ if (store.delete(id)) {
126
+ console.log(`Deleted cron job: ${id}`);
127
+ }
128
+ else {
129
+ console.log(`No cron job found with ID: ${id}`);
130
+ }
131
+ }
132
+ export async function listMemories() {
133
+ const db = getDb();
134
+ const memories = db.prepare('SELECT * FROM memories ORDER BY created_at DESC LIMIT 50').all();
135
+ closeDb();
136
+ if (memories.length === 0) {
137
+ console.log('No memories stored.');
138
+ return;
139
+ }
140
+ console.log(`\nMemories (${memories.length}):\n`);
141
+ for (const mem of memories) {
142
+ const scope = mem.tabName ? `tab:${mem.tabName}` : 'global';
143
+ console.log(` [${mem.id}] (${mem.source}, ${scope}) ${mem.content.slice(0, 100)}${mem.content.length > 100 ? '...' : ''}`);
144
+ console.log(` ${timeAgo(mem.createdAt)}`);
145
+ }
146
+ console.log('');
147
+ }
148
+ export async function deleteMemory(id) {
149
+ const db = getDb();
150
+ const result = db.prepare('DELETE FROM memories WHERE id = ?').run(parseInt(id, 10));
151
+ closeDb();
152
+ if (result.changes > 0) {
153
+ console.log(`Deleted memory: ${id}`);
154
+ }
155
+ else {
156
+ console.log(`No memory found with ID: ${id}`);
157
+ }
158
+ }
159
+ export async function updateBeecork(options) {
160
+ if (options.check) {
161
+ try {
162
+ const latest = execSync('npm view beecork version', { encoding: 'utf-8' }).trim();
163
+ const current = '0.1.0'; // TODO: read from package.json
164
+ if (latest === current) {
165
+ console.log(`Already up to date (v${current})`);
166
+ }
167
+ else {
168
+ console.log(`Update available: v${current} → v${latest}`);
169
+ console.log('Run `beecork update` to install.');
170
+ }
171
+ }
172
+ catch {
173
+ console.log('Could not check for updates.');
174
+ }
175
+ return;
176
+ }
177
+ // Stop daemon if running
178
+ const pid = getDaemonPid();
179
+ if (pid) {
180
+ console.log('Stopping daemon before update...');
181
+ await stopDaemon();
182
+ }
183
+ console.log('Updating beecork...');
184
+ try {
185
+ execSync('npm install -g beecork@latest', { stdio: 'inherit' });
186
+ console.log('Update complete!');
187
+ }
188
+ catch {
189
+ console.error('Update failed. Try running: npm install -g beecork@latest');
190
+ }
191
+ // Restart if it was running
192
+ if (pid) {
193
+ console.log('Restarting daemon...');
194
+ await startDaemon();
195
+ }
196
+ }
197
+ export async function sendMessage(message) {
198
+ // This is a simple CLI test command. It starts a subprocess directly.
199
+ const { TabManager } = await import('../session/manager.js');
200
+ const config = getConfig();
201
+ const manager = new TabManager(config);
202
+ console.log(`Sending to default tab: "${message}"\n`);
203
+ try {
204
+ const result = await manager.sendMessage('default', message);
205
+ console.log(result.text);
206
+ if (result.costUsd > 0) {
207
+ console.log(`\n--- Cost: $${result.costUsd.toFixed(4)} | Duration: ${result.durationMs}ms ---`);
208
+ }
209
+ }
210
+ catch (err) {
211
+ console.error('Error:', err instanceof Error ? err.message : err);
212
+ }
213
+ closeDb();
214
+ }
215
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getDaemonPid(): number | null;
2
+ export declare function formatDuration(ms: number): string;
3
+ export declare function timeAgo(isoDate: string): string;
4
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAGA,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAe5C;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS/C"}
@@ -0,0 +1,46 @@
1
+ import fs from 'node:fs';
2
+ import { getPidPath } from '../util/paths.js';
3
+ export function getDaemonPid() {
4
+ const pidPath = getPidPath();
5
+ if (!fs.existsSync(pidPath))
6
+ return null;
7
+ const pid = parseInt(fs.readFileSync(pidPath, 'utf-8').trim(), 10);
8
+ if (isNaN(pid))
9
+ return null;
10
+ // Check if process is actually running
11
+ try {
12
+ process.kill(pid, 0);
13
+ return pid;
14
+ }
15
+ catch {
16
+ // Stale PID file
17
+ fs.unlinkSync(pidPath);
18
+ return null;
19
+ }
20
+ }
21
+ export function formatDuration(ms) {
22
+ if (ms < 1000)
23
+ return `${ms}ms`;
24
+ const secs = Math.floor(ms / 1000);
25
+ if (secs < 60)
26
+ return `${secs}s`;
27
+ const mins = Math.floor(secs / 60);
28
+ if (mins < 60)
29
+ return `${mins}m ${secs % 60}s`;
30
+ const hours = Math.floor(mins / 60);
31
+ return `${hours}h ${mins % 60}m`;
32
+ }
33
+ export function timeAgo(isoDate) {
34
+ const diff = Date.now() - new Date(isoDate).getTime();
35
+ const mins = Math.floor(diff / 60000);
36
+ if (mins < 1)
37
+ return 'just now';
38
+ if (mins < 60)
39
+ return `${mins}m ago`;
40
+ const hours = Math.floor(mins / 60);
41
+ if (hours < 24)
42
+ return `${hours}h ago`;
43
+ const days = Math.floor(hours / 24);
44
+ return `${days}d ago`;
45
+ }
46
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/cli/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5B,uCAAuC;IACvC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;QACjB,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;IACtC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IAChC,IAAI,IAAI,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function setupWizard(): Promise<void>;
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AA4BA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA6FjD"}
@@ -0,0 +1,145 @@
1
+ import readline from 'node:readline';
2
+ import { execSync } from 'node:child_process';
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import os from 'node:os';
6
+ import { saveConfig, getConfig } from '../config.js';
7
+ import { ensureBeecorkDirs, getMcpConfigPath, getBeecorkHome } from '../util/paths.js';
8
+ import { installService } from '../service/install.js';
9
+ import { getDb, closeDb } from '../db/index.js';
10
+ function ask(rl, question, defaultValue) {
11
+ const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
12
+ return new Promise((resolve) => {
13
+ rl.question(prompt, (answer) => {
14
+ resolve(answer.trim() || defaultValue || '');
15
+ });
16
+ });
17
+ }
18
+ function findClaudeBin() {
19
+ try {
20
+ return execSync('which claude', { encoding: 'utf-8' }).trim();
21
+ }
22
+ catch {
23
+ return 'claude';
24
+ }
25
+ }
26
+ export async function setupWizard() {
27
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
28
+ console.log('\n🔧 Beecork Setup\n');
29
+ console.log('This wizard will configure Beecork to make Claude Code always-on.\n');
30
+ try {
31
+ // 1. Telegram token
32
+ const token = await ask(rl, 'Telegram Bot token (from @BotFather)');
33
+ if (!token) {
34
+ console.log('Telegram token is required. Get one from @BotFather on Telegram.');
35
+ return;
36
+ }
37
+ // 2. Telegram user ID
38
+ const userIdStr = await ask(rl, 'Your Telegram user ID (send /start to @userinfobot)');
39
+ const userId = parseInt(userIdStr, 10);
40
+ if (isNaN(userId)) {
41
+ console.log('Invalid user ID. Must be a number.');
42
+ return;
43
+ }
44
+ // 3. Claude binary path
45
+ const defaultBin = findClaudeBin();
46
+ const claudeBin = await ask(rl, 'Path to claude binary', defaultBin);
47
+ // 4. Default working directory
48
+ const defaultDir = await ask(rl, 'Default working directory', os.homedir());
49
+ // 5. Install as service?
50
+ const installServiceAnswer = await ask(rl, 'Install as background service? (y/n)', 'y');
51
+ const shouldInstallService = installServiceAnswer.toLowerCase() === 'y';
52
+ // Build config
53
+ const config = {
54
+ ...getConfig(),
55
+ telegram: {
56
+ token,
57
+ allowedUserIds: [userId],
58
+ },
59
+ claudeCode: {
60
+ bin: claudeBin,
61
+ defaultFlags: ['--dangerously-skip-permissions'],
62
+ },
63
+ tabs: {
64
+ default: {
65
+ workingDir: defaultDir,
66
+ approvalMode: 'yolo',
67
+ approvalTimeoutMinutes: 30,
68
+ debounceMs: 3000,
69
+ },
70
+ },
71
+ memory: {
72
+ enabled: true,
73
+ dbPath: '~/.beecork/memory.db',
74
+ maxLongTermEntries: 1000,
75
+ },
76
+ deployment: 'local',
77
+ };
78
+ // Write everything
79
+ ensureBeecorkDirs();
80
+ saveConfig(config);
81
+ console.log(`\n✓ Config saved to ${getBeecorkHome()}/config.json`);
82
+ // Initialize database
83
+ getDb();
84
+ closeDb();
85
+ console.log('✓ Database initialized');
86
+ // Generate MCP config
87
+ generateMcpConfig();
88
+ console.log(`✓ MCP config generated at ${getMcpConfigPath()}`);
89
+ // Install service
90
+ if (shouldInstallService) {
91
+ try {
92
+ const servicePath = installService();
93
+ console.log(`✓ Service installed at ${servicePath}`);
94
+ }
95
+ catch (err) {
96
+ console.log(`⚠ Service install failed: ${err instanceof Error ? err.message : err}`);
97
+ console.log(' You can start beecork manually with: beecork start');
98
+ }
99
+ }
100
+ console.log('\n✅ Setup complete!\n');
101
+ console.log('Next steps:');
102
+ console.log(' beecork start — Start the daemon');
103
+ console.log(' Send a message to your Telegram bot to test\n');
104
+ }
105
+ finally {
106
+ rl.close();
107
+ }
108
+ }
109
+ function generateMcpConfig() {
110
+ // Find the MCP server path
111
+ const distDir = path.dirname(new URL(import.meta.url).pathname);
112
+ // In dist: cli/setup.js -> ../mcp/server.js
113
+ const mcpServerPath = path.resolve(distDir, '..', 'mcp', 'server.js');
114
+ // For development (tsx), use the src path
115
+ const srcMcpPath = path.resolve(distDir, '..', 'mcp', 'server.ts');
116
+ let serverCommand;
117
+ let serverArgs;
118
+ if (fs.existsSync(mcpServerPath)) {
119
+ serverCommand = 'node';
120
+ serverArgs = [mcpServerPath];
121
+ }
122
+ else if (fs.existsSync(srcMcpPath)) {
123
+ // Development mode: use tsx
124
+ serverCommand = 'npx';
125
+ serverArgs = ['tsx', srcMcpPath];
126
+ }
127
+ else {
128
+ // Fallback: assume global install
129
+ serverCommand = 'node';
130
+ serverArgs = [mcpServerPath];
131
+ }
132
+ const mcpConfig = {
133
+ mcpServers: {
134
+ beecork: {
135
+ command: serverCommand,
136
+ args: serverArgs,
137
+ env: {
138
+ BEECORK_HOME: getBeecorkHome(),
139
+ },
140
+ },
141
+ },
142
+ };
143
+ fs.writeFileSync(getMcpConfigPath(), JSON.stringify(mcpConfig, null, 2) + '\n');
144
+ }
145
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { BeecorkConfig, TabConfig } from './types.js';
2
+ export declare function getConfig(): BeecorkConfig;
3
+ export declare function saveConfig(config: BeecorkConfig): void;
4
+ export declare function clearConfigCache(): void;
5
+ export declare function getTabConfig(tabName: string): TabConfig;
6
+ export declare function resolveWorkingDir(tabName: string): string;
7
+ export declare function getAdminUserId(): number;
8
+ export declare function validateTabName(name: string): string | null;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA+B3D,wBAAgB,SAAS,IAAI,aAAa,CAWzC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAKtD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAGvD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK3D"}
package/dist/config.js ADDED
@@ -0,0 +1,97 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { getConfigPath, expandHome } from './util/paths.js';
5
+ const DEFAULT_TAB_CONFIG = {
6
+ workingDir: os.homedir(),
7
+ approvalMode: 'yolo',
8
+ approvalTimeoutMinutes: 30,
9
+ debounceMs: 3000,
10
+ };
11
+ const DEFAULT_CONFIG = {
12
+ telegram: {
13
+ token: '',
14
+ allowedUserIds: [],
15
+ },
16
+ claudeCode: {
17
+ bin: 'claude',
18
+ defaultFlags: ['--dangerously-skip-permissions'],
19
+ },
20
+ tabs: {
21
+ default: { ...DEFAULT_TAB_CONFIG },
22
+ },
23
+ memory: {
24
+ enabled: true,
25
+ dbPath: '~/.beecork/memory.db',
26
+ maxLongTermEntries: 1000,
27
+ },
28
+ deployment: 'local',
29
+ };
30
+ let cachedConfig = null;
31
+ export function getConfig() {
32
+ if (cachedConfig)
33
+ return cachedConfig;
34
+ const configPath = getConfigPath();
35
+ if (!fs.existsSync(configPath)) {
36
+ return { ...DEFAULT_CONFIG };
37
+ }
38
+ const raw = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
39
+ cachedConfig = mergeWithDefaults(raw);
40
+ return cachedConfig;
41
+ }
42
+ export function saveConfig(config) {
43
+ const configPath = getConfigPath();
44
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
45
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
46
+ cachedConfig = config;
47
+ }
48
+ export function clearConfigCache() {
49
+ cachedConfig = null;
50
+ }
51
+ export function getTabConfig(tabName) {
52
+ const config = getConfig();
53
+ return config.tabs[tabName] ?? { ...DEFAULT_TAB_CONFIG };
54
+ }
55
+ export function resolveWorkingDir(tabName) {
56
+ const tabConfig = getTabConfig(tabName);
57
+ return expandHome(tabConfig.workingDir);
58
+ }
59
+ export function getAdminUserId() {
60
+ const config = getConfig();
61
+ return config.telegram.adminUserId ?? config.telegram.allowedUserIds[0];
62
+ }
63
+ const TAB_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$/;
64
+ export function validateTabName(name) {
65
+ if (name === 'default')
66
+ return 'Tab name "default" is reserved';
67
+ if (name.startsWith('cron:'))
68
+ return 'Tab names starting with "cron:" are reserved';
69
+ if (!TAB_NAME_REGEX.test(name))
70
+ return 'Tab name must be alphanumeric + hyphens, max 32 chars';
71
+ return null; // valid
72
+ }
73
+ function mergeWithDefaults(raw) {
74
+ return {
75
+ telegram: {
76
+ ...DEFAULT_CONFIG.telegram,
77
+ ...raw.telegram,
78
+ },
79
+ claudeCode: {
80
+ ...DEFAULT_CONFIG.claudeCode,
81
+ ...raw.claudeCode,
82
+ },
83
+ tabs: {
84
+ default: { ...DEFAULT_TAB_CONFIG },
85
+ ...Object.fromEntries(Object.entries(raw.tabs ?? {}).map(([k, v]) => [
86
+ k,
87
+ { ...DEFAULT_TAB_CONFIG, ...v },
88
+ ])),
89
+ },
90
+ memory: {
91
+ ...DEFAULT_CONFIG.memory,
92
+ ...raw.memory,
93
+ },
94
+ deployment: raw.deployment ?? DEFAULT_CONFIG.deployment,
95
+ };
96
+ }
97
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { TabManager } from '../session/manager.js';
2
+ import type { BeecorkTelegramBot } from '../telegram/bot.js';
3
+ export declare class CronScheduler {
4
+ private tabManager;
5
+ private telegramBot;
6
+ private scheduledJobs;
7
+ private store;
8
+ constructor(tabManager: TabManager, telegramBot: BeecorkTelegramBot | null);
9
+ /** Load all cron jobs from store and schedule them */
10
+ loadAndSchedule(): void;
11
+ /** Check for the reload signal file and reload if present */
12
+ checkForReload(): void;
13
+ /** Stop all scheduled jobs */
14
+ stopAll(): void;
15
+ private scheduleJob;
16
+ private fireJob;
17
+ }
18
+ /** Convert human interval (30m, 2h, 1d, 1h30m, 2w) to cron expression */
19
+ export declare function intervalToCron(interval: string): string | null;
20
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/cron/scheduler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAO7D,qBAAa,aAAa;IAKtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW;IALrB,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,KAAK,CAAmB;gBAGtB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,kBAAkB,GAAG,IAAI;IAGhD,sDAAsD;IACtD,eAAe,IAAI,IAAI;IAmBvB,6DAA6D;IAC7D,cAAc,IAAI,IAAI;IAStB,8BAA8B;IAC9B,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,WAAW;YAwCL,OAAO;CAiCtB;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4B9D"}