diff --git a/src/components/AiAgentsOnboardingPrompt.test.tsx b/src/components/AiAgentsOnboardingPrompt.test.tsx index acd58250..f5bb4c79 100644 --- a/src/components/AiAgentsOnboardingPrompt.test.tsx +++ b/src/components/AiAgentsOnboardingPrompt.test.tsx @@ -41,6 +41,8 @@ describe('AiAgentsOnboardingPrompt', () => { ) expect(screen.getByText('No AI agents detected')).toBeInTheDocument() + expect(screen.getByTestId('claude-onboarding-screen')).toBeInTheDocument() + expect(screen.getByText('Claude Code not detected')).toBeInTheDocument() expect(screen.getByTestId('ai-agents-onboarding-install-claude_code')).toBeInTheDocument() expect(screen.getByTestId('ai-agents-onboarding-install-codex')).toBeInTheDocument() expect(screen.getByTestId('ai-agents-onboarding-continue')).toHaveTextContent('Continue without it') diff --git a/src/components/AiAgentsOnboardingPrompt.tsx b/src/components/AiAgentsOnboardingPrompt.tsx index 053d3e37..0ae0365d 100644 --- a/src/components/AiAgentsOnboardingPrompt.tsx +++ b/src/components/AiAgentsOnboardingPrompt.tsx @@ -78,6 +78,7 @@ export function AiAgentsOnboardingPrompt({ onContinue, }: AiAgentsOnboardingPromptProps) { const copy = getPromptCopy(statuses) + const showLegacyClaudeCompatibility = statuses.claude_code.status !== 'installed' const missingAgents = AI_AGENT_DEFINITIONS.filter((definition) => statuses[definition.id].status === 'missing') return ( @@ -101,6 +102,17 @@ export function AiAgentsOnboardingPrompt({ + {showLegacyClaudeCompatibility ? ( +
+
Claude Code not detected
+

+ Install Claude Code or continue without it. +

+
+ ) : null}
@@ -117,14 +129,16 @@ export function AiAgentsOnboardingPrompt({ ))} - +
+ +
diff --git a/src/hooks/useAiAgentPreferences.test.ts b/src/hooks/useAiAgentPreferences.test.ts index e3bce0ea..2bc31c25 100644 --- a/src/hooks/useAiAgentPreferences.test.ts +++ b/src/hooks/useAiAgentPreferences.test.ts @@ -55,4 +55,17 @@ describe('useAiAgentPreferences', () => { }) expect(onToast).toHaveBeenCalledWith('Default AI agent: Codex') }) + + it('keeps the browser mock agent composer enabled when no CLI is installed', () => { + const { result } = renderHook(() => useAiAgentPreferences({ + settings, + saveSettings: vi.fn(), + aiAgentsStatus: { + claude_code: { status: 'missing', version: null }, + codex: { status: 'missing', version: null }, + }, + })) + + expect(result.current.defaultAiAgentReady).toBe(true) + }) }) diff --git a/src/hooks/useAiAgentPreferences.ts b/src/hooks/useAiAgentPreferences.ts index c38592fb..09055ac5 100644 --- a/src/hooks/useAiAgentPreferences.ts +++ b/src/hooks/useAiAgentPreferences.ts @@ -1,4 +1,5 @@ import { useCallback, useMemo } from 'react' +import { isTauri } from '../mock-tauri' import { getAiAgentDefinition, getNextAiAgentId, @@ -28,7 +29,7 @@ export function useAiAgentPreferences({ ) const defaultAiAgentLabel = getAiAgentDefinition(defaultAiAgent).label - const defaultAiAgentReady = isAiAgentInstalled(aiAgentsStatus, defaultAiAgent) + const defaultAiAgentReady = !isTauri() || isAiAgentInstalled(aiAgentsStatus, defaultAiAgent) const setDefaultAiAgent = useCallback((agent: AiAgentId) => { saveSettings({