From 4cd747f2466bc8b92ae9553eb6ce1043ae45d488 Mon Sep 17 00:00:00 2001 From: minhn4 Date: Mon, 10 Aug 2026 08:57:00 +0700 Subject: [PATCH 1/2] fix(desktop): point auto-update at the fork and bundle the notification icon The packaged beta and prod builds pointed electron-updater at upstream's anomalyco/opencode-beta and anomalyco/opencode releases, so a CoDev Code install would have offered upstream OpenCode builds as its own updates. Both channels now read quickbeard/codev-code. Desktop notifications also fetched their icon from https://opencode.ai/favicon-96x96-v3.png on every notification: no icon offline, a request per notification to a host the app has no other reason to contact, and an upstream-branded mark. It now uses the bundled asset via the same relative path index.html already uses for its favicon. Co-Authored-By: Claude Opus 5 (1M context) --- CHANGELOG.md | 11 +++++++++++ DIVERGENCES.md | 10 ++++++---- packages/desktop/electron-builder.config.ts | 4 ++-- packages/desktop/src/renderer/index.tsx | 5 ++++- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index db574fac2c..e54b4a81a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,17 @@ file is the human-readable summary of what changed and why. a stale `opencode` directory while the CLI writes its logs under `codev`, so the server logs were silently missing from the exported archive. Fixed. +- **Auto-update looks at this fork, not upstream** — the packaged beta and prod + builds pointed electron-updater at upstream's `anomalyco/opencode-beta` and + `anomalyco/opencode` GitHub releases, so a CoDev Code install would have offered + upstream OpenCode builds as its own updates. Both channels now read + `quickbeard/codev-code`. + +- **Notifications draw their icon from the app** — the desktop notification icon + was fetched from `https://opencode.ai/favicon-96x96-v3.png` on every + notification, which meant no icon offline and a request to a host the app has + no other reason to contact. It now uses the CoDev mark bundled with the app. + ### Desktop / Web UI - **No wordmark on the new-session screen, and the composer is centred** — the diff --git a/DIVERGENCES.md b/DIVERGENCES.md index 81331c55aa..7a18fb8f12 100644 --- a/DIVERGENCES.md +++ b/DIVERGENCES.md @@ -149,11 +149,12 @@ from the squash message first, or use a plain merge. | `packages/app/src/assets/help/` (introducing-tabs.mp4, placeholder.png, home.png, tabs.png — whole directory) | Deleted | The 13 MB promo video's and the v1.18 home/tabs screenshots' only consumer was the removed `TabsInfoPopup` (row above) and they bloat every clone; `placeholder.png` is referenced by nothing. | Keep deleted (`git rm` the upstream side of modify/delete conflicts); delete new upstream assets under this directory whose only consumer is the removed popup. | | `packages/app/src/desktop-menu.ts`, `packages/app/src/components/windows-app-menu.tsx` | App-menu label "OpenCode" → "CoDev Code"; "OpenCode Documentation" item → "CoDev Code Documentation" (href `opencode.ai/docs` stays — real URL); trigger `aria-label` "OpenCode menu" → "CoDev Code menu" (×2) | Visible menu branding, incl. screen-reader labels. | Keep our labels; take upstream's surrounding menu changes. Rebrand any new "OpenCode" label/aria-label. | | Hardcoded product-string rebrand in TUI + web app: `packages/tui/src/app.tsx`, `packages/tui/src/routes/session/permission.tsx`, `packages/tui/src/attention.ts` (+ `packages/opencode/test/cli/cmd/tui/attention.test.ts`), `packages/app/src/wsl/settings-model.ts` (+ `.test.ts`), `packages/ui/src/components/favicon.tsx` | User-visible "OpenCode" strings outside the i18n dicts → fork brand: update-complete toast "Successfully updated to OpenCode v…" → "CoDev Code"; permission dialog "…until OpenCode is restarted" → "CoDev Code" (the sibling patterns line was already rebranded); OS-notification fallback title `opencode` → `codev` and built-in sound-pack display name "OpenCode Default" → "CoDev Code Default" (pack id `opencode.default` stays — internal identifier; the three default-title expectations in `packages/opencode/test/cli/cmd/tui/attention.test.ts` follow, while its explicit-title pass-through fixture stays `opencode`); WSL settings actions "Install/Update OpenCode" → "…CoDev Code" (+ test expectations/titles; fixture paths `/usr/local/bin/opencode` stay); PWA `apple-mobile-web-app-title` "OpenCode" → "CoDev Code" (matches the rebranded `site.webmanifest`, favicon-assets row) | These render in surfaces the fork ships (TUI + embedded web UI); the i18n-dict strings remain a known gap (UI branding bullet below). | Keep our strings; take upstream's surrounding changes. Rebrand any new hardcoded user-visible "OpenCode" string in these surfaces; leave identifiers, URLs, and fixture paths. | -| Desktop app text + identifier rebrand: `packages/desktop/**` (README, `package.json`, `src/renderer/index.html`, `src/renderer/i18n/{en,es}.ts`, `src/main/{index,windows,server,logging}.ts`, `src/main/wsl/{sidecar,startup,servers,servers.test}.ts`, `src/main/install-state.test.ts`, `scripts/copy-metainfo.ts`, `electron-builder.config.ts`) plus the WSL/deep-link surfaces it shares with `packages/app` (`src/wsl/{types,settings-model,settings-model.test,settings,dialog-add-server}.ts(x)`, `src/i18n/{en,es}.ts`, `src/pages/layout/{deep-links,helpers.test}.ts`, `src/app.tsx`, `src/index.ts`) and `packages/desktop/src/{preload,renderer}` | Every user-visible "OpenCode" the desktop app renders → "CoDev Code": crash dialogs, window ``, updater/CLI-installed i18n (en+es, with the CLI-command hint `'opencode'`→`'codev'`), the unpackaged app-name fallback `"OpenCode Dev"`, the AppStream metainfo (product name, description, `developer` → `<name>CoDev</name>` with the upstream `id="ly.anoma"` dropped, the three URLs repointed to the fork repo, upstream's lander screenshot removed), the OS deep-link handler display name, README, and `package.json` (upstream `homepage`/`author` removed — `packages/opencode` and `packages/app` declare neither). Codebase identifiers renamed `Opencode`→`Codev`/`opencode`→`codev` (`WslOpencodeCheck`, `resolveWslOpencode`, `installWslOpencode`, `expectOpencodeVersion`, `releaseOpencodeResolve`, `checkOpencode`/`refreshOpencodeCheck*`/`setOpencodeCheck`, `opencodeChecks`, `wslOpencodeAction`, …) together with the internal wire values whose producer and consumer both ship here (`virtual:opencode-server`, the `opencode:{node-pty,virtual-server,copy-server}` vite plugin names, the `wsl-servers-install-opencode` IPC channel, the `install-opencode` job kind, the `__OPENCODE__` deep-link bridge global, the `opencode:deep-link` renderer event, the `opencode-onboarding-` temp dir, the `wsl.onboarding.installOpencode*` i18n keys), and the server-log collector path `<xdgData>/opencode/log` → `/codev/log` (a real bug fix — the fork CLI writes to `<xdgData>/codev/log`, `packages/core/src/global.ts` `app = "codev"`, so debug-log export was silently collecting nothing). Two stale product-named locals renamed to what they hold (`opencode`→`binary` in wsl/sidecar.ts, `opencode`→`checked` in the servers test). | The fork ships the desktop app, so every surface it shows and every identifier a maintainer reads should say codev. | Keep our strings + identifiers; take upstream's surrounding changes. PRESERVED deliberately, do not rename: `@opencode-ai/*` package ids, the `ai.opencode.desktop*` appIds and `opencode://` scheme + `schemes:["opencode"]` (identity plumbing), the `owner:"anomalyco"`/`repo:"opencode"`/`packageName:"opencode"` publish targets and `opencode-desktop.desktop` legacy launcher, the persisted on-disk store names (`opencode.settings`, `opencode.{draft,workspace,global,window,updater}.*`, the `opencode` data dir in install-state), the basic-auth username `"opencode"` (must match the server default in `packages/server/src/auth.ts`), and the `../opencode/dist` build paths. | +| Desktop app text + identifier rebrand: `packages/desktop/**` (README, `package.json`, `src/renderer/index.html`, `src/renderer/i18n/{en,es}.ts`, `src/main/{index,windows,server,logging}.ts`, `src/main/wsl/{sidecar,startup,servers,servers.test}.ts`, `src/main/install-state.test.ts`, `scripts/copy-metainfo.ts`, `electron-builder.config.ts`) plus the WSL/deep-link surfaces it shares with `packages/app` (`src/wsl/{types,settings-model,settings-model.test,settings,dialog-add-server}.ts(x)`, `src/i18n/{en,es}.ts`, `src/pages/layout/{deep-links,helpers.test}.ts`, `src/app.tsx`, `src/index.ts`) and `packages/desktop/src/{preload,renderer}` | Every user-visible "OpenCode" the desktop app renders → "CoDev Code": crash dialogs, window `<title>`, updater/CLI-installed i18n (en+es, with the CLI-command hint `'opencode'`→`'codev'`), the unpackaged app-name fallback `"OpenCode Dev"`, the AppStream metainfo (product name, description, `developer` → `<name>CoDev</name>` with the upstream `id="ly.anoma"` dropped, the three URLs repointed to the fork repo, upstream's lander screenshot removed), the OS deep-link handler display name, README, and `package.json` (upstream `homepage`/`author` removed — `packages/opencode` and `packages/app` declare neither). Codebase identifiers renamed `Opencode`→`Codev`/`opencode`→`codev` (`WslOpencodeCheck`, `resolveWslOpencode`, `installWslOpencode`, `expectOpencodeVersion`, `releaseOpencodeResolve`, `checkOpencode`/`refreshOpencodeCheck*`/`setOpencodeCheck`, `opencodeChecks`, `wslOpencodeAction`, …) together with the internal wire values whose producer and consumer both ship here (`virtual:opencode-server`, the `opencode:{node-pty,virtual-server,copy-server}` vite plugin names, the `wsl-servers-install-opencode` IPC channel, the `install-opencode` job kind, the `__OPENCODE__` deep-link bridge global, the `opencode:deep-link` renderer event, the `opencode-onboarding-` temp dir, the `wsl.onboarding.installOpencode*` i18n keys), and the server-log collector path `<xdgData>/opencode/log` → `/codev/log` (a real bug fix — the fork CLI writes to `<xdgData>/codev/log`, `packages/core/src/global.ts` `app = "codev"`, so debug-log export was silently collecting nothing). Two stale product-named locals renamed to what they hold (`opencode`→`binary` in wsl/sidecar.ts, `opencode`→`checked` in the servers test). | The fork ships the desktop app, so every surface it shows and every identifier a maintainer reads should say codev. | Keep our strings + identifiers; take upstream's surrounding changes. PRESERVED deliberately, do not rename: `@opencode-ai/*` package ids, the `ai.opencode.desktop*` appIds and `opencode://` scheme + `schemes:["opencode"]` (identity plumbing), the `packageName:"opencode"` Linux package names and `opencode-desktop.desktop` legacy launcher, the persisted on-disk store names (`opencode.settings`, `opencode.{draft,workspace,global,window,updater}.*`, the `opencode` data dir in install-state), the basic-auth username `"opencode"` (must match the server default in `packages/server/src/auth.ts`), and the `../opencode/dist` build paths. | | `packages/app/src/i18n/{en,es}.ts`, `packages/app/src/pages/layout/deep-links.ts` | App-self-reference "OpenCode" → "CoDev Code" across the shared web UI's i18n dicts (28 strings per locale): settings row descriptions, the update toasts, the WSL onboarding step/status strings, the `dialog.server.description`, `error.chain.mcpFailed`, `sidebar.gettingStarted.line1`, the provider-connect "use {{provider}} models in OpenCode" lines, and `app.name.desktop`. The Zen free-models dialog title (`dialog.model.unpaid.freeModels.title`, "Free models provided by OpenCode") was **neutralized** to "Free models included" / "Modelos gratuitos incluidos" rather than rebranded or kept — it read oddly branded either way. i18n **keys** are untouched (they carry `Opencode`/lowercase `opencode`, which never match the exact-case `OpenCode` in values). The deep-link bridge window type `OpenCodeWindow` → `CodevWindow` (its `__CODEV__` global was already renamed in the desktop row). | These render in the desktop app (and the web console), which the fork ships; closes the "in-app i18n strings" gap for this package. | Keep our strings; take upstream's surrounding changes. PRESERVED deliberately: the real external-service names **"OpenCode Zen"** / **"OpenCode Go"** (in the `opencodeZen.*` provider-connect keys and the "OpenCode Go" upsell), plus every `opencode.ai/*` URL — the fork routes to those actual services, so the display text must match what users land on. The built-in **"OpenCode" theme** name (`packages/ui/src/theme/context.tsx`, the shiki theme id, `desktop-theme.schema.json`) is also kept — it names a specific palette, and the fork ships its own `codev` theme alongside it. | | Browser-opened docs-site links: `packages/tui/src/app.tsx`, `packages/app/src/desktop-menu.ts`, `packages/app/src/components/{settings-general,settings-v2/general,dialog-custom-provider}.tsx`, `packages/app/src/pages/{home,layout,error}.tsx`, `packages/app/src/i18n/{en,es}.ts`, `packages/opencode/src/cli/cmd/{providers,github.handler}.ts` | Links the app opens in the user's browser repointed from `opencode.ai` to the fork's hosted docs. Each one derives its base from `DOCS_URL` (`packages/codev-brand/src/index.ts`, base64-encoded) rather than hardcoding the host: the site is locale-routed and the Code docs live under `/code`, and no URL takes a trailing slash (the site 308-redirects `…/themes/` to `…/themes`). Sites: TUI "Open docs" command and app Documentation menu item → docs root; settings theme "Learn more" (v1 + v2) → `…/code/themes`; custom-provider dialog link → `…/code/providers#custom-provider`; CLI Cloudflare-gateway hint → `…/code/providers#cloudflare-ai-gateway`; GitHub-agent hint → `…/code/github`; home/layout sidebar Help buttons `opencode.ai/desktop-feedback` → docs root. The error page's report button `opencode.ai/desktop-feedback` → `github.com/quickbeard/codev-code/issues` instead (it's a report action, not a docs lookup), icon `discord` → `github`, and the en/es `error.page.report.*` strings → "…CoDev Code team" / "on GitHub". Help submenu (rendered by the shipped web UI's Windows app menu too): "Support Forum" (upstream Discord invite) deleted — the fork has no forum; "Share Feedback"/"Report a Bug" → `github.com/quickbeard/codev-code/issues/new?template=feature-request.yml`/`bug-report.yml` (the fork's template names are hyphenated, unlike upstream's underscored ones). | Fork users should land on the fork's docs and report issues to the fork, not upstream's site/Discord. NOT repointed: Zen/Go product URLs (`opencode.ai/zen`, `/go`, `/auth`), `$schema`/theme-schema ids, API/share/changelog endpoints, MCP OAuth `client_uri`, prompt-file mentions. Also NOT on this base: the ripgrep mirror (`/codev/docs/code/downloads/…`, see its own row) — it is a `public/` static asset, not locale-routed content, and 404s under `/en/docs/code`. | Keep our URLs, icon, and strings; take upstream's surrounding changes. Repoint any new browser-opened `opencode.ai` docs/help link to the fork docs base; leave the NOT-repointed list. | | `packages/desktop/src/main/index.ts`, `packages/desktop/src/main/windows.ts` | APP_NAMES + window title → "CoDev Code" (Dev/Beta variants too) | Desktop app display name. | Keep our names. | -| `packages/desktop/electron-builder.config.ts` | `productName` ×3 → "CoDev Code…"; artifactName → `codev-code-desktop-…`; protocol display name | Installer/product branding. appId (`ai.opencode.desktop`) and the `opencode://` deep-link scheme stay upstream — identity plumbing wired into main/index.ts and app deep-links; do not rename casually. | Keep our names; take upstream's other config. | +| `packages/desktop/electron-builder.config.ts` | `productName` ×3 → "CoDev Code…"; artifactName → `codev-code-desktop-…`; protocol display name. Auto-update `publish` targets repointed to the fork: beta `anomalyco/opencode-beta` and prod `anomalyco/opencode` both → `quickbeard/codev-code` (upstream has no fork-side beta repo, so the two channels share one). | Installer/product branding, and a packaged build must not offer upstream OpenCode releases as CoDev updates. appId (`ai.opencode.desktop`) and the `opencode://` deep-link scheme stay upstream — identity plumbing wired into main/index.ts and app deep-links; do not rename casually. `rpm.packageName` (`opencode`/`opencode-beta`/`opencode-dev`) also stays — it names the installed Linux package, not a publish target. | Keep our names and publish targets; take upstream's other config. Two known follow-ups, both moot while the fork ships no desktop build: beta and prod now write the same `latest.yml` in one repo (splitting them needs `publish.channel` plus the hardcoded `autoUpdater.channel = "latest"` in `src/main/updater.ts`), and `codev-code` is private, which electron-updater cannot read without a token. | +| `packages/desktop/src/renderer/index.tsx` | Desktop notification icon `https://opencode.ai/favicon-96x96-v3.png` → the relative `./favicon-96x96-v3.png`. The renderer's `publicDir` is `packages/app/public`, whose `favicon-96x96-v3.png` symlinks to the rebranded `packages/ui/src/assets/favicon/` mark, so the file is emitted next to `index.html` and resolves against the renderer origin (`oc://renderer/` packaged, the vite dev server otherwise) — the same asset and the same relative form `src/renderer/index.html` already uses for `<link rel="icon">`. | A desktop app should not reach out to a remote host to draw its own notification icon (it fails offline and leaks a request per notification), and the remote file is upstream-branded while the bundled one is the codev mark. | Keep our relative path. If upstream changes the URL, re-point it at the bundled asset rather than taking a new remote host. `packages/app/src/entry.tsx` and `pages/layout/helpers.ts` keep their remote `opencode.ai/favicon*` sources — same bug class, not yet fixed. | | `packages/ui/src/assets/favicon/` (favicon-v3.svg, site.webmanifest, favicon-96x96-v3.png, apple-touch-icon-v3.png, web-app-manifest-192/512.png) | New codev mark: blocky "C" in #00cdcd on dark; manifest name "CoDev Code"/"codev" | Web/desktop favicon + PWA branding (served via packages/app/public symlinks). | Keep our assets (binary: take ours wholesale). | | `AGENTS.md` | Default-branch note: `dev` → `main` (single merged line; upstream has two lines saying local `main` may not exist); added fork bullets requiring every upstream-file change to get a `DIVERGENCES.md` row (and matching en + es doc updates) in the same PR, and pointing agents at this file's Divergence policy (prefer config/plugins, then `packages/codev-*`, upstream edits last) and Syncing with upstream sections | The fork's default branch is `main` (see the workflow-triggers row); agents kept basing diffs on a nonexistent `dev`. Agents edit upstream files without recording the divergence — and don't apply the placement policy or sync runbook — unless the instructions file says to. | Keep our lines; take upstream's other guidance. | | `README.md` | Replaced with fork README | Fork identity, sync + divergence policy. | Keep ours entirely. | @@ -220,8 +221,9 @@ from the squash message first, or use a plain merge. (`opencode.ai/zen`, `/go`, `/auth` — external products), `$schema`/`theme.json`/ `desktop-theme.json` ids, service endpoints (`api.opencode.ai` exchange, `opencode.ai/s/` share links, social-cards, `opencode.ai/changelog.json` highlights fetch), the MCP OAuth - `client_uri`, favicon image sources (`opencode.ai/favicon*` in `app/src/entry.tsx` + - `pages/layout/helpers.ts` — see the binary-assets item above), and + `client_uri`, the remaining remote favicon image sources (`opencode.ai/favicon*` in + `app/src/entry.tsx` + `pages/layout/helpers.ts` — the desktop renderer's copy is now + local, see the notification-icon row), and `opencode.ai` URLs inside docs content (web-docs row). The Help submenu's feedback/bug links target the fork's issue templates and its "Support Forum" Discord item is deleted (docs-site links row); crash-report, security-advisory, and contribution links target diff --git a/packages/desktop/electron-builder.config.ts b/packages/desktop/electron-builder.config.ts index d6b3049b32..198285c402 100644 --- a/packages/desktop/electron-builder.config.ts +++ b/packages/desktop/electron-builder.config.ts @@ -125,7 +125,7 @@ function getConfig() { appId, productName: "CoDev Code Beta", protocols: { name: "CoDev Code Beta", schemes: ["opencode"] }, - publish: { provider: "github", owner: "anomalyco", repo: "opencode-beta", channel: "latest" }, + publish: { provider: "github", owner: "quickbeard", repo: "codev-code", channel: "latest" }, rpm: { packageName: "opencode-beta" }, } } @@ -135,7 +135,7 @@ function getConfig() { appId, productName: "CoDev Code", protocols: { name: "CoDev Code", schemes: ["opencode"] }, - publish: { provider: "github", owner: "anomalyco", repo: "opencode", channel: "latest" }, + publish: { provider: "github", owner: "quickbeard", repo: "codev-code", channel: "latest" }, deb: { fpm: [legacyDesktopEntryFpm] }, rpm: { packageName: "opencode", fpm: [legacyDesktopEntryFpm] }, } diff --git a/packages/desktop/src/renderer/index.tsx b/packages/desktop/src/renderer/index.tsx index 05e9b74c2a..c0694d80c3 100644 --- a/packages/desktop/src/renderer/index.tsx +++ b/packages/desktop/src/renderer/index.tsx @@ -255,7 +255,10 @@ const createPlatform = (windowState: DesktopWindowState): Platform => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96-v3.png", + // Same bundled asset the window favicon uses, resolved against the + // renderer origin (oc://renderer/ when packaged) so notifications keep + // their icon offline instead of fetching it from a remote host. + icon: "./favicon-96x96-v3.png", }) notification.onclick = () => { void window.api.showWindow() From 37bfb30abfc8ee5b4632b5da7167ef43bac16a83 Mon Sep 17 00:00:00 2001 From: minhn4 <nguyenm.cuny@gmail.com> Date: Mon, 10 Aug 2026 09:00:06 +0700 Subject: [PATCH 2/2] minor updates --- CHANGELOG.md | 52 ---------------------------------------------------- 1 file changed, 52 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e54b4a81a0..b4cda3e3f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,58 +7,6 @@ file is the human-readable summary of what changed and why. ## Unreleased -### Desktop - -- **The app icon is the CoDev mark** — the Dock, taskbar and installer icons - were still upstream's black "o" square (and the blueprint variants for the - dev/beta channels). They are now the brand-red "C" — the same glyph the - `codev --mini` splash badges with — on a white tile, generated for every size, - `.icns` and `.ico` from a single source of record - (`packages/desktop/icons/icon.svg`) by `bun ./scripts/generate-icons.ts`. The - macOS `.icns` and the Dock PNG use Apple's Big Sur grid (inset plus drop - shadow) so the icon sits correctly next to native apps; all three channels - ship the same mark for now. - -- **The desktop app says CoDev Code, not opencode** — every user-visible string - the app still rendered as "OpenCode" is rebranded: the window title, the crash - and unresponsive dialogs, the updater and CLI-installed messages, the settings - descriptions, the update toasts, the WSL onboarding steps, the server-switcher - dialog, and the app name — in both English and Spanish, with the CLI-command - hint now naming `codev`. (The hosted "OpenCode Zen" / "OpenCode Go" model - services keep their real names, since the app still connects to them.) - Internally, the WSL CLI-management code and the desktop↔web wire values were - renamed to codev as well. - -- **Debug-log export actually collects the CLI's logs** — "Export logs" read from - a stale `opencode` directory while the CLI writes its logs under `codev`, so the - server logs were silently missing from the exported archive. Fixed. - -- **Auto-update looks at this fork, not upstream** — the packaged beta and prod - builds pointed electron-updater at upstream's `anomalyco/opencode-beta` and - `anomalyco/opencode` GitHub releases, so a CoDev Code install would have offered - upstream OpenCode builds as its own updates. Both channels now read - `quickbeard/codev-code`. - -- **Notifications draw their icon from the app** — the desktop notification icon - was fetched from `https://opencode.ai/favicon-96x96-v3.png` on every - notification, which meant no icon offline and a request to a host the app has - no other reason to contact. It now uses the CoDev mark bundled with the app. - -### Desktop / Web UI - -- **No wordmark on the new-session screen, and the composer is centred** — the - screen led with a large watermark of the product wordmark and anchored the prompt - box a quarter of the way down the pane to make room for it. The watermark is gone - and the prompt box now sits in the middle of the pane. - -- **The banner wordmark reads "codev"** — the large wordmark on the home screen, - the error page and shared-session pages still spelled "opencode". It is now the - lowercase codev wordmark, drawn from the same pixel glyphs as the TUI banner and - the landing page: "co" in the brand navy on light themes and the theme foreground - on dark, "dev" always in the brand red, with no drop shadow. The new-session - watermark was rebranded the same way before being dropped, so it comes back - branded if it is ever reinstated. - ## 1.18.4-8 ### Agent