From bb64a3c5529d9624440f963e9eb39d2ee00bbdf4 Mon Sep 17 00:00:00 2001 From: Vinicios Rabaioli Date: Mon, 27 Apr 2026 21:14:31 -0300 Subject: [PATCH 1/2] fix(branding): restore opencode naming --- .github/workflows/compliance-close.yml | 4 +- .github/workflows/duplicate-issues.yml | 2 +- ...tion.yml => publish-github-action.DISABLE} | 0 ...lish-vscode.yml => publish-vscode.DISABLE} | 0 .../{publish.yml => publish.DISABLE} | 8 +- ...tion.yml => release-github-action.DISABLE} | 2 +- .github/workflows/storybook.yml | 4 +- .github/workflows/test.yml | 6 +- .github/workflows/typecheck.yml | 4 +- CHANGELOG.md | 8 +- README.md | 109 ++++++++++++++---- bun.lock | 2 +- ...screenshot.png => opencode-screenshot.png} | Bin ...reenshot2.png => opencode-screenshot2.png} | Bin packages/opencode/bin/opencode | 26 ++--- packages/opencode/script/build.ts | 4 +- packages/opencode/script/postinstall.mjs | 20 ++-- packages/opencode/script/publish.ts | 12 +- packages/opencode/src/cli/logo.ts | 6 +- packages/opencode/src/cli/ui.ts | 10 +- packages/script/src/index.ts | 2 +- packages/ui/src/components/logo.stories.tsx | 4 +- packages/ui/src/components/logo.tsx | 53 ++++----- release-please-config.json | 2 +- ux-design-directions.html | 32 ++--- 25 files changed, 187 insertions(+), 133 deletions(-) rename .github/workflows/{publish-github-action.yml => publish-github-action.DISABLE} (100%) rename .github/workflows/{publish-vscode.yml => publish-vscode.DISABLE} (100%) rename .github/workflows/{publish.yml => publish.DISABLE} (95%) rename .github/workflows/{release-github-action.yml => release-github-action.DISABLE} (97%) rename packages/console/app/src/asset/lander/{grafo-screenshot.png => opencode-screenshot.png} (100%) rename packages/console/app/src/asset/lander/{grafo-screenshot2.png => opencode-screenshot2.png} (100%) diff --git a/.github/workflows/compliance-close.yml b/.github/workflows/compliance-close.yml index ba46c6153006..c3bcf9f686f4 100644 --- a/.github/workflows/compliance-close.yml +++ b/.github/workflows/compliance-close.yml @@ -55,8 +55,8 @@ jobs: } const closeMessage = isPR - ? 'This pull request has been automatically closed because it was not updated to meet our [contributing guidelines](../blob/main/CONTRIBUTING.md) within the 2-hour window.\n\nFeel free to open a new pull request that follows our guidelines.' - : 'This issue has been automatically closed because it was not updated to meet our [contributing guidelines](../blob/main/CONTRIBUTING.md) within the 2-hour window.\n\nFeel free to open a new issue that follows our issue templates.'; + ? 'This pull request has been automatically closed because it was not updated to meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md) within the 2-hour window.\n\nFeel free to open a new pull request that follows our guidelines.' + : 'This issue has been automatically closed because it was not updated to meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md) within the 2-hour window.\n\nFeel free to open a new issue that follows our issue templates.'; await github.rest.issues.createComment({ owner: context.repo.owner, diff --git a/.github/workflows/duplicate-issues.yml b/.github/workflows/duplicate-issues.yml index dc1d15a96173..862faf123f40 100644 --- a/.github/workflows/duplicate-issues.yml +++ b/.github/workflows/duplicate-issues.yml @@ -97,7 +97,7 @@ jobs: [If not compliant:] - This issue doesn't fully meet our [contributing guidelines](../blob/main/CONTRIBUTING.md). + This issue doesn't fully meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md). **What needs to be fixed:** - [specific reasons] diff --git a/.github/workflows/publish-github-action.yml b/.github/workflows/publish-github-action.DISABLE similarity index 100% rename from .github/workflows/publish-github-action.yml rename to .github/workflows/publish-github-action.DISABLE diff --git a/.github/workflows/publish-vscode.yml b/.github/workflows/publish-vscode.DISABLE similarity index 100% rename from .github/workflows/publish-vscode.yml rename to .github/workflows/publish-vscode.DISABLE diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.DISABLE similarity index 95% rename from .github/workflows/publish.yml rename to .github/workflows/publish.DISABLE index 735011e45322..bbd272308b48 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.DISABLE @@ -3,7 +3,7 @@ name: Auto Release on: push: branches: - - main + - dev concurrency: group: release-${{ github.ref }} @@ -46,7 +46,7 @@ jobs: run: bun typecheck working-directory: packages/opencode - - name: Build Grafo CLI packages + - name: Build opencode CLI packages run: bun ./packages/opencode/script/build.ts env: OPENCODE_VERSION: ${{ needs.release-please.outputs.version }} @@ -102,11 +102,11 @@ jobs: name: opencode-cli-windows path: packages/opencode/dist - - name: Publish Grafo npm packages + - name: Publish opencode npm packages run: bun ./packages/opencode/script/publish.ts env: OPENCODE_VERSION: ${{ needs.release-please.outputs.version }} OPENCODE_CHANNEL: latest - GRAFO_NPM_ONLY: "true" + OPENCODE_NPM_ONLY: "true" NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_CONFIG_PROVENANCE: "false" diff --git a/.github/workflows/release-github-action.yml b/.github/workflows/release-github-action.DISABLE similarity index 97% rename from .github/workflows/release-github-action.yml rename to .github/workflows/release-github-action.DISABLE index 22b30af098dd..b2df4b9af520 100644 --- a/.github/workflows/release-github-action.yml +++ b/.github/workflows/release-github-action.DISABLE @@ -3,7 +3,7 @@ name: release-github-action on: push: branches: - - main + - dev paths: - "github/**" diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml index 77154fff8cbf..913107ea2cb1 100644 --- a/.github/workflows/storybook.yml +++ b/.github/workflows/storybook.yml @@ -2,7 +2,7 @@ name: storybook on: push: - branches: [main] + branches: [dev] paths: - ".github/workflows/storybook.yml" - "package.json" @@ -10,7 +10,7 @@ on: - "packages/storybook/**" - "packages/ui/**" pull_request: - branches: [main] + branches: [dev] paths: - ".github/workflows/storybook.yml" - "package.json" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cef028b896a5..72fd1d02ec17 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,14 +3,14 @@ name: test on: push: branches: - - main + - dev pull_request: workflow_dispatch: concurrency: - # Keep every run on main so cancelled checks do not pollute the default branch + # Keep every run on dev so cancelled checks do not pollute the default branch # commit history. PRs and other branches still share a group and cancel stale runs. - group: ${{ case(github.ref == 'refs/heads/main', format('{0}-{1}', github.workflow, github.run_id), format('{0}-{1}', github.workflow, github.event.pull_request.number || github.ref)) }} + group: ${{ case(github.ref == 'refs/heads/dev', format('{0}-{1}', github.workflow, github.run_id), format('{0}-{1}', github.workflow, github.event.pull_request.number || github.ref)) }} cancel-in-progress: true permissions: diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index 8ce95d2d7d5f..09b919429385 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -2,9 +2,9 @@ name: typecheck on: push: - branches: [main] + branches: [dev] pull_request: - branches: [main] + branches: [dev] workflow_dispatch: jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fcfda81e753..026676829b82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,19 +1,19 @@ # Changelog -## [1.15.0](https://github.com/vinirabli/grafo-cli/compare/v1.14.25...v1.15.0) (2026-04-27) +## [1.15.0](https://github.com/anomalyco/opencode/compare/v1.14.25...v1.15.0) (2026-04-27) ### Features -* **grafo:** rebrand package and terminal UI ([#1](https://github.com/vinirabli/grafo-cli/issues/1)) ([71e6c91](https://github.com/vinirabli/grafo-cli/commit/71e6c911d1263888ae11683f2cd3bead07102038)) +* **opencode:** restore package and terminal UI naming ([#1](https://github.com/anomalyco/opencode/issues/1)) ([71e6c91](https://github.com/anomalyco/opencode/commit/71e6c911d1263888ae11683f2cd3bead07102038)) ### Bug Fixes -* **README:** update logo to a single SVG file and simplify markup ([1c4df5f](https://github.com/vinirabli/grafo-cli/commit/1c4df5f382225a3248d0983cca0afbe2c28c34ab)) +* **README:** update logo to a single SVG file and simplify markup ([1c4df5f](https://github.com/anomalyco/opencode/commit/1c4df5f382225a3248d0983cca0afbe2c28c34ab)) ## Changelog -All notable changes to Grafo are documented in this file. +All notable changes to OpenCode are documented in this file. This changelog is maintained automatically by `release-please` from Conventional Commits. diff --git a/README.md b/README.md index 312f604e7a4f..79ccf8b34910 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,105 @@

- Grafo logo + + + + OpenCode logo +

-

Grafo is the open source AI coding agent for the terminal.

+

The open source AI coding agent.

Discord - npm + npm Build status

-![Grafo Terminal UI](packages/console/app/src/asset/lander/grafo-screenshot2.png) +

+ English | + 简体中文 | + 繁體中文 | + 한국어 | + Deutsch | + Español | + Français | + Italiano | + Dansk | + 日本語 | + Polski | + Русский | + Bosanski | + العربية | + Norsk | + Português (Brasil) | + ไทย | + Türkçe | + Українська | + বাংলা | + Ελληνικά | + Tiếng Việt +

+ +[![OpenCode Terminal UI](packages/web/src/assets/lander/screenshot.png)](https://opencode.ai) --- ### Installation ```bash -npm i -g @vinirabli/grafo - -# or with bun / pnpm / yarn -bun add -g @vinirabli/grafo -pnpm add -g @vinirabli/grafo -yarn global add @vinirabli/grafo +# YOLO +curl -fsSL https://opencode.ai/install | bash + +# Package managers +npm i -g opencode-ai@latest # or bun/pnpm/yarn +scoop install opencode # Windows +choco install opencode # Windows +brew install anomalyco/tap/opencode # macOS and Linux (recommended, always up to date) +brew install opencode # macOS and Linux (official brew formula, updated less) +sudo pacman -S opencode # Arch Linux (Stable) +paru -S opencode-bin # Arch Linux (Latest from AUR) +mise use -g opencode # Any OS +nix run nixpkgs#opencode # or github:anomalyco/opencode for latest dev branch ``` > [!TIP] -> The published package exposes both `grafo` and `opencode` commands during the transition. +> Remove versions older than 0.1.x before installing. -### Documentation +### Desktop App (BETA) + +OpenCode is also available as a desktop application. Download directly from the [releases page](https://github.com/anomalyco/opencode/releases) or [opencode.ai/download](https://opencode.ai/download). + +| Platform | Download | +| --------------------- | ------------------------------------- | +| macOS (Apple Silicon) | `opencode-desktop-darwin-aarch64.dmg` | +| macOS (Intel) | `opencode-desktop-darwin-x64.dmg` | +| Windows | `opencode-desktop-windows-x64.exe` | +| Linux | `.deb`, `.rpm`, or AppImage | + +```bash +# macOS (Homebrew) +brew install --cask opencode-desktop +# Windows (Scoop) +scoop bucket add extras; scoop install extras/opencode-desktop +``` + +#### Installation Directory + +The install script respects the following priority order for the installation path: -Docs and links still live under the existing OpenCode URLs for now: [**opencode.ai/docs**](https://opencode.ai/docs). +1. `$OPENCODE_INSTALL_DIR` - Custom installation directory +2. `$XDG_BIN_DIR` - XDG Base Directory Specification compliant path +3. `$HOME/bin` - Standard user binary directory (if it exists or can be created) +4. `$HOME/.opencode/bin` - Default fallback + +```bash +# Examples +OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash +XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash +``` ### Agents -Grafo includes two built-in agents you can switch between with the `Tab` key. +OpenCode includes two built-in agents you can switch between with the `Tab` key. - **build** - Default, full-access agent for development work - **plan** - Read-only agent for analysis and code exploration @@ -47,13 +112,17 @@ This is used internally and can be invoked using `@general` in messages. Learn more about [agents](https://opencode.ai/docs/agents). +### Documentation + +For more info on how to configure OpenCode, [**head over to our docs**](https://opencode.ai/docs). + ### Contributing -If you're interested in contributing to Grafo, please read our [contributing docs](./CONTRIBUTING.md) before submitting a pull request. +If you're interested in contributing to OpenCode, please read our [contributing docs](./CONTRIBUTING.md) before submitting a pull request. -### Building on Grafo +### Building on OpenCode -If you are working on a project that's related to Grafo and is using "grafo" or "opencode" as part of its name, please add a note to your README to clarify that it is not built by the Grafo team and is not affiliated with us in any way. +If you are working on a project that's related to OpenCode and is using "opencode" as part of its name, for example "opencode-dashboard" or "opencode-mobile", please add a note to your README to clarify that it is not built by the OpenCode team and is not affiliated with us in any way. ### FAQ @@ -62,10 +131,10 @@ If you are working on a project that's related to Grafo and is using "grafo" or It's very similar to Claude Code in terms of capability. Here are the key differences: - 100% open source -- Not coupled to any provider. Although we recommend the models we provide through [OpenCode Zen](https://opencode.ai/zen), Grafo can be used with Claude, OpenAI, Google, or even local models. As models evolve, the gaps between them will close and pricing will drop, so being provider-agnostic is important. +- Not coupled to any provider. Although we recommend the models we provide through [OpenCode Zen](https://opencode.ai/zen), OpenCode can be used with Claude, OpenAI, Google, or even local models. As models evolve, the gaps between them will close and pricing will drop, so being provider-agnostic is important. - Out-of-the-box LSP support -- A focus on TUI. Grafo is built by neovim users and the creators of [terminal.shop](https://terminal.shop); we are going to push the limits of what's possible in the terminal. -- A client/server architecture. This, for example, can allow Grafo to run on your computer while you drive it remotely from a mobile app, meaning that the TUI frontend is just one of the possible clients. +- A focus on TUI. OpenCode is built by neovim users and the creators of [terminal.shop](https://terminal.shop); we are going to push the limits of what's possible in the terminal. +- A client/server architecture. This, for example, can allow OpenCode to run on your computer while you drive it remotely from a mobile app, meaning that the TUI frontend is just one of the possible clients. --- diff --git a/bun.lock b/bun.lock index d98e37cfb449..2488042155f3 100644 --- a/bun.lock +++ b/bun.lock @@ -348,7 +348,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.14.28", + "version": "1.15.0", "bin": { "opencode": "./bin/opencode", }, diff --git a/packages/console/app/src/asset/lander/grafo-screenshot.png b/packages/console/app/src/asset/lander/opencode-screenshot.png similarity index 100% rename from packages/console/app/src/asset/lander/grafo-screenshot.png rename to packages/console/app/src/asset/lander/opencode-screenshot.png diff --git a/packages/console/app/src/asset/lander/grafo-screenshot2.png b/packages/console/app/src/asset/lander/opencode-screenshot2.png similarity index 100% rename from packages/console/app/src/asset/lander/grafo-screenshot2.png rename to packages/console/app/src/asset/lander/opencode-screenshot2.png diff --git a/packages/opencode/bin/opencode b/packages/opencode/bin/opencode index d736c80212bf..c72cfc8cdba4 100755 --- a/packages/opencode/bin/opencode +++ b/packages/opencode/bin/opencode @@ -4,8 +4,7 @@ const childProcess = require("child_process") const fs = require("fs") const path = require("path") const os = require("os") -const commandName = "grafo" -const legacyCommandName = "opencode" +const commandName = "opencode" function run(target) { const result = childProcess.spawnSync(target, process.argv.slice(2), { @@ -19,7 +18,7 @@ function run(target) { process.exit(code) } -const envPath = process.env.GRAFO_BIN_PATH || process.env.OPENCODE_BIN_PATH +const envPath = process.env.OPENCODE_BIN_PATH if (envPath) { run(envPath) } @@ -27,11 +26,9 @@ if (envPath) { const scriptPath = fs.realpathSync(__filename) const scriptDir = path.dirname(scriptPath) -for (const cacheName of [`.${commandName}`, `.${legacyCommandName}`]) { - const cached = path.join(scriptDir, cacheName) - if (fs.existsSync(cached)) { - run(cached) - } +const cached = path.join(scriptDir, `.${commandName}`) +if (fs.existsSync(cached)) { + run(cached) } const platformMap = { @@ -53,10 +50,9 @@ let arch = archMap[os.arch()] if (!arch) { arch = os.arch() } -const packageBase = "@vinirabli/grafo" +const packageBase = "@vinirabli/opencode" const base = packageBase + "-" + platform + "-" + arch -const binaryNames = - platform === "windows" ? [`${commandName}.exe`, `${legacyCommandName}.exe`] : [commandName, legacyCommandName] +const binaryName = platform === "windows" ? `${commandName}.exe` : commandName function supportsAvx2() { if (arch !== "x64") return false @@ -159,10 +155,8 @@ function findBinary(startDir) { const modules = path.join(current, "node_modules") if (fs.existsSync(modules)) { for (const name of names) { - for (const binary of binaryNames) { - const candidate = path.join(modules, name, "bin", binary) - if (fs.existsSync(candidate)) return candidate - } + const candidate = path.join(modules, name, "bin", binaryName) + if (fs.existsSync(candidate)) return candidate } } const parent = path.dirname(current) @@ -176,7 +170,7 @@ function findBinary(startDir) { const resolved = findBinary(scriptDir) if (!resolved) { console.error( - "It seems that your package manager failed to install the right version of the grafo CLI for your platform. You can try manually installing " + + "It seems that your package manager failed to install the right version of the opencode CLI for your platform. You can try manually installing " + names.map((n) => `\"${n}\"`).join(" or ") + " package", ) diff --git a/packages/opencode/script/build.ts b/packages/opencode/script/build.ts index 24ff7dccba24..98a6a4111608 100755 --- a/packages/opencode/script/build.ts +++ b/packages/opencode/script/build.ts @@ -17,8 +17,8 @@ await import("./generate.ts") import { Script } from "@opencode-ai/script" import pkg from "../package.json" -const npmPackageName = "@vinirabli/grafo" -const commandName = "grafo" +const npmPackageName = "@vinirabli/opencode" +const commandName = "opencode" const legacyCommandName = pkg.name // Load migrations from migration directories diff --git a/packages/opencode/script/postinstall.mjs b/packages/opencode/script/postinstall.mjs index 3cb765dc0723..c46b5397ca2d 100644 --- a/packages/opencode/script/postinstall.mjs +++ b/packages/opencode/script/postinstall.mjs @@ -8,9 +8,8 @@ import { createRequire } from "module" const __dirname = path.dirname(fileURLToPath(import.meta.url)) const require = createRequire(import.meta.url) -const packageBase = "@vinirabli/grafo" -const commandName = "grafo" -const legacyCommandName = "opencode" +const packageBase = "@vinirabli/opencode" +const commandName = "opencode" function detectPlatformAndArch() { // Map platform names @@ -53,17 +52,16 @@ function detectPlatformAndArch() { function findBinary() { const { platform, arch } = detectPlatformAndArch() const packageName = `${packageBase}-${platform}-${arch}` - const binaryNames = - platform === "windows" ? [`${commandName}.exe`, `${legacyCommandName}.exe`] : [commandName, legacyCommandName] + const binaryName = platform === "windows" ? `${commandName}.exe` : commandName try { // Use require.resolve to find the package const packageJsonPath = require.resolve(`${packageName}/package.json`) const packageDir = path.dirname(packageJsonPath) - const binaryPath = binaryNames.map((name) => path.join(packageDir, "bin", name)).find((item) => fs.existsSync(item)) + const binaryPath = path.join(packageDir, "bin", binaryName) - if (!binaryPath) { - throw new Error(`Binary not found in ${path.join(packageDir, "bin")}`) + if (!fs.existsSync(binaryPath)) { + throw new Error(`Binary not found at ${binaryPath}`) } return { binaryPath } @@ -77,14 +75,14 @@ async function main() { if (os.platform() === "win32") { // On Windows, the .exe is already included in the package and bin field points to it // No postinstall setup needed - console.log("Windows detected: grafo binary setup not needed (using packaged .exe)") + console.log("Windows detected: opencode binary setup not needed (using packaged .exe)") return } // On non-Windows platforms, just verify the binary package exists // Don't replace the wrapper script - it handles binary execution const { binaryPath } = findBinary() - const target = path.join(__dirname, "bin", ".grafo") + const target = path.join(__dirname, "bin", ".opencode") if (fs.existsSync(target)) fs.unlinkSync(target) try { fs.linkSync(binaryPath, target) @@ -93,7 +91,7 @@ async function main() { } fs.chmodSync(target, 0o755) } catch (error) { - console.error("Failed to setup grafo binary:", error.message) + console.error("Failed to setup opencode binary:", error.message) process.exit(1) } } diff --git a/packages/opencode/script/publish.ts b/packages/opencode/script/publish.ts index d274800eb49f..778b1d65f5ca 100755 --- a/packages/opencode/script/publish.ts +++ b/packages/opencode/script/publish.ts @@ -7,12 +7,11 @@ import path from "path" const dir = fileURLToPath(new URL("..", import.meta.url)) process.chdir(dir) -const npmPackageName = "@vinirabli/grafo" +const npmPackageName = "@vinirabli/opencode" const npmPackageDir = `./dist/${npmPackageName}` -const commandName = "grafo" -const legacyCommandName = pkg.name +const commandName = pkg.name const releaseArtifactBaseName = pkg.name -const npmOnly = process.env.GRAFO_NPM_ONLY === "true" +const npmOnly = process.env.OPENCODE_NPM_ONLY === "true" const releaseArtifact = (platform: string, arch: string, extension: "tar.gz" | "zip") => `${releaseArtifactBaseName}-${platform}-${arch}.${extension}` @@ -53,8 +52,7 @@ await Bun.file(`${npmPackageDir}/package.json`).write( { name: npmPackageName, bin: { - [commandName]: `./bin/${legacyCommandName}`, - [legacyCommandName]: `./bin/${legacyCommandName}`, + [commandName]: `./bin/${commandName}`, }, scripts: { postinstall: "bun ./postinstall.mjs || node ./postinstall.mjs", @@ -81,7 +79,7 @@ const tagFlags = tags.flatMap((t) => ["-t", t]) // registries if (npmOnly) { - console.log("GRAFO_NPM_ONLY=true; skipping Docker, AUR, and Homebrew publishing") + console.log("OPENCODE_NPM_ONLY=true; skipping Docker, AUR, and Homebrew publishing") } else if (!Script.preview) { await $`docker buildx build --platform ${platforms} ${tagFlags} --push .` // Calculate SHA values diff --git a/packages/opencode/src/cli/logo.ts b/packages/opencode/src/cli/logo.ts index 9e9d8a1c1eed..1ac3bd438ef4 100644 --- a/packages/opencode/src/cli/logo.ts +++ b/packages/opencode/src/cli/logo.ts @@ -1,7 +1,7 @@ export const logo = { - left: ["▄▀^^, █^^^▄ ▄▀^^▄", "█_▄▄▄ █▄▄▄▀_█▄▄▄█", "█_ ~█_█_▀▄~ █_~~█", " ▀^^,~▀_ ▀,▀_ ▀"], - right: ["█^^^^,▄▀^^▄,", "█▄▄▄ █_ █_", "█_~~~ █_ █_", "▀_ ▀^^,~"], - accent: ["", "▀, ▀, ▀,"], + left: [" ", "█▀▀█ █▀▀█ █▀▀█ █▀▀▄", "█__█ █__█ █^^^ █__█", "▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀~~▀"], + right: [" ▄ ", "█▀▀▀ █▀▀█ █▀▀█ █▀▀█", "█___ █__█ █__█ █^^^", "▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀"], + accent: [] as string[], } export const go = { diff --git a/packages/opencode/src/cli/ui.ts b/packages/opencode/src/cli/ui.ts index 02d3c26c9464..07e12841c7f5 100644 --- a/packages/opencode/src/cli/ui.ts +++ b/packages/opencode/src/cli/ui.ts @@ -4,12 +4,10 @@ import { NamedError } from "@opencode-ai/core/util/error" import { logo as glyphs } from "./logo" const wordmark = [ - `▄▀▀▀ █▀▀▀▄ ▄▀▀▀▄ █▀▀▀▀ ▄▀▀▀▄`, - `█ ▄▄▄ █▄▄▄▀ █▄▄▄█ █▄▄▄ █ █`, - `█ █ █ ▀▄ █ █ █ █ █`, - ` ▀▀▀ ▀ ▀ ▀ ▀ ▀ ▀▀▀`, - ``, - ` ▀▄ ▀▄ ▀▄`, + `⠀ ▄ `, + `█▀▀█ █▀▀█ █▀▀█ █▀▀▄ █▀▀▀ █▀▀█ █▀▀█ █▀▀█`, + `█ █ █ █ █▀▀▀ █ █ █ █ █ █ █ █▀▀▀`, + `▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀ ▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀`, ] export const CancelledError = NamedError.create("UICancelledError", z.void()) diff --git a/packages/script/src/index.ts b/packages/script/src/index.ts index 1846f9e4c0de..3c09b38462c0 100644 --- a/packages/script/src/index.ts +++ b/packages/script/src/index.ts @@ -34,7 +34,7 @@ const IS_PREVIEW = CHANNEL !== "latest" const VERSION = await (async () => { if (env.OPENCODE_VERSION) return env.OPENCODE_VERSION if (IS_PREVIEW) return `0.0.0-${CHANNEL}-${new Date().toISOString().slice(0, 16).replace(/[-:T]/g, "")}` - const version = await fetch(`https://registry.npmjs.org/${encodeURIComponent("@vinirabli/grafo")}/latest`) + const version = await fetch(`https://registry.npmjs.org/${encodeURIComponent("@vinirabli/opencode")}/latest`) .then((res) => { if (!res.ok) throw new Error(res.statusText) return res.json() diff --git a/packages/ui/src/components/logo.stories.tsx b/packages/ui/src/components/logo.stories.tsx index 261dfec68bb6..3f5dd9cef738 100644 --- a/packages/ui/src/components/logo.stories.tsx +++ b/packages/ui/src/components/logo.stories.tsx @@ -2,7 +2,7 @@ import * as mod from "./logo" const docs = `### Overview -Grafo logo assets: mark, splash, and wordmark. +OpenCode logo assets: mark, splash, and wordmark. Use Mark for compact spaces, Logo for headers, Splash for hero sections. @@ -46,7 +46,7 @@ export const Basic = {
Splash
- +
Logo
diff --git a/packages/ui/src/components/logo.tsx b/packages/ui/src/components/logo.tsx index 33c9fadc9b41..20c2f3fbea83 100644 --- a/packages/ui/src/components/logo.tsx +++ b/packages/ui/src/components/logo.tsx @@ -1,31 +1,16 @@ import { ComponentProps } from "solid-js" -const GRAFO_WORDMARK_LEFT = - "M8 0h24v8H8zM0 8h8v40H0zM16 24h24v8H16zM32 32h8v16h-8zM8 48h24v8H8zM52 0h32v8H52zM52 8h8v48h-8zM84 8h8v16h-8zM60 24h24v8H60zM68 32h8v8h-8zM76 40h8v8h-8zM84 48h8v8h-8zM112 0h24v8h-24zM104 8h8v48h-8zM136 8h8v48h-8zM104 24h40v8h-40z" -const GRAFO_WORDMARK_RIGHT = - "M156 0h40v8h-40zM156 8h8v48h-8zM164 24h24v8h-24zM216 0h24v8h-24zM208 8h8v40h-8zM240 8h8v40h-8zM216 48h24v8h-24z" -const GRAFO_WORDMARK = GRAFO_WORDMARK_LEFT + GRAFO_WORDMARK_RIGHT -const GRAFO_ACCENT = "M119 70h10v4h-10zM133 70h10v4h-10zM147 70h10v4h-10z" -const GRAFO_MARK = "M5 2h12v4H5zM1 6h4v12H1zM5 18h12v4H5zM13 10h8v4h-8zM17 14h4v4h-4z" -const GRAFO_MARK_ACCENT = "M9 10h4v4H9z" - export const Mark = (props: { class?: string }) => { return ( - - - + + ) } @@ -36,14 +21,12 @@ export const Splash = (props: Pick, "ref" | "class">) => { ref={props.ref} data-component="logo-splash" classList={{ [props.class ?? ""]: !!props.class }} - viewBox="0 0 286 86" + viewBox="0 0 80 100" fill="none" xmlns="http://www.w3.org/2000/svg" > - - - - + + ) } @@ -52,14 +35,28 @@ export const Logo = (props: { class?: string }) => { return ( - - - - + + + + + + + + + + + + + + + + + + ) } diff --git a/release-please-config.json b/release-please-config.json index 38128547e795..21d19729ea6a 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -4,7 +4,7 @@ "packages": { ".": { "release-type": "node", - "package-name": "@vinirabli/grafo", + "package-name": "@vinirabli/opencode", "include-component-in-tag": false, "changelog-path": "CHANGELOG.md", "extra-files": [ diff --git a/ux-design-directions.html b/ux-design-directions.html index e8a59c47f1fc..d89cda53c73b 100644 --- a/ux-design-directions.html +++ b/ux-design-directions.html @@ -3,7 +3,7 @@ - Grafo CLI - UX Design Directions + OpenCode CLI - UX Design Directions