From 6ff1c421327c51f0ff129d253a2af07222729881 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Sat, 14 Feb 2026 01:39:01 +0700 Subject: [PATCH] refactor(cli): simplify agent mode validation flow What I changed: - extracted a single missingModeError helper in agent/mode.ts so the command no longer duplicates the same command error payload in two branches - flattened control flow by returning early for --list and using one set-mode path guarded by explicit missing-mode validation - tightened tests/10-agent-mode.test.ts to assert the exact missing-mode error message instead of allowing a daemon-connection fallback Reasoning: - this keeps behavior the same while reducing branch duplication and making the validation contract explicit - the hardened test protects the intended precedence: missing required mode should fail before any daemon interaction Verification: - npm run typecheck - (cd packages/cli && npx tsx tests/10-agent-mode.test.ts) Notes for next agent: - repository had a pre-existing local modification in scripts/codex-refactor-loop.sh; I intentionally did not touch or stage it - no blockers encountered for this refactor --- packages/cli/src/commands/agent/mode.ts | 46 +++++++++++------------- packages/cli/tests/10-agent-mode.test.ts | 10 +++--- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/packages/cli/src/commands/agent/mode.ts b/packages/cli/src/commands/agent/mode.ts index d567e903f..79fdc4f69 100644 --- a/packages/cli/src/commands/agent/mode.ts +++ b/packages/cli/src/commands/agent/mode.ts @@ -37,6 +37,12 @@ export interface AgentModeOptions extends CommandOptions { list?: boolean } +const missingModeError = (): CommandError => ({ + code: 'MISSING_ARGUMENT', + message: 'Mode argument required unless --list is specified', + details: 'Usage: paseo agent mode | paseo agent mode --list ', +}) + // This command returns two different data shapes (set result vs mode list). // Keep `any` here to match the existing output wrapper generic contract. // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -53,12 +59,7 @@ export async function runModeCommand( // Validate arguments if (!options.list && !normalizedMode) { - const error: CommandError = { - code: 'MISSING_ARGUMENT', - message: 'Mode argument required unless --list is specified', - details: 'Usage: paseo agent mode | paseo agent mode --list ', - } - throw error + throw missingModeError() } let client: Awaited> | undefined @@ -90,27 +91,22 @@ export async function runModeCommand( data: items, schema: modeListSchema, } - } else { - if (!normalizedMode) { - const error: CommandError = { - code: 'MISSING_ARGUMENT', - message: 'Mode argument required unless --list is specified', - details: 'Usage: paseo agent mode | paseo agent mode --list ', - } - throw error - } + } - // Set the agent mode - await client.setAgentMode(resolvedId, normalizedMode) + if (!normalizedMode) { + throw missingModeError() + } - return { - type: 'single', - data: { - agentId: resolvedId.slice(0, 7), - mode: normalizedMode, - }, - schema: setModeSchema, - } + // Set the agent mode + await client.setAgentMode(resolvedId, normalizedMode) + + return { + type: 'single', + data: { + agentId: resolvedId.slice(0, 7), + mode: normalizedMode, + }, + schema: setModeSchema, } } catch (err) { // Re-throw if it's already a CommandError diff --git a/packages/cli/tests/10-agent-mode.test.ts b/packages/cli/tests/10-agent-mode.test.ts index 32f4993f4..4e50c625b 100644 --- a/packages/cli/tests/10-agent-mode.test.ts +++ b/packages/cli/tests/10-agent-mode.test.ts @@ -125,12 +125,10 @@ try { // Should fail because mode is required unless --list is specified assert.notStrictEqual(result.exitCode, 0, 'should fail without mode argument') const output = result.stdout + result.stderr - const hasError = - output.toLowerCase().includes('missing') || - output.toLowerCase().includes('required') || - output.toLowerCase().includes('mode') || - output.toLowerCase().includes('daemon') // If daemon error comes first, that's also valid - assert(hasError, 'error should mention missing mode or connection issue') + assert( + output.includes('Mode argument required unless --list is specified'), + 'error should mention missing mode argument' + ) console.log('✓ agent mode requires mode argument when not using --list\n') } } finally {