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.
- package/dist/cli/commands.d.ts +14 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +215 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/helpers.d.ts +4 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +46 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +145 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/cron/scheduler.d.ts +20 -0
- package/dist/cron/scheduler.d.ts.map +1 -0
- package/dist/cron/scheduler.js +151 -0
- package/dist/cron/scheduler.js.map +1 -0
- package/dist/cron/store.d.ts +12 -0
- package/dist/cron/store.d.ts.map +1 -0
- package/dist/cron/store.js +82 -0
- package/dist/cron/store.js.map +1 -0
- package/dist/daemon.d.ts +2 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +140 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db/index.d.ts +4 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +66 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +3 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +85 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +304 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/extractor.d.ts +6 -0
- package/dist/memory/extractor.d.ts.map +1 -0
- package/dist/memory/extractor.js +105 -0
- package/dist/memory/extractor.js.map +1 -0
- package/dist/service/install.d.ts +5 -0
- package/dist/service/install.d.ts.map +1 -0
- package/dist/service/install.js +118 -0
- package/dist/service/install.js.map +1 -0
- package/dist/service/templates.d.ts +5 -0
- package/dist/service/templates.d.ts.map +1 -0
- package/dist/service/templates.js +53 -0
- package/dist/service/templates.js.map +1 -0
- package/dist/session/approval.d.ts +20 -0
- package/dist/session/approval.d.ts.map +1 -0
- package/dist/session/approval.js +59 -0
- package/dist/session/approval.js.map +1 -0
- package/dist/session/circuit-breaker.d.ts +18 -0
- package/dist/session/circuit-breaker.d.ts.map +1 -0
- package/dist/session/circuit-breaker.js +67 -0
- package/dist/session/circuit-breaker.js.map +1 -0
- package/dist/session/context-monitor.d.ts +16 -0
- package/dist/session/context-monitor.d.ts.map +1 -0
- package/dist/session/context-monitor.js +44 -0
- package/dist/session/context-monitor.js.map +1 -0
- package/dist/session/manager.d.ts +42 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +291 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/subprocess.d.ts +23 -0
- package/dist/session/subprocess.d.ts.map +1 -0
- package/dist/session/subprocess.js +119 -0
- package/dist/session/subprocess.js.map +1 -0
- package/dist/session/tool-classifier.d.ts +4 -0
- package/dist/session/tool-classifier.d.ts.map +1 -0
- package/dist/session/tool-classifier.js +57 -0
- package/dist/session/tool-classifier.js.map +1 -0
- package/dist/telegram/bot.d.ts +25 -0
- package/dist/telegram/bot.d.ts.map +1 -0
- package/dist/telegram/bot.js +293 -0
- package/dist/telegram/bot.js.map +1 -0
- package/dist/telegram/formatter.d.ts +11 -0
- package/dist/telegram/formatter.d.ts.map +1 -0
- package/dist/telegram/formatter.js +54 -0
- package/dist/telegram/formatter.js.map +1 -0
- package/dist/types.d.ts +131 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util/logger.d.ts +17 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +56 -0
- package/dist/util/logger.js.map +1 -0
- package/dist/util/paths.d.ts +11 -0
- package/dist/util/paths.d.ts.map +1 -0
- package/dist/util/paths.js +40 -0
- package/dist/util/paths.js.map +1 -0
- package/dist/util/platform.d.ts +3 -0
- package/dist/util/platform.d.ts.map +1 -0
- package/dist/util/platform.js +10 -0
- package/dist/util/platform.js.map +1 -0
- package/dist/util/retry.d.ts +3 -0
- package/dist/util/retry.d.ts.map +1 -0
- package/dist/util/retry.js +19 -0
- package/dist/util/retry.js.map +1 -0
- package/dist/whatsapp/client.d.ts +23 -0
- package/dist/whatsapp/client.d.ts.map +1 -0
- package/dist/whatsapp/client.js +125 -0
- package/dist/whatsapp/client.js.map +1 -0
- package/dist/whatsapp/formatter.d.ts +3 -0
- package/dist/whatsapp/formatter.d.ts.map +1 -0
- package/dist/whatsapp/formatter.js +25 -0
- package/dist/whatsapp/formatter.js.map +1 -0
- package/package.json +53 -0
- 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 @@
|
|
|
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 @@
|
|
|
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":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGhD,SAAS,GAAG,CAAC,EAAsB,EAAE,QAAgB,EAAE,YAAqB;IAC1E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC;IAClF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IAEnF,IAAI,CAAC;QACH,oBAAoB;QACpB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,sBAAsB;QACtB,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,qDAAqD,CAAC,CAAC;QACvF,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,uBAAuB,EAAE,UAAU,CAAC,CAAC;QAErE,+BAA+B;QAC/B,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,2BAA2B,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAE5E,yBAAyB;QACzB,MAAM,oBAAoB,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,sCAAsC,EAAE,GAAG,CAAC,CAAC;QACxF,MAAM,oBAAoB,GAAG,oBAAoB,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;QAExE,eAAe;QACf,MAAM,MAAM,GAAkB;YAC5B,GAAG,SAAS,EAAE;YACd,QAAQ,EAAE;gBACR,KAAK;gBACL,cAAc,EAAE,CAAC,MAAM,CAAC;aACzB;YACD,UAAU,EAAE;gBACV,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,CAAC,gCAAgC,CAAC;aACjD;YACD,IAAI,EAAE;gBACJ,OAAO,EAAE;oBACP,UAAU,EAAE,UAAU;oBACtB,YAAY,EAAE,MAAM;oBACpB,sBAAsB,EAAE,EAAE;oBAC1B,UAAU,EAAE,IAAI;iBACjB;aACF;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,sBAAsB;gBAC9B,kBAAkB,EAAE,IAAI;aACzB;YACD,UAAU,EAAE,OAAO;SACpB,CAAC;QAEF,mBAAmB;QACnB,iBAAiB,EAAE,CAAC;QACpB,UAAU,CAAC,MAAM,CAAC,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,uBAAuB,cAAc,EAAE,cAAc,CAAC,CAAC;QAEnE,sBAAsB;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAEtC,sBAAsB;QACtB,iBAAiB,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAE/D,kBAAkB;QAClB,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;YACvD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrF,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAEjE,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,2BAA2B;IAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAChE,4CAA4C;IAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEtE,0CAA0C;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEnE,IAAI,aAAqB,CAAC;IAC1B,IAAI,UAAoB,CAAC;IAEzB,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,aAAa,GAAG,MAAM,CAAC;QACvB,UAAU,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,4BAA4B;QAC5B,aAAa,GAAG,KAAK,CAAC;QACtB,UAAU,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,kCAAkC;QAClC,aAAa,GAAG,MAAM,CAAC;QACvB,UAAU,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,SAAS,GAAG;QAChB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE;oBACH,YAAY,EAAE,cAAc,EAAE;iBAC/B;aACF;SACF;KACF,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClF,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -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"}
|