@wundr.io/cli 1.0.3 → 1.0.4

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.
@@ -164,7 +164,7 @@ Examples:
164
164
  ${chalk.green('wundr session pause <sessionId>')} Pause a running session
165
165
  ${chalk.green('wundr session resume <sessionId>')}Resume a paused session
166
166
  ${chalk.green('wundr session kill <sessionId>')} Terminate a session
167
- `)
167
+ `),
168
168
  );
169
169
 
170
170
  // List command (default)
@@ -174,7 +174,7 @@ Examples:
174
174
  .option('-a, --all', 'Show all sessions including completed and terminated')
175
175
  .option(
176
176
  '-s, --status <status>',
177
- 'Filter by status (active, paused, completed, error, terminated)'
177
+ 'Filter by status (active, paused, completed, error, terminated)',
178
178
  )
179
179
  .option('-f, --format <format>', 'Output format (table, json)', 'table')
180
180
  .action(async options => {
@@ -236,7 +236,7 @@ async function listSessions(options: {
236
236
  } else if (!options.all) {
237
237
  // By default, only show active and paused sessions
238
238
  sessions = sessions.filter(
239
- s => s.status === 'active' || s.status === 'paused'
239
+ s => s.status === 'active' || s.status === 'paused',
240
240
  );
241
241
  }
242
242
 
@@ -251,8 +251,8 @@ async function listSessions(options: {
251
251
  sessions: sessions,
252
252
  },
253
253
  null,
254
- 2
255
- )
254
+ 2,
255
+ ),
256
256
  );
257
257
  return;
258
258
  }
@@ -264,7 +264,7 @@ async function listSessions(options: {
264
264
  console.log(chalk.yellow('\nNo sessions found.'));
265
265
  if (!options.all && !options.status) {
266
266
  console.log(
267
- chalk.gray('Use --all to show completed and terminated sessions.')
267
+ chalk.gray('Use --all to show completed and terminated sessions.'),
268
268
  );
269
269
  }
270
270
  console.log('');
@@ -278,8 +278,8 @@ async function listSessions(options: {
278
278
  padRight('Status', 12) +
279
279
  padRight('Started At', 22) +
280
280
  padRight('Slot ID', 10) +
281
- padRight('Worktree Path', 36)
282
- )
281
+ padRight('Worktree Path', 36),
282
+ ),
283
283
  );
284
284
  console.log(chalk.gray('-'.repeat(100)));
285
285
 
@@ -294,7 +294,7 @@ async function listSessions(options: {
294
294
  statusColor(padRight(getStatusIcon(session.status), 12)) +
295
295
  padRight(startedAt, 22) +
296
296
  padRight(session.slotId, 10) +
297
- chalk.gray(padRight(worktreePath, 36))
297
+ chalk.gray(padRight(worktreePath, 36)),
298
298
  );
299
299
  }
300
300
 
@@ -304,14 +304,14 @@ async function listSessions(options: {
304
304
  } catch (error) {
305
305
  spinner.fail('Failed to load sessions');
306
306
  console.error(
307
- chalk.red(error instanceof Error ? error.message : String(error))
307
+ chalk.red(error instanceof Error ? error.message : String(error)),
308
308
  );
309
309
  }
310
310
  }
311
311
 
312
312
  async function showSessionInfo(
313
313
  sessionId: string,
314
- options: { format?: 'table' | 'json' }
314
+ options: { format?: 'table' | 'json' },
315
315
  ): Promise<void> {
316
316
  const spinner = ora(`Loading session ${sessionId}...`).start();
317
317
 
@@ -337,32 +337,32 @@ async function showSessionInfo(
337
337
  // Basic info
338
338
  const statusColor = getStatusColor(session.status);
339
339
  console.log(
340
- chalk.white('Session ID: ') + chalk.green(session.sessionId)
340
+ chalk.white('Session ID: ') + chalk.green(session.sessionId),
341
341
  );
342
342
  console.log(
343
343
  chalk.white('Status: ') +
344
- statusColor(getStatusIcon(session.status))
344
+ statusColor(getStatusIcon(session.status)),
345
345
  );
346
346
  console.log(chalk.white('Slot ID: ') + session.slotId);
347
347
  console.log(
348
- chalk.white('Worktree Path: ') + chalk.gray(session.worktreePath)
348
+ chalk.white('Worktree Path: ') + chalk.gray(session.worktreePath),
349
349
  );
350
350
  console.log(
351
351
  chalk.white('Started At: ') +
352
- new Date(session.startedAt).toLocaleString()
352
+ new Date(session.startedAt).toLocaleString(),
353
353
  );
354
354
 
355
355
  if (session.pausedAt) {
356
356
  console.log(
357
357
  chalk.white('Paused At: ') +
358
- new Date(session.pausedAt).toLocaleString()
358
+ new Date(session.pausedAt).toLocaleString(),
359
359
  );
360
360
  }
361
361
 
362
362
  if (session.lastActivity) {
363
363
  console.log(
364
364
  chalk.white('Last Activity: ') +
365
- new Date(session.lastActivity).toLocaleString()
365
+ new Date(session.lastActivity).toLocaleString(),
366
366
  );
367
367
  }
368
368
 
@@ -397,8 +397,8 @@ async function showSessionInfo(
397
397
  padRight('Agent ID', 15) +
398
398
  padRight('Type', 15) +
399
399
  padRight('Status', 12) +
400
- padRight('Tasks', 8)
401
- )
400
+ padRight('Tasks', 8),
401
+ ),
402
402
  );
403
403
  console.log(chalk.gray('-'.repeat(50)));
404
404
 
@@ -413,7 +413,7 @@ async function showSessionInfo(
413
413
  padRight(agent.agentId, 15) +
414
414
  padRight(agent.type, 15) +
415
415
  agentStatusColor(padRight(`[${agent.status.toUpperCase()}]`, 12)) +
416
- padRight(String(agent.taskCount), 8)
416
+ padRight(String(agent.taskCount), 8),
417
417
  );
418
418
  }
