fix(extensions): surface cli healthcheck failures in action tooltips
This commit is contained in:
parent
57f546bab0
commit
743dbec36d
2 changed files with 25 additions and 4 deletions
|
|
@ -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.';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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', () => {
|
||||
|
|
|
|||
Loading…
Reference in a new issue