fix: restore ai smoke compatibility
This commit is contained in:
@@ -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')
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user