419
419
  } else {
@@ -426,17 +426,17 @@ async function showSessionInfo(
426
426
  console.log(chalk.cyan('Session Metrics'));
427
427
  console.log(
428
428
  chalk.white('Tasks: ') +
429
- `${session.metrics.tasksCompleted}/${session.metrics.tasksTotal}`
429
+ `${session.metrics.tasksCompleted}/${session.metrics.tasksTotal}`,
430
430
  );
431
431
  console.log(
432
- chalk.white('Duration: ') + formatDuration(session.metrics.duration)
432
+ chalk.white('Duration: ') + formatDuration(session.metrics.duration),
433
433
  );
434
434
  console.log(
435
- chalk.white('Tokens: ') + session.metrics.tokensUsed.toLocaleString()
435
+ chalk.white('Tokens: ') + session.metrics.tokensUsed.toLocaleString(),
436
436
  );
437
437
  console.log(
438
438
  chalk.white('Errors: ') +
439
- (session.metrics.errors > 0 ? chalk.red(session.metrics.errors) : '0')
439
+ (session.metrics.errors > 0 ? chalk.red(session.metrics.errors) : '0'),
440
440
  );
441
441
  }
442
442
 
@@ -445,7 +445,7 @@ async function showSessionInfo(
445
445
  } catch (error) {
446
446
  spinner.fail('Failed to load session info');
447
447
  console.error(
448
- chalk.red(error instanceof Error ? error.message : String(error))
448
+ chalk.red(error instanceof Error ? error.message : String(error)),
449
449
  );
450
450
  }
451
451
  }
