From 3a9bbe2371a4b57ef18af389b7f3be0d21767b64 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Thu, 11 Dec 2025 13:04:55 -0500 Subject: [PATCH 001/743] ci: use Blacksmith runners for Linux and Windows Tauri builds to improve build performance --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1bf79fe97..fb6bd972e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -95,9 +95,9 @@ jobs: target: x86_64-apple-darwin - host: macos-latest target: aarch64-apple-darwin - - host: windows-latest + - host: blacksmith-4vcpu-windows-2025 target: x86_64-pc-windows-msvc - - host: ubuntu-24.04 + - host: blacksmith-4vcpu-ubuntu-2404 target: x86_64-unknown-linux-gnu runs-on: ${{ matrix.settings.host }} steps: From 4c9208fbf189232a74643a7377a5a7bd53ecdc61 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 11 Dec 2025 18:05:35 +0000 Subject: [PATCH 002/743] chore: format code --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- packages/sdk/openapi.json | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index e634c0910..fc474d55c 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -24,4 +24,4 @@ "typescript": "catalog:", "@typescript/native-preview": "catalog:" } -} \ No newline at end of file +} diff --git a/packages/sdk/js/package.json b/packages/sdk/js/package.json index 32eebe63f..42de66a06 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -29,4 +29,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 70dc98973..937ab72e7 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -7333,12 +7333,12 @@ }, "input_undo": { "description": "Undo in input", - "default": "ctrl+-,cmd+z", + "default": "ctrl+-", "type": "string" }, "input_redo": { "description": "Redo in input", - "default": "ctrl+.,cmd+shift+z", + "default": "ctrl+.", "type": "string" }, "input_word_forward": { From 11e6a181adcf446d73176cedbc6765ebc99db61a Mon Sep 17 00:00:00 2001 From: David Hill Date: Thu, 11 Dec 2025 17:52:36 +0000 Subject: [PATCH 003/743] fix: free cta --- packages/console/app/src/component/header.tsx | 13 ++++++++++--- packages/console/app/src/routes/index.css | 5 ++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/console/app/src/component/header.tsx b/packages/console/app/src/component/header.tsx index 088c737ab..2bfc7305e 100644 --- a/packages/console/app/src/component/header.tsx +++ b/packages/console/app/src/component/header.tsx @@ -172,7 +172,14 @@ export function Header(props: { zen?: boolean; hideGetStarted?: boolean }) {
  • - Get started + + + + + Free
  • @@ -187,7 +194,7 @@ export function Header(props: { zen?: boolean; hideGetStarted?: boolean }) { class="nav-toggle" onClick={() => setStore("mobileMenuOpen", !store.mobileMenuOpen)} > - Open menu + Open menu
  • - Get started + Get started for free
  • diff --git a/packages/console/app/src/routes/index.css b/packages/console/app/src/routes/index.css index 9115b29ff..ae329b98b 100644 --- a/packages/console/app/src/routes/index.css +++ b/packages/console/app/src/routes/index.css @@ -251,10 +251,13 @@ body { [data-slot="cta-button"] { background: var(--color-background-strong); color: var(--color-text-inverted); - padding: 8px 16px; + padding: 8px 16px 8px 10px; border-radius: 4px; font-weight: 500; text-decoration: none; + display: flex; + align-items: center; + gap: 8px; @media (max-width: 55rem) { display: none; From 4f855072f24f2f580d4f828bf93e86ffd46c5fca Mon Sep 17 00:00:00 2001 From: David Hill Date: Thu, 11 Dec 2025 18:06:19 +0000 Subject: [PATCH 004/743] wip: avatar colors --- packages/ui/src/styles/theme.css | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/ui/src/styles/theme.css b/packages/ui/src/styles/theme.css index 4dd5fddb0..c5bb27497 100644 --- a/packages/ui/src/styles/theme.css +++ b/packages/ui/src/styles/theme.css @@ -307,6 +307,19 @@ --border-weaker-focus: var(--smoke-light-alpha-6); --button-ghost-hover: var(--smoke-light-alpha-2); --button-ghost-hover2: var(--smoke-light-alpha-3); + --avatar-background-pink: #FEEEF8; + --avatar-background-mint: #E1FBF4 ; + --avatar-background-orange: #FFF1E7 ; + --avatar-background-purple: #F9F1FE; + --avatar-background-cyan: #E7F9FB; + --avatar-background-lime: #EEFADC; + --avatar-text-pink: #CD1D8D; + --avatar-text-mint: #147D6F ; + --avatar-text-orange: #ED5F00 ; + --avatar-text-purple: #8445BC; + --avatar-text-cyan: #0894B3; + --avatar-text-lime: #5D770D; + @media (prefers-color-scheme: dark) { color-scheme: dark; @@ -551,6 +564,18 @@ --border-weaker-focus: var(--smoke-dark-alpha-6); --button-ghost-hover: var(--smoke-dark-alpha-2); --button-ghost-hover2: var(--smoke-dark-alpha-3); + --avatar-background-pink: #501B3F; + --avatar-background-mint: #033A34; + --avatar-background-orange: #5F2A06; + --avatar-background-purple: #432155; + --avatar-background-cyan: #0F3058; + --avatar-background-lime: #2B3711; + --avatar-text-pink: #E34BA9; + --avatar-text-mint: #95F3D9 ; + --avatar-text-orange: #FF802B ; + --avatar-text-purple: #9D5BD2; + --avatar-text-cyan: #369EFF; + --avatar-text-lime: #C4F042; } } From 21cf3a7c1bb0532ec7e5def15540a2d940139c7e Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Thu, 11 Dec 2025 13:11:36 -0500 Subject: [PATCH 005/743] ci --- .github/workflows/publish.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index fb6bd972e..aa5637a8d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -85,7 +85,6 @@ jobs: publish-tauri: needs: publish - if: inputs.bump || inputs.version continue-on-error: true strategy: fail-fast: false From 55ea20de84fa77be02b7f4f702372c959692ef98 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 11 Dec 2025 18:12:25 +0000 Subject: [PATCH 006/743] chore: format code --- packages/console/app/src/component/header.tsx | 11 +++-- packages/ui/src/styles/theme.css | 47 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/console/app/src/component/header.tsx b/packages/console/app/src/component/header.tsx index 2bfc7305e..91a520e51 100644 --- a/packages/console/app/src/component/header.tsx +++ b/packages/console/app/src/component/header.tsx @@ -172,13 +172,14 @@ export function Header(props: { zen?: boolean; hideGetStarted?: boolean }) {
  • - + + stroke="currentColor" + stroke-width="1.5" + stroke-linecap="square" + /> - Free
  • @@ -194,7 +195,7 @@ export function Header(props: { zen?: boolean; hideGetStarted?: boolean }) { class="nav-toggle" onClick={() => setStore("mobileMenuOpen", !store.mobileMenuOpen)} > - Open menu + Open menu Date: Thu, 11 Dec 2025 13:16:41 -0500 Subject: [PATCH 007/743] ci: install libglib2.0-dev on Blacksmith Linux runners to fix missing glib-2.0 system library error --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index aa5637a8d..294385a09 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -132,7 +132,7 @@ jobs: if: startsWith(matrix.settings.host, 'ubuntu') run: | sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libglib2.0-dev - name: install Rust stable uses: dtolnay/rust-toolchain@stable From 80e04be84fafd7e504a6f2fdfb08cb4961c93d0a Mon Sep 17 00:00:00 2001 From: Sebastian Herrlinger Date: Thu, 11 Dec 2025 19:18:27 +0100 Subject: [PATCH 008/743] fix super modifier parsing --- .../cli/cmd/tui/component/dialog-model.tsx | 2 +- .../cli/cmd/tui/component/prompt/index.tsx | 4 +- .../src/cli/cmd/tui/context/keybind.tsx | 18 +-- packages/opencode/src/config/config.ts | 4 +- packages/opencode/src/util/keybind.ts | 37 +++++-- packages/opencode/test/keybind.test.ts | 104 ++++++++++++++++++ packages/web/src/content/docs/keybinds.mdx | 4 +- 7 files changed, 146 insertions(+), 27 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx index 0ea4cbd68..38fd57458 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx @@ -199,7 +199,7 @@ export function DialogModel(props: { providerID?: string }) { ) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index a5b6051ed..2e1ec3e42 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -10,6 +10,7 @@ import { useSync } from "@tui/context/sync" import { Identifier } from "@/id/id" import { createStore, produce } from "solid-js/store" import { useKeybind } from "@tui/context/keybind" +import { Keybind } from "@/util/keybind" import { usePromptHistory, type PromptInfo } from "./history" import { type AutocompleteRef, Autocomplete } from "./autocomplete" import { useCommandDialog } from "../dialog-command" @@ -85,7 +86,7 @@ const TEXTAREA_ACTIONS = [ ] as const function mapTextareaKeybindings( - keybinds: Record, + keybinds: Record, action: (typeof TEXTAREA_ACTIONS)[number], ): KeyBinding[] { const configKey = `input_${action.replace(/-/g, "_")}` @@ -96,6 +97,7 @@ function mapTextareaKeybindings( ctrl: binding.ctrl || undefined, meta: binding.meta || undefined, shift: binding.shift || undefined, + super: binding.super || undefined, action, })) } diff --git a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx b/packages/opencode/src/cli/cmd/tui/context/keybind.tsx index 50a29d2c5..4c82e594c 100644 --- a/packages/opencode/src/cli/cmd/tui/context/keybind.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/keybind.tsx @@ -73,21 +73,11 @@ export const { use: useKeybind, provider: KeybindProvider } = createSimpleContex return store.leader }, parse(evt: ParsedKey): Keybind.Info { - if (evt.name === "\x1F") - return { - ctrl: true, - name: "_", - shift: false, - leader: false, - meta: false, - } - return { - ctrl: evt.ctrl, - name: evt.name, - shift: evt.shift, - leader: store.leader, - meta: evt.meta, + // Handle special case for Ctrl+Underscore (represented as \x1F) + if (evt.name === "\x1F") { + return Keybind.fromParsedKey({ ...evt, name: "_", ctrl: true }, store.leader) } + return Keybind.fromParsedKey(evt, store.leader) }, match(key: keyof KeybindsConfig, evt: ParsedKey) { const keybind = keybinds()[key] diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 25e9589f8..be1949c3b 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -512,8 +512,8 @@ export namespace Config { input_delete_to_line_start: z.string().optional().default("ctrl+u").describe("Delete to start of line in input"), input_backspace: z.string().optional().default("backspace,shift+backspace").describe("Backspace in input"), input_delete: z.string().optional().default("ctrl+d,delete,shift+delete").describe("Delete character in input"), - input_undo: z.string().optional().default("ctrl+-").describe("Undo in input"), - input_redo: z.string().optional().default("ctrl+.").describe("Redo in input"), + input_undo: z.string().optional().default("ctrl+-,super+z").describe("Undo in input"), + input_redo: z.string().optional().default("ctrl+.,super+shift+z").describe("Redo in input"), input_word_forward: z .string() .optional() diff --git a/packages/opencode/src/util/keybind.ts b/packages/opencode/src/util/keybind.ts index 5beaf9aab..69fef28f0 100644 --- a/packages/opencode/src/util/keybind.ts +++ b/packages/opencode/src/util/keybind.ts @@ -1,16 +1,35 @@ import { isDeepEqual } from "remeda" +import type { ParsedKey } from "@opentui/core" export namespace Keybind { - export type Info = { - ctrl: boolean - meta: boolean - shift: boolean - leader: boolean - name: string + /** + * Keybind info derived from OpenTUI's ParsedKey with our custom `leader` field. + * This ensures type compatibility and catches missing fields at compile time. + */ + export type Info = Pick & { + leader: boolean // our custom field } export function match(a: Info, b: Info): boolean { - return isDeepEqual(a, b) + // Normalize super field (undefined and false are equivalent) + const normalizedA = { ...a, super: a.super ?? false } + const normalizedB = { ...b, super: b.super ?? false } + return isDeepEqual(normalizedA, normalizedB) + } + + /** + * Convert OpenTUI's ParsedKey to our Keybind.Info format. + * This helper ensures all required fields are present and avoids manual object creation. + */ + export function fromParsedKey(key: ParsedKey, leader = false): Info { + return { + name: key.name, + ctrl: key.ctrl, + meta: key.meta, + shift: key.shift, + super: key.super ?? false, + leader, + } } export function toString(info: Info): string { @@ -18,6 +37,7 @@ export namespace Keybind { if (info.ctrl) parts.push("ctrl") if (info.meta) parts.push("alt") + if (info.super) parts.push("super") if (info.shift) parts.push("shift") if (info.name) { if (info.name === "delete") parts.push("del") @@ -58,6 +78,9 @@ export namespace Keybind { case "option": info.meta = true break + case "super": + info.super = true + break case "shift": info.shift = true break diff --git a/packages/opencode/test/keybind.test.ts b/packages/opencode/test/keybind.test.ts index c09d6cbd3..4ca1f1697 100644 --- a/packages/opencode/test/keybind.test.ts +++ b/packages/opencode/test/keybind.test.ts @@ -68,6 +68,31 @@ describe("Keybind.toString", () => { const info: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: true, name: "" } expect(Keybind.toString(info)).toBe("") }) + + test("should convert super modifier to string", () => { + const info: Keybind.Info = { ctrl: false, meta: false, shift: false, super: true, leader: false, name: "z" } + expect(Keybind.toString(info)).toBe("super+z") + }) + + test("should convert super+shift modifier to string", () => { + const info: Keybind.Info = { ctrl: false, meta: false, shift: true, super: true, leader: false, name: "z" } + expect(Keybind.toString(info)).toBe("super+shift+z") + }) + + test("should handle super with ctrl modifier", () => { + const info: Keybind.Info = { ctrl: true, meta: false, shift: false, super: true, leader: false, name: "a" } + expect(Keybind.toString(info)).toBe("ctrl+super+a") + }) + + test("should handle super with all modifiers", () => { + const info: Keybind.Info = { ctrl: true, meta: true, shift: true, super: true, leader: false, name: "x" } + expect(Keybind.toString(info)).toBe("ctrl+alt+super+shift+x") + }) + + test("should handle undefined super field (omitted)", () => { + const info: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "c" } + expect(Keybind.toString(info)).toBe("ctrl+c") + }) }) describe("Keybind.match", () => { @@ -118,6 +143,36 @@ describe("Keybind.match", () => { const b: Keybind.Info = { ctrl: false, meta: false, shift: false, leader: false, name: "a" } expect(Keybind.match(a, b)).toBe(true) }) + + test("should match super modifier keybinds", () => { + const a: Keybind.Info = { ctrl: false, meta: false, shift: false, super: true, leader: false, name: "z" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: false, super: true, leader: false, name: "z" } + expect(Keybind.match(a, b)).toBe(true) + }) + + test("should not match super vs non-super", () => { + const a: Keybind.Info = { ctrl: false, meta: false, shift: false, super: true, leader: false, name: "z" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: false, super: false, leader: false, name: "z" } + expect(Keybind.match(a, b)).toBe(false) + }) + + test("should match undefined super with false super", () => { + const a: Keybind.Info = { ctrl: true, meta: false, shift: false, leader: false, name: "c" } + const b: Keybind.Info = { ctrl: true, meta: false, shift: false, super: false, leader: false, name: "c" } + expect(Keybind.match(a, b)).toBe(true) + }) + + test("should match super+shift combination", () => { + const a: Keybind.Info = { ctrl: false, meta: false, shift: true, super: true, leader: false, name: "z" } + const b: Keybind.Info = { ctrl: false, meta: false, shift: true, super: true, leader: false, name: "z" } + expect(Keybind.match(a, b)).toBe(true) + }) + + test("should not match when only super differs", () => { + const a: Keybind.Info = { ctrl: true, meta: true, shift: true, super: true, leader: false, name: "a" } + const b: Keybind.Info = { ctrl: true, meta: true, shift: true, super: false, leader: false, name: "a" } + expect(Keybind.match(a, b)).toBe(false) + }) }) describe("Keybind.parse", () => { @@ -314,4 +369,53 @@ describe("Keybind.parse", () => { }, ]) }) + + test("should parse super modifier", () => { + const result = Keybind.parse("super+z") + expect(result).toEqual([ + { + ctrl: false, + meta: false, + shift: false, + super: true, + leader: false, + name: "z", + }, + ]) + }) + + test("should parse super with shift modifier", () => { + const result = Keybind.parse("super+shift+z") + expect(result).toEqual([ + { + ctrl: false, + meta: false, + shift: true, + super: true, + leader: false, + name: "z", + }, + ]) + }) + + test("should parse multiple keybinds with super", () => { + const result = Keybind.parse("ctrl+-,super+z") + expect(result).toEqual([ + { + ctrl: true, + meta: false, + shift: false, + leader: false, + name: "-", + }, + { + ctrl: false, + meta: false, + shift: false, + super: true, + leader: false, + name: "z", + }, + ]) + }) }) diff --git a/packages/web/src/content/docs/keybinds.mdx b/packages/web/src/content/docs/keybinds.mdx index 273ecf524..d9e99cd03 100644 --- a/packages/web/src/content/docs/keybinds.mdx +++ b/packages/web/src/content/docs/keybinds.mdx @@ -73,8 +73,8 @@ OpenCode has a list of keybinds that you can customize through the OpenCode conf "input_delete_to_line_start": "ctrl+u", "input_backspace": "backspace,shift+backspace", "input_delete": "ctrl+d,delete,shift+delete", - "input_undo": "ctrl+-,cmd+z", - "input_redo": "ctrl+.,cmd+shift+z", + "input_undo": "ctrl+-,super+z", + "input_redo": "ctrl+.,super+shift+z", "input_word_forward": "alt+f,alt+right,ctrl+right", "input_word_backward": "alt+b,alt+left,ctrl+left", "input_select_word_forward": "alt+shift+f,alt+shift+right", From c11bb440e64d8cb790f6fce0bf4432bbe563c06d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 11 Dec 2025 18:21:10 +0000 Subject: [PATCH 009/743] chore: format code --- packages/sdk/openapi.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 937ab72e7..7c7c216f5 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -7333,12 +7333,12 @@ }, "input_undo": { "description": "Undo in input", - "default": "ctrl+-", + "default": "ctrl+-,super+z", "type": "string" }, "input_redo": { "description": "Redo in input", - "default": "ctrl+.", + "default": "ctrl+.,super+shift+z", "type": "string" }, "input_word_forward": { From 9d73096db0ea2eb9e11c48b287855574651f33af Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Thu, 11 Dec 2025 13:27:21 -0500 Subject: [PATCH 010/743] ci: fix Ubuntu host detection in Tauri build workflow --- .github/workflows/publish.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 294385a09..1e5f56ba6 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -129,10 +129,10 @@ jobs: - uses: ./.github/actions/setup-bun - name: install dependencies (ubuntu only) - if: startsWith(matrix.settings.host, 'ubuntu') + if: contains(matrix.settings.host, 'ubuntu') run: | sudo apt-get update - sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libglib2.0-dev + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - name: install Rust stable uses: dtolnay/rust-toolchain@stable @@ -161,7 +161,7 @@ jobs: # Fixes AppImage build issues, can be removed when https://github.com/tauri-apps/tauri/pull/12491 is released - run: cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage - if: startsWith(matrix.settings.host, 'ubuntu') + if: contains(matrix.settings.host, 'ubuntu') - name: Build and upload artifacts uses: tauri-apps/tauri-action@390cbe447412ced1303d35abe75287949e43437a @@ -179,7 +179,7 @@ jobs: with: projectPath: packages/tauri uploadWorkflowArtifacts: true - tauriScript: ${{ (startsWith(matrix.settings.host, 'ubuntu') && 'cargo tauri') || '' }} + tauriScript: ${{ (contains(matrix.settings.host, 'ubuntu') && 'cargo tauri') || '' }} args: --target ${{ matrix.settings.target }} updaterJsonPreferNsis: true releaseId: ${{ needs.publish.outputs.releaseId }} From 521fbb93cd41e60b1afcbba2ce4d940543c10a51 Mon Sep 17 00:00:00 2001 From: David Hill Date: Thu, 11 Dec 2025 19:33:55 +0000 Subject: [PATCH 011/743] wip: lander updates --- packages/console/app/src/component/header.tsx | 13 ------------- packages/console/app/src/routes/index.tsx | 15 +-------------- 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/packages/console/app/src/component/header.tsx b/packages/console/app/src/component/header.tsx index 2bfc7305e..a2812fee9 100644 --- a/packages/console/app/src/component/header.tsx +++ b/packages/console/app/src/component/header.tsx @@ -169,20 +169,7 @@ export function Header(props: { zen?: boolean; hideGetStarted?: boolean }) { - -
  • - - - - - Free - -
  • -