beecork 1.3.3 → 1.3.5

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/README.md CHANGED
@@ -80,7 +80,7 @@ beecork knowledge # View stored knowledge
80
80
  beecork discord # Set up Discord bot
81
81
  beecork whatsapp # Set up WhatsApp
82
82
  beecork webhook # Set up webhook endpoint
83
- beecork enable <cap> # Enable a capability (email, github, calendar, etc.)
83
+ beecork enable <cap> # Enable a capability (github, notion, database)
84
84
  beecork disable <cap> # Disable a capability
85
85
  beecork capabilities # List available capabilities
86
86
 
@@ -1,35 +1,5 @@
1
1
  export const CAPABILITY_PACKS = [
2
2
  // Productivity
3
- {
4
- id: 'email',
5
- name: 'Email (Gmail)',
6
- description: 'Read, send, and manage emails via Gmail',
7
- category: 'productivity',
8
- mcpServer: {
9
- package: '@anthropic/gmail-mcp',
10
- command: 'npx',
11
- args: ['-y', '@anthropic/gmail-mcp'],
12
- },
13
- requiresApiKey: true,
14
- apiKeyHint: 'Google OAuth credentials (follow the setup guide)',
15
- apiKeyEnvVar: 'GOOGLE_OAUTH_CREDENTIALS',
16
- setupUrl: 'https://github.com/beecork/beecork/blob/main/docs/use-cases.md',
17
- },
18
- {
19
- id: 'calendar',
20
- name: 'Calendar (Google)',
21
- description: 'Schedule meetings, check availability, manage events',
22
- category: 'productivity',
23
- mcpServer: {
24
- package: '@anthropic/google-calendar-mcp',
25
- command: 'npx',
26
- args: ['-y', '@anthropic/google-calendar-mcp'],
27
- },
28
- requiresApiKey: true,
29
- apiKeyHint: 'Google OAuth credentials (same as email if already set up)',
30
- apiKeyEnvVar: 'GOOGLE_OAUTH_CREDENTIALS',
31
- setupUrl: 'https://github.com/beecork/beecork/blob/main/docs/use-cases.md',
32
- },
33
3
  {
34
4
  id: 'notion',
35
5
  name: 'Notion',
@@ -46,21 +16,6 @@ export const CAPABILITY_PACKS = [
46
16
  apiKeyEnvVar: 'NOTION_API_KEY',
47
17
  setupUrl: 'https://github.com/beecork/beecork/blob/main/docs/use-cases.md',
48
18
  },
49
- {
50
- id: 'drive',
51
- name: 'Google Drive',
52
- description: 'Search, read, and organize files in Google Drive',
53
- category: 'productivity',
54
- mcpServer: {
55
- package: '@anthropic/gdrive-mcp',
56
- command: 'npx',
57
- args: ['-y', '@anthropic/gdrive-mcp'],
58
- },
59
- requiresApiKey: true,
60
- apiKeyHint: 'Google OAuth credentials',
61
- apiKeyEnvVar: 'GOOGLE_OAUTH_CREDENTIALS',
62
- setupUrl: 'https://github.com/beecork/beecork/blob/main/docs/use-cases.md',
63
- },
64
19
  // Development
65
20
  {
66
21
  id: 'github',
@@ -94,18 +49,4 @@ export const CAPABILITY_PACKS = [
94
49
  apiKeyEnvVar: 'DATABASE_URL',
95
50
  setupUrl: 'https://github.com/beecork/beecork/blob/main/docs/use-cases.md',
96
51
  },
97
- // Web
98
- {
99
- id: 'web',
100
- name: 'Web Browsing',
101
- description: 'Search the web, fetch and read web pages',
102
- category: 'web',
103
- mcpServer: {
104
- package: '@anthropic/web-search-mcp',
105
- command: 'npx',
106
- args: ['-y', '@anthropic/web-search-mcp'],
107
- },
108
- requiresApiKey: false,
109
- setupUrl: 'https://github.com/beecork/beecork/blob/main/docs/use-cases.md',
110
- },
111
52
  ];
@@ -23,6 +23,22 @@ export async function startDaemon() {
23
23
  console.log(`Beecork daemon is already running (PID: ${existingPid})`);
24
24
  return;
25
25
  }
26
+ // Check if WhatsApp needs pairing
27
+ const config = getConfig();
28
+ const waSessionPath = config.whatsapp?.sessionPath ?? `${process.env.HOME}/.beecork/whatsapp-session`;
29
+ const waEnabled = config.whatsapp?.enabled;
30
+ const waHasSession = waEnabled && fs.existsSync(waSessionPath) && fs.readdirSync(waSessionPath).length > 0;
31
+ if (waEnabled && !waHasSession) {
32
+ console.log('\n⚠ WhatsApp is enabled but not yet paired.');
33
+ console.log(' Starting daemon in foreground so you can scan the QR code...');
34
+ console.log(' Once paired, press Ctrl+C and run "beecork start" again.\n');
35
+ const daemonPath = new URL('../daemon.js', import.meta.url).pathname;
36
+ const child = spawn('node', [daemonPath], {
37
+ stdio: 'inherit',
38
+ });
39
+ process.on('SIGINT', () => { child.kill(); process.exit(0); });
40
+ return;
41
+ }
26
42
  try {
27
43
  startService();
28
44
  console.log('Beecork daemon started via system service.');
package/dist/cli/setup.js CHANGED
@@ -8,7 +8,6 @@ import { saveConfig, getConfig } from '../config.js';
8
8
  import { ensureBeecorkDirs, getMcpConfigPath, getBeecorkHome } from '../util/paths.js';
9
9
  import { installService } from '../service/install.js';
10
10
  import { getDb, closeDb } from '../db/index.js';
11
- import { CAPABILITY_PACKS } from '../capabilities/packs.js';
12
11
  function ask(rl, question, defaultValue) {
13
12
  const prompt = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
14
13
  return new Promise((resolve) => {
@@ -231,7 +230,9 @@ export async function setupWizard(mode = 'quick') {
231
230
  sessionPath: `${getBeecorkHome()}/whatsapp-session`,
232
231
  allowedNumbers: [waNumber],
233
232
  };
234
- console.log(' ✓ WhatsApp configured (scan QR code when daemon starts)\n');
233
+ console.log(' ✓ WhatsApp configured');
234
+ console.log(' ⚠ After starting the daemon, run: beecork logs');
235
+ console.log(' The QR code will appear in the logs — scan it with your phone.\n');
235
236
  }
236
237
  }
237
238
  const addWebhook = await ask(rl, 'Enable Webhook API? (y/n)', 'n');
@@ -316,38 +317,10 @@ export async function setupWizard(mode = 'quick') {
316
317
  console.log(`\n ✓ ${mediaGenerators.length} media provider(s) configured`);
317
318
  }
318
319
  }
319
- // Capabilities
320
- console.log('\nOptional: Capabilities\n');
321
- console.log('Pre-configured integrations for common tasks.');
322
- console.log('You can add these later with: beecork enable <name>\n');
323
- const capPacks = ['email', 'calendar', 'github', 'notion', 'drive', 'web', 'database'];
324
- const capNames = {
325
- email: 'Email (Gmail)',
326
- calendar: 'Calendar (Google)',
327
- github: 'GitHub',
328
- notion: 'Notion',
329
- drive: 'Google Drive',
330
- web: 'Web Browsing',
331
- database: 'Database (PostgreSQL)',
332
- };
333
- for (const packId of capPacks) {
334
- const pack = CAPABILITY_PACKS.find(p => p.id === packId);
335
- if (!pack)
336
- continue;
337
- const answer = await ask(rl, `Enable ${capNames[packId]}? (y/n)`, 'n');
338
- if (answer.toLowerCase() === 'y' && pack.requiresApiKey) {
339
- const key = await ask(rl, ` ${pack.apiKeyHint}`);
340
- if (key) {
341
- enabledCaps.push({ packId, apiKey: key });
342
- }
343
- }
344
- else if (answer.toLowerCase() === 'y') {
345
- enabledCaps.push({ packId });
346
- }
347
- }
348
320
  console.log('You can add or change channels later with:');
349
321
  console.log(' beecork discord — add/reconfigure Discord');
350
322
  console.log(' beecork whatsapp — add/reconfigure WhatsApp');
323
+ console.log(' beecork enable — add integrations (GitHub, Notion, PostgreSQL)');
351
324
  console.log(' beecork dashboard — manage everything from the web UI\n');
352
325
  }
353
326
  // Write everything
@@ -423,9 +396,8 @@ export async function setupWizard(mode = 'quick') {
423
396
  console.log('');
424
397
  if (!showExtras) {
425
398
  console.log(' Add more features anytime:');
426
- console.log(' beecork enable email — manage your inbox');
427
399
  console.log(' beecork enable github — repos, PRs, issues');
428
- console.log(' beecork enable calendar schedule meetings');
400
+ console.log(' beecork enable notion pages, databases, notes');
429
401
  console.log(' beecork capabilities — see all options');
430
402
  console.log(' beecork setup --full — full guided setup');
431
403
  console.log('');
package/dist/index.js CHANGED
@@ -436,7 +436,7 @@ mediaCmd.action(async () => {
436
436
  });
437
437
  program
438
438
  .command('enable <capability>')
439
- .description('Enable a capability (email, calendar, github, notion, drive, web, database)')
439
+ .description('Enable a capability (github, notion, database)')
440
440
  .action(async (capability) => {
441
441
  const { enableCapability } = await import('./cli/capabilities.js');
442
442
  await enableCapability(capability);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beecork",
3
- "version": "1.3.3",
3
+ "version": "1.3.5",
4
4
  "description": "Claude Code always-on infrastructure — a phone number, a memory, and an alarm clock",
5
5
  "type": "module",
6
6
  "bin": {