diff --git a/packages/wizard/src/__tests__/parse-args.test.ts b/packages/wizard/src/__tests__/parse-args.test.ts index 604b06f4..54572e38 100644 --- a/packages/wizard/src/__tests__/parse-args.test.ts +++ b/packages/wizard/src/__tests__/parse-args.test.ts @@ -32,6 +32,11 @@ describe('wizard parseArgs — mode resolution', () => { expect(parseArgs(argv('--mode=implement')).mode).toBe('implement') }) + it('rejects --mode with no value', () => { + const result = parseArgs(argv('--mode')) + expect(result.modeError).toMatch(/--mode requires a value/) + }) + it('rejects unknown --mode values with a clear error', () => { const result = parseArgs(argv('--mode', 'yolo')) expect(result.modeError).toMatch(/Unknown --mode value/) diff --git a/packages/wizard/src/bin/parse-args.ts b/packages/wizard/src/bin/parse-args.ts index f497a950..c4faa691 100644 --- a/packages/wizard/src/bin/parse-args.ts +++ b/packages/wizard/src/bin/parse-args.ts @@ -33,17 +33,22 @@ export function parseArgs(argv: string[]): ParsedArgs { mode = 'implement' continue } - if (arg === '--mode' && i + 1 < args.length) { - const next = args[i + 1] ?? '' - if (next === 'plan' || next === 'implement') { - mode = next - i++ + if (arg === '--mode') { + if (i + 1 < args.length) { + const next = args[i + 1] + if (next === 'plan' || next === 'implement') { + mode = next + i++ + } else { + modeError = `Unknown --mode value: ${next}. Expected 'plan' or 'implement'.` + break + } } else { - modeError = `Unknown --mode value: ${next}. Expected 'plan' or 'implement'.` + modeError = `--mode requires a value: 'plan' or 'implement'.` break } continue - } + if (arg.startsWith('--mode=')) { const value = arg.slice('--mode='.length) if (value === 'plan' || value === 'implement') {