From 0c6f04310209ca51f0a1748a7fcd1a902461a985 Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 19 May 2026 16:38:42 +0000 Subject: [PATCH 1/2] fix: remove session storage option from TypeScript agent advanced config TypeScript agents do not support session storage, so hide the option from the TUI advanced settings and reject the CLI flag with a clear error message during validation. --- src/cli/commands/add/validate.ts | 3 +++ src/cli/tui/screens/generate/GenerateWizardUI.tsx | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cli/commands/add/validate.ts b/src/cli/commands/add/validate.ts index 4a6275010..c1b307d71 100644 --- a/src/cli/commands/add/validate.ts +++ b/src/cli/commands/add/validate.ts @@ -287,6 +287,9 @@ export function validateAddAgentOptions(options: AddAgentOptions): ValidationRes // Validate session storage mount path if (options.sessionStorageMountPath) { + if (options.language === 'TypeScript') { + return { valid: false, error: '--session-storage-mount-path is not supported for TypeScript agents' }; + } const mountPathResult = SessionStorageSchema.shape.mountPath.safeParse(options.sessionStorageMountPath); if (!mountPathResult.success) { return { valid: false, error: `--session-storage-mount-path: ${mountPathResult.error.issues[0]?.message}` }; diff --git a/src/cli/tui/screens/generate/GenerateWizardUI.tsx b/src/cli/tui/screens/generate/GenerateWizardUI.tsx index 70ece0c74..7daa2d88d 100644 --- a/src/cli/tui/screens/generate/GenerateWizardUI.tsx +++ b/src/cli/tui/screens/generate/GenerateWizardUI.tsx @@ -126,9 +126,11 @@ export function GenerateWizardUI({ const isSessionStorageMountPathStep = wizard.step === 'sessionStorageMountPath'; const isConfirmStep = wizard.step === 'confirm'; - // Advanced multi-select items — filter out dockerfile when not a Container build + // Advanced multi-select items — filter out options not applicable to current config const advancedItems: SelectableItem[] = ADVANCED_SETTING_OPTIONS.filter( - o => o.id !== 'dockerfile' || wizard.config.buildType === 'Container' + o => + (o.id !== 'dockerfile' || wizard.config.buildType === 'Container') && + (o.id !== 'filesystem' || wizard.config.language !== 'TypeScript') ).map(o => ({ id: o.id, title: o.title, description: o.description })); const handleSelect = (item: SelectableItem) => { From 040f4c1ff117a9ec0de24e5b964c0a5be80c8e89 Mon Sep 17 00:00:00 2001 From: Jesse Turner Date: Tue, 19 May 2026 16:51:04 +0000 Subject: [PATCH 2/2] fix: hoist TypeScript session-storage check before early returns, add test Addresses review feedback: - Move the TypeScript rejection to the top of validateAddAgentOptions so it runs before any protocol-specific early returns (MCP, import, etc.) - Add unit test asserting BYO+TypeScript+sessionStorageMountPath is rejected --- src/cli/commands/add/__tests__/validate.test.ts | 11 +++++++++++ src/cli/commands/add/validate.ts | 10 ++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/cli/commands/add/__tests__/validate.test.ts b/src/cli/commands/add/__tests__/validate.test.ts index 2be895494..fdefc6417 100644 --- a/src/cli/commands/add/__tests__/validate.test.ts +++ b/src/cli/commands/add/__tests__/validate.test.ts @@ -1583,4 +1583,15 @@ describe('validateAddAgentOptions - session storage mount path', () => { const result = validateAddAgentOptions({ ...baseOptions }); expect(result.valid).toBe(true); }); + + it('rejects session storage for TypeScript agents', () => { + const result = validateAddAgentOptions({ + ...baseOptions, + language: 'TypeScript', + framework: 'Strands', + sessionStorageMountPath: '/mnt/data', + }); + expect(result.valid).toBe(false); + expect(result.error).toBe('--session-storage-mount-path is not supported for TypeScript agents'); + }); }); diff --git a/src/cli/commands/add/validate.ts b/src/cli/commands/add/validate.ts index c1b307d71..b39f89454 100644 --- a/src/cli/commands/add/validate.ts +++ b/src/cli/commands/add/validate.ts @@ -91,6 +91,11 @@ export function validateAddAgentOptions(options: AddAgentOptions): ValidationRes (matchEnumValue(TargetLanguageSchema, options.language) as typeof options.language) ?? options.language; if (options.build) options.build = matchEnumValue(BuildTypeSchema, options.build) ?? options.build; + // Session storage is not supported for TypeScript agents — reject early before any path-specific returns + if (options.sessionStorageMountPath && options.language === 'TypeScript') { + return { valid: false, error: '--session-storage-mount-path is not supported for TypeScript agents' }; + } + if (!options.name) { return { valid: false, error: '--name is required' }; } @@ -285,11 +290,8 @@ export function validateAddAgentOptions(options: AddAgentOptions): ValidationRes if (lifecycleResult.idleTimeout !== undefined) options.idleTimeout = lifecycleResult.idleTimeout; if (lifecycleResult.maxLifetime !== undefined) options.maxLifetime = lifecycleResult.maxLifetime; - // Validate session storage mount path + // Validate session storage mount path format (TypeScript rejection is handled at the top) if (options.sessionStorageMountPath) { - if (options.language === 'TypeScript') { - return { valid: false, error: '--session-storage-mount-path is not supported for TypeScript agents' }; - } const mountPathResult = SessionStorageSchema.shape.mountPath.safeParse(options.sessionStorageMountPath); if (!mountPathResult.success) { return { valid: false, error: `--session-storage-mount-path: ${mountPathResult.error.issues[0]?.message}` };