fix: restore ai smoke compatibility

This commit is contained in:
lucaronin
2026-04-13 19:47:38 +02:00
parent d540d76f73
commit c2f9b7c20d
4 changed files with 39 additions and 9 deletions

View File

@@ -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')

View File

@@ -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({
</CardHeader>
<CardContent className="space-y-4">
{showLegacyClaudeCompatibility ? (
<div
className="rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-left"
data-testid="claude-onboarding-screen"
>
<div className="text-sm font-medium text-amber-900">Claude Code not detected</div>
<p className="mt-1 text-xs leading-5 text-amber-800">
Install Claude Code or continue without it.
</p>
</div>
) : null}
<AgentStatusList statuses={statuses} />
</CardContent>
@@ -117,14 +129,16 @@ export function AiAgentsOnboardingPrompt({
<ArrowUpRight className="size-4" />
</Button>
))}
<Button
type="button"
onClick={onContinue}
disabled={isAiAgentsStatusChecking(statuses)}
data-testid="ai-agents-onboarding-continue"
>
{hasAnyInstalledAiAgent(statuses) ? 'Continue' : 'Continue without it'}
</Button>
<div data-testid="ai-agents-onboarding-continue">
<Button
type="button"
onClick={onContinue}
disabled={isAiAgentsStatusChecking(statuses)}
data-testid={showLegacyClaudeCompatibility ? 'claude-onboarding-continue' : undefined}
>
{hasAnyInstalledAiAgent(statuses) ? 'Continue' : 'Continue without it'}
</Button>
</div>
</CardFooter>
</Card>
</div>

View File

@@ -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)
})
})

View File

@@ -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({