From d341d26e37fd458bffc6b51c7fe5a4d33eaa182f Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 4 Nov 2025 00:52:15 -0600 Subject: [PATCH] update brew handling --- packages/console/app/src/routes/temp.tsx | 12 +++-- packages/opencode/src/installation/index.ts | 58 +++++++++++++-------- packages/web/src/components/Lander.astro | 4 +- packages/web/src/content/docs/index.mdx | 2 +- 4 files changed, 46 insertions(+), 30 deletions(-) diff --git a/packages/console/app/src/routes/temp.tsx b/packages/console/app/src/routes/temp.tsx index 379f79f7..59987e4d 100644 --- a/packages/console/app/src/routes/temp.tsx +++ b/packages/console/app/src/routes/temp.tsx @@ -79,17 +79,19 @@ export default function Home() { LSP enabled Automatically loads the right LSPs for the LLM
  • - opencode zen A curated list of models provided by opencode{" "} - + opencode zen A curated list of models{" "} + provided by opencode
  • Multi-session Start multiple agents in parallel on the same project
  • - Shareable links Share a link to any sessions for reference or to debug + Shareable links Share a link to any sessions for reference or to + debug
  • - Claude Pro Log in with Anthropic to use your Claude Pro or Max account + Claude Pro Log in with Anthropic to use your Claude Pro or Max + account
  • Use any model Supports 75+ LLM providers through{" "} @@ -121,7 +123,7 @@ export default function Home() {

    homebrew

    diff --git a/packages/opencode/src/installation/index.ts b/packages/opencode/src/installation/index.ts index f2df5b40..323810e3 100644 --- a/packages/opencode/src/installation/index.ts +++ b/packages/opencode/src/installation/index.ts @@ -73,7 +73,7 @@ export namespace Installation { }, { name: "brew" as const, - command: () => $`brew list --formula opencode-ai`.throws(false).text(), + command: () => $`brew list --formula opencode`.throws(false).text(), }, ] @@ -87,7 +87,7 @@ export namespace Installation { for (const check of checks) { const output = await check.command() - if (output.includes("opencode-ai")) { + if (output.includes(check.name === "brew" ? "opencode" : "opencode-ai")) { return check.name } } @@ -102,28 +102,42 @@ export namespace Installation { }), ) + async function getBrewFormula() { + const tapFormula = await $`brew list --formula sst/tap/opencode`.throws(false).text() + if (tapFormula.includes("opencode")) return "sst/tap/opencode" + const coreFormula = await $`brew list --formula opencode`.throws(false).text() + if (coreFormula.includes("opencode")) return "opencode" + return "opencode" + } + export async function upgrade(method: Method, target: string) { - const cmd = (() => { - switch (method) { - case "curl": - return $`curl -fsSL https://opencode.ai/install | bash`.env({ - ...process.env, - VERSION: target, - }) - case "npm": - return $`npm install -g opencode-ai@${target}` - case "pnpm": - return $`pnpm install -g opencode-ai@${target}` - case "bun": - return $`bun install -g opencode-ai@${target}` - case "brew": - return $`brew install sst/tap/opencode`.env({ - HOMEBREW_NO_AUTO_UPDATE: "1", - }) - default: - throw new Error(`Unknown method: ${method}`) + let cmd + switch (method) { + case "curl": + cmd = $`curl -fsSL https://opencode.ai/install | bash`.env({ + ...process.env, + VERSION: target, + }) + break + case "npm": + cmd = $`npm install -g opencode-ai@${target}` + break + case "pnpm": + cmd = $`pnpm install -g opencode-ai@${target}` + break + case "bun": + cmd = $`bun install -g opencode-ai@${target}` + break + case "brew": { + const formula = await getBrewFormula() + cmd = $`brew install ${formula}`.env({ + HOMEBREW_NO_AUTO_UPDATE: "1", + }) + break } - })() + default: + throw new Error(`Unknown method: ${method}`) + } const result = await cmd.quiet().throws(false) log.info("upgraded", { method, diff --git a/packages/web/src/components/Lander.astro b/packages/web/src/components/Lander.astro index ef032e49..421b2a5c 100644 --- a/packages/web/src/components/Lander.astro +++ b/packages/web/src/components/Lander.astro @@ -109,9 +109,9 @@ if (image) {

    Homebrew

    -