fix(extensions): surface cli healthcheck failures in action tooltips

This commit is contained in:
777genius 2026-04-16 22:17:41 +03:00
parent 57f546bab0
commit 743dbec36d
2 changed files with 25 additions and 4 deletions

View file

@ -149,7 +149,10 @@ export function getInstallationSummaryLabel(
*/
export function getExtensionActionDisableReason(options: {
isInstalled: boolean;
cliStatus: Pick<CliInstallationStatus, 'installed' | 'authLoggedIn'> | null;
cliStatus: Pick<
CliInstallationStatus,
'installed' | 'authLoggedIn' | 'binaryPath' | 'launchError'
> | null;
cliStatusLoading: boolean;
}): string | null {
const { isInstalled, cliStatus, cliStatusLoading } = options;
@ -162,6 +165,9 @@ export function getExtensionActionDisableReason(options: {
}
if (cliStatus.installed === false) {
if (cliStatus.binaryPath && cliStatus.launchError) {
return 'Claude CLI was found but failed to start. Open the Dashboard to repair or reinstall it.';
}
return 'Claude CLI required. Install it from the Dashboard.';
}

View file

@ -207,7 +207,7 @@ describe('getExtensionActionDisableReason', () => {
expect(
getExtensionActionDisableReason({
isInstalled: false,
cliStatus: { installed: true, authLoggedIn: false },
cliStatus: { installed: true, authLoggedIn: false, binaryPath: null, launchError: null },
cliStatusLoading: false,
}),
).toContain('not signed in');
@ -217,7 +217,7 @@ describe('getExtensionActionDisableReason', () => {
expect(
getExtensionActionDisableReason({
isInstalled: true,
cliStatus: { installed: true, authLoggedIn: false },
cliStatus: { installed: true, authLoggedIn: false, binaryPath: null, launchError: null },
cliStatusLoading: false,
}),
).toBeNull();
@ -227,11 +227,26 @@ describe('getExtensionActionDisableReason', () => {
expect(
getExtensionActionDisableReason({
isInstalled: true,
cliStatus: { installed: false, authLoggedIn: false },
cliStatus: { installed: false, authLoggedIn: false, binaryPath: null, launchError: null },
cliStatusLoading: false,
}),
).toContain('Claude CLI required');
});
it('surfaces startup health-check failures separately from missing CLI', () => {
expect(
getExtensionActionDisableReason({
isInstalled: false,
cliStatus: {
installed: false,
authLoggedIn: false,
binaryPath: '/usr/local/bin/claude',
launchError: 'spawn EACCES',
},
cliStatusLoading: false,
}),
).toContain('failed to start');
});
});
describe('sanitizeMcpServerName', () => {