@@ -456,7 +456,7 @@ async function pauseSession(sessionId: string): Promise<void> {
456
456
  try {
457
457
  const state = await loadSessionsState();
458
458
  const sessionIndex = state.sessions.findIndex(
459
- s => s.sessionId === sessionId
459
+ s => s.sessionId === sessionId,
460
460
  );
461
461
 
462
462
  if (sessionIndex === -1) {
@@ -486,13 +486,13 @@ async function pauseSession(sessionId: string): Promise<void> {
486
486
 
487
487
  spinner.succeed(`Session paused: ${sessionId}`);
488
488
  console.log(
489
- chalk.gray('Use "wundr session resume ' + sessionId + '" to resume.')
489
+ chalk.gray('Use "wundr session resume ' + sessionId + '" to resume.'),
490
490
  );
491
491
  console.log('');
492
492
  } catch (error) {
493
493
  spinner.fail('Failed to pause session');
494
494
  console.error(
495
- chalk.red(error instanceof Error ? error.message : String(error))
495
+ chalk.red(error instanceof Error ? error.message : String(error)),
496
496
  );
497
497
  }
498
498
  }
@@ -503,7 +503,7 @@ async function resumeSession(sessionId: string): Promise<void> {
503
503
  try {
504
504
  const state = await loadSessionsState();
505
505
  const sessionIndex = state.sessions.findIndex(
506
- s => s.sessionId === sessionId
506
+ s => s.sessionId === sessionId,
507
507
  );
508
508
 
509
509
  if (sessionIndex === -1) {
@@ -537,21 +537,21 @@ async function resumeSession(sessionId: string): Promise<void> {
537
537
  } catch (error) {
538
538
  spinner.fail('Failed to resume session');
539
539
  console.error(
540
- chalk.red(error instanceof Error ? error.message : String(error))
540
+ chalk.red(error instanceof Error ? error.message : String(error)),
541
541
  );
542
542
  }
543
543
  }
544
544
 
545
545
  async function killSession(
546
546
  sessionId: string,
547
- options: { force?: boolean }
547
+ options: { force?: boolean },
548
548
  ): Promise<void> {
549
549
  const spinner = ora(`Terminating session ${sessionId}...`).start();
550
550
 
551
551
  try {
552
552
  const state = await loadSessionsState();
553
553
  const sessionIndex = state.sessions.findIndex(
554
- s => s.sessionId === sessionId
554
+ s => s.sessionId === sessionId,
555
555
  );
556
556
 
557
557
  if (sessionIndex === -1) {
@@ -610,19 +610,19 @@ async function killSession(
610
610
  console.log(chalk.gray('\nCleanup completed:'));
611
611
  if (session.subAgents && session.subAgents.length > 0) {
612
612
  console.log(
613
- chalk.gray(` - Terminated ${session.subAgents.length} sub-agent(s)`)
613
+ chalk.gray(` - Terminated ${session.subAgents.length} sub-agent(s)`),
614
614
  );
615
615
  }
616
616
  if (session.memoryBankPath) {
617
617
  console.log(
618
- chalk.gray(` - Memory bank preserved at: ${session.memoryBankPath}`)
618
+ chalk.gray(` - Memory bank preserved at: ${session.memoryBankPath}`),
619
619
  );
620
620
  }
621
621
  console.log('');
622
622
  } catch (error) {
623
623
  spinner.fail('Failed to terminate session');
624
624
  console.error(
625
- chalk.red(error instanceof Error ? error.message : String(error))
625
+ chalk.red(error instanceof Error ? error.message : String(error)),
626
626
  );
627
627
  }
628
628
  }
@@ -205,7 +205,7 @@ function formatUptime(ms: number): string {
205
205
  export function createVPCommand(): Command {
206
206
  const command = new Command('vp')
207
207
  .description(
208
- 'Manage the VP (Virtual Principal) Daemon for agent orchestration'
208
+ 'Manage the VP (Virtual Principal) Daemon for agent orchestration',
209
209
  )
210
210
  .addHelpText(
211
211
  'after',
@@ -217,7 +217,7 @@ Examples:
217
217
  ${chalk.green('wundr vp stop')} Stop the daemon gracefully
218
218
  ${chalk.green('wundr vp config show')} View current configuration
219
219
  ${chalk.green('wundr vp config set daemon.port=9000')} Update configuration
220
- `)
220
+ `),
221
221
  );
222
222
 
223
223
  // Start command
@@ -308,7 +308,7 @@ async function startDaemon(options: {
308
308
  const currentStatus = await getDaemonStatus();
309
309
  if (currentStatus.running) {
310
310
  spinner.fail(
311
- `VP Daemon is already running (PID: ${currentStatus.pid}, port: ${currentStatus.port})`
311
+ `VP Daemon is already running (PID: ${currentStatus.pid}, port: ${currentStatus.port})`,
312
312
  );
313
313
  return;
314
314
  }
@@ -366,13 +366,13 @@ async function startDaemon(options: {
366
366
  console.error(chalk.white(' 1. Install: npm install @wundr/vp-daemon'));
367
367
  console.error(
368
368
  chalk.white(
369
- ' 2. Or build from source: cd scripts/vp-daemon && npm run build'
370
- )
369
+ ' 2. Or build from source: cd scripts/vp-daemon && npm run build',
370
+ ),
371
371
  );
372
372
  console.error(
373
373
  chalk.gray(
374
- `\nError: ${importError instanceof Error ? importError.message : String(importError)}`
375
- )
374
+ `\nError: ${importError instanceof Error ? importError.message : String(importError)}`,
375
+ ),
376
376
  );
377
377
  return;
378
378
  }
@@ -393,13 +393,13 @@ async function startDaemon(options: {
393
393
  ([k, v]: [string, unknown]) => [
394
394
  k,
395
395
  (v as { status?: string })?.status ?? 'unknown',
396
- ]
397
- )
396
+ ],
397
+ ),
398
398
  ),
399
399
  };
400
400
  fs.writeFile(
401
401
  path.join(VP_CONFIG_DIR, 'status.json'),
402
- JSON.stringify(statusData, null, 2)
402
+ JSON.stringify(statusData, null, 2),
403
403
  ).catch(() => {});
404
404
  };
405
405
 
@@ -417,7 +417,7 @@ async function startDaemon(options: {
417
417
  await daemon.start();
418
418
 
419
419
  spinner.succeed(
420
- `VP Daemon started successfully on ${config.daemon.host}:${config.daemon.port}`
420
+ `VP Daemon started successfully on ${config.daemon.host}:${config.daemon.port}`,
421
421
  );
422
422
 
423
423
  console.log(chalk.gray('\nDaemon Information:'));
@@ -442,7 +442,7 @@ async function startDaemon(options: {
442
442
  } catch (error) {
443
443
  spinner.fail('Failed to start VP Daemon');
444
444
  console.error(
445
- chalk.red(error instanceof Error ? error.message : String(error))
445
+ chalk.red(error instanceof Error ? error.message : String(error)),
446
446
  );
447
447
  }
448
448
  }
@@ -468,8 +468,8 @@ async function showStatus(options: { json?: boolean }): Promise<void> {
468
468
  },
469
469
  },
470
470
  null,
471
- 2
472
- )
471
+ 2,
472
+ ),
473
473
  );
474
474
  return;
475
475
  }
@@ -502,7 +502,7 @@ async function showStatus(options: { json?: boolean }): Promise<void> {
502
502
  ? chalk.yellow
503
503
  : chalk.red;
504
504
  console.log(
505
- healthColor(`Health: ${status.health.toUpperCase()}`)
505
+ healthColor(`Health: ${status.health.toUpperCase()}`),
506
506
  );
507
507
  }
508
508
 
@@ -530,7 +530,7 @@ async function showStatus(options: { json?: boolean }): Promise<void> {
530
530
  } catch (error) {
531
531
  spinner.fail('Failed to get daemon status');
532
532
  console.error(
533
- chalk.red(error instanceof Error ? error.message : String(error))
533
+ chalk.red(error instanceof Error ? error.message : String(error)),
534
534
  );
535
535
  }
536
536
  }
