@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.
- package/dist/commands/ai.d.ts +2 -2
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +93 -29
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/analyze-optimized.d.ts.map +1 -1
- package/dist/commands/analyze-optimized.js +187 -27
- package/dist/commands/analyze-optimized.js.map +1 -1
- package/package.json +9 -26
- package/src/cli.ts +4 -4
- package/src/commands/ai.ts +141 -35
- package/src/commands/alignment.ts +74 -74
- package/src/commands/analyze-optimized.ts +324 -27
- package/src/commands/computer-setup.ts +33 -33
- package/src/commands/governance.ts +34 -34
- package/src/commands/guardian.ts +56 -56
- package/src/commands/session.ts +35 -35
- package/src/commands/vp.ts +26 -26
- package/src/commands/worktree.ts +49 -49
package/src/commands/session.ts
CHANGED
|
@@ -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
|
}
|
package/src/commands/vp.ts
CHANGED
|
@@ -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
|
}
|