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: {
|
export function getExtensionActionDisableReason(options: {
|
||||||
isInstalled: boolean;
|
isInstalled: boolean;
|
||||||
cliStatus: Pick<CliInstallationStatus, 'installed' | 'authLoggedIn'> | null;
|
cliStatus: Pick<
|
||||||
|
CliInstallationStatus,
|
||||||
|
'installed' | 'authLoggedIn' | 'binaryPath' | 'launchError'
|
||||||
|
> | null;
|
||||||
cliStatusLoading: boolean;
|
cliStatusLoading: boolean;
|
||||||
}): string | null {
|
}): string | null {
|
||||||
const { isInstalled, cliStatus, cliStatusLoading } = options;
|
const { isInstalled, cliStatus, cliStatusLoading } = options;
|
||||||
|
|
@ -162,6 +165,9 @@ export function getExtensionActionDisableReason(options: {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cliStatus.installed === false) {
|
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.';
|
return 'Claude CLI required. Install it from the Dashboard.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,7 @@ describe('getExtensionActionDisableReason', () => {
|
||||||
expect(
|
expect(
|
||||||
getExtensionActionDisableReason({
|
getExtensionActionDisableReason({
|
||||||
isInstalled: false,
|
isInstalled: false,
|
||||||
cliStatus: { installed: true, authLoggedIn: false },
|
cliStatus: { installed: true, authLoggedIn: false, binaryPath: null, launchError: null },
|
||||||
cliStatusLoading: false,
|
cliStatusLoading: false,
|
||||||
}),
|
}),
|
||||||
).toContain('not signed in');
|
).toContain('not signed in');
|
||||||
|
|
@ -217,7 +217,7 @@ describe('getExtensionActionDisableReason', () => {
|
||||||
expect(
|
expect(
|
||||||
getExtensionActionDisableReason({
|
getExtensionActionDisableReason({
|
||||||
isInstalled: true,
|
isInstalled: true,
|
||||||
cliStatus: { installed: true, authLoggedIn: false },
|
cliStatus: { installed: true, authLoggedIn: false, binaryPath: null, launchError: null },
|
||||||
cliStatusLoading: false,
|
cliStatusLoading: false,
|
||||||
}),
|
}),
|
||||||
).toBeNull();
|
).toBeNull();
|
||||||
|
|
@ -227,11 +227,26 @@ describe('getExtensionActionDisableReason', () => {
|
||||||
expect(
|
expect(
|
||||||
getExtensionActionDisableReason({
|
getExtensionActionDisableReason({
|
||||||
isInstalled: true,
|
isInstalled: true,
|
||||||
cliStatus: { installed: false, authLoggedIn: false },
|
cliStatus: { installed: false, authLoggedIn: false, binaryPath: null, launchError: null },
|
||||||
cliStatusLoading: false,
|
cliStatusLoading: false,
|
||||||
}),
|
}),
|
||||||
).toContain('Claude CLI required');
|
).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', () => {
|
describe('sanitizeMcpServerName', () => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue