fix: handle daemon install failure in wizard

This commit is contained in:
Peter Steinberger
2026-01-17 23:00:29 +00:00
parent 7d2e510087
commit 82b7153ac1

View File

@@ -163,46 +163,62 @@ export async function finalizeOnboardingWizard(options: FinalizeOnboardingOption
if (!loaded || (loaded && (await service.isLoaded({ env: process.env })) === false)) { if (!loaded || (loaded && (await service.isLoaded({ env: process.env })) === false)) {
const devMode = const devMode =
process.argv[1]?.includes(`${path.sep}src${path.sep}`) && process.argv[1]?.endsWith(".ts"); process.argv[1]?.includes(`${path.sep}src${path.sep}`) && process.argv[1]?.endsWith(".ts");
await withWizardProgress( const progress = prompter.progress("Gateway daemon");
"Gateway daemon", let installError: string | null = null;
{ doneMessage: "Gateway daemon installed." }, try {
async (progress) => { progress.update("Preparing Gateway daemon…");
progress.update("Preparing Gateway daemon…"); const nodePath = await resolvePreferredNodePath({
const nodePath = await resolvePreferredNodePath({ env: process.env,
env: process.env, runtime: daemonRuntime,
runtime: daemonRuntime, });
}); const { programArguments, workingDirectory } = await resolveGatewayProgramArguments({
const { programArguments, workingDirectory } = await resolveGatewayProgramArguments({ port: settings.port,
port: settings.port, dev: devMode,
dev: devMode, runtime: daemonRuntime,
runtime: daemonRuntime, nodePath,
nodePath, });
}); if (daemonRuntime === "node") {
if (daemonRuntime === "node") { const systemNode = await resolveSystemNodeInfo({ env: process.env });
const systemNode = await resolveSystemNodeInfo({ env: process.env }); const warning = renderSystemNodeWarning(systemNode, programArguments[0]);
const warning = renderSystemNodeWarning(systemNode, programArguments[0]); if (warning) await prompter.note(warning, "Gateway runtime");
if (warning) await prompter.note(warning, "Gateway runtime"); }
} const environment = buildServiceEnvironment({
const environment = buildServiceEnvironment({ env: process.env,
env: process.env, port: settings.port,
port: settings.port, token: settings.gatewayToken,
token: settings.gatewayToken, launchdLabel:
launchdLabel: process.platform === "darwin"
process.platform === "darwin" ? resolveGatewayLaunchAgentLabel(process.env.CLAWDBOT_PROFILE)
? resolveGatewayLaunchAgentLabel(process.env.CLAWDBOT_PROFILE) : undefined,
: undefined, });
});
progress.update("Installing Gateway daemon…"); progress.update("Installing Gateway daemon…");
await service.install({ await service.install({
env: process.env, env: process.env,
stdout: process.stdout, stdout: process.stdout,
programArguments, programArguments,
workingDirectory, workingDirectory,
environment, environment,
}); });
}, } catch (err) {
); installError = err instanceof Error ? err.message : String(err);
} finally {
progress.stop(installError ? "Gateway daemon install failed." : "Gateway daemon installed.");
}
if (installError) {
await prompter.note(`Gateway daemon install failed: ${installError}`, "Gateway");
if (process.platform === "win32") {
await prompter.note(
"Tip: rerun from an elevated PowerShell (Start → type PowerShell → right-click → Run as administrator) or skip daemon install.",
"Gateway",
);
} else {
await prompter.note(
"Tip: rerun `clawdbot daemon install` after fixing the error.",
"Gateway",
);
}
}
} }
} }