@@ -591,7 +591,7 @@ async function stopDaemon(options: {
591
591
  } catch (error) {
592
592
  spinner.fail('Failed to stop VP Daemon');
593
593
  console.error(
594
- chalk.red(error instanceof Error ? error.message : String(error))
594
+ chalk.red(error instanceof Error ? error.message : String(error)),
595
595
  );
596
596
  }
597
597
  }
@@ -611,7 +611,7 @@ async function showConfig(options: { json?: boolean }): Promise<void> {
611
611
  }
612
612
  } catch (error) {
613
613
  console.error(
614
- chalk.red(error instanceof Error ? error.message : String(error))
614
+ chalk.red(error instanceof Error ? error.message : String(error)),
615
615
  );
616
616
  }
617
617
  }
@@ -623,10 +623,10 @@ async function setConfig(keyValue: string): Promise<void> {
623
623
 
624
624
  if (!keyPath || valueStr === undefined) {
625
625
  console.error(
626
- chalk.red('Invalid format. Use: wundr vp config set <key>=<value>')
626
+ chalk.red('Invalid format. Use: wundr vp config set <key>=<value>'),
627
627
  );
628
628
  console.error(
629
- chalk.gray('Example: wundr vp config set daemon.port=9000')
629
+ chalk.gray('Example: wundr vp config set daemon.port=9000'),
630
630
  );
631
631
  return;
632
632
  }
@@ -671,13 +671,13 @@ async function setConfig(keyValue: string): Promise<void> {
671
671
  console.log(chalk.green('Configuration updated:'));
672
672
  console.log(
673
673
  chalk.white(
674
- ` ${keyPath}: ${JSON.stringify(oldValue)} -> ${JSON.stringify(value)}`
675
- )
674
+ ` ${keyPath}: ${JSON.stringify(oldValue)} -> ${JSON.stringify(value)}`,
675
+ ),
676
676
  );
677
677
  console.log(chalk.gray('\nRestart the daemon for changes to take effect.'));
678
678
  } catch (error) {
679
679
  console.error(
680
- chalk.red(error instanceof Error ? error.message : String(error))
680
+ chalk.red(error instanceof Error ? error.message : String(error)),
681
681
  );
682
682
  }
683
683
  }
@@ -709,7 +709,7 @@ async function resetConfig(options: { force?: boolean }): Promise<void> {
709
709
  console.log(chalk.gray(`Saved to: ${VP_CONFIG_FILE}`));
710
710
  } catch (error) {
711
711
  console.error(
712
- chalk.red(error instanceof Error ? error.message : String(error))
712
+ chalk.red(error instanceof Error ? error.message : String(error)),
713
713
  );
714
714
  }
715
715
  }
@@ -724,7 +724,7 @@ async function viewLogs(options: {
724
724
  console.log(chalk.yellow('No log file found.'));
725
725
  console.log(chalk.gray(`Expected location: ${VP_LOG_FILE}`));
726
726
  console.log(
727
- chalk.gray('Start the daemon with --verbose to enable logging.')
727
+ chalk.gray('Start the daemon with --verbose to enable logging.'),
728
728
  );
729
729
  return;
730
730
  }
@@ -756,7 +756,7 @@ async function viewLogs(options: {
756
756
  }
757
757
  } catch (error) {
758
758
  console.error(
759
- chalk.red(error instanceof Error ? error.message : String(error))
759
+ chalk.red(error instanceof Error ? error.message : String(error)),
760
760
  );
761
761
  }
762
762
  }