diff --git a/src/cli/index.ts b/src/cli/index.ts index 6879b6e..55295e8 100644 --- a/src/cli/index.ts +++ b/src/cli/index.ts @@ -642,6 +642,87 @@ export function createCli(serverHandler?: (port?: number) => Promise): Com } }); + // Initiative command group + const initiativeCommand = program + .command('initiative') + .description('Manage initiatives'); + + // cw initiative create + initiativeCommand + .command('create ') + .description('Create a new initiative') + .option('-d, --description ', 'Initiative description') + .action(async (name: string, options: { description?: string }) => { + try { + const client = createDefaultTrpcClient(); + const initiative = await client.createInitiative.mutate({ + name, + description: options.description, + }); + console.log(`Created initiative: ${initiative.id}`); + console.log(` Name: ${initiative.name}`); + if (initiative.description) { + console.log(` Description: ${initiative.description}`); + } + } catch (error) { + console.error('Failed to create initiative:', (error as Error).message); + process.exit(1); + } + }); + + // cw initiative list + initiativeCommand + .command('list') + .description('List all initiatives') + .option('-s, --status ', 'Filter by status (active, completed, archived)') + .action(async (options: { status?: string }) => { + // Validate status if provided + const validStatuses = ['active', 'completed', 'archived']; + if (options.status && !validStatuses.includes(options.status)) { + console.error(`Invalid status: ${options.status}`); + console.error(`Valid statuses: ${validStatuses.join(', ')}`); + process.exit(1); + } + + try { + const client = createDefaultTrpcClient(); + const initiatives = await client.listInitiatives.query( + options.status ? { status: options.status as 'active' | 'completed' | 'archived' } : undefined + ); + if (initiatives.length === 0) { + console.log('No initiatives found'); + return; + } + for (const init of initiatives) { + console.log(`${init.id} ${init.status.padEnd(10)} ${init.name}`); + } + } catch (error) { + console.error('Failed to list initiatives:', (error as Error).message); + process.exit(1); + } + }); + + // cw initiative get + initiativeCommand + .command('get ') + .description('Get initiative details') + .action(async (id: string) => { + try { + const client = createDefaultTrpcClient(); + const initiative = await client.getInitiative.query({ id }); + console.log(`ID: ${initiative.id}`); + console.log(`Name: ${initiative.name}`); + console.log(`Status: ${initiative.status}`); + if (initiative.description) { + console.log(`Description: ${initiative.description}`); + } + console.log(`Created: ${new Date(initiative.createdAt).toISOString()}`); + } catch (error) { + console.error('Failed to get initiative:', (error as Error).message); + process.exit(1); + } + }); + return program; }