From 03d7467ea268f2f0f8d99f48ea1522741014b4bf Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sat, 17 Jan 2026 20:52:21 -0600 Subject: [PATCH 001/426] test(app): initial e2e test setup --- .github/workflows/test.yml | 63 +++++++++++++++++++++++ bun.lock | 10 ++++ package.json | 1 + packages/app/.gitignore | 2 + packages/app/README.md | 15 ++++++ packages/app/e2e/home.spec.ts | 6 +++ packages/app/package.json | 7 ++- packages/app/playwright.config.ts | 43 ++++++++++++++++ packages/opencode/script/seed-e2e.ts | 50 ++++++++++++++++++ packages/opencode/src/share/share-next.ts | 6 +++ packages/opencode/src/share/share.ts | 5 ++ 11 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 packages/app/e2e/home.spec.ts create mode 100644 packages/app/playwright.config.ts create mode 100644 packages/opencode/script/seed-e2e.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c39710bee8f..98eac1dab2f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,6 +18,52 @@ jobs: - name: Setup Bun uses: ./.github/actions/setup-bun + - name: Install Playwright browsers + run: bun --cwd packages/app x playwright install --with-deps + + - name: Seed opencode data + run: bun --cwd packages/opencode script/seed-e2e.ts + env: + MODELS_DEV_API_JSON: ${{ github.workspace }}/packages/opencode/test/tool/fixtures/models-api.json + OPENCODE_DISABLE_MODELS_FETCH: "true" + OPENCODE_DISABLE_SHARE: "true" + OPENCODE_DISABLE_LSP_DOWNLOAD: "true" + OPENCODE_DISABLE_DEFAULT_PLUGINS: "true" + OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "true" + OPENCODE_TEST_HOME: ${{ runner.temp }}/opencode-e2e/home + XDG_DATA_HOME: ${{ runner.temp }}/opencode-e2e/share + XDG_CACHE_HOME: ${{ runner.temp }}/opencode-e2e/cache + XDG_CONFIG_HOME: ${{ runner.temp }}/opencode-e2e/config + XDG_STATE_HOME: ${{ runner.temp }}/opencode-e2e/state + OPENCODE_E2E_PROJECT_DIR: ${{ github.workspace }} + OPENCODE_E2E_SESSION_TITLE: "E2E Session" + OPENCODE_E2E_MESSAGE: "Seeded for UI e2e" + OPENCODE_E2E_MODEL: "opencode/gpt-5-nano" + + - name: Run opencode server + run: bun --cwd packages/opencode run dev -- --print-logs --log-level WARN serve --port 4096 --hostname 0.0.0.0 & + env: + MODELS_DEV_API_JSON: ${{ github.workspace }}/packages/opencode/test/tool/fixtures/models-api.json + OPENCODE_DISABLE_MODELS_FETCH: "true" + OPENCODE_DISABLE_SHARE: "true" + OPENCODE_DISABLE_LSP_DOWNLOAD: "true" + OPENCODE_DISABLE_DEFAULT_PLUGINS: "true" + OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "true" + OPENCODE_TEST_HOME: ${{ runner.temp }}/opencode-e2e/home + XDG_DATA_HOME: ${{ runner.temp }}/opencode-e2e/share + XDG_CACHE_HOME: ${{ runner.temp }}/opencode-e2e/cache + XDG_CONFIG_HOME: ${{ runner.temp }}/opencode-e2e/config + XDG_STATE_HOME: ${{ runner.temp }}/opencode-e2e/state + OPENCODE_CLIENT: "app" + + - name: Wait for opencode server + run: | + for i in {1..60}; do + curl -fsS "http://localhost:4096/global/health" > /dev/null && exit 0 + sleep 1 + done + exit 1 + - name: run run: | git config --global user.email "bot@opencode.ai" @@ -26,3 +72,20 @@ jobs: bun turbo test env: CI: true + MODELS_DEV_API_JSON: ${{ github.workspace }}/packages/opencode/test/tool/fixtures/models-api.json + OPENCODE_DISABLE_MODELS_FETCH: "true" + OPENCODE_DISABLE_SHARE: "true" + OPENCODE_DISABLE_LSP_DOWNLOAD: "true" + OPENCODE_DISABLE_DEFAULT_PLUGINS: "true" + OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "true" + OPENCODE_TEST_HOME: ${{ runner.temp }}/opencode-e2e/home + XDG_DATA_HOME: ${{ runner.temp }}/opencode-e2e/share + XDG_CACHE_HOME: ${{ runner.temp }}/opencode-e2e/cache + XDG_CONFIG_HOME: ${{ runner.temp }}/opencode-e2e/config + XDG_STATE_HOME: ${{ runner.temp }}/opencode-e2e/state + PLAYWRIGHT_SERVER_HOST: "localhost" + PLAYWRIGHT_SERVER_PORT: "4096" + VITE_OPENCODE_SERVER_HOST: "localhost" + VITE_OPENCODE_SERVER_PORT: "4096" + OPENCODE_CLIENT: "app" + timeout-minutes: 30 diff --git a/bun.lock b/bun.lock index a9cabb31114..e5892a7745d 100644 --- a/bun.lock +++ b/bun.lock @@ -56,6 +56,7 @@ }, "devDependencies": { "@happy-dom/global-registrator": "20.0.11", + "@playwright/test": "1.57.0", "@tailwindcss/vite": "catalog:", "@tsconfig/bun": "1.0.9", "@types/bun": "catalog:", @@ -502,6 +503,7 @@ "@octokit/rest": "22.0.0", "@openauthjs/openauth": "0.0.0-20250322224806", "@pierre/diffs": "1.0.2", + "@playwright/test": "1.51.0", "@solid-primitives/storage": "4.3.3", "@solidjs/meta": "0.29.4", "@solidjs/router": "0.15.4", @@ -1355,6 +1357,8 @@ "@planetscale/database": ["@planetscale/database@1.19.0", "", {}, "sha512-Tv4jcFUFAFjOWrGSio49H6R2ijALv0ZzVBfJKIdm+kl9X046Fh4LLawrF9OMsglVbK6ukqMJsUCeucGAFTBcMA=="], + "@playwright/test": ["@playwright/test@1.57.0", "", { "dependencies": { "playwright": "1.57.0" }, "bin": { "playwright": "cli.js" } }, "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA=="], + "@poppinss/colors": ["@poppinss/colors@4.1.5", "", { "dependencies": { "kleur": "^4.1.5" } }, "sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw=="], "@poppinss/dumper": ["@poppinss/dumper@0.6.5", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw=="], @@ -3291,6 +3295,10 @@ "planck": ["planck@1.4.2", "", { "peerDependencies": { "stage-js": "^1.0.0-alpha.12" } }, "sha512-mNbhnV3g8X2rwGxzcesjmN8BDA6qfXgQxXVMkWau9MCRlQY0RLNEkyHlVp6yFy/X6qrzAXyNONCnZ1cGDLrNew=="], + "playwright": ["playwright@1.57.0", "", { "dependencies": { "playwright-core": "1.57.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw=="], + + "playwright-core": ["playwright-core@1.57.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ=="], + "pngjs": ["pngjs@7.0.0", "", {}, "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], @@ -4427,6 +4435,8 @@ "pkg-up/find-up": ["find-up@3.0.0", "", { "dependencies": { "locate-path": "^3.0.0" } }, "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="], + "playwright/fsevents": ["fsevents@2.3.2", "", { "os": "darwin" }, "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="], + "postcss-load-config/lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], "prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], diff --git a/package.json b/package.json index f1d6c4fead1..ca9602174a2 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "luxon": "3.6.1", "marked": "17.0.1", "marked-shiki": "1.2.1", + "@playwright/test": "1.51.0", "typescript": "5.8.2", "@typescript/native-preview": "7.0.0-dev.20251207.1", "zod": "4.1.8", diff --git a/packages/app/.gitignore b/packages/app/.gitignore index 4a20d55a70d..d699efb38d2 100644 --- a/packages/app/.gitignore +++ b/packages/app/.gitignore @@ -1 +1,3 @@ src/assets/theme.css +e2e/test-results +e2e/playwright-report diff --git a/packages/app/README.md b/packages/app/README.md index bd10e6c8ddf..42a68815090 100644 --- a/packages/app/README.md +++ b/packages/app/README.md @@ -29,6 +29,21 @@ It correctly bundles Solid in production mode and optimizes the build for the be The build is minified and the filenames include the hashes.
Your app is ready to be deployed! +## E2E Testing + +The Playwright runner expects the app already running at `http://localhost:3000`. + +```bash +bun add -D @playwright/test +bunx playwright install +bun run test:e2e +``` + +Environment options: + +- `PLAYWRIGHT_BASE_URL` (default: `http://localhost:3000`) +- `PLAYWRIGHT_PORT` (default: `3000`) + ## Deployment You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.) diff --git a/packages/app/e2e/home.spec.ts b/packages/app/e2e/home.spec.ts new file mode 100644 index 00000000000..ff57923d58c --- /dev/null +++ b/packages/app/e2e/home.spec.ts @@ -0,0 +1,6 @@ +import { test, expect } from "@playwright/test" + +test("home shows recent projects header", async ({ page }) => { + await page.goto("/") + await expect(page.getByText("Recent projects")).toBeVisible() +}) diff --git a/packages/app/package.json b/packages/app/package.json index 38d9a25f50e..2a754c96735 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -12,11 +12,16 @@ "start": "vite", "dev": "vite", "build": "vite build", - "serve": "vite preview" + "serve": "vite preview", + "test": "playwright test", + "test:e2e": "playwright test", + "test:e2e:ui": "playwright test --ui", + "test:e2e:report": "playwright show-report e2e/playwright-report" }, "license": "MIT", "devDependencies": { "@happy-dom/global-registrator": "20.0.11", + "@playwright/test": "1.57.0", "@tailwindcss/vite": "catalog:", "@tsconfig/bun": "1.0.9", "@types/bun": "catalog:", diff --git a/packages/app/playwright.config.ts b/packages/app/playwright.config.ts new file mode 100644 index 00000000000..10819e69ffe --- /dev/null +++ b/packages/app/playwright.config.ts @@ -0,0 +1,43 @@ +import { defineConfig, devices } from "@playwright/test" + +const port = Number(process.env.PLAYWRIGHT_PORT ?? 3000) +const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://localhost:${port}` +const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" +const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" +const command = `bun run dev -- --host 0.0.0.0 --port ${port}` +const reuse = !process.env.CI + +export default defineConfig({ + testDir: "./e2e", + outputDir: "./e2e/test-results", + timeout: 60_000, + expect: { + timeout: 10_000, + }, + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + reporter: [["html", { outputFolder: "e2e/playwright-report", open: "never" }], ["line"]], + webServer: { + command, + url: baseURL, + reuseExistingServer: reuse, + timeout: 120_000, + env: { + VITE_OPENCODE_SERVER_HOST: serverHost, + VITE_OPENCODE_SERVER_PORT: serverPort, + }, + }, + use: { + baseURL, + trace: "on-first-retry", + screenshot: "only-on-failure", + video: "retain-on-failure", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], +}) diff --git a/packages/opencode/script/seed-e2e.ts b/packages/opencode/script/seed-e2e.ts new file mode 100644 index 00000000000..ba2155cb692 --- /dev/null +++ b/packages/opencode/script/seed-e2e.ts @@ -0,0 +1,50 @@ +const dir = process.env.OPENCODE_E2E_PROJECT_DIR ?? process.cwd() +const title = process.env.OPENCODE_E2E_SESSION_TITLE ?? "E2E Session" +const text = process.env.OPENCODE_E2E_MESSAGE ?? "Seeded for UI e2e" +const model = process.env.OPENCODE_E2E_MODEL ?? "opencode/gpt-5-nano" +const parts = model.split("/") +const providerID = parts[0] ?? "opencode" +const modelID = parts[1] ?? "gpt-5-nano" +const now = Date.now() + +const seed = async () => { + const { Instance } = await import("../src/project/instance") + const { InstanceBootstrap } = await import("../src/project/bootstrap") + const { Session } = await import("../src/session") + const { Identifier } = await import("../src/id/id") + const { Project } = await import("../src/project/project") + + await Instance.provide({ + directory: dir, + init: InstanceBootstrap, + fn: async () => { + const session = await Session.create({ title }) + const messageID = Identifier.descending("message") + const partID = Identifier.descending("part") + const message = { + id: messageID, + sessionID: session.id, + role: "user" as const, + time: { created: now }, + agent: "build", + model: { + providerID, + modelID, + }, + } + const part = { + id: partID, + sessionID: session.id, + messageID, + type: "text" as const, + text, + time: { start: now }, + } + await Session.updateMessage(message) + await Session.updatePart(part) + await Project.update({ projectID: Instance.project.id, name: "E2E Project" }) + }, + }) +} + +await seed() diff --git a/packages/opencode/src/share/share-next.ts b/packages/opencode/src/share/share-next.ts index 95271f8c827..dddce95cb4f 100644 --- a/packages/opencode/src/share/share-next.ts +++ b/packages/opencode/src/share/share-next.ts @@ -15,7 +15,10 @@ export namespace ShareNext { return Config.get().then((x) => x.enterprise?.url ?? "https://opncd.ai") } + const disabled = process.env["OPENCODE_DISABLE_SHARE"] === "true" || process.env["OPENCODE_DISABLE_SHARE"] === "1" + export async function init() { + if (disabled) return Bus.subscribe(Session.Event.Updated, async (evt) => { await sync(evt.properties.info.id, [ { @@ -63,6 +66,7 @@ export namespace ShareNext { } export async function create(sessionID: string) { + if (disabled) return { id: "", url: "", secret: "" } log.info("creating share", { sessionID }) const result = await fetch(`${await url()}/api/share`, { method: "POST", @@ -110,6 +114,7 @@ export namespace ShareNext { const queue = new Map }>() async function sync(sessionID: string, data: Data[]) { + if (disabled) return const existing = queue.get(sessionID) if (existing) { for (const item of data) { @@ -145,6 +150,7 @@ export namespace ShareNext { } export async function remove(sessionID: string) { + if (disabled) return log.info("removing share", { sessionID }) const share = await get(sessionID) if (!share) return diff --git a/packages/opencode/src/share/share.ts b/packages/opencode/src/share/share.ts index 1006b23d556..f7bf4b3fa52 100644 --- a/packages/opencode/src/share/share.ts +++ b/packages/opencode/src/share/share.ts @@ -11,6 +11,7 @@ export namespace Share { const pending = new Map() export async function sync(key: string, content: any) { + if (disabled) return const [root, ...splits] = key.split("/") if (root !== "session") return const [sub, sessionID] = splits @@ -69,7 +70,10 @@ export namespace Share { process.env["OPENCODE_API"] ?? (Installation.isPreview() || Installation.isLocal() ? "https://api.dev.opencode.ai" : "https://api.opencode.ai") + const disabled = process.env["OPENCODE_DISABLE_SHARE"] === "true" || process.env["OPENCODE_DISABLE_SHARE"] === "1" + export async function create(sessionID: string) { + if (disabled) return { url: "", secret: "" } return fetch(`${URL}/share_create`, { method: "POST", body: JSON.stringify({ sessionID: sessionID }), @@ -79,6 +83,7 @@ export namespace Share { } export async function remove(sessionID: string, secret: string) { + if (disabled) return {} return fetch(`${URL}/share_delete`, { method: "POST", body: JSON.stringify({ sessionID, secret }), From 19d15ca4dfb4eaad34e3b9e0a3b8f9e206d094c3 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 18 Jan 2026 05:15:34 -0600 Subject: [PATCH 002/426] test(app): more e2e tests --- packages/app/e2e/home.spec.ts | 22 ++++++++++++++++-- packages/app/e2e/session.spec.ts | 38 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 packages/app/e2e/session.spec.ts diff --git a/packages/app/e2e/home.spec.ts b/packages/app/e2e/home.spec.ts index ff57923d58c..29a07060932 100644 --- a/packages/app/e2e/home.spec.ts +++ b/packages/app/e2e/home.spec.ts @@ -1,6 +1,24 @@ import { test, expect } from "@playwright/test" -test("home shows recent projects header", async ({ page }) => { +test("home renders and shows an open project entrypoint", async ({ page }) => { await page.goto("/") - await expect(page.getByText("Recent projects")).toBeVisible() + + await expect(page.getByText("Recent projects").or(page.getByText("No recent projects"))).toBeVisible() + await expect(page.getByRole("button", { name: "Open project" }).first()).toBeVisible() +}) + +test("server picker dialog opens from home", async ({ page }) => { + const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" + const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" + const name = `${host}:${port}` + + await page.goto("/") + + const trigger = page.getByRole("button", { name }) + await expect(trigger).toBeVisible() + await trigger.click() + + const dialog = page.getByRole("dialog", { name: "Servers" }) + await expect(dialog).toBeVisible() + await expect(dialog.getByPlaceholder("Search servers")).toBeVisible() }) diff --git a/packages/app/e2e/session.spec.ts b/packages/app/e2e/session.spec.ts new file mode 100644 index 00000000000..e1ca12449bb --- /dev/null +++ b/packages/app/e2e/session.spec.ts @@ -0,0 +1,38 @@ +import { test, expect } from "@playwright/test" +import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" +import { base64Encode } from "@opencode-ai/util/encode" + +const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" +const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" +const url = `http://${host}:${port}` + +async function getWorktree() { + const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) + const result = await sdk.path.get() + const data = result.data + if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) + return data.worktree +} + +test("can open an existing session and type into the prompt", async ({ page }) => { + const directory = await getWorktree() + const sdk = createOpencodeClient({ baseUrl: url, directory, throwOnError: true }) + const title = `e2e smoke ${Date.now()}` + const created = await sdk.session.create({ title }).then((r) => r.data) + + if (!created?.id) throw new Error("Session create did not return an id") + const sessionID = created.id + + try { + await page.goto(`/${base64Encode(directory)}/session/${sessionID}`) + + const prompt = page.locator('[data-component="prompt-input"]') + await expect(prompt).toBeVisible() + + await prompt.click() + await page.keyboard.type("hello from e2e") + await expect(prompt).toContainText("hello from e2e") + } finally { + await sdk.session.delete({ sessionID }).catch(() => undefined) + } +}) From 91a708b12e3dc0219517aa93dbd30ef2a4aea6c8 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 18 Jan 2026 05:36:02 -0600 Subject: [PATCH 003/426] test(app): more e2e tests --- packages/app/e2e/navigation.spec.ts | 24 ++++++++++++++++++++ packages/app/e2e/palette.spec.ts | 34 +++++++++++++++++++++++++++++ packages/app/e2e/terminal.spec.ts | 33 ++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 packages/app/e2e/navigation.spec.ts create mode 100644 packages/app/e2e/palette.spec.ts create mode 100644 packages/app/e2e/terminal.spec.ts diff --git a/packages/app/e2e/navigation.spec.ts b/packages/app/e2e/navigation.spec.ts new file mode 100644 index 00000000000..2783c5222cc --- /dev/null +++ b/packages/app/e2e/navigation.spec.ts @@ -0,0 +1,24 @@ +import { test, expect } from "@playwright/test" +import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" +import { base64Encode } from "@opencode-ai/util/encode" + +const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" +const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" +const url = `http://${host}:${port}` + +async function getWorktree() { + const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) + const result = await sdk.path.get() + const data = result.data + if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) + return data.worktree +} + +test("project route redirects to /session", async ({ page }) => { + const directory = await getWorktree() + const slug = base64Encode(directory) + + await page.goto(`/${slug}`) + await expect(page).toHaveURL(new RegExp(`/${slug}/session`)) + await expect(page.locator('[data-component="prompt-input"]')).toBeVisible() +}) diff --git a/packages/app/e2e/palette.spec.ts b/packages/app/e2e/palette.spec.ts new file mode 100644 index 00000000000..06294562945 --- /dev/null +++ b/packages/app/e2e/palette.spec.ts @@ -0,0 +1,34 @@ +import { test, expect } from "@playwright/test" +import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" +import { base64Encode } from "@opencode-ai/util/encode" + +const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" +const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" +const url = `http://${host}:${port}` + +async function getWorktree() { + const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) + const result = await sdk.path.get() + const data = result.data + if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) + return data.worktree +} + +const mod = process.platform === "darwin" ? "Meta" : "Control" + +test("search palette opens and closes", async ({ page }) => { + const directory = await getWorktree() + const slug = base64Encode(directory) + + await page.goto(`/${slug}/session`) + await expect(page.locator('[data-component="prompt-input"]')).toBeVisible() + + await page.keyboard.press(`${mod}+P`) + + const dialog = page.getByRole("dialog") + await expect(dialog).toBeVisible() + await expect(dialog.getByRole("textbox").first()).toBeVisible() + + await page.keyboard.press("Escape") + await expect(dialog).toHaveCount(0) +}) diff --git a/packages/app/e2e/terminal.spec.ts b/packages/app/e2e/terminal.spec.ts new file mode 100644 index 00000000000..9bb9947fe31 --- /dev/null +++ b/packages/app/e2e/terminal.spec.ts @@ -0,0 +1,33 @@ +import { test, expect } from "@playwright/test" +import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" +import { base64Encode } from "@opencode-ai/util/encode" + +const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" +const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" +const url = `http://${host}:${port}` + +async function getWorktree() { + const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) + const result = await sdk.path.get() + const data = result.data + if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) + return data.worktree +} + +test("terminal panel can be toggled", async ({ page }) => { + const directory = await getWorktree() + const slug = base64Encode(directory) + + await page.goto(`/${slug}/session`) + await expect(page.locator('[data-component="prompt-input"]')).toBeVisible() + + const terminal = page.locator('[data-component="terminal"]') + const initiallyOpen = await terminal.isVisible() + if (initiallyOpen) { + await page.keyboard.press("Control+Backquote") + await expect(terminal).toHaveCount(0) + } + + await page.keyboard.press("Control+Backquote") + await expect(terminal).toBeVisible() +}) From 7621c5cafbc5f853806bf8a9c95ebaa727bda15f Mon Sep 17 00:00:00 2001 From: Github Action Date: Sun, 18 Jan 2026 11:36:58 +0000 Subject: [PATCH 004/426] Update flake.lock --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 5ef276f0a08..87f95fb3eb7 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1768302833, - "narHash": "sha256-h5bRFy9bco+8QcK7rGoOiqMxMbmn21moTACofNLRMP4=", + "lastModified": 1768569498, + "narHash": "sha256-bB6Nt99Cj8Nu5nIUq0GLmpiErIT5KFshMQJGMZwgqUo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "61db79b0c6b838d9894923920b612048e1201926", + "rev": "be5afa0fcb31f0a96bf9ecba05a516c66fcd8114", "type": "github" }, "original": { From 6bc823bd40935117b0f6cd4e0e6d00fd9ea64bfe Mon Sep 17 00:00:00 2001 From: Github Action Date: Sun, 18 Jan 2026 11:37:49 +0000 Subject: [PATCH 005/426] Update node_modules hash (x86_64-linux) --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 5bbdf921bbd..a7a7957e24d 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-D1VXuKJagfq3mxh8Xs8naHoYNJUJzAM9JLJqpHcItDk=", - "aarch64-linux": "sha256-9wXcg50Sv56Wb2x5NWe15olNGE/uMiDkmGRmqPoeW1U=", - "aarch64-darwin": "sha256-i5eTTjsNAARwcw69sd6wuse2BKTUi/Vfgo4M28l+RoY=", - "x86_64-darwin": "sha256-oFtQnIzgTS2zcjkhBTnXxYqr20KXdA2I+b908piLs+c=" + "x86_64-linux": "sha256-DFsg3Dyt+cm8Z7CU6lpFd4gTAzydAewfiQW1T3qvDxA=", + "aarch64-linux": "sha256-0Im52dLeZ0ZtaPJr/U4m7+IRtOfziHNJI/Bu/V6cPho=", + "aarch64-darwin": "sha256-U2UvE70nM0OI0VhIku8qnX+ptPbA+Q/y1BGXbFMcyt4=", + "x86_64-darwin": "sha256-CpZFHBMPJSib2Vqs6oC8HQjQtviPUMa/qezHAe22N/A=" } } From f5eb90514aca136e0aa2f48954f71d51b52e2b16 Mon Sep 17 00:00:00 2001 From: Github Action Date: Sun, 18 Jan 2026 11:43:58 +0000 Subject: [PATCH 006/426] Update node_modules hash (aarch64-darwin) --- nix/hashes.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/hashes.json b/nix/hashes.json index a7a7957e24d..e51ed90463a 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -2,7 +2,7 @@ "nodeModules": { "x86_64-linux": "sha256-DFsg3Dyt+cm8Z7CU6lpFd4gTAzydAewfiQW1T3qvDxA=", "aarch64-linux": "sha256-0Im52dLeZ0ZtaPJr/U4m7+IRtOfziHNJI/Bu/V6cPho=", - "aarch64-darwin": "sha256-U2UvE70nM0OI0VhIku8qnX+ptPbA+Q/y1BGXbFMcyt4=", + "aarch64-darwin": "sha256-Rfd05h/BRLoM0SmKn+ui2RdXBNhkaVKkgBeT+uBs4J8=", "x86_64-darwin": "sha256-CpZFHBMPJSib2Vqs6oC8HQjQtviPUMa/qezHAe22N/A=" } } From dd19c3d8f2cfbb7d1b157bbe6f5a9a969cb6c239 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 18 Jan 2026 05:43:34 -0600 Subject: [PATCH 007/426] test(app): e2e utilities --- packages/app/e2e/home.spec.ts | 15 ++++------ packages/app/e2e/navigation.spec.ts | 21 +++----------- packages/app/e2e/palette.spec.ts | 26 +++-------------- packages/app/e2e/session.spec.ts | 21 +++----------- packages/app/e2e/terminal.spec.ts | 28 ++++-------------- packages/app/e2e/utils.ts | 45 +++++++++++++++++++++++++++++ 6 files changed, 69 insertions(+), 87 deletions(-) create mode 100644 packages/app/e2e/utils.ts diff --git a/packages/app/e2e/home.spec.ts b/packages/app/e2e/home.spec.ts index 29a07060932..5bb701076e9 100644 --- a/packages/app/e2e/home.spec.ts +++ b/packages/app/e2e/home.spec.ts @@ -1,24 +1,21 @@ import { test, expect } from "@playwright/test" +import { serverName } from "./utils" -test("home renders and shows an open project entrypoint", async ({ page }) => { +test("home renders and shows core entrypoints", async ({ page }) => { await page.goto("/") - await expect(page.getByText("Recent projects").or(page.getByText("No recent projects"))).toBeVisible() await expect(page.getByRole("button", { name: "Open project" }).first()).toBeVisible() + await expect(page.getByRole("button", { name: serverName })).toBeVisible() }) test("server picker dialog opens from home", async ({ page }) => { - const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" - const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" - const name = `${host}:${port}` - await page.goto("/") - const trigger = page.getByRole("button", { name }) + const trigger = page.getByRole("button", { name: serverName }) await expect(trigger).toBeVisible() await trigger.click() - const dialog = page.getByRole("dialog", { name: "Servers" }) + const dialog = page.getByRole("dialog") await expect(dialog).toBeVisible() - await expect(dialog.getByPlaceholder("Search servers")).toBeVisible() + await expect(dialog.getByRole("textbox").first()).toBeVisible() }) diff --git a/packages/app/e2e/navigation.spec.ts b/packages/app/e2e/navigation.spec.ts index 2783c5222cc..4d0d3b2b9d4 100644 --- a/packages/app/e2e/navigation.spec.ts +++ b/packages/app/e2e/navigation.spec.ts @@ -1,24 +1,11 @@ import { test, expect } from "@playwright/test" -import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" -import { base64Encode } from "@opencode-ai/util/encode" - -const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" -const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" -const url = `http://${host}:${port}` - -async function getWorktree() { - const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) - const result = await sdk.path.get() - const data = result.data - if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) - return data.worktree -} +import { dirPath, dirSlug, getWorktree, promptSelector } from "./utils" test("project route redirects to /session", async ({ page }) => { const directory = await getWorktree() - const slug = base64Encode(directory) + const slug = dirSlug(directory) - await page.goto(`/${slug}`) + await page.goto(dirPath(directory)) await expect(page).toHaveURL(new RegExp(`/${slug}/session`)) - await expect(page.locator('[data-component="prompt-input"]')).toBeVisible() + await expect(page.locator(promptSelector)).toBeVisible() }) diff --git a/packages/app/e2e/palette.spec.ts b/packages/app/e2e/palette.spec.ts index 06294562945..bad09aab96b 100644 --- a/packages/app/e2e/palette.spec.ts +++ b/packages/app/e2e/palette.spec.ts @@ -1,29 +1,11 @@ import { test, expect } from "@playwright/test" -import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" -import { base64Encode } from "@opencode-ai/util/encode" - -const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" -const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" -const url = `http://${host}:${port}` - -async function getWorktree() { - const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) - const result = await sdk.path.get() - const data = result.data - if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) - return data.worktree -} - -const mod = process.platform === "darwin" ? "Meta" : "Control" +import { gotoSession, modKey, promptSelector } from "./utils" test("search palette opens and closes", async ({ page }) => { - const directory = await getWorktree() - const slug = base64Encode(directory) - - await page.goto(`/${slug}/session`) - await expect(page.locator('[data-component="prompt-input"]')).toBeVisible() + await gotoSession(page) + await expect(page.locator(promptSelector)).toBeVisible() - await page.keyboard.press(`${mod}+P`) + await page.keyboard.press(`${modKey}+P`) const dialog = page.getByRole("dialog") await expect(dialog).toBeVisible() diff --git a/packages/app/e2e/session.spec.ts b/packages/app/e2e/session.spec.ts index e1ca12449bb..d44736a4f56 100644 --- a/packages/app/e2e/session.spec.ts +++ b/packages/app/e2e/session.spec.ts @@ -1,22 +1,9 @@ import { test, expect } from "@playwright/test" -import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" -import { base64Encode } from "@opencode-ai/util/encode" - -const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" -const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" -const url = `http://${host}:${port}` - -async function getWorktree() { - const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) - const result = await sdk.path.get() - const data = result.data - if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) - return data.worktree -} +import { createSdk, getWorktree, promptSelector, sessionPath } from "./utils" test("can open an existing session and type into the prompt", async ({ page }) => { const directory = await getWorktree() - const sdk = createOpencodeClient({ baseUrl: url, directory, throwOnError: true }) + const sdk = createSdk(directory) const title = `e2e smoke ${Date.now()}` const created = await sdk.session.create({ title }).then((r) => r.data) @@ -24,9 +11,9 @@ test("can open an existing session and type into the prompt", async ({ page }) = const sessionID = created.id try { - await page.goto(`/${base64Encode(directory)}/session/${sessionID}`) + await page.goto(sessionPath(directory, sessionID)) - const prompt = page.locator('[data-component="prompt-input"]') + const prompt = page.locator(promptSelector) await expect(prompt).toBeVisible() await prompt.click() diff --git a/packages/app/e2e/terminal.spec.ts b/packages/app/e2e/terminal.spec.ts index 9bb9947fe31..8f90a3c0c1b 100644 --- a/packages/app/e2e/terminal.spec.ts +++ b/packages/app/e2e/terminal.spec.ts @@ -1,33 +1,17 @@ import { test, expect } from "@playwright/test" -import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" -import { base64Encode } from "@opencode-ai/util/encode" - -const host = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" -const port = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" -const url = `http://${host}:${port}` - -async function getWorktree() { - const sdk = createOpencodeClient({ baseUrl: url, throwOnError: true }) - const result = await sdk.path.get() - const data = result.data - if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${url}/path`) - return data.worktree -} +import { gotoSession, promptSelector, terminalSelector, terminalToggleKey } from "./utils" test("terminal panel can be toggled", async ({ page }) => { - const directory = await getWorktree() - const slug = base64Encode(directory) - - await page.goto(`/${slug}/session`) - await expect(page.locator('[data-component="prompt-input"]')).toBeVisible() + await gotoSession(page) + await expect(page.locator(promptSelector)).toBeVisible() - const terminal = page.locator('[data-component="terminal"]') + const terminal = page.locator(terminalSelector) const initiallyOpen = await terminal.isVisible() if (initiallyOpen) { - await page.keyboard.press("Control+Backquote") + await page.keyboard.press(terminalToggleKey) await expect(terminal).toHaveCount(0) } - await page.keyboard.press("Control+Backquote") + await page.keyboard.press(terminalToggleKey) await expect(terminal).toBeVisible() }) diff --git a/packages/app/e2e/utils.ts b/packages/app/e2e/utils.ts new file mode 100644 index 00000000000..c18b368029a --- /dev/null +++ b/packages/app/e2e/utils.ts @@ -0,0 +1,45 @@ +import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" +import { base64Encode } from "@opencode-ai/util/encode" +import type { Page } from "@playwright/test" + +export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" +export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" + +export const serverUrl = `http://${serverHost}:${serverPort}` +export const serverName = `${serverHost}:${serverPort}` + +export const modKey = process.platform === "darwin" ? "Meta" : "Control" +export const terminalToggleKey = "Control+Backquote" + +export const promptSelector = '[data-component="prompt-input"]' +export const terminalSelector = '[data-component="terminal"]' + +export function createSdk(directory?: string) { + return createOpencodeClient({ baseUrl: serverUrl, directory, throwOnError: true }) +} + +export async function getWorktree() { + const sdk = createSdk() + const result = await sdk.path.get() + const data = result.data + if (!data?.worktree) throw new Error(`Failed to resolve a worktree from ${serverUrl}/path`) + return data.worktree +} + +export function dirSlug(directory: string) { + return base64Encode(directory) +} + +export function dirPath(directory: string) { + return `/${dirSlug(directory)}` +} + +export function sessionPath(directory: string, sessionID?: string) { + return `${dirPath(directory)}/session${sessionID ? `/${sessionID}` : ""}` +} + +export async function gotoSession(page: Page, sessionID?: string) { + const directory = await getWorktree() + await page.goto(sessionPath(directory, sessionID)) + return { directory, slug: dirSlug(directory) } +} From f1daf3b4308cf85a3f61fb2f1d4b3f55316487b1 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 18 Jan 2026 05:45:24 -0600 Subject: [PATCH 008/426] fix(app): tests in ci --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 98eac1dab2f..fa93b61cf66 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: uses: ./.github/actions/setup-bun - name: Install Playwright browsers - run: bun --cwd packages/app x playwright install --with-deps + run: bunx --cwd packages/app playwright install --with-deps - name: Seed opencode data run: bun --cwd packages/opencode script/seed-e2e.ts From 182c43a78f55d4c22440c7256cbf4ff464e01c6e Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 05:22:35 -0600 Subject: [PATCH 009/426] chore: cleanup --- packages/app/e2e/fixtures.ts | 40 +++++++++++++++++++++++++++++ packages/app/e2e/home.spec.ts | 2 +- packages/app/e2e/navigation.spec.ts | 10 +++----- packages/app/e2e/palette.spec.ts | 9 +++---- packages/app/e2e/session.spec.ts | 12 +++------ packages/app/e2e/terminal.spec.ts | 9 +++---- packages/app/e2e/utils.ts | 7 ----- 7 files changed, 57 insertions(+), 32 deletions(-) create mode 100644 packages/app/e2e/fixtures.ts diff --git a/packages/app/e2e/fixtures.ts b/packages/app/e2e/fixtures.ts new file mode 100644 index 00000000000..721d60049ce --- /dev/null +++ b/packages/app/e2e/fixtures.ts @@ -0,0 +1,40 @@ +import { test as base, expect } from "@playwright/test" +import { createSdk, dirSlug, getWorktree, promptSelector, sessionPath } from "./utils" + +type TestFixtures = { + sdk: ReturnType + gotoSession: (sessionID?: string) => Promise +} + +type WorkerFixtures = { + directory: string + slug: string +} + +export const test = base.extend({ + directory: [ + async ({}, use) => { + const directory = await getWorktree() + await use(directory) + }, + { scope: "worker" }, + ], + slug: [ + async ({ directory }, use) => { + await use(dirSlug(directory)) + }, + { scope: "worker" }, + ], + sdk: async ({ directory }, use) => { + await use(createSdk(directory)) + }, + gotoSession: async ({ page, directory }, use) => { + const gotoSession = async (sessionID?: string) => { + await page.goto(sessionPath(directory, sessionID)) + await expect(page.locator(promptSelector)).toBeVisible() + } + await use(gotoSession) + }, +}) + +export { expect } diff --git a/packages/app/e2e/home.spec.ts b/packages/app/e2e/home.spec.ts index 5bb701076e9..c6fb0e3b074 100644 --- a/packages/app/e2e/home.spec.ts +++ b/packages/app/e2e/home.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from "@playwright/test" +import { test, expect } from "./fixtures" import { serverName } from "./utils" test("home renders and shows core entrypoints", async ({ page }) => { diff --git a/packages/app/e2e/navigation.spec.ts b/packages/app/e2e/navigation.spec.ts index 4d0d3b2b9d4..76923af6ede 100644 --- a/packages/app/e2e/navigation.spec.ts +++ b/packages/app/e2e/navigation.spec.ts @@ -1,11 +1,9 @@ -import { test, expect } from "@playwright/test" -import { dirPath, dirSlug, getWorktree, promptSelector } from "./utils" - -test("project route redirects to /session", async ({ page }) => { - const directory = await getWorktree() - const slug = dirSlug(directory) +import { test, expect } from "./fixtures" +import { dirPath, promptSelector } from "./utils" +test("project route redirects to /session", async ({ page, directory, slug }) => { await page.goto(dirPath(directory)) + await expect(page).toHaveURL(new RegExp(`/${slug}/session`)) await expect(page.locator(promptSelector)).toBeVisible() }) diff --git a/packages/app/e2e/palette.spec.ts b/packages/app/e2e/palette.spec.ts index bad09aab96b..617c55ac167 100644 --- a/packages/app/e2e/palette.spec.ts +++ b/packages/app/e2e/palette.spec.ts @@ -1,9 +1,8 @@ -import { test, expect } from "@playwright/test" -import { gotoSession, modKey, promptSelector } from "./utils" +import { test, expect } from "./fixtures" +import { modKey } from "./utils" -test("search palette opens and closes", async ({ page }) => { - await gotoSession(page) - await expect(page.locator(promptSelector)).toBeVisible() +test("search palette opens and closes", async ({ page, gotoSession }) => { + await gotoSession() await page.keyboard.press(`${modKey}+P`) diff --git a/packages/app/e2e/session.spec.ts b/packages/app/e2e/session.spec.ts index d44736a4f56..19e25a42131 100644 --- a/packages/app/e2e/session.spec.ts +++ b/packages/app/e2e/session.spec.ts @@ -1,9 +1,7 @@ -import { test, expect } from "@playwright/test" -import { createSdk, getWorktree, promptSelector, sessionPath } from "./utils" +import { test, expect } from "./fixtures" +import { promptSelector } from "./utils" -test("can open an existing session and type into the prompt", async ({ page }) => { - const directory = await getWorktree() - const sdk = createSdk(directory) +test("can open an existing session and type into the prompt", async ({ page, sdk, gotoSession }) => { const title = `e2e smoke ${Date.now()}` const created = await sdk.session.create({ title }).then((r) => r.data) @@ -11,11 +9,9 @@ test("can open an existing session and type into the prompt", async ({ page }) = const sessionID = created.id try { - await page.goto(sessionPath(directory, sessionID)) + await gotoSession(sessionID) const prompt = page.locator(promptSelector) - await expect(prompt).toBeVisible() - await prompt.click() await page.keyboard.type("hello from e2e") await expect(prompt).toContainText("hello from e2e") diff --git a/packages/app/e2e/terminal.spec.ts b/packages/app/e2e/terminal.spec.ts index 8f90a3c0c1b..fc558b63259 100644 --- a/packages/app/e2e/terminal.spec.ts +++ b/packages/app/e2e/terminal.spec.ts @@ -1,9 +1,8 @@ -import { test, expect } from "@playwright/test" -import { gotoSession, promptSelector, terminalSelector, terminalToggleKey } from "./utils" +import { test, expect } from "./fixtures" +import { terminalSelector, terminalToggleKey } from "./utils" -test("terminal panel can be toggled", async ({ page }) => { - await gotoSession(page) - await expect(page.locator(promptSelector)).toBeVisible() +test("terminal panel can be toggled", async ({ page, gotoSession }) => { + await gotoSession() const terminal = page.locator(terminalSelector) const initiallyOpen = await terminal.isVisible() diff --git a/packages/app/e2e/utils.ts b/packages/app/e2e/utils.ts index c18b368029a..eb0395950ae 100644 --- a/packages/app/e2e/utils.ts +++ b/packages/app/e2e/utils.ts @@ -1,6 +1,5 @@ import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" import { base64Encode } from "@opencode-ai/util/encode" -import type { Page } from "@playwright/test" export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" export const serverPort = process.env.PLAYWRIGHT_SERVER_PORT ?? "4096" @@ -37,9 +36,3 @@ export function dirPath(directory: string) { export function sessionPath(directory: string, sessionID?: string) { return `${dirPath(directory)}/session${sessionID ? `/${sessionID}` : ""}` } - -export async function gotoSession(page: Page, sessionID?: string) { - const directory = await getWorktree() - await page.goto(sessionPath(directory, sessionID)) - return { directory, slug: dirSlug(directory) } -} From b90315bc7ee745f9afb81fb3cfab69b42980b79d Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 05:28:15 -0600 Subject: [PATCH 010/426] chore: cleanup --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa93b61cf66..fda848762f5 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,8 @@ jobs: uses: ./.github/actions/setup-bun - name: Install Playwright browsers - run: bunx --cwd packages/app playwright install --with-deps + working-directory: packages/app + run: bunx playwright install --with-deps - name: Seed opencode data run: bun --cwd packages/opencode script/seed-e2e.ts From 2b086f0584ad803f27bbf386b00b04ecdee204fe Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 06:54:47 -0600 Subject: [PATCH 011/426] test(app): more e2e tests --- packages/app/e2e/context.spec.ts | 28 ++++++++++++++++++++++++++++ packages/app/e2e/file-open.spec.ts | 24 ++++++++++++++++++++++++ packages/app/e2e/sidebar.spec.ts | 20 ++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 packages/app/e2e/context.spec.ts create mode 100644 packages/app/e2e/file-open.spec.ts create mode 100644 packages/app/e2e/sidebar.spec.ts diff --git a/packages/app/e2e/context.spec.ts b/packages/app/e2e/context.spec.ts new file mode 100644 index 00000000000..dbfeda8d8c5 --- /dev/null +++ b/packages/app/e2e/context.spec.ts @@ -0,0 +1,28 @@ +import { test, expect } from "./fixtures" +import { promptSelector } from "./utils" + +test("context panel can be opened from the prompt", async ({ page, sdk, gotoSession }) => { + const title = `e2e smoke context ${Date.now()}` + const created = await sdk.session.create({ title }).then((r) => r.data) + + if (!created?.id) throw new Error("Session create did not return an id") + const sessionID = created.id + + try { + await gotoSession(sessionID) + + const promptForm = page.locator("form").filter({ has: page.locator(promptSelector) }).first() + const contextButton = promptForm + .locator("button") + .filter({ has: promptForm.locator('[data-component="progress-circle"]').first() }) + .first() + + await expect(contextButton).toBeVisible() + await contextButton.click() + + const tabs = page.locator('[data-component="tabs"][data-variant="normal"]') + await expect(tabs.getByRole("tab", { name: "Context" })).toBeVisible() + } finally { + await sdk.session.delete({ sessionID }).catch(() => undefined) + } +}) diff --git a/packages/app/e2e/file-open.spec.ts b/packages/app/e2e/file-open.spec.ts new file mode 100644 index 00000000000..673caf9dc34 --- /dev/null +++ b/packages/app/e2e/file-open.spec.ts @@ -0,0 +1,24 @@ +import { test, expect } from "./fixtures" +import { modKey } from "./utils" + +test("can open a file tab from the search palette", async ({ page, gotoSession }) => { + await gotoSession() + + await page.keyboard.press(`${modKey}+P`) + + const dialog = page.getByRole("dialog") + await expect(dialog).toBeVisible() + + const input = dialog.getByRole("textbox").first() + await input.fill("package.json") + + const firstItem = dialog.locator('[data-slot="list-item"]').first() + await expect(firstItem).toBeVisible() + await firstItem.click() + + await expect(dialog).toHaveCount(0) + + const tabs = page.locator('[data-component="tabs"][data-variant="normal"]') + await expect(tabs).toBeVisible() + await expect(tabs.getByRole("tab").first()).toBeVisible() +}) diff --git a/packages/app/e2e/sidebar.spec.ts b/packages/app/e2e/sidebar.spec.ts new file mode 100644 index 00000000000..964b0a56c03 --- /dev/null +++ b/packages/app/e2e/sidebar.spec.ts @@ -0,0 +1,20 @@ +import { test, expect } from "./fixtures" +import { modKey } from "./utils" + +test("sidebar can be collapsed and expanded", async ({ page, gotoSession }) => { + await gotoSession() + + const createButton = page.getByRole("button", { name: /New (session|workspace)/ }).first() + const opened = (await createButton.count()) > 0 + + if (!opened) { + await page.keyboard.press(`${modKey}+B`) + await expect(createButton).toBeVisible() + } + + await page.keyboard.press(`${modKey}+B`) + await expect(createButton).toHaveCount(0) + + await page.keyboard.press(`${modKey}+B`) + await expect(createButton).toBeVisible() +}) From e9ede70793dae3f1f12b3e6144c0229b9ce96610 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 07:00:00 -0600 Subject: [PATCH 012/426] chore: cleanup --- .github/workflows/test.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fda848762f5..9cf83ca8df0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,7 +23,8 @@ jobs: run: bunx playwright install --with-deps - name: Seed opencode data - run: bun --cwd packages/opencode script/seed-e2e.ts + working-directory: packages/opencode + run: bun script/seed-e2e.ts env: MODELS_DEV_API_JSON: ${{ github.workspace }}/packages/opencode/test/tool/fixtures/models-api.json OPENCODE_DISABLE_MODELS_FETCH: "true" @@ -42,7 +43,7 @@ jobs: OPENCODE_E2E_MODEL: "opencode/gpt-5-nano" - name: Run opencode server - run: bun --cwd packages/opencode run dev -- --print-logs --log-level WARN serve --port 4096 --hostname 0.0.0.0 & + run: bun run dev -- --print-logs --log-level WARN serve --port 4096 --hostname 0.0.0.0 & env: MODELS_DEV_API_JSON: ${{ github.workspace }}/packages/opencode/test/tool/fixtures/models-api.json OPENCODE_DISABLE_MODELS_FETCH: "true" From f00f18b926e21c5d48b8fdf5cb216888f1c52f82 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 07:15:57 -0600 Subject: [PATCH 013/426] chore: cleanup --- turbo.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/turbo.json b/turbo.json index 6b1c9b32425..5de1b8d7517 100644 --- a/turbo.json +++ b/turbo.json @@ -9,6 +9,10 @@ "opencode#test": { "dependsOn": ["^build"], "outputs": [] + }, + "@opencode-ai/app#test": { + "dependsOn": ["^build"], + "outputs": [] } } } From 1ba7c606e679bdcd1212c23a46146aed5646c504 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 08:38:42 -0600 Subject: [PATCH 014/426] chore: cleanup --- packages/app/e2e/context.spec.ts | 25 +++++++++++++++++++++---- packages/app/e2e/file-open.spec.ts | 9 ++++----- packages/app/e2e/sidebar.spec.ts | 13 +++++++------ 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/packages/app/e2e/context.spec.ts b/packages/app/e2e/context.spec.ts index dbfeda8d8c5..beabd2eb7dd 100644 --- a/packages/app/e2e/context.spec.ts +++ b/packages/app/e2e/context.spec.ts @@ -9,12 +9,29 @@ test("context panel can be opened from the prompt", async ({ page, sdk, gotoSess const sessionID = created.id try { + await sdk.session.promptAsync({ + sessionID, + noReply: true, + parts: [ + { + type: "text", + text: "seed context", + }, + ], + }) + + await expect + .poll(async () => { + const messages = await sdk.session.messages({ sessionID, limit: 1 }).then((r) => r.data ?? []) + return messages.length + }) + .toBeGreaterThan(0) + await gotoSession(sessionID) - const promptForm = page.locator("form").filter({ has: page.locator(promptSelector) }).first() - const contextButton = promptForm - .locator("button") - .filter({ has: promptForm.locator('[data-component="progress-circle"]').first() }) + const contextButton = page + .locator('[data-component="button"]') + .filter({ has: page.locator('[data-component="progress-circle"]').first() }) .first() await expect(contextButton).toBeVisible() diff --git a/packages/app/e2e/file-open.spec.ts b/packages/app/e2e/file-open.spec.ts index 673caf9dc34..fb7104b6b05 100644 --- a/packages/app/e2e/file-open.spec.ts +++ b/packages/app/e2e/file-open.spec.ts @@ -12,13 +12,12 @@ test("can open a file tab from the search palette", async ({ page, gotoSession } const input = dialog.getByRole("textbox").first() await input.fill("package.json") - const firstItem = dialog.locator('[data-slot="list-item"]').first() - await expect(firstItem).toBeVisible() - await firstItem.click() + const fileItem = dialog.locator('[data-slot="list-item"][data-key^="file:"]').first() + await expect(fileItem).toBeVisible() + await fileItem.click() await expect(dialog).toHaveCount(0) const tabs = page.locator('[data-component="tabs"][data-variant="normal"]') - await expect(tabs).toBeVisible() - await expect(tabs.getByRole("tab").first()).toBeVisible() + await expect(tabs.locator('[data-slot="tabs-trigger"]').first()).toBeVisible() }) diff --git a/packages/app/e2e/sidebar.spec.ts b/packages/app/e2e/sidebar.spec.ts index 964b0a56c03..925590f5106 100644 --- a/packages/app/e2e/sidebar.spec.ts +++ b/packages/app/e2e/sidebar.spec.ts @@ -4,17 +4,18 @@ import { modKey } from "./utils" test("sidebar can be collapsed and expanded", async ({ page, gotoSession }) => { await gotoSession() - const createButton = page.getByRole("button", { name: /New (session|workspace)/ }).first() - const opened = (await createButton.count()) > 0 + const main = page.locator("main") + const closedClass = /xl:border-l/ + const isClosed = await main.evaluate((node) => node.className.includes("xl:border-l")) - if (!opened) { + if (isClosed) { await page.keyboard.press(`${modKey}+B`) - await expect(createButton).toBeVisible() + await expect(main).not.toHaveClass(closedClass) } await page.keyboard.press(`${modKey}+B`) - await expect(createButton).toHaveCount(0) + await expect(main).toHaveClass(closedClass) await page.keyboard.press(`${modKey}+B`) - await expect(createButton).toBeVisible() + await expect(main).not.toHaveClass(closedClass) }) From 3186e7ec7c059bba75fe498f47328ad757e7406c Mon Sep 17 00:00:00 2001 From: Github Action Date: Mon, 19 Jan 2026 14:59:54 +0000 Subject: [PATCH 015/426] Update node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index e51ed90463a..fa91b3b3102 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-DFsg3Dyt+cm8Z7CU6lpFd4gTAzydAewfiQW1T3qvDxA=", - "aarch64-linux": "sha256-0Im52dLeZ0ZtaPJr/U4m7+IRtOfziHNJI/Bu/V6cPho=", - "aarch64-darwin": "sha256-Rfd05h/BRLoM0SmKn+ui2RdXBNhkaVKkgBeT+uBs4J8=", - "x86_64-darwin": "sha256-CpZFHBMPJSib2Vqs6oC8HQjQtviPUMa/qezHAe22N/A=" + "x86_64-linux": "sha256-80+b7FwUy4mRWTzEjPrBWuR5Um67I1Rn4U/n/s/lBjs=", + "aarch64-linux": "sha256-xH/Grwh3b+HWsUkKN8LMcyMaMcmnIJYlgp38WJCat5E=", + "aarch64-darwin": "sha256-Izv6PE9gNaeYYfcqDwjTU/WYtD1y+j65annwvLzkMD8=", + "x86_64-darwin": "sha256-EG1Z0uAeyFiOeVsv0Sz1sa8/mdXuw/uvbYYrkFR3EAg=" } } From 843d76191e3d463cdf157cdcc6393000d44c7dfd Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 19 Jan 2026 10:12:46 -0500 Subject: [PATCH 016/426] zen: fix black reset date --- packages/console/core/src/util/date.test.ts | 20 ++++++++++++++++++++ packages/console/core/src/util/date.ts | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 packages/console/core/src/util/date.test.ts diff --git a/packages/console/core/src/util/date.test.ts b/packages/console/core/src/util/date.test.ts new file mode 100644 index 00000000000..074df8a2fad --- /dev/null +++ b/packages/console/core/src/util/date.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, test } from "bun:test" +import { getWeekBounds } from "./date" + +describe("util.date.getWeekBounds", () => { + test("returns a Monday-based week for Sunday dates", () => { + const date = new Date("2026-01-18T12:00:00Z") + const bounds = getWeekBounds(date) + + expect(bounds.start.toISOString()).toBe("2026-01-12T00:00:00.000Z") + expect(bounds.end.toISOString()).toBe("2026-01-19T00:00:00.000Z") + }) + + test("returns a seven day window", () => { + const date = new Date("2026-01-14T12:00:00Z") + const bounds = getWeekBounds(date) + + const span = bounds.end.getTime() - bounds.start.getTime() + expect(span).toBe(7 * 24 * 60 * 60 * 1000) + }) +}) diff --git a/packages/console/core/src/util/date.ts b/packages/console/core/src/util/date.ts index 7f34c9bb5eb..9c1ab12d2c9 100644 --- a/packages/console/core/src/util/date.ts +++ b/packages/console/core/src/util/date.ts @@ -1,7 +1,7 @@ export function getWeekBounds(date: Date) { - const dayOfWeek = date.getUTCDay() + const offset = (date.getUTCDay() + 6) % 7 const start = new Date(date) - start.setUTCDate(date.getUTCDate() - dayOfWeek + 1) + start.setUTCDate(date.getUTCDate() - offset) start.setUTCHours(0, 0, 0, 0) const end = new Date(start) end.setUTCDate(start.getUTCDate() + 7) From 31864cadb49fb356e98ec56b1021ec469972e82c Mon Sep 17 00:00:00 2001 From: Evgenii Kosenko <39831696+kedMertens@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:50:41 +0200 Subject: [PATCH 017/426] docs: update codecompanion.nvim acp doc (#9411) --- packages/web/src/content/docs/acp.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web/src/content/docs/acp.mdx b/packages/web/src/content/docs/acp.mdx index 9129db13597..43d89eae186 100644 --- a/packages/web/src/content/docs/acp.mdx +++ b/packages/web/src/content/docs/acp.mdx @@ -125,7 +125,7 @@ To use OpenCode as an ACP agent in [CodeCompanion.nvim](https://github.com/olimo ```lua require("codecompanion").setup({ - strategies = { + interactions = { chat = { adapter = { name = "opencode", @@ -138,7 +138,7 @@ require("codecompanion").setup({ This config sets up CodeCompanion to use OpenCode as the ACP agent for chat. -If you need to pass environment variables (like `OPENCODE_API_KEY`), refer to [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/configuration/adapters#environment-variables-setting-an-api-key) in the CodeCompanion.nvim documentation for full details. +If you need to pass environment variables (like `OPENCODE_API_KEY`), refer to [Configuring Adapters: Environment Variables](https://codecompanion.olimorris.dev/getting-started#setting-an-api-key) in the CodeCompanion.nvim documentation for full details. ## Support From 29e206b6c6df09efd369218017c0da2569793899 Mon Sep 17 00:00:00 2001 From: Vladimir Glafirov Date: Mon, 19 Jan 2026 16:51:27 +0100 Subject: [PATCH 018/426] docs: Improve Gitlab self-hosted instances documentation (#9391) --- packages/web/src/content/docs/providers.mdx | 62 ++++++++++++++++++++- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index 6022d174a7d..2a7d2ffb424 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -654,21 +654,77 @@ GitLab Duo provides AI-powered agentic chat with native tool calling capabilitie - **duo-chat-sonnet-4-5** - Balanced performance for most workflows - **duo-chat-opus-4-5** - Most capable for complex analysis +:::note +You can also specify 'GITLAB_TOKEN' environment variable if you don't want +to store token in opencode auth storage. +::: + ##### Self-Hosted GitLab +:::note[compliance note] +OpenCode uses a small model for some AI tasks like generating the session title. +It is configured to use gpt-5-nano by default, hosted by Zen. To lock OpenCode +to only use your own GitLab-hosted instance, add the following to your +`opencode.json` file. It is also recommended to disable session sharing. + +```json +{ + "$schema": "https://opencode.ai/config.json", + "small_model": "gitlab/duo-chat-haiku-4-5", + "share": "disabled" +} +``` + +::: + For self-hosted GitLab instances: ```bash -GITLAB_INSTANCE_URL=https://gitlab.company.com GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx opencode +export GITLAB_INSTANCE_URL=https://gitlab.company.com +export GITLAB_TOKEN=glpat-... +``` + +If your instance runs a custom AI Gateway: + +```bash +GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com ``` Or add to your bash profile: ```bash title="~/.bash_profile" export GITLAB_INSTANCE_URL=https://gitlab.company.com -export GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx +export GITLAB_AI_GATEWAY_URL=https://ai-gateway.company.com +export GITLAB_TOKEN=glpat-... ``` +:::note +Your GitLab administrator must enable the following: + +1. [Duo Agent Platform](https://docs.gitlab.com/user/gitlab_duo/turn_on_off/) for the user, group, or instance +2. Feature flags (via Rails console): + - `agent_platform_claude_code` + - `third_party_agents_enabled` + ::: + +##### OAuth for Self-Hosted instances + +In order to make Oauth working for your self-hosted instance, you need to create +a new application (Settings → Applications) with the +callback URL `http://127.0.0.1:8080/callback` and following scopes: + +- api (Access the API on your behalf) +- read_user (Read your personal information) +- read_repository (Allows read-only access to the repository) + +Then expose application ID as environment variable: + +```bash +export GITLAB_OAUTH_CLIENT_ID=your_application_id_here +``` + +More documentation on [opencode-gitlab-auth](https://www.npmjs.com/package/@gitlab/opencode-gitlab-auth) homepage. + ##### Configuration Customize through `opencode.json`: @@ -690,7 +746,7 @@ Customize through `opencode.json`: } ``` -##### GitLab API Tools (Optional) +##### GitLab API Tools (Optional, but highly recommended) To access GitLab tools (merge requests, issues, pipelines, CI/CD, etc.): From b1684f3d12eb64f3b4f1912c6e7151f1638822e8 Mon Sep 17 00:00:00 2001 From: paulclou <117023154+paulclou@users.noreply.github.com> Date: Mon, 19 Jan 2026 09:59:51 -0600 Subject: [PATCH 019/426] fix(config): rename uv formatter from 'uv format' to 'uv' for config consistency (#9409) Co-authored-by: Paul C. Lou --- packages/opencode/src/format/formatter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/format/formatter.ts b/packages/opencode/src/format/formatter.ts index 667a954c034..1939769d212 100644 --- a/packages/opencode/src/format/formatter.ts +++ b/packages/opencode/src/format/formatter.ts @@ -226,7 +226,7 @@ export const rlang: Info = { } export const uvformat: Info = { - name: "uv format", + name: "uv", command: ["uv", "format", "--", "$FILE"], extensions: [".py", ".pyi"], async enabled() { From 5b867246321ca0376a92641a748f22f82faa9bd3 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 19 Jan 2026 10:15:24 -0600 Subject: [PATCH 020/426] fix: cargo fmt actually does not support formatting single files --- packages/opencode/src/format/formatter.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/opencode/src/format/formatter.ts b/packages/opencode/src/format/formatter.ts index 1939769d212..1c58d5b8d15 100644 --- a/packages/opencode/src/format/formatter.ts +++ b/packages/opencode/src/format/formatter.ts @@ -347,13 +347,14 @@ export const rustfmt: Info = { }, } -export const cargofmt: Info = { - name: "cargofmt", - command: ["cargo", "fmt", "--", "$FILE"], - extensions: [".rs"], - async enabled() { - if (!Bun.which("cargo")) return false - const found = await Filesystem.findUp("Cargo.toml", Instance.directory, Instance.worktree) - return found.length > 0 - }, -} +// cargo fmt actually does not support formatting single files +// export const cargofmt: Info = { +// name: "cargofmt", +// command: ["cargo", "fmt", "--", "$FILE"], +// extensions: [".rs"], +// async enabled() { +// if (!Bun.which("cargo")) return false +// const found = await Filesystem.findUp("Cargo.toml", Instance.directory, Instance.worktree) +// return found.length > 0 +// }, +// } From 4ee540309f41d6eaa65d0d4dd7c70fea71c973d1 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:26:10 -0600 Subject: [PATCH 021/426] fix(app): hide settings button --- packages/app/src/pages/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index e803681801d..39ca39b676b 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1857,7 +1857,7 @@ export default function Layout(props: ParentProps) {
- + From 72cb7ccc00438625e58900efa780a004eda5a826 Mon Sep 17 00:00:00 2001 From: Joseph Campuzano Date: Mon, 19 Jan 2026 10:43:27 -0600 Subject: [PATCH 022/426] fix(app): list component jumping when mouse happens to be under the list and keyboard navigating. (#9435) --- packages/ui/src/components/list.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index 631b3e33a29..bfe3440ea7f 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -206,6 +206,7 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) setActive(props.key(item)) }} onMouseLeave={() => { + if (!store.mouseActive) return; setActive(null) }} > From 453417ed47774fc3077ef67c49c831b4014494f4 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 19 Jan 2026 16:46:09 +0000 Subject: [PATCH 023/426] chore: generate --- packages/ui/src/components/list.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index bfe3440ea7f..b8a8f746072 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -206,7 +206,7 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) setActive(props.key(item)) }} onMouseLeave={() => { - if (!store.mouseActive) return; + if (!store.mouseActive) return setActive(null) }} > From d5ae8e0bef991f2b2ad9766b9ae2f1c903badab3 Mon Sep 17 00:00:00 2001 From: Goni Zahavy Date: Mon, 19 Jan 2026 18:48:59 +0200 Subject: [PATCH 024/426] fix(opencode): `cargo fmt` is formatting whole workspace instead of edited file (#9436) --- packages/opencode/src/format/formatter.ts | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/packages/opencode/src/format/formatter.ts b/packages/opencode/src/format/formatter.ts index 1c58d5b8d15..1a3aa1bb15a 100644 --- a/packages/opencode/src/format/formatter.ts +++ b/packages/opencode/src/format/formatter.ts @@ -337,24 +337,6 @@ export const rustfmt: Info = { command: ["rustfmt", "$FILE"], extensions: [".rs"], async enabled() { - if (!Bun.which("rustfmt")) return false - const configs = ["rustfmt.toml", ".rustfmt.toml"] - for (const config of configs) { - const found = await Filesystem.findUp(config, Instance.directory, Instance.worktree) - if (found.length > 0) return true - } - return false + return Bun.which("rustfmt") !== null }, } - -// cargo fmt actually does not support formatting single files -// export const cargofmt: Info = { -// name: "cargofmt", -// command: ["cargo", "fmt", "--", "$FILE"], -// extensions: [".rs"], -// async enabled() { -// if (!Bun.which("cargo")) return false -// const found = await Filesystem.findUp("Cargo.toml", Instance.directory, Instance.worktree) -// return found.length > 0 -// }, -// } From 1f11a8a6ea46867e2ad199c987bf14696a1b91d8 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 15 Jan 2026 13:32:15 -0600 Subject: [PATCH 025/426] feat(app): improved session layout --- packages/app/src/pages/layout.tsx | 140 ++++++++++++------ packages/app/src/pages/session.tsx | 20 +-- .../enterprise/src/routes/share/[shareID].tsx | 21 +-- packages/ui/src/components/hover-card.css | 5 +- packages/ui/src/components/message-nav.css | 4 + packages/ui/src/components/message-nav.tsx | 24 ++- .../src/components/session-message-rail.css | 44 ------ .../src/components/session-message-rail.tsx | 46 ------ 8 files changed, 121 insertions(+), 183 deletions(-) delete mode 100644 packages/ui/src/components/session-message-rail.css delete mode 100644 packages/ui/src/components/session-message-rail.tsx diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 39ca39b676b..2f71570f472 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -28,13 +28,14 @@ import { IconButton } from "@opencode-ai/ui/icon-button" import { InlineInput } from "@opencode-ai/ui/inline-input" import { Tooltip, TooltipKeybind } from "@opencode-ai/ui/tooltip" import { HoverCard } from "@opencode-ai/ui/hover-card" +import { MessageNav } from "@opencode-ai/ui/message-nav" import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" import { Collapsible } from "@opencode-ai/ui/collapsible" import { DiffChanges } from "@opencode-ai/ui/diff-changes" import { Spinner } from "@opencode-ai/ui/spinner" import { Dialog } from "@opencode-ai/ui/dialog" import { getFilename } from "@opencode-ai/util/path" -import { Session } from "@opencode-ai/sdk/v2/client" +import { Session, type Message, type TextPart } from "@opencode-ai/sdk/v2/client" import { usePlatform } from "@/context/platform" import { createStore, produce, reconcile } from "solid-js/store" import { @@ -1329,63 +1330,104 @@ export default function Layout(props: ParentProps) { return agent?.color }) + const hoverMessages = createMemo(() => + sessionStore.message[props.session.id]?.filter((message) => message.role === "user"), + ) + const hoverReady = createMemo(() => sessionStore.message[props.session.id] !== undefined) + const hoverAllowed = createMemo(() => !props.mobile && layout.sidebar.opened()) + const isActive = createMemo(() => props.session.id === params.id) + + const messageLabel = (message: Message) => { + const parts = sessionStore.part[message.id] ?? [] + const text = parts.find((part): part is TextPart => part?.type === "text" && !part.synthetic && !part.ignored) + return text?.text + } + + const item = ( + prefetchSession(props.session, "high")} + onFocus={() => prefetchSession(props.session, "high")} + > +
+
+ }> + + + + +
+ + +
+ + 0}> +
+ + +
+ + props.session.title} + onSave={(next) => renameSession(props.session, next)} + class="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" + displayClass="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" + stopPropagation + /> + + + {(summary) => ( +
+ +
+ )} +
+
+
+ )) + return (
- prefetchSession(props.session, "high")} - onFocus={() => prefetchSession(props.session, "high")} + -
-
- }> - - - - -
- - -
- - 0}> -
- - -
- - props.session.title} - onSave={(next) => renameSession(props.session, next)} - class="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" - displayClass="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" - stopPropagation + + Loading messages…
}> + { + if (!isActive()) { + navigate(`${props.slug}/session/${props.session.id}#message-${message.id}`) + return + } + window.location.hash = `message-${message.id}` + window.dispatchEvent(new HashChangeEvent("hashchange")) + }} + size="normal" + class="w-60" /> - - - {(summary) => ( -
- -
- )}
-
-
+ +
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index f063ce35b40..b1c844f0c63 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -18,7 +18,6 @@ import { useCodeComponent } from "@opencode-ai/ui/context/code" import { SessionTurn } from "@opencode-ai/ui/session-turn" import { createAutoScroll } from "@opencode-ai/ui/hooks" import { SessionReview } from "@opencode-ai/ui/session-review" -import { SessionMessageRail } from "@opencode-ai/ui/session-message-rail" import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd" import type { DragEvent } from "@thisbeyond/solid-dnd" @@ -1163,17 +1162,6 @@ export default function Page() { } >
- -
- -
-
{ @@ -1255,13 +1243,7 @@ export default function Page() { root: "min-w-0 w-full relative", content: "flex flex-col justify-between !overflow-visible [&_[data-slot=session-turn-message-header]]:top-[-32px]", - container: - "px-4 md:px-6 " + - (!showTabs() - ? "md:max-w-200 md:mx-auto" - : visibleUserMessages().length > 1 - ? "md:pr-6 md:pl-18" - : ""), + container: "w-full px-4 md:px-6", }} />
diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx index 776b4226451..d657ddc1229 100644 --- a/packages/enterprise/src/routes/share/[shareID].tsx +++ b/packages/enterprise/src/routes/share/[shareID].tsx @@ -16,7 +16,6 @@ import { iife } from "@opencode-ai/util/iife" import { Binary } from "@opencode-ai/util/binary" import { NamedError } from "@opencode-ai/util/error" import { DateTime } from "luxon" -import { SessionMessageRail } from "@opencode-ai/ui/session-message-rail" import { createStore } from "solid-js/store" import z from "zod" import NotFound from "../[...404]" @@ -353,26 +352,16 @@ export default function () {
1, - "px-6": !wide() && messages().length === 1, + "w-full flex justify-start items-start min-w-0 px-6": true, }} > {title()}
- 1 - ? "pr-6 pl-18" - : "px-6"), + container: "w-full pb-20 px-6", }} >
void + getLabel?: (message: UserMessage) => string | undefined }, ) { - const [local, others] = splitProps(props, ["messages", "current", "size", "onMessageSelect"]) + const [local, others] = splitProps(props, ["messages", "current", "size", "onMessageSelect", "getLabel"]) const content = () => (
    @@ -19,23 +20,36 @@ export function MessageNav( {(message) => { const handleClick = () => local.onMessageSelect(message) + const handleKeyPress = (event: KeyboardEvent) => { + if (event.key !== "Enter" && event.key !== " ") return + event.preventDefault() + local.onMessageSelect(message) + } + return (
  • -
    +
    - diff --git a/packages/ui/src/components/session-message-rail.css b/packages/ui/src/components/session-message-rail.css deleted file mode 100644 index 9f248bed252..00000000000 --- a/packages/ui/src/components/session-message-rail.css +++ /dev/null @@ -1,44 +0,0 @@ -[data-component="session-message-rail"] { - display: contents; -} - -[data-slot="session-message-rail-compact"], -[data-slot="session-message-rail-full"] { - position: absolute; - left: 1.5rem; - margin-top: 0.625rem; - top: 0; - bottom: 8rem; - overflow-y: auto; -} - -[data-slot="session-message-rail-compact"] { - display: flex; -} - -[data-slot="session-message-rail-full"] { - display: none; -} - -@container (min-width: 88rem) { - [data-slot="session-message-rail-compact"] { - display: none; - } - [data-slot="session-message-rail-full"] { - display: flex; - } -} - -[data-component="session-message-rail"] [data-slot="session-message-rail-full"] { - transform: none; -} - -[data-component="session-message-rail"][data-wide] [data-slot="session-message-rail-full"] { - margin-top: 0.125rem; - left: calc(((100% - min(100%, 50rem)) / 2) - 1.5rem); - transform: translateX(-100%); -} - -[data-component="session-message-rail"]:not([data-wide]) [data-slot="session-message-rail-full"] { - margin-top: 0.625rem; -} diff --git a/packages/ui/src/components/session-message-rail.tsx b/packages/ui/src/components/session-message-rail.tsx deleted file mode 100644 index 1935a4f930e..00000000000 --- a/packages/ui/src/components/session-message-rail.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { UserMessage } from "@opencode-ai/sdk/v2" -import { ComponentProps, Show, splitProps } from "solid-js" -import { MessageNav } from "./message-nav" -import "./session-message-rail.css" - -export interface SessionMessageRailProps extends ComponentProps<"div"> { - messages: UserMessage[] - current?: UserMessage - wide?: boolean - onMessageSelect: (message: UserMessage) => void -} - -export function SessionMessageRail(props: SessionMessageRailProps) { - const [local, others] = splitProps(props, ["messages", "current", "wide", "onMessageSelect", "class", "classList"]) - - return ( - 1}> -
    -
    - -
    -
    - -
    -
    -
    - ) -} From befd0f16362678dcd99cd9118cbcb044997c9511 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Thu, 15 Jan 2026 15:05:40 -0600 Subject: [PATCH 026/426] feat(app): new session layout --- packages/app/src/pages/layout.tsx | 53 +++++----- packages/app/src/pages/session.tsx | 4 +- .../enterprise/src/routes/share/[shareID].tsx | 4 +- packages/ui/src/components/session-turn.css | 28 ++---- packages/ui/src/components/session-turn.tsx | 96 ++++++++++++------- 5 files changed, 107 insertions(+), 78 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 2f71570f472..5312ff0a2ab 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1296,7 +1296,13 @@ export default function Layout(props: ParentProps) { ) } - const SessionItem = (props: { session: Session; slug: string; mobile?: boolean; dense?: boolean }): JSX.Element => { + const SessionItem = (props: { + session: Session + slug: string + mobile?: boolean + dense?: boolean + popover?: boolean + }): JSX.Element => { const notification = useNotification() const notifications = createMemo(() => notification.session.unseen(props.session.id)) const hasError = createMemo(() => notifications().some((n) => n.type === "error")) @@ -1335,6 +1341,7 @@ export default function Layout(props: ParentProps) { ) const hoverReady = createMemo(() => sessionStore.message[props.session.id] !== undefined) const hoverAllowed = createMemo(() => !props.mobile && layout.sidebar.opened()) + const hoverEnabled = createMemo(() => (props.popover ?? true) && hoverAllowed()) const isActive = createMemo(() => props.session.id === params.id) const messageLabel = (message: Message) => { @@ -1370,23 +1377,14 @@ export default function Layout(props: ParentProps) {
    - - props.session.title} - onSave={(next) => renameSession(props.session, next)} - class="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" - displayClass="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" - stopPropagation - /> - + props.session.title} + onSave={(next) => renameSession(props.session, next)} + class="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" + displayClass="text-14-regular text-text-strong grow-1 min-w-0 overflow-hidden text-ellipsis truncate" + stopPropagation + /> {(summary) => (
    @@ -1396,7 +1394,7 @@ export default function Layout(props: ParentProps) {
    - )) + ) return (
    + {item} + + } > Loading messages…
    }> @@ -1730,6 +1732,7 @@ export default function Layout(props: ParentProps) { slug={base64Encode(props.project.worktree)} dense mobile={props.mobile} + popover={false} /> )} @@ -1746,7 +1749,13 @@ export default function Layout(props: ParentProps) {
    {(session) => ( - + )}
diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index b1c844f0c63..5f282ac8577 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1233,6 +1233,7 @@ export default function Page() { > diff --git a/packages/enterprise/src/routes/share/[shareID].tsx b/packages/enterprise/src/routes/share/[shareID].tsx index d657ddc1229..483db4d9324 100644 --- a/packages/enterprise/src/routes/share/[shareID].tsx +++ b/packages/enterprise/src/routes/share/[shareID].tsx @@ -295,13 +295,13 @@ export default function () { {(message) => ( setStore("expandedSteps", message.id, (v) => !v)} classes={{ root: "min-w-0 w-full relative", - content: - "flex flex-col justify-between !overflow-visible [&_[data-slot=session-turn-message-header]]:top-[-32px]", + content: "flex flex-col justify-between !overflow-visible", container: "px-4", }} /> diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index 1e3cc0b2921..f7ab971794a 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -29,23 +29,6 @@ gap: 28px; overflow-anchor: none; - [data-slot="session-turn-user-badges"] { - position: absolute; - right: 0; - display: flex; - gap: 6px; - padding-left: 16px; - background: linear-gradient(to right, transparent, var(--background-stronger) 12px); - opacity: 0; - transition: opacity 0.15s ease; - pointer-events: none; - } - - &:hover [data-slot="session-turn-user-badges"] { - opacity: 1; - pointer-events: auto; - } - [data-slot="session-turn-badge"] { display: inline-flex; align-items: center; @@ -71,7 +54,7 @@ [data-slot="session-turn-response-trigger"] { position: sticky; - top: 32px; + top: calc(var(--sticky-header-height, 0px)); background-color: var(--background-stronger); z-index: 20; width: calc(100% + 9px); @@ -88,10 +71,17 @@ } [data-slot="session-turn-message-content"] { - margin-top: -18px; + margin-top: 0; max-width: 100%; } + [data-slot="session-turn-user-badges"] { + display: flex; + align-items: center; + gap: 6px; + padding-left: 16px; + } + [data-slot="session-turn-message-title"] { width: 100%; font-size: var(--font-size-large); diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index ae1321bac14..8b807af82b9 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -119,6 +119,7 @@ function AssistantMessageItem(props: { export function SessionTurn( props: ParentProps<{ sessionID: string + sessionTitle?: string messageID: string lastUserMessageID?: string stepsExpanded?: boolean @@ -330,7 +331,9 @@ export function SessionTurn( const response = createMemo(() => lastTextPart()?.text) const responsePartId = createMemo(() => lastTextPart()?.id) - const hasDiffs = createMemo(() => message()?.summary?.diffs?.length) + const sessionInfo = createMemo(() => data.store.session.find((item) => item.id === props.sessionID)) + const sessionTitle = createMemo(() => props.sessionTitle ?? sessionInfo()?.title) + const hasDiffs = createMemo(() => (data.store.session_diff?.[props.sessionID]?.length ?? 0) > 0) const hideResponsePart = createMemo(() => !working() && !!responsePartId()) const [responseCopied, setResponseCopied] = createSignal(false) @@ -376,6 +379,7 @@ export function SessionTurn( diffLimit: diffInit, status: rawStatus(), duration: duration(), + titleShown: false, }) createEffect( @@ -389,6 +393,18 @@ export function SessionTurn( ), ) + createEffect(() => { + if (!sessionTitle()) { + setStore("titleShown", false) + return + } + if (store.titleShown) return + const first = allMessages().find((item) => item?.role === "user") + if (!first) return + if (first.id !== props.messageID) return + setStore("titleShown", true) + }) + createEffect(() => { const r = retry() if (!r) { @@ -482,40 +498,53 @@ export function SessionTurn( - {/* Title (sticky) */} -
setStore("stickyTitleRef", el)} data-slot="session-turn-sticky-title"> -
-
- - - - - -

{msg().summary?.title}

-
-
-
-
- - {(msg() as UserMessage).agent} - - - - - {(msg() as UserMessage).model?.modelID} - - - {(msg() as UserMessage).variant || "default"} + +
setStore("stickyTitleRef", el)} data-slot="session-turn-sticky-title"> +
+
+ + + + + +

{sessionTitle()}

+
+
+
-
+ + + +
+ + {(msg() as UserMessage).agent} + + + + + {(msg() as UserMessage).model?.modelID} + + + + {(msg() as UserMessage).variant} + +
+
{/* User Message */}
+ {/* Trigger (sticky) */}
setStore("stickyTriggerRef", el)} data-slot="session-turn-response-trigger"> @@ -612,7 +641,7 @@ export function SessionTurn( setStore("diffsOpen", value) }} > - + {(diff) => ( @@ -658,13 +687,13 @@ export function SessionTurn( )} - store.diffLimit}> + store.diffLimit}>
From 7811e01c8efc57d56b91547463c707baf2eb6815 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Sun, 18 Jan 2026 05:26:24 -0600 Subject: [PATCH 027/426] fix(app): new layout improvements --- packages/app/src/pages/session.tsx | 135 ++++++++++------ packages/ui/src/components/message-part.tsx | 35 ++++- packages/ui/src/components/session-turn.css | 95 +++++++++--- packages/ui/src/components/session-turn.tsx | 161 +++++--------------- 4 files changed, 239 insertions(+), 187 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 5f282ac8577..31f9eac9c27 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -18,6 +18,7 @@ import { useCodeComponent } from "@opencode-ai/ui/context/code" import { SessionTurn } from "@opencode-ai/ui/session-turn" import { createAutoScroll } from "@opencode-ai/ui/hooks" import { SessionReview } from "@opencode-ai/ui/session-review" +import { Mark } from "@opencode-ai/ui/logo" import { DragDropProvider, DragDropSensors, DragOverlay, SortableProvider, closestCenter } from "@thisbeyond/solid-dnd" import type { DragEvent } from "@thisbeyond/solid-dnd" @@ -787,17 +788,14 @@ export default function Page() { .filter((tab) => tab !== "context"), ) - const reviewTab = createMemo(() => hasReview() || tabs().active() === "review") - const mobileReview = createMemo(() => !isDesktop() && hasReview() && store.mobileTab === "review") + const mobileReview = createMemo(() => !isDesktop() && view().reviewPanel.opened() && store.mobileTab === "review") - const showTabs = createMemo( - () => view().reviewPanel.opened() && (hasReview() || tabs().all().length > 0 || contextOpen()), - ) + const showTabs = createMemo(() => view().reviewPanel.opened()) const activeTab = createMemo(() => { const active = tabs().active() if (active) return active - if (reviewTab()) return "review" + if (hasReview()) return "review" const first = openedTabs()[0] if (first) return first @@ -1095,8 +1093,8 @@ export default function Page() {
- {/* Mobile tab bar - only shown on mobile when there are diffs */} - + {/* Mobile tab bar - only shown on mobile when user opened review */} + setStore("mobileTab", "review")} > - {reviewCount()} Files Changed + + {reviewCount()} Files Changed + Review + @@ -1138,26 +1139,36 @@ export default function Page() { when={!mobileReview()} fallback={
- Loading changes...
} - > - { - const value = file.tab(path) - tabs().open(value) - file.load(path) - }} - classes={{ - root: "pb-[calc(var(--prompt-height,8rem)+24px)]", - header: "px-4", - container: "px-4", - }} - /> -
+ + + Loading changes...
} + > + { + const value = file.tab(path) + tabs().open(value) + file.load(path) + }} + classes={{ + root: "pb-[calc(var(--prompt-height,8rem)+32px)]", + header: "px-4", + container: "px-4", + }} + /> + + + +
+ +
No changes in this session yet.
+
+
+
} > @@ -1170,11 +1181,29 @@ export default function Page() { }} onClick={autoScroll.handleInteraction} class="relative min-w-0 w-full h-full overflow-y-auto no-scrollbar" + style={{ "--session-title-height": info()?.title ? "40px" : "0px" }} > + +
+
+

{info()?.title}

+
+
+
+
- +
@@ -1386,26 +1415,36 @@ export default function Page() {
- +
- Loading changes...
} - > - { - const value = file.tab(path) - tabs().open(value) - file.load(path) - }} - /> -
+ + + Loading changes...
} + > + { + const value = file.tab(path) + tabs().open(value) + file.load(path) + }} + /> +
+ + +
+ +
No changes in this session yet.
+
+
+
diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 47403786b22..b3fd01c2d8e 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -46,6 +46,7 @@ import { checksum } from "@opencode-ai/util/encode" import { Tooltip } from "./tooltip" import { IconButton } from "./icon-button" import { createAutoScroll } from "../hooks" +import { createResizeObserver } from "@solid-primitives/resize-observer" interface Diagnostic { range: { @@ -297,6 +298,23 @@ export function AssistantMessageDisplay(props: { message: AssistantMessage; part export function UserMessageDisplay(props: { message: UserMessage; parts: PartType[] }) { const dialog = useDialog() const [copied, setCopied] = createSignal(false) + const [expanded, setExpanded] = createSignal(false) + const [canExpand, setCanExpand] = createSignal(false) + let textRef: HTMLDivElement | undefined + + const updateCanExpand = () => { + const el = textRef + if (!el) return + if (expanded()) return + setCanExpand(el.scrollHeight > el.clientHeight + 2) + } + + createResizeObserver( + () => textRef, + () => { + updateCanExpand() + }, + ) const textPart = createMemo( () => props.parts?.find((p) => p.type === "text" && !(p as TextPart).synthetic) as TextPart | undefined, @@ -304,6 +322,11 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp const text = createMemo(() => textPart()?.text || "") + createEffect(() => { + text() + updateCanExpand() + }) + const files = createMemo(() => (props.parts?.filter((p) => p.type === "file") as FilePart[]) ?? []) const attachments = createMemo(() => @@ -335,7 +358,7 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp } return ( -
+
0}>
@@ -365,8 +388,16 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
-
+
(textRef = el)}> +
diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index f7ab971794a..a3c87c576dd 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -44,23 +44,33 @@ } } - [data-slot="session-turn-sticky-title"] { - width: 100%; + [data-slot="session-turn-sticky"] { + width: calc(100% + 9px); position: sticky; - top: 0; + top: var(--session-title-height, 0px); + z-index: 20; background-color: var(--background-stronger); - z-index: 21; + margin-left: -9px; + padding-left: 9px; + padding-bottom: 12px; + display: flex; + flex-direction: column; + gap: 12px; + + &::before { + content: ""; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: var(--background-stronger); + z-index: -1; + } } [data-slot="session-turn-response-trigger"] { - position: sticky; - top: calc(var(--sticky-header-height, 0px)); - background-color: var(--background-stronger); - z-index: 20; - width: calc(100% + 9px); - margin-left: -9px; - padding-left: 9px; - padding-bottom: 8px; + width: fit-content; } [data-slot="session-turn-message-header"] { @@ -75,6 +85,61 @@ max-width: 100%; } + [data-component="user-message"] [data-slot="user-message-text"] { + max-height: var(--user-message-collapsed-height, 64px); + } + + [data-component="user-message"][data-expanded="true"] [data-slot="user-message-text"] { + max-height: none; + } + + [data-component="user-message"][data-can-expand="true"] [data-slot="user-message-text"] { + padding-right: 36px; + padding-bottom: 28px; + } + + [data-component="user-message"] [data-slot="user-message-text"] [data-slot="user-message-expand"] { + display: none; + position: absolute; + bottom: 6px; + right: 6px; + padding: 0; + } + + [data-component="user-message"][data-can-expand="true"] + [data-slot="user-message-text"] + [data-slot="user-message-expand"], + [data-component="user-message"][data-expanded="true"] + [data-slot="user-message-text"] + [data-slot="user-message-expand"] { + display: inline-flex; + align-items: center; + justify-content: center; + height: 22px; + width: 22px; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + color: var(--text-weak); + + [data-slot="icon-svg"] { + transition: transform 0.15s ease; + } + } + + [data-component="user-message"][data-expanded="true"] + [data-slot="user-message-text"] + [data-slot="user-message-expand"] + [data-slot="icon-svg"] { + transform: rotate(180deg); + } + + [data-component="user-message"] [data-slot="user-message-text"] [data-slot="user-message-expand"]:hover { + background: var(--surface-raised-base); + color: var(--text-base); + } + [data-slot="session-turn-user-badges"] { display: flex; align-items: center; @@ -266,11 +331,7 @@ } [data-component="sticky-accordion-header"] { - top: var(--sticky-header-height, 40px); - - &[data-expanded]::before { - top: calc(-1 * var(--sticky-header-height, 40px)); - } + position: static; } [data-slot="session-turn-accordion-trigger-content"] { diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 8b807af82b9..e5fe4ba1ce8 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -13,17 +13,13 @@ import { getDirectory, getFilename } from "@opencode-ai/util/path" import { Binary } from "@opencode-ai/util/binary" import { createEffect, createMemo, createSignal, For, Match, on, onCleanup, ParentProps, Show, Switch } from "solid-js" -import { createResizeObserver } from "@solid-primitives/resize-observer" import { DiffChanges } from "./diff-changes" -import { Typewriter } from "./typewriter" import { Message, Part } from "./message-part" import { Markdown } from "./markdown" import { Accordion } from "./accordion" import { StickyAccordionHeader } from "./sticky-accordion-header" import { FileIcon } from "./file-icon" import { Icon } from "./icon" -import { ProviderIcon } from "./provider-icon" -import type { IconName } from "./provider-icons/types" import { IconButton } from "./icon-button" import { Tooltip } from "./tooltip" import { Card } from "./card" @@ -331,8 +327,6 @@ export function SessionTurn( const response = createMemo(() => lastTextPart()?.text) const responsePartId = createMemo(() => lastTextPart()?.id) - const sessionInfo = createMemo(() => data.store.session.find((item) => item.id === props.sessionID)) - const sessionTitle = createMemo(() => props.sessionTitle ?? sessionInfo()?.title) const hasDiffs = createMemo(() => (data.store.session_diff?.[props.sessionID]?.length ?? 0) > 0) const hideResponsePart = createMemo(() => !working() && !!responsePartId()) @@ -371,15 +365,11 @@ export function SessionTurn( const diffBatch = 20 const [store, setStore] = createStore({ - stickyTitleRef: undefined as HTMLDivElement | undefined, - stickyTriggerRef: undefined as HTMLDivElement | undefined, - stickyHeaderHeight: 0, retrySeconds: 0, diffsOpen: [] as string[], diffLimit: diffInit, status: rawStatus(), duration: duration(), - titleShown: false, }) createEffect( @@ -393,18 +383,6 @@ export function SessionTurn( ), ) - createEffect(() => { - if (!sessionTitle()) { - setStore("titleShown", false) - return - } - if (store.titleShown) return - const first = allMessages().find((item) => item?.role === "user") - if (!first) return - if (first.id !== props.messageID) return - setStore("titleShown", true) - }) - createEffect(() => { const r = retry() if (!r) { @@ -420,22 +398,6 @@ export function SessionTurn( onCleanup(() => clearInterval(timer)) }) - createResizeObserver( - () => store.stickyTitleRef, - ({ height }) => { - const triggerHeight = store.stickyTriggerRef?.offsetHeight ?? 0 - setStore("stickyHeaderHeight", height + triggerHeight + 8) - }, - ) - - createResizeObserver( - () => store.stickyTriggerRef, - ({ height }) => { - const titleHeight = store.stickyTitleRef?.offsetHeight ?? 0 - setStore("stickyHeaderHeight", titleHeight + height + 8) - }, - ) - createEffect(() => { const timer = setInterval(() => { setStore("duration", duration()) @@ -491,99 +453,58 @@ export function SessionTurn( data-message={msg().id} data-slot="session-turn-message-container" class={props.classes?.container} - style={{ "--sticky-header-height": `${store.stickyHeaderHeight}px` }} > - -
setStore("stickyTitleRef", el)} data-slot="session-turn-sticky-title"> -
-
+
+ {/* User Message */} +
+ +
+ + {/* Trigger (sticky) */} + +
+
+ · + {store.duration} + 0}> + + +
-
- - - -
- - {(msg() as UserMessage).agent} - - - - - {(msg() as UserMessage).model?.modelID} - - - - {(msg() as UserMessage).variant} - -
-
- {/* User Message */} -
- +
- - {/* Trigger (sticky) */} - -
setStore("stickyTriggerRef", el)} data-slot="session-turn-response-trigger"> - -
-
{/* Response */} 0}>
From c720a2163c38e7ac08cd130fbba84772ccb582b6 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:38:41 -0600 Subject: [PATCH 028/426] chore: cleanup --- packages/ui/src/components/session-turn.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index a3c87c576dd..556b357c3b8 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -331,7 +331,11 @@ } [data-component="sticky-accordion-header"] { - position: static; + top: var(--sticky-header-height, 40px); + &[data-expanded]::before { + top: calc(-1 * var(--sticky-header-height, 40px)); + } + /* position: static; */ } [data-slot="session-turn-accordion-trigger-content"] { From eb779a7cc5c1728471489a3304a6203716bd4d47 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 10:54:56 -0600 Subject: [PATCH 029/426] chore: cleanup --- packages/ui/src/components/session-turn.css | 13 +++-- packages/ui/src/components/session-turn.tsx | 60 +++++++++++++++++++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index 556b357c3b8..5f8c0a16f6a 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -1,4 +1,6 @@ [data-component="session-turn"] { + --session-turn-sticky-height: 0px; + --sticky-header-height: calc(var(--session-title-height, 0px) + var(--session-turn-sticky-height, 0px) + 12px); /* flex: 1; */ height: 100%; min-height: 0; @@ -44,6 +46,12 @@ } } + [data-slot="session-turn-attachments"] { + width: 100%; + min-width: 0; + align-self: stretch; + } + [data-slot="session-turn-sticky"] { width: calc(100% + 9px); position: sticky; @@ -331,11 +339,10 @@ } [data-component="sticky-accordion-header"] { - top: var(--sticky-header-height, 40px); + top: var(--sticky-header-height, 0px); &[data-expanded]::before { - top: calc(-1 * var(--sticky-header-height, 40px)); + top: calc(-1 * var(--sticky-header-height, 0px)); } - /* position: static; */ } [data-slot="session-turn-accordion-trigger-content"] { diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index e5fe4ba1ce8..a918f0ae4fd 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -1,5 +1,6 @@ import { AssistantMessage, + FilePart, Message as MessageType, Part as PartType, type PermissionRequest, @@ -29,6 +30,7 @@ import { Spinner } from "./spinner" import { createStore } from "solid-js/store" import { DateTime, DurationUnit, Interval } from "luxon" import { createAutoScroll } from "../hooks" +import { createResizeObserver } from "@solid-primitives/resize-observer" function computeStatusFromPart(part: PartType | undefined): string | undefined { if (!part) return undefined @@ -75,6 +77,12 @@ function same(a: readonly T[], b: readonly T[]) { return a.every((x, i) => x === b[i]) } +function isAttachment(part: PartType | undefined) { + if (part?.type !== "file") return false + const mime = (part as FilePart).mime ?? "" + return mime.startsWith("image/") || mime === "application/pdf" +} + function AssistantMessageItem(props: { message: AssistantMessage responsePartId: string | undefined @@ -133,6 +141,7 @@ export function SessionTurn( const emptyMessages: MessageType[] = [] const emptyParts: PartType[] = [] + const emptyFiles: FilePart[] = [] const emptyAssistant: AssistantMessage[] = [] const emptyPermissions: PermissionRequest[] = [] const emptyPermissionParts: { part: ToolPart; message: AssistantMessage }[] = [] @@ -180,6 +189,19 @@ export function SessionTurn( return data.store.part[msg.id] ?? emptyParts }) + const attachmentParts = createMemo(() => { + const msgParts = parts() + if (msgParts.length === 0) return emptyFiles + return msgParts.filter((part) => isAttachment(part)) as FilePart[] + }) + + const stickyParts = createMemo(() => { + const msgParts = parts() + if (msgParts.length === 0) return emptyParts + if (attachmentParts().length === 0) return msgParts + return msgParts.filter((part) => !isAttachment(part)) + }) + const assistantMessages = createMemo( () => { const msg = message() @@ -331,6 +353,15 @@ export function SessionTurn( const hideResponsePart = createMemo(() => !working() && !!responsePartId()) const [responseCopied, setResponseCopied] = createSignal(false) + const [rootRef, setRootRef] = createSignal() + const [stickyRef, setStickyRef] = createSignal() + + const updateStickyHeight = (height: number) => { + const root = rootRef() + if (!root) return + const next = Math.ceil(height) + root.style.setProperty("--session-turn-sticky-height", `${next}px`) + } const handleCopyResponse = async () => { const content = response() if (!content) return @@ -361,6 +392,24 @@ export function SessionTurn( onUserInteracted: props.onUserInteracted, }) + createResizeObserver( + () => stickyRef(), + ({ height }) => { + updateStickyHeight(height) + }, + ) + + createEffect(() => { + const root = rootRef() + if (!root) return + const sticky = stickyRef() + if (!sticky) { + root.style.setProperty("--session-turn-sticky-height", "0px") + return + } + updateStickyHeight(sticky.getBoundingClientRect().height) + }) + const diffInit = 20 const diffBatch = 20 @@ -438,7 +487,7 @@ export function SessionTurn( }) return ( -
+
-
+ 0}> +
+ +
+
+
{/* User Message */}
- +
{/* Trigger (sticky) */} From c7f0cb3d2d516e1a4673df1cf5be4ee983a78bfb Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 19 Jan 2026 15:20:28 +0000 Subject: [PATCH 030/426] fix: remove focus outline from dropdown menu --- packages/ui/src/components/dropdown-menu.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/ui/src/components/dropdown-menu.css b/packages/ui/src/components/dropdown-menu.css index d2dc03c500e..cba041613ea 100644 --- a/packages/ui/src/components/dropdown-menu.css +++ b/packages/ui/src/components/dropdown-menu.css @@ -11,6 +11,11 @@ z-index: 50; transform-origin: var(--kb-menu-content-transform-origin); + &:focus, + &:focus-visible { + outline: none; + } + &[data-closed] { animation: dropdown-menu-close 0.15s ease-out; } From 89be504abcb74093342e1ead17d0b7bce5a44ba8 Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 19 Jan 2026 15:43:50 +0000 Subject: [PATCH 031/426] update: align edit project dialog padding and avatar styles --- .../app/src/components/dialog-edit-project.tsx | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 2f0f7db1f68..8160821b226 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -78,7 +78,7 @@ export function DialogEditProject(props: { project: LocalProject }) { return ( -
+
( )} From e12b94d91aee643dc04048a11412cd2a88bddd9e Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 19 Jan 2026 15:45:13 +0000 Subject: [PATCH 032/426] update: adjust edit project icon helper text --- packages/app/src/components/dialog-edit-project.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 8160821b226..a2a0ba9db6c 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -130,9 +130,8 @@ export function DialogEditProject(props: { project: LocalProject }) {
-
- Click or drag an image - Recommended: 128x128px +
+ Recommended size 128x128px
From 494e8d5be94c72950476027d08fc6a2faafb5f94 Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 19 Jan 2026 15:57:47 +0000 Subject: [PATCH 033/426] update: tweak edit project icon container --- packages/app/src/components/dialog-edit-project.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index a2a0ba9db6c..d47dd9dcc40 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -94,10 +94,11 @@ export function DialogEditProject(props: { project: LocalProject }) {
Date: Mon, 19 Jan 2026 15:59:11 +0000 Subject: [PATCH 034/426] update: constrain edit project dialog width --- packages/app/src/components/dialog-edit-project.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index d47dd9dcc40..81ceb305db7 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -77,7 +77,7 @@ export function DialogEditProject(props: { project: LocalProject }) { } return ( - +
Date: Mon, 19 Jan 2026 16:00:21 +0000 Subject: [PATCH 035/426] update: tighten edit project color spacing --- packages/app/src/components/dialog-edit-project.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 81ceb305db7..f6e07df6078 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -140,7 +140,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
-
+
{(color) => ( - +
+ +
+
+ +
diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index 2d680b28bbb..98f96c8e802 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -64,6 +64,8 @@ const icons = { help: ``, "settings-gear": ``, dash: ``, + "cloud-upload": ``, + trash: ``, } export interface IconProps extends ComponentProps<"svg"> { From b72a00eaa32e0655d6292ff5f3f79f0ce9231420 Mon Sep 17 00:00:00 2001 From: David Hill Date: Mon, 19 Jan 2026 17:10:18 +0000 Subject: [PATCH 037/426] fix text field border showing through focus ring --- packages/ui/src/components/text-field.css | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ui/src/components/text-field.css b/packages/ui/src/components/text-field.css index a739c4eb21a..15f5fd4fbb1 100644 --- a/packages/ui/src/components/text-field.css +++ b/packages/ui/src/components/text-field.css @@ -52,6 +52,7 @@ background: var(--input-base); &:focus-within { + border-color: transparent; /* border/shadow-xs/select */ box-shadow: 0 0 0 3px var(--border-weak-selected), From dd0906be8c52d460d856ed4cf89e5fe193aa06db Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 19 Jan 2026 11:21:54 -0600 Subject: [PATCH 038/426] tweak: apply patch description --- packages/opencode/src/tool/apply_patch.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/tool/apply_patch.txt b/packages/opencode/src/tool/apply_patch.txt index e195cd9cb18..5b2d95608c5 100644 --- a/packages/opencode/src/tool/apply_patch.txt +++ b/packages/opencode/src/tool/apply_patch.txt @@ -1,4 +1,4 @@ -Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON. Your patch language is a stripped‑down, file‑oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high‑level envelope: +Use the `apply_patch` tool to edit files. Your patch language is a stripped‑down, file‑oriented diff format designed to be easy to parse and safe to apply. You can think of it as a high‑level envelope: *** Begin Patch [ one or more file sections ] From fc50b2962c24dc37fa131759cd56460fbc1f43fa Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 11:28:18 -0600 Subject: [PATCH 039/426] fix(app): make terminal sessions scoped to workspace --- packages/app/src/context/terminal.tsx | 57 ++++++++++++++++----------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index a7753069cf9..709d7b899ac 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -25,11 +25,11 @@ type TerminalCacheEntry = { dispose: VoidFunction } -function createTerminalSession(sdk: ReturnType, dir: string, id: string | undefined) { - const legacy = `${dir}/terminal${id ? "/" + id : ""}.v1` +function createTerminalSession(sdk: ReturnType, dir: string, session?: string) { + const legacy = session ? [`${dir}/terminal/${session}.v1`, `${dir}/terminal.v1`] : [`${dir}/terminal.v1`] const [store, setStore, _, ready] = persisted( - Persist.scoped(dir, id, "terminal", [legacy]), + Persist.workspace(dir, "terminal", legacy), createStore<{ active?: string all: LocalPTY[] @@ -43,17 +43,28 @@ function createTerminalSession(sdk: ReturnType, dir: string, id: all: createMemo(() => Object.values(store.all)), active: createMemo(() => store.active), new() { + const parse = (title: string) => { + const match = title.match(/^Terminal (\d+)$/) + if (!match) return + const value = Number(match[1]) + if (!Number.isFinite(value) || value <= 0) return + return value + } + const existingTitleNumbers = new Set( - store.all.map((pty) => { - const match = pty.titleNumber - return match + store.all.flatMap((pty) => { + const direct = Number.isFinite(pty.titleNumber) && pty.titleNumber > 0 ? pty.titleNumber : undefined + if (direct !== undefined) return [direct] + const parsed = parse(pty.title) + if (parsed === undefined) return [] + return [parsed] }), ) - let nextNumber = 1 - while (existingTitleNumbers.has(nextNumber)) { - nextNumber++ - } + const nextNumber = + Array.from({ length: existingTitleNumbers.size + 1 }, (_, index) => index + 1).find( + (number) => !existingTitleNumbers.has(number), + ) ?? 1 sdk.client.pty .create({ title: `Terminal ${nextNumber}` }) @@ -166,8 +177,8 @@ export const { use: useTerminal, provider: TerminalProvider } = createSimpleCont } } - const load = (dir: string, id: string | undefined) => { - const key = `${dir}:${id ?? WORKSPACE_KEY}` + const load = (dir: string, session?: string) => { + const key = `${dir}:${WORKSPACE_KEY}` const existing = cache.get(key) if (existing) { cache.delete(key) @@ -176,7 +187,7 @@ export const { use: useTerminal, provider: TerminalProvider } = createSimpleCont } const entry = createRoot((dispose) => ({ - value: createTerminalSession(sdk, dir, id), + value: createTerminalSession(sdk, dir, session), dispose, })) @@ -185,18 +196,18 @@ export const { use: useTerminal, provider: TerminalProvider } = createSimpleCont return entry.value } - const session = createMemo(() => load(params.dir!, params.id)) + const workspace = createMemo(() => load(params.dir!, params.id)) return { - ready: () => session().ready(), - all: () => session().all(), - active: () => session().active(), - new: () => session().new(), - update: (pty: Partial & { id: string }) => session().update(pty), - clone: (id: string) => session().clone(id), - open: (id: string) => session().open(id), - close: (id: string) => session().close(id), - move: (id: string, to: number) => session().move(id, to), + ready: () => workspace().ready(), + all: () => workspace().all(), + active: () => workspace().active(), + new: () => workspace().new(), + update: (pty: Partial & { id: string }) => workspace().update(pty), + clone: (id: string) => workspace().clone(id), + open: (id: string) => workspace().open(id), + close: (id: string) => workspace().close(id), + move: (id: string, to: number) => workspace().move(id, to), } }, }) From 092428633fe05b33c26a94549d6e65d2235da514 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 11:44:20 -0600 Subject: [PATCH 040/426] fix(app): layout jumping --- packages/ui/src/components/list.tsx | 38 ++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index b8a8f746072..874638c5a51 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -35,6 +35,25 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) mouseActive: false, }) + const scrollIntoView = (container: HTMLDivElement, node: HTMLElement, block: "center" | "nearest") => { + const containerRect = container.getBoundingClientRect() + const nodeRect = node.getBoundingClientRect() + const top = nodeRect.top - containerRect.top + container.scrollTop + const bottom = top + nodeRect.height + const viewTop = container.scrollTop + const viewBottom = viewTop + container.clientHeight + const target = + block === "center" + ? top - container.clientHeight / 2 + nodeRect.height / 2 + : top < viewTop + ? top + : bottom > viewBottom + ? bottom - container.clientHeight + : viewTop + const max = Math.max(0, container.scrollHeight - container.clientHeight) + container.scrollTop = Math.max(0, Math.min(target, max)) + } + const { filter, grouped, flat, active, setActive, onKeyDown, onInput } = useFilteredList(props) const searchProps = () => (typeof props.search === "object" ? props.search : {}) @@ -65,24 +84,31 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) ) createEffect(() => { - if (!scrollRef()) return + const scroll = scrollRef() + if (!scroll) return if (!props.current) return const key = props.key(props.current) requestAnimationFrame(() => { - const element = scrollRef()?.querySelector(`[data-key="${CSS.escape(key)}"]`) - element?.scrollIntoView({ block: "center" }) + const element = scroll.querySelector(`[data-key="${CSS.escape(key)}"]`) + if (!(element instanceof HTMLElement)) return + scrollIntoView(scroll, element, "center") }) }) createEffect(() => { const all = flat() if (store.mouseActive || all.length === 0) return + const scroll = scrollRef() + if (!scroll) return if (active() === props.key(all[0])) { - scrollRef()?.scrollTo(0, 0) + scroll.scrollTo(0, 0) return } - const element = scrollRef()?.querySelector(`[data-key="${CSS.escape(active()!)}"]`) - element?.scrollIntoView({ block: "center" }) + const key = active() + if (!key) return + const element = scroll.querySelector(`[data-key="${CSS.escape(key)}"]`) + if (!(element instanceof HTMLElement)) return + scrollIntoView(scroll, element, "center") }) createEffect(() => { From 3fd0043d1907b0e565cee73fff0f4725f7c8c0d5 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 19 Jan 2026 12:18:17 -0600 Subject: [PATCH 041/426] chore: handle fields other than reasoning_content in interleaved block --- packages/opencode/src/provider/transform.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index f6b7ec8cbcc..c983bf32c4f 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -123,11 +123,8 @@ export namespace ProviderTransform { return result } - if ( - model.capabilities.interleaved && - typeof model.capabilities.interleaved === "object" && - model.capabilities.interleaved.field === "reasoning_content" - ) { + if (typeof model.capabilities.interleaved === "object" && model.capabilities.interleaved.field) { + const field = model.capabilities.interleaved.field return msgs.map((msg) => { if (msg.role === "assistant" && Array.isArray(msg.content)) { const reasoningParts = msg.content.filter((part: any) => part.type === "reasoning") @@ -136,7 +133,7 @@ export namespace ProviderTransform { // Filter out reasoning parts from content const filteredContent = msg.content.filter((part: any) => part.type !== "reasoning") - // Include reasoning_content directly on the message for all assistant messages + // Include reasoning_content | reasoning_details directly on the message for all assistant messages if (reasoningText) { return { ...msg, @@ -145,7 +142,7 @@ export namespace ProviderTransform { ...msg.providerOptions, openaiCompatible: { ...(msg.providerOptions as any)?.openaiCompatible, - reasoning_content: reasoningText, + [field]: reasoningText, }, }, } From c2f9fd5fef5454a1e7cedab14d78267809d10fe9 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 12:44:35 -0600 Subject: [PATCH 042/426] fix(app): reload instance after workspace reset --- packages/app/src/components/prompt-input.tsx | 11 ++++- packages/app/src/pages/layout.tsx | 49 ++++++++++++-------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 2f85652a93e..c74edd94e6b 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1056,7 +1056,16 @@ export const PromptInput: Component = (props) => { let session = info() if (!session && isNewSession) { - session = await client.session.create().then((x) => x.data ?? undefined) + session = await client.session + .create() + .then((x) => x.data ?? undefined) + .catch((err) => { + showToast({ + title: "Failed to create session", + description: errorMessage(err), + }) + return undefined + }) if (session) navigate(`/${base64Encode(sessionDirectory)}/session/${session.id}`) } if (!session) return diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 5312ff0a2ab..81177d1386d 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -965,10 +965,23 @@ export default function Layout(props: ParentProps) { if (!current) return if (directory === current.worktree) return - const reset = globalSDK.client.worktree + const progress = showToast({ + persistent: true, + title: "Resetting workspace", + description: "This may take a minute.", + }) + const dismiss = () => toaster.dismiss(progress) + + const sessions = await globalSDK.client.session + .list({ directory }) + .then((x) => x.data ?? []) + .catch(() => []) + + const result = await globalSDK.client.worktree .reset({ directory: current.worktree, worktreeResetInput: { directory } }) .then((x) => x.data) .catch((err) => { + dismiss() showToast({ title: "Failed to reset workspace", description: errorMessage(err), @@ -976,21 +989,16 @@ export default function Layout(props: ParentProps) { return false }) - const href = `/${base64Encode(directory)}/session` - navigate(href) - layout.mobileSidebar.hide() - - void (async () => { - const sessions = await globalSDK.client.session - .list({ directory }) - .then((x) => x.data ?? []) - .catch(() => []) - - if (sessions.length === 0) return + if (!result) { + dismiss() + return + } - const archivedAt = Date.now() - await Promise.all( - sessions.map((session) => + const archivedAt = Date.now() + await Promise.all( + sessions + .filter((session) => session.time.archived === undefined) + .map((session) => globalSDK.client.session .update({ sessionID: session.id, @@ -999,11 +1007,14 @@ export default function Layout(props: ParentProps) { }) .catch(() => undefined), ), - ) - })() + ) - const result = await reset - if (!result) return + await globalSDK.client.instance.dispose({ directory }).catch(() => undefined) + dismiss() + + const href = `/${base64Encode(directory)}/session` + navigate(href) + layout.mobileSidebar.hide() showToast({ title: "Workspace reset", From c47699536fe9742cf5aa37f2c51168abeb90cb8d Mon Sep 17 00:00:00 2001 From: Ariane Emory <97994360+ariane-emory@users.noreply.github.com> Date: Mon, 19 Jan 2026 14:56:24 -0500 Subject: [PATCH 043/426] fix: Don't unnecessarily wrap lines and introduce an unneeded empty line (resolves #9489) (#9488) --- packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx index 5c37a493dfa..a8671f46699 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx @@ -337,6 +337,7 @@ function Option(props: { fg={props.active ? fg : props.current ? theme.primary : theme.text} attributes={props.active ? TextAttributes.BOLD : undefined} overflow="hidden" + wrapMode="none" paddingLeft={3} > {Locale.truncate(props.title, 61)} From 889c60d63b585a276080f20c40c2d73ff715ea94 Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Mon, 19 Jan 2026 15:04:59 -0500 Subject: [PATCH 044/426] fix(web): rename favicons to v2 for cache busting (#9492) --- packages/app/index.html | 8 ++--- packages/app/public/apple-touch-icon-v2.png | 1 + packages/app/public/favicon-96x96-v2.png | 1 + packages/app/public/favicon-v2.ico | 1 + packages/app/public/favicon-v2.svg | 1 + packages/app/src/entry.tsx | 2 +- packages/app/src/pages/layout.tsx | 2 +- packages/console/function/src/auth.ts | 2 +- packages/desktop/index.html | 8 ++--- packages/desktop/src/index.tsx | 2 +- packages/docs/docs.json | 2 +- packages/docs/favicon-v2.svg | 19 ++++++++++++ .../assets/favicon/apple-touch-icon-v2.png | Bin 0 -> 1541 bytes .../src/assets/favicon/favicon-96x96-v2.png | Bin 0 -> 536 bytes packages/ui/src/assets/favicon/favicon-v2.ico | Bin 0 -> 15086 bytes packages/ui/src/assets/favicon/favicon-v2.svg | 7 +++++ packages/ui/src/components/favicon.tsx | 6 ++-- packages/web/astro.config.mjs | 28 ++++++++++++++++++ packages/web/public/apple-touch-icon-v2.png | 1 + packages/web/public/favicon-96x96-v2.png | 1 + packages/web/public/favicon-v2.ico | 1 + packages/web/public/favicon-v2.svg | 1 + 22 files changed, 78 insertions(+), 16 deletions(-) create mode 120000 packages/app/public/apple-touch-icon-v2.png create mode 120000 packages/app/public/favicon-96x96-v2.png create mode 120000 packages/app/public/favicon-v2.ico create mode 120000 packages/app/public/favicon-v2.svg create mode 100644 packages/docs/favicon-v2.svg create mode 100644 packages/ui/src/assets/favicon/apple-touch-icon-v2.png create mode 100644 packages/ui/src/assets/favicon/favicon-96x96-v2.png create mode 100644 packages/ui/src/assets/favicon/favicon-v2.ico create mode 100644 packages/ui/src/assets/favicon/favicon-v2.svg create mode 120000 packages/web/public/apple-touch-icon-v2.png create mode 120000 packages/web/public/favicon-96x96-v2.png create mode 120000 packages/web/public/favicon-v2.ico create mode 120000 packages/web/public/favicon-v2.svg diff --git a/packages/app/index.html b/packages/app/index.html index 450807a42e0..1e516cbbb1d 100644 --- a/packages/app/index.html +++ b/packages/app/index.html @@ -4,10 +4,10 @@ OpenCode - - - - + + + + diff --git a/packages/app/public/apple-touch-icon-v2.png b/packages/app/public/apple-touch-icon-v2.png new file mode 120000 index 00000000000..c0d4353db47 --- /dev/null +++ b/packages/app/public/apple-touch-icon-v2.png @@ -0,0 +1 @@ +../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file diff --git a/packages/app/public/favicon-96x96-v2.png b/packages/app/public/favicon-96x96-v2.png new file mode 120000 index 00000000000..b3129f6bf91 --- /dev/null +++ b/packages/app/public/favicon-96x96-v2.png @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file diff --git a/packages/app/public/favicon-v2.ico b/packages/app/public/favicon-v2.ico new file mode 120000 index 00000000000..d8527270af6 --- /dev/null +++ b/packages/app/public/favicon-v2.ico @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file diff --git a/packages/app/public/favicon-v2.svg b/packages/app/public/favicon-v2.svg new file mode 120000 index 00000000000..2600394ceae --- /dev/null +++ b/packages/app/public/favicon-v2.svg @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index 28741098c8e..8c4662926ad 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -37,7 +37,7 @@ const platform: Platform = { .then(() => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96.png", + icon: "https://opencode.ai/favicon-96x96-v2.png", }) notification.onclick = () => { window.focus() diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 81177d1386d..2f3b39d8628 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1284,7 +1284,7 @@ export default function Layout(props: ParentProps) {
OpenCode - - - - + + + + diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index 6cd77d7d557..a06270b13fe 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -253,7 +253,7 @@ const createPlatform = (password: Accessor): Platform => ({ .then(() => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96.png", + icon: "https://opencode.ai/favicon-96x96-v2.png", }) notification.onclick = () => { const win = getCurrentWindow() diff --git a/packages/docs/docs.json b/packages/docs/docs.json index 4461f8253b7..93dff10f8c2 100644 --- a/packages/docs/docs.json +++ b/packages/docs/docs.json @@ -7,7 +7,7 @@ "light": "#07C983", "dark": "#15803D" }, - "favicon": "/favicon.svg", + "favicon": "/favicon-v2.svg", "navigation": { "tabs": [ { diff --git a/packages/docs/favicon-v2.svg b/packages/docs/favicon-v2.svg new file mode 100644 index 00000000000..b785c738bf1 --- /dev/null +++ b/packages/docs/favicon-v2.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/ui/src/assets/favicon/apple-touch-icon-v2.png b/packages/ui/src/assets/favicon/apple-touch-icon-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..70fd01b0ea38ea8b3d0429a6438f5b8e85aba94a GIT binary patch literal 1541 zcmaJ>eKb^Q7{4Ur0=8rcXMfNrMx!Z`2J5r}m{7q=oI5Z4;q`f(Bo2BGNsu z_o*M^xIMiCe~;%%@XdW@9C6U|=3EF(Xy3J&Mnv)+onDt<%fnSpp|orWz33X39|qvAImHaraYT6ua6s5eeo7(qmH2LMX#~Pu2;Tnp)=eVBAS5%uY|{(3wuB zAapme=5QR?*2MU+i^ao>T30eu5Zd{wQ@+ZGno1dH3BTocen+^M)MNL^v8uk#$Zq?I z%@%6)NV%y0;oD~kM$#S1?GRjgwP!pQ{x`l^OZ@Y-Sb<3otdEN&B0Gw!W}D2I@{l2u zuwn>3!;aHkC&9xO4Yv!~RpprP?wSlwBI39;_4!?-dnmpw?!Q=fcUHoZd-O?O@D$h* z=K60K1pZXi%Q6$dLa4UWf-c&ORa8`Hrl;5SPRgF&Q|Ccw(z0?*!*ML*@LQ+JW*hD? z?2vx^2D4PXwiOfte^e8Al1$(yFq5Bs%ER5I;%cyvNtNy-14|BNmk*%)-+J>w&c+K* zW&AZr?A1wdT(c&ASOJ96+iQQ)0*#~_viFD-7&-Fs-ZXFmEm^+iZ{yhneh(>TdI0q1 zphvmNM}e(UhHh{p@bicBH8DVEei4QF{>+VWB|@NSEyiUGGldQ^HRWMybq+#oPK!0uXpM50A2a#48$6R-P=pz-9TF_%;W)Wir+`pO z;&-{gD-Y?eIszbgl4xEEB)ld$b}mzG+8CiJvNPw%n)GWv#32?OS;Zv~kk3xHn{&b| zE}4Ibb)U&^ePw0=+`*3yIV#4D9X`1)`WssZ;sKSF^R_e95r8e<4G#X6TGF;U2gwt) zKDZ1cGYrlbdhM?EJiL7E{(8`j%3;MHDxlY(61Om5hyb@Ik-@-yk4tU@fFAj*wDAVH z-*y$fV-fi0zyIZ*;8}->ds25n1QnR7434S=nsQtG(gg;+2t=G8gLy*FJ7|SKsNwRR ztp>l{!s@~ZOy7fcw+>K3a) z2t9JGBVr0PnAp|meV%Gu3p!47j_uJa=@{{jVjoU;G` literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/favicon/favicon-96x96-v2.png b/packages/ui/src/assets/favicon/favicon-96x96-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..15266d28f159a74d5c54634d1b3ef548e97f6c8c GIT binary patch literal 536 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7Ro>U_9&T;uuoF_-2kH*C7W17V-E6 zFXn$)Jn1}VWz)Rk!VA93%@(%Up4f0XPqg-HiS7LRa(xF^{&eKjU^sez7Ly2raKq!= z2Brk2f<3$e3_c8f+ZnkSICw-dnG+r;>$uDw$0;LPsnB{na7mCjKzib*uaihe}mzNs&#KTgN`2~7sCBeS(pZpU>|VHo`hk0|4|7)d1$)nnOUS-2?|0x9zfA3XrUYknTj~WYE{IAqoDKnpTg@KE zlmGwSOe(+SALH)78&qol`;+06E9QCjbBd literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/favicon/favicon-v2.ico b/packages/ui/src/assets/favicon/favicon-v2.ico new file mode 100644 index 0000000000000000000000000000000000000000..34ca0b9c01b23ca30f64ed17bd0705bb08cca4b1 GIT binary patch literal 15086 zcmeHOK~BRk5L`qb5Qz`ug4APAoOwpYiDO^FTX+>;32UH|yXxAWdV|$=ELq9glikTM zu~I9DJjkQ$cB02wKA%NiL}Z@-;z{I7$0j|d`NKx!LjhaG=q2*5J&k*9nw}PRYCsRr z1M~nraO)meR&HzSw=(_J-v!9OtN{H}UW3c(_0Nvdf4_fQknY_n`CsNAMEivG8uh3C zEncF3%0BU)BTu&$&2x;G$EzDP?$yn?wVZo-qIi0Fyt*x%bBveAs~a`$)y=uJoO^kq zczSufx-Fb@jF-o&8#NwPH!2T$Ur}|V@{s?plB0AORhRyWeSh%uM8{D-pm>xIibwgN zc$5!{NBN+5ln;tW`Ji}|4~j?mpm>xIibwenf7v=r-KZNqKo8IZV?E$~7sT=ZQ6PP% zHEVy>&hNCwJ_}rnu2+BbJ>TMc|MoT?8nb?%_pILeUiZ0ki;vd-T+Mup^-mR`{`7y3 z2Tt9zRKH_G@ilH}J`~UT<>$ldiN-a3Yx8J5i?8Lc&D(rvT+3gZN9$R9EkEbW{--{- zt&eUG3~gzjLjT3=XRqR(_9^T-W#ig&XYn>}y*~f#kj{_oUaq(IiQa$j^~ZYlX!F|G N;%#j4*B + + + + \ No newline at end of file diff --git a/packages/ui/src/components/favicon.tsx b/packages/ui/src/components/favicon.tsx index 3462384d458..abb0e1f78c6 100644 --- a/packages/ui/src/components/favicon.tsx +++ b/packages/ui/src/components/favicon.tsx @@ -3,9 +3,9 @@ import { Link, Meta } from "@solidjs/meta" export const Favicon = () => { return ( <> - - - + + + diff --git a/packages/web/astro.config.mjs b/packages/web/astro.config.mjs index 99a1c3bd80c..9be189cede8 100644 --- a/packages/web/astro.config.mjs +++ b/packages/web/astro.config.mjs @@ -32,6 +32,34 @@ export default defineConfig({ solidJs(), starlight({ title: "OpenCode", + favicon: "/favicon-v2.svg", + head: [ + { + tag: "link", + attrs: { + rel: "icon", + href: "/favicon-v2.ico", + sizes: "32x32", + }, + }, + { + tag: "link", + attrs: { + rel: "icon", + type: "image/png", + href: "/favicon-96x96-v2.png", + sizes: "96x96", + }, + }, + { + tag: "link", + attrs: { + rel: "apple-touch-icon", + href: "/apple-touch-icon-v2.png", + sizes: "180x180", + }, + }, + ], lastUpdated: true, expressiveCode: { themes: ["github-light", "github-dark"] }, social: [ diff --git a/packages/web/public/apple-touch-icon-v2.png b/packages/web/public/apple-touch-icon-v2.png new file mode 120000 index 00000000000..c0d4353db47 --- /dev/null +++ b/packages/web/public/apple-touch-icon-v2.png @@ -0,0 +1 @@ +../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file diff --git a/packages/web/public/favicon-96x96-v2.png b/packages/web/public/favicon-96x96-v2.png new file mode 120000 index 00000000000..b3129f6bf91 --- /dev/null +++ b/packages/web/public/favicon-96x96-v2.png @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file diff --git a/packages/web/public/favicon-v2.ico b/packages/web/public/favicon-v2.ico new file mode 120000 index 00000000000..d8527270af6 --- /dev/null +++ b/packages/web/public/favicon-v2.ico @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file diff --git a/packages/web/public/favicon-v2.svg b/packages/web/public/favicon-v2.svg new file mode 120000 index 00000000000..2600394ceae --- /dev/null +++ b/packages/web/public/favicon-v2.svg @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file From c3393ecc6c0a1482669b945e109af1d98f25a5ee Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Mon, 19 Jan 2026 21:16:25 +0100 Subject: [PATCH 045/426] fix(app): give feedback when trying to paste a unsupported filetype (#9452) --- packages/app/src/components/prompt-input.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index c74edd94e6b..56bbdc8cb55 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -300,7 +300,8 @@ export const PromptInput: Component = (props) => { event.stopPropagation() const items = Array.from(clipboardData.items) - const imageItems = items.filter((item) => ACCEPTED_FILE_TYPES.includes(item.type)) + const fileItems = items.filter((item) => item.kind === "file") + const imageItems = fileItems.filter((item) => ACCEPTED_FILE_TYPES.includes(item.type)) if (imageItems.length > 0) { for (const item of imageItems) { @@ -310,7 +311,16 @@ export const PromptInput: Component = (props) => { return } + if (fileItems.length > 0) { + showToast({ + title: "Unsupported paste", + description: "Only images or PDFs can be pasted here.", + }) + return + } + const plainText = clipboardData.getData("text/plain") ?? "" + if (!plainText) return addPart({ type: "text", content: plainText, start: 0, end: 0 }) } From d19e76d96c7316dffb1bca1593fcc80bcdc0a9ff Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Mon, 19 Jan 2026 21:43:32 +0100 Subject: [PATCH 046/426] fix: keyboard nav when mouse hovered over list (#9500) --- packages/ui/src/components/list.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index 874638c5a51..6929f6b7347 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -58,6 +58,8 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) const searchProps = () => (typeof props.search === "object" ? props.search : {}) + const moved = (event: MouseEvent) => event.movementX !== 0 || event.movementY !== 0 + createEffect(() => { if (props.filter !== undefined) { onInput(props.filter) @@ -227,7 +229,8 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) data-selected={item === props.current} onClick={() => handleSelect(item, i())} type="button" - onMouseMove={() => { + onMouseMove={(event) => { + if (!moved(event)) return setStore("mouseActive", true) setActive(props.key(item)) }} From 091e88c1e157c53552e215efd05122ddd973de4f Mon Sep 17 00:00:00 2001 From: Joseph Campuzano Date: Mon, 19 Jan 2026 14:46:17 -0600 Subject: [PATCH 047/426] fix(opencode): sets input mode based on whether mouse vs keyboard is in use to prevent mouse events firing (#9449) --- .../cmd/tui/component/prompt/autocomplete.tsx | 23 ++++++++++++++++++- .../src/cli/cmd/tui/ui/dialog-select.tsx | 21 +++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx index e27c32dfb2e..b6ca88410c8 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -85,6 +85,7 @@ export function Autocomplete(props: { index: 0, selected: 0, visible: false as AutocompleteRef["visible"], + input: "keyboard" as "keyboard" | "mouse", }) const [positionTick, setPositionTick] = createSignal(0) @@ -128,6 +129,14 @@ export function Autocomplete(props: { return props.input().getTextRange(store.index + 1, props.input().cursorOffset) }) + // When the filter changes due to how TUI works, the mousemove might still be triggered + // via a synthetic event as the layout moves underneath the cursor. This is a workaround to make sure the input mode remains keyboard so + // that the mouseover event doesn't trigger when filtering. + createEffect(() => { + filter(); + setStore("input", "keyboard") + }) + function insertPart(text: string, part: PromptInfo["parts"][number]) { const input = props.input() const currentCursorOffset = input.cursorOffset @@ -525,11 +534,13 @@ export function Autocomplete(props: { const isNavDown = name === "down" || (ctrlOnly && name === "n") if (isNavUp) { + setStore("input", "keyboard") move(-1) e.preventDefault() return } if (isNavDown) { + setStore("input", "keyboard") move(1) e.preventDefault() return @@ -612,7 +623,17 @@ export function Autocomplete(props: { paddingRight={1} backgroundColor={index === store.selected ? theme.primary : undefined} flexDirection="row" - onMouseOver={() => moveTo(index)} + onMouseMove={() => { + setStore("input", "mouse") + }} + onMouseOver={() => { + if (store.input !== "mouse") return + moveTo(index) + }} + onMouseDown={() => { + setStore("input", "mouse") + moveTo(index) + }} onMouseUp={() => select()} > diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx index a8671f46699..f7c2fed85c7 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx @@ -52,6 +52,7 @@ export function DialogSelect(props: DialogSelectProps) { const [store, setStore] = createStore({ selected: 0, filter: "", + input: "keyboard" as "keyboard" | "mouse", }) createEffect( @@ -83,6 +84,14 @@ export function DialogSelect(props: DialogSelectProps) { return result }) + // When the filter changes due to how TUI works, the mousemove might still be triggered + // via a synthetic event as the layout moves underneath the cursor. This is a workaround to make sure the input mode remains keyboard + // that the mouseover event doesn't trigger when filtering. + createEffect(() => { + filtered(); + setStore("input", "keyboard") + }) + const grouped = createMemo(() => { const result = pipe( filtered(), @@ -157,12 +166,15 @@ export function DialogSelect(props: DialogSelectProps) { const keybind = useKeybind() useKeyboard((evt) => { + setStore("input", "keyboard") + if (evt.name === "up" || (evt.ctrl && evt.name === "p")) move(-1) if (evt.name === "down" || (evt.ctrl && evt.name === "n")) move(1) if (evt.name === "pageup") move(-10) if (evt.name === "pagedown") move(10) if (evt.name === "home") moveTo(0) if (evt.name === "end") moveTo(flat().length - 1) + if (evt.name === "return") { const option = selected() if (option) { @@ -259,11 +271,20 @@ export function DialogSelect(props: DialogSelectProps) { { + setStore("input", "mouse") + }} onMouseUp={() => { option.onSelect?.(dialog) props.onSelect?.(option) }} onMouseOver={() => { + if (store.input !== "mouse") return + const index = flat().findIndex((x) => isDeepEqual(x.value, option.value)) + if (index === -1) return + moveTo(index) + }} + onMouseDown={() => { const index = flat().findIndex((x) => isDeepEqual(x.value, option.value)) if (index === -1) return moveTo(index) From 88c5a7fe9e7b8fd14bc2065051779ffa89789387 Mon Sep 17 00:00:00 2001 From: Ronan Kearns <90280289+kearns-cu@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:46:32 -0500 Subject: [PATCH 048/426] fix(tui): clarify resume session tip (#9490) --- packages/opencode/src/cli/cmd/tui/component/tips.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/tips.tsx b/packages/opencode/src/cli/cmd/tui/component/tips.tsx index fe2e7ca2169..3f0318e2690 100644 --- a/packages/opencode/src/cli/cmd/tui/component/tips.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/tips.tsx @@ -106,7 +106,7 @@ const TIPS = [ "Use plugins to send OS notifications when sessions complete", "Create a plugin to prevent OpenCode from reading sensitive files", "Use {highlight}opencode run{/highlight} for non-interactive scripting", - "Use {highlight}opencode run --continue{/highlight} to resume the last session", + "Use {highlight}opencode --continue{/highlight} to resume the last session", "Use {highlight}opencode run -f file.ts{/highlight} to attach files via CLI", "Use {highlight}--format json{/highlight} for machine-readable output in scripts", "Run {highlight}opencode serve{/highlight} for headless API access to OpenCode", From e29120317f8820a86054bb20e8982f0947fa03cd Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 19 Jan 2026 20:47:09 +0000 Subject: [PATCH 049/426] chore: generate --- .../opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx | 2 +- packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx index b6ca88410c8..718929d445b 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/autocomplete.tsx @@ -133,7 +133,7 @@ export function Autocomplete(props: { // via a synthetic event as the layout moves underneath the cursor. This is a workaround to make sure the input mode remains keyboard so // that the mouseover event doesn't trigger when filtering. createEffect(() => { - filter(); + filter() setStore("input", "keyboard") }) diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx index f7c2fed85c7..618bf3b3cb6 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog-select.tsx @@ -88,7 +88,7 @@ export function DialogSelect(props: DialogSelectProps) { // via a synthetic event as the layout moves underneath the cursor. This is a workaround to make sure the input mode remains keyboard // that the mouseover event doesn't trigger when filtering. createEffect(() => { - filtered(); + filtered() setStore("input", "keyboard") }) From 769c97af086e5edf0efb431e902eceb54dc668cb Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 19 Jan 2026 14:49:51 -0600 Subject: [PATCH 050/426] chore: rm double conditional --- packages/opencode/src/file/ripgrep.ts | 46 +++++++++++++-------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/packages/opencode/src/file/ripgrep.ts b/packages/opencode/src/file/ripgrep.ts index 834cbee1ed1..0d18173565e 100644 --- a/packages/opencode/src/file/ripgrep.ts +++ b/packages/opencode/src/file/ripgrep.ts @@ -162,34 +162,32 @@ export namespace Ripgrep { }) } if (config.extension === "zip") { - if (config.extension === "zip") { - const zipFileReader = new ZipReader(new BlobReader(new Blob([await Bun.file(archivePath).arrayBuffer()]))) - const entries = await zipFileReader.getEntries() - let rgEntry: any - for (const entry of entries) { - if (entry.filename.endsWith("rg.exe")) { - rgEntry = entry - break - } + const zipFileReader = new ZipReader(new BlobReader(new Blob([await Bun.file(archivePath).arrayBuffer()]))) + const entries = await zipFileReader.getEntries() + let rgEntry: any + for (const entry of entries) { + if (entry.filename.endsWith("rg.exe")) { + rgEntry = entry + break } + } - if (!rgEntry) { - throw new ExtractionFailedError({ - filepath: archivePath, - stderr: "rg.exe not found in zip archive", - }) - } + if (!rgEntry) { + throw new ExtractionFailedError({ + filepath: archivePath, + stderr: "rg.exe not found in zip archive", + }) + } - const rgBlob = await rgEntry.getData(new BlobWriter()) - if (!rgBlob) { - throw new ExtractionFailedError({ - filepath: archivePath, - stderr: "Failed to extract rg.exe from zip archive", - }) - } - await Bun.write(filepath, await rgBlob.arrayBuffer()) - await zipFileReader.close() + const rgBlob = await rgEntry.getData(new BlobWriter()) + if (!rgBlob) { + throw new ExtractionFailedError({ + filepath: archivePath, + stderr: "Failed to extract rg.exe from zip archive", + }) } + await Bun.write(filepath, await rgBlob.arrayBuffer()) + await zipFileReader.close() } await fs.unlink(archivePath) if (!platformKey.endsWith("-win32")) await fs.chmod(filepath, 0o755) From ecc51ddb4e8a04495da45126a706a7effee5bf8d Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 14:23:59 -0600 Subject: [PATCH 051/426] fix(app): hash nav --- packages/app/src/pages/layout.tsx | 5 +- packages/app/src/pages/session.tsx | 135 +++++++++++++++++++++++------ 2 files changed, 112 insertions(+), 28 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 2f3b39d8628..a8f9b162fe4 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1429,10 +1429,11 @@ export default function Layout(props: ParentProps) { getLabel={messageLabel} onMessageSelect={(message) => { if (!isActive()) { - navigate(`${props.slug}/session/${props.session.id}#message-${message.id}`) + sessionStorage.setItem("opencode.pendingMessage", `${props.session.id}|${message.id}`) + navigate(`${props.slug}/session/${props.session.id}`) return } - window.location.hash = `message-${message.id}` + window.history.replaceState(null, "", `#message-${message.id}`) window.dispatchEvent(new HashChangeEvent("hashchange")) }} size="normal" diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 31f9eac9c27..fdb9f268cd3 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1,4 +1,4 @@ -import { For, onCleanup, onMount, Show, Match, Switch, createMemo, createEffect, on } from "solid-js" +import { For, onCleanup, onMount, Show, Match, Switch, createMemo, createEffect, on, createSignal } from "solid-js" import { createMediaQuery } from "@solid-primitives/media" import { createResizeObserver } from "@solid-primitives/resize-observer" import { Dynamic } from "solid-js/web" @@ -167,6 +167,7 @@ export default function Page() { const sdk = useSDK() const prompt = usePrompt() const permission = usePermission() + const [pendingMessage, setPendingMessage] = createSignal(undefined) const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const tabs = createMemo(() => layout.tabs(sessionKey())) const view = createMemo(() => layout.view(sessionKey())) @@ -943,17 +944,30 @@ export default function Page() { window.history.replaceState(null, "", `#${anchor(id)}`) } + createEffect(() => { + const sessionID = params.id + if (!sessionID) return + const raw = sessionStorage.getItem("opencode.pendingMessage") + if (!raw) return + const parts = raw.split("|") + const pendingSessionID = parts[0] + const messageID = parts[1] + if (!pendingSessionID || !messageID) return + if (pendingSessionID !== sessionID) return + + sessionStorage.removeItem("opencode.pendingMessage") + setPendingMessage(messageID) + }) + const scrollToElement = (el: HTMLElement, behavior: ScrollBehavior) => { const root = scroller - if (!root) { - el.scrollIntoView({ behavior, block: "start" }) - return - } + if (!root) return false const a = el.getBoundingClientRect() const b = root.getBoundingClientRect() const top = a.top - b.top + root.scrollTop root.scrollTo({ top, behavior }) + return true } const scrollToMessage = (message: UserMessage, behavior: ScrollBehavior = "smooth") => { @@ -967,7 +981,15 @@ export default function Page() { requestAnimationFrame(() => { const el = document.getElementById(anchor(message.id)) - if (el) scrollToElement(el, behavior) + if (!el) { + requestAnimationFrame(() => { + const next = document.getElementById(anchor(message.id)) + if (!next) return + scrollToElement(next, behavior) + }) + return + } + scrollToElement(el, behavior) }) updateHash(message.id) @@ -975,10 +997,57 @@ export default function Page() { } const el = document.getElementById(anchor(message.id)) - if (el) scrollToElement(el, behavior) + if (!el) { + updateHash(message.id) + requestAnimationFrame(() => { + const next = document.getElementById(anchor(message.id)) + if (!next) return + if (!scrollToElement(next, behavior)) return + }) + return + } + if (scrollToElement(el, behavior)) { + updateHash(message.id) + return + } + + requestAnimationFrame(() => { + const next = document.getElementById(anchor(message.id)) + if (!next) return + if (!scrollToElement(next, behavior)) return + }) updateHash(message.id) } + const applyHash = (behavior: ScrollBehavior) => { + const hash = window.location.hash.slice(1) + if (!hash) { + autoScroll.forceScrollToBottom() + return + } + + const match = hash.match(/^message-(.+)$/) + if (match) { + const msg = visibleUserMessages().find((m) => m.id === match[1]) + if (msg) { + scrollToMessage(msg, behavior) + return + } + + // If we have a message hash but the message isn't loaded/rendered yet, + // don't fall back to "bottom". We'll retry once messages arrive. + return + } + + const target = document.getElementById(hash) + if (target) { + scrollToElement(target, behavior) + return + } + + autoScroll.forceScrollToBottom() + } + const getActiveMessageId = (container: HTMLDivElement) => { const cutoff = container.scrollTop + 100 const nodes = container.querySelectorAll("[data-message-id]") @@ -1019,29 +1088,43 @@ export default function Page() { if (!sessionID || !ready) return requestAnimationFrame(() => { - const hash = window.location.hash.slice(1) - if (!hash) { - autoScroll.forceScrollToBottom() - return - } + applyHash("auto") + }) + }) - const hashTarget = document.getElementById(hash) - if (hashTarget) { - scrollToElement(hashTarget, "auto") - return - } + // Retry message navigation once the target message is actually loaded. + createEffect(() => { + const sessionID = params.id + const ready = messagesReady() + if (!sessionID || !ready) return + // dependencies + visibleUserMessages().length + store.turnStart + + const targetId = pendingMessage() ?? (() => { + const hash = window.location.hash.slice(1) const match = hash.match(/^message-(.+)$/) - if (match) { - const msg = visibleUserMessages().find((m) => m.id === match[1]) - if (msg) { - scrollToMessage(msg, "auto") - return - } - } + if (!match) return undefined + return match[1] + })() + if (!targetId) return + if (store.messageId === targetId) return + + const msg = visibleUserMessages().find((m) => m.id === targetId) + if (!msg) return + if (pendingMessage() === targetId) setPendingMessage(undefined) + requestAnimationFrame(() => scrollToMessage(msg, "auto")) + }) - autoScroll.forceScrollToBottom() - }) + createEffect(() => { + const sessionID = params.id + const ready = messagesReady() + if (!sessionID || !ready) return + + const handler = () => requestAnimationFrame(() => applyHash("auto")) + window.addEventListener("hashchange", handler) + onCleanup(() => window.removeEventListener("hashchange", handler)) }) createEffect(() => { From cac35bc52d9a8a2c9ca673510b2266d1c13ee141 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 13:05:49 -0600 Subject: [PATCH 052/426] fix(app): global terminal/review pane toggles --- packages/app/src/context/layout.tsx | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index a8da156092b..a8a8ce1e9fe 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -33,8 +33,6 @@ type SessionTabs = { type SessionView = { scroll: Record reviewOpen?: string[] - terminalOpened?: boolean - reviewPanelOpened?: boolean } export type LocalProject = Partial & { worktree: string; expanded: boolean } @@ -78,9 +76,11 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }, terminal: { height: 280, + opened: false, }, review: { diffStyle: "split" as ReviewDiffStyle, + panelOpened: true, }, session: { width: 600, @@ -172,7 +172,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( const current = store.sessionView[sessionKey] const keep = meta.active ?? sessionKey if (!current) { - setStore("sessionView", sessionKey, { scroll: next, terminalOpened: false, reviewPanelOpened: true }) + setStore("sessionView", sessionKey, { scroll: next }) prune(keep) return } @@ -379,31 +379,31 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( touch(sessionKey) scroll.seed(sessionKey) const s = createMemo(() => store.sessionView[sessionKey] ?? { scroll: {} }) - const terminalOpened = createMemo(() => s().terminalOpened ?? false) - const reviewPanelOpened = createMemo(() => s().reviewPanelOpened ?? true) + const terminalOpened = createMemo(() => store.terminal?.opened ?? false) + const reviewPanelOpened = createMemo(() => store.review?.panelOpened ?? true) function setTerminalOpened(next: boolean) { - const current = store.sessionView[sessionKey] + const current = store.terminal if (!current) { - setStore("sessionView", sessionKey, { scroll: {}, terminalOpened: next, reviewPanelOpened: true }) + setStore("terminal", { height: 280, opened: next }) return } - const value = current.terminalOpened ?? false + const value = current.opened ?? false if (value === next) return - setStore("sessionView", sessionKey, "terminalOpened", next) + setStore("terminal", "opened", next) } function setReviewPanelOpened(next: boolean) { - const current = store.sessionView[sessionKey] + const current = store.review if (!current) { - setStore("sessionView", sessionKey, { scroll: {}, terminalOpened: false, reviewPanelOpened: next }) + setStore("review", { diffStyle: "split" as ReviewDiffStyle, panelOpened: next }) return } - const value = current.reviewPanelOpened ?? true + const value = current.panelOpened ?? true if (value === next) return - setStore("sessionView", sessionKey, "reviewPanelOpened", next) + setStore("review", "panelOpened", next) } return { @@ -444,8 +444,6 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( if (!current) { setStore("sessionView", sessionKey, { scroll: {}, - terminalOpened: false, - reviewPanelOpened: true, reviewOpen: open, }) return From a4d1824412c57d733c33c58e19551f0818c82e8a Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 14:59:41 -0600 Subject: [PATCH 053/426] fix(app): no more favicons --- .../src/components/dialog-edit-project.tsx | 4 +- packages/app/src/context/layout.tsx | 62 ++++++++++++------- packages/app/src/pages/layout.tsx | 2 +- packages/opencode/src/project/project.ts | 4 ++ packages/sdk/js/src/v2/gen/sdk.gen.ts | 1 + packages/sdk/js/src/v2/gen/types.gen.ts | 2 + 6 files changed, 51 insertions(+), 24 deletions(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 091f00702f3..7acb766f808 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -22,7 +22,7 @@ export function DialogEditProject(props: { project: LocalProject }) { const [store, setStore] = createStore({ name: defaultName(), color: props.project.icon?.color || "pink", - iconUrl: props.project.icon?.url || "", + iconUrl: props.project.icon?.override || "", saving: false, }) @@ -74,7 +74,7 @@ export function DialogEditProject(props: { project: LocalProject }) { await globalSDK.client.project.update({ projectID: props.project.id, name, - icon: { color: store.color, url: store.iconUrl }, + icon: { color: store.color, override: store.iconUrl }, }) setStore("saving", false) dialog.close() diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index a8a8ce1e9fe..d7d09aa3999 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -208,10 +208,10 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }) }) - const usedColors = new Set() + const [colors, setColors] = createStore>({}) - function pickAvailableColor(): AvatarColorKey { - const available = AVATAR_COLOR_KEYS.filter((c) => !usedColors.has(c)) + function pickAvailableColor(used: Set): AvatarColorKey { + const available = AVATAR_COLOR_KEYS.filter((c) => !used.has(c)) if (available.length === 0) return AVATAR_COLOR_KEYS[Math.floor(Math.random() * AVATAR_COLOR_KEYS.length)] return available[Math.floor(Math.random() * available.length)] } @@ -222,24 +222,15 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( const metadata = projectID ? globalSync.data.project.find((x) => x.id === projectID) : globalSync.data.project.find((x) => x.worktree === project.worktree) - return [ - { - ...(metadata ?? {}), - ...project, - icon: { url: metadata?.icon?.url, color: metadata?.icon?.color }, + return { + ...(metadata ?? {}), + ...project, + icon: { + url: metadata?.icon?.url, + override: metadata?.icon?.override, + color: metadata?.icon?.color, }, - ] - } - - function colorize(project: LocalProject) { - if (project.icon?.color) return project - const color = pickAvailableColor() - usedColors.add(color) - project.icon = { ...project.icon, color } - if (project.id) { - globalSdk.client.project.update({ projectID: project.id, icon: { color } }) } - return project } const roots = createMemo(() => { @@ -277,8 +268,37 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }) }) - const enriched = createMemo(() => server.projects.list().flatMap(enrich)) - const list = createMemo(() => enriched().flatMap(colorize)) + const enriched = createMemo(() => server.projects.list().map(enrich)) + const list = createMemo(() => { + const projects = enriched() + return projects.map((project) => { + const color = project.icon?.color ?? colors[project.worktree] + if (!color) return project + const icon = project.icon ? { ...project.icon, color } : { color } + return { ...project, icon } + }) + }) + + createEffect(() => { + const projects = enriched() + if (projects.length === 0) return + + const used = new Set() + for (const project of projects) { + const color = project.icon?.color ?? colors[project.worktree] + if (color) used.add(color) + } + + for (const project of projects) { + if (project.icon?.color) continue + if (colors[project.worktree]) continue + const color = pickAvailableColor(used) + used.add(color) + setColors(project.worktree, color) + if (!project.id) continue + void globalSdk.client.project.update({ projectID: project.id, icon: { color } }) + } + }) onMount(() => { Promise.all( diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index a8f9b162fe4..9daac949e43 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1284,7 +1284,7 @@ export default function Layout(props: ParentProps) {
Date: Mon, 19 Jan 2026 14:46:32 -0600 Subject: [PATCH 054/426] fix(app): fade under sticky elements --- packages/ui/src/components/session-turn.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/ui/src/components/session-turn.css b/packages/ui/src/components/session-turn.css index 5f8c0a16f6a..034d3024707 100644 --- a/packages/ui/src/components/session-turn.css +++ b/packages/ui/src/components/session-turn.css @@ -75,6 +75,17 @@ background-color: var(--background-stronger); z-index: -1; } + + &::after { + content: ""; + position: absolute; + top: 100%; + left: 0; + right: 0; + height: 32px; + background: linear-gradient(to bottom, var(--background-stronger), transparent); + pointer-events: none; + } } [data-slot="session-turn-response-trigger"] { From 69b3b35ea5ab576439e2d919b6b2c19b360b910d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Mon, 19 Jan 2026 21:00:39 +0000 Subject: [PATCH 055/426] chore: generate --- packages/app/src/pages/session.tsx | 14 ++++++++------ packages/sdk/openapi.json | 6 ++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index fdb9f268cd3..3b405ef0773 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1102,12 +1102,14 @@ export default function Page() { visibleUserMessages().length store.turnStart - const targetId = pendingMessage() ?? (() => { - const hash = window.location.hash.slice(1) - const match = hash.match(/^message-(.+)$/) - if (!match) return undefined - return match[1] - })() + const targetId = + pendingMessage() ?? + (() => { + const hash = window.location.hash.slice(1) + const match = hash.match(/^message-(.+)$/) + if (!match) return undefined + return match[1] + })() if (!targetId) return if (store.messageId === targetId) return diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 08dd98fd9bc..c1be820f262 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -231,6 +231,9 @@ "url": { "type": "string" }, + "override": { + "type": "string" + }, "color": { "type": "string" } @@ -5796,6 +5799,9 @@ "url": { "type": "string" }, + "override": { + "type": "string" + }, "color": { "type": "string" } From d605a78a0547bee0ac1883eb09509f2ee0c5b815 Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Mon, 19 Jan 2026 22:15:43 +0100 Subject: [PATCH 056/426] fix(app): change keybind for cycling thinking effort (#9508) --- packages/app/src/pages/session.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 3b405ef0773..ec3b0ac30d9 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -531,7 +531,7 @@ export default function Page() { title: "Cycle thinking effort", description: "Switch to the next effort level", category: "Model", - keybind: "shift+mod+t", + keybind: "shift+mod+d", onSelect: () => { local.model.variant.cycle() }, From 79ae749ed8d72fc55cbb47435a717c0653511980 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:28:33 -0600 Subject: [PATCH 057/426] fix(app): don't change resize handle on hover --- packages/ui/src/components/resize-handle.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/ui/src/components/resize-handle.css b/packages/ui/src/components/resize-handle.css index 088bf921574..e4c8d474e53 100644 --- a/packages/ui/src/components/resize-handle.css +++ b/packages/ui/src/components/resize-handle.css @@ -5,10 +5,8 @@ &::after { content: ""; position: absolute; - background-color: var(--color-border-strong-base); opacity: 0; transition: opacity 0.15s ease-in-out; - border-radius: 2px; } &:hover::after, From 673e79f457ed75f6077d7c5ad71906a7c8ce415c Mon Sep 17 00:00:00 2001 From: Spoon <212802214+spoons-and-mirrors@users.noreply.github.com> Date: Mon, 19 Jan 2026 22:44:58 +0100 Subject: [PATCH 058/426] tweak(batch): up restrictive max batch tool from `10` to `25` (#9275) --- packages/opencode/src/tool/batch.ts | 8 ++++---- packages/opencode/src/tool/batch.txt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/tool/batch.ts b/packages/opencode/src/tool/batch.ts index 8bffbd54a28..ba34eb48f5c 100644 --- a/packages/opencode/src/tool/batch.ts +++ b/packages/opencode/src/tool/batch.ts @@ -33,8 +33,8 @@ export const BatchTool = Tool.define("batch", async () => { const { Session } = await import("../session") const { Identifier } = await import("../id/id") - const toolCalls = params.tool_calls.slice(0, 10) - const discardedCalls = params.tool_calls.slice(10) + const toolCalls = params.tool_calls.slice(0, 25) + const discardedCalls = params.tool_calls.slice(25) const { ToolRegistry } = await import("./registry") const availableTools = await ToolRegistry.tools({ modelID: "", providerID: "" }) @@ -139,14 +139,14 @@ export const BatchTool = Tool.define("batch", async () => { state: { status: "error", input: call.parameters, - error: "Maximum of 10 tools allowed in batch", + error: "Maximum of 25 tools allowed in batch", time: { start: now, end: now }, }, }) results.push({ success: false as const, tool: call.tool, - error: new Error("Maximum of 10 tools allowed in batch"), + error: new Error("Maximum of 25 tools allowed in batch"), }) } diff --git a/packages/opencode/src/tool/batch.txt b/packages/opencode/src/tool/batch.txt index b1b6a6010f5..565eb4dd433 100644 --- a/packages/opencode/src/tool/batch.txt +++ b/packages/opencode/src/tool/batch.txt @@ -6,7 +6,7 @@ Payload Format (JSON array): [{"tool": "read", "parameters": {"filePath": "src/index.ts", "limit": 350}},{"tool": "grep", "parameters": {"pattern": "Session\\.updatePart", "include": "src/**/*.ts"}},{"tool": "bash", "parameters": {"command": "git status", "description": "Shows working tree status"}}] Notes: -- 1–10 tool calls per batch +- 1–20 tool calls per batch - All calls start in parallel; ordering NOT guaranteed - Partial failures do not stop other tool calls - Do NOT use the batch tool within another batch tool. From 4e04bee0c91e445e692ef312a9b8136189fceb16 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:45:55 -0600 Subject: [PATCH 059/426] fix(app): favicon --- packages/app/src/pages/layout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 9daac949e43..d0d7e0b2f0c 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -540,7 +540,7 @@ export default function Layout(props: ParentProps) { running: number } - const prefetchChunk = 200 + const prefetchChunk = 600 const prefetchConcurrency = 1 const prefetchPendingLimit = 6 const prefetchToken = { value: 0 } @@ -1284,7 +1284,7 @@ export default function Layout(props: ParentProps) {
Date: Mon, 19 Jan 2026 21:55:27 +0000 Subject: [PATCH 060/426] release: v1.1.26 --- bun.lock | 30 +++++++++++++------------- packages/app/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 4 ++-- packages/sdk/js/package.json | 4 ++-- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/bun.lock b/bun.lock index e5892a7745d..53d80630b84 100644 --- a/bun.lock +++ b/bun.lock @@ -22,7 +22,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -71,7 +71,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -105,7 +105,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -132,7 +132,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -156,7 +156,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -180,7 +180,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -209,7 +209,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -238,7 +238,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -254,7 +254,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.1.25", + "version": "1.1.26", "bin": { "opencode": "./bin/opencode", }, @@ -358,7 +358,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -378,7 +378,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.1.25", + "version": "1.1.26", "devDependencies": { "@hey-api/openapi-ts": "0.90.4", "@tsconfig/node22": "catalog:", @@ -389,7 +389,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -402,7 +402,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -443,7 +443,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "zod": "catalog:", }, @@ -454,7 +454,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 2a754c96735..736a2625040 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.1.25", + "version": "1.1.26", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 2f44637fc89..83ff605cffa 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.1.25", + "version": "1.1.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index a9bb2706d48..eb86fb525b1 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.1.25", + "version": "1.1.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 6ada8abb05b..6cfdaab7579 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.1.25", + "version": "1.1.26", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 7fe57cc79ad..ab2fd76f8b1 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.1.25", + "version": "1.1.26", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 9114ff5621b..0b95f75487e 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.1.25", + "version": "1.1.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index e80a58b2d72..1a40af1c799 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.1.25", + "version": "1.1.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index dccac3f933b..2327c61e667 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.1.25" +version = "1.1.26" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.25/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.26/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.25/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.26/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.25/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.26/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.25/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.26/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.25/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.26/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index ad83a519c27..e5b0f62b927 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.1.25", + "version": "1.1.26", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index e1918193470..297abc8598a 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.1.25", + "version": "1.1.26", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 27349018083..52f392a8179 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.1.25", + "version": "1.1.26", "type": "module", "license": "MIT", "scripts": { @@ -25,4 +25,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 f3b12aa8c9f..5ce97dbf7e7 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.1.25", + "version": "1.1.26", "type": "module", "license": "MIT", "scripts": { @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} +} \ No newline at end of file diff --git a/packages/slack/package.json b/packages/slack/package.json index d544b89e38a..37b116ec2b7 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.1.25", + "version": "1.1.26", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 0b490591c35..7079384a54a 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.1.25", + "version": "1.1.26", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index a1d2ac6b567..45c6d43f0a5 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.1.25", + "version": "1.1.26", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index aef7c0c706d..db1adbf926f 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.1.25", + "version": "1.1.26", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index ad4735765e0..0a48840db0c 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.1.25", + "version": "1.1.26", "publisher": "sst-dev", "repository": { "type": "git", From bec294b7817e4a9fd9e0fef45d70522957b4045b Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:13:08 -0600 Subject: [PATCH 061/426] fix(app): remove copy button from summary --- packages/ui/src/components/session-turn.tsx | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index a918f0ae4fd..360589f4111 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -6,7 +6,6 @@ import { type PermissionRequest, TextPart, ToolPart, - UserMessage, } from "@opencode-ai/sdk/v2/client" import { useData } from "../context" import { useDiffComponent } from "../context/diff" @@ -21,8 +20,6 @@ import { Accordion } from "./accordion" import { StickyAccordionHeader } from "./sticky-accordion-header" import { FileIcon } from "./file-icon" import { Icon } from "./icon" -import { IconButton } from "./icon-button" -import { Tooltip } from "./tooltip" import { Card } from "./card" import { Dynamic } from "solid-js/web" import { Button } from "./button" @@ -352,7 +349,6 @@ export function SessionTurn( const hasDiffs = createMemo(() => (data.store.session_diff?.[props.sessionID]?.length ?? 0) > 0) const hideResponsePart = createMemo(() => !working() && !!responsePartId()) - const [responseCopied, setResponseCopied] = createSignal(false) const [rootRef, setRootRef] = createSignal() const [stickyRef, setStickyRef] = createSignal() @@ -362,13 +358,6 @@ export function SessionTurn( const next = Math.ceil(height) root.style.setProperty("--session-turn-sticky-height", `${next}px`) } - const handleCopyResponse = async () => { - const content = response() - if (!content) return - await navigator.clipboard.writeText(content) - setResponseCopied(true) - setTimeout(() => setResponseCopied(false), 2000) - } function duration() { const msg = message() @@ -589,15 +578,6 @@ export function SessionTurn( {/* Response */}
-
- - - -

Response

Date: Mon, 19 Jan 2026 22:13:58 +0000 Subject: [PATCH 062/426] chore: generate --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 52f392a8179..ee7cf23b9f1 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -25,4 +25,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 5ce97dbf7e7..f69224d832a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} From aa4b06e16548d5a1a5e8c32376987f6aa70c9844 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Mon, 19 Jan 2026 18:22:19 -0500 Subject: [PATCH 063/426] tui: fix message history cleanup to prevent memory leaks --- .../opencode/src/cli/cmd/tui/context/sync.tsx | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index 0edc911344c..392cfb7f121 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -241,9 +241,27 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ event.properties.info.sessionID, produce((draft) => { draft.splice(result.index, 0, event.properties.info) - if (draft.length > 100) draft.shift() }), ) + const updated = store.message[event.properties.info.sessionID] + if (updated.length > 100) { + const oldest = updated[0] + batch(() => { + setStore( + "message", + event.properties.info.sessionID, + produce((draft) => { + draft.shift() + }), + ) + setStore( + "part", + produce((draft) => { + delete draft[oldest.id] + }), + ) + }) + } break } case "message.removed": { From bfa986d45e31eeeb66b86201c5e8fb470949677e Mon Sep 17 00:00:00 2001 From: DNGriffin <31415269+DNGriffin@users.noreply.github.com> Date: Mon, 19 Jan 2026 17:38:52 -0600 Subject: [PATCH 064/426] feat(app): Add ability to select project directory text to web (#9344) --- packages/app/src/pages/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index d0d7e0b2f0c..e0cc38b9af1 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1967,7 +1967,7 @@ export default function Layout(props: ParentProps) { transform: "translate3d(52px, 0, 0)", }} > - + {project()?.worktree.replace(homedir(), "~")} From 054ccee78daf78cf33ba01c758e844cfab8c385a Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 00:15:10 +0000 Subject: [PATCH 065/426] update review session empty state styling --- packages/app/src/pages/session.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index ec3b0ac30d9..700d2b695a9 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1248,9 +1248,9 @@ export default function Page() { -
- -
No changes in this session yet.
+
+ +
No changes in this session yet
@@ -1524,9 +1524,9 @@ export default function Page() { -
- -
No changes in this session yet.
+
+ +
No changes in this session yet
From cf284e32aaab6e9b29d8bf919cdf5f13d95c5a8d Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 00:21:11 +0000 Subject: [PATCH 066/426] update session hover popover styling --- packages/app/src/pages/layout.tsx | 2 +- packages/ui/src/components/hover-card.css | 2 +- packages/ui/src/components/message-nav.css | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index e0cc38b9af1..0ef608a4a8c 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1421,7 +1421,7 @@ export default function Layout(props: ParentProps) { } > - + Loading messages…
}> Date: Tue, 20 Jan 2026 00:24:51 +0000 Subject: [PATCH 067/426] retain session hover state when popover open and update border radius --- packages/app/src/pages/layout.tsx | 2 +- packages/ui/src/components/hover-card.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 0ef608a4a8c..62cd1570924 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1411,7 +1411,7 @@ export default function Layout(props: ParentProps) {
Date: Tue, 20 Jan 2026 00:27:03 +0000 Subject: [PATCH 068/426] position session messages popover at top --- packages/app/src/pages/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 62cd1570924..23f1f05ec70 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1421,7 +1421,7 @@ export default function Layout(props: ParentProps) { } > - + Loading messages…
}> Date: Tue, 20 Jan 2026 00:42:55 +0000 Subject: [PATCH 069/426] update thinking text styling in desktop app --- packages/ui/src/components/message-part.css | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 184565e9cb3..a5dbdf36d06 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -113,11 +113,22 @@ [data-component="reasoning-part"] { width: 100%; - opacity: 0.5; + color: var(--text-base); + opacity: 0.8; + line-height: var(--line-height-large); [data-component="markdown"] { margin-top: 24px; font-style: italic !important; + + p:has(strong) { + margin-top: 24px; + margin-bottom: 0; + + &:first-child { + margin-top: 0; + } + } } } From 7b336add88d516f44f1b71206973fdb850191113 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 01:21:36 +0000 Subject: [PATCH 070/426] update session messages popover gutter to 28px --- packages/app/src/pages/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 23f1f05ec70..2e1bbd33178 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1421,7 +1421,7 @@ export default function Layout(props: ParentProps) { } > - + Loading messages…
}> Date: Tue, 20 Jan 2026 01:36:34 +0000 Subject: [PATCH 071/426] remove top padding from edit project dialog form --- packages/app/src/components/dialog-edit-project.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 7acb766f808..a2dc7b623c7 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -82,7 +82,7 @@ export function DialogEditProject(props: { project: LocalProject }) { return ( - +
Date: Tue, 20 Jan 2026 01:41:36 +0000 Subject: [PATCH 072/426] add 8px padding to recent sessions popover --- packages/app/src/pages/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 2e1bbd33178..dc716c03058 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1730,7 +1730,7 @@ export default function Layout(props: ParentProps) { trigger={trigger} onOpenChange={setOpen} > -
+
{displayName(props.project)}
Recent sessions
From 4ddfa86e7fe8d6eb23ab973fdf65175cd8a750a7 Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Tue, 20 Jan 2026 02:41:42 +0100 Subject: [PATCH 073/426] fix(app): message list overflow & scrolling (#9530) --- packages/app/src/pages/session.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 700d2b695a9..458585e1695 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -824,10 +824,22 @@ export default function Page() { }) const isWorking = createMemo(() => status().type !== "idle") + const autoScroll = createAutoScroll({ - working: isWorking, + working: () => true }) + createEffect( + on( + isWorking, + (working, prev) => { + if (!working || prev) return + autoScroll.forceScrollToBottom() + }, + { defer: true }, + ), + ) + let scrollSpyFrame: number | undefined let scrollSpyTarget: HTMLDivElement | undefined @@ -1340,10 +1352,6 @@ export default function Page() { classList={{ "min-w-0 w-full max-w-full": true, "md:max-w-200": !showTabs(), - "last:min-h-[calc(100vh-5.5rem-var(--prompt-height,8rem)-64px)] md:last:min-h-[calc(100vh-4.5rem-var(--prompt-height,10rem)-64px)]": - platform.platform !== "desktop", - "last:min-h-[calc(100vh-7rem-var(--prompt-height,8rem)-64px)] md:last:min-h-[calc(100vh-6rem-var(--prompt-height,10rem)-64px)]": - platform.platform === "desktop", }} > Date: Tue, 20 Jan 2026 01:42:14 +0000 Subject: [PATCH 074/426] chore: generate --- packages/app/src/pages/session.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 458585e1695..89d3ec77334 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -826,7 +826,7 @@ export default function Page() { const isWorking = createMemo(() => status().type !== "idle") const autoScroll = createAutoScroll({ - working: () => true + working: () => true, }) createEffect( From 36f5ba52e9c7dc657fa7c3c856e1bafd827cd314 Mon Sep 17 00:00:00 2001 From: James Meng <35415298+jamesmengo@users.noreply.github.com> Date: Mon, 19 Jan 2026 20:15:02 -0800 Subject: [PATCH 075/426] fix(batch): update batch tool definition to outline correct value for max tool calls (#9517) --- packages/opencode/src/tool/batch.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/tool/batch.txt b/packages/opencode/src/tool/batch.txt index 565eb4dd433..968a6c3f07c 100644 --- a/packages/opencode/src/tool/batch.txt +++ b/packages/opencode/src/tool/batch.txt @@ -6,7 +6,7 @@ Payload Format (JSON array): [{"tool": "read", "parameters": {"filePath": "src/index.ts", "limit": 350}},{"tool": "grep", "parameters": {"pattern": "Session\\.updatePart", "include": "src/**/*.ts"}},{"tool": "bash", "parameters": {"command": "git status", "description": "Shows working tree status"}}] Notes: -- 1–20 tool calls per batch +- 1–25 tool calls per batch - All calls start in parallel; ordering NOT guaranteed - Partial failures do not stop other tool calls - Do NOT use the batch tool within another batch tool. From 0d49df46ef56828f3a310d1229a9ae95debff127 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 19 Jan 2026 23:19:21 -0600 Subject: [PATCH 076/426] fix: ensure truncation handling applies to mcp servers too --- packages/opencode/src/session/prompt.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index f4793d1a798..9dbca30d8b3 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -44,6 +44,7 @@ import { SessionStatus } from "./status" import { LLM } from "./llm" import { iife } from "@/util/iife" import { Shell } from "@/shell/shell" +import { Truncate } from "@/tool/truncation" // @ts-ignore globalThis.AI_SDK_LOG_WARNINGS = false @@ -801,10 +802,17 @@ export namespace SessionPrompt { } } + const truncated = await Truncate.output(textParts.join("\n\n"), {}, input.agent) + const metadata = { + ...(result.metadata ?? {}), + truncated: truncated.truncated, + ...(truncated.truncated && { outputPath: truncated.outputPath }), + } + return { title: "", - metadata: result.metadata ?? {}, - output: textParts.join("\n\n"), + metadata, + output: truncated.content, attachments, content: result.content, // directly return content to preserve ordering when outputting to model } From 419004992d57aacab45dd17f6c435fbc12f0b910 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 19 Jan 2026 23:22:57 -0600 Subject: [PATCH 077/426] chore: remove duplicate prompt file --- .../opencode/src/session/prompt/codex.txt | 73 ------------------- .../src/session/prompt/codex_header.txt | 1 + packages/opencode/src/session/system.ts | 5 +- 3 files changed, 3 insertions(+), 76 deletions(-) delete mode 100644 packages/opencode/src/session/prompt/codex.txt diff --git a/packages/opencode/src/session/prompt/codex.txt b/packages/opencode/src/session/prompt/codex.txt deleted file mode 100644 index daad8237758..00000000000 --- a/packages/opencode/src/session/prompt/codex.txt +++ /dev/null @@ -1,73 +0,0 @@ -You are OpenCode, the best coding agent on the planet. - -You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user. - -## Editing constraints -- Default to ASCII when editing or creating files. Only introduce non-ASCII or other Unicode characters when there is a clear justification and the file already uses them. -- Only add comments if they are necessary to make a non-obvious block easier to understand. -- Try to use apply_patch for single file edits, but it is fine to explore other options to make the edit if it does not work well. Do not use apply_patch for changes that are auto-generated (i.e. generating package.json or running a lint or format command like gofmt) or when scripting is more efficient (such as search and replacing a string across a codebase). - -## Tool usage -- Prefer specialized tools over shell for file operations: - - Use Read to view files, Edit to modify files, and Write only when needed. - - Use Glob to find files by name and Grep to search file contents. -- Use Bash for terminal operations (git, bun, builds, tests, running scripts). -- Run tool calls in parallel when neither call needs the other’s output; otherwise run sequentially. - -## Git and workspace hygiene -- You may be in a dirty git worktree. - * NEVER revert existing changes you did not make unless explicitly requested, since these changes were made by the user. - * If asked to make a commit or code edits and there are unrelated changes to your work or changes that you didn't make in those files, don't revert those changes. - * If the changes are in files you've touched recently, you should read carefully and understand how you can work with the changes rather than reverting them. - * If the changes are in unrelated files, just ignore them and don't revert them. -- Do not amend commits unless explicitly requested. -- **NEVER** use destructive commands like `git reset --hard` or `git checkout --` unless specifically requested or approved by the user. - -## Frontend tasks -When doing frontend design tasks, avoid collapsing into bland, generic layouts. -Aim for interfaces that feel intentional and deliberate. -- Typography: Use expressive, purposeful fonts and avoid default stacks (Inter, Roboto, Arial, system). -- Color & Look: Choose a clear visual direction; define CSS variables; avoid purple-on-white defaults. No purple bias or dark mode bias. -- Motion: Use a few meaningful animations (page-load, staggered reveals) instead of generic micro-motions. -- Background: Don't rely on flat, single-color backgrounds; use gradients, shapes, or subtle patterns to build atmosphere. -- Overall: Avoid boilerplate layouts and interchangeable UI patterns. Vary themes, type families, and visual languages across outputs. -- Ensure the page loads properly on both desktop and mobile. - -Exception: If working within an existing website or design system, preserve the established patterns, structure, and visual language. - -## Presenting your work and final message - -You are producing plain text that will later be styled by the CLI. Follow these rules exactly. Formatting should make results easy to scan, but not feel mechanical. Use judgment to decide how much structure adds value. - -- Default: be very concise; friendly coding teammate tone. -- Ask only when needed; suggest ideas; mirror the user's style. -- For substantial work, summarize clearly; follow final‑answer formatting. -- Skip heavy formatting for simple confirmations. -- Don't dump large files you've written; reference paths only. -- No "save/copy this file" - User is on the same machine. -- Offer logical next steps (tests, commits, build) briefly; add verify steps if you couldn't do something. -- For code changes: - * Lead with a quick explanation of the change, and then give more details on the context covering where and why a change was made. Do not start this explanation with "summary", just jump right in. - * If there are natural next steps the user may want to take, suggest them at the end of your response. Do not make suggestions if there are no natural next steps. - * When suggesting multiple options, use numeric lists for the suggestions so the user can quickly respond with a single number. -- The user does not command execution outputs. When asked to show the output of a command (e.g. `git show`), relay the important details in your answer or summarize the key lines so the user understands the result. - -## Final answer structure and style guidelines - -- Plain text; CLI handles styling. Use structure only when it helps scanability. -- Headers: optional; short Title Case (1-3 words) wrapped in **…**; no blank line before the first bullet; add only if they truly help. -- Bullets: use - ; merge related points; keep to one line when possible; 4–6 per list ordered by importance; keep phrasing consistent. -- Monospace: backticks for commands/paths/env vars/code ids and inline examples; use for literal keyword bullets; never combine with **. -- Code samples or multi-line snippets should be wrapped in fenced code blocks; include an info string as often as possible. -- Structure: group related bullets; order sections general → specific → supporting; for subsections, start with a bolded keyword bullet, then items; match complexity to the task. -- Tone: collaborative, concise, factual; present tense, active voice; self‑contained; no "above/below"; parallel wording. -- Don'ts: no nested bullets/hierarchies; no ANSI codes; don't cram unrelated keywords; keep keyword lists short—wrap/reformat if long; avoid naming formatting styles in answers. -- Adaptation: code explanations → precise, structured with code refs; simple tasks → lead with outcome; big changes → logical walkthrough + rationale + next actions; casual one-offs → plain sentences, no headers/bullets. -- File References: When referencing files in your response follow the below rules: - * Use inline code to make file paths clickable. - * Each reference should have a stand alone path. Even if it's the same file. - * Accepted: absolute, workspace‑relative, a/ or b/ diff prefixes, or bare filename/suffix. - * Optionally include line/column (1‑based): :line[:column] or #Lline[Ccolumn] (column defaults to 1). - * Do not use URIs like file://, vscode://, or https://. - * Do not provide range of lines - * Examples: src/app.ts, src/app.ts:42, b/server/index.js#L10, C:\repo\project\main.rs:12:5 diff --git a/packages/opencode/src/session/prompt/codex_header.txt b/packages/opencode/src/session/prompt/codex_header.txt index d26e2e01aa7..daad8237758 100644 --- a/packages/opencode/src/session/prompt/codex_header.txt +++ b/packages/opencode/src/session/prompt/codex_header.txt @@ -5,6 +5,7 @@ You are an interactive CLI tool that helps users with software engineering tasks ## Editing constraints - Default to ASCII when editing or creating files. Only introduce non-ASCII or other Unicode characters when there is a clear justification and the file already uses them. - Only add comments if they are necessary to make a non-obvious block easier to understand. +- Try to use apply_patch for single file edits, but it is fine to explore other options to make the edit if it does not work well. Do not use apply_patch for changes that are auto-generated (i.e. generating package.json or running a lint or format command like gofmt) or when scripting is more efficient (such as search and replacing a string across a codebase). ## Tool usage - Prefer specialized tools over shell for file operations: diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts index fff90808864..f0e2d96b7eb 100644 --- a/packages/opencode/src/session/system.ts +++ b/packages/opencode/src/session/system.ts @@ -13,8 +13,7 @@ import PROMPT_BEAST from "./prompt/beast.txt" import PROMPT_GEMINI from "./prompt/gemini.txt" import PROMPT_ANTHROPIC_SPOOF from "./prompt/anthropic_spoof.txt" -import PROMPT_CODEX from "./prompt/codex.txt" -import PROMPT_CODEX_INSTRUCTIONS from "./prompt/codex_header.txt" +import PROMPT_CODEX from "./prompt/codex_header.txt" import type { Provider } from "@/provider/provider" import { Flag } from "@/flag/flag" @@ -25,7 +24,7 @@ export namespace SystemPrompt { } export function instructions() { - return PROMPT_CODEX_INSTRUCTIONS.trim() + return PROMPT_CODEX.trim() } export function provider(model: Provider.Model) { From 68d1755a9ed49b2bbf29964db295817349025563 Mon Sep 17 00:00:00 2001 From: Craig Jellick Date: Mon, 19 Jan 2026 22:38:26 -0700 Subject: [PATCH 078/426] fix: add space toggle hint to tool selection prompt (#9535) --- packages/opencode/src/cli/cmd/agent.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/cli/cmd/agent.ts b/packages/opencode/src/cli/cmd/agent.ts index b57de0ae464..e5da9fdb386 100644 --- a/packages/opencode/src/cli/cmd/agent.ts +++ b/packages/opencode/src/cli/cmd/agent.ts @@ -134,7 +134,7 @@ const AgentCreateCommand = cmd({ selectedTools = cliTools ? cliTools.split(",").map((t) => t.trim()) : AVAILABLE_TOOLS } else { const result = await prompts.multiselect({ - message: "Select tools to enable", + message: "Select tools to enable (Space to toggle)", options: AVAILABLE_TOOLS.map((tool) => ({ label: tool, value: tool, From 8b379329a6dcd0021709e8486c78acaf7bb52a21 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Tue, 20 Jan 2026 14:07:39 +0800 Subject: [PATCH 079/426] fix(desktop): completely disable pinch to zoom --- packages/desktop/src-tauri/tauri.conf.json | 2 +- packages/desktop/src/index.tsx | 6 +---- packages/desktop/src/webview-zoom.ts | 31 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 packages/desktop/src/webview-zoom.ts diff --git a/packages/desktop/src-tauri/tauri.conf.json b/packages/desktop/src-tauri/tauri.conf.json index 19da295c56b..f8df151bdf8 100644 --- a/packages/desktop/src-tauri/tauri.conf.json +++ b/packages/desktop/src-tauri/tauri.conf.json @@ -19,7 +19,7 @@ "url": "/", "decorations": true, "dragDropEnabled": false, - "zoomHotkeysEnabled": true, + "zoomHotkeysEnabled": false, "titleBarStyle": "Overlay", "hiddenTitle": true, "trafficLightPosition": { "x": 12.0, "y": 18.0 } diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index a06270b13fe..d6ee121af6d 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -1,4 +1,5 @@ // @refresh reload +import "./webview-zoom" import { render } from "solid-js/web" import { AppBaseProviders, AppInterface, PlatformProvider, Platform } from "@opencode-ai/app" import { open, save } from "@tauri-apps/plugin-dialog" @@ -303,11 +304,6 @@ const createPlatform = (password: Accessor): Platform => ({ createMenu() -// Stops mousewheel events from reaching Tauri's pinch-to-zoom handler -root?.addEventListener("mousewheel", (e) => { - e.stopPropagation() -}) - render(() => { const [serverPassword, setServerPassword] = createSignal(null) const platform = createPlatform(() => serverPassword()) diff --git a/packages/desktop/src/webview-zoom.ts b/packages/desktop/src/webview-zoom.ts new file mode 100644 index 00000000000..9fa9bb9ed92 --- /dev/null +++ b/packages/desktop/src/webview-zoom.ts @@ -0,0 +1,31 @@ +// Copyright 2019-2024 Tauri Programme within The Commons Conservancy +// SPDX-License-Identifier: Apache-2.0 +// SPDX-License-Identifier: MIT + +import { invoke } from "@tauri-apps/api/core" +import { type as ostype } from "@tauri-apps/plugin-os" + +const OS_NAME = ostype() + +let zoomLevel = 1 + +const MAX_ZOOM_LEVEL = 10 +const MIN_ZOOM_LEVEL = 0.2 + +window.addEventListener("keydown", (event) => { + if (OS_NAME === "macos" ? event.metaKey : event.ctrlKey) { + if (event.key === "-") { + zoomLevel -= 0.2 + } else if (event.key === "=" || event.key === "+") { + zoomLevel += 0.2 + } else if (event.key === "0") { + zoomLevel = 1 + } else { + return + } + zoomLevel = Math.min(Math.max(zoomLevel, MIN_ZOOM_LEVEL), MAX_ZOOM_LEVEL) + invoke("plugin:webview|set_webview_zoom", { + value: zoomLevel, + }) + } +}) From 9706aaf552c3d1c85160e6ba5d107207019b931a Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 20 Jan 2026 00:32:29 -0600 Subject: [PATCH 080/426] rm filetime assertions from patch tool --- packages/opencode/src/tool/apply_patch.ts | 8 -------- packages/opencode/test/tool/apply_patch.test.ts | 16 ---------------- 2 files changed, 24 deletions(-) diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index 7b0ba6150ce..ec24643fcfa 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -2,7 +2,6 @@ import z from "zod" import * as path from "path" import * as fs from "fs/promises" import { Tool } from "./tool" -import { FileTime } from "../file/time" import { Bus } from "../bus" import { FileWatcher } from "../file/watcher" import { Instance } from "../project/instance" @@ -96,8 +95,6 @@ export const ApplyPatchTool = Tool.define("apply_patch", { throw new Error(`apply_patch verification failed: Failed to read file to update: ${filePath}`) } - // Read file and update time tracking (like edit tool does) - await FileTime.assert(ctx.sessionID, filePath) const oldContent = await fs.readFile(filePath, "utf-8") let newContent = oldContent @@ -203,11 +200,6 @@ export const ApplyPatchTool = Tool.define("apply_patch", { break } - // Update file time tracking - FileTime.read(ctx.sessionID, change.filePath) - if (change.movePath) { - FileTime.read(ctx.sessionID, change.movePath) - } } // Publish file change events diff --git a/packages/opencode/test/tool/apply_patch.test.ts b/packages/opencode/test/tool/apply_patch.test.ts index d8f05a9d911..6445c6845b5 100644 --- a/packages/opencode/test/tool/apply_patch.test.ts +++ b/packages/opencode/test/tool/apply_patch.test.ts @@ -3,7 +3,6 @@ import path from "path" import * as fs from "fs/promises" import { ApplyPatchTool } from "../../src/tool/apply_patch" import { Instance } from "../../src/project/instance" -import { FileTime } from "../../src/file/time" import { tmpdir } from "../fixture/fixture" const baseCtx = { @@ -71,8 +70,6 @@ describe("tool.apply_patch freeform", () => { const deletePath = path.join(fixture.path, "delete.txt") await fs.writeFile(modifyPath, "line1\nline2\n", "utf-8") await fs.writeFile(deletePath, "obsolete\n", "utf-8") - FileTime.read(ctx.sessionID, modifyPath) - FileTime.read(ctx.sessionID, deletePath) const patchText = "*** Begin Patch\n*** Add File: nested/new.txt\n+created\n*** Delete File: delete.txt\n*** Update File: modify.txt\n@@\n-line2\n+changed\n*** End Patch" @@ -101,7 +98,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "multi.txt") await fs.writeFile(target, "line1\nline2\nline3\nline4\n", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: multi.txt\n@@\n-line2\n+changed2\n@@\n-line4\n+changed4\n*** End Patch" @@ -122,7 +118,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "insert_only.txt") await fs.writeFile(target, "alpha\nomega\n", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: insert_only.txt\n@@\n alpha\n+beta\n omega\n*** End Patch" @@ -142,7 +137,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "no_newline.txt") await fs.writeFile(target, "no newline at end", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: no_newline.txt\n@@\n-no newline at end\n+first line\n+second line\n*** End Patch" @@ -166,7 +160,6 @@ describe("tool.apply_patch freeform", () => { const original = path.join(fixture.path, "old", "name.txt") await fs.mkdir(path.dirname(original), { recursive: true }) await fs.writeFile(original, "old content\n", "utf-8") - FileTime.read(ctx.sessionID, original) const patchText = "*** Begin Patch\n*** Update File: old/name.txt\n*** Move to: renamed/dir/name.txt\n@@\n-old content\n+new content\n*** End Patch" @@ -193,7 +186,6 @@ describe("tool.apply_patch freeform", () => { await fs.mkdir(path.dirname(destination), { recursive: true }) await fs.writeFile(original, "from\n", "utf-8") await fs.writeFile(destination, "existing\n", "utf-8") - FileTime.read(ctx.sessionID, original) const patchText = "*** Begin Patch\n*** Update File: old/name.txt\n*** Move to: renamed/dir/name.txt\n@@\n-from\n+new\n*** End Patch" @@ -294,7 +286,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "modify.txt") await fs.writeFile(target, "line1\nline2\n", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: modify.txt\n@@\n-missing\n+changed\n*** End Patch" @@ -331,7 +322,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "tail.txt") await fs.writeFile(target, "alpha\nlast\n", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: tail.txt\n@@\n-last\n+end\n*** End of File\n*** End Patch" @@ -350,7 +340,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "two_chunks.txt") await fs.writeFile(target, "a\nb\nc\nd\n", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: two_chunks.txt\n@@\n-b\n+B\n\n-d\n+D\n*** End Patch" @@ -369,7 +358,6 @@ describe("tool.apply_patch freeform", () => { fn: async () => { const target = path.join(fixture.path, "multi_ctx.txt") await fs.writeFile(target, "fn a\nx=10\ny=2\nfn b\nx=10\ny=20\n", "utf-8") - FileTime.read(ctx.sessionID, target) const patchText = "*** Begin Patch\n*** Update File: multi_ctx.txt\n@@ fn b\n-x=10\n+x=11\n*** End Patch" @@ -389,7 +377,6 @@ describe("tool.apply_patch freeform", () => { const target = path.join(fixture.path, "eof_anchor.txt") // File has duplicate "marker" lines - one in middle, one at end await fs.writeFile(target, "start\nmarker\nmiddle\nmarker\nend\n", "utf-8") - FileTime.read(ctx.sessionID, target) // With EOF anchor, should match the LAST "marker" line, not the first const patchText = @@ -454,7 +441,6 @@ EOF` const target = path.join(fixture.path, "trailing_ws.txt") // File has trailing spaces on some lines await fs.writeFile(target, "line1 \nline2\nline3 \n", "utf-8") - FileTime.read(ctx.sessionID, target) // Patch doesn't have trailing spaces - should still match via rstrip pass const patchText = "*** Begin Patch\n*** Update File: trailing_ws.txt\n@@\n-line2\n+changed\n*** End Patch" @@ -475,7 +461,6 @@ EOF` const target = path.join(fixture.path, "leading_ws.txt") // File has leading spaces await fs.writeFile(target, " line1\nline2\n line3\n", "utf-8") - FileTime.read(ctx.sessionID, target) // Patch without leading spaces - should match via trim pass const patchText = "*** Begin Patch\n*** Update File: leading_ws.txt\n@@\n-line2\n+changed\n*** End Patch" @@ -499,7 +484,6 @@ EOF` const rightQuote = "\u201D" const emDash = "\u2014" await fs.writeFile(target, `He said ${leftQuote}hello${rightQuote}\nsome${emDash}dash\nend\n`, "utf-8") - FileTime.read(ctx.sessionID, target) // Patch uses ASCII equivalents - should match via normalized pass // The replacement uses ASCII quotes from the patch (not preserving Unicode) From 616329ae97c975f21687f6c8c9c6d4d8018e6fd9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 20 Jan 2026 06:33:16 +0000 Subject: [PATCH 081/426] chore: generate --- packages/opencode/src/tool/apply_patch.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index ec24643fcfa..cccf2d1cf46 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -199,7 +199,6 @@ export const ApplyPatchTool = Tool.define("apply_patch", { changedFiles.push(change.filePath) break } - } // Publish file change events From 5f0372183a1f7447de111e170b915783823f4b11 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 14:41:24 -0600 Subject: [PATCH 082/426] fix(app): persist quota --- packages/app/src/utils/persist.ts | 51 +++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 0c20ee31ca6..06e80142a59 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -17,6 +17,36 @@ type PersistTarget = { const LEGACY_STORAGE = "default.dat" const GLOBAL_STORAGE = "opencode.global.dat" +function quota(error: unknown) { + if (error instanceof DOMException) { + if (error.name === "QuotaExceededError") return true + if (error.name === "NS_ERROR_DOM_QUOTA_REACHED") return true + if (error.code === 22 || error.code === 1014) return true + return false + } + + if (!error || typeof error !== "object") return false + const name = (error as { name?: string }).name + if (name === "QuotaExceededError" || name === "NS_ERROR_DOM_QUOTA_REACHED") return true + return false +} + +function write(storage: Storage, key: string, value: string) { + try { + storage.setItem(key, value) + return + } catch (error) { + if (!quota(error)) throw error + } + + try { + storage.removeItem(key) + storage.setItem(key, value) + } catch (error) { + if (!quota(error)) throw error + } +} + function snapshot(value: unknown) { return JSON.parse(JSON.stringify(value)) as unknown } @@ -67,10 +97,19 @@ function workspaceStorage(dir: string) { function localStorageWithPrefix(prefix: string): SyncStorage { const base = `${prefix}:` + const item = (key: string) => base + key + return { + getItem: (key) => localStorage.getItem(item(key)), + setItem: (key, value) => write(localStorage, item(key), value), + removeItem: (key) => localStorage.removeItem(item(key)), + } +} + +function localStorageDirect(): SyncStorage { return { - getItem: (key) => localStorage.getItem(base + key), - setItem: (key, value) => localStorage.setItem(base + key, value), - removeItem: (key) => localStorage.removeItem(base + key), + getItem: (key) => localStorage.getItem(key), + setItem: (key, value) => write(localStorage, key, value), + removeItem: (key) => localStorage.removeItem(key), } } @@ -99,7 +138,7 @@ export function removePersisted(target: { storage?: string; key: string }) { } if (!target.storage) { - localStorage.removeItem(target.key) + localStorageDirect().removeItem(target.key) return } @@ -120,12 +159,12 @@ export function persisted( const currentStorage = (() => { if (isDesktop) return platform.storage?.(config.storage) - if (!config.storage) return localStorage + if (!config.storage) return localStorageDirect() return localStorageWithPrefix(config.storage) })() const legacyStorage = (() => { - if (!isDesktop) return localStorage + if (!isDesktop) return localStorageDirect() if (!config.storage) return platform.storage?.() return platform.storage?.(LEGACY_STORAGE) })() From 353115a895655f3d9f3075cd0516000722e9c6b5 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 05:04:38 -0600 Subject: [PATCH 083/426] fix(app): user message expand on click --- packages/ui/src/components/message-part.tsx | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index b3fd01c2d8e..24b1ee39326 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -357,6 +357,11 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp setTimeout(() => setCopied(false), 2000) } + const toggleExpanded = () => { + if (!canExpand()) return + setExpanded((value) => !value) + } + return (
0}> @@ -388,19 +393,29 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
-
(textRef = el)}> +
(textRef = el)} onClick={toggleExpanded}>
- + { + event.stopPropagation() + handleCopy() + }} + />
From b711ca57f25f393e2613e46ab5bfe2a95c42ee0d Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 05:21:27 -0600 Subject: [PATCH 084/426] fix(app): localStorage quota --- packages/app/src/utils/persist.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 06e80142a59..4ada0751d76 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -21,6 +21,7 @@ function quota(error: unknown) { if (error instanceof DOMException) { if (error.name === "QuotaExceededError") return true if (error.name === "NS_ERROR_DOM_QUOTA_REACHED") return true + if (error.name === "QUOTA_EXCEEDED_ERR") return true if (error.code === 22 || error.code === 1014) return true return false } @@ -28,6 +29,14 @@ function quota(error: unknown) { if (!error || typeof error !== "object") return false const name = (error as { name?: string }).name if (name === "QuotaExceededError" || name === "NS_ERROR_DOM_QUOTA_REACHED") return true + if (name && /quota/i.test(name)) return true + + const code = (error as { code?: number }).code + if (code === 22 || code === 1014) return true + + const message = (error as { message?: string }).message + if (typeof message !== "string") return false + if (/quota/i.test(message)) return true return false } From 347cd8ac63314ef034f434615274a905b088e14b Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 05:35:24 -0600 Subject: [PATCH 085/426] chore: cleanup --- packages/app/src/utils/persist.ts | 99 +++++++++++++++++++-- packages/ui/src/components/message-part.tsx | 7 +- 2 files changed, 96 insertions(+), 10 deletions(-) diff --git a/packages/app/src/utils/persist.ts b/packages/app/src/utils/persist.ts index 4ada0751d76..70884977c75 100644 --- a/packages/app/src/utils/persist.ts +++ b/packages/app/src/utils/persist.ts @@ -16,6 +16,9 @@ type PersistTarget = { const LEGACY_STORAGE = "default.dat" const GLOBAL_STORAGE = "opencode.global.dat" +const LOCAL_PREFIX = "opencode." +const fallback = { disabled: false } +const cache = new Map() function quota(error: unknown) { if (error instanceof DOMException) { @@ -40,10 +43,42 @@ function quota(error: unknown) { return false } +type Evict = { key: string; size: number } + +function evict(storage: Storage, keep: string, value: string) { + const total = storage.length + const indexes = Array.from({ length: total }, (_, index) => index) + const items: Evict[] = [] + + for (const index of indexes) { + const name = storage.key(index) + if (!name) continue + if (!name.startsWith(LOCAL_PREFIX)) continue + if (name === keep) continue + const stored = storage.getItem(name) + items.push({ key: name, size: stored?.length ?? 0 }) + } + + items.sort((a, b) => b.size - a.size) + + for (const item of items) { + storage.removeItem(item.key) + + try { + storage.setItem(keep, value) + return true + } catch (error) { + if (!quota(error)) throw error + } + } + + return false +} + function write(storage: Storage, key: string, value: string) { try { storage.setItem(key, value) - return + return true } catch (error) { if (!quota(error)) throw error } @@ -51,9 +86,12 @@ function write(storage: Storage, key: string, value: string) { try { storage.removeItem(key) storage.setItem(key, value) + return true } catch (error) { if (!quota(error)) throw error } + + return evict(storage, key, value) } function snapshot(value: unknown) { @@ -108,17 +146,64 @@ function localStorageWithPrefix(prefix: string): SyncStorage { const base = `${prefix}:` const item = (key: string) => base + key return { - getItem: (key) => localStorage.getItem(item(key)), - setItem: (key, value) => write(localStorage, item(key), value), - removeItem: (key) => localStorage.removeItem(item(key)), + getItem: (key) => { + const name = item(key) + const cached = cache.get(name) + if (fallback.disabled && cached !== undefined) return cached + + const stored = localStorage.getItem(name) + if (stored === null) return cached ?? null + cache.set(name, stored) + return stored + }, + setItem: (key, value) => { + const name = item(key) + cache.set(name, value) + if (fallback.disabled) return + try { + if (write(localStorage, name, value)) return + } catch { + fallback.disabled = true + return + } + fallback.disabled = true + }, + removeItem: (key) => { + const name = item(key) + cache.delete(name) + if (fallback.disabled) return + localStorage.removeItem(name) + }, } } function localStorageDirect(): SyncStorage { return { - getItem: (key) => localStorage.getItem(key), - setItem: (key, value) => write(localStorage, key, value), - removeItem: (key) => localStorage.removeItem(key), + getItem: (key) => { + const cached = cache.get(key) + if (fallback.disabled && cached !== undefined) return cached + + const stored = localStorage.getItem(key) + if (stored === null) return cached ?? null + cache.set(key, stored) + return stored + }, + setItem: (key, value) => { + cache.set(key, value) + if (fallback.disabled) return + try { + if (write(localStorage, key, value)) return + } catch { + fallback.disabled = true + return + } + fallback.disabled = true + }, + removeItem: (key) => { + cache.delete(key) + if (fallback.disabled) return + localStorage.removeItem(key) + }, } } diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 24b1ee39326..add10fea8be 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -363,7 +363,7 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp } return ( -
+
0}>
@@ -371,7 +371,8 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
{ + onClick={(event) => { + event.stopPropagation() if (file.mime.startsWith("image/") && file.url) { openImagePreview(file.url, file.filename) } @@ -393,7 +394,7 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
-
(textRef = el)} onClick={toggleExpanded}> +
(textRef = el)}> +
+
+ +
+ + {(group) => ( + 0}> +
+

{group}

+
+ + {(id) => ( +
+ {title(id)} + +
+ )} +
+
+
+
+ )} +
) diff --git a/packages/app/src/context/command.tsx b/packages/app/src/context/command.tsx index d8dc13e2344..7986e7509a6 100644 --- a/packages/app/src/context/command.tsx +++ b/packages/app/src/context/command.tsx @@ -1,9 +1,26 @@ import { createMemo, createSignal, onCleanup, onMount, type Accessor } from "solid-js" import { createSimpleContext } from "@opencode-ai/ui/context" import { useDialog } from "@opencode-ai/ui/context/dialog" +import { useSettings } from "@/context/settings" const IS_MAC = typeof navigator === "object" && /(Mac|iPod|iPhone|iPad)/.test(navigator.platform) +const PALETTE_ID = "command.palette" +const DEFAULT_PALETTE_KEYBIND = "mod+shift+p" +const SUGGESTED_PREFIX = "suggested." + +function actionId(id: string) { + if (!id.startsWith(SUGGESTED_PREFIX)) return id + return id.slice(SUGGESTED_PREFIX.length) +} + +function normalizeKey(key: string) { + if (key === ",") return "comma" + if (key === "+") return "plus" + if (key === " ") return "space" + return key.toLowerCase() +} + export type KeybindConfig = string export interface Keybind { @@ -73,7 +90,7 @@ export function parseKeybind(config: string): Keybind[] { } export function matchKeybind(keybinds: Keybind[], event: KeyboardEvent): boolean { - const eventKey = event.key.toLowerCase() + const eventKey = normalizeKey(event.key) for (const kb of keybinds) { const keyMatch = kb.key === eventKey @@ -105,15 +122,18 @@ export function formatKeybind(config: string): string { if (kb.meta) parts.push(IS_MAC ? "⌘" : "Meta") if (kb.key) { - const arrows: Record = { + const keys: Record = { arrowup: "↑", arrowdown: "↓", arrowleft: "←", arrowright: "→", + comma: ",", + plus: "+", + space: "Space", } + const key = kb.key.toLowerCase() const displayKey = - arrows[kb.key.toLowerCase()] ?? - (kb.key.length === 1 ? kb.key.toUpperCase() : kb.key.charAt(0).toUpperCase() + kb.key.slice(1)) + keys[key] ?? (key.length === 1 ? key.toUpperCase() : key.charAt(0).toUpperCase() + key.slice(1)) parts.push(displayKey) } @@ -124,9 +144,17 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex name: "Command", init: () => { const dialog = useDialog() + const settings = useSettings() const [registrations, setRegistrations] = createSignal[]>([]) const [suspendCount, setSuspendCount] = createSignal(0) + const bind = (id: string, def: KeybindConfig | undefined) => { + const custom = settings.keybinds.get(actionId(id)) + const config = custom ?? def + if (!config || config === "none") return + return config + } + const options = createMemo(() => { const seen = new Set() const all: CommandOption[] = [] @@ -139,15 +167,20 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex } } - const suggested = all.filter((x) => x.suggested && !x.disabled) + const resolved = all.map((opt) => ({ + ...opt, + keybind: bind(opt.id, opt.keybind), + })) + + const suggested = resolved.filter((x) => x.suggested && !x.disabled) return [ ...suggested.map((x) => ({ ...x, - id: "suggested." + x.id, + id: SUGGESTED_PREFIX + x.id, category: "Suggested", })), - ...all, + ...resolved, ] }) @@ -169,7 +202,7 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex const handleKeyDown = (event: KeyboardEvent) => { if (suspended() || dialog.active) return - const paletteKeybinds = parseKeybind("mod+shift+p") + const paletteKeybinds = parseKeybind(settings.keybinds.get(PALETTE_ID) ?? DEFAULT_PALETTE_KEYBIND) if (matchKeybind(paletteKeybinds, event)) { event.preventDefault() showPalette() @@ -209,7 +242,11 @@ export const { use: useCommand, provider: CommandProvider } = createSimpleContex run(id, source) }, keybind(id: string) { - const option = options().find((x) => x.id === id || x.id === "suggested." + id) + if (id === PALETTE_ID) { + return formatKeybind(settings.keybinds.get(PALETTE_ID) ?? DEFAULT_PALETTE_KEYBIND) + } + + const option = options().find((x) => x.id === id || x.id === SUGGESTED_PREFIX + id) if (!option?.keybind) return "" return formatKeybind(option.keybind) }, diff --git a/packages/app/src/context/settings.tsx b/packages/app/src/context/settings.tsx index 4160d1b70a1..b44b4e14372 100644 --- a/packages/app/src/context/settings.tsx +++ b/packages/app/src/context/settings.tsx @@ -1,4 +1,4 @@ -import { createStore } from "solid-js/store" +import { createStore, reconcile } from "solid-js/store" import { createEffect, createMemo } from "solid-js" import { createSimpleContext } from "@opencode-ai/ui/context" import { persisted } from "@/utils/persist" @@ -115,6 +115,9 @@ export const { use: useSettings, provider: SettingsProvider } = createSimpleCont reset(action: string) { setStore("keybinds", action, undefined!) }, + resetAll() { + setStore("keybinds", reconcile({})) + }, }, permissions: { autoApprove: createMemo(() => store.permissions?.autoApprove ?? defaultSettings.permissions.autoApprove), From 924fc9ed803d4dfa89faed65579a5a85cd7666c0 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Fri, 16 Jan 2026 15:31:03 -0600 Subject: [PATCH 095/426] wip(app): settings --- packages/app/src/components/prompt-input.tsx | 1 - .../src/components/settings-permissions.tsx | 151 +++++++++++- packages/app/src/context/global-sync.tsx | 219 +++++++++++------- packages/opencode/src/config/config.ts | 108 ++++++++- packages/opencode/src/file/watcher.ts | 23 +- packages/opencode/src/server/event.ts | 7 + packages/opencode/src/server/server.ts | 5 - packages/sdk/js/src/v2/gen/sdk.gen.ts | 39 ++++ packages/sdk/js/src/v2/gen/types.gen.ts | 41 ++++ 9 files changed, 490 insertions(+), 104 deletions(-) create mode 100644 packages/opencode/src/server/event.ts diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 56bbdc8cb55..072ef0bdd05 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -255,7 +255,6 @@ export const PromptInput: Component = (props) => { createEffect(() => { params.id - editorRef.focus() if (params.id) return const interval = setInterval(() => { setStore("placeholder", (prev) => (prev + 1) % PLACEHOLDERS.length) diff --git a/packages/app/src/components/settings-permissions.tsx b/packages/app/src/components/settings-permissions.tsx index 67c3bfb6224..f5ee7665017 100644 --- a/packages/app/src/components/settings-permissions.tsx +++ b/packages/app/src/components/settings-permissions.tsx @@ -1,12 +1,153 @@ -import { Component } from "solid-js" +import { Select } from "@opencode-ai/ui/select" +import { showToast } from "@opencode-ai/ui/toast" +import { Component, For, createMemo, type JSX } from "solid-js" +import { useGlobalSync } from "@/context/global-sync" + +type PermissionAction = "allow" | "ask" | "deny" + +type PermissionObject = Record +type PermissionValue = PermissionAction | PermissionObject | string[] | undefined +type PermissionMap = Record + +type PermissionItem = { + id: string + title: string + description: string +} + +const ACTIONS: Array<{ value: PermissionAction; label: string }> = [ + { value: "allow", label: "Allow" }, + { value: "ask", label: "Ask" }, + { value: "deny", label: "Deny" }, +] + +const ITEMS: PermissionItem[] = [ + { id: "read", title: "Read", description: "Reading a file (matches the file path)" }, + { id: "edit", title: "Edit", description: "Modify files, including edits, writes, patches, and multi-edits" }, + { id: "glob", title: "Glob", description: "Match files using glob patterns" }, + { id: "grep", title: "Grep", description: "Search file contents using regular expressions" }, + { id: "list", title: "List", description: "List files within a directory" }, + { id: "bash", title: "Bash", description: "Run shell commands" }, + { id: "task", title: "Task", description: "Launch sub-agents" }, + { id: "skill", title: "Skill", description: "Load a skill by name" }, + { id: "lsp", title: "LSP", description: "Run language server queries" }, + { id: "todoread", title: "Todo Read", description: "Read the todo list" }, + { id: "todowrite", title: "Todo Write", description: "Update the todo list" }, + { id: "webfetch", title: "Web Fetch", description: "Fetch content from a URL" }, + { id: "websearch", title: "Web Search", description: "Search the web" }, + { id: "codesearch", title: "Code Search", description: "Search code on the web" }, + { id: "external_directory", title: "External Directory", description: "Access files outside the project directory" }, + { id: "doom_loop", title: "Doom Loop", description: "Detect repeated tool calls with identical input" }, +] + +const VALID_ACTIONS = new Set(["allow", "ask", "deny"]) + +function toMap(value: unknown): PermissionMap { + if (value && typeof value === "object" && !Array.isArray(value)) return value as PermissionMap + + const action = getAction(value) + if (action) return { "*": action } + + return {} +} + +function getAction(value: unknown): PermissionAction | undefined { + if (typeof value === "string" && VALID_ACTIONS.has(value as PermissionAction)) return value as PermissionAction + return +} + +function getRuleDefault(value: unknown): PermissionAction | undefined { + const action = getAction(value) + if (action) return action + + if (!value || typeof value !== "object" || Array.isArray(value)) return + + return getAction((value as Record)["*"]) +} export const SettingsPermissions: Component = () => { + const globalSync = useGlobalSync() + + const permission = createMemo(() => { + return toMap(globalSync.data.config.permission) + }) + + const actionFor = (id: string): PermissionAction => { + const value = permission()[id] + const direct = getRuleDefault(value) + if (direct) return direct + + const wildcard = getRuleDefault(permission()["*"]) + if (wildcard) return wildcard + + return "allow" + } + + const setPermission = async (id: string, action: PermissionAction) => { + const before = globalSync.data.config.permission + const map = toMap(before) + const existing = map[id] + + const nextValue = + existing && typeof existing === "object" && !Array.isArray(existing) ? { ...existing, "*": action } : action + + globalSync.set("config", "permission", { ...map, [id]: nextValue }) + globalSync.updateConfig({ permission: { [id]: nextValue } }).catch((err: unknown) => { + globalSync.set("config", "permission", before) + const message = err instanceof Error ? err.message : String(err) + showToast({ title: "Failed to update permissions", description: message }) + }) + } + + return ( +
+
+
+

Permissions

+

Control what tools the server can use by default.

+
+
+ +
+
+

Appearance

+
+ + {(item) => ( + + o.value === theme.colorScheme())} - value={(o) => o.value} - label={(o) => o.label} - onSelect={(option) => option && theme.setColorScheme(option.value)} - variant="secondary" - size="small" - /> - - - - Customise how OpenCode is themed.{" "} - - Learn more - - - } - > - o.value === settings.appearance.font())} - value={(o) => o.value} - label={(o) => o.label} - onSelect={(option) => option && settings.appearance.setFont(option.value)} - variant="secondary" - size="small" - /> - +
+ + o.id === theme.themeId())} + value={(o) => o.id} + label={(o) => o.name} + onSelect={(option) => { + if (!option) return + theme.setTheme(option.id) + }} + onHighlight={(option) => { + if (!option) return + theme.previewTheme(option.id) + return () => theme.cancelPreview() + }} + variant="secondary" + size="small" + /> + + + + o.id === settings.sounds.agent())} - value={(o) => o.id} - label={(o) => o.label} - onHighlight={(option) => { - if (!option) return - playSound(option.src) - }} - onSelect={(option) => { - if (!option) return - settings.sounds.setAgent(option.id) - playSound(option.src) - }} - variant="secondary" - size="small" - /> - - - - o.id === settings.sounds.errors())} - value={(o) => o.id} - label={(o) => o.label} - onHighlight={(option) => { - if (!option) return - playSound(option.src) - }} - onSelect={(option) => { - if (!option) return - settings.sounds.setErrors(option.id) - playSound(option.src) - }} - variant="secondary" - size="small" - /> - +
+ + o.id === settings.sounds.permissions())} + value={(o) => o.id} + label={(o) => o.label} + onHighlight={(option) => { + if (!option) return + playSound(option.src) + }} + onSelect={(option) => { + if (!option) return + settings.sounds.setPermissions(option.id) + playSound(option.src) + }} + variant="secondary" + size="small" + /> + + + +
From 0ffc2c2b3968c18c0eaf1a97af21680304ccb612 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:12:36 +0000 Subject: [PATCH 143/426] increase select dropdown padding to 4px --- packages/ui/src/components/select.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index fa05063006b..d1f07fae137 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -51,7 +51,7 @@ overflow: hidden; border-radius: var(--radius-md); background-color: var(--surface-raised-stronger-non-alpha); - padding: 2px; + padding: 4px; box-shadow: var(--shadow-xs-border); z-index: 60; From af8d91117cba906e71d33e1b4e719da76046de90 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:14:11 +0000 Subject: [PATCH 144/426] update select item styling: 4px radius, default cursor, 8px 2px padding --- packages/ui/src/components/select.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index d1f07fae137..866a64385c6 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -80,9 +80,10 @@ position: relative; display: flex; align-items: center; - padding: 0 6px 0 6px; + padding: 2px 8px; gap: 12px; - border-radius: var(--radius-sm); + border-radius: 4px; + cursor: default; /* text-12-medium */ font-family: var(--font-family-sans); From 09a6107649c967bb05cbf8f4a0a76830406ce261 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:14:38 +0000 Subject: [PATCH 145/426] set select dropdown min-width to 180px --- packages/ui/src/components/select.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index 866a64385c6..0d270118fee 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -46,7 +46,7 @@ } [data-component="select-content"] { - min-width: 4rem; + min-width: 180px; max-width: 23rem; overflow: hidden; border-radius: var(--radius-md); From f3b0f312bf362fbd7c44366722410868e3b134b9 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:16:43 +0000 Subject: [PATCH 146/426] adjust select dropdown positioning and padding structure --- packages/ui/src/components/select.css | 3 ++- packages/ui/src/components/select.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index 0d270118fee..6e298f3c59f 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -51,7 +51,7 @@ overflow: hidden; border-radius: var(--radius-md); background-color: var(--surface-raised-stronger-non-alpha); - padding: 4px; + padding: 0; box-shadow: var(--shadow-xs-border); z-index: 60; @@ -66,6 +66,7 @@ overflow-x: hidden; display: flex; flex-direction: column; + padding: 4px; &:focus { outline: none; diff --git a/packages/ui/src/components/select.tsx b/packages/ui/src/components/select.tsx index 245a36d38f3..1a1de0bef20 100644 --- a/packages/ui/src/components/select.tsx +++ b/packages/ui/src/components/select.tsx @@ -79,7 +79,7 @@ export function Select(props: SelectProps & ButtonProps) { {...others} data-component="select" - placement="bottom-start" + placement="bottom-end" value={local.current} options={grouped()} optionValue={(x) => (local.value ? local.value(x) : (x as string))} From 9ffb7141e5de14d38ce4d9e2e427caac7437416b Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:17:17 +0000 Subject: [PATCH 147/426] set select dropdown border-radius to 8px --- packages/ui/src/components/select.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index 6e298f3c59f..a8fb7e9d166 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -49,7 +49,7 @@ min-width: 180px; max-width: 23rem; overflow: hidden; - border-radius: var(--radius-md); + border-radius: 8px; background-color: var(--surface-raised-stronger-non-alpha); padding: 0; box-shadow: var(--shadow-xs-border); From c57491ba48863195ed0df0124687f6d5d3463882 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:20:20 +0000 Subject: [PATCH 148/426] add triggerStyle prop to Select and use it for font selector --- packages/app/src/components/settings-general.tsx | 1 + packages/ui/src/components/select.tsx | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index 2a8e1d72063..c4efdb696dd 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -100,6 +100,7 @@ export const SettingsGeneral: Component = () => { onSelect={(option) => option && settings.appearance.setFont(option.value)} variant="secondary" size="small" + triggerStyle={{ "font-family": monoFontFamily(settings.appearance.font()) }} > {(option) => {option?.label}} diff --git a/packages/ui/src/components/select.tsx b/packages/ui/src/components/select.tsx index 1a1de0bef20..9d6c45609e2 100644 --- a/packages/ui/src/components/select.tsx +++ b/packages/ui/src/components/select.tsx @@ -16,6 +16,7 @@ export type SelectProps = Omit>, "value" | " class?: ComponentProps<"div">["class"] classList?: ComponentProps<"div">["classList"] children?: (item: T | undefined) => JSX.Element + triggerStyle?: JSX.CSSProperties } export function Select(props: SelectProps & ButtonProps) { @@ -32,6 +33,7 @@ export function Select(props: SelectProps & ButtonProps) { "onHighlight", "onOpenChange", "children", + "triggerStyle", ]) const state = { @@ -127,6 +129,7 @@ export function Select(props: SelectProps & ButtonProps) { as={Button} size={props.size} variant={props.variant} + style={local.triggerStyle} classList={{ ...(local.classList ?? {}), [local.class ?? ""]: !!local.class, From bcb8d970f190d83aece1f03aaf011ba84e546827 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:22:24 +0000 Subject: [PATCH 149/426] add selector icon and use it for select dropdown trigger --- packages/ui/src/components/icon.tsx | 1 + packages/ui/src/components/select.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index ccb9f06dce0..817f7fd6a8c 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -68,6 +68,7 @@ const icons = { trash: ``, sliders: ``, keyboard: ``, + selector: ``, } export interface IconProps extends ComponentProps<"svg"> { diff --git a/packages/ui/src/components/select.tsx b/packages/ui/src/components/select.tsx index 9d6c45609e2..cdf7adfdb2d 100644 --- a/packages/ui/src/components/select.tsx +++ b/packages/ui/src/components/select.tsx @@ -144,7 +144,7 @@ export function Select(props: SelectProps & ButtonProps) { }} - + From a8113ee0df2976755560b1bc32c243dae8332fb3 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:29:32 +0000 Subject: [PATCH 150/426] update select trigger and dropdown styling --- packages/ui/src/components/select.css | 33 +++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index a8fb7e9d166..ab0f62665c7 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -1,12 +1,17 @@ [data-component="select"] { [data-slot="select-select-trigger"] { - padding: 0 4px 0 8px; + padding: 6px 12px; box-shadow: none; + border-radius: 6px; + min-width: 160px; + height: 32px; + justify-content: flex-end; [data-slot="select-select-trigger-value"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + font-size: var(--font-size-base); } [data-slot="select-select-trigger-icon"] { width: 16px; @@ -19,16 +24,14 @@ transition: transform 0.1s ease-in-out; } + &:hover { + background-color: var(--input-base); + box-shadow: var(--shadow-xs-border-base); + } + &[data-expanded] { - &[data-variant="secondary"] { - background-color: var(--button-secondary-hover); - } - &[data-variant="ghost"] { - background-color: var(--surface-raised-base-active); - } - &[data-variant="primary"] { - background-color: var(--icon-strong-active); - } + background-color: var(--input-base); + box-shadow: var(--shadow-xs-border-base); } &:not([data-expanded]):focus { @@ -46,7 +49,7 @@ } [data-component="select-content"] { - min-width: 180px; + min-width: 160px; max-width: 23rem; overflow: hidden; border-radius: 8px; @@ -86,12 +89,12 @@ border-radius: 4px; cursor: default; - /* text-12-medium */ + /* text-14-regular */ font-family: var(--font-family-sans); - font-size: var(--font-size-small); + font-size: var(--font-size-base); font-style: normal; - font-weight: var(--font-weight-medium); - line-height: var(--line-height-large); /* 166.667% */ + font-weight: var(--font-weight-regular); + line-height: var(--line-height-large); letter-spacing: var(--letter-spacing-normal); color: var(--text-strong); From 36bbe809fae8ef7345b0dfffced31920d36a4b6d Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:31:02 +0000 Subject: [PATCH 151/426] add 4px gutter between select trigger and dropdown --- packages/ui/src/components/select.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ui/src/components/select.tsx b/packages/ui/src/components/select.tsx index cdf7adfdb2d..9fb3a901642 100644 --- a/packages/ui/src/components/select.tsx +++ b/packages/ui/src/components/select.tsx @@ -82,6 +82,7 @@ export function Select(props: SelectProps & ButtonProps) { {...others} data-component="select" placement="bottom-end" + gutter={4} value={local.current} options={grouped()} optionValue={(x) => (local.value ? local.value(x) : (x as string))} From 2b95956132a9577082059d179f3a998caab10af7 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:34:19 +0000 Subject: [PATCH 152/426] add x-large dialog size and use it for settings modal --- packages/app/src/components/dialog-settings.tsx | 2 +- packages/ui/src/components/dialog.css | 5 +++++ packages/ui/src/components/dialog.tsx | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/app/src/components/dialog-settings.tsx b/packages/app/src/components/dialog-settings.tsx index 8963d09cc2e..5ef89b8bfc7 100644 --- a/packages/app/src/components/dialog-settings.tsx +++ b/packages/app/src/components/dialog-settings.tsx @@ -13,7 +13,7 @@ import { SettingsMcp } from "./settings-mcp" export const DialogSettings: Component = () => { return ( - +
["class"] classList?: ComponentProps<"div">["classList"] fit?: boolean From 0d9ce6ad7bc3093e78f945124fcdf2e8c18c3481 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:35:16 +0000 Subject: [PATCH 153/426] set settings sidebar width to 200px --- packages/ui/src/components/tabs.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/tabs.css b/packages/ui/src/components/tabs.css index 1fea6308f05..7043ecd12cb 100644 --- a/packages/ui/src/components/tabs.css +++ b/packages/ui/src/components/tabs.css @@ -289,8 +289,8 @@ &[data-variant="settings"] { [data-slot="tabs-list"] { - width: 180px; - min-width: 180px; + width: 200px; + min-width: 200px; padding: 12px; gap: 0; background-color: var(--background-base); From 19ac6f19483cb7969ba5f62a63c7aeb1d5b13978 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:36:28 +0000 Subject: [PATCH 154/426] set hover background of active sidebar item to surface-raised-base --- packages/ui/src/components/tabs.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/ui/src/components/tabs.css b/packages/ui/src/components/tabs.css index 7043ecd12cb..19004ef3e7e 100644 --- a/packages/ui/src/components/tabs.css +++ b/packages/ui/src/components/tabs.css @@ -344,6 +344,10 @@ [data-component="icon"] { color: var(--icon-strong-base); } + + &:hover:not(:disabled) { + background-color: var(--surface-raised-base); + } } } From c2c2bb1fa975ca92d8edec58287ad5f7492c9037 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:37:21 +0000 Subject: [PATCH 155/426] add 4px left padding to sidebar section title --- packages/ui/src/components/tabs.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/tabs.css b/packages/ui/src/components/tabs.css index 19004ef3e7e..10f586b51b4 100644 --- a/packages/ui/src/components/tabs.css +++ b/packages/ui/src/components/tabs.css @@ -303,7 +303,7 @@ [data-slot="tabs-section-title"] { width: 100%; - padding: 0; + padding: 0 0 0 4px; font-family: var(--font-family-sans); font-size: var(--font-size-small); font-weight: var(--font-weight-medium); From f250a229c903bf350eb14de1677cb3524208309d Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:43:17 +0000 Subject: [PATCH 156/426] update select trigger icon styling and spacing --- packages/ui/src/components/select.css | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index ab0f62665c7..5ee8e80229b 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -1,11 +1,12 @@ [data-component="select"] { [data-slot="select-select-trigger"] { - padding: 6px 12px; + padding: 6px 6px 6px 12px; box-shadow: none; border-radius: 6px; min-width: 160px; height: 32px; justify-content: flex-end; + gap: 8px; [data-slot="select-select-trigger-value"] { overflow: hidden; @@ -15,12 +16,14 @@ } [data-slot="select-select-trigger-icon"] { width: 16px; - height: 16px; + height: 20px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--text-weak); + background-color: var(--surface-raised-base); + border-radius: 4px; transition: transform 0.1s ease-in-out; } From 26f66b5f5d28612daf033cc6b8ce7aaf111c5acd Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:46:03 +0000 Subject: [PATCH 157/426] update: color token --- packages/ui/src/theme/themes/oc-1.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/ui/src/theme/themes/oc-1.json b/packages/ui/src/theme/themes/oc-1.json index 2c767385015..fe04b190113 100644 --- a/packages/ui/src/theme/themes/oc-1.json +++ b/packages/ui/src/theme/themes/oc-1.json @@ -30,11 +30,11 @@ "surface-inset-base-hover": "var(--smoke-light-alpha-3)", "surface-inset-strong": "#1f000017", "surface-inset-strong-hover": "#1f000017", - "surface-raised-base": "var(--smoke-light-alpha-1)", + "surface-raised-base": "var(--smoke-light-alpha-2)", "surface-float-base": "var(--smoke-dark-1)", "surface-float-base-hover": "var(--smoke-dark-2)", - "surface-raised-base-hover": "var(--smoke-light-alpha-2)", - "surface-raised-base-active": "var(--smoke-light-alpha-3)", + "surface-raised-base-hover": "var(--smoke-light-alpha-3)", + "surface-raised-base-active": "var(--smoke-light-alpha-4)", "surface-raised-strong": "var(--smoke-light-1)", "surface-raised-strong-hover": "var(--white)", "surface-raised-stronger": "var(--white)", From 715860f997b19cedda32cde73246be01d3f5b22b Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:47:30 +0000 Subject: [PATCH 158/426] set default select trigger background to transparent --- packages/ui/src/components/select.css | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index 5ee8e80229b..eea1b743dc6 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -7,6 +7,7 @@ height: 32px; justify-content: flex-end; gap: 8px; + background-color: transparent; [data-slot="select-select-trigger-value"] { overflow: hidden; From 0c270b474368a65fb6d869ff31d7b47930148a6e Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:50:19 +0000 Subject: [PATCH 159/426] reset select trigger to default state after selection --- packages/app/src/components/settings-general.tsx | 2 +- packages/ui/src/components/select.css | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index c4efdb696dd..f8ffb421d98 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -100,7 +100,7 @@ export const SettingsGeneral: Component = () => { onSelect={(option) => option && settings.appearance.setFont(option.value)} variant="secondary" size="small" - triggerStyle={{ "font-family": monoFontFamily(settings.appearance.font()) }} + triggerStyle={{ "font-family": monoFontFamily(settings.appearance.font()), "min-width": "180px" }} > {(option) => {option?.label}} diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index eea1b743dc6..fc5cffc1355 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -39,15 +39,8 @@ } &:not([data-expanded]):focus { - &[data-variant="secondary"] { - background-color: var(--button-secondary-base); - } - &[data-variant="ghost"] { - background-color: transparent; - } - &[data-variant="primary"] { - background-color: var(--icon-strong-base); - } + background-color: transparent; + box-shadow: none; } } } From 1092cf40349746b943576e6dd3caac34a53bf50d Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:50:49 +0000 Subject: [PATCH 160/426] increase gap between label and icon in select trigger to 12px --- packages/ui/src/components/select.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index fc5cffc1355..0c8872d87f3 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -6,7 +6,7 @@ min-width: 160px; height: 32px; justify-content: flex-end; - gap: 8px; + gap: 12px; background-color: transparent; [data-slot="select-select-trigger-value"] { From 3eea1d424eff415a56401053a7c590232be1a595 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:51:39 +0000 Subject: [PATCH 161/426] set select trigger value font weight to regular --- packages/ui/src/components/select.css | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index 0c8872d87f3..d00f04ab759 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -14,6 +14,7 @@ text-overflow: ellipsis; white-space: nowrap; font-size: var(--font-size-base); + font-weight: var(--font-weight-regular); } [data-slot="select-select-trigger-icon"] { width: 16px; From 73b1bc42f485d7097cd5cbd8ec6cca933319b435 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 17:55:45 +0000 Subject: [PATCH 162/426] increase specificity of select trigger hover/expanded states --- packages/ui/src/components/select.css | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index d00f04ab759..c5ad67e33a2 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -29,12 +29,9 @@ transition: transform 0.1s ease-in-out; } - &:hover { - background-color: var(--input-base); - box-shadow: var(--shadow-xs-border-base); - } - - &[data-expanded] { + &[data-slot="select-select-trigger"]:hover:not(:disabled), + &[data-slot="select-select-trigger"][data-expanded], + &[data-slot="select-select-trigger"][data-expanded]:hover:not(:disabled) { background-color: var(--input-base); box-shadow: var(--shadow-xs-border-base); } From 39afc055bf777d8eeeee2fa747e1d29b90cfe567 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 18:02:13 +0000 Subject: [PATCH 163/426] add fade gradient to settings panel headers --- packages/app/src/components/settings-general.tsx | 8 +++++++- packages/app/src/components/settings-keybinds.tsx | 8 +++++++- packages/app/src/components/settings-permissions.tsx | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index f8ffb421d98..dc0652e60cd 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -37,7 +37,13 @@ export const SettingsGeneral: Component = () => { return (
-
+

General

diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index 208bd909e66..ca5df993d51 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -280,7 +280,13 @@ export const SettingsKeybinds: Component = () => { return (
-
+

Keyboard shortcuts

diff --git a/packages/app/src/components/settings-permissions.tsx b/packages/app/src/components/settings-permissions.tsx index b311da0ef10..aa83de01e05 100644 --- a/packages/app/src/components/settings-permissions.tsx +++ b/packages/app/src/components/settings-permissions.tsx @@ -101,7 +101,13 @@ export const SettingsPermissions: Component = () => { return (
-
+

Permissions

Control what tools the server can use by default.

From 7f4277695d4a8b2de750e68c7c1bc5e4b4e4d05c Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 18:02:49 +0000 Subject: [PATCH 164/426] set 32px spacing between main title and group title --- packages/app/src/components/settings-general.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index dc0652e60cd..5b7c59d8c72 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -49,7 +49,7 @@ export const SettingsGeneral: Component = () => {
-
+
{/* Appearance Section */}

Appearance

From 602b6be4d4376722b7c215326f05b82bc04bc1a8 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 18:05:21 +0000 Subject: [PATCH 165/426] update settings panel padding and make content full width --- packages/app/src/components/settings-general.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index 5b7c59d8c72..29e8ae77aee 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -36,7 +36,7 @@ export const SettingsGeneral: Component = () => { const soundOptions = [...SOUND_OPTIONS] return ( -
+
{ "linear-gradient(to bottom, var(--surface-raised-stronger-non-alpha) calc(100% - 24px), transparent)", }} > -
+

General

-
+
{/* Appearance Section */}

Appearance

From dbc15d4816bd5f2300ff1c03bf7d3afdb119af56 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 18:06:58 +0000 Subject: [PATCH 166/426] add color scheme preview on hover in appearance dropdown --- packages/app/src/components/settings-general.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index 29e8ae77aee..4e0fa765ff9 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -62,6 +62,11 @@ export const SettingsGeneral: Component = () => { value={(o) => o.value} label={(o) => o.label} onSelect={(option) => option && theme.setColorScheme(option.value)} + onHighlight={(option) => { + if (!option) return + theme.previewColorScheme(option.value) + return () => theme.cancelPreview() + }} variant="secondary" size="small" /> From 261b1eca2ed90ac7aaa7b9db19cb41e2be360313 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 18:14:25 +0000 Subject: [PATCH 167/426] update keyboard shortcuts panel to match general settings styling --- .../app/src/components/settings-keybinds.tsx | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index ca5df993d51..bac727cd7ad 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -279,7 +279,7 @@ export const SettingsKeybinds: Component = () => { }) return ( -
+
{ "linear-gradient(to bottom, var(--surface-raised-stronger-non-alpha) calc(100% - 24px), transparent)", }} > -
-
-

Keyboard shortcuts

-

Click a shortcut to edit. Press Esc to cancel.

-
+
+

Keyboard shortcuts

-
+
{(group) => ( 0}> -
-

{group}

-
+
+

{group}

+
{(id) => ( -
+
{title(id)}
}> Date: Tue, 20 Jan 2026 21:14:37 +0000 Subject: [PATCH 181/426] fix: remove close delay on hover cards to stop overlapping --- packages/app/src/pages/session.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 7d6f31dc366..e794b8b8f4d 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1275,7 +1275,7 @@ export default function Page() {
-
No changes in this session yet
+
No changes in this session yet
@@ -1547,7 +1547,7 @@ export default function Page() {
-
No changes in this session yet
+
No changes in this session yet
From 4350b8fd6b7c6c0499976fb42ae52e7685e8a2ae Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 21:22:32 +0000 Subject: [PATCH 182/426] fix: show View all sessions button for active project and close hovercard on click --- packages/app/src/pages/layout.tsx | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index ceaddeeb5ef..3fe3c75ecc8 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1841,6 +1841,7 @@ export default function Layout(props: ParentProps) { // @ts-ignore
- -
- -
-
+
+ +
From 575cc59b376bbd9420f6a9d94fa6d121914c535a Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 21:49:49 +0000 Subject: [PATCH 183/426] fix: increase sidebar icon size by removing 16px constraint --- packages/ui/src/components/icon-button.css | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/ui/src/components/icon-button.css b/packages/ui/src/components/icon-button.css index 374cd37923a..7d5d3280fce 100644 --- a/packages/ui/src/components/icon-button.css +++ b/packages/ui/src/components/icon-button.css @@ -125,11 +125,6 @@ /* padding: 0 8px 0 6px; */ gap: 8px; - [data-slot="icon-svg"] { - height: 16px; - width: 16px; - } - /* text-12-medium */ font-family: var(--font-family-sans); font-size: var(--font-size-small); From 7be6671e6ea797a38aae1a6673faf74768199d07 Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 21:52:50 +0000 Subject: [PATCH 184/426] refactor Select component to use settings variant for settings modal styling --- packages/app/src/components/prompt-input.tsx | 1 - .../app/src/components/settings-general.tsx | 6 + .../src/components/settings-permissions.tsx | 1 + packages/ui/src/components/select.css | 124 ++++++++++++------ packages/ui/src/components/select.tsx | 7 +- 5 files changed, 92 insertions(+), 47 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index e05b6646bd5..072ef0bdd05 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1583,7 +1583,6 @@ export const PromptInput: Component = (props) => { onSelect={local.agent.set} class="capitalize" variant="ghost" - triggerVariant="button" /> { }} variant="secondary" size="small" + triggerVariant="settings" /> @@ -99,6 +100,7 @@ export const SettingsGeneral: Component = () => { }} variant="secondary" size="small" + triggerVariant="settings" /> @@ -111,6 +113,7 @@ export const SettingsGeneral: Component = () => { onSelect={(option) => option && settings.appearance.setFont(option.value)} variant="secondary" size="small" + triggerVariant="settings" triggerStyle={{ "font-family": monoFontFamily(settings.appearance.font()), "min-width": "180px" }} > {(option) => {option?.label}} @@ -172,6 +175,7 @@ export const SettingsGeneral: Component = () => { }} variant="secondary" size="small" + triggerVariant="settings" /> @@ -192,6 +196,7 @@ export const SettingsGeneral: Component = () => { }} variant="secondary" size="small" + triggerVariant="settings" /> @@ -212,6 +217,7 @@ export const SettingsGeneral: Component = () => { }} variant="secondary" size="small" + triggerVariant="settings" />
diff --git a/packages/app/src/components/settings-permissions.tsx b/packages/app/src/components/settings-permissions.tsx index aa83de01e05..d0551d24752 100644 --- a/packages/app/src/components/settings-permissions.tsx +++ b/packages/app/src/components/settings-permissions.tsx @@ -129,6 +129,7 @@ export const SettingsPermissions: Component = () => { onSelect={(option) => option && setPermission(item.id, option.value)} variant="secondary" size="small" + triggerVariant="settings" /> )} diff --git a/packages/ui/src/components/select.css b/packages/ui/src/components/select.css index 73e2b2a6d03..d9791b51e8f 100644 --- a/packages/ui/src/components/select.css +++ b/packages/ui/src/components/select.css @@ -1,70 +1,89 @@ [data-component="select"] { [data-slot="select-select-trigger"] { - padding: 6px 6px 6px 12px; + padding: 0 4px 0 8px; box-shadow: none; - border-radius: 6px; - min-width: 160px; - height: 32px; - justify-content: flex-end; - gap: 12px; - background-color: transparent; [data-slot="select-select-trigger-value"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - font-size: var(--font-size-base); - font-weight: var(--font-weight-regular); } [data-slot="select-select-trigger-icon"] { width: 16px; - height: 20px; + height: 16px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--text-weak); - background-color: var(--surface-raised-base); - border-radius: 4px; transition: transform 0.1s ease-in-out; } - &[data-slot="select-select-trigger"]:hover:not(:disabled), - &[data-slot="select-select-trigger"][data-expanded], - &[data-slot="select-select-trigger"][data-expanded]:hover:not(:disabled) { - background-color: var(--input-base); - box-shadow: var(--shadow-xs-border-base); + &[data-expanded] { + &[data-variant="secondary"] { + background-color: var(--button-secondary-hover); + } + &[data-variant="ghost"] { + background-color: var(--surface-raised-base-active); + } + &[data-variant="primary"] { + background-color: var(--icon-strong-active); + } } &:not([data-expanded]):focus { - background-color: transparent; - box-shadow: none; + &[data-variant="secondary"] { + background-color: var(--button-secondary-base); + } + &[data-variant="ghost"] { + background-color: transparent; + } + &[data-variant="primary"] { + background-color: var(--icon-strong-base); + } } } - &[data-trigger-style="button"] { + &[data-trigger-style="settings"] { [data-slot="select-select-trigger"] { - padding: 0 6px; - min-width: auto; - height: 24px; - justify-content: center; - gap: 6px; + padding: 6px 6px 6px 12px; + box-shadow: none; + border-radius: 6px; + min-width: 160px; + height: 32px; + justify-content: flex-end; + gap: 12px; + background-color: transparent; - [data-slot="select-select-trigger-icon"] { - width: auto; - height: auto; - background-color: transparent; - border-radius: 0; + [data-slot="select-select-trigger-value"] { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-size: var(--font-size-base); + font-weight: var(--font-weight-regular); } - - &[data-slot="select-select-trigger"]:hover:not(:disabled) { - background-color: var(--surface-raised-base-hover); - box-shadow: none; + [data-slot="select-select-trigger-icon"] { + width: 16px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: var(--text-weak); + background-color: var(--surface-raised-base); + border-radius: 4px; + transition: transform 0.1s ease-in-out; } + &[data-slot="select-select-trigger"]:hover:not(:disabled), &[data-slot="select-select-trigger"][data-expanded], &[data-slot="select-select-trigger"][data-expanded]:hover:not(:disabled) { - background-color: var(--surface-raised-base-active); + background-color: var(--input-base); + box-shadow: var(--shadow-xs-border-base); + } + + &:not([data-expanded]):focus { + background-color: transparent; box-shadow: none; } } @@ -72,12 +91,12 @@ } [data-component="select-content"] { - min-width: 160px; + min-width: 104px; max-width: 23rem; overflow: hidden; - border-radius: 8px; + border-radius: var(--radius-md); background-color: var(--surface-raised-stronger-non-alpha); - padding: 0; + padding: 4px; box-shadow: var(--shadow-xs-border); z-index: 60; @@ -92,7 +111,6 @@ overflow-x: hidden; display: flex; flex-direction: column; - padding: 4px; &:focus { outline: none; @@ -112,12 +130,12 @@ border-radius: 4px; cursor: default; - /* text-14-regular */ + /* text-12-medium */ font-family: var(--font-family-sans); - font-size: var(--font-size-base); + font-size: var(--font-size-small); font-style: normal; - font-weight: var(--font-weight-regular); - line-height: var(--line-height-large); + font-weight: var(--font-weight-medium); + line-height: var(--line-height-large); /* 166.667% */ letter-spacing: var(--letter-spacing-normal); color: var(--text-strong); @@ -152,6 +170,26 @@ } } +[data-component="select-content"][data-trigger-style="settings"] { + min-width: 160px; + border-radius: 8px; + padding: 0; + + [data-slot="select-select-content-list"] { + padding: 4px; + } + + [data-slot="select-select-item"] { + /* text-14-regular */ + font-family: var(--font-family-sans); + font-size: var(--font-size-base); + font-style: normal; + font-weight: var(--font-weight-regular); + line-height: var(--line-height-large); + letter-spacing: var(--letter-spacing-normal); + } +} + @keyframes select-open { from { opacity: 0; diff --git a/packages/ui/src/components/select.tsx b/packages/ui/src/components/select.tsx index e334ede422b..b83f5f4630a 100644 --- a/packages/ui/src/components/select.tsx +++ b/packages/ui/src/components/select.tsx @@ -17,7 +17,7 @@ export type SelectProps = Omit>, "value" | " classList?: ComponentProps<"div">["classList"] children?: (item: T | undefined) => JSX.Element triggerStyle?: JSX.CSSProperties - triggerVariant?: "default" | "button" + triggerVariant?: "settings" } export function Select(props: SelectProps & Omit) { @@ -84,7 +84,7 @@ export function Select(props: SelectProps & Omit) {...others} data-component="select" data-trigger-style={local.triggerVariant} - placement="bottom-end" + placement={local.triggerVariant === "settings" ? "bottom-end" : "bottom-start"} gutter={4} value={local.current} options={grouped()} @@ -148,7 +148,7 @@ export function Select(props: SelectProps & Omit) }} - + @@ -158,6 +158,7 @@ export function Select(props: SelectProps & Omit) [local.class ?? ""]: !!local.class, }} data-component="select-content" + data-trigger-style={local.triggerVariant} > From 8137e4dd9ca85ccca18a68414d1fdd1c7e014714 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:32:26 -0600 Subject: [PATCH 185/426] chore: agents.md --- packages/app/AGENTS.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/app/AGENTS.md b/packages/app/AGENTS.md index 98b681bca8a..85e6a846641 100644 --- a/packages/app/AGENTS.md +++ b/packages/app/AGENTS.md @@ -1,7 +1,5 @@ ## Debugging -- To test the opencode app, use the playwright MCP server, the app is already - running at http://localhost:3000 - NEVER try to restart the app, or the server process, EVER. ## SolidJS @@ -11,3 +9,14 @@ ## Tool Calling - ALWAYS USE PARALLEL TOOLS WHEN APPLICABLE. + +## Browser Automation + +Use `agent-browser` for web automation. Run `agent-browser --help` for all commands. + +Core workflow: + +1. `agent-browser open ` - Navigate to page +2. `agent-browser snapshot -i` - Get interactive elements with refs (@e1, @e2) +3. `agent-browser click @e1` / `fill @e2 "text"` - Interact using refs +4. Re-snapshot after page changes From d2fcdef571464c64668062718f3dceec0e79fbeb Mon Sep 17 00:00:00 2001 From: opencode Date: Tue, 20 Jan 2026 22:04:12 +0000 Subject: [PATCH 186/426] release: v1.1.28 --- bun.lock | 30 +++++++++++++------------- packages/app/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 4 ++-- packages/sdk/js/package.json | 4 ++-- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/bun.lock b/bun.lock index e7b9dc09cea..76eb6ef34f2 100644 --- a/bun.lock +++ b/bun.lock @@ -23,7 +23,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -72,7 +72,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -106,7 +106,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -133,7 +133,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -157,7 +157,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -181,7 +181,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -210,7 +210,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -239,7 +239,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -255,7 +255,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.1.27", + "version": "1.1.28", "bin": { "opencode": "./bin/opencode", }, @@ -359,7 +359,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -380,7 +380,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.1.27", + "version": "1.1.28", "devDependencies": { "@hey-api/openapi-ts": "0.90.4", "@tsconfig/node22": "catalog:", @@ -391,7 +391,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -404,7 +404,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -445,7 +445,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "zod": "catalog:", }, @@ -456,7 +456,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 54098906009..dd4f8f3c0e5 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.1.27", + "version": "1.1.28", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 7638b54d2db..211eb8e1e74 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.1.27", + "version": "1.1.28", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index f5620a54f38..d2f48fc58f7 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.1.27", + "version": "1.1.28", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 0a79603fdc4..4e3e4e34916 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.1.27", + "version": "1.1.28", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index fd1f5702d5e..1f39b81387c 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.1.27", + "version": "1.1.28", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 70e2aeac9f2..b49175658e4 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.1.27", + "version": "1.1.28", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index c96acbadda5..f7f890119e7 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.1.27", + "version": "1.1.28", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index d7762cf1375..a3ec52e4600 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.1.27" +version = "1.1.28" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.27/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.27/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.27/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.27/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.27/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index 7f581dcb5f2..58fe9593441 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.1.27", + "version": "1.1.28", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index d4b9731eb10..5b993a4d7c1 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.1.27", + "version": "1.1.28", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 3e8f84f0130..370e124e7c3 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.1.27", + "version": "1.1.28", "type": "module", "license": "MIT", "scripts": { @@ -25,4 +25,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 472c9c78a3d..6bfe22655df 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.1.27", + "version": "1.1.28", "type": "module", "license": "MIT", "scripts": { @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} +} \ No newline at end of file diff --git a/packages/slack/package.json b/packages/slack/package.json index c3ae3ea91cc..de50bea5bbb 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.1.27", + "version": "1.1.28", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index e940631468f..be9f8b923e2 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.1.27", + "version": "1.1.28", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index 299244dd6aa..d4b11aa2bb4 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.1.27", + "version": "1.1.28", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index 15f3bd42eb2..fc10bcaabd8 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.1.27", + "version": "1.1.28", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 7345aae1bbd..c9b2d9cdbaf 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.1.27", + "version": "1.1.28", "publisher": "sst-dev", "repository": { "type": "git", From a0636fcd50ebf9f9bddb54718fbb319b7df6dee2 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 16:01:00 -0600 Subject: [PATCH 187/426] fix(app): auto-scroll ux --- packages/app/src/pages/session.tsx | 85 ++++++++------- packages/ui/src/components/message-part.tsx | 1 + packages/ui/src/components/session-turn.tsx | 1 + packages/ui/src/hooks/create-auto-scroll.tsx | 107 +++++++++++-------- 4 files changed, 108 insertions(+), 86 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index e794b8b8f4d..670e8ff0294 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -840,13 +840,27 @@ export default function Page() { const autoScroll = createAutoScroll({ working: () => true, + overflowAnchor: "auto", }) + // When the user returns to the bottom, treat the active message as "latest". + createEffect( + on( + autoScroll.userScrolled, + (scrolled) => { + if (scrolled) return + setStore("messageId", undefined) + }, + { defer: true }, + ), + ) + createEffect( on( isWorking, (working, prev) => { if (!working || prev) return + if (autoScroll.userScrolled()) return autoScroll.forceScrollToBottom() }, { defer: true }, @@ -990,58 +1004,33 @@ export default function Page() { const a = el.getBoundingClientRect() const b = root.getBoundingClientRect() - const top = a.top - b.top + root.scrollTop - root.scrollTo({ top, behavior }) + const offset = (info()?.title ? 40 : 0) + 12 + const top = a.top - b.top + root.scrollTop - offset + root.scrollTo({ top: top > 0 ? top : 0, behavior }) return true } const scrollToMessage = (message: UserMessage, behavior: ScrollBehavior = "smooth") => { + // Navigating to a specific message should always pause auto-follow. + autoScroll.pause() setActiveMessage(message) + updateHash(message.id) const msgs = visibleUserMessages() const index = msgs.findIndex((m) => m.id === message.id) if (index !== -1 && index < store.turnStart) { setStore("turnStart", index) scheduleTurnBackfill() - - requestAnimationFrame(() => { - const el = document.getElementById(anchor(message.id)) - if (!el) { - requestAnimationFrame(() => { - const next = document.getElementById(anchor(message.id)) - if (!next) return - scrollToElement(next, behavior) - }) - return - } - scrollToElement(el, behavior) - }) - - updateHash(message.id) - return } - const el = document.getElementById(anchor(message.id)) - if (!el) { - updateHash(message.id) - requestAnimationFrame(() => { - const next = document.getElementById(anchor(message.id)) - if (!next) return - if (!scrollToElement(next, behavior)) return - }) - return + const id = anchor(message.id) + const attempt = (tries: number) => { + const el = document.getElementById(id) + if (el && scrollToElement(el, behavior)) return + if (tries >= 8) return + requestAnimationFrame(() => attempt(tries + 1)) } - if (scrollToElement(el, behavior)) { - updateHash(message.id) - return - } - - requestAnimationFrame(() => { - const next = document.getElementById(anchor(message.id)) - if (!next) return - if (!scrollToElement(next, behavior)) return - }) - updateHash(message.id) + attempt(0) } const applyHash = (behavior: ScrollBehavior) => { @@ -1283,13 +1272,29 @@ export default function Page() { } >
+ +
+ +
+
{ autoScroll.handleScroll() - if (isDesktop()) scheduleScrollSpy(e.currentTarget) + if (isDesktop() && autoScroll.userScrolled()) scheduleScrollSpy(e.currentTarget) }} - onClick={autoScroll.handleInteraction} class="relative min-w-0 w-full h-full overflow-y-auto no-scrollbar" style={{ "--session-title-height": info()?.title ? "40px" : "0px" }} > diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 401613ff588..4087705d17c 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -817,6 +817,7 @@ ToolRegistry.register({ const autoScroll = createAutoScroll({ working: () => true, + overflowAnchor: "auto", }) const childSessionId = () => props.metadata.sessionId as string | undefined diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 360589f4111..21d00cf00a1 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -379,6 +379,7 @@ export function SessionTurn( const autoScroll = createAutoScroll({ working, onUserInteracted: props.onUserInteracted, + overflowAnchor: "auto", }) createResizeObserver( diff --git a/packages/ui/src/hooks/create-auto-scroll.tsx b/packages/ui/src/hooks/create-auto-scroll.tsx index b9eae54881d..b74fb699d7a 100644 --- a/packages/ui/src/hooks/create-auto-scroll.tsx +++ b/packages/ui/src/hooks/create-auto-scroll.tsx @@ -5,14 +5,18 @@ import { createResizeObserver } from "@solid-primitives/resize-observer" export interface AutoScrollOptions { working: () => boolean onUserInteracted?: () => void + overflowAnchor?: "none" | "auto" | "dynamic" + bottomThreshold?: number } export function createAutoScroll(options: AutoScrollOptions) { let scroll: HTMLElement | undefined let settling = false let settleTimer: ReturnType | undefined - let down = false let cleanup: (() => void) | undefined + let resizeFrame: number | undefined + + const threshold = () => options.bottomThreshold ?? 10 const [store, setStore] = createStore({ contentRef: undefined as HTMLElement | undefined, @@ -21,9 +25,7 @@ export function createAutoScroll(options: AutoScrollOptions) { const active = () => options.working() || settling - const distanceFromBottom = () => { - const el = scroll - if (!el) return 0 + const distanceFromBottom = (el: HTMLElement) => { return el.scrollHeight - el.clientHeight - el.scrollTop } @@ -35,20 +37,21 @@ export function createAutoScroll(options: AutoScrollOptions) { const scrollToBottom = (force: boolean) => { if (!force && !active()) return - if (!scroll) return + const el = scroll + if (!el) return if (!force && store.userScrolled) return if (force && store.userScrolled) setStore("userScrolled", false) - const distance = distanceFromBottom() + const distance = distanceFromBottom(el) if (distance < 2) return - const behavior: ScrollBehavior = force || distance > 96 ? "auto" : "smooth" - scrollToBottomNow(behavior) + // For auto-following content we prefer immediate updates to avoid + // visible "catch up" animations while content is still settling. + scrollToBottomNow("auto") } const stop = () => { - if (!active()) return if (store.userScrolled) return setStore("userScrolled", true) @@ -57,45 +60,47 @@ export function createAutoScroll(options: AutoScrollOptions) { const handleWheel = (e: WheelEvent) => { if (e.deltaY >= 0) return + // If the user is scrolling within a nested scrollable region (tool output, + // code block, etc), don't treat it as leaving the "follow bottom" mode. + // Those regions opt in via `data-scrollable`. + const el = scroll + const target = e.target instanceof Element ? e.target : undefined + const nested = target?.closest("[data-scrollable]") + if (el && nested && nested !== el) return stop() } - const handlePointerUp = () => { - down = false - window.removeEventListener("pointerup", handlePointerUp) - } + const handleScroll = () => { + const el = scroll + if (!el) return - const handlePointerDown = () => { - if (down) return - down = true - window.addEventListener("pointerup", handlePointerUp) - } + if (distanceFromBottom(el) < threshold()) { + if (store.userScrolled) setStore("userScrolled", false) + return + } - const handleTouchEnd = () => { - down = false - window.removeEventListener("touchend", handleTouchEnd) + stop() } - const handleTouchStart = () => { - if (down) return - down = true - window.addEventListener("touchend", handleTouchEnd) + const handleInteraction = () => { + if (!active()) return + stop() } - const handleScroll = () => { - if (!active()) return - if (!scroll) return + const updateOverflowAnchor = (el: HTMLElement) => { + const mode = options.overflowAnchor ?? "dynamic" - if (distanceFromBottom() < 10) { - if (store.userScrolled) setStore("userScrolled", false) + if (mode === "none") { + el.style.overflowAnchor = "none" return } - if (down) stop() - } + if (mode === "auto") { + el.style.overflowAnchor = "auto" + return + } - const handleInteraction = () => { - stop() + el.style.overflowAnchor = store.userScrolled ? "auto" : "none" } createResizeObserver( @@ -103,7 +108,11 @@ export function createAutoScroll(options: AutoScrollOptions) { () => { if (!active()) return if (store.userScrolled) return - scrollToBottom(false) + if (resizeFrame !== undefined) return + resizeFrame = requestAnimationFrame(() => { + resizeFrame = undefined + scrollToBottom(false) + }) }, ) @@ -113,10 +122,8 @@ export function createAutoScroll(options: AutoScrollOptions) { if (settleTimer) clearTimeout(settleTimer) settleTimer = undefined - setStore("userScrolled", false) - if (working) { - scrollToBottom(true) + if (!store.userScrolled) scrollToBottom(true) return } @@ -127,8 +134,18 @@ export function createAutoScroll(options: AutoScrollOptions) { }), ) + createEffect(() => { + // Track `userScrolled` even before `scrollRef` is attached, so we can + // update overflow anchoring once the element exists. + store.userScrolled + const el = scroll + if (!el) return + updateOverflowAnchor(el) + }) + onCleanup(() => { if (settleTimer) clearTimeout(settleTimer) + if (resizeFrame !== undefined) cancelAnimationFrame(resizeFrame) if (cleanup) cleanup() }) @@ -140,26 +157,24 @@ export function createAutoScroll(options: AutoScrollOptions) { } scroll = el - down = false if (!el) return - el.style.overflowAnchor = "none" + updateOverflowAnchor(el) el.addEventListener("wheel", handleWheel, { passive: true }) - el.addEventListener("pointerdown", handlePointerDown) - el.addEventListener("touchstart", handleTouchStart, { passive: true }) cleanup = () => { el.removeEventListener("wheel", handleWheel) - el.removeEventListener("pointerdown", handlePointerDown) - el.removeEventListener("touchstart", handleTouchStart) - window.removeEventListener("pointerup", handlePointerUp) - window.removeEventListener("touchend", handleTouchEnd) } }, contentRef: (el: HTMLElement | undefined) => setStore("contentRef", el), handleScroll, handleInteraction, + pause: stop, + resume: () => { + if (store.userScrolled) setStore("userScrolled", false) + scrollToBottom(true) + }, scrollToBottom: () => scrollToBottom(false), forceScrollToBottom: () => scrollToBottom(true), userScrolled: () => store.userScrolled, From 80dc74a0ec7c5bd3a03f95a8fd658993d302da2a Mon Sep 17 00:00:00 2001 From: David Hill Date: Tue, 20 Jan 2026 22:02:25 +0000 Subject: [PATCH 188/426] add keyboard shortcut (mod+,) to open settings dialog --- packages/app/src/pages/layout.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 3fe3c75ecc8..9d873e08a29 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -831,6 +831,13 @@ export default function Layout(props: ParentProps) { category: "Server", onSelect: () => openServer(), }, + { + id: "settings.open", + title: "Open settings", + category: "Settings", + keybind: "mod+comma", + onSelect: () => openSettings(), + }, { id: "session.previous", title: "Previous session", @@ -2052,9 +2059,13 @@ export default function Layout(props: ParentProps) {
- + - + Date: Tue, 20 Jan 2026 22:03:00 +0000 Subject: [PATCH 189/426] fix: icon size in sidbar --- packages/ui/src/components/icon.css | 5 +++++ packages/ui/src/components/icon.tsx | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/components/icon.css b/packages/ui/src/components/icon.css index 14a52bc83d2..a2ebee30bc1 100644 --- a/packages/ui/src/components/icon.css +++ b/packages/ui/src/components/icon.css @@ -17,6 +17,11 @@ height: 20px; } + &[data-size="medium"] { + width: 24px; + height: 24px; + } + &[data-size="large"] { width: 24px; height: 24px; diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index 817f7fd6a8c..00f1f8add05 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -73,7 +73,7 @@ const icons = { export interface IconProps extends ComponentProps<"svg"> { name: keyof typeof icons - size?: "small" | "normal" | "large" + size?: "small" | "normal" | "medium" | "large" } export function Icon(props: IconProps) { From 85ef23a0983581c5be3d52ff9089da7fa80baf53 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 16:12:11 -0600 Subject: [PATCH 190/426] fix(app): don't interfere with scroll when using message nav --- packages/app/src/pages/session.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 670e8ff0294..14f77d63ed4 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -168,6 +168,7 @@ export default function Page() { const prompt = usePrompt() const permission = usePermission() const [pendingMessage, setPendingMessage] = createSignal(undefined) + const [pendingHash, setPendingHash] = createSignal(undefined) const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const tabs = createMemo(() => layout.tabs(sessionKey())) const view = createMemo(() => layout.view(sessionKey())) @@ -1036,6 +1037,7 @@ export default function Page() { const applyHash = (behavior: ScrollBehavior) => { const hash = window.location.hash.slice(1) if (!hash) { + setPendingHash(undefined) autoScroll.forceScrollToBottom() return } @@ -1044,21 +1046,25 @@ export default function Page() { if (match) { const msg = visibleUserMessages().find((m) => m.id === match[1]) if (msg) { + setPendingHash(undefined) scrollToMessage(msg, behavior) return } // If we have a message hash but the message isn't loaded/rendered yet, // don't fall back to "bottom". We'll retry once messages arrive. + setPendingHash(match[1]) return } const target = document.getElementById(hash) if (target) { + setPendingHash(undefined) scrollToElement(target, behavior) return } + setPendingHash(undefined) autoScroll.forceScrollToBottom() } @@ -1116,20 +1122,14 @@ export default function Page() { visibleUserMessages().length store.turnStart - const targetId = - pendingMessage() ?? - (() => { - const hash = window.location.hash.slice(1) - const match = hash.match(/^message-(.+)$/) - if (!match) return undefined - return match[1] - })() + const targetId = pendingMessage() ?? pendingHash() if (!targetId) return if (store.messageId === targetId) return const msg = visibleUserMessages().find((m) => m.id === targetId) if (!msg) return if (pendingMessage() === targetId) setPendingMessage(undefined) + if (pendingHash() === targetId) setPendingHash(undefined) requestAnimationFrame(() => scrollToMessage(msg, "auto")) }) From 5c3e9cfa2cd8c551fa57027b70d4492919347e17 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 20 Jan 2026 22:13:03 +0000 Subject: [PATCH 191/426] chore: generate --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 370e124e7c3..05625f6d68e 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -25,4 +25,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 6bfe22655df..cd1abcc157a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} From 0c4ffec857ad9f3c788dbe1313079d86607590a7 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 20 Jan 2026 16:16:23 -0600 Subject: [PATCH 192/426] chore: rename toModelMessage -> toModelMessages --- packages/opencode/src/session/compaction.ts | 2 +- packages/opencode/src/session/message-v2.ts | 2 +- packages/opencode/src/session/prompt.ts | 4 ++-- .../opencode/test/session/message-v2.test.ts | 24 +++++++++---------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index ae69221288f..7f8c8e00b5f 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -149,7 +149,7 @@ export namespace SessionCompaction { tools: {}, system: [], messages: [ - ...MessageV2.toModelMessage(input.messages), + ...MessageV2.toModelMessages(input.messages), { role: "user", content: [ diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index d326976f1ae..c1a2fd1c973 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -432,7 +432,7 @@ export namespace MessageV2 { }) export type WithParts = z.infer - export function toModelMessage(input: WithParts[]): ModelMessage[] { + export function toModelMessages(input: WithParts[]): ModelMessage[] { const result: UIMessage[] = [] for (const msg of input) { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 9325583acf7..c38ea3b9eda 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -598,7 +598,7 @@ export namespace SessionPrompt { sessionID, system: [...(await SystemPrompt.environment()), ...(await SystemPrompt.custom())], messages: [ - ...MessageV2.toModelMessage(sessionMessages), + ...MessageV2.toModelMessages(sessionMessages), ...(isLastStep ? [ { @@ -1800,7 +1800,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the }, ...(hasOnlySubtaskParts ? [{ role: "user" as const, content: subtaskParts.map((p) => p.prompt).join("\n") }] - : MessageV2.toModelMessage(contextMessages)), + : MessageV2.toModelMessages(contextMessages)), ], }) const text = await result.text.catch((err) => log.error("failed to generate title", { error: err })) diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index a59294399f5..bb667d28473 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -66,7 +66,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "hello" }], @@ -91,7 +91,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([]) + expect(MessageV2.toModelMessages(input)).toStrictEqual([]) }) test("includes synthetic text parts", () => { @@ -122,7 +122,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "hello" }], @@ -189,7 +189,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "user", content: [ @@ -259,7 +259,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "run tool" }], @@ -341,7 +341,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "run tool" }], @@ -408,7 +408,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "run tool" }], @@ -461,7 +461,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([]) + expect(MessageV2.toModelMessages(input)).toStrictEqual([]) }) test("includes aborted assistant messages only when they have non-step-start/reasoning content", () => { @@ -504,7 +504,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "assistant", content: [ @@ -540,7 +540,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input)).toStrictEqual([ { role: "assistant", content: [{ type: "text", text: "first" }], @@ -567,7 +567,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessage(input)).toStrictEqual([]) + expect(MessageV2.toModelMessages(input)).toStrictEqual([]) }) test("converts pending/running tool calls to error results to prevent dangling tool_use", () => { @@ -614,7 +614,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - const result = MessageV2.toModelMessage(input) + const result = MessageV2.toModelMessages(input) expect(result).toStrictEqual([ { From 021e42c0bb10a2555f78e4f296bbf5406e8a9bba Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Tue, 20 Jan 2026 16:39:00 -0600 Subject: [PATCH 193/426] core: fix issue when switching models (mainly between providers) where past reasoning/metadata would be sent to server and cause 400 errors since they came from another account/provider --- packages/opencode/src/session/compaction.ts | 2 +- packages/opencode/src/session/message-v2.ts | 15 +- packages/opencode/src/session/prompt.ts | 17 +- .../opencode/test/session/message-v2.test.ts | 160 ++++++++++++++++-- 4 files changed, 164 insertions(+), 30 deletions(-) diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index 7f8c8e00b5f..fb382530291 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -149,7 +149,7 @@ export namespace SessionCompaction { tools: {}, system: [], messages: [ - ...MessageV2.toModelMessages(input.messages), + ...MessageV2.toModelMessages(input.messages, model), { role: "user", content: [ diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index c1a2fd1c973..08e6cf0bc76 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -11,6 +11,7 @@ import { ProviderTransform } from "@/provider/transform" import { STATUS_CODES } from "http" import { iife } from "@/util/iife" import { type SystemError } from "bun" +import type { Provider } from "@/provider/provider" export namespace MessageV2 { export const OutputLengthError = NamedError.create("MessageOutputLengthError", z.object({})) @@ -432,7 +433,7 @@ export namespace MessageV2 { }) export type WithParts = z.infer - export function toModelMessages(input: WithParts[]): ModelMessage[] { + export function toModelMessages(input: WithParts[], model: Provider.Model): ModelMessage[] { const result: UIMessage[] = [] for (const msg of input) { @@ -476,6 +477,8 @@ export namespace MessageV2 { } if (msg.info.role === "assistant") { + const differentModel = `${model.providerID}/${model.api.id}` !== `${msg.info.providerID}/${msg.info.modelID}` + if ( msg.info.error && !( @@ -495,7 +498,7 @@ export namespace MessageV2 { assistantMessage.parts.push({ type: "text", text: part.text, - providerMetadata: part.metadata, + ...(differentModel ? {} : { providerMetadata: part.metadata }), }) if (part.type === "step-start") assistantMessage.parts.push({ @@ -527,7 +530,7 @@ export namespace MessageV2 { toolCallId: part.callID, input: part.state.input, output: part.state.time.compacted ? "[Old tool result content cleared]" : part.state.output, - callProviderMetadata: part.metadata, + ...(differentModel ? {} : { callProviderMetadata: part.metadata }), }) } if (part.state.status === "error") @@ -537,7 +540,7 @@ export namespace MessageV2 { toolCallId: part.callID, input: part.state.input, errorText: part.state.error, - callProviderMetadata: part.metadata, + ...(differentModel ? {} : { callProviderMetadata: part.metadata }), }) // Handle pending/running tool calls to prevent dangling tool_use blocks // Anthropic/Claude APIs require every tool_use to have a corresponding tool_result @@ -548,14 +551,14 @@ export namespace MessageV2 { toolCallId: part.callID, input: part.state.input, errorText: "[Tool execution was interrupted]", - callProviderMetadata: part.metadata, + ...(differentModel ? {} : { callProviderMetadata: part.metadata }), }) } if (part.type === "reasoning") { assistantMessage.parts.push({ type: "reasoning", text: part.text, - providerMetadata: part.metadata, + ...(differentModel ? {} : { providerMetadata: part.metadata }), }) } } diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index c38ea3b9eda..57ef0ef5ed4 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -598,7 +598,7 @@ export namespace SessionPrompt { sessionID, system: [...(await SystemPrompt.environment()), ...(await SystemPrompt.custom())], messages: [ - ...MessageV2.toModelMessages(sessionMessages), + ...MessageV2.toModelMessages(sessionMessages, model), ...(isLastStep ? [ { @@ -1778,18 +1778,19 @@ NOTE: At any point in time through this workflow you should feel free to ask the const agent = await Agent.get("title") if (!agent) return + const model = await iife(async () => { + if (agent.model) return await Provider.getModel(agent.model.providerID, agent.model.modelID) + return ( + (await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID)) + ) + }) const result = await LLM.stream({ agent, user: firstRealUser.info as MessageV2.User, system: [], small: true, tools: {}, - model: await iife(async () => { - if (agent.model) return await Provider.getModel(agent.model.providerID, agent.model.modelID) - return ( - (await Provider.getSmallModel(input.providerID)) ?? (await Provider.getModel(input.providerID, input.modelID)) - ) - }), + model, abort: new AbortController().signal, sessionID: input.session.id, retries: 2, @@ -1800,7 +1801,7 @@ NOTE: At any point in time through this workflow you should feel free to ask the }, ...(hasOnlySubtaskParts ? [{ role: "user" as const, content: subtaskParts.map((p) => p.prompt).join("\n") }] - : MessageV2.toModelMessages(contextMessages)), + : MessageV2.toModelMessages(contextMessages, model)), ], }) const text = await result.text.catch((err) => log.error("failed to generate title", { error: err })) diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index bb667d28473..b8d05643380 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -1,7 +1,56 @@ import { describe, expect, test } from "bun:test" import { MessageV2 } from "../../src/session/message-v2" +import type { Provider } from "../../src/provider/provider" const sessionID = "session" +const model: Provider.Model = { + id: "test-model", + providerID: "test", + api: { + id: "test-model", + url: "https://example.com", + npm: "@ai-sdk/openai", + }, + name: "Test Model", + capabilities: { + temperature: true, + reasoning: false, + attachment: false, + toolcall: true, + input: { + text: true, + audio: false, + image: false, + video: false, + pdf: false, + }, + output: { + text: true, + audio: false, + image: false, + video: false, + pdf: false, + }, + interleaved: false, + }, + cost: { + input: 0, + output: 0, + cache: { + read: 0, + write: 0, + }, + }, + limit: { + context: 0, + input: 0, + output: 0, + }, + status: "active", + options: {}, + headers: {}, + release_date: "2026-01-01", +} function userInfo(id: string): MessageV2.User { return { @@ -16,7 +65,13 @@ function userInfo(id: string): MessageV2.User { } as unknown as MessageV2.User } -function assistantInfo(id: string, parentID: string, error?: MessageV2.Assistant["error"]): MessageV2.Assistant { +function assistantInfo( + id: string, + parentID: string, + error?: MessageV2.Assistant["error"], + meta?: { providerID: string; modelID: string }, +): MessageV2.Assistant { + const infoModel = meta ?? { providerID: model.providerID, modelID: model.api.id } return { id, sessionID, @@ -24,8 +79,8 @@ function assistantInfo(id: string, parentID: string, error?: MessageV2.Assistant time: { created: 0 }, error, parentID, - modelID: "model", - providerID: "provider", + modelID: infoModel.modelID, + providerID: infoModel.providerID, mode: "", agent: "agent", path: { cwd: "/", root: "/" }, @@ -66,7 +121,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "hello" }], @@ -91,7 +146,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([]) + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([]) }) test("includes synthetic text parts", () => { @@ -122,7 +177,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "hello" }], @@ -189,7 +244,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "user", content: [ @@ -259,7 +314,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "run tool" }], @@ -305,6 +360,81 @@ describe("session.message-v2.toModelMessage", () => { ]) }) + test("omits provider metadata when assistant model differs", () => { + const userID = "m-user" + const assistantID = "m-assistant" + + const input: MessageV2.WithParts[] = [ + { + info: userInfo(userID), + parts: [ + { + ...basePart(userID, "u1"), + type: "text", + text: "run tool", + }, + ] as MessageV2.Part[], + }, + { + info: assistantInfo(assistantID, userID, undefined, { providerID: "other", modelID: "other" }), + parts: [ + { + ...basePart(assistantID, "a1"), + type: "text", + text: "done", + metadata: { openai: { assistant: "meta" } }, + }, + { + ...basePart(assistantID, "a2"), + type: "tool", + callID: "call-1", + tool: "bash", + state: { + status: "completed", + input: { cmd: "ls" }, + output: "ok", + title: "Bash", + metadata: {}, + time: { start: 0, end: 1 }, + }, + metadata: { openai: { tool: "meta" } }, + }, + ] as MessageV2.Part[], + }, + ] + + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ + { + role: "user", + content: [{ type: "text", text: "run tool" }], + }, + { + role: "assistant", + content: [ + { type: "text", text: "done" }, + { + type: "tool-call", + toolCallId: "call-1", + toolName: "bash", + input: { cmd: "ls" }, + providerExecuted: undefined, + }, + ], + }, + { + role: "tool", + content: [ + { + type: "tool-result", + toolCallId: "call-1", + toolName: "bash", + output: { type: "text", value: "ok" }, + }, + ], + }, + ]) + }) + test("replaces compacted tool output with placeholder", () => { const userID = "m-user" const assistantID = "m-assistant" @@ -341,7 +471,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "run tool" }], @@ -408,7 +538,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "user", content: [{ type: "text", text: "run tool" }], @@ -461,7 +591,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([]) + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([]) }) test("includes aborted assistant messages only when they have non-step-start/reasoning content", () => { @@ -504,7 +634,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "assistant", content: [ @@ -540,7 +670,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([ + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([ { role: "assistant", content: [{ type: "text", text: "first" }], @@ -567,7 +697,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - expect(MessageV2.toModelMessages(input)).toStrictEqual([]) + expect(MessageV2.toModelMessages(input, model)).toStrictEqual([]) }) test("converts pending/running tool calls to error results to prevent dangling tool_use", () => { @@ -614,7 +744,7 @@ describe("session.message-v2.toModelMessage", () => { }, ] - const result = MessageV2.toModelMessages(input) + const result = MessageV2.toModelMessages(input, model) expect(result).toStrictEqual([ { From 7f50b279962aa76990e2ca2b7eb9bdfd3beafc38 Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Tue, 20 Jan 2026 18:22:47 -0500 Subject: [PATCH 194/426] docs: add Anthropic subscription warning and update feature list to highlight GitHub Copilot (#9721) --- packages/console/app/src/routes/index.tsx | 2 +- packages/console/app/src/routes/temp.tsx | 2 +- packages/web/src/components/Lander.astro | 2 +- packages/web/src/content/docs/providers.mdx | 4 ++++ 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/console/app/src/routes/index.tsx b/packages/console/app/src/routes/index.tsx index 6bcf9dbb532..252dcbb9743 100644 --- a/packages/console/app/src/routes/index.tsx +++ b/packages/console/app/src/routes/index.tsx @@ -192,7 +192,7 @@ export default function Home() {
  • [*]
    - Claude Pro Log in with Anthropic to use your Claude Pro or Max account + GitHub Copilot Log in with GitHub to use your Copilot account
  • diff --git a/packages/console/app/src/routes/temp.tsx b/packages/console/app/src/routes/temp.tsx index 68bda67da05..ccd95681068 100644 --- a/packages/console/app/src/routes/temp.tsx +++ b/packages/console/app/src/routes/temp.tsx @@ -89,7 +89,7 @@ export default function Home() { 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 + GitHub Copilot Log in with GitHub to use your Copilot account
  • ChatGPT Plus/Pro Log in with OpenAI to use your ChatGPT Plus or Pro account diff --git a/packages/web/src/components/Lander.astro b/packages/web/src/components/Lander.astro index 0e522158d5a..2bfe0a102b5 100644 --- a/packages/web/src/components/Lander.astro +++ b/packages/web/src/components/Lander.astro @@ -77,7 +77,7 @@ if (image) {
  • LSP enabled: Automatically loads the right LSPs for the LLM.
  • Multi-session: Start multiple agents in parallel on the same project.
  • 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.
  • +
  • GitHub Copilot: Log in with GitHub to use your Copilot account.
  • ChatGPT Plus/Pro: Log in with OpenAI to use your ChatGPT Plus or Pro account.
  • Use any model: Supports 75+ LLM providers through Models.dev, including local models.
  • diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index 2a7d2ffb424..a5ae45815e5 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -235,6 +235,10 @@ To use Amazon Bedrock with OpenCode: We recommend signing up for [Claude Pro](https://www.anthropic.com/news/claude-pro) or [Max](https://www.anthropic.com/max). +:::info +We've received reports of some users having their subscriptions blocked while using it with OpenCode. +::: + 1. Once you've signed up, run the `/connect` command and select Anthropic. ```txt From 0470717c7fbb9ff175b70c6d76ffb2330ef40a1a Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:50:23 -0600 Subject: [PATCH 195/426] feat(app): initial i18n stubbing --- bun.lock | 3 ++ packages/app/package.json | 1 + packages/app/src/app.tsx | 21 ++++---- packages/app/src/context/language.tsx | 77 +++++++++++++++++++++++++++ packages/app/src/i18n/en.ts | 9 ++++ packages/app/src/i18n/zh.ts | 13 +++++ packages/app/src/pages/layout.tsx | 36 +++++++++++++ 7 files changed, 151 insertions(+), 9 deletions(-) create mode 100644 packages/app/src/context/language.tsx create mode 100644 packages/app/src/i18n/en.ts create mode 100644 packages/app/src/i18n/zh.ts diff --git a/bun.lock b/bun.lock index 76eb6ef34f2..f515b8cab7d 100644 --- a/bun.lock +++ b/bun.lock @@ -33,6 +33,7 @@ "@solid-primitives/active-element": "2.1.3", "@solid-primitives/audio": "1.4.2", "@solid-primitives/event-bus": "1.1.2", + "@solid-primitives/i18n": "2.2.1", "@solid-primitives/media": "2.3.3", "@solid-primitives/resize-observer": "2.1.3", "@solid-primitives/scroll": "2.1.3", @@ -1634,6 +1635,8 @@ "@solid-primitives/event-listener": ["@solid-primitives/event-listener@2.4.3", "", { "dependencies": { "@solid-primitives/utils": "^6.3.2" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-h4VqkYFv6Gf+L7SQj+Y6puigL/5DIi7x5q07VZET7AWcS+9/G3WfIE9WheniHWJs51OEkRB43w6lDys5YeFceg=="], + "@solid-primitives/i18n": ["@solid-primitives/i18n@2.2.1", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-TnTnE2Ku11MGYZ1JzhJ8pYscwg1fr9MteoYxPwsfxWfh9Jp5K7RRJncJn9BhOHvNLwROjqOHZ46PT7sPHqbcXw=="], + "@solid-primitives/keyed": ["@solid-primitives/keyed@1.5.2", "", { "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-BgoEdqPw48URnI+L5sZIHdF4ua4Las1eWEBBPaoSFs42kkhnHue+rwCBPL2Z9ebOyQ75sUhUfOETdJfmv0D6Kg=="], "@solid-primitives/map": ["@solid-primitives/map@0.4.13", "", { "dependencies": { "@solid-primitives/trigger": "^1.1.0" }, "peerDependencies": { "solid-js": "^1.6.12" } }, "sha512-B1zyFbsiTQvqPr+cuPCXO72sRuczG9Swncqk5P74NCGw1VE8qa/Ry9GlfI1e/VdeQYHjan+XkbE3rO2GW/qKew=="], diff --git a/packages/app/package.json b/packages/app/package.json index dd4f8f3c0e5..ae71034d5fb 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -42,6 +42,7 @@ "@shikijs/transformers": "3.9.2", "@solid-primitives/active-element": "2.1.3", "@solid-primitives/audio": "1.4.2", + "@solid-primitives/i18n": "2.2.1", "@solid-primitives/event-bus": "1.1.2", "@solid-primitives/media": "2.3.3", "@solid-primitives/resize-observer": "2.1.3", diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index 33a5556effa..8f9104bd852 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -21,6 +21,7 @@ import { FileProvider } from "@/context/file" import { NotificationProvider } from "@/context/notification" import { DialogProvider } from "@opencode-ai/ui/context/dialog" import { CommandProvider } from "@/context/command" +import { LanguageProvider } from "@/context/language" import { Logo } from "@opencode-ai/ui/logo" import Layout from "@/pages/layout" import DirectoryLayout from "@/pages/directory-layout" @@ -84,15 +85,17 @@ export function AppInterface(props: { defaultUrl?: string }) { ( - - - - - {props.children} - - - - + + + + + + {props.children} + + + + + )} > diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx new file mode 100644 index 00000000000..3178cb6b66d --- /dev/null +++ b/packages/app/src/context/language.tsx @@ -0,0 +1,77 @@ +import * as i18n from "@solid-primitives/i18n" +import { createEffect, createMemo } from "solid-js" +import { createStore } from "solid-js/store" +import { createSimpleContext } from "@opencode-ai/ui/context" +import { Persist, persisted } from "@/utils/persist" +import { dict as en } from "@/i18n/en" +import { dict as zh } from "@/i18n/zh" + +export type Locale = "en" | "zh" + +type RawDictionary = typeof en +type Dictionary = i18n.Flatten + +const LOCALES: readonly Locale[] = ["en", "zh"] + +function detectLocale(): Locale { + if (typeof navigator !== "object") return "en" + + const languages = navigator.languages?.length ? navigator.languages : [navigator.language] + for (const language of languages) { + if (!language) continue + if (language.toLowerCase().startsWith("zh")) return "zh" + } + + return "en" +} + +export const { use: useLanguage, provider: LanguageProvider } = createSimpleContext({ + name: "Language", + init: () => { + const [store, setStore, _, ready] = persisted( + Persist.global("language", ["language.v1"]), + createStore({ + locale: detectLocale() as Locale, + }), + ) + + const locale = createMemo(() => (store.locale === "zh" ? "zh" : "en")) + + createEffect(() => { + const current = locale() + if (store.locale === current) return + setStore("locale", current) + }) + + const base = i18n.flatten(en) + const dict = createMemo(() => { + if (locale() === "en") return base + return { ...base, ...i18n.flatten(zh) } + }) + + const t = i18n.translator(dict, i18n.resolveTemplate) + + const labelKey: Record = { + en: "language.en", + zh: "language.zh", + } + + const label = (value: Locale) => t(labelKey[value]) + + createEffect(() => { + if (typeof document !== "object") return + document.documentElement.lang = locale() + }) + + return { + ready, + locale, + locales: LOCALES, + label, + t, + setLocale(next: Locale) { + setStore("locale", next) + }, + } + }, +}) diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts new file mode 100644 index 00000000000..c51b1a7d749 --- /dev/null +++ b/packages/app/src/i18n/en.ts @@ -0,0 +1,9 @@ +export const dict = { + "command.category.language": "Language", + "command.language.cycle": "Cycle language", + "command.language.set": "Use language: {{language}}", + "language.en": "English", + "language.zh": "Chinese", + "toast.language.title": "Language", + "toast.language.description": "Switched to {{language}}", +} diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts new file mode 100644 index 00000000000..3f136082158 --- /dev/null +++ b/packages/app/src/i18n/zh.ts @@ -0,0 +1,13 @@ +import { dict as en } from "./en" + +type Keys = keyof typeof en + +export const dict = { + "command.category.language": "\u8bed\u8a00", + "command.language.cycle": "\u5207\u6362\u8bed\u8a00", + "command.language.set": "\u4f7f\u7528\u8bed\u8a00: {{language}}", + "language.en": "\u82f1\u8bed", + "language.zh": "\u4e2d\u6587", + "toast.language.title": "\u8bed\u8a00", + "toast.language.description": "\u5df2\u5207\u6362\u5230{{language}}", +} satisfies Partial> diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 9d873e08a29..bd6c044a846 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -69,6 +69,7 @@ import { DialogSelectDirectory } from "@/components/dialog-select-directory" import { DialogEditProject } from "@/components/dialog-edit-project" import { Titlebar } from "@/components/titlebar" import { useServer } from "@/context/server" +import { useLanguage, type Locale } from "@/context/language" export default function Layout(props: ParentProps) { const [store, setStore, , ready] = persisted( @@ -109,6 +110,7 @@ export default function Layout(props: ParentProps) { const dialog = useDialog() const command = useCommand() const theme = useTheme() + const language = useLanguage() const initialDir = params.dir const availableThemeEntries = createMemo(() => Object.entries(theme.themes())) const colorSchemeOrder: ColorScheme[] = ["system", "light", "dark"] @@ -268,6 +270,24 @@ export default function Layout(props: ParentProps) { }) } + function setLocale(next: Locale) { + if (next === language.locale()) return + language.setLocale(next) + showToast({ + title: language.t("toast.language.title"), + description: language.t("toast.language.description", { language: language.label(next) }), + }) + } + + function cycleLanguage(direction = 1) { + const locales = language.locales + const currentIndex = locales.indexOf(language.locale()) + const nextIndex = currentIndex === -1 ? 0 : (currentIndex + direction + locales.length) % locales.length + const next = locales[nextIndex] + if (!next) return + setLocale(next) + } + onMount(() => { if (!platform.checkUpdate || !platform.update || !platform.restart) return @@ -906,6 +926,22 @@ export default function Layout(props: ParentProps) { }) } + commands.push({ + id: "language.cycle", + title: language.t("command.language.cycle"), + category: language.t("command.category.language"), + onSelect: () => cycleLanguage(1), + }) + + for (const locale of language.locales) { + commands.push({ + id: `language.set.${locale}`, + title: language.t("command.language.set", { language: language.label(locale) }), + category: language.t("command.category.language"), + onSelect: () => setLocale(locale), + }) + } + return commands }) From 92beae14100af23c20afe7b6bc2bb393643d698f Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 05:40:44 -0600 Subject: [PATCH 196/426] wip(app): i18n --- .../src/components/dialog-edit-project.tsx | 23 +- packages/app/src/components/dialog-fork.tsx | 8 +- .../src/components/dialog-manage-models.tsx | 8 +- .../components/dialog-select-directory.tsx | 9 +- .../app/src/components/dialog-select-file.tsx | 18 +- .../app/src/components/dialog-select-mcp.tsx | 19 +- .../components/dialog-select-model-unpaid.tsx | 22 +- .../src/components/dialog-select-model.tsx | 20 +- .../src/components/dialog-select-provider.tsx | 26 ++- .../src/components/dialog-select-server.tsx | 26 ++- packages/app/src/components/prompt-input.tsx | 38 +++- .../session/session-context-tab.tsx | 55 ++--- packages/app/src/context/command.tsx | 4 +- packages/app/src/i18n/en.ts | 196 ++++++++++++++++ packages/app/src/i18n/zh.ts | 210 +++++++++++++++++- packages/app/src/pages/layout.tsx | 59 ++--- packages/app/src/pages/session.tsx | 171 +++++++------- packages/ui/src/components/list.tsx | 7 +- 18 files changed, 692 insertions(+), 227 deletions(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index 2e414a43702..b6e2f822eba 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -9,12 +9,14 @@ import { useGlobalSDK } from "@/context/global-sdk" import { type LocalProject, getAvatarColors } from "@/context/layout" import { getFilename } from "@opencode-ai/util/path" import { Avatar } from "@opencode-ai/ui/avatar" +import { useLanguage } from "@/context/language" const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const export function DialogEditProject(props: { project: LocalProject }) { const dialog = useDialog() const globalSDK = useGlobalSDK() + const language = useLanguage() const folderName = createMemo(() => getFilename(props.project.worktree)) const defaultName = createMemo(() => props.project.name || folderName()) @@ -81,20 +83,20 @@ export function DialogEditProject(props: { project: LocalProject }) { } return ( - +
    setStore("name", v)} />
    - +
    setIconHover(true)} onMouseLeave={() => setIconHover(false)}>
    } > - Project icon + {language.t("dialog.project.edit.icon.alt")}
    - Recommended size 128x128px + {language.t("dialog.project.edit.icon.hint")} + {language.t("dialog.project.edit.icon.recommended")}
    - +
    {(color) => ( @@ -209,10 +216,10 @@ export function DialogEditProject(props: { project: LocalProject }) {
    diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx index 472a1994f13..c4c52fc4d71 100644 --- a/packages/app/src/components/dialog-fork.tsx +++ b/packages/app/src/components/dialog-fork.tsx @@ -9,6 +9,7 @@ import { List } from "@opencode-ai/ui/list" import { extractPromptFromParts } from "@/utils/prompt" import type { TextPart as SDKTextPart } from "@opencode-ai/sdk/v2/client" import { base64Encode } from "@opencode-ai/util/encode" +import { useLanguage } from "@/context/language" interface ForkableMessage { id: string @@ -27,6 +28,7 @@ export const DialogFork: Component = () => { const sdk = useSDK() const prompt = usePrompt() const dialog = useDialog() + const language = useLanguage() const messages = createMemo((): ForkableMessage[] => { const sessionID = params.id @@ -73,11 +75,11 @@ export const DialogFork: Component = () => { } return ( - + x.id} items={messages} filterKeys={["text"]} diff --git a/packages/app/src/components/dialog-manage-models.tsx b/packages/app/src/components/dialog-manage-models.tsx index 66d12528891..1ecefa2cbbf 100644 --- a/packages/app/src/components/dialog-manage-models.tsx +++ b/packages/app/src/components/dialog-manage-models.tsx @@ -4,14 +4,16 @@ import { Switch } from "@opencode-ai/ui/switch" import type { Component } from "solid-js" import { useLocal } from "@/context/local" import { popularProviders } from "@/hooks/use-providers" +import { useLanguage } from "@/context/language" export const DialogManageModels: Component = () => { const local = useLocal() + const language = useLanguage() return ( - + `${x?.provider?.id}:${x?.id}`} items={local.model.list()} filterKeys={["provider.name", "name", "id"]} diff --git a/packages/app/src/components/dialog-select-directory.tsx b/packages/app/src/components/dialog-select-directory.tsx index bf4a1f9edd4..1ee2501de5f 100644 --- a/packages/app/src/components/dialog-select-directory.tsx +++ b/packages/app/src/components/dialog-select-directory.tsx @@ -6,6 +6,7 @@ import { getDirectory, getFilename } from "@opencode-ai/util/path" import { createMemo } from "solid-js" import { useGlobalSDK } from "@/context/global-sdk" import { useGlobalSync } from "@/context/global-sync" +import { useLanguage } from "@/context/language" interface DialogSelectDirectoryProps { title?: string @@ -17,6 +18,7 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) { const sync = useGlobalSync() const sdk = useGlobalSDK() const dialog = useDialog() + const language = useLanguage() const home = createMemo(() => sync.data.path.home) const root = createMemo(() => sync.data.path.home || sync.data.path.directory) @@ -81,10 +83,11 @@ export function DialogSelectDirectory(props: DialogSelectDirectoryProps) { } return ( - + x} onSelect={(path) => { diff --git a/packages/app/src/components/dialog-select-file.tsx b/packages/app/src/components/dialog-select-file.tsx index 2e28c4d2edf..7c3113a544e 100644 --- a/packages/app/src/components/dialog-select-file.tsx +++ b/packages/app/src/components/dialog-select-file.tsx @@ -9,6 +9,7 @@ import { createMemo, createSignal, onCleanup, Show } from "solid-js" import { formatKeybind, useCommand, type CommandOption } from "@/context/command" import { useLayout } from "@/context/layout" import { useFile } from "@/context/file" +import { useLanguage } from "@/context/language" type EntryType = "command" | "file" @@ -18,13 +19,14 @@ type Entry = { title: string description?: string keybind?: string - category: "Commands" | "Files" + category: string option?: CommandOption path?: string } export function DialogSelectFile() { const command = useCommand() + const language = useLanguage() const layout = useLayout() const file = useFile() const dialog = useDialog() @@ -56,7 +58,7 @@ export function DialogSelectFile() { title: option.title, description: option.description, keybind: option.keybind, - category: "Commands", + category: language.t("palette.group.commands"), option, }) @@ -64,7 +66,7 @@ export function DialogSelectFile() { id: "file:" + path, type: "file", title: path, - category: "Files", + category: language.t("palette.group.files"), path, }) @@ -143,8 +145,14 @@ export function DialogSelectFile() { return ( item.id} filterKeys={["title", "description", "category"]} diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index c29cd827e3b..25ef8df0150 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -4,10 +4,12 @@ import { useSDK } from "@/context/sdk" import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" import { Switch } from "@opencode-ai/ui/switch" +import { useLanguage } from "@/context/language" export const DialogSelectMcp: Component = () => { const sync = useSync() const sdk = useSDK() + const language = useLanguage() const [loading, setLoading] = createSignal(null) const items = createMemo(() => @@ -34,10 +36,13 @@ export const DialogSelectMcp: Component = () => { const totalCount = createMemo(() => items().length) return ( - + x?.name ?? ""} items={items} filterKeys={["name", "status"]} @@ -60,16 +65,16 @@ export const DialogSelectMcp: Component = () => {
    {i.name} - connected + {language.t("mcp.status.connected")} - failed + {language.t("mcp.status.failed")} - needs auth + {language.t("mcp.status.needs_auth")} - disabled + {language.t("mcp.status.disabled")} ... diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index 24ec8092deb..6ac1fa678f3 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -10,11 +10,13 @@ import { useLocal } from "@/context/local" import { popularProviders, useProviders } from "@/hooks/use-providers" import { DialogConnectProvider } from "./dialog-connect-provider" import { DialogSelectProvider } from "./dialog-select-provider" +import { useLanguage } from "@/context/language" export const DialogSelectModelUnpaid: Component = () => { const local = useLocal() const dialog = useDialog() const providers = useProviders() + const language = useLanguage() let listRef: ListRef | undefined const handleKey = (e: KeyboardEvent) => { @@ -30,9 +32,9 @@ export const DialogSelectModelUnpaid: Component = () => { }) return ( - +
    -
    Free models provided by OpenCode
    +
    {language.t("dialog.model.unpaid.freeModels.title")}
    (listRef = ref)} items={local.model.list} @@ -48,9 +50,9 @@ export const DialogSelectModelUnpaid: Component = () => { {(i) => (
    {i.name} - Free + {language.t("model.tag.free")} - Latest + {language.t("model.tag.latest")}
    )} @@ -60,9 +62,9 @@ export const DialogSelectModelUnpaid: Component = () => {
    -
    -
    Add more models from popular providers
    -
    +
    +
    {language.t("dialog.model.unpaid.addMore.title")}
    +
    x?.id} @@ -83,10 +85,10 @@ export const DialogSelectModelUnpaid: Component = () => { {i.name} - Recommended + {language.t("dialog.provider.tag.recommended")} -
    Connect with Claude Pro/Max or API key
    +
    {language.t("dialog.provider.anthropic.note")}
    )} @@ -99,7 +101,7 @@ export const DialogSelectModelUnpaid: Component = () => { dialog.show(() => ) }} > - View all providers + {language.t("dialog.provider.viewAll")}
    diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index d54f9369af1..ba42ffdd6e9 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -9,6 +9,7 @@ import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" import { DialogSelectProvider } from "./dialog-select-provider" import { DialogManageModels } from "./dialog-manage-models" +import { useLanguage } from "@/context/language" const ModelList: Component<{ provider?: string @@ -16,6 +17,7 @@ const ModelList: Component<{ onSelect: () => void }> = (props) => { const local = useLocal() + const language = useLanguage() const models = createMemo(() => local.model @@ -27,8 +29,8 @@ const ModelList: Component<{ return ( `${x.provider.id}:${x.id}`} items={models} current={local.model.current()} @@ -55,10 +57,10 @@ const ModelList: Component<{
    {i.name} - Free + {language.t("model.tag.free")} - Latest + {language.t("model.tag.latest")}
    )} @@ -71,13 +73,14 @@ export const ModelSelectorPopover: Component<{ children: JSX.Element }> = (props) => { const [open, setOpen] = createSignal(false) + const language = useLanguage() return ( {props.children} - Select model + {language.t("dialog.model.select.title")} setOpen(false)} class="p-1" /> @@ -87,10 +90,11 @@ export const ModelSelectorPopover: Component<{ export const DialogSelectModel: Component<{ provider?: string }> = (props) => { const dialog = useDialog() + const language = useLanguage() return ( = (props) => { tabIndex={-1} onClick={() => dialog.show(() => )} > - Connect provider + {language.t("command.provider.connect")} } > @@ -108,7 +112,7 @@ export const DialogSelectModel: Component<{ provider?: string }> = (props) => { class="ml-3 mt-5 mb-6 text-text-base self-start" onClick={() => dialog.show(() => )} > - Manage models + {language.t("dialog.model.manage")} ) diff --git a/packages/app/src/components/dialog-select-provider.tsx b/packages/app/src/components/dialog-select-provider.tsx index 5bbde5d41a2..1e059c21983 100644 --- a/packages/app/src/components/dialog-select-provider.tsx +++ b/packages/app/src/components/dialog-select-provider.tsx @@ -7,28 +7,38 @@ import { Tag } from "@opencode-ai/ui/tag" import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { IconName } from "@opencode-ai/ui/icons/provider" import { DialogConnectProvider } from "./dialog-connect-provider" +import { useLanguage } from "@/context/language" export const DialogSelectProvider: Component = () => { const dialog = useDialog() const providers = useProviders() + const language = useLanguage() + + const popularGroup = () => language.t("dialog.provider.group.popular") + const otherGroup = () => language.t("dialog.provider.group.other") return ( - + x?.id} - items={providers.all} + items={() => { + language.locale() + return providers.all() + }} filterKeys={["id", "name"]} - groupBy={(x) => (popularProviders.includes(x.id) ? "Popular" : "Other")} + groupBy={(x) => (popularProviders.includes(x.id) ? popularGroup() : otherGroup())} sortBy={(a, b) => { if (popularProviders.includes(a.id) && popularProviders.includes(b.id)) return popularProviders.indexOf(a.id) - popularProviders.indexOf(b.id) return a.name.localeCompare(b.name) }} sortGroupsBy={(a, b) => { - if (a.category === "Popular" && b.category !== "Popular") return -1 - if (b.category === "Popular" && a.category !== "Popular") return 1 + const popular = popularGroup() + if (a.category === popular && b.category !== popular) return -1 + if (b.category === popular && a.category !== popular) return 1 return 0 }} onSelect={(x) => { @@ -41,10 +51,10 @@ export const DialogSelectProvider: Component = () => { {i.name} - Recommended + {language.t("dialog.provider.tag.recommended")} -
    Connect with Claude Pro/Max or API key
    +
    {language.t("dialog.provider.anthropic.note")}
    )} diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index 90f37212888..0b3967b76be 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -10,6 +10,7 @@ import { normalizeServerUrl, serverDisplayName, useServer } from "@/context/serv import { usePlatform } from "@/context/platform" import { createOpencodeClient } from "@opencode-ai/sdk/v2/client" import { useNavigate } from "@solidjs/router" +import { useLanguage } from "@/context/language" type ServerStatus = { healthy: boolean; version?: string } @@ -30,6 +31,7 @@ export function DialogSelectServer() { const dialog = useDialog() const server = useServer() const platform = usePlatform() + const language = useLanguage() const [store, setStore] = createStore({ url: "", adding: false, @@ -109,7 +111,7 @@ export function DialogSelectServer() { setStore("adding", false) if (!result.healthy) { - setStore("error", "Could not connect to server") + setStore("error", language.t("dialog.server.add.error")) return } @@ -122,11 +124,11 @@ export function DialogSelectServer() { } return ( - +
    x} current={current()} @@ -168,14 +170,14 @@ export function DialogSelectServer() {
    -

    Add a server

    +

    {language.t("dialog.server.add.title")}

    @@ -197,9 +199,9 @@ export function DialogSelectServer() {
    -

    Default server

    +

    {language.t("dialog.server.default.title")}

    - Connect to this server on app launch instead of starting a local server. Requires restart. + {language.t("dialog.server.default.description")}

    @@ -208,7 +210,7 @@ export function DialogSelectServer() { fallback={ No server selected} + fallback={{language.t("dialog.server.default.none")}} > } @@ -234,7 +236,7 @@ export function DialogSelectServer() { defaultUrlActions.refetch() }} > - Clear + {language.t("dialog.server.default.clear")}
    diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 072ef0bdd05..63e9dfbfbde 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -49,6 +49,7 @@ import { Persist, persisted } from "@/utils/persist" import { Identifier } from "@/utils/id" import { SessionContextUsage } from "@/components/session-context-usage" import { usePermission } from "@/context/permission" +import { useLanguage } from "@/context/language" import { useGlobalSync } from "@/context/global-sync" import { usePlatform } from "@/context/platform" import { createOpencodeClient, type Message, type Part } from "@opencode-ai/sdk/v2/client" @@ -118,6 +119,7 @@ export const PromptInput: Component = (props) => { const providers = useProviders() const command = useCommand() const permission = usePermission() + const language = useLanguage() let editorRef!: HTMLDivElement let fileInputRef!: HTMLInputElement let scrollRef!: HTMLDivElement @@ -1560,8 +1562,8 @@ export const PromptInput: Component = (props) => {
    {store.mode === "shell" - ? "Enter shell command..." - : `Ask anything... "${PLACEHOLDERS[store.placeholder]}"`} + ? language.t("prompt.placeholder.shell") + : language.t("prompt.placeholder.normal", { example: PLACEHOLDERS[store.placeholder] })}
    @@ -1571,12 +1573,16 @@ export const PromptInput: Component = (props) => {
    - Shell - esc to exit + {language.t("prompt.mode.shell")} + {language.t("prompt.mode.shell.exit")}
    - + o.value === theme.colorScheme())} + options={languageOptions()} + current={languageOptions().find((o) => o.value === language.locale())} + value={(o) => o.value} + label={(o) => o.label} + onSelect={(option) => option && language.setLocale(option.value)} + variant="secondary" + size="small" + triggerVariant="settings" + /> + + + + o.value === settings.appearance.font())} @@ -124,12 +157,12 @@ export const SettingsGeneral: Component = () => { {/* System notifications Section */}
    -

    System notifications

    +

    {language.t("settings.general.section.notifications")}

    { /> - + settings.notifications.setPermissions(checked)} /> - + settings.notifications.setErrors(checked)} @@ -155,10 +194,13 @@ export const SettingsGeneral: Component = () => { {/* Sound effects Section */}
    -

    Sound effects

    +

    {language.t("settings.general.section.sounds")}

    - + o.id === settings.sounds.permissions())} @@ -200,7 +245,10 @@ export const SettingsGeneral: Component = () => { /> - + o.value === actionFor(item.id))} + options={actions()} + current={actions().find((o) => o.value === actionFor(item.id))} value={(o) => o.value} label={(o) => o.label} onSelect={(option) => option && setPermission(item.id, option.value)} diff --git a/packages/app/src/components/settings-providers.tsx b/packages/app/src/components/settings-providers.tsx index cf90b6c1332..7b6ca193924 100644 --- a/packages/app/src/components/settings-providers.tsx +++ b/packages/app/src/components/settings-providers.tsx @@ -1,11 +1,14 @@ import { Component } from "solid-js" +import { useLanguage } from "@/context/language" export const SettingsProviders: Component = () => { + const language = useLanguage() + return (
    -

    Providers

    -

    Provider settings will be configurable here.

    +

    {language.t("settings.providers.title")}

    +

    {language.t("settings.providers.description")}

    ) diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 9487dc0ef65..5db3363307c 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -26,6 +26,8 @@ export const dict = { "command.session.next": "Next session", "command.session.archive": "Archive session", + "command.palette": "Command palette", + "command.theme.cycle": "Cycle theme", "command.theme.set": "Use theme: {{theme}}", "command.theme.scheme.cycle": "Cycle color scheme", @@ -395,6 +397,7 @@ export const dict = { "common.dismiss": "Dismiss", "common.requestFailed": "Request failed", "common.moreOptions": "More options", + "common.learnMore": "Learn more", "common.rename": "Rename", "common.reset": "Reset", "common.delete": "Delete", @@ -412,6 +415,106 @@ export const dict = { "sidebar.project.recentSessions": "Recent sessions", "sidebar.project.viewAllSessions": "View all sessions", + "settings.section.desktop": "Desktop", + "settings.tab.general": "General", + "settings.tab.shortcuts": "Shortcuts", + + "settings.general.section.appearance": "Appearance", + "settings.general.section.notifications": "System notifications", + "settings.general.section.sounds": "Sound effects", + + "settings.general.row.language.title": "Language", + "settings.general.row.language.description": "Change the display language for OpenCode", + "settings.general.row.appearance.title": "Appearance", + "settings.general.row.appearance.description": "Customise how OpenCode looks on your device", + "settings.general.row.theme.title": "Theme", + "settings.general.row.theme.description": "Customise how OpenCode is themed.", + "settings.general.row.font.title": "Font", + "settings.general.row.font.description": "Customise the mono font used in code blocks", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": "Show system notification when the agent is complete or needs attention", + "settings.general.notifications.permissions.title": "Permissions", + "settings.general.notifications.permissions.description": "Show system notification when a permission is required", + "settings.general.notifications.errors.title": "Errors", + "settings.general.notifications.errors.description": "Show system notification when an error occurs", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Play sound when the agent is complete or needs attention", + "settings.general.sounds.permissions.title": "Permissions", + "settings.general.sounds.permissions.description": "Play sound when a permission is required", + "settings.general.sounds.errors.title": "Errors", + "settings.general.sounds.errors.description": "Play sound when an error occurs", + + "settings.shortcuts.title": "Keyboard shortcuts", + "settings.shortcuts.reset.button": "Reset to defaults", + "settings.shortcuts.reset.toast.title": "Shortcuts reset", + "settings.shortcuts.reset.toast.description": "Keyboard shortcuts have been reset to defaults.", + "settings.shortcuts.conflict.title": "Shortcut already in use", + "settings.shortcuts.conflict.description": "{{keybind}} is already assigned to {{titles}}.", + "settings.shortcuts.unassigned": "Unassigned", + "settings.shortcuts.pressKeys": "Press keys", + + "settings.shortcuts.group.general": "General", + "settings.shortcuts.group.session": "Session", + "settings.shortcuts.group.navigation": "Navigation", + "settings.shortcuts.group.modelAndAgent": "Model and agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Providers", + "settings.providers.description": "Provider settings will be configurable here.", + "settings.models.title": "Models", + "settings.models.description": "Model settings will be configurable here.", + "settings.agents.title": "Agents", + "settings.agents.description": "Agent settings will be configurable here.", + "settings.commands.title": "Commands", + "settings.commands.description": "Command settings will be configurable here.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP settings will be configurable here.", + + "settings.permissions.title": "Permissions", + "settings.permissions.description": "Control what tools the server can use by default.", + "settings.permissions.section.tools": "Tools", + "settings.permissions.toast.updateFailed.title": "Failed to update permissions", + + "settings.permissions.action.allow": "Allow", + "settings.permissions.action.ask": "Ask", + "settings.permissions.action.deny": "Deny", + + "settings.permissions.tool.read.title": "Read", + "settings.permissions.tool.read.description": "Reading a file (matches the file path)", + "settings.permissions.tool.edit.title": "Edit", + "settings.permissions.tool.edit.description": "Modify files, including edits, writes, patches, and multi-edits", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Match files using glob patterns", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Search file contents using regular expressions", + "settings.permissions.tool.list.title": "List", + "settings.permissions.tool.list.description": "List files within a directory", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Run shell commands", + "settings.permissions.tool.task.title": "Task", + "settings.permissions.tool.task.description": "Launch sub-agents", + "settings.permissions.tool.skill.title": "Skill", + "settings.permissions.tool.skill.description": "Load a skill by name", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Run language server queries", + "settings.permissions.tool.todoread.title": "Todo Read", + "settings.permissions.tool.todoread.description": "Read the todo list", + "settings.permissions.tool.todowrite.title": "Todo Write", + "settings.permissions.tool.todowrite.description": "Update the todo list", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "Fetch content from a URL", + "settings.permissions.tool.websearch.title": "Web Search", + "settings.permissions.tool.websearch.description": "Search the web", + "settings.permissions.tool.codesearch.title": "Code Search", + "settings.permissions.tool.codesearch.description": "Search code on the web", + "settings.permissions.tool.external_directory.title": "External Directory", + "settings.permissions.tool.external_directory.description": "Access files outside the project directory", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "Detect repeated tool calls with identical input", + "workspace.new": "New workspace", "workspace.type.local": "local", "workspace.type.sandbox": "sandbox", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index e066dbcd99c..bd809bdb9ca 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -30,6 +30,8 @@ export const dict = { "command.session.next": "下一个会话", "command.session.archive": "归档会话", + "command.palette": "命令面板", + "command.theme.cycle": "切换主题", "command.theme.set": "使用主题: {{theme}}", "command.theme.scheme.cycle": "切换配色方案", @@ -391,6 +393,7 @@ export const dict = { "common.dismiss": "忽略", "common.requestFailed": "请求失败", "common.moreOptions": "更多选项", + "common.learnMore": "了解更多", "common.rename": "重命名", "common.reset": "重置", "common.delete": "删除", @@ -408,6 +411,106 @@ export const dict = { "sidebar.project.recentSessions": "最近会话", "sidebar.project.viewAllSessions": "查看全部会话", + "settings.section.desktop": "桌面", + "settings.tab.general": "通用", + "settings.tab.shortcuts": "快捷键", + + "settings.general.section.appearance": "外观", + "settings.general.section.notifications": "系统通知", + "settings.general.section.sounds": "音效", + + "settings.general.row.language.title": "语言", + "settings.general.row.language.description": "更改 OpenCode 的显示语言", + "settings.general.row.appearance.title": "外观", + "settings.general.row.appearance.description": "自定义 OpenCode 在你的设备上的外观", + "settings.general.row.theme.title": "主题", + "settings.general.row.theme.description": "自定义 OpenCode 的主题。", + "settings.general.row.font.title": "字体", + "settings.general.row.font.description": "自定义代码块使用的等宽字体", + + "settings.general.notifications.agent.title": "智能体", + "settings.general.notifications.agent.description": "当智能体完成或需要注意时显示系统通知", + "settings.general.notifications.permissions.title": "权限", + "settings.general.notifications.permissions.description": "当需要权限时显示系统通知", + "settings.general.notifications.errors.title": "错误", + "settings.general.notifications.errors.description": "发生错误时显示系统通知", + + "settings.general.sounds.agent.title": "智能体", + "settings.general.sounds.agent.description": "当智能体完成或需要注意时播放声音", + "settings.general.sounds.permissions.title": "权限", + "settings.general.sounds.permissions.description": "当需要权限时播放声音", + "settings.general.sounds.errors.title": "错误", + "settings.general.sounds.errors.description": "发生错误时播放声音", + + "settings.shortcuts.title": "键盘快捷键", + "settings.shortcuts.reset.button": "重置为默认值", + "settings.shortcuts.reset.toast.title": "快捷键已重置", + "settings.shortcuts.reset.toast.description": "键盘快捷键已重置为默认设置。", + "settings.shortcuts.conflict.title": "快捷键已被占用", + "settings.shortcuts.conflict.description": "{{keybind}} 已分配给 {{titles}}。", + "settings.shortcuts.unassigned": "未设置", + "settings.shortcuts.pressKeys": "按下按键", + + "settings.shortcuts.group.general": "通用", + "settings.shortcuts.group.session": "会话", + "settings.shortcuts.group.navigation": "导航", + "settings.shortcuts.group.modelAndAgent": "模型与智能体", + "settings.shortcuts.group.terminal": "终端", + "settings.shortcuts.group.prompt": "提示", + + "settings.providers.title": "提供商", + "settings.providers.description": "提供商设置将在此处可配置。", + "settings.models.title": "模型", + "settings.models.description": "模型设置将在此处可配置。", + "settings.agents.title": "智能体", + "settings.agents.description": "智能体设置将在此处可配置。", + "settings.commands.title": "命令", + "settings.commands.description": "命令设置将在此处可配置。", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP 设置将在此处可配置。", + + "settings.permissions.title": "权限", + "settings.permissions.description": "控制服务器默认可以使用哪些工具。", + "settings.permissions.section.tools": "工具", + "settings.permissions.toast.updateFailed.title": "更新权限失败", + + "settings.permissions.action.allow": "允许", + "settings.permissions.action.ask": "询问", + "settings.permissions.action.deny": "拒绝", + + "settings.permissions.tool.read.title": "读取", + "settings.permissions.tool.read.description": "读取文件(匹配文件路径)", + "settings.permissions.tool.edit.title": "编辑", + "settings.permissions.tool.edit.description": "修改文件,包括编辑、写入、补丁和多重编辑", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "使用 glob 模式匹配文件", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "使用正则表达式搜索文件内容", + "settings.permissions.tool.list.title": "列表", + "settings.permissions.tool.list.description": "列出目录中的文件", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "运行 shell 命令", + "settings.permissions.tool.task.title": "Task", + "settings.permissions.tool.task.description": "启动子智能体", + "settings.permissions.tool.skill.title": "Skill", + "settings.permissions.tool.skill.description": "按名称加载技能", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "运行语言服务器查询", + "settings.permissions.tool.todoread.title": "读取待办", + "settings.permissions.tool.todoread.description": "读取待办列表", + "settings.permissions.tool.todowrite.title": "更新待办", + "settings.permissions.tool.todowrite.description": "更新待办列表", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "从 URL 获取内容", + "settings.permissions.tool.websearch.title": "Web Search", + "settings.permissions.tool.websearch.description": "搜索网页", + "settings.permissions.tool.codesearch.title": "Code Search", + "settings.permissions.tool.codesearch.description": "在网上搜索代码", + "settings.permissions.tool.external_directory.title": "外部目录", + "settings.permissions.tool.external_directory.description": "访问项目目录之外的文件", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "检测具有相同输入的重复工具调用", + "workspace.new": "新建工作区", "workspace.type.local": "本地", "workspace.type.sandbox": "沙盒", From bb8bf32abe55ac49c45eb4801a61db6ca3c3b453 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Tue, 20 Jan 2026 23:58:59 +0000 Subject: [PATCH 210/426] chore: generate --- .../components/dialog-connect-provider.tsx | 16 +++- .../components/dialog-select-model-unpaid.tsx | 4 +- .../src/components/dialog-select-server.tsx | 8 +- .../session/session-context-tab.tsx | 9 +- .../src/components/session/session-header.tsx | 5 +- .../app/src/components/settings-general.tsx | 14 ++- packages/app/src/context/global-sync.tsx | 5 +- packages/app/src/context/notification.tsx | 9 +- packages/app/src/entry.tsx | 2 +- packages/app/src/i18n/en.ts | 28 +++--- packages/app/src/i18n/zh.ts | 16 ++-- packages/app/src/pages/error.tsx | 11 ++- packages/app/src/pages/home.tsx | 14 +-- packages/app/src/pages/layout.tsx | 28 +++--- packages/app/src/pages/session.tsx | 92 ++++++++++--------- packages/enterprise/src/app.tsx | 2 +- packages/ui/src/components/list.tsx | 4 +- packages/ui/src/components/message-part.tsx | 6 +- specs/06-app-i18n-audit.md | 5 + specs/07-ui-i18n-audit.md | 6 +- 20 files changed, 161 insertions(+), 123 deletions(-) diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index fa72ccef3b0..63f3c5dbeee 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -236,8 +236,12 @@ export function DialogConnectProvider(props: { provider: string }) {
    -
    {language.t("provider.connect.opencodeZen.line1")}
    -
    {language.t("provider.connect.opencodeZen.line2")}
    +
    + {language.t("provider.connect.opencodeZen.line1")} +
    +
    + {language.t("provider.connect.opencodeZen.line2")} +
    {language.t("provider.connect.opencodeZen.visit.prefix")} @@ -317,7 +321,9 @@ export function DialogConnectProvider(props: { provider: string }) {
    {language.t("provider.connect.oauth.code.visit.prefix")} - {language.t("provider.connect.oauth.code.visit.link")} + + {language.t("provider.connect.oauth.code.visit.link")} + {language.t("provider.connect.oauth.code.visit.suffix", { provider: provider().name })}
    @@ -367,7 +373,9 @@ export function DialogConnectProvider(props: { provider: string }) {
    {language.t("provider.connect.oauth.auto.visit.prefix")} - {language.t("provider.connect.oauth.auto.visit.link")} + + {language.t("provider.connect.oauth.auto.visit.link")} + {language.t("provider.connect.oauth.auto.visit.suffix", { provider: provider().name })}
    {
    -
    +
    {language.t("dialog.model.unpaid.addMore.title")}
    -
    +
    x?.id} diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index 9b401afbd70..bb0ad5b437b 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -200,9 +200,7 @@ export function DialogSelectServer() {

    {language.t("dialog.server.default.title")}

    -

    - {language.t("dialog.server.default.description")} -

    +

    {language.t("dialog.server.default.description")}

    {language.t("dialog.server.default.none")}} + fallback={ + {language.t("dialog.server.default.none")} + } >
    - +
    diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index 66221fd426c..1bdbbb6a07d 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -183,7 +183,10 @@ export function SessionHeader() { }} aria-hidden={!showReview()} > - + } > diff --git a/packages/app/src/pages/home.tsx b/packages/app/src/pages/home.tsx index efed2e65891..4007129b5cc 100644 --- a/packages/app/src/pages/home.tsx +++ b/packages/app/src/pages/home.tsx @@ -76,13 +76,13 @@ export default function Home() { 0}> -
    -
    -
    {language.t("home.recentProjects")}
    - -
    +
    +
    +
    {language.t("home.recentProjects")}
    + +
      -
      -
      {displayName(props.project)}
      -
      {language.t("sidebar.project.recentSessions")}
      +
      +
      {displayName(props.project)}
      +
      {language.t("sidebar.project.recentSessions")}
      - - dialog.show(() => )}> + + dialog.show(() => )}> {language.t("common.edit")} - - layout.sidebar.toggleWorkspaces(p.worktree)}> - + + layout.sidebar.toggleWorkspaces(p.worktree)}> + {layout.sidebar.workspaces(p.worktree)() ? language.t("sidebar.workspaces.disable") : language.t("sidebar.workspaces.enable")} - - - - closeProject(p.worktree)}> + + + + closeProject(p.worktree)}> {language.t("common.close")} - - + +
      diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index ebc6b8c237a..562176c1b7e 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -673,14 +673,14 @@ export default function Page() { }, ...(sync.data.config.share !== "disabled" ? [ - { - id: "session.share", - title: language.t("command.session.share"), - description: language.t("command.session.share.description"), - category: language.t("command.category.session"), - slash: "share", - disabled: !params.id || !!info()?.share?.url, - onSelect: async () => { + { + id: "session.share", + title: language.t("command.session.share"), + description: language.t("command.session.share.description"), + category: language.t("command.category.session"), + slash: "share", + disabled: !params.id || !!info()?.share?.url, + onSelect: async () => { if (!params.id) return await sdk.client.session .share({ sessionID: params.id }) @@ -708,14 +708,14 @@ export default function Page() { ) }, }, - { - id: "session.unshare", - title: language.t("command.session.unshare"), - description: language.t("command.session.unshare.description"), - category: language.t("command.category.session"), - slash: "unshare", - disabled: !params.id || !info()?.share?.url, - onSelect: async () => { + { + id: "session.unshare", + title: language.t("command.session.unshare"), + description: language.t("command.session.unshare.description"), + category: language.t("command.category.session"), + slash: "unshare", + disabled: !params.id || !info()?.share?.url, + onSelect: async () => { if (!params.id) return await sdk.client.session .unshare({ sessionID: params.id }) @@ -1262,7 +1262,9 @@ export default function Page() { {language.t("session.review.loadingChanges")}
      +
      + {language.t("session.review.loadingChanges")} +
      } > -
      - -
      {language.t("session.review.empty")}
      +
      + +
      + {language.t("session.review.empty")}
      - - -
      +
      +
      + +
      } >
      @@ -1502,11 +1506,11 @@ export default function Page() { -
      -
      {language.t("session.tab.review")}
      - -
      - {info()?.summary?.files ?? 0} +
      +
      {language.t("session.tab.review")}
      + +
      + {info()?.summary?.files ?? 0}
      @@ -1558,7 +1562,9 @@ export default function Page() { {language.t("session.review.loadingChanges")}
      +
      + {language.t("session.review.loadingChanges")} +
      } > -
      - -
      {language.t("session.review.empty")}
      +
      + +
      + {language.t("session.review.empty")}
      - - -
      +
      +
      + +
      @@ -1871,13 +1879,15 @@ export default function Page() {
      )}
      -
      -
      {language.t("common.loading")}...
      +
      +
      {language.t("common.loading")}...
      +
      +
      + {language.t("terminal.loading")} +
      -
      {language.t("terminal.loading")}
      -
    - } - > + } + > detectLocale()) const t = (key: keyof typeof uiEn, params?: UiI18nParams) => { - const value = locale() === "zh" ? uiZh[key] ?? uiEn[key] : uiEn[key] + const value = locale() === "zh" ? (uiZh[key] ?? uiEn[key]) : uiEn[key] const text = value ?? String(key) return resolveTemplate(text, params) } diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index d81440c11b7..066363502bd 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -228,9 +228,7 @@ export function List(props: ListProps & { ref?: (ref: ListRef) => void }) when={flat().length > 0} fallback={
    -
    - {emptyMessage()} -
    +
    {emptyMessage()}
    } > diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 8e2a36885af..340c137454a 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -417,7 +417,11 @@ export function UserMessageDisplay(props: { message: UserMessage; parts: PartTyp
    - + Date: Wed, 21 Jan 2026 00:00:52 +0000 Subject: [PATCH 211/426] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index b945a90f3df..47301c61ff8 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-xVA4r7Qugw0TSx5wiTI5al93FI4D5LlvQo2ab3cUlmE=", - "aarch64-linux": "sha256-EV0U/mXlrnEyCryL9rLlOZvMn6U0+BSgPhTIudVeqTo=", - "aarch64-darwin": "sha256-zQvdRyNEHrpJsQMj8PZH0Ub21EREmDetVaJ0yBCgDlE=", - "x86_64-darwin": "sha256-Tt5k5KBnrsNVIqPET7OFzClerjdR68XYstyCj3KpvdI=" + "x86_64-linux": "sha256-xCizgzUsDiGeI3JXj6Z0NoWeQKqznhxY6nrx1CsEMhM=", + "aarch64-linux": "sha256-xqr03j6xEcHljm2BAtDn22CJkAr/Tvy7sh+sQTKj09g=", + "aarch64-darwin": "sha256-PDu6SSTZJBn8amLc0JwJ0nQF6yICeDWF4a8JUHr6utA=", + "x86_64-darwin": "sha256-lEMxdyTvAOO7bAiluzQSqleLx5Cey17iHjM7dab6q/w=" } } From 489f2d37097ba99a31ecaccf45abcd74df39c3d3 Mon Sep 17 00:00:00 2001 From: Alex Yaroshuk <34632190+alexyaroshuk@users.noreply.github.com> Date: Wed, 21 Jan 2026 10:27:33 +0800 Subject: [PATCH 212/426] fix(ui): remove portal spacer and fix terminal toggle padding (#9728) --- packages/app/src/components/session/session-header.tsx | 4 ++-- packages/app/src/components/titlebar.tsx | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index 1bdbbb6a07d..68c9a3775ee 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -217,9 +217,9 @@ export function SessionHeader() { title={language.t("command.terminal.toggle")} keybind={command.keybind("terminal.toggle")} > -
    From 3723e1b8d2b0580467b2417b8e7f303b987cde72 Mon Sep 17 00:00:00 2001 From: yash Date: Wed, 21 Jan 2026 08:06:41 +0530 Subject: [PATCH 216/426] fix: correct dot prefix display in directory names for RTL text rendering issue #9579 (#9591) --- packages/ui/src/components/session-review.tsx | 2 +- packages/ui/src/components/session-turn.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/session-review.tsx b/packages/ui/src/components/session-review.tsx index c4be87a0ba1..27c033f7754 100644 --- a/packages/ui/src/components/session-review.tsx +++ b/packages/ui/src/components/session-review.tsx @@ -109,7 +109,7 @@ export const SessionReview = (props: SessionReviewProps) => {
    - {getDirectory(diff.file)}‎ + {`\u202A${getDirectory(diff.file)}\u202C`} {getFilename(diff.file)} diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 737f4f41aa2..7bca641aef1 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -620,7 +620,7 @@ export function SessionTurn(
    - {getDirectory(diff.file)}‎ + {`\u202A${getDirectory(diff.file)}\u202C`} {getFilename(diff.file)} From cbe20d22d3209896cbab5a803d81f3b4464e1c23 Mon Sep 17 00:00:00 2001 From: Ariane Emory <97994360+ariane-emory@users.noreply.github.com> Date: Tue, 20 Jan 2026 21:38:54 -0500 Subject: [PATCH 217/426] fix: don't update session timestamp for metadata-only changes (resolves #9494) (#9495) --- packages/opencode/src/server/routes/session.ts | 2 +- packages/opencode/src/session/index.ts | 10 ++++++---- packages/opencode/src/session/prompt.ts | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index a98624dfae2..a0dc9fb84ba 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -281,7 +281,7 @@ export const SessionRoutes = lazy(() => session.title = updates.title } if (updates.time?.archived !== undefined) session.time.archived = updates.time.archived - }) + }, { touch: false }) return c.json(updatedSession) }, diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 3fcdab5238c..659127470c9 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -259,7 +259,7 @@ export namespace Session { draft.share = { url: share.url, } - }) + }, { touch: false }) return share }) @@ -269,14 +269,16 @@ export namespace Session { await ShareNext.remove(id) await update(id, (draft) => { draft.share = undefined - }) + }, { touch: false }) }) - export async function update(id: string, editor: (session: Info) => void) { + export async function update(id: string, editor: (session: Info) => void, options?: { touch?: boolean }) { const project = Instance.project const result = await Storage.update(["session", project.id, id], (draft) => { editor(draft) - draft.time.updated = Date.now() + if (options?.touch !== false) { + draft.time.updated = Date.now() + } }) Bus.publish(Event.Updated, { info: result, diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 57ef0ef5ed4..48f2597d08d 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1816,6 +1816,6 @@ NOTE: At any point in time through this workflow you should feel free to ask the const title = cleaned.length > 100 ? cleaned.substring(0, 97) + "..." : cleaned draft.title = title - }) + }, { touch: false }) } } From dac73572e0ecf708d2968bb981e3fe65743dfbda Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 21 Jan 2026 02:39:31 +0000 Subject: [PATCH 218/426] chore: generate --- .../opencode/src/server/routes/session.ts | 16 +++++++----- packages/opencode/src/session/index.ts | 24 +++++++++++------ packages/opencode/src/session/prompt.ts | 26 +++++++++++-------- 3 files changed, 41 insertions(+), 25 deletions(-) diff --git a/packages/opencode/src/server/routes/session.ts b/packages/opencode/src/server/routes/session.ts index a0dc9fb84ba..3850376bdb4 100644 --- a/packages/opencode/src/server/routes/session.ts +++ b/packages/opencode/src/server/routes/session.ts @@ -276,12 +276,16 @@ export const SessionRoutes = lazy(() => const sessionID = c.req.valid("param").sessionID const updates = c.req.valid("json") - const updatedSession = await Session.update(sessionID, (session) => { - if (updates.title !== undefined) { - session.title = updates.title - } - if (updates.time?.archived !== undefined) session.time.archived = updates.time.archived - }, { touch: false }) + const updatedSession = await Session.update( + sessionID, + (session) => { + if (updates.title !== undefined) { + session.title = updates.title + } + if (updates.time?.archived !== undefined) session.time.archived = updates.time.archived + }, + { touch: false }, + ) return c.json(updatedSession) }, diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts index 659127470c9..b81a21a57be 100644 --- a/packages/opencode/src/session/index.ts +++ b/packages/opencode/src/session/index.ts @@ -255,11 +255,15 @@ export namespace Session { } const { ShareNext } = await import("@/share/share-next") const share = await ShareNext.create(id) - await update(id, (draft) => { - draft.share = { - url: share.url, - } - }, { touch: false }) + await update( + id, + (draft) => { + draft.share = { + url: share.url, + } + }, + { touch: false }, + ) return share }) @@ -267,9 +271,13 @@ export namespace Session { // Use ShareNext to remove the share (same as share function uses ShareNext to create) const { ShareNext } = await import("@/share/share-next") await ShareNext.remove(id) - await update(id, (draft) => { - draft.share = undefined - }, { touch: false }) + await update( + id, + (draft) => { + draft.share = undefined + }, + { touch: false }, + ) }) export async function update(id: string, editor: (session: Info) => void, options?: { touch?: boolean }) { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 48f2597d08d..f52e692d97b 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1806,16 +1806,20 @@ NOTE: At any point in time through this workflow you should feel free to ask the }) const text = await result.text.catch((err) => log.error("failed to generate title", { error: err })) if (text) - return Session.update(input.session.id, (draft) => { - const cleaned = text - .replace(/[\s\S]*?<\/think>\s*/g, "") - .split("\n") - .map((line) => line.trim()) - .find((line) => line.length > 0) - if (!cleaned) return - - const title = cleaned.length > 100 ? cleaned.substring(0, 97) + "..." : cleaned - draft.title = title - }, { touch: false }) + return Session.update( + input.session.id, + (draft) => { + const cleaned = text + .replace(/[\s\S]*?<\/think>\s*/g, "") + .split("\n") + .map((line) => line.trim()) + .find((line) => line.length > 0) + if (!cleaned) return + + const title = cleaned.length > 100 ? cleaned.substring(0, 97) + "..." : cleaned + draft.title = title + }, + { touch: false }, + ) } } From be9a0bfee7b5e3a3f553a2d29b7b983cc5bccf5e Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 20 Jan 2026 23:06:06 -0500 Subject: [PATCH 219/426] wip: support --- infra/app.ts | 15 +++++- packages/console/core/sst-env.d.ts | 16 +++++++ packages/console/function/sst-env.d.ts | 16 +++++++ packages/console/resource/sst-env.d.ts | 16 +++++++ packages/enterprise/sst-env.d.ts | 16 +++++++ packages/function/src/api.ts | 66 ++++++++++++++++++++++++++ packages/function/sst-env.d.ts | 16 +++++++ sst-env.d.ts | 16 +++++++ 8 files changed, 176 insertions(+), 1 deletion(-) diff --git a/infra/app.ts b/infra/app.ts index 1b2351ec8cd..bb627f51ec5 100644 --- a/infra/app.ts +++ b/infra/app.ts @@ -4,6 +4,10 @@ const GITHUB_APP_ID = new sst.Secret("GITHUB_APP_ID") const GITHUB_APP_PRIVATE_KEY = new sst.Secret("GITHUB_APP_PRIVATE_KEY") export const EMAILOCTOPUS_API_KEY = new sst.Secret("EMAILOCTOPUS_API_KEY") const ADMIN_SECRET = new sst.Secret("ADMIN_SECRET") +const DISCORD_SUPPORT_BOT_TOKEN = new sst.Secret("DISCORD_SUPPORT_BOT_TOKEN") +const DISCORD_SUPPORT_CHANNEL_ID = new sst.Secret("DISCORD_SUPPORT_CHANNEL_ID") +const FEISHU_APP_ID = new sst.Secret("FEISHU_APP_ID") +const FEISHU_APP_SECRET = new sst.Secret("FEISHU_APP_SECRET") const bucket = new sst.cloudflare.Bucket("Bucket") export const api = new sst.cloudflare.Worker("Api", { @@ -13,7 +17,16 @@ export const api = new sst.cloudflare.Worker("Api", { WEB_DOMAIN: domain, }, url: true, - link: [bucket, GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEY, ADMIN_SECRET], + link: [ + bucket, + GITHUB_APP_ID, + GITHUB_APP_PRIVATE_KEY, + ADMIN_SECRET, + DISCORD_SUPPORT_BOT_TOKEN, + DISCORD_SUPPORT_CHANNEL_ID, + FEISHU_APP_ID, + FEISHU_APP_SECRET, + ], transform: { worker: (args) => { args.logpush = true diff --git a/packages/console/core/sst-env.d.ts b/packages/console/core/sst-env.d.ts index 3710cb77f83..66c06a824a9 100644 --- a/packages/console/core/sst-env.d.ts +++ b/packages/console/core/sst-env.d.ts @@ -34,6 +34,14 @@ declare module "sst" { "type": "sst.cloudflare.SolidStart" "url": string } + "DISCORD_SUPPORT_BOT_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "DISCORD_SUPPORT_CHANNEL_ID": { + "type": "sst.sst.Secret" + "value": string + } "Database": { "database": string "host": string @@ -46,6 +54,14 @@ declare module "sst" { "type": "sst.sst.Secret" "value": string } + "FEISHU_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "FEISHU_APP_SECRET": { + "type": "sst.sst.Secret" + "value": string + } "GITHUB_APP_ID": { "type": "sst.sst.Secret" "value": string diff --git a/packages/console/function/sst-env.d.ts b/packages/console/function/sst-env.d.ts index 3710cb77f83..66c06a824a9 100644 --- a/packages/console/function/sst-env.d.ts +++ b/packages/console/function/sst-env.d.ts @@ -34,6 +34,14 @@ declare module "sst" { "type": "sst.cloudflare.SolidStart" "url": string } + "DISCORD_SUPPORT_BOT_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "DISCORD_SUPPORT_CHANNEL_ID": { + "type": "sst.sst.Secret" + "value": string + } "Database": { "database": string "host": string @@ -46,6 +54,14 @@ declare module "sst" { "type": "sst.sst.Secret" "value": string } + "FEISHU_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "FEISHU_APP_SECRET": { + "type": "sst.sst.Secret" + "value": string + } "GITHUB_APP_ID": { "type": "sst.sst.Secret" "value": string diff --git a/packages/console/resource/sst-env.d.ts b/packages/console/resource/sst-env.d.ts index 3710cb77f83..66c06a824a9 100644 --- a/packages/console/resource/sst-env.d.ts +++ b/packages/console/resource/sst-env.d.ts @@ -34,6 +34,14 @@ declare module "sst" { "type": "sst.cloudflare.SolidStart" "url": string } + "DISCORD_SUPPORT_BOT_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "DISCORD_SUPPORT_CHANNEL_ID": { + "type": "sst.sst.Secret" + "value": string + } "Database": { "database": string "host": string @@ -46,6 +54,14 @@ declare module "sst" { "type": "sst.sst.Secret" "value": string } + "FEISHU_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "FEISHU_APP_SECRET": { + "type": "sst.sst.Secret" + "value": string + } "GITHUB_APP_ID": { "type": "sst.sst.Secret" "value": string diff --git a/packages/enterprise/sst-env.d.ts b/packages/enterprise/sst-env.d.ts index 3710cb77f83..66c06a824a9 100644 --- a/packages/enterprise/sst-env.d.ts +++ b/packages/enterprise/sst-env.d.ts @@ -34,6 +34,14 @@ declare module "sst" { "type": "sst.cloudflare.SolidStart" "url": string } + "DISCORD_SUPPORT_BOT_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "DISCORD_SUPPORT_CHANNEL_ID": { + "type": "sst.sst.Secret" + "value": string + } "Database": { "database": string "host": string @@ -46,6 +54,14 @@ declare module "sst" { "type": "sst.sst.Secret" "value": string } + "FEISHU_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "FEISHU_APP_SECRET": { + "type": "sst.sst.Secret" + "value": string + } "GITHUB_APP_ID": { "type": "sst.sst.Secret" "value": string diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index 6f00dae9a2a..d08e9e49ac2 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -12,6 +12,20 @@ type Env = { WEB_DOMAIN: string } +async function getFeishuTenantToken(): Promise { + const response = await fetch("https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + app_id: Resource.FEISHU_APP_ID.value, + app_secret: Resource.FEISHU_APP_SECRET.value, + }), + }) + const data = (await response.json()) as { tenant_access_token?: string } + if (!data.tenant_access_token) throw new Error("Failed to get Feishu tenant token") + return data.tenant_access_token +} + export class SyncServer extends DurableObject { constructor(ctx: DurableObjectState, env: Env) { super(ctx, env) @@ -200,6 +214,58 @@ export default new Hono<{ Bindings: Env }>() return c.json({ info, messages }) }) + .post("/feishu", async (c) => { + const body = (await c.req.json()) as { + challenge?: string + event?: { + message?: { + message_id?: string + root_id?: string + parent_id?: string + chat_id?: string + content?: string + } + } +} + console.log(JSON.stringify(body, null, 2)) + const challenge = body.challenge + if (challenge) return c.json({ challenge }) + + const content = body.event?.message?.content + const parsed = + typeof content === "string" && content.trim().startsWith("{") ? (JSON.parse(content) as { + text?: string +}) : undefined + const text = typeof parsed?.text === "string" ? parsed.text : typeof content === "string" ? content : "" + + let message = text.trim().replace(/^@_user_\d+\s*/, "") + message = message.replace(/^aiden,?\s*/i, "<@759257817772851260> ") + if (!message) return c.json({ ok: true }) + + const threadId = body.event?.message?.root_id || body.event?.message?.message_id + if (threadId) message = `${message} [${threadId}]` + + const response = await fetch( + `https://discord.com/api/v10/channels/${Resource.DISCORD_SUPPORT_CHANNEL_ID.value}/messages`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bot ${Resource.DISCORD_SUPPORT_BOT_TOKEN.value}`, + }, + body: JSON.stringify({ + content: `${message}`, + }), + }, + ) + + if (!response.ok) { + console.error(await response.text()) + return c.json({ error: "Discord bot message failed" }, { status: 502 }) + } + + return c.json({ ok: true }) + }) /** * Used by the GitHub action to get GitHub installation access token given the OIDC token */ diff --git a/packages/function/sst-env.d.ts b/packages/function/sst-env.d.ts index 3710cb77f83..66c06a824a9 100644 --- a/packages/function/sst-env.d.ts +++ b/packages/function/sst-env.d.ts @@ -34,6 +34,14 @@ declare module "sst" { "type": "sst.cloudflare.SolidStart" "url": string } + "DISCORD_SUPPORT_BOT_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "DISCORD_SUPPORT_CHANNEL_ID": { + "type": "sst.sst.Secret" + "value": string + } "Database": { "database": string "host": string @@ -46,6 +54,14 @@ declare module "sst" { "type": "sst.sst.Secret" "value": string } + "FEISHU_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "FEISHU_APP_SECRET": { + "type": "sst.sst.Secret" + "value": string + } "GITHUB_APP_ID": { "type": "sst.sst.Secret" "value": string diff --git a/sst-env.d.ts b/sst-env.d.ts index ad02b7bf1d2..b767ef1b307 100644 --- a/sst-env.d.ts +++ b/sst-env.d.ts @@ -49,6 +49,14 @@ declare module "sst" { "type": "sst.cloudflare.SolidStart" "url": string } + "DISCORD_SUPPORT_BOT_TOKEN": { + "type": "sst.sst.Secret" + "value": string + } + "DISCORD_SUPPORT_CHANNEL_ID": { + "type": "sst.sst.Secret" + "value": string + } "Database": { "database": string "host": string @@ -65,6 +73,14 @@ declare module "sst" { "name": string "type": "sst.cloudflare.Bucket" } + "FEISHU_APP_ID": { + "type": "sst.sst.Secret" + "value": string + } + "FEISHU_APP_SECRET": { + "type": "sst.sst.Secret" + "value": string + } "GITHUB_APP_ID": { "type": "sst.sst.Secret" "value": string From 217e4850db500ba8caa10b0fa41b4db6eaf3552b Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 21 Jan 2026 04:07:26 +0000 Subject: [PATCH 220/426] chore: generate --- packages/function/src/api.ts | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/function/src/api.ts b/packages/function/src/api.ts index d08e9e49ac2..54b93ad715a 100644 --- a/packages/function/src/api.ts +++ b/packages/function/src/api.ts @@ -216,26 +216,28 @@ export default new Hono<{ Bindings: Env }>() }) .post("/feishu", async (c) => { const body = (await c.req.json()) as { - challenge?: string - event?: { - message?: { - message_id?: string - root_id?: string - parent_id?: string - chat_id?: string - content?: string + challenge?: string + event?: { + message?: { + message_id?: string + root_id?: string + parent_id?: string + chat_id?: string + content?: string + } + } } - } -} console.log(JSON.stringify(body, null, 2)) const challenge = body.challenge if (challenge) return c.json({ challenge }) const content = body.event?.message?.content const parsed = - typeof content === "string" && content.trim().startsWith("{") ? (JSON.parse(content) as { - text?: string -}) : undefined + typeof content === "string" && content.trim().startsWith("{") + ? (JSON.parse(content) as { + text?: string + }) + : undefined const text = typeof parsed?.text === "string" ? parsed.text : typeof content === "string" ? content : "" let message = text.trim().replace(/^@_user_\d+\s*/, "") From 34d473c0f5d617994cb00da8aa5e4d63eab9d2ea Mon Sep 17 00:00:00 2001 From: Caleb Norton Date: Tue, 20 Jan 2026 22:20:24 -0600 Subject: [PATCH 221/426] chore: revert "Update flake.lock" (#9725) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 87f95fb3eb7..5ef276f0a08 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1768569498, - "narHash": "sha256-bB6Nt99Cj8Nu5nIUq0GLmpiErIT5KFshMQJGMZwgqUo=", + "lastModified": 1768302833, + "narHash": "sha256-h5bRFy9bco+8QcK7rGoOiqMxMbmn21moTACofNLRMP4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "be5afa0fcb31f0a96bf9ecba05a516c66fcd8114", + "rev": "61db79b0c6b838d9894923920b612048e1201926", "type": "github" }, "original": { From b93f33eaa4ea48f5096abe01af8bc5d9a6095fb9 Mon Sep 17 00:00:00 2001 From: Vinicius da Motta Date: Wed, 21 Jan 2026 01:22:38 -0300 Subject: [PATCH 222/426] fix(tui): responsive layout for narrow screens (#9703) --- .../src/cli/cmd/tui/routes/session/header.tsx | 78 ++++++++++--------- .../cli/cmd/tui/routes/session/permission.tsx | 20 +++-- 2 files changed, 55 insertions(+), 43 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx index afcb2c6118d..5e814c3d211 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/header.tsx @@ -8,6 +8,7 @@ import type { AssistantMessage, Session } from "@opencode-ai/sdk/v2" import { useCommandDialog } from "@tui/component/dialog-command" import { useKeybind } from "../../context/keybind" import { Installation } from "@/installation" +import { useTerminalDimensions } from "@opentui/solid" const Title = (props: { session: Accessor }) => { const { theme } = useTheme() @@ -63,6 +64,8 @@ export function Header() { const keybind = useKeybind() const command = useCommandDialog() const [hover, setHover] = createSignal<"parent" | "prev" | "next" | null>(null) + const dimensions = useTerminalDimensions() + const narrow = createMemo(() => dimensions().width < 80) return ( @@ -79,49 +82,52 @@ export function Header() { > - - - Subagent session - - setHover("parent")} - onMouseOut={() => setHover(null)} - onMouseUp={() => command.trigger("session.parent")} - backgroundColor={hover() === "parent" ? theme.backgroundElement : theme.backgroundPanel} - > + + - Parent {keybind.print("session_parent")} + Subagent session + + + v{Installation.VERSION} + - setHover("prev")} - onMouseOut={() => setHover(null)} - onMouseUp={() => command.trigger("session.child.previous")} - backgroundColor={hover() === "prev" ? theme.backgroundElement : theme.backgroundPanel} - > - - Prev {keybind.print("session_child_cycle_reverse")} - - - setHover("next")} - onMouseOut={() => setHover(null)} - onMouseUp={() => command.trigger("session.child.next")} - backgroundColor={hover() === "next" ? theme.backgroundElement : theme.backgroundPanel} - > - - Next {keybind.print("session_child_cycle")} - - - - - - v{Installation.VERSION} + + setHover("parent")} + onMouseOut={() => setHover(null)} + onMouseUp={() => command.trigger("session.parent")} + backgroundColor={hover() === "parent" ? theme.backgroundElement : theme.backgroundPanel} + > + + Parent {keybind.print("session_parent")} + + + setHover("prev")} + onMouseOut={() => setHover(null)} + onMouseUp={() => command.trigger("session.child.previous")} + backgroundColor={hover() === "prev" ? theme.backgroundElement : theme.backgroundPanel} + > + + Prev {keybind.print("session_child_cycle_reverse")} + + + setHover("next")} + onMouseOut={() => setHover(null)} + onMouseUp={() => command.trigger("session.child.next")} + backgroundColor={hover() === "next" ? theme.backgroundElement : theme.backgroundPanel} + > + + Next {keybind.print("session_child_cycle")} + + - + <box flexDirection="row" gap={1} flexShrink={0}> <ContextInfo context={context} cost={cost} /> diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx index c4ff4c04b0c..0414ec39b44 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/permission.tsx @@ -302,6 +302,8 @@ function RejectPrompt(props: { onConfirm: (message: string) => void; onCancel: ( const { theme } = useTheme() const keybind = useKeybind() const textareaKeybindings = useTextareaKeybindings() + const dimensions = useTerminalDimensions() + const narrow = createMemo(() => dimensions().width < 80) useKeyboard((evt) => { if (evt.name === "escape" || keybind.match("app_exit", evt)) { @@ -332,14 +334,16 @@ function RejectPrompt(props: { onConfirm: (message: string) => void; onCancel: ( </box> </box> <box - flexDirection="row" + flexDirection={narrow() ? "column" : "row"} flexShrink={0} paddingTop={1} paddingLeft={2} paddingRight={3} paddingBottom={1} backgroundColor={theme.backgroundElement} - justifyContent="space-between" + justifyContent={narrow() ? "flex-start" : "space-between"} + alignItems={narrow() ? "flex-start" : "center"} + gap={1} > <textarea ref={(val: TextareaRenderable) => (input = val)} @@ -349,7 +353,7 @@ function RejectPrompt(props: { onConfirm: (message: string) => void; onCancel: ( cursorColor={theme.primary} keyBindings={textareaKeybindings()} /> - <box flexDirection="row" gap={2} flexShrink={0} marginLeft={1}> + <box flexDirection="row" gap={2} flexShrink={0}> <text fg={theme.text}> enter <span style={{ fg: theme.textMuted }}>confirm</span> </text> @@ -379,6 +383,7 @@ function Prompt<const T extends Record<string, string>>(props: { expanded: false, }) const diffKey = Keybind.parse("ctrl+f")[0] + const narrow = createMemo(() => dimensions().width < 80) useKeyboard((evt) => { if (evt.name === "left" || evt.name == "h") { @@ -440,7 +445,7 @@ function Prompt<const T extends Record<string, string>>(props: { {props.body} </box> <box - flexDirection="row" + flexDirection={narrow() ? "column" : "row"} flexShrink={0} gap={1} paddingTop={1} @@ -448,9 +453,10 @@ function Prompt<const T extends Record<string, string>>(props: { paddingRight={3} paddingBottom={1} backgroundColor={theme.backgroundElement} - justifyContent="space-between" + justifyContent={narrow() ? "flex-start" : "space-between"} + alignItems={narrow() ? "flex-start" : "center"} > - <box flexDirection="row" gap={1}> + <box flexDirection="row" gap={1} flexShrink={0}> <For each={keys}> {(option) => ( <box @@ -470,7 +476,7 @@ function Prompt<const T extends Record<string, string>>(props: { )} </For> </box> - <box flexDirection="row" gap={2}> + <box flexDirection="row" gap={2} flexShrink={0}> <Show when={props.fullscreen}> <text fg={theme.text}> {"ctrl+f"} <span style={{ fg: theme.textMuted }}>{hint()}</span> From 9dc95c4c698006772f12ecec03635023bf3d74d8 Mon Sep 17 00:00:00 2001 From: Aiden Cline <aidenpcline@gmail.com> Date: Tue, 20 Jan 2026 22:51:54 -0600 Subject: [PATCH 223/426] tweak: ensure synthetic user message following subtasks is only added when user manually invoked subtask --- packages/opencode/src/session/prompt.ts | 44 +++++++++++++------------ 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index f52e692d97b..587f9498008 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -454,28 +454,30 @@ export namespace SessionPrompt { } satisfies MessageV2.ToolPart) } - // Add synthetic user message to prevent certain reasoning models from erroring - // If we create assistant messages w/ out user ones following mid loop thinking signatures - // will be missing and it can cause errors for models like gemini for example - const summaryUserMsg: MessageV2.User = { - id: Identifier.ascending("message"), - sessionID, - role: "user", - time: { - created: Date.now(), - }, - agent: lastUser.agent, - model: lastUser.model, + if (task.command) { + // Add synthetic user message to prevent certain reasoning models from erroring + // If we create assistant messages w/ out user ones following mid loop thinking signatures + // will be missing and it can cause errors for models like gemini for example + const summaryUserMsg: MessageV2.User = { + id: Identifier.ascending("message"), + sessionID, + role: "user", + time: { + created: Date.now(), + }, + agent: lastUser.agent, + model: lastUser.model, + } + await Session.updateMessage(summaryUserMsg) + await Session.updatePart({ + id: Identifier.ascending("part"), + messageID: summaryUserMsg.id, + sessionID, + type: "text", + text: "Summarize the task tool output above and continue with your task.", + synthetic: true, + } satisfies MessageV2.TextPart) } - await Session.updateMessage(summaryUserMsg) - await Session.updatePart({ - id: Identifier.ascending("part"), - messageID: summaryUserMsg.id, - sessionID, - type: "text", - text: "Summarize the task tool output above and continue with your task.", - synthetic: true, - } satisfies MessageV2.TextPart) continue } From 74bd52e8a7454864cc7edf36c87c9dadd68b2998 Mon Sep 17 00:00:00 2001 From: Aiden Cline <aidenpcline@gmail.com> Date: Tue, 20 Jan 2026 22:55:50 -0600 Subject: [PATCH 224/426] fix: ensure apply patch tool emits edited events --- packages/opencode/src/tool/apply_patch.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index cccf2d1cf46..5ad3cf69dce 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -12,6 +12,7 @@ import { trimDiff } from "./edit" import { LSP } from "../lsp" import { Filesystem } from "../util/filesystem" import DESCRIPTION from "./apply_patch.txt" +import { File } from "../file" const PatchParams = z.object({ patchText: z.string().describe("The full patch text that describes all changes to be made"), @@ -171,6 +172,7 @@ export const ApplyPatchTool = Tool.define("apply_patch", { const changedFiles: string[] = [] for (const change of fileChanges) { + const edited = change.type === "delete" ? undefined : change.movePath ?? change.filePath switch (change.type) { case "add": // Create parent directories (recursive: true is safe on existing/root dirs) @@ -199,6 +201,12 @@ export const ApplyPatchTool = Tool.define("apply_patch", { changedFiles.push(change.filePath) break } + + if (edited) { + await Bus.publish(File.Event.Edited, { + file: edited, + }) + } } // Publish file change events From 2049af4d6feb8b79dc864262f2087edbf829d36a Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 04:56:39 +0000 Subject: [PATCH 225/426] chore: generate --- packages/opencode/src/tool/apply_patch.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/tool/apply_patch.ts b/packages/opencode/src/tool/apply_patch.ts index 5ad3cf69dce..e848fc905ed 100644 --- a/packages/opencode/src/tool/apply_patch.ts +++ b/packages/opencode/src/tool/apply_patch.ts @@ -172,7 +172,7 @@ export const ApplyPatchTool = Tool.define("apply_patch", { const changedFiles: string[] = [] for (const change of fileChanges) { - const edited = change.type === "delete" ? undefined : change.movePath ?? change.filePath + const edited = change.type === "delete" ? undefined : (change.movePath ?? change.filePath) switch (change.type) { case "add": // Create parent directories (recursive: true is safe on existing/root dirs) From c9ea9668055fee9675412e621f96e815f4ec4e1d Mon Sep 17 00:00:00 2001 From: luo jiyin <luojiyin@hotmail.com> Date: Wed, 21 Jan 2026 13:03:07 +0800 Subject: [PATCH 226/426] feat: add OPENCODE_DISABLE_FILETIME_CHECK flag (#6581) Signed-off-by: luojiyin <luojiyin@hotmail.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> --- packages/opencode/src/file/time.ts | 7 ++++++- packages/opencode/src/flag/flag.ts | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/file/time.ts b/packages/opencode/src/file/time.ts index 770427abe96..35c780fbdd5 100644 --- a/packages/opencode/src/file/time.ts +++ b/packages/opencode/src/file/time.ts @@ -1,5 +1,6 @@ import { Instance } from "../project/instance" import { Log } from "../util/log" +import { Flag } from "../flag/flag" export namespace FileTime { const log = Log.create({ service: "file.time" }) @@ -52,8 +53,12 @@ export namespace FileTime { } export async function assert(sessionID: string, filepath: string) { + if (Flag.OPENCODE_DISABLE_FILETIME_CHECK === true) { + return + } + const time = get(sessionID, filepath) - if (!time) throw new Error(`You must read the file ${filepath} before overwriting it. Use the Read tool first`) + if (!time) throw new Error(`You must read file ${filepath} before overwriting it. Use the Read tool first`) const stats = await Bun.file(filepath).stat() if (stats.mtime.getTime() > time.getTime()) { throw new Error( diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts index 4cdb549096a..63b1ac7e546 100644 --- a/packages/opencode/src/flag/flag.ts +++ b/packages/opencode/src/flag/flag.ts @@ -38,6 +38,7 @@ export namespace Flag { export const OPENCODE_EXPERIMENTAL_OXFMT = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_OXFMT") export const OPENCODE_EXPERIMENTAL_LSP_TY = truthy("OPENCODE_EXPERIMENTAL_LSP_TY") export const OPENCODE_EXPERIMENTAL_LSP_TOOL = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_LSP_TOOL") + export const OPENCODE_DISABLE_FILETIME_CHECK = truthy("OPENCODE_DISABLE_FILETIME_CHECK") export const OPENCODE_EXPERIMENTAL_PLAN_MODE = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_PLAN_MODE") function truthy(key: string) { From a18ae2c8b7b29f89aa4bbe56d14b786f41c9f4f5 Mon Sep 17 00:00:00 2001 From: Kenny <gh@alias.kdco.llc> Date: Wed, 21 Jan 2026 00:36:42 -0500 Subject: [PATCH 227/426] feat: add OPENCODE_DISABLE_PROJECT_CONFIG env var (#8093) Co-authored-by: Aiden Cline <aidenpcline@gmail.com> --- packages/opencode/src/config/config.ts | 28 ++- packages/opencode/src/flag/flag.ts | 35 +++- packages/opencode/src/session/system.ts | 29 ++- packages/opencode/test/config/config.test.ts | 202 +++++++++++++++++++ 4 files changed, 271 insertions(+), 23 deletions(-) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index b2142e29b94..020e626cba8 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -80,10 +80,12 @@ export namespace Config { } // Project config has highest precedence (overrides global and remote) - for (const file of ["opencode.jsonc", "opencode.json"]) { - const found = await Filesystem.findUp(file, Instance.directory, Instance.worktree) - for (const resolved of found.toReversed()) { - result = mergeConfigConcatArrays(result, await loadFile(resolved)) + if (!Flag.OPENCODE_DISABLE_PROJECT_CONFIG) { + for (const file of ["opencode.jsonc", "opencode.json"]) { + const found = await Filesystem.findUp(file, Instance.directory, Instance.worktree) + for (const resolved of found.toReversed()) { + result = mergeConfigConcatArrays(result, await loadFile(resolved)) + } } } @@ -99,13 +101,17 @@ export namespace Config { const directories = [ Global.Path.config, - ...(await Array.fromAsync( - Filesystem.up({ - targets: [".opencode"], - start: Instance.directory, - stop: Instance.worktree, - }), - )), + // Only scan project .opencode/ directories when project discovery is enabled + ...(!Flag.OPENCODE_DISABLE_PROJECT_CONFIG + ? await Array.fromAsync( + Filesystem.up({ + targets: [".opencode"], + start: Instance.directory, + stop: Instance.worktree, + }), + ) + : []), + // Always scan ~/.opencode/ (user home directory) ...(await Array.fromAsync( Filesystem.up({ targets: [".opencode"], diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts index 63b1ac7e546..d106c2d86e9 100644 --- a/packages/opencode/src/flag/flag.ts +++ b/packages/opencode/src/flag/flag.ts @@ -1,8 +1,13 @@ +function truthy(key: string) { + const value = process.env[key]?.toLowerCase() + return value === "true" || value === "1" +} + export namespace Flag { export const OPENCODE_AUTO_SHARE = truthy("OPENCODE_AUTO_SHARE") export const OPENCODE_GIT_BASH_PATH = process.env["OPENCODE_GIT_BASH_PATH"] export const OPENCODE_CONFIG = process.env["OPENCODE_CONFIG"] - export const OPENCODE_CONFIG_DIR = process.env["OPENCODE_CONFIG_DIR"] + export declare const OPENCODE_CONFIG_DIR: string | undefined export const OPENCODE_CONFIG_CONTENT = process.env["OPENCODE_CONFIG_CONTENT"] export const OPENCODE_DISABLE_AUTOUPDATE = truthy("OPENCODE_DISABLE_AUTOUPDATE") export const OPENCODE_DISABLE_PRUNE = truthy("OPENCODE_DISABLE_PRUNE") @@ -18,6 +23,7 @@ export namespace Flag { OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_PROMPT") export const OPENCODE_DISABLE_CLAUDE_CODE_SKILLS = OPENCODE_DISABLE_CLAUDE_CODE || truthy("OPENCODE_DISABLE_CLAUDE_CODE_SKILLS") + export declare const OPENCODE_DISABLE_PROJECT_CONFIG: boolean export const OPENCODE_FAKE_VCS = process.env["OPENCODE_FAKE_VCS"] export const OPENCODE_CLIENT = process.env["OPENCODE_CLIENT"] ?? "cli" export const OPENCODE_SERVER_PASSWORD = process.env["OPENCODE_SERVER_PASSWORD"] @@ -41,11 +47,6 @@ export namespace Flag { export const OPENCODE_DISABLE_FILETIME_CHECK = truthy("OPENCODE_DISABLE_FILETIME_CHECK") export const OPENCODE_EXPERIMENTAL_PLAN_MODE = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_PLAN_MODE") - function truthy(key: string) { - const value = process.env[key]?.toLowerCase() - return value === "true" || value === "1" - } - function number(key: string) { const value = process.env[key] if (!value) return undefined @@ -53,3 +54,25 @@ export namespace Flag { return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined } } + +// Dynamic getter for OPENCODE_DISABLE_PROJECT_CONFIG +// This must be evaluated at access time, not module load time, +// because external tooling may set this env var at runtime +Object.defineProperty(Flag, "OPENCODE_DISABLE_PROJECT_CONFIG", { + get() { + return truthy("OPENCODE_DISABLE_PROJECT_CONFIG") + }, + enumerable: true, + configurable: false, +}) + +// Dynamic getter for OPENCODE_CONFIG_DIR +// This must be evaluated at access time, not module load time, +// because external tooling may set this env var at runtime +Object.defineProperty(Flag, "OPENCODE_CONFIG_DIR", { + get() { + return process.env["OPENCODE_CONFIG_DIR"] + }, + enumerable: true, + configurable: false, +}) diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts index f0e2d96b7eb..1f0fc3d0a20 100644 --- a/packages/opencode/src/session/system.ts +++ b/packages/opencode/src/session/system.ts @@ -2,6 +2,7 @@ import { Ripgrep } from "../file/ripgrep" import { Global } from "../global" import { Filesystem } from "../util/filesystem" import { Config } from "../config/config" +import { Log } from "../util/log" import { Instance } from "../project/instance" import path from "path" @@ -17,6 +18,19 @@ import PROMPT_CODEX from "./prompt/codex_header.txt" import type { Provider } from "@/provider/provider" import { Flag } from "@/flag/flag" +const log = Log.create({ service: "system-prompt" }) + +async function resolveRelativeInstruction(instruction: string): Promise<string[]> { + if (!Flag.OPENCODE_DISABLE_PROJECT_CONFIG) { + return Filesystem.globUp(instruction, Instance.directory, Instance.worktree).catch(() => []) + } + if (!Flag.OPENCODE_CONFIG_DIR) { + log.warn(`Skipping relative instruction "${instruction}" - no OPENCODE_CONFIG_DIR set while project config is disabled`) + return [] + } + return Filesystem.globUp(instruction, Flag.OPENCODE_CONFIG_DIR, Flag.OPENCODE_CONFIG_DIR).catch(() => []) +} + export namespace SystemPrompt { export function header(providerID: string) { if (providerID.includes("anthropic")) return [PROMPT_ANTHROPIC_SPOOF.trim()] @@ -79,11 +93,14 @@ export namespace SystemPrompt { const config = await Config.get() const paths = new Set<string>() - for (const localRuleFile of LOCAL_RULE_FILES) { - const matches = await Filesystem.findUp(localRuleFile, Instance.directory, Instance.worktree) - if (matches.length > 0) { - matches.forEach((path) => paths.add(path)) - break + // Only scan local rule files when project discovery is enabled + if (!Flag.OPENCODE_DISABLE_PROJECT_CONFIG) { + for (const localRuleFile of LOCAL_RULE_FILES) { + const matches = await Filesystem.findUp(localRuleFile, Instance.directory, Instance.worktree) + if (matches.length > 0) { + matches.forEach((path) => paths.add(path)) + break + } } } @@ -114,7 +131,7 @@ export namespace SystemPrompt { }), ).catch(() => []) } else { - matches = await Filesystem.globUp(instruction, Instance.directory, Instance.worktree).catch(() => []) + matches = await resolveRelativeInstruction(instruction) } matches.forEach((path) => paths.add(path)) } diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 0463d29d7c5..1dbfe1f82c2 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -1412,3 +1412,205 @@ describe("deduplicatePlugins", () => { }) }) }) + +describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { + test("skips project config files when flag is set", async () => { + const originalEnv = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" + + try { + await using tmp = await tmpdir({ + init: async (dir) => { + // Create a project config that would normally be loaded + await Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + model: "project/model", + username: "project-user", + }), + ) + }, + }) + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const config = await Config.get() + // Project config should NOT be loaded - model should be default, not "project/model" + expect(config.model).not.toBe("project/model") + expect(config.username).not.toBe("project-user") + }, + }) + } finally { + if (originalEnv === undefined) { + delete process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + } else { + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = originalEnv + } + } + }) + + test("skips project .opencode/ directories when flag is set", async () => { + const originalEnv = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" + + try { + await using tmp = await tmpdir({ + init: async (dir) => { + // Create a .opencode directory with a command + const opencodeDir = path.join(dir, ".opencode", "command") + await fs.mkdir(opencodeDir, { recursive: true }) + await Bun.write( + path.join(opencodeDir, "test-cmd.md"), + "# Test Command\nThis is a test command.", + ) + }, + }) + await Instance.provide({ + directory: tmp.path, + fn: async () => { + const directories = await Config.directories() + // Project .opencode should NOT be in directories list + const hasProjectOpencode = directories.some(d => d.startsWith(tmp.path)) + expect(hasProjectOpencode).toBe(false) + }, + }) + } finally { + if (originalEnv === undefined) { + delete process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + } else { + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = originalEnv + } + } + }) + + test("still loads global config when flag is set", async () => { + const originalEnv = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" + + try { + await using tmp = await tmpdir() + await Instance.provide({ + directory: tmp.path, + fn: async () => { + // Should still get default config (from global or defaults) + const config = await Config.get() + expect(config).toBeDefined() + expect(config.username).toBeDefined() + }, + }) + } finally { + if (originalEnv === undefined) { + delete process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + } else { + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = originalEnv + } + } + }) + + test("skips relative instructions with warning when flag is set but no config dir", async () => { + const originalDisable = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + const originalConfigDir = process.env["OPENCODE_CONFIG_DIR"] + + try { + // Ensure no config dir is set + delete process.env["OPENCODE_CONFIG_DIR"] + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" + + await using tmp = await tmpdir({ + init: async (dir) => { + // Create a config with relative instruction path + await Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + instructions: ["./CUSTOM.md"], + }), + ) + // Create the instruction file (should be skipped) + await Bun.write(path.join(dir, "CUSTOM.md"), "# Custom Instructions") + }, + }) + + await Instance.provide({ + directory: tmp.path, + fn: async () => { + // The relative instruction should be skipped without error + // We're mainly verifying this doesn't throw and the config loads + const config = await Config.get() + expect(config).toBeDefined() + // The instruction should have been skipped (warning logged) + // We can't easily test the warning was logged, but we verify + // the relative path didn't cause an error + }, + }) + } finally { + if (originalDisable === undefined) { + delete process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + } else { + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = originalDisable + } + if (originalConfigDir === undefined) { + delete process.env["OPENCODE_CONFIG_DIR"] + } else { + process.env["OPENCODE_CONFIG_DIR"] = originalConfigDir + } + } + }) + + test("OPENCODE_CONFIG_DIR still works when flag is set", async () => { + const originalDisable = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + const originalConfigDir = process.env["OPENCODE_CONFIG_DIR"] + + try { + await using configDirTmp = await tmpdir({ + init: async (dir) => { + // Create config in the custom config dir + await Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + model: "configdir/model", + }), + ) + }, + }) + + await using projectTmp = await tmpdir({ + init: async (dir) => { + // Create config in project (should be ignored) + await Bun.write( + path.join(dir, "opencode.json"), + JSON.stringify({ + $schema: "https://opencode.ai/config.json", + model: "project/model", + }), + ) + }, + }) + + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" + process.env["OPENCODE_CONFIG_DIR"] = configDirTmp.path + + await Instance.provide({ + directory: projectTmp.path, + fn: async () => { + const config = await Config.get() + // Should load from OPENCODE_CONFIG_DIR, not project + expect(config.model).toBe("configdir/model") + }, + }) + } finally { + if (originalDisable === undefined) { + delete process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] + } else { + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = originalDisable + } + if (originalConfigDir === undefined) { + delete process.env["OPENCODE_CONFIG_DIR"] + } else { + process.env["OPENCODE_CONFIG_DIR"] = originalConfigDir + } + } + }) +}) From 96e9c89cc699849fb549b274259674245eb64991 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 05:37:18 +0000 Subject: [PATCH 228/426] chore: generate --- packages/opencode/src/session/system.ts | 4 ++- packages/opencode/test/config/config.test.ts | 27 +++++++++----------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/packages/opencode/src/session/system.ts b/packages/opencode/src/session/system.ts index 1f0fc3d0a20..55246c2319b 100644 --- a/packages/opencode/src/session/system.ts +++ b/packages/opencode/src/session/system.ts @@ -25,7 +25,9 @@ async function resolveRelativeInstruction(instruction: string): Promise<string[] return Filesystem.globUp(instruction, Instance.directory, Instance.worktree).catch(() => []) } if (!Flag.OPENCODE_CONFIG_DIR) { - log.warn(`Skipping relative instruction "${instruction}" - no OPENCODE_CONFIG_DIR set while project config is disabled`) + log.warn( + `Skipping relative instruction "${instruction}" - no OPENCODE_CONFIG_DIR set while project config is disabled`, + ) return [] } return Filesystem.globUp(instruction, Flag.OPENCODE_CONFIG_DIR, Flag.OPENCODE_CONFIG_DIR).catch(() => []) diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 1dbfe1f82c2..decd18446c1 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -1417,7 +1417,7 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { test("skips project config files when flag is set", async () => { const originalEnv = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" - + try { await using tmp = await tmpdir({ init: async (dir) => { @@ -1453,17 +1453,14 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { test("skips project .opencode/ directories when flag is set", async () => { const originalEnv = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" - + try { await using tmp = await tmpdir({ init: async (dir) => { // Create a .opencode directory with a command const opencodeDir = path.join(dir, ".opencode", "command") await fs.mkdir(opencodeDir, { recursive: true }) - await Bun.write( - path.join(opencodeDir, "test-cmd.md"), - "# Test Command\nThis is a test command.", - ) + await Bun.write(path.join(opencodeDir, "test-cmd.md"), "# Test Command\nThis is a test command.") }, }) await Instance.provide({ @@ -1471,7 +1468,7 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { fn: async () => { const directories = await Config.directories() // Project .opencode should NOT be in directories list - const hasProjectOpencode = directories.some(d => d.startsWith(tmp.path)) + const hasProjectOpencode = directories.some((d) => d.startsWith(tmp.path)) expect(hasProjectOpencode).toBe(false) }, }) @@ -1487,7 +1484,7 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { test("still loads global config when flag is set", async () => { const originalEnv = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" - + try { await using tmp = await tmpdir() await Instance.provide({ @@ -1511,12 +1508,12 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { test("skips relative instructions with warning when flag is set but no config dir", async () => { const originalDisable = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] const originalConfigDir = process.env["OPENCODE_CONFIG_DIR"] - + try { // Ensure no config dir is set delete process.env["OPENCODE_CONFIG_DIR"] process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" - + await using tmp = await tmpdir({ init: async (dir) => { // Create a config with relative instruction path @@ -1531,7 +1528,7 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { await Bun.write(path.join(dir, "CUSTOM.md"), "# Custom Instructions") }, }) - + await Instance.provide({ directory: tmp.path, fn: async () => { @@ -1561,7 +1558,7 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { test("OPENCODE_CONFIG_DIR still works when flag is set", async () => { const originalDisable = process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] const originalConfigDir = process.env["OPENCODE_CONFIG_DIR"] - + try { await using configDirTmp = await tmpdir({ init: async (dir) => { @@ -1575,7 +1572,7 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { ) }, }) - + await using projectTmp = await tmpdir({ init: async (dir) => { // Create config in project (should be ignored) @@ -1588,10 +1585,10 @@ describe("OPENCODE_DISABLE_PROJECT_CONFIG", () => { ) }, }) - + process.env["OPENCODE_DISABLE_PROJECT_CONFIG"] = "true" process.env["OPENCODE_CONFIG_DIR"] = configDirTmp.path - + await Instance.provide({ directory: projectTmp.path, fn: async () => { From 0f979bb87cd4d07ff70bb02323414124b009687e Mon Sep 17 00:00:00 2001 From: Michael H <git@riskymh.dev> Date: Wed, 21 Jan 2026 16:37:33 +1100 Subject: [PATCH 229/426] chore(opencode): Use Bun.semver instead of node-semver (#9773) --- bun.lock | 3 --- packages/script/package.json | 3 +-- packages/script/src/index.ts | 5 ++--- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/bun.lock b/bun.lock index f515b8cab7d..22be7431c7d 100644 --- a/bun.lock +++ b/bun.lock @@ -376,7 +376,6 @@ "name": "@opencode-ai/script", "devDependencies": { "@types/bun": "catalog:", - "@types/semver": "catalog:", }, }, "packages/sdk/js": { @@ -1855,8 +1854,6 @@ "@types/scheduler": ["@types/scheduler@0.26.0", "", {}, "sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA=="], - "@types/semver": ["@types/semver@7.7.1", "", {}, "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA=="], - "@types/send": ["@types/send@0.17.6", "", { "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og=="], "@types/serve-static": ["@types/serve-static@1.15.10", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "<1" } }, "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw=="], diff --git a/packages/script/package.json b/packages/script/package.json index 08a8170269f..45de3bcb99f 100644 --- a/packages/script/package.json +++ b/packages/script/package.json @@ -3,8 +3,7 @@ "name": "@opencode-ai/script", "license": "MIT", "devDependencies": { - "@types/bun": "catalog:", - "@types/semver": "catalog:" + "@types/bun": "catalog:" }, "exports": { ".": "./src/index.ts" diff --git a/packages/script/src/index.ts b/packages/script/src/index.ts index 141b3b192a8..e722ba5094e 100644 --- a/packages/script/src/index.ts +++ b/packages/script/src/index.ts @@ -1,6 +1,5 @@ -import { $ } from "bun" +import { $, semver } from "bun" import path from "path" -import { satisfies } from "semver" const rootPkgPath = path.resolve(import.meta.dir, "../../../package.json") const rootPkg = await Bun.file(rootPkgPath).json() @@ -13,7 +12,7 @@ if (!expectedBunVersion) { // relax version requirement const expectedBunVersionRange = `^${expectedBunVersion}` -if (!satisfies(process.versions.bun, expectedBunVersionRange)) { +if (!semver.satisfies(process.versions.bun, expectedBunVersionRange)) { throw new Error(`This script requires bun@${expectedBunVersionRange}, but you are using bun@${process.versions.bun}`) } From a6399619738f67a024fdd5928c0137f8f7074c68 Mon Sep 17 00:00:00 2001 From: Github Action <action@github.com> Date: Wed, 21 Jan 2026 05:40:07 +0000 Subject: [PATCH 230/426] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index 47301c61ff8..f71de4b2c6c 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-xCizgzUsDiGeI3JXj6Z0NoWeQKqznhxY6nrx1CsEMhM=", - "aarch64-linux": "sha256-xqr03j6xEcHljm2BAtDn22CJkAr/Tvy7sh+sQTKj09g=", - "aarch64-darwin": "sha256-PDu6SSTZJBn8amLc0JwJ0nQF6yICeDWF4a8JUHr6utA=", - "x86_64-darwin": "sha256-lEMxdyTvAOO7bAiluzQSqleLx5Cey17iHjM7dab6q/w=" + "x86_64-linux": "sha256-fqwMFUpYQZrS7b+MnXQvRj1kemXlnILGAScJY+eWtD0=", + "aarch64-linux": "sha256-xsrV/gUVCKinzY4nx7NuceeLKx5pEdUWxeEm9GPHw34=", + "aarch64-darwin": "sha256-oH2cr1/Dfk6YToBon/mKMguvvj9WoE4E7MJjo/keL+A=", + "x86_64-darwin": "sha256-QvzBGDeqwGKC339KTDuh2X4DFGZF8AkpROx59nGbw0U=" } } From 65938baf00f58ef9d5e275b85cb4641d40f8ceae Mon Sep 17 00:00:00 2001 From: Dax Raad <d@ironbay.co> Date: Wed, 21 Jan 2026 00:57:51 -0500 Subject: [PATCH 231/426] core: update session summary after revert to show file changes --- packages/opencode/src/session/revert.ts | 13 +++++++++++++ packages/opencode/src/session/summary.ts | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/session/revert.ts b/packages/opencode/src/session/revert.ts index 35c7b9a607e..7afe44e2ce3 100644 --- a/packages/opencode/src/session/revert.ts +++ b/packages/opencode/src/session/revert.ts @@ -8,6 +8,7 @@ import { splitWhen } from "remeda" import { Storage } from "../storage/storage" import { Bus } from "../bus" import { SessionPrompt } from "./prompt" +import { SessionSummary } from "./summary" export namespace SessionRevert { const log = Log.create({ service: "session.revert" }) @@ -57,8 +58,20 @@ export namespace SessionRevert { revert.snapshot = session.revert?.snapshot ?? (await Snapshot.track()) await Snapshot.revert(patches) if (revert.snapshot) revert.diff = await Snapshot.diff(revert.snapshot) + const rangeMessages = all.filter((msg) => msg.info.id >= revert!.messageID) + const diffs = await SessionSummary.computeDiff({ messages: rangeMessages }) + await Storage.write(["session_diff", input.sessionID], diffs) + Bus.publish(Session.Event.Diff, { + sessionID: input.sessionID, + diff: diffs, + }) return Session.update(input.sessionID, (draft) => { draft.revert = revert + draft.summary = { + additions: diffs.reduce((sum, x) => sum + x.additions, 0), + deletions: diffs.reduce((sum, x) => sum + x.deletions, 0), + files: diffs.length, + } }) } return session diff --git a/packages/opencode/src/session/summary.ts b/packages/opencode/src/session/summary.ts index dbca218f9c6..c03100c9bfb 100644 --- a/packages/opencode/src/session/summary.ts +++ b/packages/opencode/src/session/summary.ts @@ -120,7 +120,7 @@ export namespace SessionSummary { }, ) - async function computeDiff(input: { messages: MessageV2.WithParts[] }) { + export async function computeDiff(input: { messages: MessageV2.WithParts[] }) { let from: string | undefined let to: string | undefined From d6caaee8169ff1abd7012cc1d036f2621703a757 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 02:21:21 -0600 Subject: [PATCH 232/426] fix(desktop): no proxy for connecting to sidecar (#9690) Co-authored-by: Brendan Allan <git@brendonovich.dev> --- packages/desktop/src-tauri/src/lib.rs | 33 ++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/packages/desktop/src-tauri/src/lib.rs b/packages/desktop/src-tauri/src/lib.rs index 3cfa8a9be5a..7b11397a396 100644 --- a/packages/desktop/src-tauri/src/lib.rs +++ b/packages/desktop/src-tauri/src/lib.rs @@ -156,6 +156,7 @@ fn spawn_sidecar(app: &AppHandle, port: u32, password: &str) -> CommandChild { println!("spawning sidecar on port {port}"); let (mut rx, child) = cli::create_command(app, format!("serve --port {port}").as_str()) + .env("OPENCODE_SERVER_USERNAME", "opencode") .env("OPENCODE_SERVER_PASSWORD", password) .spawn() .expect("Failed to spawn opencode"); @@ -197,17 +198,37 @@ fn spawn_sidecar(app: &AppHandle, port: u32, password: &str) -> CommandChild { child } +fn url_is_localhost(url: &reqwest::Url) -> bool { + url.host_str().is_some_and(|host| { + host.eq_ignore_ascii_case("localhost") + || host + .parse::<std::net::IpAddr>() + .is_ok_and(|ip| ip.is_loopback()) + }) +} + async fn check_server_health(url: &str, password: Option<&str>) -> bool { - let health_url = format!("{}/global/health", url.trim_end_matches('/')); - let client = reqwest::Client::builder() - .timeout(Duration::from_secs(3)) - .build(); + let Ok(url) = reqwest::Url::parse(url) else { + return false; + }; + + let mut builder = reqwest::Client::builder().timeout(Duration::from_secs(3)); - let Ok(client) = client else { + if url_is_localhost(&url) { + // Some environments set proxy variables (HTTP_PROXY/HTTPS_PROXY/ALL_PROXY) without + // excluding loopback. reqwest respects these by default, which can prevent the desktop + // app from reaching its own local sidecar server. + builder = builder.no_proxy(); + }; + + let Ok(client) = builder.build() else { + return false; + }; + let Ok(health_url) = url.join("/global/health") else { return false; }; - let mut req = client.get(&health_url); + let mut req = client.get(health_url); if let Some(password) = password { req = req.basic_auth("opencode", Some(password)); From cf6ad4c40789beef8a0f2a07f12964fd5fdd2b09 Mon Sep 17 00:00:00 2001 From: shirukai <308899573@qq.com> Date: Wed, 21 Jan 2026 18:35:23 +0800 Subject: [PATCH 233/426] fix: handle special characters in paths and git snapshot reading logic(#9804) (#9807) --- packages/app/src/context/file.tsx | 18 ++++- packages/opencode/src/snapshot/index.ts | 90 +++++++++++++++++++++---- 2 files changed, 94 insertions(+), 14 deletions(-) diff --git a/packages/app/src/context/file.tsx b/packages/app/src/context/file.tsx index 5ea4993879c..d7630509a1b 100644 --- a/packages/app/src/context/file.tsx +++ b/packages/app/src/context/file.tsx @@ -195,7 +195,20 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ const root = directory() const prefix = root.endsWith("/") ? root : root + "/" - let path = stripQueryAndHash(stripFileProtocol(input)) + let path = input + + // Only strip protocol and decode if it's a file URI + if (path.startsWith("file://")) { + const raw = stripQueryAndHash(stripFileProtocol(path)) + try { + // Attempt to treat as a standard URI + path = decodeURIComponent(raw) + } catch { + // Fallback for legacy paths that might contain invalid URI sequences (e.g. "100%") + // In this case, we treat the path as raw, but still strip the protocol + path = raw + } + } if (path.startsWith(prefix)) { path = path.slice(prefix.length) @@ -218,7 +231,8 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({ function tab(input: string) { const path = normalize(input) - return `file://${path}` + const encoded = path.split("/").map(encodeURIComponent).join("/") + return `file://${encoded}` } function pathFromTab(tabValue: string) { diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index 46c97cf8dfd..5a198434bdd 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -104,6 +104,7 @@ export namespace Snapshot { .split("\n") .map((x) => x.trim()) .filter(Boolean) + .map((x) => unquote(x)) .map((x) => path.join(Instance.worktree, x)), } } @@ -151,7 +152,7 @@ export namespace Snapshot { }) } else { log.info("file did not exist in snapshot, deleting", { file }) - await fs.unlink(file).catch(() => {}) + await fs.unlink(file).catch(() => { }) } } files.add(file) @@ -202,20 +203,22 @@ export namespace Snapshot { .nothrow() .lines()) { if (!line) continue - const [additions, deletions, file] = line.split("\t") + const [additions, deletions, rawFile] = line.split("\t") + const file = unquote(rawFile) const isBinaryFile = additions === "-" && deletions === "-" - const before = isBinaryFile - ? "" + const beforeResult = isBinaryFile + ? { exitCode: 0, text: () => "", stderr: Buffer.from("") } : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${from}:${file}` - .quiet() - .nothrow() - .text() - const after = isBinaryFile - ? "" + .quiet() + .nothrow() + const before = beforeResult.exitCode === 0 ? beforeResult.text() : `[DEBUG ERROR] git show ${from}:${file} failed: ${beforeResult.stderr.toString()}` + + const afterResult = isBinaryFile + ? { exitCode: 0, text: () => "", stderr: Buffer.from("") } : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${to}:${file}` - .quiet() - .nothrow() - .text() + .quiet() + .nothrow() + const after = afterResult.exitCode === 0 ? afterResult.text() : `[DEBUG ERROR] git show ${to}:${file} failed: ${afterResult.stderr.toString()}` const added = isBinaryFile ? 0 : parseInt(additions) const deleted = isBinaryFile ? 0 : parseInt(deletions) result.push({ @@ -229,6 +232,69 @@ export namespace Snapshot { return result } + export function unquote(path: string): string { + // If the path is wrapped in quotes, it might contain octal escapes + if (path.startsWith('"') && path.endsWith('"')) { + const quoted = path.slice(1, -1) + // Decode escaped characters + const buffer: number[] = [] + for (let i = 0; i < quoted.length; i++) { + if (quoted[i] === "\\") { + i++ + // Check for octal escape (e.g. \344) + if (i + 2 < quoted.length && /^[0-7]{3}$/.test(quoted.slice(i, i + 3))) { + const octal = quoted.slice(i, i + 3) + buffer.push(parseInt(octal, 8)) + i += 2 + } else { + // Handle standard escapes + switch (quoted[i]) { + case "b": + buffer.push(8) + break + case "t": + buffer.push(9) + break + case "n": + buffer.push(10) + break + case "v": + buffer.push(11) + break + case "f": + buffer.push(12) + break + case "r": + buffer.push(13) + break + case '"': + buffer.push(34) + break + case "\\": + buffer.push(92) + break + default: + // If unknown escape, keep original (or char code of escaped char) + buffer.push(quoted.charCodeAt(i)) + } + } + } else { + const charCode = quoted.charCodeAt(i) + if (charCode < 128) { + buffer.push(charCode) + } else { + const charBuffer = Buffer.from(quoted[i]) + for (const byte of charBuffer) { + buffer.push(byte) + } + } + } + } + return Buffer.from(buffer).toString("utf8") + } + return path + } + function gitdir() { const project = Instance.project return path.join(Global.Path.data, "snapshot", project.id) From 79aa931a0512aa9c84f9adc71fe6686de66a1af6 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 10:36:00 +0000 Subject: [PATCH 234/426] chore: generate --- packages/opencode/src/snapshot/index.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index 5a198434bdd..0f5e9c66e01 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -152,7 +152,7 @@ export namespace Snapshot { }) } else { log.info("file did not exist in snapshot, deleting", { file }) - await fs.unlink(file).catch(() => { }) + await fs.unlink(file).catch(() => {}) } } files.add(file) @@ -209,16 +209,22 @@ export namespace Snapshot { const beforeResult = isBinaryFile ? { exitCode: 0, text: () => "", stderr: Buffer.from("") } : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${from}:${file}` - .quiet() - .nothrow() - const before = beforeResult.exitCode === 0 ? beforeResult.text() : `[DEBUG ERROR] git show ${from}:${file} failed: ${beforeResult.stderr.toString()}` + .quiet() + .nothrow() + const before = + beforeResult.exitCode === 0 + ? beforeResult.text() + : `[DEBUG ERROR] git show ${from}:${file} failed: ${beforeResult.stderr.toString()}` const afterResult = isBinaryFile ? { exitCode: 0, text: () => "", stderr: Buffer.from("") } : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${to}:${file}` - .quiet() - .nothrow() - const after = afterResult.exitCode === 0 ? afterResult.text() : `[DEBUG ERROR] git show ${to}:${file} failed: ${afterResult.stderr.toString()}` + .quiet() + .nothrow() + const after = + afterResult.exitCode === 0 + ? afterResult.text() + : `[DEBUG ERROR] git show ${to}:${file} failed: ${afterResult.stderr.toString()}` const added = isBinaryFile ? 0 : parseInt(additions) const deleted = isBinaryFile ? 0 : parseInt(deletions) result.push({ From 8e8fb6a54bb129b7cf2d269f61a00e6b7625e173 Mon Sep 17 00:00:00 2001 From: DNGriffin <31415269+DNGriffin@users.noreply.github.com> Date: Wed, 21 Jan 2026 04:41:03 -0600 Subject: [PATCH 235/426] feat(app): allow users to select directory text on new session (#9760) --- packages/app/src/components/session/session-new-view.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/session/session-new-view.tsx b/packages/app/src/components/session/session-new-view.tsx index 6d6078d403a..f7f422fc5ea 100644 --- a/packages/app/src/components/session/session-new-view.tsx +++ b/packages/app/src/components/session/session-new-view.tsx @@ -53,7 +53,7 @@ export function NewSessionView(props: NewSessionViewProps) { <div class="text-20-medium text-text-weaker">{language.t("command.session.new")}</div> <div class="flex justify-center items-center gap-3"> <Icon name="folder" size="small" /> - <div class="text-12-medium text-text-weak"> + <div class="text-12-medium text-text-weak select-text"> {getDirectory(projectRoot())} <span class="text-text-strong">{getFilename(projectRoot())}</span> </div> From 2e5fe6d5c88907aefe3dc19c3e95f761ba0efdea Mon Sep 17 00:00:00 2001 From: zerone0x <hi@trine.dev> Date: Wed, 21 Jan 2026 18:41:45 +0800 Subject: [PATCH 236/426] fix(ui): preserve filename casing in edit/write tool titles (#9752) --- packages/ui/src/components/message-part.css | 10 ++++++++++ packages/ui/src/components/message-part.tsx | 6 ++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 137e6a4d77a..07f9aa31205 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -230,6 +230,9 @@ [data-slot="message-part-title"] { flex-shrink: 0; + display: flex; + align-items: center; + gap: 4px; font-family: var(--font-family-sans); font-size: var(--font-size-base); font-style: normal; @@ -237,9 +240,16 @@ line-height: var(--line-height-large); letter-spacing: var(--letter-spacing-normal); color: var(--text-base); + } + + [data-slot="message-part-title-text"] { text-transform: capitalize; } + [data-slot="message-part-title-filename"] { + /* No text-transform - preserve original filename casing */ + } + [data-slot="message-part-path"] { display: flex; flex-grow: 1; diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 340c137454a..d1788f1df2f 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -1025,7 +1025,8 @@ ToolRegistry.register({ <div data-component="edit-trigger"> <div data-slot="message-part-title-area"> <div data-slot="message-part-title"> - {i18n.t("ui.messagePart.title.edit")} {filename()} + <span data-slot="message-part-title-text">{i18n.t("ui.messagePart.title.edit")}</span> + <span data-slot="message-part-title-filename">{filename()}</span> </div> <Show when={props.input.filePath?.includes("/")}> <div data-slot="message-part-path"> @@ -1077,7 +1078,8 @@ ToolRegistry.register({ <div data-component="write-trigger"> <div data-slot="message-part-title-area"> <div data-slot="message-part-title"> - {i18n.t("ui.messagePart.title.write")} {filename()} + <span data-slot="message-part-title-text">{i18n.t("ui.messagePart.title.write")}</span> + <span data-slot="message-part-title-filename">{filename()}</span> </div> <Show when={props.input.filePath?.includes("/")}> <div data-slot="message-part-path"> From 996eeb1f6848b393d887791557e0d8cbe56255ec Mon Sep 17 00:00:00 2001 From: Ronan Kearns <90280289+kearns-cu@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:44:17 -0500 Subject: [PATCH 237/426] feat(app): add manage models icon to selector (per Figma request) (#9722) --- .../src/components/dialog-select-model.tsx | 27 ++++++++++- packages/ui/src/components/list.css | 38 +++++++++++++-- packages/ui/src/components/list.tsx | 47 ++++++++++--------- 3 files changed, 86 insertions(+), 26 deletions(-) diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index cdb299c79d9..8288a825579 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -4,6 +4,7 @@ import { useLocal } from "@/context/local" import { useDialog } from "@opencode-ai/ui/context/dialog" import { popularProviders } from "@/hooks/use-providers" import { Button } from "@opencode-ai/ui/button" +import { IconButton } from "@opencode-ai/ui/icon-button" import { Tag } from "@opencode-ai/ui/tag" import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" @@ -15,6 +16,7 @@ const ModelList: Component<{ provider?: string class?: string onSelect: () => void + action?: JSX.Element }> = (props) => { const local = useLocal() const language = useLanguage() @@ -29,7 +31,7 @@ const ModelList: Component<{ return ( <List class={`flex-1 min-h-0 [&_[data-slot=list-scroll]]:flex-1 [&_[data-slot=list-scroll]]:min-h-0 ${props.class ?? ""}`} - search={{ placeholder: language.t("dialog.model.search.placeholder"), autofocus: true }} + search={{ placeholder: language.t("dialog.model.search.placeholder"), autofocus: true, action: props.action }} emptyMessage={language.t("dialog.model.empty")} key={(x) => `${x.provider.id}:${x.id}`} items={models} @@ -71,6 +73,12 @@ export const ModelSelectorPopover: Component<{ children: JSX.Element }> = (props) => { const [open, setOpen] = createSignal(false) + const dialog = useDialog() + + const handleManage = () => { + setOpen(false) + dialog.show(() => <DialogManageModels />) + } const language = useLanguage() return ( @@ -79,7 +87,22 @@ export const ModelSelectorPopover: Component<{ <Kobalte.Portal> <Kobalte.Content class="w-72 h-80 flex flex-col rounded-md border border-border-base bg-surface-raised-stronger-non-alpha shadow-md z-50 outline-none overflow-hidden"> <Kobalte.Title class="sr-only">{language.t("dialog.model.select.title")}</Kobalte.Title> - <ModelList provider={props.provider} onSelect={() => setOpen(false)} class="p-1" /> + <ModelList + provider={props.provider} + onSelect={() => setOpen(false)} + class="p-1" + action={ + <IconButton + icon="sliders" + variant="ghost" + iconSize="normal" + class="size-6" + aria-label="Manage models" + title="Manage models" + onClick={handleManage} + /> + } + /> </Kobalte.Content> </Kobalte.Portal> </Kobalte> diff --git a/packages/ui/src/components/list.css b/packages/ui/src/components/list.css index ee9be422c97..95641bb202e 100644 --- a/packages/ui/src/components/list.css +++ b/packages/ui/src/components/list.css @@ -23,14 +23,46 @@ overflow: hidden; padding: 0 12px; - [data-slot="list-search"] { + [data-slot="list-search-wrapper"] { display: flex; flex-shrink: 0; - padding: 8px; align-items: center; - gap: 12px; + gap: 8px; align-self: stretch; margin-bottom: 4px; + padding-right: 4px; + + > [data-component="icon-button"] { + width: 24px; + height: 24px; + flex-shrink: 0; + background-color: transparent; + opacity: 0.5; + transition: opacity 0.15s ease; + + &:hover:not(:disabled), + &:focus:not(:disabled), + &:active:not(:disabled) { + background-color: transparent; + opacity: 0.7; + } + + &:hover:not(:disabled) [data-slot="icon-svg"] { + color: var(--icon-hover); + } + + &:active:not(:disabled) [data-slot="icon-svg"] { + color: var(--icon-active); + } + } + } + + [data-slot="list-search"] { + display: flex; + flex: 1; + padding: 8px; + align-items: center; + gap: 12px; border-radius: var(--radius-md); background: var(--surface-base); diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index 066363502bd..fc9fa540517 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -11,6 +11,7 @@ export interface ListSearchProps { autofocus?: boolean hideIcon?: boolean class?: string + action?: JSX.Element } export interface ListProps<T> extends FilteredListProps<T> { @@ -60,6 +61,7 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void }) const { filter, grouped, flat, active, setActive, onKeyDown, onInput } = useFilteredList<T>(props) const searchProps = () => (typeof props.search === "object" ? props.search : {}) + const searchAction = () => searchProps().action const moved = (event: MouseEvent) => event.movementX !== 0 || event.movementY !== 0 @@ -198,29 +200,32 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void }) return ( <div data-component="list" classList={{ [props.class ?? ""]: !!props.class }}> <Show when={!!props.search}> - <div data-slot="list-search" classList={{ [searchProps().class ?? ""]: !!searchProps().class }}> - <div data-slot="list-search-container"> - <Show when={!searchProps().hideIcon}> - <Icon name="magnifying-glass" /> + <div data-slot="list-search-wrapper"> + <div data-slot="list-search" classList={{ [searchProps().class ?? ""]: !!searchProps().class }}> + <div data-slot="list-search-container"> + <Show when={!searchProps().hideIcon}> + <Icon name="magnifying-glass" /> + </Show> + <TextField + autofocus={searchProps().autofocus} + variant="ghost" + data-slot="list-search-input" + type="text" + value={internalFilter()} + onChange={setInternalFilter} + onKeyDown={handleKey} + placeholder={searchProps().placeholder} + spellcheck={false} + autocorrect="off" + autocomplete="off" + autocapitalize="off" + /> + </div> + <Show when={internalFilter()}> + <IconButton icon="circle-x" variant="ghost" onClick={() => setInternalFilter("")} /> </Show> - <TextField - autofocus={searchProps().autofocus} - variant="ghost" - data-slot="list-search-input" - type="text" - value={internalFilter()} - onChange={setInternalFilter} - onKeyDown={handleKey} - placeholder={searchProps().placeholder} - spellcheck={false} - autocorrect="off" - autocomplete="off" - autocapitalize="off" - /> </div> - <Show when={internalFilter()}> - <IconButton icon="circle-x" variant="ghost" onClick={() => setInternalFilter("")} /> - </Show> + {searchAction()} </div> </Show> <div ref={setScrollRef} data-slot="list-scroll"> From 7b8fad620257c7030d3f783b2d623cc5a59c4727 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:13:40 -0600 Subject: [PATCH 238/426] test(app): fix e2e --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7c8c20a6252..02d5baedf74 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -86,7 +86,7 @@ jobs: - name: Run opencode server working-directory: packages/opencode - run: bun dev -- --print-logs --log-level WARN serve --port 4096 --hostname 0.0.0.0 & + run: bun dev -- --print-logs --log-level WARN serve --port 4096 --hostname 127.0.0.1 & env: MODELS_DEV_API_JSON: ${{ env.MODELS_DEV_API_JSON }} OPENCODE_DISABLE_MODELS_FETCH: "true" @@ -103,8 +103,8 @@ jobs: - name: Wait for opencode server run: | - for i in {1..60}; do - curl -fsS "http://localhost:4096/global/health" > /dev/null && exit 0 + for i in {1..120}; do + curl -fsS "http://127.0.0.1:4096/global/health" > /dev/null && exit 0 sleep 1 done exit 1 @@ -125,9 +125,9 @@ jobs: XDG_CACHE_HOME: ${{ env.XDG_CACHE_HOME }} XDG_CONFIG_HOME: ${{ env.XDG_CONFIG_HOME }} XDG_STATE_HOME: ${{ env.XDG_STATE_HOME }} - PLAYWRIGHT_SERVER_HOST: "localhost" + PLAYWRIGHT_SERVER_HOST: "127.0.0.1" PLAYWRIGHT_SERVER_PORT: "4096" - VITE_OPENCODE_SERVER_HOST: "localhost" + VITE_OPENCODE_SERVER_HOST: "127.0.0.1" VITE_OPENCODE_SERVER_PORT: "4096" OPENCODE_CLIENT: "app" timeout-minutes: 30 From 64c80f1b512b5bf03a9132d39db71decfab10dc3 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:15:13 -0600 Subject: [PATCH 239/426] fix(app): don't show notification on session if active --- packages/app/src/context/notification.tsx | 25 ++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/app/src/context/notification.tsx b/packages/app/src/context/notification.tsx index 976f6e5c00b..58e7fbf83aa 100644 --- a/packages/app/src/context/notification.tsx +++ b/packages/app/src/context/notification.tsx @@ -1,5 +1,6 @@ import { createStore } from "solid-js/store" import { createEffect, onCleanup } from "solid-js" +import { useParams } from "@solidjs/router" import { createSimpleContext } from "@opencode-ai/ui/context" import { useGlobalSDK } from "./global-sdk" import { useGlobalSync } from "./global-sync" @@ -7,7 +8,7 @@ import { usePlatform } from "@/context/platform" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" import { Binary } from "@opencode-ai/util/binary" -import { base64Encode } from "@opencode-ai/util/encode" +import { base64Decode, base64Encode } from "@opencode-ai/util/encode" import { EventSessionError } from "@opencode-ai/sdk/v2" import { Persist, persisted } from "@/utils/persist" import { playSound, soundSrc } from "@/utils/sound" @@ -44,6 +45,7 @@ function pruneNotifications(list: Notification[]) { export const { use: useNotification, provider: NotificationProvider } = createSimpleContext({ name: "Notification", init: () => { + const params = useParams() const globalSDK = useGlobalSDK() const globalSync = useGlobalSync() const platform = usePlatform() @@ -73,10 +75,15 @@ export const { use: useNotification, provider: NotificationProvider } = createSi const unsub = globalSDK.event.listen((e) => { const directory = e.name const event = e.details - const base = { - directory, - time: Date.now(), - viewed: false, + const time = Date.now() + const activeDirectory = params.dir ? base64Decode(params.dir) : undefined + const activeSession = params.id + const viewed = (sessionID?: string) => { + if (!activeDirectory) return false + if (!activeSession) return false + if (!sessionID) return false + if (directory !== activeDirectory) return false + return sessionID === activeSession } switch (event.type) { case "session.idle": { @@ -89,7 +96,9 @@ export const { use: useNotification, provider: NotificationProvider } = createSi playSound(soundSrc(settings.sounds.agent())) append({ - ...base, + directory, + time, + viewed: viewed(sessionID), type: "turn-complete", session: sessionID, }) @@ -115,7 +124,9 @@ export const { use: useNotification, provider: NotificationProvider } = createSi const error = "error" in event.properties ? event.properties.error : undefined append({ - ...base, + directory, + time, + viewed: viewed(sessionID), type: "error", session: sessionID ?? "global", error, From e6438aa3f68cfc8d6a5b7b4f6e77042b0ab01049 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Tue, 20 Jan 2026 20:16:57 -0600 Subject: [PATCH 240/426] feat(app): korean translations --- packages/app/src/context/language.tsx | 17 +- packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/ko.ts | 547 ++++++++++++++++++++++++++ packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/ko.ts | 90 +++++ 5 files changed, 652 insertions(+), 4 deletions(-) create mode 100644 packages/app/src/i18n/ko.ts create mode 100644 packages/ui/src/i18n/ko.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index b04b4dfc46a..3fd35183c1c 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -5,15 +5,17 @@ import { createSimpleContext } from "@opencode-ai/ui/context" import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" import { dict as zh } from "@/i18n/zh" +import { dict as ko } from "@/i18n/ko" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" +import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" -export type Locale = "en" | "zh" +export type Locale = "en" | "zh" | "ko" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> -const LOCALES: readonly Locale[] = ["en", "zh"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -22,6 +24,7 @@ function detectLocale(): Locale { for (const language of languages) { if (!language) continue if (language.toLowerCase().startsWith("zh")) return "zh" + if (language.toLowerCase().startsWith("ko")) return "ko" } return "en" @@ -37,7 +40,11 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont }), ) - const locale = createMemo<Locale>(() => (store.locale === "zh" ? "zh" : "en")) + const locale = createMemo<Locale>(() => { + if (store.locale === "zh") return "zh" + if (store.locale === "ko") return "ko" + return "en" + }) createEffect(() => { const current = locale() @@ -48,7 +55,8 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const base = i18n.flatten({ ...en, ...uiEn }) const dict = createMemo<Dictionary>(() => { if (locale() === "en") return base - return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } + if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } + return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) const t = i18n.translator(dict, i18n.resolveTemplate) @@ -56,6 +64,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const labelKey: Record<Locale, keyof Dictionary> = { en: "language.en", zh: "language.zh", + ko: "language.ko", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 992685909b5..d240fa42310 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -268,6 +268,7 @@ export const dict = { "language.en": "English", "language.zh": "Chinese", + "language.ko": "Korean", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts new file mode 100644 index 00000000000..2c32d40bc18 --- /dev/null +++ b/packages/app/src/i18n/ko.ts @@ -0,0 +1,547 @@ +import { dict as en } from "./en" + +type Keys = keyof typeof en + +export const dict = { + "command.category.suggested": "추천", + "command.category.view": "보기", + "command.category.project": "프로젝트", + "command.category.provider": "공급자", + "command.category.server": "서버", + "command.category.session": "세션", + "command.category.theme": "테마", + "command.category.language": "언어", + "command.category.file": "파일", + "command.category.terminal": "터미널", + "command.category.model": "모델", + "command.category.mcp": "MCP", + "command.category.agent": "에이전트", + "command.category.permissions": "권한", + + "theme.scheme.system": "시스템", + "theme.scheme.light": "라이트", + "theme.scheme.dark": "다크", + + "command.sidebar.toggle": "사이드바 토글", + "command.project.open": "프로젝트 열기", + "command.provider.connect": "공급자 연결", + "command.server.switch": "서버 전환", + "command.session.previous": "이전 세션", + "command.session.next": "다음 세션", + "command.session.archive": "세션 보관", + + "command.palette": "명령 팔레트", + + "command.theme.cycle": "테마 순환", + "command.theme.set": "테마 사용: {{theme}}", + "command.theme.scheme.cycle": "색상 테마 순환", + "command.theme.scheme.set": "색상 테마 사용: {{scheme}}", + + "command.language.cycle": "언어 순환", + "command.language.set": "언어 사용: {{language}}", + + "command.session.new": "새 세션", + "command.file.open": "파일 열기", + "command.file.open.description": "파일 및 명령어 검색", + "command.terminal.toggle": "터미널 토글", + "command.review.toggle": "검토 토글", + "command.terminal.new": "새 터미널", + "command.terminal.new.description": "새 터미널 탭 생성", + "command.steps.toggle": "단계 토글", + "command.steps.toggle.description": "현재 메시지의 단계 표시/숨기기", + "command.message.previous": "이전 메시지", + "command.message.previous.description": "이전 사용자 메시지로 이동", + "command.message.next": "다음 메시지", + "command.message.next.description": "다음 사용자 메시지로 이동", + "command.model.choose": "모델 선택", + "command.model.choose.description": "다른 모델 선택", + "command.mcp.toggle": "MCP 토글", + "command.mcp.toggle.description": "MCP 토글", + "command.agent.cycle": "에이전트 순환", + "command.agent.cycle.description": "다음 에이전트로 전환", + "command.agent.cycle.reverse": "에이전트 역순환", + "command.agent.cycle.reverse.description": "이전 에이전트로 전환", + "command.model.variant.cycle": "생각 수준 순환", + "command.model.variant.cycle.description": "다음 생각 수준으로 전환", + "command.permissions.autoaccept.enable": "편집 자동 수락", + "command.permissions.autoaccept.disable": "편집 자동 수락 중지", + "command.session.undo": "실행 취소", + "command.session.undo.description": "마지막 메시지 실행 취소", + "command.session.redo": "다시 실행", + "command.session.redo.description": "마지막 실행 취소된 메시지 다시 실행", + "command.session.compact": "세션 압축", + "command.session.compact.description": "컨텍스트 크기를 줄이기 위해 세션 요약", + "command.session.fork": "메시지에서 분기", + "command.session.fork.description": "이전 메시지에서 새 세션 생성", + "command.session.share": "세션 공유", + "command.session.share.description": "이 세션을 공유하고 URL을 클립보드에 복사", + "command.session.unshare": "세션 공유 중지", + "command.session.unshare.description": "이 세션 공유 중지", + + "palette.search.placeholder": "파일 및 명령어 검색", + "palette.empty": "결과 없음", + "palette.group.commands": "명령어", + "palette.group.files": "파일", + + "dialog.provider.search.placeholder": "공급자 검색", + "dialog.provider.empty": "공급자 없음", + "dialog.provider.group.popular": "인기", + "dialog.provider.group.other": "기타", + "dialog.provider.tag.recommended": "추천", + "dialog.provider.anthropic.note": "Claude Pro/Max 또는 API 키로 연결", + + "dialog.model.select.title": "모델 선택", + "dialog.model.search.placeholder": "모델 검색", + "dialog.model.empty": "모델 결과 없음", + "dialog.model.manage": "모델 관리", + "dialog.model.manage.description": "모델 선택기에 표시할 모델 사용자 지정", + + "dialog.model.unpaid.freeModels.title": "OpenCode에서 제공하는 무료 모델", + "dialog.model.unpaid.addMore.title": "인기 공급자의 모델 추가", + + "dialog.provider.viewAll": "모든 공급자 보기", + + "provider.connect.title": "{{provider}} 연결", + "provider.connect.title.anthropicProMax": "Claude Pro/Max로 로그인", + "provider.connect.selectMethod": "{{provider}} 로그인 방법 선택", + "provider.connect.method.apiKey": "API 키", + "provider.connect.status.inProgress": "인증 진행 중...", + "provider.connect.status.waiting": "인증 대기 중...", + "provider.connect.status.failed": "인증 실패: {{error}}", + "provider.connect.apiKey.description": + "{{provider}} API 키를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "provider.connect.apiKey.label": "{{provider}} API 키", + "provider.connect.apiKey.placeholder": "API 키", + "provider.connect.apiKey.required": "API 키가 필요합니다", + "provider.connect.opencodeZen.line1": + "OpenCode Zen은 코딩 에이전트를 위해 최적화된 신뢰할 수 있는 엄선된 모델에 대한 액세스를 제공합니다.", + "provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.", + "provider.connect.opencodeZen.visit.prefix": "", + "provider.connect.opencodeZen.visit.suffix": "를 방문하여 API 키를 받으세요.", + "provider.connect.oauth.code.visit.prefix": "", + "provider.connect.oauth.code.visit.link": "이 링크", + "provider.connect.oauth.code.visit.suffix": + "를 방문하여 인증 코드를 받아 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "provider.connect.oauth.code.label": "{{method}} 인증 코드", + "provider.connect.oauth.code.placeholder": "인증 코드", + "provider.connect.oauth.code.required": "인증 코드가 필요합니다", + "provider.connect.oauth.code.invalid": "유효하지 않은 인증 코드", + "provider.connect.oauth.auto.visit.prefix": "", + "provider.connect.oauth.auto.visit.link": "이 링크", + "provider.connect.oauth.auto.visit.suffix": + "를 방문하고 아래 코드를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "provider.connect.oauth.auto.confirmationCode": "확인 코드", + "provider.connect.toast.connected.title": "{{provider}} 연결됨", + "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.", + + "model.tag.free": "무료", + "model.tag.latest": "최신", + + "common.search.placeholder": "검색", + "common.loading": "로딩 중", + "common.cancel": "취소", + "common.submit": "제출", + "common.save": "저장", + "common.saving": "저장 중...", + "common.default": "기본값", + "common.attachment": "첨부 파일", + + "prompt.placeholder.shell": "셸 명령어 입력...", + "prompt.placeholder.normal": '무엇이든 물어보세요... "{{example}}"', + "prompt.mode.shell": "셸", + "prompt.mode.shell.exit": "종료하려면 esc", + + "prompt.example.1": "코드베이스의 TODO 수정", + "prompt.example.2": "이 프로젝트의 기술 스택이 무엇인가요?", + "prompt.example.3": "고장 난 테스트 수정", + "prompt.example.4": "인증 작동 방식 설명", + "prompt.example.5": "보안 취약점 찾기 및 수정", + "prompt.example.6": "사용자 서비스에 단위 테스트 추가", + "prompt.example.7": "이 함수를 더 읽기 쉽게 리팩터링", + "prompt.example.8": "이 오류는 무엇을 의미하나요?", + "prompt.example.9": "이 문제 디버깅 도와줘", + "prompt.example.10": "API 문서 생성", + "prompt.example.11": "데이터베이스 쿼리 최적화", + "prompt.example.12": "입력 유효성 검사 추가", + "prompt.example.13": "...를 위한 새 컴포넌트 생성", + "prompt.example.14": "이 프로젝트를 어떻게 배포하나요?", + "prompt.example.15": "모범 사례를 기준으로 내 코드 검토", + "prompt.example.16": "이 함수에 오류 처리 추가", + "prompt.example.17": "이 정규식 패턴 설명", + "prompt.example.18": "이것을 TypeScript로 변환", + "prompt.example.19": "코드베이스 전체에 로깅 추가", + "prompt.example.20": "오래된 종속성은 무엇인가요?", + "prompt.example.21": "마이그레이션 스크립트 작성 도와줘", + "prompt.example.22": "이 엔드포인트에 캐싱 구현", + "prompt.example.23": "이 목록에 페이지네이션 추가", + "prompt.example.24": "...를 위한 CLI 명령어 생성", + "prompt.example.25": "여기서 환경 변수는 어떻게 작동하나요?", + + "prompt.popover.emptyResults": "일치하는 결과 없음", + "prompt.popover.emptyCommands": "일치하는 명령어 없음", + "prompt.dropzone.label": "이미지나 PDF를 여기에 드롭하세요", + "prompt.slash.badge.custom": "사용자 지정", + "prompt.context.active": "활성", + "prompt.context.includeActiveFile": "활성 파일 포함", + "prompt.action.attachFile": "파일 첨부", + "prompt.action.send": "전송", + "prompt.action.stop": "중지", + + "prompt.toast.pasteUnsupported.title": "지원되지 않는 붙여넣기", + "prompt.toast.pasteUnsupported.description": "이미지나 PDF만 붙여넣을 수 있습니다.", + "prompt.toast.modelAgentRequired.title": "에이전트 및 모델 선택", + "prompt.toast.modelAgentRequired.description": "프롬프트를 보내기 전에 에이전트와 모델을 선택하세요.", + "prompt.toast.worktreeCreateFailed.title": "작업 트리 생성 실패", + "prompt.toast.sessionCreateFailed.title": "세션 생성 실패", + "prompt.toast.shellSendFailed.title": "셸 명령 전송 실패", + "prompt.toast.commandSendFailed.title": "명령 전송 실패", + "prompt.toast.promptSendFailed.title": "프롬프트 전송 실패", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "{{total}}개 중 {{enabled}}개 활성화됨", + "dialog.mcp.empty": "구성된 MCP 없음", + + "mcp.status.connected": "연결됨", + "mcp.status.failed": "실패", + "mcp.status.needs_auth": "인증 필요", + "mcp.status.disabled": "비활성화됨", + + "dialog.fork.empty": "분기할 메시지 없음", + + "dialog.directory.search.placeholder": "폴더 검색", + "dialog.directory.empty": "폴더 없음", + + "dialog.server.title": "서버", + "dialog.server.description": "이 앱이 연결할 OpenCode 서버를 전환합니다.", + "dialog.server.search.placeholder": "서버 검색", + "dialog.server.empty": "서버 없음", + "dialog.server.add.title": "서버 추가", + "dialog.server.add.url": "서버 URL", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "서버에 연결할 수 없습니다", + "dialog.server.add.checking": "확인 중...", + "dialog.server.add.button": "추가", + "dialog.server.default.title": "기본 서버", + "dialog.server.default.description": + "로컬 서버를 시작하는 대신 앱 실행 시 이 서버에 연결합니다. 다시 시작해야 합니다.", + "dialog.server.default.none": "선택된 서버 없음", + "dialog.server.default.set": "현재 서버를 기본값으로 설정", + "dialog.server.default.clear": "지우기", + + "dialog.project.edit.title": "프로젝트 편집", + "dialog.project.edit.name": "이름", + "dialog.project.edit.icon": "아이콘", + "dialog.project.edit.icon.alt": "프로젝트 아이콘", + "dialog.project.edit.icon.hint": "이미지를 클릭하거나 드래그하세요", + "dialog.project.edit.icon.recommended": "권장: 128x128px", + "dialog.project.edit.color": "색상", + + "context.breakdown.title": "컨텍스트 분석", + "context.breakdown.note": '입력 토큰의 대략적인 분석입니다. "기타"에는 도구 정의 및 오버헤드가 포함됩니다.', + "context.breakdown.system": "시스템", + "context.breakdown.user": "사용자", + "context.breakdown.assistant": "어시스턴트", + "context.breakdown.tool": "도구 호출", + "context.breakdown.other": "기타", + + "context.systemPrompt.title": "시스템 프롬프트", + "context.rawMessages.title": "원시 메시지", + + "context.stats.session": "세션", + "context.stats.messages": "메시지", + "context.stats.provider": "공급자", + "context.stats.model": "모델", + "context.stats.limit": "컨텍스트 제한", + "context.stats.totalTokens": "총 토큰", + "context.stats.usage": "사용량", + "context.stats.inputTokens": "입력 토큰", + "context.stats.outputTokens": "출력 토큰", + "context.stats.reasoningTokens": "추론 토큰", + "context.stats.cacheTokens": "캐시 토큰 (읽기/쓰기)", + "context.stats.userMessages": "사용자 메시지", + "context.stats.assistantMessages": "어시스턴트 메시지", + "context.stats.totalCost": "총 비용", + "context.stats.sessionCreated": "세션 생성됨", + "context.stats.lastActivity": "최근 활동", + + "context.usage.tokens": "토큰", + "context.usage.usage": "사용량", + "context.usage.cost": "비용", + "context.usage.clickToView": "컨텍스트를 보려면 클릭", + + "language.en": "영어", + "language.zh": "중국어", + "language.ko": "한국어", + + "toast.language.title": "언어", + "toast.language.description": "{{language}}(으)로 전환됨", + + "toast.theme.title": "테마 전환됨", + "toast.scheme.title": "색상 테마", + + "toast.permissions.autoaccept.on.title": "편집 자동 수락 중", + "toast.permissions.autoaccept.on.description": "편집 및 쓰기 권한이 자동으로 승인됩니다", + "toast.permissions.autoaccept.off.title": "편집 자동 수락 중지됨", + "toast.permissions.autoaccept.off.description": "편집 및 쓰기 권한 승인이 필요합니다", + + "toast.model.none.title": "선택된 모델 없음", + "toast.model.none.description": "이 세션을 요약하려면 공급자를 연결하세요", + + "toast.file.loadFailed.title": "파일 로드 실패", + + "toast.session.share.copyFailed.title": "URL 클립보드 복사 실패", + "toast.session.share.success.title": "세션 공유됨", + "toast.session.share.success.description": "공유 URL이 클립보드에 복사되었습니다!", + "toast.session.share.failed.title": "세션 공유 실패", + "toast.session.share.failed.description": "세션을 공유하는 동안 오류가 발생했습니다", + + "toast.session.unshare.success.title": "세션 공유 해제됨", + "toast.session.unshare.success.description": "세션 공유가 성공적으로 해제되었습니다!", + "toast.session.unshare.failed.title": "세션 공유 해제 실패", + "toast.session.unshare.failed.description": "세션 공유를 해제하는 동안 오류가 발생했습니다", + + "toast.session.listFailed.title": "{{project}}에 대한 세션을 로드하지 못했습니다", + + "toast.update.title": "업데이트 가능", + "toast.update.description": "OpenCode의 새 버전({{version}})을 설치할 수 있습니다.", + "toast.update.action.installRestart": "설치 및 다시 시작", + "toast.update.action.notYet": "나중에", + + "error.page.title": "문제가 발생했습니다", + "error.page.description": "애플리케이션을 로드하는 동안 오류가 발생했습니다.", + "error.page.details.label": "오류 세부 정보", + "error.page.action.restart": "다시 시작", + "error.page.action.checking": "확인 중...", + "error.page.action.checkUpdates": "업데이트 확인", + "error.page.action.updateTo": "{{version}} 버전으로 업데이트", + "error.page.report.prefix": "이 오류를 OpenCode 팀에 제보해 주세요: ", + "error.page.report.discord": "Discord", + "error.page.version": "버전: {{version}}", + + "error.dev.rootNotFound": + "루트 요소를 찾을 수 없습니다. index.html에 추가하는 것을 잊으셨나요? 또는 id 속성의 철자가 틀렸을 수 있습니다.", + + "error.globalSync.connectFailed": "서버에 연결할 수 없습니다. `{{url}}`에서 서버가 실행 중인가요?", + + "error.chain.unknown": "알 수 없는 오류", + "error.chain.causedBy": "원인:", + "error.chain.apiError": "API 오류", + "error.chain.status": "상태: {{status}}", + "error.chain.retryable": "재시도 가능: {{retryable}}", + "error.chain.responseBody": "응답 본문:\n{{body}}", + "error.chain.didYouMean": "혹시 {{suggestions}}을(를) 의미하셨나요?", + "error.chain.modelNotFound": "모델을 찾을 수 없음: {{provider}}/{{model}}", + "error.chain.checkConfig": "구성(opencode.json)의 공급자/모델 이름을 확인하세요", + "error.chain.mcpFailed": 'MCP 서버 "{{name}}" 실패. 참고: OpenCode는 아직 MCP 인증을 지원하지 않습니다.', + "error.chain.providerAuthFailed": "공급자 인증 실패 ({{provider}}): {{message}}", + "error.chain.providerInitFailed": '공급자 "{{provider}}" 초기화 실패. 자격 증명과 구성을 확인하세요.', + "error.chain.configJsonInvalid": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다", + "error.chain.configJsonInvalidWithMessage": "{{path}}의 구성 파일이 유효한 JSON(C)가 아닙니다: {{message}}", + "error.chain.configDirectoryTypo": + '{{path}}의 "{{dir}}" 디렉터리가 유효하지 않습니다. 디렉터리 이름을 "{{suggestion}}"으로 변경하거나 제거하세요. 이는 흔한 오타입니다.', + "error.chain.configFrontmatterError": "{{path}}의 frontmatter 파싱 실패:\n{{message}}", + "error.chain.configInvalid": "{{path}}의 구성 파일이 유효하지 않습니다", + "error.chain.configInvalidWithMessage": "{{path}}의 구성 파일이 유효하지 않습니다: {{message}}", + + "notification.permission.title": "권한 필요", + "notification.permission.description": "{{projectName}}의 {{sessionTitle}}에서 권한이 필요합니다", + "notification.question.title": "질문", + "notification.question.description": "{{projectName}}의 {{sessionTitle}}에서 질문이 있습니다", + "notification.action.goToSession": "세션으로 이동", + + "notification.session.responseReady.title": "응답 준비됨", + "notification.session.error.title": "세션 오류", + "notification.session.error.fallbackDescription": "오류가 발생했습니다", + + "home.recentProjects": "최근 프로젝트", + "home.empty.title": "최근 프로젝트 없음", + "home.empty.description": "로컬 프로젝트를 열어 시작하세요", + + "session.tab.session": "세션", + "session.tab.review": "검토", + "session.tab.context": "컨텍스트", + "session.review.filesChanged": "{{count}}개 파일 변경됨", + "session.review.loadingChanges": "변경 사항 로드 중...", + "session.review.empty": "이 세션에 변경 사항이 아직 없습니다", + "session.messages.renderEarlier": "이전 메시지 렌더링", + "session.messages.loadingEarlier": "이전 메시지 로드 중...", + "session.messages.loadEarlier": "이전 메시지 로드", + "session.messages.loading": "메시지 로드 중...", + + "session.context.addToContext": "컨텍스트에 {{selection}} 추가", + + "session.new.worktree.main": "메인 브랜치", + "session.new.worktree.mainWithBranch": "메인 브랜치 ({{branch}})", + "session.new.worktree.create": "새 작업 트리 생성", + "session.new.lastModified": "최근 수정", + + "session.header.search.placeholder": "{{project}} 검색", + + "session.share.popover.title": "웹에 게시", + "session.share.popover.description.shared": "이 세션은 웹에 공개되었습니다. 링크가 있는 누구나 액세스할 수 있습니다.", + "session.share.popover.description.unshared": + "세션을 웹에 공개적으로 공유합니다. 링크가 있는 누구나 액세스할 수 있습니다.", + "session.share.action.share": "공유", + "session.share.action.publish": "게시", + "session.share.action.publishing": "게시 중...", + "session.share.action.unpublish": "게시 취소", + "session.share.action.unpublishing": "게시 취소 중...", + "session.share.action.view": "보기", + "session.share.copy.copied": "복사됨", + "session.share.copy.copyLink": "링크 복사", + + "lsp.tooltip.none": "LSP 서버 없음", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "프롬프트 로드 중...", + "terminal.loading": "터미널 로드 중...", + "terminal.title": "터미널", + "terminal.title.numbered": "터미널 {{number}}", + + "common.closeTab": "탭 닫기", + "common.dismiss": "닫기", + "common.requestFailed": "요청 실패", + "common.moreOptions": "더 많은 옵션", + "common.learnMore": "더 알아보기", + "common.rename": "이름 바꾸기", + "common.reset": "초기화", + "common.delete": "삭제", + "common.close": "닫기", + "common.edit": "편집", + "common.loadMore": "더 불러오기", + + "sidebar.settings": "설정", + "sidebar.help": "도움말", + "sidebar.workspaces.enable": "작업 공간 활성화", + "sidebar.workspaces.disable": "작업 공간 비활성화", + "sidebar.gettingStarted.title": "시작하기", + "sidebar.gettingStarted.line1": "OpenCode에는 무료 모델이 포함되어 있어 즉시 시작할 수 있습니다.", + "sidebar.gettingStarted.line2": "Claude, GPT, Gemini 등을 포함한 모델을 사용하려면 공급자를 연결하세요.", + "sidebar.project.recentSessions": "최근 세션", + "sidebar.project.viewAllSessions": "모든 세션 보기", + + "settings.section.desktop": "데스크톱", + "settings.tab.general": "일반", + "settings.tab.shortcuts": "단축키", + + "settings.general.section.appearance": "모양", + "settings.general.section.notifications": "시스템 알림", + "settings.general.section.sounds": "효과음", + + "settings.general.row.language.title": "언어", + "settings.general.row.language.description": "OpenCode 표시 언어 변경", + "settings.general.row.appearance.title": "모양", + "settings.general.row.appearance.description": "기기에서 OpenCode가 보이는 방식 사용자 지정", + "settings.general.row.theme.title": "테마", + "settings.general.row.theme.description": "OpenCode 테마 사용자 지정", + "settings.general.row.font.title": "글꼴", + "settings.general.row.font.description": "코드 블록에 사용되는 고정폭 글꼴 사용자 지정", + + "settings.general.notifications.agent.title": "에이전트", + "settings.general.notifications.agent.description": "에이전트가 완료되거나 주의가 필요할 때 시스템 알림 표시", + "settings.general.notifications.permissions.title": "권한", + "settings.general.notifications.permissions.description": "권한이 필요할 때 시스템 알림 표시", + "settings.general.notifications.errors.title": "오류", + "settings.general.notifications.errors.description": "오류가 발생했을 때 시스템 알림 표시", + + "settings.general.sounds.agent.title": "에이전트", + "settings.general.sounds.agent.description": "에이전트가 완료되거나 주의가 필요할 때 소리 재생", + "settings.general.sounds.permissions.title": "권한", + "settings.general.sounds.permissions.description": "권한이 필요할 때 소리 재생", + "settings.general.sounds.errors.title": "오류", + "settings.general.sounds.errors.description": "오류가 발생했을 때 소리 재생", + + "settings.shortcuts.title": "키보드 단축키", + "settings.shortcuts.reset.button": "기본값으로 초기화", + "settings.shortcuts.reset.toast.title": "단축키 초기화됨", + "settings.shortcuts.reset.toast.description": "키보드 단축키가 기본값으로 초기화되었습니다.", + "settings.shortcuts.conflict.title": "단축키가 이미 사용 중임", + "settings.shortcuts.conflict.description": "{{keybind}}은(는) 이미 {{titles}}에 할당되어 있습니다.", + "settings.shortcuts.unassigned": "할당되지 않음", + "settings.shortcuts.pressKeys": "키 누르기", + + "settings.shortcuts.group.general": "일반", + "settings.shortcuts.group.session": "세션", + "settings.shortcuts.group.navigation": "탐색", + "settings.shortcuts.group.modelAndAgent": "모델 및 에이전트", + "settings.shortcuts.group.terminal": "터미널", + "settings.shortcuts.group.prompt": "프롬프트", + + "settings.providers.title": "공급자", + "settings.providers.description": "공급자 설정은 여기서 구성할 수 있습니다.", + "settings.models.title": "모델", + "settings.models.description": "모델 설정은 여기서 구성할 수 있습니다.", + "settings.agents.title": "에이전트", + "settings.agents.description": "에이전트 설정은 여기서 구성할 수 있습니다.", + "settings.commands.title": "명령어", + "settings.commands.description": "명령어 설정은 여기서 구성할 수 있습니다.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP 설정은 여기서 구성할 수 있습니다.", + + "settings.permissions.title": "권한", + "settings.permissions.description": "서버가 기본적으로 사용할 수 있는 도구를 제어합니다.", + "settings.permissions.section.tools": "도구", + "settings.permissions.toast.updateFailed.title": "권한 업데이트 실패", + + "settings.permissions.action.allow": "허용", + "settings.permissions.action.ask": "묻기", + "settings.permissions.action.deny": "거부", + + "settings.permissions.tool.read.title": "읽기", + "settings.permissions.tool.read.description": "파일 읽기 (파일 경로와 일치)", + "settings.permissions.tool.edit.title": "편집", + "settings.permissions.tool.edit.description": "파일 수정 (편집, 쓰기, 패치 및 다중 편집 포함)", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "glob 패턴을 사용하여 파일 일치", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "정규식을 사용하여 파일 내용 검색", + "settings.permissions.tool.list.title": "목록", + "settings.permissions.tool.list.description": "디렉터리 내 파일 나열", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "셸 명령어 실행", + "settings.permissions.tool.task.title": "작업", + "settings.permissions.tool.task.description": "하위 에이전트 실행", + "settings.permissions.tool.skill.title": "기술", + "settings.permissions.tool.skill.description": "이름으로 기술 로드", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "언어 서버 쿼리 실행", + "settings.permissions.tool.todoread.title": "할 일 읽기", + "settings.permissions.tool.todoread.description": "할 일 목록 읽기", + "settings.permissions.tool.todowrite.title": "할 일 쓰기", + "settings.permissions.tool.todowrite.description": "할 일 목록 업데이트", + "settings.permissions.tool.webfetch.title": "웹 가져오기", + "settings.permissions.tool.webfetch.description": "URL에서 콘텐츠 가져오기", + "settings.permissions.tool.websearch.title": "웹 검색", + "settings.permissions.tool.websearch.description": "웹 검색", + "settings.permissions.tool.codesearch.title": "코드 검색", + "settings.permissions.tool.codesearch.description": "웹에서 코드 검색", + "settings.permissions.tool.external_directory.title": "외부 디렉터리", + "settings.permissions.tool.external_directory.description": "프로젝트 디렉터리 외부의 파일에 액세스", + "settings.permissions.tool.doom_loop.title": "무한 반복", + "settings.permissions.tool.doom_loop.description": "동일한 입력으로 반복되는 도구 호출 감지", + + "workspace.new": "새 작업 공간", + "workspace.type.local": "로컬", + "workspace.type.sandbox": "샌드박스", + "workspace.create.failed.title": "작업 공간 생성 실패", + "workspace.delete.failed.title": "작업 공간 삭제 실패", + "workspace.resetting.title": "작업 공간 재설정 중", + "workspace.resetting.description": "잠시 시간이 걸릴 수 있습니다.", + "workspace.reset.failed.title": "작업 공간 재설정 실패", + "workspace.reset.success.title": "작업 공간 재설정됨", + "workspace.reset.success.description": "작업 공간이 이제 기본 브랜치와 일치합니다.", + "workspace.status.checking": "병합되지 않은 변경 사항 확인 중...", + "workspace.status.error": "Git 상태를 확인할 수 없습니다.", + "workspace.status.clean": "병합되지 않은 변경 사항이 감지되지 않았습니다.", + "workspace.status.dirty": "이 작업 공간에서 병합되지 않은 변경 사항이 감지되었습니다.", + "workspace.delete.title": "작업 공간 삭제", + "workspace.delete.confirm": '"{{name}}" 작업 공간을 삭제하시겠습니까?', + "workspace.delete.button": "작업 공간 삭제", + "workspace.reset.title": "작업 공간 재설정", + "workspace.reset.confirm": '"{{name}}" 작업 공간을 재설정하시겠습니까?', + "workspace.reset.button": "작업 공간 재설정", + "workspace.reset.archived.none": "활성 세션이 보관되지 않습니다.", + "workspace.reset.archived.one": "1개의 세션이 보관됩니다.", + "workspace.reset.archived.many": "{{count}}개의 세션이 보관됩니다.", + "workspace.reset.note": "이 작업은 작업 공간을 기본 브랜치와 일치하도록 재설정합니다.", +} diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index ace06f3db2c..61433953e7b 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -267,6 +267,7 @@ export const dict = { "language.en": "英语", "language.zh": "中文", + "language.ko": "韩语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/ko.ts b/packages/ui/src/i18n/ko.ts new file mode 100644 index 00000000000..34f77028f16 --- /dev/null +++ b/packages/ui/src/i18n/ko.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "세션 변경 사항", + "ui.sessionReview.diffStyle.unified": "통합 보기", + "ui.sessionReview.diffStyle.split": "분할 보기", + "ui.sessionReview.expandAll": "모두 펼치기", + "ui.sessionReview.collapseAll": "모두 접기", + + "ui.sessionTurn.steps.show": "단계 표시", + "ui.sessionTurn.steps.hide": "단계 숨기기", + "ui.sessionTurn.summary.response": "응답", + "ui.sessionTurn.diff.showMore": "변경 사항 더 보기 ({{count}})", + + "ui.sessionTurn.retry.retrying": "재시도 중", + "ui.sessionTurn.retry.inSeconds": "{{seconds}}초 후", + + "ui.sessionTurn.status.delegating": "작업 위임 중", + "ui.sessionTurn.status.planning": "다음 단계 계획 중", + "ui.sessionTurn.status.gatheringContext": "컨텍스트 수집 중", + "ui.sessionTurn.status.searchingCodebase": "코드베이스 검색 중", + "ui.sessionTurn.status.searchingWeb": "웹 검색 중", + "ui.sessionTurn.status.makingEdits": "편집 수행 중", + "ui.sessionTurn.status.runningCommands": "명령어 실행 중", + "ui.sessionTurn.status.thinking": "생각 중", + "ui.sessionTurn.status.thinkingWithTopic": "생각 중 - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "생각 정리 중", + "ui.sessionTurn.status.consideringNextSteps": "다음 단계 고려 중", + + "ui.messagePart.diagnostic.error": "오류", + "ui.messagePart.title.edit": "편집", + "ui.messagePart.title.write": "작성", + "ui.messagePart.option.typeOwnAnswer": "직접 답변 입력", + "ui.messagePart.review.title": "답변 검토", + + "ui.list.loading": "로딩 중", + "ui.list.empty": "결과 없음", + "ui.list.emptyWithFilter.prefix": "다음에 대한 결과 없음: ", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "새 메시지", + + "ui.textField.copyToClipboard": "클립보드에 복사", + "ui.textField.copied": "복사됨", + + "ui.imagePreview.alt": "이미지 미리보기", + + "ui.tool.read": "읽기", + "ui.tool.list": "목록", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "웹 가져오기", + "ui.tool.shell": "셸", + "ui.tool.patch": "패치", + "ui.tool.todos": "할 일", + "ui.tool.todos.read": "할 일 읽기", + "ui.tool.questions": "질문", + "ui.tool.agent": "{{type}} 에이전트", + + "ui.common.file.one": "파일", + "ui.common.file.other": "파일", + "ui.common.question.one": "질문", + "ui.common.question.other": "질문", + + "ui.common.add": "추가", + "ui.common.cancel": "취소", + "ui.common.confirm": "확인", + "ui.common.dismiss": "닫기", + "ui.common.next": "다음", + "ui.common.submit": "제출", + + "ui.permission.deny": "거부", + "ui.permission.allowAlways": "항상 허용", + "ui.permission.allowOnce": "한 번만 허용", + + "ui.message.expand": "메시지 펼치기", + "ui.message.collapse": "메시지 접기", + "ui.message.copy": "복사", + "ui.message.copied": "복사됨!", + "ui.message.attachment.alt": "첨부 파일", + + "ui.patch.action.deleted": "삭제됨", + "ui.patch.action.created": "생성됨", + "ui.patch.action.moved": "이동됨", + "ui.patch.action.patched": "패치됨", + + "ui.question.subtitle.answered": "{{count}}개 답변됨", + "ui.question.answer.none": "(답변 없음)", + "ui.question.review.notAnswered": "(답변되지 않음)", + "ui.question.multiHint": "(해당하는 항목 모두 선택)", + "ui.question.custom.placeholder": "답변 입력...", +} From 118b4f65da3c98b2dc16c498fc51e6e71421f5e8 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 04:16:55 -0600 Subject: [PATCH 241/426] feat(app): german translations --- packages/app/src/context/language.tsx | 10 +- packages/app/src/i18n/de.ts | 559 ++++++++++++++++++++++++++ packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/de.ts | 94 +++++ 6 files changed, 664 insertions(+), 2 deletions(-) create mode 100644 packages/app/src/i18n/de.ts create mode 100644 packages/ui/src/i18n/de.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 3fd35183c1c..d2e8c077a49 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -6,16 +6,18 @@ import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" import { dict as zh } from "@/i18n/zh" import { dict as ko } from "@/i18n/ko" +import { dict as de } from "@/i18n/de" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" +import { dict as uiDe } from "@opencode-ai/ui/i18n/de" -export type Locale = "en" | "zh" | "ko" +export type Locale = "en" | "zh" | "ko" | "de" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> -const LOCALES: readonly Locale[] = ["en", "zh", "ko"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -25,6 +27,7 @@ function detectLocale(): Locale { if (!language) continue if (language.toLowerCase().startsWith("zh")) return "zh" if (language.toLowerCase().startsWith("ko")) return "ko" + if (language.toLowerCase().startsWith("de")) return "de" } return "en" @@ -43,6 +46,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const locale = createMemo<Locale>(() => { if (store.locale === "zh") return "zh" if (store.locale === "ko") return "ko" + if (store.locale === "de") return "de" return "en" }) @@ -56,6 +60,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const dict = createMemo<Dictionary>(() => { if (locale() === "en") return base if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } + if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -65,6 +70,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont en: "language.en", zh: "language.zh", ko: "language.ko", + de: "language.de", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts new file mode 100644 index 00000000000..dce6a3673e0 --- /dev/null +++ b/packages/app/src/i18n/de.ts @@ -0,0 +1,559 @@ +import { dict as en } from "./en" + +type Keys = keyof typeof en + +export const dict = { + "command.category.suggested": "Vorgeschlagen", + "command.category.view": "Ansicht", + "command.category.project": "Projekt", + "command.category.provider": "Anbieter", + "command.category.server": "Server", + "command.category.session": "Sitzung", + "command.category.theme": "Thema", + "command.category.language": "Sprache", + "command.category.file": "Datei", + "command.category.terminal": "Terminal", + "command.category.model": "Modell", + "command.category.mcp": "MCP", + "command.category.agent": "Agent", + "command.category.permissions": "Berechtigungen", + + "theme.scheme.system": "System", + "theme.scheme.light": "Hell", + "theme.scheme.dark": "Dunkel", + + "command.sidebar.toggle": "Seitenleiste umschalten", + "command.project.open": "Projekt öffnen", + "command.provider.connect": "Anbieter verbinden", + "command.server.switch": "Server wechseln", + "command.session.previous": "Vorherige Sitzung", + "command.session.next": "Nächste Sitzung", + "command.session.archive": "Sitzung archivieren", + + "command.palette": "Befehlspalette", + + "command.theme.cycle": "Thema wechseln", + "command.theme.set": "Thema verwenden: {{theme}}", + "command.theme.scheme.cycle": "Farbschema wechseln", + "command.theme.scheme.set": "Farbschema verwenden: {{scheme}}", + + "command.language.cycle": "Sprache wechseln", + "command.language.set": "Sprache verwenden: {{language}}", + + "command.session.new": "Neue Sitzung", + "command.file.open": "Datei öffnen", + "command.file.open.description": "Dateien und Befehle durchsuchen", + "command.terminal.toggle": "Terminal umschalten", + "command.review.toggle": "Überprüfung umschalten", + "command.terminal.new": "Neues Terminal", + "command.terminal.new.description": "Neuen Terminal-Tab erstellen", + "command.steps.toggle": "Schritte umschalten", + "command.steps.toggle.description": "Schritte für die aktuelle Nachricht anzeigen oder ausblenden", + "command.message.previous": "Vorherige Nachricht", + "command.message.previous.description": "Zur vorherigen Benutzernachricht gehen", + "command.message.next": "Nächste Nachricht", + "command.message.next.description": "Zur nächsten Benutzernachricht gehen", + "command.model.choose": "Modell wählen", + "command.model.choose.description": "Ein anderes Modell auswählen", + "command.mcp.toggle": "MCPs umschalten", + "command.mcp.toggle.description": "MCPs umschalten", + "command.agent.cycle": "Agent wechseln", + "command.agent.cycle.description": "Zum nächsten Agenten wechseln", + "command.agent.cycle.reverse": "Agent rückwärts wechseln", + "command.agent.cycle.reverse.description": "Zum vorherigen Agenten wechseln", + "command.model.variant.cycle": "Denkaufwand wechseln", + "command.model.variant.cycle.description": "Zum nächsten Aufwandslevel wechseln", + "command.permissions.autoaccept.enable": "Änderungen automatisch akzeptieren", + "command.permissions.autoaccept.disable": "Automatische Annahme von Änderungen stoppen", + "command.session.undo": "Rückgängig", + "command.session.undo.description": "Letzte Nachricht rückgängig machen", + "command.session.redo": "Wiederherstellen", + "command.session.redo.description": "Letzte rückgängig gemachte Nachricht wiederherstellen", + "command.session.compact": "Sitzung komprimieren", + "command.session.compact.description": "Sitzung zusammenfassen, um die Kontextgröße zu reduzieren", + "command.session.fork": "Von Nachricht abzweigen", + "command.session.fork.description": "Neue Sitzung aus einer früheren Nachricht erstellen", + "command.session.share": "Sitzung teilen", + "command.session.share.description": "Diese Sitzung teilen und URL in die Zwischenablage kopieren", + "command.session.unshare": "Teilen der Sitzung aufheben", + "command.session.unshare.description": "Teilen dieser Sitzung beenden", + + "palette.search.placeholder": "Dateien und Befehle durchsuchen", + "palette.empty": "Keine Ergebnisse gefunden", + "palette.group.commands": "Befehle", + "palette.group.files": "Dateien", + + "dialog.provider.search.placeholder": "Anbieter durchsuchen", + "dialog.provider.empty": "Keine Anbieter gefunden", + "dialog.provider.group.popular": "Beliebt", + "dialog.provider.group.other": "Andere", + "dialog.provider.tag.recommended": "Empfohlen", + "dialog.provider.anthropic.note": "Mit Claude Pro/Max oder API-Schlüssel verbinden", + + "dialog.model.select.title": "Modell auswählen", + "dialog.model.search.placeholder": "Modelle durchsuchen", + "dialog.model.empty": "Keine Modellergebnisse", + "dialog.model.manage": "Modelle verwalten", + "dialog.model.manage.description": "Anpassen, welche Modelle in der Modellauswahl erscheinen.", + + "dialog.model.unpaid.freeModels.title": "Kostenlose Modelle von OpenCode", + "dialog.model.unpaid.addMore.title": "Weitere Modelle von beliebten Anbietern hinzufügen", + + "dialog.provider.viewAll": "Alle Anbieter anzeigen", + + "provider.connect.title": "{{provider}} verbinden", + "provider.connect.title.anthropicProMax": "Mit Claude Pro/Max anmelden", + "provider.connect.selectMethod": "Anmeldemethode für {{provider}} auswählen.", + "provider.connect.method.apiKey": "API-Schlüssel", + "provider.connect.status.inProgress": "Autorisierung läuft...", + "provider.connect.status.waiting": "Warten auf Autorisierung...", + "provider.connect.status.failed": "Autorisierung fehlgeschlagen: {{error}}", + "provider.connect.apiKey.description": + "Geben Sie Ihren {{provider}} API-Schlüssel ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.apiKey.label": "{{provider}} API-Schlüssel", + "provider.connect.apiKey.placeholder": "API-Schlüssel", + "provider.connect.apiKey.required": "API-Schlüssel ist erforderlich", + "provider.connect.opencodeZen.line1": + "OpenCode Zen bietet Ihnen Zugriff auf eine kuratierte Auswahl zuverlässiger, optimierter Modelle für Coding-Agenten.", + "provider.connect.opencodeZen.line2": + "Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.", + "provider.connect.opencodeZen.visit.prefix": "Besuchen Sie ", + "provider.connect.opencodeZen.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.", + "provider.connect.oauth.code.visit.prefix": "Besuchen Sie ", + "provider.connect.oauth.code.visit.link": "diesen Link", + "provider.connect.oauth.code.visit.suffix": + ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.code.label": "{{method}} Autorisierungscode", + "provider.connect.oauth.code.placeholder": "Autorisierungscode", + "provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich", + "provider.connect.oauth.code.invalid": "Ungültiger Autorisierungscode", + "provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ", + "provider.connect.oauth.auto.visit.link": "diesen Link", + "provider.connect.oauth.auto.visit.suffix": + " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.auto.confirmationCode": "Bestätigungscode", + "provider.connect.toast.connected.title": "{{provider}} verbunden", + "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.", + + "model.tag.free": "Kostenlos", + "model.tag.latest": "Neueste", + + "common.search.placeholder": "Suchen", + "common.loading": "Laden", + "common.cancel": "Abbrechen", + "common.submit": "Absenden", + "common.save": "Speichern", + "common.saving": "Speichert...", + "common.default": "Standard", + "common.attachment": "Anhang", + + "prompt.placeholder.shell": "Shell-Befehl eingeben...", + "prompt.placeholder.normal": 'Fragen Sie alles... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "esc zum Verlassen", + + "prompt.example.1": "Ein TODO in der Codebasis beheben", + "prompt.example.2": "Was ist der Tech-Stack dieses Projekts?", + "prompt.example.3": "Fehlerhafte Tests beheben", + "prompt.example.4": "Erkläre, wie die Authentifizierung funktioniert", + "prompt.example.5": "Sicherheitslücken finden und beheben", + "prompt.example.6": "Unit-Tests für den Benutzerdienst hinzufügen", + "prompt.example.7": "Diese Funktion lesbarer gestalten", + "prompt.example.8": "Was bedeutet dieser Fehler?", + "prompt.example.9": "Hilf mir, dieses Problem zu debuggen", + "prompt.example.10": "API-Dokumentation generieren", + "prompt.example.11": "Datenbankabfragen optimieren", + "prompt.example.12": "Eingabevalidierung hinzufügen", + "prompt.example.13": "Neue Komponente erstellen für...", + "prompt.example.14": "Wie deploye ich dieses Projekt?", + "prompt.example.15": "Meinen Code auf Best Practices überprüfen", + "prompt.example.16": "Fehlerbehandlung zu dieser Funktion hinzufügen", + "prompt.example.17": "Erkläre dieses Regex-Muster", + "prompt.example.18": "Dies in TypeScript konvertieren", + "prompt.example.19": "Logging in der gesamten Codebasis hinzufügen", + "prompt.example.20": "Welche Abhängigkeiten sind veraltet?", + "prompt.example.21": "Hilf mir, ein Migrationsskript zu schreiben", + "prompt.example.22": "Caching für diesen Endpunkt implementieren", + "prompt.example.23": "Paginierung zu dieser Liste hinzufügen", + "prompt.example.24": "CLI-Befehl erstellen für...", + "prompt.example.25": "Wie funktionieren Umgebungsvariablen hier?", + + "prompt.popover.emptyResults": "Keine passenden Ergebnisse", + "prompt.popover.emptyCommands": "Keine passenden Befehle", + "prompt.dropzone.label": "Bilder oder PDFs hier ablegen", + "prompt.slash.badge.custom": "benutzerdefiniert", + "prompt.context.active": "aktiv", + "prompt.context.includeActiveFile": "Aktive Datei einbeziehen", + "prompt.action.attachFile": "Datei anhängen", + "prompt.action.send": "Senden", + "prompt.action.stop": "Stopp", + + "prompt.toast.pasteUnsupported.title": "Nicht unterstütztes Einfügen", + "prompt.toast.pasteUnsupported.description": "Hier können nur Bilder oder PDFs eingefügt werden.", + "prompt.toast.modelAgentRequired.title": "Wählen Sie einen Agenten und ein Modell", + "prompt.toast.modelAgentRequired.description": + "Wählen Sie einen Agenten und ein Modell, bevor Sie eine Eingabe senden.", + "prompt.toast.worktreeCreateFailed.title": "Worktree konnte nicht erstellt werden", + "prompt.toast.sessionCreateFailed.title": "Sitzung konnte nicht erstellt werden", + "prompt.toast.shellSendFailed.title": "Shell-Befehl konnte nicht gesendet werden", + "prompt.toast.commandSendFailed.title": "Befehl konnte nicht gesendet werden", + "prompt.toast.promptSendFailed.title": "Eingabe konnte nicht gesendet werden", + + "dialog.mcp.title": "MCPs", + "dialog.mcp.description": "{{enabled}} von {{total}} aktiviert", + "dialog.mcp.empty": "Keine MCPs konfiguriert", + + "mcp.status.connected": "verbunden", + "mcp.status.failed": "fehlgeschlagen", + "mcp.status.needs_auth": "benötigt Authentifizierung", + "mcp.status.disabled": "deaktiviert", + + "dialog.fork.empty": "Keine Nachrichten zum Abzweigen vorhanden", + + "dialog.directory.search.placeholder": "Ordner durchsuchen", + "dialog.directory.empty": "Keine Ordner gefunden", + + "dialog.server.title": "Server", + "dialog.server.description": "Wechseln Sie den OpenCode-Server, mit dem sich diese App verbindet.", + "dialog.server.search.placeholder": "Server durchsuchen", + "dialog.server.empty": "Noch keine Server", + "dialog.server.add.title": "Server hinzufügen", + "dialog.server.add.url": "Server-URL", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Verbindung zum Server fehlgeschlagen", + "dialog.server.add.checking": "Prüfen...", + "dialog.server.add.button": "Hinzufügen", + "dialog.server.default.title": "Standardserver", + "dialog.server.default.description": + "Beim App-Start mit diesem Server verbinden, anstatt einen lokalen Server zu starten. Erfordert Neustart.", + "dialog.server.default.none": "Kein Server ausgewählt", + "dialog.server.default.set": "Aktuellen Server als Standard setzen", + "dialog.server.default.clear": "Löschen", + + "dialog.project.edit.title": "Projekt bearbeiten", + "dialog.project.edit.name": "Name", + "dialog.project.edit.icon": "Icon", + "dialog.project.edit.icon.alt": "Projekt-Icon", + "dialog.project.edit.icon.hint": "Klicken oder Bild ziehen", + "dialog.project.edit.icon.recommended": "Empfohlen: 128x128px", + "dialog.project.edit.color": "Farbe", + + "context.breakdown.title": "Kontext-Aufschlüsselung", + "context.breakdown.note": + 'Ungefähre Aufschlüsselung der Eingabe-Token. "Andere" beinhaltet Werkzeugdefinitionen und Overhead.', + "context.breakdown.system": "System", + "context.breakdown.user": "Benutzer", + "context.breakdown.assistant": "Assistent", + "context.breakdown.tool": "Werkzeugaufrufe", + "context.breakdown.other": "Andere", + + "context.systemPrompt.title": "System-Prompt", + "context.rawMessages.title": "Rohdaten der Nachrichten", + + "context.stats.session": "Sitzung", + "context.stats.messages": "Nachrichten", + "context.stats.provider": "Anbieter", + "context.stats.model": "Modell", + "context.stats.limit": "Kontextlimit", + "context.stats.totalTokens": "Gesamt-Token", + "context.stats.usage": "Nutzung", + "context.stats.inputTokens": "Eingabe-Token", + "context.stats.outputTokens": "Ausgabe-Token", + "context.stats.reasoningTokens": "Reasoning-Token", + "context.stats.cacheTokens": "Cache-Token (lesen/schreiben)", + "context.stats.userMessages": "Benutzernachrichten", + "context.stats.assistantMessages": "Assistentennachrichten", + "context.stats.totalCost": "Gesamtkosten", + "context.stats.sessionCreated": "Sitzung erstellt", + "context.stats.lastActivity": "Letzte Aktivität", + + "context.usage.tokens": "Token", + "context.usage.usage": "Nutzung", + "context.usage.cost": "Kosten", + "context.usage.clickToView": "Klicken, um Kontext anzuzeigen", + + "language.en": "Englisch", + "language.zh": "Chinesisch", + "language.ko": "Koreanisch", + "language.de": "Deutsch", + + "toast.language.title": "Sprache", + "toast.language.description": "Zu {{language}} gewechselt", + + "toast.theme.title": "Thema gewechselt", + "toast.scheme.title": "Farbschema", + + "toast.permissions.autoaccept.on.title": "Änderungen werden automatisch akzeptiert", + "toast.permissions.autoaccept.on.description": "Bearbeitungs- und Schreibrechte werden automatisch genehmigt", + "toast.permissions.autoaccept.off.title": "Automatische Annahme von Änderungen gestoppt", + "toast.permissions.autoaccept.off.description": "Bearbeitungs- und Schreibrechte erfordern Genehmigung", + + "toast.model.none.title": "Kein Modell ausgewählt", + "toast.model.none.description": "Verbinden Sie einen Anbieter, um diese Sitzung zusammenzufassen", + + "toast.file.loadFailed.title": "Datei konnte nicht geladen werden", + + "toast.session.share.copyFailed.title": "URL konnte nicht in die Zwischenablage kopiert werden", + "toast.session.share.success.title": "Sitzung geteilt", + "toast.session.share.success.description": "Teilen-URL in die Zwischenablage kopiert!", + "toast.session.share.failed.title": "Sitzung konnte nicht geteilt werden", + "toast.session.share.failed.description": "Beim Teilen der Sitzung ist ein Fehler aufgetreten", + + "toast.session.unshare.success.title": "Teilen der Sitzung aufgehoben", + "toast.session.unshare.success.description": "Teilen der Sitzung erfolgreich aufgehoben!", + "toast.session.unshare.failed.title": "Aufheben des Teilens fehlgeschlagen", + "toast.session.unshare.failed.description": "Beim Aufheben des Teilens ist ein Fehler aufgetreten", + + "toast.session.listFailed.title": "Sitzungen für {{project}} konnten nicht geladen werden", + + "toast.update.title": "Update verfügbar", + "toast.update.description": "Eine neue Version von OpenCode ({{version}}) ist zur Installation verfügbar.", + "toast.update.action.installRestart": "Installieren und neu starten", + "toast.update.action.notYet": "Noch nicht", + + "error.page.title": "Etwas ist schiefgelaufen", + "error.page.description": "Beim Laden der Anwendung ist ein Fehler aufgetreten.", + "error.page.details.label": "Fehlerdetails", + "error.page.action.restart": "Neustart", + "error.page.action.checking": "Prüfen...", + "error.page.action.checkUpdates": "Nach Updates suchen", + "error.page.action.updateTo": "Auf {{version}} aktualisieren", + "error.page.report.prefix": "Bitte melden Sie diesen Fehler dem OpenCode-Team", + "error.page.report.discord": "auf Discord", + "error.page.version": "Version: {{version}}", + + "error.dev.rootNotFound": + "Wurzelelement nicht gefunden. Haben Sie vergessen, es in Ihre index.html aufzunehmen? Oder wurde das id-Attribut falsch geschrieben?", + + "error.globalSync.connectFailed": "Verbindung zum Server fehlgeschlagen. Läuft ein Server unter `{{url}}`?", + + "error.chain.unknown": "Unbekannter Fehler", + "error.chain.causedBy": "Verursacht durch:", + "error.chain.apiError": "API-Fehler", + "error.chain.status": "Status: {{status}}", + "error.chain.retryable": "Wiederholbar: {{retryable}}", + "error.chain.responseBody": "Antwort-Body:\n{{body}}", + "error.chain.didYouMean": "Meinten Sie: {{suggestions}}", + "error.chain.modelNotFound": "Modell nicht gefunden: {{provider}}/{{model}}", + "error.chain.checkConfig": "Überprüfen Sie Ihre Konfiguration (opencode.json) auf Anbieter-/Modellnamen", + "error.chain.mcpFailed": + 'MCP-Server "{{name}}" fehlgeschlagen. Hinweis: OpenCode unterstützt noch keine MCP-Authentifizierung.', + "error.chain.providerAuthFailed": "Anbieter-Authentifizierung fehlgeschlagen ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Anbieter "{{provider}}" konnte nicht initialisiert werden. Überprüfen Sie Anmeldeinformationen und Konfiguration.', + "error.chain.configJsonInvalid": "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C)", + "error.chain.configJsonInvalidWithMessage": + "Konfigurationsdatei unter {{path}} ist kein gültiges JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Verzeichnis "{{dir}}" in {{path}} ist ungültig. Benennen Sie das Verzeichnis in "{{suggestion}}" um oder entfernen Sie es. Dies ist ein häufiger Tippfehler.', + "error.chain.configFrontmatterError": "Frontmatter in {{path}} konnte nicht geparst werden:\n{{message}}", + "error.chain.configInvalid": "Konfigurationsdatei unter {{path}} ist ungültig", + "error.chain.configInvalidWithMessage": "Konfigurationsdatei unter {{path}} ist ungültig: {{message}}", + + "notification.permission.title": "Berechtigung erforderlich", + "notification.permission.description": "{{sessionTitle}} in {{projectName}} benötigt Berechtigung", + "notification.question.title": "Frage", + "notification.question.description": "{{sessionTitle}} in {{projectName}} hat eine Frage", + "notification.action.goToSession": "Zur Sitzung gehen", + + "notification.session.responseReady.title": "Antwort bereit", + "notification.session.error.title": "Sitzungsfehler", + "notification.session.error.fallbackDescription": "Ein Fehler ist aufgetreten", + + "home.recentProjects": "Letzte Projekte", + "home.empty.title": "Keine letzten Projekte", + "home.empty.description": "Starten Sie, indem Sie ein lokales Projekt öffnen", + + "session.tab.session": "Sitzung", + "session.tab.review": "Überprüfung", + "session.tab.context": "Kontext", + "session.review.filesChanged": "{{count}} Dateien geändert", + "session.review.loadingChanges": "Lade Änderungen...", + "session.review.empty": "Noch keine Änderungen in dieser Sitzung", + "session.messages.renderEarlier": "Frühere Nachrichten rendern", + "session.messages.loadingEarlier": "Lade frühere Nachrichten...", + "session.messages.loadEarlier": "Frühere Nachrichten laden", + "session.messages.loading": "Lade Nachrichten...", + + "session.context.addToContext": "{{selection}} zum Kontext hinzufügen", + + "session.new.worktree.main": "Haupt-Branch", + "session.new.worktree.mainWithBranch": "Haupt-Branch ({{branch}})", + "session.new.worktree.create": "Neuen Worktree erstellen", + "session.new.lastModified": "Zuletzt geändert", + + "session.header.search.placeholder": "{{project}} durchsuchen", + + "session.share.popover.title": "Im Web veröffentlichen", + "session.share.popover.description.shared": + "Diese Sitzung ist öffentlich im Web. Sie ist für jeden mit dem Link zugänglich.", + "session.share.popover.description.unshared": + "Sitzung öffentlich im Web teilen. Sie wird für jeden mit dem Link zugänglich sein.", + "session.share.action.share": "Teilen", + "session.share.action.publish": "Veröffentlichen", + "session.share.action.publishing": "Veröffentliche...", + "session.share.action.unpublish": "Veröffentlichung aufheben", + "session.share.action.unpublishing": "Hebe Veröffentlichung auf...", + "session.share.action.view": "Ansehen", + "session.share.copy.copied": "Kopiert", + "session.share.copy.copyLink": "Link kopieren", + + "lsp.tooltip.none": "Keine LSP-Server", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Lade Prompt...", + "terminal.loading": "Lade Terminal...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + + "common.closeTab": "Tab schließen", + "common.dismiss": "Verwerfen", + "common.requestFailed": "Anfrage fehlgeschlagen", + "common.moreOptions": "Weitere Optionen", + "common.learnMore": "Mehr erfahren", + "common.rename": "Umbenennen", + "common.reset": "Zurücksetzen", + "common.delete": "Löschen", + "common.close": "Schließen", + "common.edit": "Bearbeiten", + "common.loadMore": "Mehr laden", + + "sidebar.settings": "Einstellungen", + "sidebar.help": "Hilfe", + "sidebar.workspaces.enable": "Arbeitsbereiche aktivieren", + "sidebar.workspaces.disable": "Arbeitsbereiche deaktivieren", + "sidebar.gettingStarted.title": "Erste Schritte", + "sidebar.gettingStarted.line1": "OpenCode enthält kostenlose Modelle, damit Sie sofort loslegen können.", + "sidebar.gettingStarted.line2": + "Verbinden Sie einen beliebigen Anbieter, um Modelle wie Claude, GPT, Gemini usw. zu nutzen.", + "sidebar.project.recentSessions": "Letzte Sitzungen", + "sidebar.project.viewAllSessions": "Alle Sitzungen anzeigen", + + "settings.section.desktop": "Desktop", + "settings.tab.general": "Allgemein", + "settings.tab.shortcuts": "Tastenkombinationen", + + "settings.general.section.appearance": "Erscheinungsbild", + "settings.general.section.notifications": "Systembenachrichtigungen", + "settings.general.section.sounds": "Soundeffekte", + + "settings.general.row.language.title": "Sprache", + "settings.general.row.language.description": "Die Anzeigesprache für OpenCode ändern", + "settings.general.row.appearance.title": "Erscheinungsbild", + "settings.general.row.appearance.description": "Anpassen, wie OpenCode auf Ihrem Gerät aussieht", + "settings.general.row.theme.title": "Thema", + "settings.general.row.theme.description": "Das Thema von OpenCode anpassen.", + "settings.general.row.font.title": "Schriftart", + "settings.general.row.font.description": "Die in Codeblöcken verwendete Monospace-Schriftart anpassen", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": + "Systembenachrichtigung anzeigen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt", + "settings.general.notifications.permissions.title": "Berechtigungen", + "settings.general.notifications.permissions.description": + "Systembenachrichtigung anzeigen, wenn eine Berechtigung erforderlich ist", + "settings.general.notifications.errors.title": "Fehler", + "settings.general.notifications.errors.description": "Systembenachrichtigung anzeigen, wenn ein Fehler auftritt", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Ton abspielen, wenn der Agent fertig ist oder Aufmerksamkeit benötigt", + "settings.general.sounds.permissions.title": "Berechtigungen", + "settings.general.sounds.permissions.description": "Ton abspielen, wenn eine Berechtigung erforderlich ist", + "settings.general.sounds.errors.title": "Fehler", + "settings.general.sounds.errors.description": "Ton abspielen, wenn ein Fehler auftritt", + + "settings.shortcuts.title": "Tastenkombinationen", + "settings.shortcuts.reset.button": "Auf Standard zurücksetzen", + "settings.shortcuts.reset.toast.title": "Tastenkombinationen zurückgesetzt", + "settings.shortcuts.reset.toast.description": "Die Tastenkombinationen wurden auf die Standardwerte zurückgesetzt.", + "settings.shortcuts.conflict.title": "Tastenkombination bereits in Verwendung", + "settings.shortcuts.conflict.description": "{{keybind}} ist bereits {{titles}} zugewiesen.", + "settings.shortcuts.unassigned": "Nicht zugewiesen", + "settings.shortcuts.pressKeys": "Tasten drücken", + + "settings.shortcuts.group.general": "Allgemein", + "settings.shortcuts.group.session": "Sitzung", + "settings.shortcuts.group.navigation": "Navigation", + "settings.shortcuts.group.modelAndAgent": "Modell und Agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Anbieter", + "settings.providers.description": "Anbietereinstellungen können hier konfiguriert werden.", + "settings.models.title": "Modelle", + "settings.models.description": "Modelleinstellungen können hier konfiguriert werden.", + "settings.agents.title": "Agenten", + "settings.agents.description": "Agenteneinstellungen können hier konfiguriert werden.", + "settings.commands.title": "Befehle", + "settings.commands.description": "Befehlseinstellungen können hier konfiguriert werden.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP-Einstellungen können hier konfiguriert werden.", + + "settings.permissions.title": "Berechtigungen", + "settings.permissions.description": "Steuern Sie, welche Tools der Server standardmäßig verwenden darf.", + "settings.permissions.section.tools": "Tools", + "settings.permissions.toast.updateFailed.title": "Berechtigungen konnten nicht aktualisiert werden", + + "settings.permissions.action.allow": "Erlauben", + "settings.permissions.action.ask": "Fragen", + "settings.permissions.action.deny": "Verweigern", + + "settings.permissions.tool.read.title": "Lesen", + "settings.permissions.tool.read.description": "Lesen einer Datei (stimmt mit dem Dateipfad überein)", + "settings.permissions.tool.edit.title": "Bearbeiten", + "settings.permissions.tool.edit.description": + "Dateien ändern, einschließlich Bearbeitungen, Schreibvorgängen, Patches und Mehrfachbearbeitungen", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Dateien mithilfe von Glob-Mustern abgleichen", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Dateiinhalte mit regulären Ausdrücken durchsuchen", + "settings.permissions.tool.list.title": "Auflisten", + "settings.permissions.tool.list.description": "Dateien in einem Verzeichnis auflisten", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Shell-Befehle ausführen", + "settings.permissions.tool.task.title": "Aufgabe", + "settings.permissions.tool.task.description": "Unteragenten starten", + "settings.permissions.tool.skill.title": "Fähigkeit", + "settings.permissions.tool.skill.description": "Eine Fähigkeit nach Namen laden", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Language-Server-Abfragen ausführen", + "settings.permissions.tool.todoread.title": "Todo lesen", + "settings.permissions.tool.todoread.description": "Die Todo-Liste lesen", + "settings.permissions.tool.todowrite.title": "Todo schreiben", + "settings.permissions.tool.todowrite.description": "Die Todo-Liste aktualisieren", + "settings.permissions.tool.webfetch.title": "Web-Abruf", + "settings.permissions.tool.webfetch.description": "Inhalt von einer URL abrufen", + "settings.permissions.tool.websearch.title": "Web-Suche", + "settings.permissions.tool.websearch.description": "Das Web durchsuchen", + "settings.permissions.tool.codesearch.title": "Code-Suche", + "settings.permissions.tool.codesearch.description": "Code im Web durchsuchen", + "settings.permissions.tool.external_directory.title": "Externes Verzeichnis", + "settings.permissions.tool.external_directory.description": "Zugriff auf Dateien außerhalb des Projektverzeichnisses", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "Wiederholte Tool-Aufrufe mit identischer Eingabe erkennen", + + "workspace.new": "Neuer Arbeitsbereich", + "workspace.type.local": "lokal", + "workspace.type.sandbox": "Sandbox", + "workspace.create.failed.title": "Arbeitsbereich konnte nicht erstellt werden", + "workspace.delete.failed.title": "Arbeitsbereich konnte nicht gelöscht werden", + "workspace.resetting.title": "Arbeitsbereich wird zurückgesetzt", + "workspace.resetting.description": "Dies kann eine Minute dauern.", + "workspace.reset.failed.title": "Arbeitsbereich konnte nicht zurückgesetzt werden", + "workspace.reset.success.title": "Arbeitsbereich zurückgesetzt", + "workspace.reset.success.description": "Der Arbeitsbereich entspricht jetzt dem Standard-Branch.", + "workspace.status.checking": "Suche nach nicht zusammengeführten Änderungen...", + "workspace.status.error": "Git-Status konnte nicht überprüft werden.", + "workspace.status.clean": "Keine nicht zusammengeführten Änderungen erkannt.", + "workspace.status.dirty": "Nicht zusammengeführte Änderungen in diesem Arbeitsbereich erkannt.", + "workspace.delete.title": "Arbeitsbereich löschen", + "workspace.delete.confirm": 'Arbeitsbereich "{{name}}" löschen?', + "workspace.delete.button": "Arbeitsbereich löschen", + "workspace.reset.title": "Arbeitsbereich zurücksetzen", + "workspace.reset.confirm": 'Arbeitsbereich "{{name}}" zurücksetzen?', + "workspace.reset.button": "Arbeitsbereich zurücksetzen", + "workspace.reset.archived.none": "Keine aktiven Sitzungen werden archiviert.", + "workspace.reset.archived.one": "1 Sitzung wird archiviert.", + "workspace.reset.archived.many": "{{count}} Sitzungen werden archiviert.", + "workspace.reset.note": "Dadurch wird der Arbeitsbereich auf den Standard-Branch zurückgesetzt.", +} satisfies Partial<Record<Keys, string>> diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index d240fa42310..e2635ca179e 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -269,6 +269,7 @@ export const dict = { "language.en": "English", "language.zh": "Chinese", "language.ko": "Korean", + "language.de": "German", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 2c32d40bc18..65ebd7b3523 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -272,6 +272,7 @@ export const dict = { "language.en": "영어", "language.zh": "중국어", "language.ko": "한국어", + "language.de": "독일어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 61433953e7b..0b1615ce15d 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -268,6 +268,7 @@ export const dict = { "language.en": "英语", "language.zh": "中文", "language.ko": "韩语", + "language.de": "德语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/de.ts b/packages/ui/src/i18n/de.ts new file mode 100644 index 00000000000..ad374a8adb0 --- /dev/null +++ b/packages/ui/src/i18n/de.ts @@ -0,0 +1,94 @@ +import { dict as en } from "./en" + +type Keys = keyof typeof en + +export const dict = { + "ui.sessionReview.title": "Sitzungsänderungen", + "ui.sessionReview.diffStyle.unified": "Vereinheitlicht", + "ui.sessionReview.diffStyle.split": "Geteilt", + "ui.sessionReview.expandAll": "Alle erweitern", + "ui.sessionReview.collapseAll": "Alle reduzieren", + + "ui.sessionTurn.steps.show": "Schritte anzeigen", + "ui.sessionTurn.steps.hide": "Schritte ausblenden", + "ui.sessionTurn.summary.response": "Antwort", + "ui.sessionTurn.diff.showMore": "Weitere Änderungen anzeigen ({{count}})", + + "ui.sessionTurn.retry.retrying": "erneuter Versuch", + "ui.sessionTurn.retry.inSeconds": "in {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Arbeit delegieren", + "ui.sessionTurn.status.planning": "Nächste Schritte planen", + "ui.sessionTurn.status.gatheringContext": "Kontext sammeln", + "ui.sessionTurn.status.searchingCodebase": "Codebasis durchsuchen", + "ui.sessionTurn.status.searchingWeb": "Web durchsuchen", + "ui.sessionTurn.status.makingEdits": "Änderungen vornehmen", + "ui.sessionTurn.status.runningCommands": "Befehle ausführen", + "ui.sessionTurn.status.thinking": "Denken", + "ui.sessionTurn.status.thinkingWithTopic": "Denken - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Gedanken sammeln", + "ui.sessionTurn.status.consideringNextSteps": "Nächste Schritte erwägen", + + "ui.messagePart.diagnostic.error": "Fehler", + "ui.messagePart.title.edit": "Bearbeiten", + "ui.messagePart.title.write": "Schreiben", + "ui.messagePart.option.typeOwnAnswer": "Eigene Antwort eingeben", + "ui.messagePart.review.title": "Antworten überprüfen", + + "ui.list.loading": "Laden", + "ui.list.empty": "Keine Ergebnisse", + "ui.list.emptyWithFilter.prefix": "Keine Ergebnisse für", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Neue Nachricht", + + "ui.textField.copyToClipboard": "In die Zwischenablage kopieren", + "ui.textField.copied": "Kopiert", + + "ui.imagePreview.alt": "Bildvorschau", + + "ui.tool.read": "Lesen", + "ui.tool.list": "Auflisten", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webabruf", + "ui.tool.shell": "Shell", + "ui.tool.patch": "Patch", + "ui.tool.todos": "Aufgaben", + "ui.tool.todos.read": "Aufgaben lesen", + "ui.tool.questions": "Fragen", + "ui.tool.agent": "{{type}} Agent", + + "ui.common.file.one": "Datei", + "ui.common.file.other": "Dateien", + "ui.common.question.one": "Frage", + "ui.common.question.other": "Fragen", + + "ui.common.add": "Hinzufügen", + "ui.common.cancel": "Abbrechen", + "ui.common.confirm": "Bestätigen", + "ui.common.dismiss": "Verwerfen", + "ui.common.next": "Weiter", + "ui.common.submit": "Absenden", + + "ui.permission.deny": "Verweigern", + "ui.permission.allowAlways": "Immer erlauben", + "ui.permission.allowOnce": "Einmal erlauben", + + "ui.message.expand": "Nachricht erweitern", + "ui.message.collapse": "Nachricht reduzieren", + "ui.message.copy": "Kopieren", + "ui.message.copied": "Kopiert!", + "ui.message.attachment.alt": "Anhang", + + "ui.patch.action.deleted": "Gelöscht", + "ui.patch.action.created": "Erstellt", + "ui.patch.action.moved": "Verschoben", + "ui.patch.action.patched": "Gepatched", + + "ui.question.subtitle.answered": "{{count}} beantwortet", + "ui.question.answer.none": "(keine Antwort)", + "ui.question.review.notAnswered": "(nicht beantwortet)", + "ui.question.multiHint": "(alle zutreffenden auswählen)", + "ui.question.custom.placeholder": "Geben Sie Ihre Antwort ein...", +} satisfies Partial<Record<Keys, string>> From 09a9556c70495eac0e7c8f105d69498583d9ec79 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:22:51 -0600 Subject: [PATCH 242/426] feat(app): spanish translations --- packages/app/src/context/language.tsx | 10 +- packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 554 ++++++++++++++++++++++++++ packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/es.ts | 90 +++++ 7 files changed, 656 insertions(+), 2 deletions(-) create mode 100644 packages/app/src/i18n/es.ts create mode 100644 packages/ui/src/i18n/es.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index d2e8c077a49..91b514de38c 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -7,17 +7,19 @@ import { dict as en } from "@/i18n/en" import { dict as zh } from "@/i18n/zh" import { dict as ko } from "@/i18n/ko" import { dict as de } from "@/i18n/de" +import { dict as es } from "@/i18n/es" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" import { dict as uiDe } from "@opencode-ai/ui/i18n/de" +import { dict as uiEs } from "@opencode-ai/ui/i18n/es" -export type Locale = "en" | "zh" | "ko" | "de" +export type Locale = "en" | "zh" | "ko" | "de" | "es" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -28,6 +30,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("zh")) return "zh" if (language.toLowerCase().startsWith("ko")) return "ko" if (language.toLowerCase().startsWith("de")) return "de" + if (language.toLowerCase().startsWith("es")) return "es" } return "en" @@ -47,6 +50,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "zh") return "zh" if (store.locale === "ko") return "ko" if (store.locale === "de") return "de" + if (store.locale === "es") return "es" return "en" }) @@ -61,6 +65,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "en") return base if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) } + if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -71,6 +76,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont zh: "language.zh", ko: "language.ko", de: "language.de", + es: "language.es", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index dce6a3673e0..ebb45f96790 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -276,6 +276,7 @@ export const dict = { "language.zh": "Chinesisch", "language.ko": "Koreanisch", "language.de": "Deutsch", + "language.es": "Spanisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index e2635ca179e..6a020eeab88 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -270,6 +270,7 @@ export const dict = { "language.zh": "Chinese", "language.ko": "Korean", "language.de": "German", + "language.es": "Spanish", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts new file mode 100644 index 00000000000..d5fef048790 --- /dev/null +++ b/packages/app/src/i18n/es.ts @@ -0,0 +1,554 @@ +export const dict = { + "command.category.suggested": "Sugerido", + "command.category.view": "Ver", + "command.category.project": "Proyecto", + "command.category.provider": "Proveedor", + "command.category.server": "Servidor", + "command.category.session": "Sesión", + "command.category.theme": "Tema", + "command.category.language": "Idioma", + "command.category.file": "Archivo", + "command.category.terminal": "Terminal", + "command.category.model": "Modelo", + "command.category.mcp": "MCP", + "command.category.agent": "Agente", + "command.category.permissions": "Permisos", + + "theme.scheme.system": "Sistema", + "theme.scheme.light": "Claro", + "theme.scheme.dark": "Oscuro", + + "command.sidebar.toggle": "Alternar barra lateral", + "command.project.open": "Abrir proyecto", + "command.provider.connect": "Conectar proveedor", + "command.server.switch": "Cambiar servidor", + "command.session.previous": "Sesión anterior", + "command.session.next": "Siguiente sesión", + "command.session.archive": "Archivar sesión", + + "command.palette": "Paleta de comandos", + + "command.theme.cycle": "Alternar tema", + "command.theme.set": "Usar tema: {{theme}}", + "command.theme.scheme.cycle": "Alternar esquema de color", + "command.theme.scheme.set": "Usar esquema de color: {{scheme}}", + + "command.language.cycle": "Alternar idioma", + "command.language.set": "Usar idioma: {{language}}", + + "command.session.new": "Nueva sesión", + "command.file.open": "Abrir archivo", + "command.file.open.description": "Buscar archivos y comandos", + "command.terminal.toggle": "Alternar terminal", + "command.review.toggle": "Alternar revisión", + "command.terminal.new": "Nueva terminal", + "command.terminal.new.description": "Crear una nueva pestaña de terminal", + "command.steps.toggle": "Alternar pasos", + "command.steps.toggle.description": "Mostrar u ocultar pasos para el mensaje actual", + "command.message.previous": "Mensaje anterior", + "command.message.previous.description": "Ir al mensaje de usuario anterior", + "command.message.next": "Siguiente mensaje", + "command.message.next.description": "Ir al siguiente mensaje de usuario", + "command.model.choose": "Elegir modelo", + "command.model.choose.description": "Seleccionar un modelo diferente", + "command.mcp.toggle": "Alternar MCPs", + "command.mcp.toggle.description": "Alternar MCPs", + "command.agent.cycle": "Alternar agente", + "command.agent.cycle.description": "Cambiar al siguiente agente", + "command.agent.cycle.reverse": "Alternar agente hacia atrás", + "command.agent.cycle.reverse.description": "Cambiar al agente anterior", + "command.model.variant.cycle": "Alternar esfuerzo de pensamiento", + "command.model.variant.cycle.description": "Cambiar al siguiente nivel de esfuerzo", + "command.permissions.autoaccept.enable": "Aceptar ediciones automáticamente", + "command.permissions.autoaccept.disable": "Dejar de aceptar ediciones automáticamente", + "command.session.undo": "Deshacer", + "command.session.undo.description": "Deshacer el último mensaje", + "command.session.redo": "Rehacer", + "command.session.redo.description": "Rehacer el último mensaje deshecho", + "command.session.compact": "Compactar sesión", + "command.session.compact.description": "Resumir la sesión para reducir el tamaño del contexto", + "command.session.fork": "Bifurcar desde mensaje", + "command.session.fork.description": "Crear una nueva sesión desde un mensaje anterior", + "command.session.share": "Compartir sesión", + "command.session.share.description": "Compartir esta sesión y copiar la URL al portapapeles", + "command.session.unshare": "Dejar de compartir sesión", + "command.session.unshare.description": "Dejar de compartir esta sesión", + + "palette.search.placeholder": "Buscar archivos y comandos", + "palette.empty": "No se encontraron resultados", + "palette.group.commands": "Comandos", + "palette.group.files": "Archivos", + + "dialog.provider.search.placeholder": "Buscar proveedores", + "dialog.provider.empty": "No se encontraron proveedores", + "dialog.provider.group.popular": "Popular", + "dialog.provider.group.other": "Otro", + "dialog.provider.tag.recommended": "Recomendado", + "dialog.provider.anthropic.note": "Conectar con Claude Pro/Max o clave API", + + "dialog.model.select.title": "Seleccionar modelo", + "dialog.model.search.placeholder": "Buscar modelos", + "dialog.model.empty": "Sin resultados de modelos", + "dialog.model.manage": "Gestionar modelos", + "dialog.model.manage.description": "Personalizar qué modelos aparecen en el selector de modelos.", + + "dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por OpenCode", + "dialog.model.unpaid.addMore.title": "Añadir más modelos de proveedores populares", + + "dialog.provider.viewAll": "Ver todos los proveedores", + + "provider.connect.title": "Conectar {{provider}}", + "provider.connect.title.anthropicProMax": "Iniciar sesión con Claude Pro/Max", + "provider.connect.selectMethod": "Seleccionar método de inicio de sesión para {{provider}}.", + "provider.connect.method.apiKey": "Clave API", + "provider.connect.status.inProgress": "Autorización en progreso...", + "provider.connect.status.waiting": "Esperando autorización...", + "provider.connect.status.failed": "Autorización fallida: {{error}}", + "provider.connect.apiKey.description": + "Introduce tu clave API de {{provider}} para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + "provider.connect.apiKey.label": "Clave API de {{provider}}", + "provider.connect.apiKey.placeholder": "Clave API", + "provider.connect.apiKey.required": "La clave API es obligatoria", + "provider.connect.opencodeZen.line1": + "OpenCode Zen te da acceso a un conjunto curado de modelos fiables optimizados para agentes de programación.", + "provider.connect.opencodeZen.line2": + "Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.", + "provider.connect.opencodeZen.visit.prefix": "Visita ", + "provider.connect.opencodeZen.visit.suffix": " para obtener tu clave API.", + "provider.connect.oauth.code.visit.prefix": "Visita ", + "provider.connect.oauth.code.visit.link": "este enlace", + "provider.connect.oauth.code.visit.suffix": + " para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + "provider.connect.oauth.code.label": "Código de autorización {{method}}", + "provider.connect.oauth.code.placeholder": "Código de autorización", + "provider.connect.oauth.code.required": "El código de autorización es obligatorio", + "provider.connect.oauth.code.invalid": "Código de autorización inválido", + "provider.connect.oauth.auto.visit.prefix": "Visita ", + "provider.connect.oauth.auto.visit.link": "este enlace", + "provider.connect.oauth.auto.visit.suffix": + " e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Código de confirmación", + "provider.connect.toast.connected.title": "{{provider}} conectado", + "provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.", + + "model.tag.free": "Gratis", + "model.tag.latest": "Último", + + "common.search.placeholder": "Buscar", + "common.loading": "Cargando", + "common.cancel": "Cancelar", + "common.submit": "Enviar", + "common.save": "Guardar", + "common.saving": "Guardando...", + "common.default": "Predeterminado", + "common.attachment": "adjunto", + + "prompt.placeholder.shell": "Introduce comando de shell...", + "prompt.placeholder.normal": 'Pregunta cualquier cosa... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "esc para salir", + + "prompt.example.1": "Arreglar un TODO en el código", + "prompt.example.2": "¿Cuál es el stack tecnológico de este proyecto?", + "prompt.example.3": "Arreglar pruebas rotas", + "prompt.example.4": "Explicar cómo funciona la autenticación", + "prompt.example.5": "Encontrar y arreglar vulnerabilidades de seguridad", + "prompt.example.6": "Añadir pruebas unitarias para el servicio de usuario", + "prompt.example.7": "Refactorizar esta función para que sea más legible", + "prompt.example.8": "¿Qué significa este error?", + "prompt.example.9": "Ayúdame a depurar este problema", + "prompt.example.10": "Generar documentación de API", + "prompt.example.11": "Optimizar consultas a la base de datos", + "prompt.example.12": "Añadir validación de entrada", + "prompt.example.13": "Crear un nuevo componente para...", + "prompt.example.14": "¿Cómo despliego este proyecto?", + "prompt.example.15": "Revisar mi código para mejores prácticas", + "prompt.example.16": "Añadir manejo de errores a esta función", + "prompt.example.17": "Explicar este patrón de regex", + "prompt.example.18": "Convertir esto a TypeScript", + "prompt.example.19": "Añadir logging en todo el código", + "prompt.example.20": "¿Qué dependencias están desactualizadas?", + "prompt.example.21": "Ayúdame a escribir un script de migración", + "prompt.example.22": "Implementar caché para este endpoint", + "prompt.example.23": "Añadir paginación a esta lista", + "prompt.example.24": "Crear un comando CLI para...", + "prompt.example.25": "¿Cómo funcionan las variables de entorno aquí?", + + "prompt.popover.emptyResults": "Sin resultados coincidentes", + "prompt.popover.emptyCommands": "Sin comandos coincidentes", + "prompt.dropzone.label": "Suelta imágenes o PDFs aquí", + "prompt.slash.badge.custom": "personalizado", + "prompt.context.active": "activo", + "prompt.context.includeActiveFile": "Incluir archivo activo", + "prompt.action.attachFile": "Adjuntar archivo", + "prompt.action.send": "Enviar", + "prompt.action.stop": "Detener", + + "prompt.toast.pasteUnsupported.title": "Pegado no soportado", + "prompt.toast.pasteUnsupported.description": "Solo se pueden pegar imágenes o PDFs aquí.", + "prompt.toast.modelAgentRequired.title": "Selecciona un agente y modelo", + "prompt.toast.modelAgentRequired.description": "Elige un agente y modelo antes de enviar un prompt.", + "prompt.toast.worktreeCreateFailed.title": "Fallo al crear el árbol de trabajo", + "prompt.toast.sessionCreateFailed.title": "Fallo al crear la sesión", + "prompt.toast.shellSendFailed.title": "Fallo al enviar comando de shell", + "prompt.toast.commandSendFailed.title": "Fallo al enviar comando", + "prompt.toast.promptSendFailed.title": "Fallo al enviar prompt", + + "dialog.mcp.title": "MCPs", + "dialog.mcp.description": "{{enabled}} de {{total}} habilitados", + "dialog.mcp.empty": "No hay MCPs configurados", + + "mcp.status.connected": "conectado", + "mcp.status.failed": "fallido", + "mcp.status.needs_auth": "necesita auth", + "mcp.status.disabled": "deshabilitado", + + "dialog.fork.empty": "No hay mensajes desde donde bifurcar", + + "dialog.directory.search.placeholder": "Buscar carpetas", + "dialog.directory.empty": "No se encontraron carpetas", + + "dialog.server.title": "Servidores", + "dialog.server.description": "Cambiar a qué servidor de OpenCode se conecta esta app.", + "dialog.server.search.placeholder": "Buscar servidores", + "dialog.server.empty": "No hay servidores aún", + "dialog.server.add.title": "Añadir un servidor", + "dialog.server.add.url": "URL del servidor", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "No se pudo conectar al servidor", + "dialog.server.add.checking": "Comprobando...", + "dialog.server.add.button": "Añadir", + "dialog.server.default.title": "Servidor predeterminado", + "dialog.server.default.description": + "Conectar a este servidor al iniciar la app en lugar de iniciar un servidor local. Requiere reinicio.", + "dialog.server.default.none": "Ningún servidor seleccionado", + "dialog.server.default.set": "Establecer servidor actual como predeterminado", + "dialog.server.default.clear": "Limpiar", + + "dialog.project.edit.title": "Editar proyecto", + "dialog.project.edit.name": "Nombre", + "dialog.project.edit.icon": "Icono", + "dialog.project.edit.icon.alt": "Icono del proyecto", + "dialog.project.edit.icon.hint": "Haz clic o arrastra una imagen", + "dialog.project.edit.icon.recommended": "Recomendado: 128x128px", + "dialog.project.edit.color": "Color", + + "context.breakdown.title": "Desglose de Contexto", + "context.breakdown.note": + 'Desglose aproximado de tokens de entrada. "Otro" incluye definiciones de herramientas y sobrecarga.', + "context.breakdown.system": "Sistema", + "context.breakdown.user": "Usuario", + "context.breakdown.assistant": "Asistente", + "context.breakdown.tool": "Llamadas a herramientas", + "context.breakdown.other": "Otro", + + "context.systemPrompt.title": "Prompt del Sistema", + "context.rawMessages.title": "Mensajes en bruto", + + "context.stats.session": "Sesión", + "context.stats.messages": "Mensajes", + "context.stats.provider": "Proveedor", + "context.stats.model": "Modelo", + "context.stats.limit": "Límite de Contexto", + "context.stats.totalTokens": "Tokens Totales", + "context.stats.usage": "Uso", + "context.stats.inputTokens": "Tokens de Entrada", + "context.stats.outputTokens": "Tokens de Salida", + "context.stats.reasoningTokens": "Tokens de Razonamiento", + "context.stats.cacheTokens": "Tokens de Caché (lectura/escritura)", + "context.stats.userMessages": "Mensajes de Usuario", + "context.stats.assistantMessages": "Mensajes de Asistente", + "context.stats.totalCost": "Costo Total", + "context.stats.sessionCreated": "Sesión Creada", + "context.stats.lastActivity": "Última Actividad", + + "context.usage.tokens": "Tokens", + "context.usage.usage": "Uso", + "context.usage.cost": "Costo", + "context.usage.clickToView": "Haz clic para ver contexto", + + "language.en": "Inglés", + "language.zh": "Chino", + "language.ko": "Coreano", + "language.de": "Alemán", + "language.es": "Español", + + "toast.language.title": "Idioma", + "toast.language.description": "Cambiado a {{language}}", + + "toast.theme.title": "Tema cambiado", + "toast.scheme.title": "Esquema de color", + + "toast.permissions.autoaccept.on.title": "Aceptando ediciones automáticamente", + "toast.permissions.autoaccept.on.description": "Los permisos de edición y escritura serán aprobados automáticamente", + "toast.permissions.autoaccept.off.title": "Se dejó de aceptar ediciones automáticamente", + "toast.permissions.autoaccept.off.description": "Los permisos de edición y escritura requerirán aprobación", + + "toast.model.none.title": "Ningún modelo seleccionado", + "toast.model.none.description": "Conecta un proveedor para resumir esta sesión", + + "toast.file.loadFailed.title": "Fallo al cargar archivo", + + "toast.session.share.copyFailed.title": "Fallo al copiar URL al portapapeles", + "toast.session.share.success.title": "Sesión compartida", + "toast.session.share.success.description": "¡URL compartida copiada al portapapeles!", + "toast.session.share.failed.title": "Fallo al compartir sesión", + "toast.session.share.failed.description": "Ocurrió un error al compartir la sesión", + + "toast.session.unshare.success.title": "Sesión dejó de compartirse", + "toast.session.unshare.success.description": "¡La sesión dejó de compartirse exitosamente!", + "toast.session.unshare.failed.title": "Fallo al dejar de compartir sesión", + "toast.session.unshare.failed.description": "Ocurrió un error al dejar de compartir la sesión", + + "toast.session.listFailed.title": "Fallo al cargar sesiones para {{project}}", + + "toast.update.title": "Actualización disponible", + "toast.update.description": "Una nueva versión de OpenCode ({{version}}) está disponible para instalar.", + "toast.update.action.installRestart": "Instalar y reiniciar", + "toast.update.action.notYet": "Todavía no", + + "error.page.title": "Algo salió mal", + "error.page.description": "Ocurrió un error al cargar la aplicación.", + "error.page.details.label": "Detalles del error", + "error.page.action.restart": "Reiniciar", + "error.page.action.checking": "Comprobando...", + "error.page.action.checkUpdates": "Buscar actualizaciones", + "error.page.action.updateTo": "Actualizar a {{version}}", + "error.page.report.prefix": "Por favor reporta este error al equipo de OpenCode", + "error.page.report.discord": "en Discord", + "error.page.version": "Versión: {{version}}", + + "error.dev.rootNotFound": + "Elemento raíz no encontrado. ¿Olvidaste añadirlo a tu index.html? ¿O tal vez el atributo id está mal escrito?", + + "error.globalSync.connectFailed": "No se pudo conectar al servidor. ¿Hay un servidor ejecutándose en `{{url}}`?", + + "error.chain.unknown": "Error desconocido", + "error.chain.causedBy": "Causado por:", + "error.chain.apiError": "Error de API", + "error.chain.status": "Estado: {{status}}", + "error.chain.retryable": "Reintentable: {{retryable}}", + "error.chain.responseBody": "Cuerpo de la respuesta:\n{{body}}", + "error.chain.didYouMean": "¿Quisiste decir: {{suggestions}}", + "error.chain.modelNotFound": "Modelo no encontrado: {{provider}}/{{model}}", + "error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (opencode.json)", + "error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, OpenCode no soporta autenticación MCP todavía.', + "error.chain.providerAuthFailed": "Autenticación de proveedor fallida ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Fallo al inicializar proveedor "{{provider}}". Comprueba credenciales y configuración.', + "error.chain.configJsonInvalid": "El archivo de configuración en {{path}} no es un JSON(C) válido", + "error.chain.configJsonInvalidWithMessage": + "El archivo de configuración en {{path}} no es un JSON(C) válido: {{message}}", + "error.chain.configDirectoryTypo": + 'El directorio "{{dir}}" en {{path}} no es válido. Renombra el directorio a "{{suggestion}}" o elimínalo. Esto es un error tipográfico común.', + "error.chain.configFrontmatterError": "Fallo al analizar frontmatter en {{path}}:\n{{message}}", + "error.chain.configInvalid": "El archivo de configuración en {{path}} es inválido", + "error.chain.configInvalidWithMessage": "El archivo de configuración en {{path}} es inválido: {{message}}", + + "notification.permission.title": "Permiso requerido", + "notification.permission.description": "{{sessionTitle}} en {{projectName}} necesita permiso", + "notification.question.title": "Pregunta", + "notification.question.description": "{{sessionTitle}} en {{projectName}} tiene una pregunta", + "notification.action.goToSession": "Ir a sesión", + + "notification.session.responseReady.title": "Respuesta lista", + "notification.session.error.title": "Error de sesión", + "notification.session.error.fallbackDescription": "Ocurrió un error", + + "home.recentProjects": "Proyectos recientes", + "home.empty.title": "Sin proyectos recientes", + "home.empty.description": "Empieza abriendo un proyecto local", + + "session.tab.session": "Sesión", + "session.tab.review": "Revisión", + "session.tab.context": "Contexto", + "session.review.filesChanged": "{{count}} Archivos Cambiados", + "session.review.loadingChanges": "Cargando cambios...", + "session.review.empty": "No hay cambios en esta sesión aún", + "session.messages.renderEarlier": "Renderizar mensajes anteriores", + "session.messages.loadingEarlier": "Cargando mensajes anteriores...", + "session.messages.loadEarlier": "Cargar mensajes anteriores", + "session.messages.loading": "Cargando mensajes...", + + "session.context.addToContext": "Añadir {{selection}} al contexto", + + "session.new.worktree.main": "Rama principal", + "session.new.worktree.mainWithBranch": "Rama principal ({{branch}})", + "session.new.worktree.create": "Crear nuevo árbol de trabajo", + "session.new.lastModified": "Última modificación", + + "session.header.search.placeholder": "Buscar {{project}}", + + "session.share.popover.title": "Publicar en web", + "session.share.popover.description.shared": + "Esta sesión es pública en la web. Es accesible para cualquiera con el enlace.", + "session.share.popover.description.unshared": + "Compartir sesión públicamente en la web. Será accesible para cualquiera con el enlace.", + "session.share.action.share": "Compartir", + "session.share.action.publish": "Publicar", + "session.share.action.publishing": "Publicando...", + "session.share.action.unpublish": "Despublicar", + "session.share.action.unpublishing": "Despublicando...", + "session.share.action.view": "Ver", + "session.share.copy.copied": "Copiado", + "session.share.copy.copyLink": "Copiar enlace", + + "lsp.tooltip.none": "Sin servidores LSP", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Cargando prompt...", + "terminal.loading": "Cargando terminal...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + + "common.closeTab": "Cerrar pestaña", + "common.dismiss": "Descartar", + "common.requestFailed": "Solicitud fallida", + "common.moreOptions": "Más opciones", + "common.learnMore": "Saber más", + "common.rename": "Renombrar", + "common.reset": "Restablecer", + "common.delete": "Eliminar", + "common.close": "Cerrar", + "common.edit": "Editar", + "common.loadMore": "Cargar más", + + "sidebar.settings": "Ajustes", + "sidebar.help": "Ayuda", + "sidebar.workspaces.enable": "Habilitar espacios de trabajo", + "sidebar.workspaces.disable": "Deshabilitar espacios de trabajo", + "sidebar.gettingStarted.title": "Empezando", + "sidebar.gettingStarted.line1": "OpenCode incluye modelos gratuitos para que puedas empezar inmediatamente.", + "sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos, inc. Claude, GPT, Gemini etc.", + "sidebar.project.recentSessions": "Sesiones recientes", + "sidebar.project.viewAllSessions": "Ver todas las sesiones", + + "settings.section.desktop": "Escritorio", + "settings.tab.general": "General", + "settings.tab.shortcuts": "Atajos", + + "settings.general.section.appearance": "Apariencia", + "settings.general.section.notifications": "Notificaciones del sistema", + "settings.general.section.sounds": "Efectos de sonido", + + "settings.general.row.language.title": "Idioma", + "settings.general.row.language.description": "Cambiar el idioma de visualización para OpenCode", + "settings.general.row.appearance.title": "Apariencia", + "settings.general.row.appearance.description": "Personaliza cómo se ve OpenCode en tu dispositivo", + "settings.general.row.theme.title": "Tema", + "settings.general.row.theme.description": "Personaliza el tema de OpenCode.", + "settings.general.row.font.title": "Fuente", + "settings.general.row.font.description": "Personaliza la fuente mono usada en bloques de código", + + "settings.general.notifications.agent.title": "Agente", + "settings.general.notifications.agent.description": + "Mostrar notificación del sistema cuando el agente termine o necesite atención", + "settings.general.notifications.permissions.title": "Permisos", + "settings.general.notifications.permissions.description": + "Mostrar notificación del sistema cuando se requiera un permiso", + "settings.general.notifications.errors.title": "Errores", + "settings.general.notifications.errors.description": "Mostrar notificación del sistema cuando ocurra un error", + + "settings.general.sounds.agent.title": "Agente", + "settings.general.sounds.agent.description": "Reproducir sonido cuando el agente termine o necesite atención", + "settings.general.sounds.permissions.title": "Permisos", + "settings.general.sounds.permissions.description": "Reproducir sonido cuando se requiera un permiso", + "settings.general.sounds.errors.title": "Errores", + "settings.general.sounds.errors.description": "Reproducir sonido cuando ocurra un error", + + "settings.shortcuts.title": "Atajos de teclado", + "settings.shortcuts.reset.button": "Restablecer a valores predeterminados", + "settings.shortcuts.reset.toast.title": "Atajos restablecidos", + "settings.shortcuts.reset.toast.description": + "Los atajos de teclado han sido restablecidos a los valores predeterminados.", + "settings.shortcuts.conflict.title": "Atajo ya en uso", + "settings.shortcuts.conflict.description": "{{keybind}} ya está asignado a {{titles}}.", + "settings.shortcuts.unassigned": "Sin asignar", + "settings.shortcuts.pressKeys": "Presiona teclas", + + "settings.shortcuts.group.general": "General", + "settings.shortcuts.group.session": "Sesión", + "settings.shortcuts.group.navigation": "Navegación", + "settings.shortcuts.group.modelAndAgent": "Modelo y agente", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Proveedores", + "settings.providers.description": "La configuración de proveedores estará disponible aquí.", + "settings.models.title": "Modelos", + "settings.models.description": "La configuración de modelos estará disponible aquí.", + "settings.agents.title": "Agentes", + "settings.agents.description": "La configuración de agentes estará disponible aquí.", + "settings.commands.title": "Comandos", + "settings.commands.description": "La configuración de comandos estará disponible aquí.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "La configuración de MCP estará disponible aquí.", + + "settings.permissions.title": "Permisos", + "settings.permissions.description": "Controla qué herramientas puede usar el servidor por defecto.", + "settings.permissions.section.tools": "Herramientas", + "settings.permissions.toast.updateFailed.title": "Fallo al actualizar permisos", + + "settings.permissions.action.allow": "Permitir", + "settings.permissions.action.ask": "Preguntar", + "settings.permissions.action.deny": "Denegar", + + "settings.permissions.tool.read.title": "Leer", + "settings.permissions.tool.read.description": "Leer un archivo (coincide con la ruta del archivo)", + "settings.permissions.tool.edit.title": "Editar", + "settings.permissions.tool.edit.description": + "Modificar archivos, incluyendo ediciones, escrituras, parches y multi-ediciones", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Coincidir archivos usando patrones glob", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Buscar contenidos de archivo usando expresiones regulares", + "settings.permissions.tool.list.title": "Listar", + "settings.permissions.tool.list.description": "Listar archivos dentro de un directorio", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Ejecutar comandos de shell", + "settings.permissions.tool.task.title": "Tarea", + "settings.permissions.tool.task.description": "Lanzar sub-agentes", + "settings.permissions.tool.skill.title": "Habilidad", + "settings.permissions.tool.skill.description": "Cargar una habilidad por nombre", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Ejecutar consultas de servidor de lenguaje", + "settings.permissions.tool.todoread.title": "Leer Todo", + "settings.permissions.tool.todoread.description": "Leer la lista de tareas", + "settings.permissions.tool.todowrite.title": "Escribir Todo", + "settings.permissions.tool.todowrite.description": "Actualizar la lista de tareas", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "Obtener contenido de una URL", + "settings.permissions.tool.websearch.title": "Búsqueda Web", + "settings.permissions.tool.websearch.description": "Buscar en la web", + "settings.permissions.tool.codesearch.title": "Búsqueda de Código", + "settings.permissions.tool.codesearch.description": "Buscar código en la web", + "settings.permissions.tool.external_directory.title": "Directorio Externo", + "settings.permissions.tool.external_directory.description": "Acceder a archivos fuera del directorio del proyecto", + "settings.permissions.tool.doom_loop.title": "Bucle Infinito", + "settings.permissions.tool.doom_loop.description": "Detectar llamadas a herramientas repetidas con entrada idéntica", + + "workspace.new": "Nuevo espacio de trabajo", + "workspace.type.local": "local", + "workspace.type.sandbox": "sandbox", + "workspace.create.failed.title": "Fallo al crear espacio de trabajo", + "workspace.delete.failed.title": "Fallo al eliminar espacio de trabajo", + "workspace.resetting.title": "Restableciendo espacio de trabajo", + "workspace.resetting.description": "Esto puede tomar un minuto.", + "workspace.reset.failed.title": "Fallo al restablecer espacio de trabajo", + "workspace.reset.success.title": "Espacio de trabajo restablecido", + "workspace.reset.success.description": "El espacio de trabajo ahora coincide con la rama predeterminada.", + "workspace.status.checking": "Comprobando cambios no fusionados...", + "workspace.status.error": "No se pudo verificar el estado de git.", + "workspace.status.clean": "No se detectaron cambios no fusionados.", + "workspace.status.dirty": "Cambios no fusionados detectados en este espacio de trabajo.", + "workspace.delete.title": "Eliminar espacio de trabajo", + "workspace.delete.confirm": '¿Eliminar espacio de trabajo "{{name}}"?', + "workspace.delete.button": "Eliminar espacio de trabajo", + "workspace.reset.title": "Restablecer espacio de trabajo", + "workspace.reset.confirm": '¿Restablecer espacio de trabajo "{{name}}"?', + "workspace.reset.button": "Restablecer espacio de trabajo", + "workspace.reset.archived.none": "No se archivarán sesiones activas.", + "workspace.reset.archived.one": "1 sesión será archivada.", + "workspace.reset.archived.many": "{{count}} sesiones serán archivadas.", + "workspace.reset.note": "Esto restablecerá el espacio de trabajo para coincidir con la rama predeterminada.", +} diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 65ebd7b3523..87be2871fbd 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -273,6 +273,7 @@ export const dict = { "language.zh": "중국어", "language.ko": "한국어", "language.de": "독일어", + "language.es": "스페인어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 0b1615ce15d..3c557ae8e01 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -269,6 +269,7 @@ export const dict = { "language.zh": "中文", "language.ko": "韩语", "language.de": "德语", + "language.es": "西班牙语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/es.ts b/packages/ui/src/i18n/es.ts new file mode 100644 index 00000000000..4d80bc988bc --- /dev/null +++ b/packages/ui/src/i18n/es.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "Cambios de la sesión", + "ui.sessionReview.diffStyle.unified": "Unificado", + "ui.sessionReview.diffStyle.split": "Dividido", + "ui.sessionReview.expandAll": "Expandir todo", + "ui.sessionReview.collapseAll": "Colapsar todo", + + "ui.sessionTurn.steps.show": "Mostrar pasos", + "ui.sessionTurn.steps.hide": "Ocultar pasos", + "ui.sessionTurn.summary.response": "Respuesta", + "ui.sessionTurn.diff.showMore": "Mostrar más cambios ({{count}})", + + "ui.sessionTurn.retry.retrying": "reintentando", + "ui.sessionTurn.retry.inSeconds": "en {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Delegando trabajo", + "ui.sessionTurn.status.planning": "Planificando siguientes pasos", + "ui.sessionTurn.status.gatheringContext": "Recopilando contexto", + "ui.sessionTurn.status.searchingCodebase": "Buscando en la base de código", + "ui.sessionTurn.status.searchingWeb": "Buscando en la web", + "ui.sessionTurn.status.makingEdits": "Realizando ediciones", + "ui.sessionTurn.status.runningCommands": "Ejecutando comandos", + "ui.sessionTurn.status.thinking": "Pensando", + "ui.sessionTurn.status.thinkingWithTopic": "Pensando - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Recopilando pensamientos", + "ui.sessionTurn.status.consideringNextSteps": "Considerando siguientes pasos", + + "ui.messagePart.diagnostic.error": "Error", + "ui.messagePart.title.edit": "Editar", + "ui.messagePart.title.write": "Escribir", + "ui.messagePart.option.typeOwnAnswer": "Escribe tu propia respuesta", + "ui.messagePart.review.title": "Revisa tus respuestas", + + "ui.list.loading": "Cargando", + "ui.list.empty": "Sin resultados", + "ui.list.emptyWithFilter.prefix": "Sin resultados para", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Nuevo mensaje", + + "ui.textField.copyToClipboard": "Copiar al portapapeles", + "ui.textField.copied": "Copiado", + + "ui.imagePreview.alt": "Vista previa de imagen", + + "ui.tool.read": "Leer", + "ui.tool.list": "Listar", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webfetch", + "ui.tool.shell": "Shell", + "ui.tool.patch": "Parche", + "ui.tool.todos": "Tareas", + "ui.tool.todos.read": "Leer tareas", + "ui.tool.questions": "Preguntas", + "ui.tool.agent": "Agente {{type}}", + + "ui.common.file.one": "archivo", + "ui.common.file.other": "archivos", + "ui.common.question.one": "pregunta", + "ui.common.question.other": "preguntas", + + "ui.common.add": "Añadir", + "ui.common.cancel": "Cancelar", + "ui.common.confirm": "Confirmar", + "ui.common.dismiss": "Descartar", + "ui.common.next": "Siguiente", + "ui.common.submit": "Enviar", + + "ui.permission.deny": "Denegar", + "ui.permission.allowAlways": "Permitir siempre", + "ui.permission.allowOnce": "Permitir una vez", + + "ui.message.expand": "Expandir mensaje", + "ui.message.collapse": "Colapsar mensaje", + "ui.message.copy": "Copiar", + "ui.message.copied": "¡Copiado!", + "ui.message.attachment.alt": "adjunto", + + "ui.patch.action.deleted": "Eliminado", + "ui.patch.action.created": "Creado", + "ui.patch.action.moved": "Movido", + "ui.patch.action.patched": "Parcheado", + + "ui.question.subtitle.answered": "{{count}} respondidas", + "ui.question.answer.none": "(sin respuesta)", + "ui.question.review.notAnswered": "(no respondida)", + "ui.question.multiHint": "(selecciona todas las que correspondan)", + "ui.question.custom.placeholder": "Escribe tu respuesta...", +} From efff52714db5153dab87aac3f07c56f45338fa9f Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:33:00 -0600 Subject: [PATCH 243/426] feat(app): french translations --- packages/app/src/context/language.tsx | 10 +- packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 1 + packages/app/src/i18n/fr.ts | 562 ++++++++++++++++++++++++++ packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/fr.ts | 90 +++++ 8 files changed, 665 insertions(+), 2 deletions(-) create mode 100644 packages/app/src/i18n/fr.ts create mode 100644 packages/ui/src/i18n/fr.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 91b514de38c..7d65af75e78 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -8,18 +8,20 @@ import { dict as zh } from "@/i18n/zh" import { dict as ko } from "@/i18n/ko" import { dict as de } from "@/i18n/de" import { dict as es } from "@/i18n/es" +import { dict as fr } from "@/i18n/fr" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" import { dict as uiDe } from "@opencode-ai/ui/i18n/de" import { dict as uiEs } from "@opencode-ai/ui/i18n/es" +import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" -export type Locale = "en" | "zh" | "ko" | "de" | "es" +export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -31,6 +33,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("ko")) return "ko" if (language.toLowerCase().startsWith("de")) return "de" if (language.toLowerCase().startsWith("es")) return "es" + if (language.toLowerCase().startsWith("fr")) return "fr" } return "en" @@ -51,6 +54,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "ko") return "ko" if (store.locale === "de") return "de" if (store.locale === "es") return "es" + if (store.locale === "fr") return "fr" return "en" }) @@ -66,6 +70,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) } if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) } + if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -77,6 +82,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont ko: "language.ko", de: "language.de", es: "language.es", + fr: "language.fr", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index ebb45f96790..81b14b32988 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -277,6 +277,7 @@ export const dict = { "language.ko": "Koreanisch", "language.de": "Deutsch", "language.es": "Spanisch", + "language.fr": "Französisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 6a020eeab88..81d3f1043be 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -271,6 +271,7 @@ export const dict = { "language.ko": "Korean", "language.de": "German", "language.es": "Spanish", + "language.fr": "French", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index d5fef048790..16c70853f89 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -272,6 +272,7 @@ export const dict = { "language.ko": "Coreano", "language.de": "Alemán", "language.es": "Español", + "language.fr": "Francés", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts new file mode 100644 index 00000000000..6b03aee1446 --- /dev/null +++ b/packages/app/src/i18n/fr.ts @@ -0,0 +1,562 @@ +export const dict = { + "command.category.suggested": "Suggéré", + "command.category.view": "Affichage", + "command.category.project": "Projet", + "command.category.provider": "Fournisseur", + "command.category.server": "Serveur", + "command.category.session": "Session", + "command.category.theme": "Thème", + "command.category.language": "Langue", + "command.category.file": "Fichier", + "command.category.terminal": "Terminal", + "command.category.model": "Modèle", + "command.category.mcp": "MCP", + "command.category.agent": "Agent", + "command.category.permissions": "Permissions", + + "theme.scheme.system": "Système", + "theme.scheme.light": "Clair", + "theme.scheme.dark": "Sombre", + + "command.sidebar.toggle": "Basculer la barre latérale", + "command.project.open": "Ouvrir un projet", + "command.provider.connect": "Connecter un fournisseur", + "command.server.switch": "Changer de serveur", + "command.session.previous": "Session précédente", + "command.session.next": "Session suivante", + "command.session.archive": "Archiver la session", + + "command.palette": "Palette de commandes", + + "command.theme.cycle": "Changer de thème", + "command.theme.set": "Utiliser le thème : {{theme}}", + "command.theme.scheme.cycle": "Changer de schéma de couleurs", + "command.theme.scheme.set": "Utiliser le schéma de couleurs : {{scheme}}", + + "command.language.cycle": "Changer de langue", + "command.language.set": "Utiliser la langue : {{language}}", + + "command.session.new": "Nouvelle session", + "command.file.open": "Ouvrir un fichier", + "command.file.open.description": "Rechercher des fichiers et des commandes", + "command.terminal.toggle": "Basculer le terminal", + "command.review.toggle": "Basculer la revue", + "command.terminal.new": "Nouveau terminal", + "command.terminal.new.description": "Créer un nouvel onglet de terminal", + "command.steps.toggle": "Basculer les étapes", + "command.steps.toggle.description": "Afficher ou masquer les étapes du message actuel", + "command.message.previous": "Message précédent", + "command.message.previous.description": "Aller au message utilisateur précédent", + "command.message.next": "Message suivant", + "command.message.next.description": "Aller au message utilisateur suivant", + "command.model.choose": "Choisir le modèle", + "command.model.choose.description": "Sélectionner un modèle différent", + "command.mcp.toggle": "Basculer MCP", + "command.mcp.toggle.description": "Basculer les MCPs", + "command.agent.cycle": "Changer d'agent", + "command.agent.cycle.description": "Passer à l'agent suivant", + "command.agent.cycle.reverse": "Changer d'agent (inverse)", + "command.agent.cycle.reverse.description": "Passer à l'agent précédent", + "command.model.variant.cycle": "Changer l'effort de réflexion", + "command.model.variant.cycle.description": "Passer au niveau d'effort suivant", + "command.permissions.autoaccept.enable": "Accepter automatiquement les modifications", + "command.permissions.autoaccept.disable": "Arrêter l'acceptation automatique des modifications", + "command.session.undo": "Annuler", + "command.session.undo.description": "Annuler le dernier message", + "command.session.redo": "Rétablir", + "command.session.redo.description": "Rétablir le dernier message annulé", + "command.session.compact": "Compacter la session", + "command.session.compact.description": "Résumer la session pour réduire la taille du contexte", + "command.session.fork": "Bifurquer à partir du message", + "command.session.fork.description": "Créer une nouvelle session à partir d'un message précédent", + "command.session.share": "Partager la session", + "command.session.share.description": "Partager cette session et copier l'URL dans le presse-papiers", + "command.session.unshare": "Ne plus partager la session", + "command.session.unshare.description": "Arrêter de partager cette session", + + "palette.search.placeholder": "Rechercher des fichiers et des commandes", + "palette.empty": "Aucun résultat trouvé", + "palette.group.commands": "Commandes", + "palette.group.files": "Fichiers", + + "dialog.provider.search.placeholder": "Rechercher des fournisseurs", + "dialog.provider.empty": "Aucun fournisseur trouvé", + "dialog.provider.group.popular": "Populaire", + "dialog.provider.group.other": "Autre", + "dialog.provider.tag.recommended": "Recommandé", + "dialog.provider.anthropic.note": "Connectez-vous avec Claude Pro/Max ou une clé API", + + "dialog.model.select.title": "Sélectionner un modèle", + "dialog.model.search.placeholder": "Rechercher des modèles", + "dialog.model.empty": "Aucun résultat de modèle", + "dialog.model.manage": "Gérer les modèles", + "dialog.model.manage.description": "Personnalisez les modèles qui apparaissent dans le sélecteur.", + + "dialog.model.unpaid.freeModels.title": "Modèles gratuits fournis par OpenCode", + "dialog.model.unpaid.addMore.title": "Ajouter plus de modèles de fournisseurs populaires", + + "dialog.provider.viewAll": "Voir tous les fournisseurs", + + "provider.connect.title": "Connecter {{provider}}", + "provider.connect.title.anthropicProMax": "Connexion avec Claude Pro/Max", + "provider.connect.selectMethod": "Sélectionnez la méthode de connexion pour {{provider}}.", + "provider.connect.method.apiKey": "Clé API", + "provider.connect.status.inProgress": "Autorisation en cours...", + "provider.connect.status.waiting": "En attente d'autorisation...", + "provider.connect.status.failed": "Échec de l'autorisation : {{error}}", + "provider.connect.apiKey.description": + "Entrez votre clé API {{provider}} pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + "provider.connect.apiKey.label": "Clé API {{provider}}", + "provider.connect.apiKey.placeholder": "Clé API", + "provider.connect.apiKey.required": "La clé API est requise", + "provider.connect.opencodeZen.line1": + "OpenCode Zen vous donne accès à un ensemble sélectionné de modèles fiables et optimisés pour les agents de codage.", + "provider.connect.opencodeZen.line2": + "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.", + "provider.connect.opencodeZen.visit.prefix": "Visitez ", + "provider.connect.opencodeZen.visit.suffix": " pour récupérer votre clé API.", + "provider.connect.oauth.code.visit.prefix": "Visitez ", + "provider.connect.oauth.code.visit.link": "ce lien", + "provider.connect.oauth.code.visit.suffix": + " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + "provider.connect.oauth.code.label": "Code d'autorisation {{method}}", + "provider.connect.oauth.code.placeholder": "Code d'autorisation", + "provider.connect.oauth.code.required": "Le code d'autorisation est requis", + "provider.connect.oauth.code.invalid": "Code d'autorisation invalide", + "provider.connect.oauth.auto.visit.prefix": "Visitez ", + "provider.connect.oauth.auto.visit.link": "ce lien", + "provider.connect.oauth.auto.visit.suffix": + " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Code de confirmation", + "provider.connect.toast.connected.title": "{{provider}} connecté", + "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.", + + "model.tag.free": "Gratuit", + "model.tag.latest": "Dernier", + + "common.search.placeholder": "Rechercher", + "common.loading": "Chargement", + "common.cancel": "Annuler", + "common.submit": "Soumettre", + "common.save": "Enregistrer", + "common.saving": "Enregistrement...", + "common.default": "Défaut", + "common.attachment": "pièce jointe", + + "prompt.placeholder.shell": "Entrez une commande shell...", + "prompt.placeholder.normal": 'Demandez n\'importe quoi... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "esc pour quitter", + + "prompt.example.1": "Corriger un TODO dans la base de code", + "prompt.example.2": "Quelle est la pile technique de ce projet ?", + "prompt.example.3": "Réparer les tests échoués", + "prompt.example.4": "Expliquer comment fonctionne l'authentification", + "prompt.example.5": "Trouver et corriger les vulnérabilités de sécurité", + "prompt.example.6": "Ajouter des tests unitaires pour le service utilisateur", + "prompt.example.7": "Refactoriser cette fonction pour être plus lisible", + "prompt.example.8": "Que signifie cette erreur ?", + "prompt.example.9": "Aidez-moi à déboguer ce problème", + "prompt.example.10": "Générer la documentation de l'API", + "prompt.example.11": "Optimiser les requêtes de base de données", + "prompt.example.12": "Ajouter une validation d'entrée", + "prompt.example.13": "Créer un nouveau composant pour...", + "prompt.example.14": "Comment déployer ce projet ?", + "prompt.example.15": "Vérifier mon code pour les meilleures pratiques", + "prompt.example.16": "Ajouter la gestion des erreurs à cette fonction", + "prompt.example.17": "Expliquer ce modèle regex", + "prompt.example.18": "Convertir ceci en TypeScript", + "prompt.example.19": "Ajouter des logs dans toute la base de code", + "prompt.example.20": "Quelles dépendances sont obsolètes ?", + "prompt.example.21": "Aidez-moi à écrire un script de migration", + "prompt.example.22": "Implémenter la mise en cache pour ce point de terminaison", + "prompt.example.23": "Ajouter la pagination à cette liste", + "prompt.example.24": "Créer une commande CLI pour...", + "prompt.example.25": "Comment fonctionnent les variables d'environnement ici ?", + + "prompt.popover.emptyResults": "Aucun résultat correspondant", + "prompt.popover.emptyCommands": "Aucune commande correspondante", + "prompt.dropzone.label": "Déposez des images ou des PDF ici", + "prompt.slash.badge.custom": "personnalisé", + "prompt.context.active": "actif", + "prompt.context.includeActiveFile": "Inclure le fichier actif", + "prompt.action.attachFile": "Joindre un fichier", + "prompt.action.send": "Envoyer", + "prompt.action.stop": "Arrêter", + + "prompt.toast.pasteUnsupported.title": "Collage non supporté", + "prompt.toast.pasteUnsupported.description": "Seules les images ou les PDF peuvent être collés ici.", + "prompt.toast.modelAgentRequired.title": "Sélectionnez un agent et un modèle", + "prompt.toast.modelAgentRequired.description": "Choisissez un agent et un modèle avant d'envoyer un message.", + "prompt.toast.worktreeCreateFailed.title": "Échec de la création de l'arbre de travail", + "prompt.toast.sessionCreateFailed.title": "Échec de la création de la session", + "prompt.toast.shellSendFailed.title": "Échec de l'envoi de la commande shell", + "prompt.toast.commandSendFailed.title": "Échec de l'envoi de la commande", + "prompt.toast.promptSendFailed.title": "Échec de l'envoi du message", + + "dialog.mcp.title": "MCPs", + "dialog.mcp.description": "{{enabled}} sur {{total}} activés", + "dialog.mcp.empty": "Aucun MCP configuré", + + "mcp.status.connected": "connecté", + "mcp.status.failed": "échoué", + "mcp.status.needs_auth": "nécessite auth", + "mcp.status.disabled": "désactivé", + + "dialog.fork.empty": "Aucun message à partir duquel bifurquer", + + "dialog.directory.search.placeholder": "Rechercher des dossiers", + "dialog.directory.empty": "Aucun dossier trouvé", + + "dialog.server.title": "Serveurs", + "dialog.server.description": "Changez le serveur OpenCode auquel cette application se connecte.", + "dialog.server.search.placeholder": "Rechercher des serveurs", + "dialog.server.empty": "Aucun serveur pour l'instant", + "dialog.server.add.title": "Ajouter un serveur", + "dialog.server.add.url": "URL du serveur", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Impossible de se connecter au serveur", + "dialog.server.add.checking": "Vérification...", + "dialog.server.add.button": "Ajouter", + "dialog.server.default.title": "Serveur par défaut", + "dialog.server.default.description": + "Se connecter à ce serveur au lancement de l'application au lieu de démarrer un serveur local. Nécessite un redémarrage.", + "dialog.server.default.none": "Aucun serveur sélectionné", + "dialog.server.default.set": "Définir le serveur actuel comme défaut", + "dialog.server.default.clear": "Effacer", + + "dialog.project.edit.title": "Modifier le projet", + "dialog.project.edit.name": "Nom", + "dialog.project.edit.icon": "Icône", + "dialog.project.edit.icon.alt": "Icône du projet", + "dialog.project.edit.icon.hint": "Cliquez ou faites glisser une image", + "dialog.project.edit.icon.recommended": "Recommandé : 128x128px", + "dialog.project.edit.color": "Couleur", + + "context.breakdown.title": "Répartition du contexte", + "context.breakdown.note": + "Répartition approximative des jetons d'entrée. \"Autre\" inclut les définitions d'outils et les frais généraux.", + "context.breakdown.system": "Système", + "context.breakdown.user": "Utilisateur", + "context.breakdown.assistant": "Assistant", + "context.breakdown.tool": "Appels d'outils", + "context.breakdown.other": "Autre", + + "context.systemPrompt.title": "Prompt système", + "context.rawMessages.title": "Messages bruts", + + "context.stats.session": "Session", + "context.stats.messages": "Messages", + "context.stats.provider": "Fournisseur", + "context.stats.model": "Modèle", + "context.stats.limit": "Limite de contexte", + "context.stats.totalTokens": "Total des jetons", + "context.stats.usage": "Utilisation", + "context.stats.inputTokens": "Jetons d'entrée", + "context.stats.outputTokens": "Jetons de sortie", + "context.stats.reasoningTokens": "Jetons de raisonnement", + "context.stats.cacheTokens": "Jetons de cache (lecture/écriture)", + "context.stats.userMessages": "Messages utilisateur", + "context.stats.assistantMessages": "Messages assistant", + "context.stats.totalCost": "Coût total", + "context.stats.sessionCreated": "Session créée", + "context.stats.lastActivity": "Dernière activité", + + "context.usage.tokens": "Jetons", + "context.usage.usage": "Utilisation", + "context.usage.cost": "Coût", + "context.usage.clickToView": "Cliquez pour voir le contexte", + + "language.en": "Anglais", + "language.zh": "Chinois", + "language.ko": "Coréen", + "language.de": "Allemand", + "language.es": "Espagnol", + "language.fr": "Français", + + "toast.language.title": "Langue", + "toast.language.description": "Passé à {{language}}", + + "toast.theme.title": "Thème changé", + "toast.scheme.title": "Schéma de couleurs", + + "toast.permissions.autoaccept.on.title": "Acceptation auto des modifications", + "toast.permissions.autoaccept.on.description": + "Les permissions de modification et d'écriture seront automatiquement approuvées", + "toast.permissions.autoaccept.off.title": "Arrêt acceptation auto des modifications", + "toast.permissions.autoaccept.off.description": + "Les permissions de modification et d'écriture nécessiteront une approbation", + + "toast.model.none.title": "Aucun modèle sélectionné", + "toast.model.none.description": "Connectez un fournisseur pour résumer cette session", + + "toast.file.loadFailed.title": "Échec du chargement du fichier", + + "toast.session.share.copyFailed.title": "Échec de la copie de l'URL dans le presse-papiers", + "toast.session.share.success.title": "Session partagée", + "toast.session.share.success.description": "URL de partage copiée dans le presse-papiers !", + "toast.session.share.failed.title": "Échec du partage de la session", + "toast.session.share.failed.description": "Une erreur s'est produite lors du partage de la session", + + "toast.session.unshare.success.title": "Session non partagée", + "toast.session.unshare.success.description": "Session non partagée avec succès !", + "toast.session.unshare.failed.title": "Échec de l'annulation du partage", + "toast.session.unshare.failed.description": "Une erreur s'est produite lors de l'annulation du partage de la session", + + "toast.session.listFailed.title": "Échec du chargement des sessions pour {{project}}", + + "toast.update.title": "Mise à jour disponible", + "toast.update.description": + "Une nouvelle version d'OpenCode ({{version}}) est maintenant disponible pour installation.", + "toast.update.action.installRestart": "Installer et redémarrer", + "toast.update.action.notYet": "Pas encore", + + "error.page.title": "Quelque chose s'est mal passé", + "error.page.description": "Une erreur s'est produite lors du chargement de l'application.", + "error.page.details.label": "Détails de l'erreur", + "error.page.action.restart": "Redémarrer", + "error.page.action.checking": "Vérification...", + "error.page.action.checkUpdates": "Vérifier les mises à jour", + "error.page.action.updateTo": "Mettre à jour vers {{version}}", + "error.page.report.prefix": "Veuillez signaler cette erreur à l'équipe OpenCode", + "error.page.report.discord": "sur Discord", + "error.page.version": "Version : {{version}}", + + "error.dev.rootNotFound": + "Élément racine introuvable. Avez-vous oublié de l'ajouter à votre index.html ? Ou peut-être que l'attribut id est mal orthographié ?", + + "error.globalSync.connectFailed": + "Impossible de se connecter au serveur. Y a-t-il un serveur en cours d'exécution à `{{url}}` ?", + + "error.chain.unknown": "Erreur inconnue", + "error.chain.causedBy": "Causé par :", + "error.chain.apiError": "Erreur API", + "error.chain.status": "Statut : {{status}}", + "error.chain.retryable": "Réessayable : {{retryable}}", + "error.chain.responseBody": "Corps de la réponse :\n{{body}}", + "error.chain.didYouMean": "Vouliez-vous dire : {{suggestions}}", + "error.chain.modelNotFound": "Modèle introuvable : {{provider}}/{{model}}", + "error.chain.checkConfig": "Vérifiez votre configuration (opencode.json) pour les noms de fournisseur/modèle", + "error.chain.mcpFailed": + "Le serveur MCP \"{{name}}\" a échoué. Notez qu'OpenCode ne supporte pas encore l'authentification MCP.", + "error.chain.providerAuthFailed": "Échec de l'authentification du fournisseur ({{provider}}) : {{message}}", + "error.chain.providerInitFailed": + 'Échec de l\'initialisation du fournisseur "{{provider}}". Vérifiez les identifiants et la configuration.', + "error.chain.configJsonInvalid": "Le fichier de configuration à {{path}} n'est pas un JSON(C) valide", + "error.chain.configJsonInvalidWithMessage": + "Le fichier de configuration à {{path}} n'est pas un JSON(C) valide : {{message}}", + "error.chain.configDirectoryTypo": + 'Le répertoire "{{dir}}" dans {{path}} n\'est pas valide. Renommez le répertoire en "{{suggestion}}" ou supprimez-le. C\'est une faute de frappe courante.', + "error.chain.configFrontmatterError": "Échec de l'analyse du frontmatter dans {{path}} :\n{{message}}", + "error.chain.configInvalid": "Le fichier de configuration à {{path}} est invalide", + "error.chain.configInvalidWithMessage": "Le fichier de configuration à {{path}} est invalide : {{message}}", + + "notification.permission.title": "Permission requise", + "notification.permission.description": "{{sessionTitle}} dans {{projectName}} a besoin d'une permission", + "notification.question.title": "Question", + "notification.question.description": "{{sessionTitle}} dans {{projectName}} a une question", + "notification.action.goToSession": "Aller à la session", + + "notification.session.responseReady.title": "Réponse prête", + "notification.session.error.title": "Erreur de session", + "notification.session.error.fallbackDescription": "Une erreur s'est produite", + + "home.recentProjects": "Projets récents", + "home.empty.title": "Aucun projet récent", + "home.empty.description": "Commencez par ouvrir un projet local", + + "session.tab.session": "Session", + "session.tab.review": "Revue", + "session.tab.context": "Contexte", + "session.review.filesChanged": "{{count}} fichiers modifiés", + "session.review.loadingChanges": "Chargement des modifications...", + "session.review.empty": "Aucune modification dans cette session pour l'instant", + "session.messages.renderEarlier": "Afficher les messages précédents", + "session.messages.loadingEarlier": "Chargement des messages précédents...", + "session.messages.loadEarlier": "Charger les messages précédents", + "session.messages.loading": "Chargement des messages...", + + "session.context.addToContext": "Ajouter {{selection}} au contexte", + + "session.new.worktree.main": "Branche principale", + "session.new.worktree.mainWithBranch": "Branche principale ({{branch}})", + "session.new.worktree.create": "Créer un nouvel arbre de travail", + "session.new.lastModified": "Dernière modification", + + "session.header.search.placeholder": "Rechercher {{project}}", + + "session.share.popover.title": "Publier sur le web", + "session.share.popover.description.shared": + "Cette session est publique sur le web. Elle est accessible à toute personne disposant du lien.", + "session.share.popover.description.unshared": + "Partager la session publiquement sur le web. Elle sera accessible à toute personne disposant du lien.", + "session.share.action.share": "Partager", + "session.share.action.publish": "Publier", + "session.share.action.publishing": "Publication...", + "session.share.action.unpublish": "Dépublier", + "session.share.action.unpublishing": "Dépublication...", + "session.share.action.view": "Voir", + "session.share.copy.copied": "Copié", + "session.share.copy.copyLink": "Copier le lien", + + "lsp.tooltip.none": "Aucun serveur LSP", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Chargement du prompt...", + "terminal.loading": "Chargement du terminal...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + + "common.closeTab": "Fermer l'onglet", + "common.dismiss": "Ignorer", + "common.requestFailed": "La demande a échoué", + "common.moreOptions": "Plus d'options", + "common.learnMore": "En savoir plus", + "common.rename": "Renommer", + "common.reset": "Réinitialiser", + "common.delete": "Supprimer", + "common.close": "Fermer", + "common.edit": "Modifier", + "common.loadMore": "Charger plus", + + "sidebar.settings": "Paramètres", + "sidebar.help": "Aide", + "sidebar.workspaces.enable": "Activer les espaces de travail", + "sidebar.workspaces.disable": "Désactiver les espaces de travail", + "sidebar.gettingStarted.title": "Commencer", + "sidebar.gettingStarted.line1": + "OpenCode inclut des modèles gratuits pour que vous puissiez commencer immédiatement.", + "sidebar.gettingStarted.line2": + "Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.", + "sidebar.project.recentSessions": "Sessions récentes", + "sidebar.project.viewAllSessions": "Voir toutes les sessions", + + "settings.section.desktop": "Bureau", + "settings.tab.general": "Général", + "settings.tab.shortcuts": "Raccourcis", + + "settings.general.section.appearance": "Apparence", + "settings.general.section.notifications": "Notifications système", + "settings.general.section.sounds": "Effets sonores", + + "settings.general.row.language.title": "Langue", + "settings.general.row.language.description": "Changer la langue d'affichage pour OpenCode", + "settings.general.row.appearance.title": "Apparence", + "settings.general.row.appearance.description": "Personnaliser l'apparence d'OpenCode sur votre appareil", + "settings.general.row.theme.title": "Thème", + "settings.general.row.theme.description": "Personnaliser le thème d'OpenCode.", + "settings.general.row.font.title": "Police", + "settings.general.row.font.description": "Personnaliser la police mono utilisée dans les blocs de code", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": + "Afficher une notification système lorsque l'agent a terminé ou nécessite une attention", + "settings.general.notifications.permissions.title": "Permissions", + "settings.general.notifications.permissions.description": + "Afficher une notification système lorsqu'une permission est requise", + "settings.general.notifications.errors.title": "Erreurs", + "settings.general.notifications.errors.description": "Afficher une notification système lorsqu'une erreur se produit", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Jouer un son lorsque l'agent a terminé ou nécessite une attention", + "settings.general.sounds.permissions.title": "Permissions", + "settings.general.sounds.permissions.description": "Jouer un son lorsqu'une permission est requise", + "settings.general.sounds.errors.title": "Erreurs", + "settings.general.sounds.errors.description": "Jouer un son lorsqu'une erreur se produit", + + "settings.shortcuts.title": "Raccourcis clavier", + "settings.shortcuts.reset.button": "Rétablir les défauts", + "settings.shortcuts.reset.toast.title": "Raccourcis réinitialisés", + "settings.shortcuts.reset.toast.description": "Les raccourcis clavier ont été réinitialisés aux valeurs par défaut.", + "settings.shortcuts.conflict.title": "Raccourci déjà utilisé", + "settings.shortcuts.conflict.description": "{{keybind}} est déjà assigné à {{titles}}.", + "settings.shortcuts.unassigned": "Non assigné", + "settings.shortcuts.pressKeys": "Appuyez sur les touches", + + "settings.shortcuts.group.general": "Général", + "settings.shortcuts.group.session": "Session", + "settings.shortcuts.group.navigation": "Navigation", + "settings.shortcuts.group.modelAndAgent": "Modèle et agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Fournisseurs", + "settings.providers.description": "Les paramètres des fournisseurs seront configurables ici.", + "settings.models.title": "Modèles", + "settings.models.description": "Les paramètres des modèles seront configurables ici.", + "settings.agents.title": "Agents", + "settings.agents.description": "Les paramètres des agents seront configurables ici.", + "settings.commands.title": "Commandes", + "settings.commands.description": "Les paramètres des commandes seront configurables ici.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "Les paramètres MCP seront configurables ici.", + + "settings.permissions.title": "Permissions", + "settings.permissions.description": "Contrôlez les outils que le serveur peut utiliser par défaut.", + "settings.permissions.section.tools": "Outils", + "settings.permissions.toast.updateFailed.title": "Échec de la mise à jour des permissions", + + "settings.permissions.action.allow": "Autoriser", + "settings.permissions.action.ask": "Demander", + "settings.permissions.action.deny": "Refuser", + + "settings.permissions.tool.read.title": "Lire", + "settings.permissions.tool.read.description": "Lecture d'un fichier (correspond au chemin du fichier)", + "settings.permissions.tool.edit.title": "Modifier", + "settings.permissions.tool.edit.description": + "Modifier des fichiers, y compris les modifications, écritures, patchs et multi-modifications", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Correspondre aux fichiers utilisant des modèles glob", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": + "Rechercher dans le contenu des fichiers à l'aide d'expressions régulières", + "settings.permissions.tool.list.title": "Lister", + "settings.permissions.tool.list.description": "Lister les fichiers dans un répertoire", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Exécuter des commandes shell", + "settings.permissions.tool.task.title": "Tâche", + "settings.permissions.tool.task.description": "Lancer des sous-agents", + "settings.permissions.tool.skill.title": "Compétence", + "settings.permissions.tool.skill.description": "Charger une compétence par son nom", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Exécuter des requêtes de serveur de langage", + "settings.permissions.tool.todoread.title": "Lire Todo", + "settings.permissions.tool.todoread.description": "Lire la liste de tâches", + "settings.permissions.tool.todowrite.title": "Écrire Todo", + "settings.permissions.tool.todowrite.description": "Mettre à jour la liste de tâches", + "settings.permissions.tool.webfetch.title": "Récupération Web", + "settings.permissions.tool.webfetch.description": "Récupérer le contenu d'une URL", + "settings.permissions.tool.websearch.title": "Recherche Web", + "settings.permissions.tool.websearch.description": "Rechercher sur le web", + "settings.permissions.tool.codesearch.title": "Recherche de code", + "settings.permissions.tool.codesearch.description": "Rechercher du code sur le web", + "settings.permissions.tool.external_directory.title": "Répertoire externe", + "settings.permissions.tool.external_directory.description": "Accéder aux fichiers en dehors du répertoire du projet", + "settings.permissions.tool.doom_loop.title": "Boucle infernale", + "settings.permissions.tool.doom_loop.description": "Détecter les appels d'outils répétés avec une entrée identique", + + "workspace.new": "Nouvel espace de travail", + "workspace.type.local": "local", + "workspace.type.sandbox": "bac à sable", + "workspace.create.failed.title": "Échec de la création de l'espace de travail", + "workspace.delete.failed.title": "Échec de la suppression de l'espace de travail", + "workspace.resetting.title": "Réinitialisation de l'espace de travail", + "workspace.resetting.description": "Cela peut prendre une minute.", + "workspace.reset.failed.title": "Échec de la réinitialisation de l'espace de travail", + "workspace.reset.success.title": "Espace de travail réinitialisé", + "workspace.reset.success.description": "L'espace de travail correspond maintenant à la branche par défaut.", + "workspace.status.checking": "Vérification des modifications non fusionnées...", + "workspace.status.error": "Impossible de vérifier le statut git.", + "workspace.status.clean": "Aucune modification non fusionnée détectée.", + "workspace.status.dirty": "Modifications non fusionnées détectées dans cet espace de travail.", + "workspace.delete.title": "Supprimer l'espace de travail", + "workspace.delete.confirm": 'Supprimer l\'espace de travail "{{name}}" ?', + "workspace.delete.button": "Supprimer l'espace de travail", + "workspace.reset.title": "Réinitialiser l'espace de travail", + "workspace.reset.confirm": 'Réinitialiser l\'espace de travail "{{name}}" ?', + "workspace.reset.button": "Réinitialiser l'espace de travail", + "workspace.reset.archived.none": "Aucune session active ne sera archivée.", + "workspace.reset.archived.one": "1 session sera archivée.", + "workspace.reset.archived.many": "{{count}} sessions seront archivées.", + "workspace.reset.note": "Cela réinitialisera l'espace de travail pour correspondre à la branche par défaut.", +} diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 87be2871fbd..fefb7c723b9 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -274,6 +274,7 @@ export const dict = { "language.ko": "한국어", "language.de": "독일어", "language.es": "스페인어", + "language.fr": "프랑스어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 3c557ae8e01..c0b6d7c15b2 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -270,6 +270,7 @@ export const dict = { "language.ko": "韩语", "language.de": "德语", "language.es": "西班牙语", + "language.fr": "法语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/fr.ts b/packages/ui/src/i18n/fr.ts new file mode 100644 index 00000000000..abc01b3fe07 --- /dev/null +++ b/packages/ui/src/i18n/fr.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "Modifications de la session", + "ui.sessionReview.diffStyle.unified": "Unifié", + "ui.sessionReview.diffStyle.split": "Divisé", + "ui.sessionReview.expandAll": "Tout développer", + "ui.sessionReview.collapseAll": "Tout réduire", + + "ui.sessionTurn.steps.show": "Afficher les étapes", + "ui.sessionTurn.steps.hide": "Masquer les étapes", + "ui.sessionTurn.summary.response": "Réponse", + "ui.sessionTurn.diff.showMore": "Afficher plus de modifications ({{count}})", + + "ui.sessionTurn.retry.retrying": "nouvelle tentative", + "ui.sessionTurn.retry.inSeconds": "dans {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Délégation du travail", + "ui.sessionTurn.status.planning": "Planification des prochaines étapes", + "ui.sessionTurn.status.gatheringContext": "Collecte du contexte", + "ui.sessionTurn.status.searchingCodebase": "Recherche dans la base de code", + "ui.sessionTurn.status.searchingWeb": "Recherche sur le web", + "ui.sessionTurn.status.makingEdits": "Application des modifications", + "ui.sessionTurn.status.runningCommands": "Exécution des commandes", + "ui.sessionTurn.status.thinking": "Réflexion", + "ui.sessionTurn.status.thinkingWithTopic": "Réflexion - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Rassemblement des idées", + "ui.sessionTurn.status.consideringNextSteps": "Examen des prochaines étapes", + + "ui.messagePart.diagnostic.error": "Erreur", + "ui.messagePart.title.edit": "Modifier", + "ui.messagePart.title.write": "Écrire", + "ui.messagePart.option.typeOwnAnswer": "Tapez votre propre réponse", + "ui.messagePart.review.title": "Passez en revue vos réponses", + + "ui.list.loading": "Chargement", + "ui.list.empty": "Aucun résultat", + "ui.list.emptyWithFilter.prefix": "Aucun résultat pour", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Nouveau message", + + "ui.textField.copyToClipboard": "Copier dans le presse-papiers", + "ui.textField.copied": "Copié", + + "ui.imagePreview.alt": "Aperçu de l'image", + + "ui.tool.read": "Lire", + "ui.tool.list": "Lister", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webfetch", + "ui.tool.shell": "Shell", + "ui.tool.patch": "Patch", + "ui.tool.todos": "Tâches", + "ui.tool.todos.read": "Lire les tâches", + "ui.tool.questions": "Questions", + "ui.tool.agent": "Agent {{type}}", + + "ui.common.file.one": "fichier", + "ui.common.file.other": "fichiers", + "ui.common.question.one": "question", + "ui.common.question.other": "questions", + + "ui.common.add": "Ajouter", + "ui.common.cancel": "Annuler", + "ui.common.confirm": "Confirmer", + "ui.common.dismiss": "Ignorer", + "ui.common.next": "Suivant", + "ui.common.submit": "Soumettre", + + "ui.permission.deny": "Refuser", + "ui.permission.allowAlways": "Toujours autoriser", + "ui.permission.allowOnce": "Autoriser une fois", + + "ui.message.expand": "Développer le message", + "ui.message.collapse": "Réduire le message", + "ui.message.copy": "Copier", + "ui.message.copied": "Copié !", + "ui.message.attachment.alt": "pièce jointe", + + "ui.patch.action.deleted": "Supprimé", + "ui.patch.action.created": "Créé", + "ui.patch.action.moved": "Déplacé", + "ui.patch.action.patched": "Corrigé", + + "ui.question.subtitle.answered": "{{count}} répondu(s)", + "ui.question.answer.none": "(pas de réponse)", + "ui.question.review.notAnswered": "(non répondu)", + "ui.question.multiHint": "(sélectionnez tout ce qui s'applique)", + "ui.question.custom.placeholder": "Tapez votre réponse...", +} From 4a386906dd0f323fb541dfee0153cea2d89388fd Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:39:09 -0600 Subject: [PATCH 244/426] feat(app): japanese translations --- packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 1 + packages/app/src/i18n/fr.ts | 1 + packages/app/src/i18n/ja.ts | 550 ++++++++++++++++++++++++++++++++++++ packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/ja.ts | 90 ++++++ 8 files changed, 646 insertions(+) create mode 100644 packages/app/src/i18n/ja.ts create mode 100644 packages/ui/src/i18n/ja.ts diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 81b14b32988..b7eb698821e 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -278,6 +278,7 @@ export const dict = { "language.de": "Deutsch", "language.es": "Spanisch", "language.fr": "Französisch", + "language.ja": "Japanisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 81d3f1043be..6525b07bee7 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -272,6 +272,7 @@ export const dict = { "language.de": "German", "language.es": "Spanish", "language.fr": "French", + "language.ja": "Japanese", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 16c70853f89..39864ce5dc4 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -273,6 +273,7 @@ export const dict = { "language.de": "Alemán", "language.es": "Español", "language.fr": "Francés", + "language.ja": "Japonés", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 6b03aee1446..9522e10d860 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -273,6 +273,7 @@ export const dict = { "language.de": "Allemand", "language.es": "Espagnol", "language.fr": "Français", + "language.ja": "Japonais", "toast.language.title": "Langue", "toast.language.description": "Passé à {{language}}", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts new file mode 100644 index 00000000000..4da0c160fe7 --- /dev/null +++ b/packages/app/src/i18n/ja.ts @@ -0,0 +1,550 @@ +export const dict = { + "command.category.suggested": "おすすめ", + "command.category.view": "表示", + "command.category.project": "プロジェクト", + "command.category.provider": "プロバイダー", + "command.category.server": "サーバー", + "command.category.session": "セッション", + "command.category.theme": "テーマ", + "command.category.language": "言語", + "command.category.file": "ファイル", + "command.category.terminal": "ターミナル", + "command.category.model": "モデル", + "command.category.mcp": "MCP", + "command.category.agent": "エージェント", + "command.category.permissions": "権限", + + "theme.scheme.system": "システム", + "theme.scheme.light": "ライト", + "theme.scheme.dark": "ダーク", + + "command.sidebar.toggle": "サイドバーの切り替え", + "command.project.open": "プロジェクトを開く", + "command.provider.connect": "プロバイダーに接続", + "command.server.switch": "サーバーの切り替え", + "command.session.previous": "前のセッション", + "command.session.next": "次のセッション", + "command.session.archive": "セッションをアーカイブ", + + "command.palette": "コマンドパレット", + + "command.theme.cycle": "テーマの切り替え", + "command.theme.set": "テーマを使用: {{theme}}", + "command.theme.scheme.cycle": "配色の切り替え", + "command.theme.scheme.set": "配色を使用: {{scheme}}", + + "command.language.cycle": "言語の切り替え", + "command.language.set": "言語を使用: {{language}}", + + "command.session.new": "新しいセッション", + "command.file.open": "ファイルを開く", + "command.file.open.description": "ファイルとコマンドを検索", + "command.terminal.toggle": "ターミナルの切り替え", + "command.review.toggle": "レビューの切り替え", + "command.terminal.new": "新しいターミナル", + "command.terminal.new.description": "新しいターミナルタブを作成", + "command.steps.toggle": "ステップの切り替え", + "command.steps.toggle.description": "現在のメッセージのステップを表示または非表示", + "command.message.previous": "前のメッセージ", + "command.message.previous.description": "前のユーザーメッセージに移動", + "command.message.next": "次のメッセージ", + "command.message.next.description": "次のユーザーメッセージに移動", + "command.model.choose": "モデルを選択", + "command.model.choose.description": "別のモデルを選択", + "command.mcp.toggle": "MCPの切り替え", + "command.mcp.toggle.description": "MCPを切り替える", + "command.agent.cycle": "エージェントの切り替え", + "command.agent.cycle.description": "次のエージェントに切り替え", + "command.agent.cycle.reverse": "エージェントを逆順に切り替え", + "command.agent.cycle.reverse.description": "前のエージェントに切り替え", + "command.model.variant.cycle": "思考レベルの切り替え", + "command.model.variant.cycle.description": "次の思考レベルに切り替え", + "command.permissions.autoaccept.enable": "編集を自動承認", + "command.permissions.autoaccept.disable": "編集の自動承認を停止", + "command.session.undo": "元に戻す", + "command.session.undo.description": "最後のメッセージを元に戻す", + "command.session.redo": "やり直す", + "command.session.redo.description": "元に戻したメッセージをやり直す", + "command.session.compact": "セッションを圧縮", + "command.session.compact.description": "セッションを要約してコンテキストサイズを削減", + "command.session.fork": "メッセージからフォーク", + "command.session.fork.description": "以前のメッセージから新しいセッションを作成", + "command.session.share": "セッションを共有", + "command.session.share.description": "このセッションを共有しURLをクリップボードにコピー", + "command.session.unshare": "セッションの共有を停止", + "command.session.unshare.description": "このセッションの共有を停止", + + "palette.search.placeholder": "ファイルとコマンドを検索", + "palette.empty": "結果が見つかりません", + "palette.group.commands": "コマンド", + "palette.group.files": "ファイル", + + "dialog.provider.search.placeholder": "プロバイダーを検索", + "dialog.provider.empty": "プロバイダーが見つかりません", + "dialog.provider.group.popular": "人気", + "dialog.provider.group.other": "その他", + "dialog.provider.tag.recommended": "推奨", + "dialog.provider.anthropic.note": "Claude Pro/MaxまたはAPIキーで接続", + + "dialog.model.select.title": "モデルを選択", + "dialog.model.search.placeholder": "モデルを検索", + "dialog.model.empty": "モデルが見つかりません", + "dialog.model.manage": "モデルを管理", + "dialog.model.manage.description": "モデルセレクターに表示するモデルをカスタマイズします。", + + "dialog.model.unpaid.freeModels.title": "OpenCodeが提供する無料モデル", + "dialog.model.unpaid.addMore.title": "人気のプロバイダーからモデルを追加", + + "dialog.provider.viewAll": "すべてのプロバイダーを表示", + + "provider.connect.title": "{{provider}}を接続", + "provider.connect.title.anthropicProMax": "Claude Pro/Maxでログイン", + "provider.connect.selectMethod": "{{provider}}のログイン方法を選択してください。", + "provider.connect.method.apiKey": "APIキー", + "provider.connect.status.inProgress": "認証中...", + "provider.connect.status.waiting": "認証を待機中...", + "provider.connect.status.failed": "認証に失敗しました: {{error}}", + "provider.connect.apiKey.description": + "{{provider}}のAPIキーを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用します。", + "provider.connect.apiKey.label": "{{provider}} APIキー", + "provider.connect.apiKey.placeholder": "APIキー", + "provider.connect.apiKey.required": "APIキーが必要です", + "provider.connect.opencodeZen.line1": + "OpenCode Zenは、コーディングエージェント向けに最適化された信頼性の高いモデルへのアクセスを提供します。", + "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。", + "provider.connect.opencodeZen.visit.prefix": " ", + "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。", + "provider.connect.oauth.code.visit.prefix": " ", + "provider.connect.oauth.code.visit.link": "このリンク", + "provider.connect.oauth.code.visit.suffix": + " にアクセスして認証コードを取得し、アカウントを接続してOpenCodeで{{provider}}モデルを使用してください。", + "provider.connect.oauth.code.label": "{{method}} 認証コード", + "provider.connect.oauth.code.placeholder": "認証コード", + "provider.connect.oauth.code.required": "認証コードが必要です", + "provider.connect.oauth.code.invalid": "無効な認証コード", + "provider.connect.oauth.auto.visit.prefix": " ", + "provider.connect.oauth.auto.visit.link": "このリンク", + "provider.connect.oauth.auto.visit.suffix": + " にアクセスし、以下のコードを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用してください。", + "provider.connect.oauth.auto.confirmationCode": "確認コード", + "provider.connect.toast.connected.title": "{{provider}}が接続されました", + "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。", + + "model.tag.free": "無料", + "model.tag.latest": "最新", + + "common.search.placeholder": "検索", + "common.loading": "読み込み中", + "common.cancel": "キャンセル", + "common.submit": "送信", + "common.save": "保存", + "common.saving": "保存中...", + "common.default": "デフォルト", + "common.attachment": "添付ファイル", + + "prompt.placeholder.shell": "シェルコマンドを入力...", + "prompt.placeholder.normal": '何でも聞いてください... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "escで終了", + + "prompt.example.1": "コードベースのTODOを修正", + "prompt.example.2": "このプロジェクトの技術スタックは何ですか?", + "prompt.example.3": "壊れたテストを修正", + "prompt.example.4": "認証の仕組みを説明して", + "prompt.example.5": "セキュリティの脆弱性を見つけて修正", + "prompt.example.6": "ユーザーサービスのユニットテストを追加", + "prompt.example.7": "この関数を読みやすくリファクタリング", + "prompt.example.8": "このエラーはどういう意味ですか?", + "prompt.example.9": "この問題のデバッグを手伝って", + "prompt.example.10": "APIドキュメントを生成", + "prompt.example.11": "データベースクエリを最適化", + "prompt.example.12": "入力バリデーションを追加", + "prompt.example.13": "〜の新しいコンポーネントを作成", + "prompt.example.14": "このプロジェクトをデプロイするには?", + "prompt.example.15": "ベストプラクティスの観点でコードをレビュー", + "prompt.example.16": "この関数にエラーハンドリングを追加", + "prompt.example.17": "この正規表現パターンを説明して", + "prompt.example.18": "これをTypeScriptに変換", + "prompt.example.19": "コードベース全体にログを追加", + "prompt.example.20": "古い依存関係はどれですか?", + "prompt.example.21": "マイグレーションスクリプトの作成を手伝って", + "prompt.example.22": "このエンドポイントにキャッシュを実装", + "prompt.example.23": "このリストにページネーションを追加", + "prompt.example.24": "〜のCLIコマンドを作成", + "prompt.example.25": "ここでは環境変数はどう機能しますか?", + + "prompt.popover.emptyResults": "一致する結果がありません", + "prompt.popover.emptyCommands": "一致するコマンドがありません", + "prompt.dropzone.label": "画像またはPDFをここにドロップ", + "prompt.slash.badge.custom": "カスタム", + "prompt.context.active": "アクティブ", + "prompt.context.includeActiveFile": "アクティブなファイルを含める", + "prompt.action.attachFile": "ファイルを添付", + "prompt.action.send": "送信", + "prompt.action.stop": "停止", + + "prompt.toast.pasteUnsupported.title": "サポートされていない貼り付け", + "prompt.toast.pasteUnsupported.description": "ここでは画像またはPDFのみ貼り付け可能です。", + "prompt.toast.modelAgentRequired.title": "エージェントとモデルを選択", + "prompt.toast.modelAgentRequired.description": "プロンプトを送信する前にエージェントとモデルを選択してください。", + "prompt.toast.worktreeCreateFailed.title": "ワークツリーの作成に失敗しました", + "prompt.toast.sessionCreateFailed.title": "セッションの作成に失敗しました", + "prompt.toast.shellSendFailed.title": "シェルコマンドの送信に失敗しました", + "prompt.toast.commandSendFailed.title": "コマンドの送信に失敗しました", + "prompt.toast.promptSendFailed.title": "プロンプトの送信に失敗しました", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "{{total}}個中{{enabled}}個が有効", + "dialog.mcp.empty": "MCPが設定されていません", + + "mcp.status.connected": "接続済み", + "mcp.status.failed": "失敗", + "mcp.status.needs_auth": "認証が必要", + "mcp.status.disabled": "無効", + + "dialog.fork.empty": "フォーク元のメッセージがありません", + + "dialog.directory.search.placeholder": "フォルダを検索", + "dialog.directory.empty": "フォルダが見つかりません", + + "dialog.server.title": "サーバー", + "dialog.server.description": "このアプリが接続するOpenCodeサーバーを切り替えます。", + "dialog.server.search.placeholder": "サーバーを検索", + "dialog.server.empty": "サーバーはまだありません", + "dialog.server.add.title": "サーバーを追加", + "dialog.server.add.url": "サーバーURL", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "サーバーに接続できませんでした", + "dialog.server.add.checking": "確認中...", + "dialog.server.add.button": "追加", + "dialog.server.default.title": "デフォルトサーバー", + "dialog.server.default.description": + "ローカルサーバーを起動する代わりに、アプリ起動時にこのサーバーに接続します。再起動が必要です。", + "dialog.server.default.none": "サーバーが選択されていません", + "dialog.server.default.set": "現在のサーバーをデフォルトに設定", + "dialog.server.default.clear": "クリア", + + "dialog.project.edit.title": "プロジェクトを編集", + "dialog.project.edit.name": "名前", + "dialog.project.edit.icon": "アイコン", + "dialog.project.edit.icon.alt": "プロジェクトアイコン", + "dialog.project.edit.icon.hint": "クリックまたは画像をドラッグ", + "dialog.project.edit.icon.recommended": "推奨: 128x128px", + "dialog.project.edit.color": "色", + + "context.breakdown.title": "コンテキストの内訳", + "context.breakdown.note": '入力トークンのおおよその内訳です。"その他"にはツールの定義やオーバーヘッドが含まれます。', + "context.breakdown.system": "システム", + "context.breakdown.user": "ユーザー", + "context.breakdown.assistant": "アシスタント", + "context.breakdown.tool": "ツール呼び出し", + "context.breakdown.other": "その他", + + "context.systemPrompt.title": "システムプロンプト", + "context.rawMessages.title": "生のメッセージ", + + "context.stats.session": "セッション", + "context.stats.messages": "メッセージ", + "context.stats.provider": "プロバイダー", + "context.stats.model": "モデル", + "context.stats.limit": "コンテキスト制限", + "context.stats.totalTokens": "総トークン数", + "context.stats.usage": "使用量", + "context.stats.inputTokens": "入力トークン", + "context.stats.outputTokens": "出力トークン", + "context.stats.reasoningTokens": "推論トークン", + "context.stats.cacheTokens": "キャッシュトークン (読込/書込)", + "context.stats.userMessages": "ユーザーメッセージ", + "context.stats.assistantMessages": "アシスタントメッセージ", + "context.stats.totalCost": "総コスト", + "context.stats.sessionCreated": "セッション作成日時", + "context.stats.lastActivity": "最終アクティビティ", + + "context.usage.tokens": "トークン", + "context.usage.usage": "使用量", + "context.usage.cost": "コスト", + "context.usage.clickToView": "クリックしてコンテキストを表示", + + "language.en": "英語", + "language.zh": "中国語", + "language.ko": "韓国語", + "language.de": "ドイツ語", + "language.es": "スペイン語", + "language.fr": "フランス語", + "language.ja": "日本語", + + "toast.language.title": "言語", + "toast.language.description": "{{language}}に切り替えました", + + "toast.theme.title": "テーマが切り替わりました", + "toast.scheme.title": "配色", + + "toast.permissions.autoaccept.on.title": "編集を自動承認中", + "toast.permissions.autoaccept.on.description": "編集と書き込みの権限は自動的に承認されます", + "toast.permissions.autoaccept.off.title": "編集の自動承認を停止しました", + "toast.permissions.autoaccept.off.description": "編集と書き込みの権限には承認が必要です", + + "toast.model.none.title": "モデルが選択されていません", + "toast.model.none.description": "このセッションを要約するにはプロバイダーを接続してください", + + "toast.file.loadFailed.title": "ファイルの読み込みに失敗しました", + + "toast.session.share.copyFailed.title": "URLのコピーに失敗しました", + "toast.session.share.success.title": "セッションを共有しました", + "toast.session.share.success.description": "共有URLをクリップボードにコピーしました!", + "toast.session.share.failed.title": "セッションの共有に失敗しました", + "toast.session.share.failed.description": "セッションの共有中にエラーが発生しました", + + "toast.session.unshare.success.title": "セッションの共有を解除しました", + "toast.session.unshare.success.description": "セッションの共有解除に成功しました!", + "toast.session.unshare.failed.title": "セッションの共有解除に失敗しました", + "toast.session.unshare.failed.description": "セッションの共有解除中にエラーが発生しました", + + "toast.session.listFailed.title": "{{project}}のセッション読み込みに失敗しました", + + "toast.update.title": "アップデートが利用可能です", + "toast.update.description": "OpenCodeの新しいバージョン ({{version}}) がインストール可能です。", + "toast.update.action.installRestart": "インストールして再起動", + "toast.update.action.notYet": "今はしない", + + "error.page.title": "問題が発生しました", + "error.page.description": "アプリケーションの読み込み中にエラーが発生しました。", + "error.page.details.label": "エラー詳細", + "error.page.action.restart": "再起動", + "error.page.action.checking": "確認中...", + "error.page.action.checkUpdates": "アップデートを確認", + "error.page.action.updateTo": "{{version}}にアップデート", + "error.page.report.prefix": "このエラーをOpenCodeチームに報告してください: ", + "error.page.report.discord": "Discord", + "error.page.version": "バージョン: {{version}}", + + "error.dev.rootNotFound": + "ルート要素が見つかりません。index.htmlに追加するのを忘れていませんか?またはid属性のスペルが間違っていませんか?", + + "error.globalSync.connectFailed": "サーバーに接続できませんでした。`{{url}}`でサーバーが実行されていますか?", + + "error.chain.unknown": "不明なエラー", + "error.chain.causedBy": "原因:", + "error.chain.apiError": "APIエラー", + "error.chain.status": "ステータス: {{status}}", + "error.chain.retryable": "再試行可能: {{retryable}}", + "error.chain.responseBody": "レスポンス本文:\n{{body}}", + "error.chain.didYouMean": "もしかして: {{suggestions}}", + "error.chain.modelNotFound": "モデルが見つかりません: {{provider}}/{{model}}", + "error.chain.checkConfig": "config (opencode.json) のプロバイダー/モデル名を確認してください", + "error.chain.mcpFailed": 'MCPサーバー "{{name}}" が失敗しました。注意: OpenCodeはまだMCP認証をサポートしていません。', + "error.chain.providerAuthFailed": "プロバイダー認証に失敗しました ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'プロバイダー "{{provider}}" の初期化に失敗しました。認証情報と設定を確認してください。', + "error.chain.configJsonInvalid": "{{path}} の設定ファイルは有効なJSON(C)ではありません", + "error.chain.configJsonInvalidWithMessage": "{{path}} の設定ファイルは有効なJSON(C)ではありません: {{message}}", + "error.chain.configDirectoryTypo": + '{{path}} 内のディレクトリ "{{dir}}" は無効です。"{{suggestion}}" に名前を変更するか削除してください。これはよくあるタイプミスです。', + "error.chain.configFrontmatterError": "{{path}} のフロントマターの解析に失敗しました:\n{{message}}", + "error.chain.configInvalid": "{{path}} の設定ファイルが無効です", + "error.chain.configInvalidWithMessage": "{{path}} の設定ファイルが無効です: {{message}}", + + "notification.permission.title": "権限が必要です", + "notification.permission.description": "{{projectName}} の {{sessionTitle}} が権限を必要としています", + "notification.question.title": "質問", + "notification.question.description": "{{projectName}} の {{sessionTitle}} から質問があります", + "notification.action.goToSession": "セッションへ移動", + + "notification.session.responseReady.title": "応答の準備ができました", + "notification.session.error.title": "セッションエラー", + "notification.session.error.fallbackDescription": "エラーが発生しました", + + "home.recentProjects": "最近のプロジェクト", + "home.empty.title": "最近のプロジェクトはありません", + "home.empty.description": "ローカルプロジェクトを開いて始めましょう", + + "session.tab.session": "セッション", + "session.tab.review": "レビュー", + "session.tab.context": "コンテキスト", + "session.review.filesChanged": "{{count}} ファイル変更", + "session.review.loadingChanges": "変更を読み込み中...", + "session.review.empty": "このセッションでの変更はまだありません", + "session.messages.renderEarlier": "以前のメッセージを表示", + "session.messages.loadingEarlier": "以前のメッセージを読み込み中...", + "session.messages.loadEarlier": "以前のメッセージを読み込む", + "session.messages.loading": "メッセージを読み込み中...", + + "session.context.addToContext": "{{selection}}をコンテキストに追加", + + "session.new.worktree.main": "メインブランチ", + "session.new.worktree.mainWithBranch": "メインブランチ ({{branch}})", + "session.new.worktree.create": "新しいワークツリーを作成", + "session.new.lastModified": "最終更新", + + "session.header.search.placeholder": "{{project}}を検索", + + "session.share.popover.title": "ウェブで公開", + "session.share.popover.description.shared": + "このセッションはウェブで公開されています。リンクを知っている人なら誰でもアクセスできます。", + "session.share.popover.description.unshared": + "セッションをウェブで公開します。リンクを知っている人なら誰でもアクセスできるようになります。", + "session.share.action.share": "共有", + "session.share.action.publish": "公開", + "session.share.action.publishing": "公開中...", + "session.share.action.unpublish": "非公開にする", + "session.share.action.unpublishing": "非公開にしています...", + "session.share.action.view": "表示", + "session.share.copy.copied": "コピーしました", + "session.share.copy.copyLink": "リンクをコピー", + + "lsp.tooltip.none": "LSPサーバーなし", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "プロンプトを読み込み中...", + "terminal.loading": "ターミナルを読み込み中...", + "terminal.title": "ターミナル", + "terminal.title.numbered": "ターミナル {{number}}", + + "common.closeTab": "タブを閉じる", + "common.dismiss": "閉じる", + "common.requestFailed": "リクエスト失敗", + "common.moreOptions": "その他のオプション", + "common.learnMore": "詳細", + "common.rename": "名前変更", + "common.reset": "リセット", + "common.delete": "削除", + "common.close": "閉じる", + "common.edit": "編集", + "common.loadMore": "さらに読み込む", + + "sidebar.settings": "設定", + "sidebar.help": "ヘルプ", + "sidebar.workspaces.enable": "ワークスペースを有効化", + "sidebar.workspaces.disable": "ワークスペースを無効化", + "sidebar.gettingStarted.title": "はじめに", + "sidebar.gettingStarted.line1": "OpenCodeには無料モデルが含まれているため、すぐに開始できます。", + "sidebar.gettingStarted.line2": "プロバイダーを接続して、Claude、GPT、Geminiなどのモデルを使用できます。", + "sidebar.project.recentSessions": "最近のセッション", + "sidebar.project.viewAllSessions": "すべてのセッションを表示", + + "settings.section.desktop": "デスクトップ", + "settings.tab.general": "一般", + "settings.tab.shortcuts": "ショートカット", + + "settings.general.section.appearance": "外観", + "settings.general.section.notifications": "システム通知", + "settings.general.section.sounds": "効果音", + + "settings.general.row.language.title": "言語", + "settings.general.row.language.description": "OpenCodeの表示言語を変更します", + "settings.general.row.appearance.title": "外観", + "settings.general.row.appearance.description": "デバイスでのOpenCodeの表示をカスタマイズします", + "settings.general.row.theme.title": "テーマ", + "settings.general.row.theme.description": "OpenCodeのテーマをカスタマイズします。", + "settings.general.row.font.title": "フォント", + "settings.general.row.font.description": "コードブロックで使用する等幅フォントをカスタマイズします", + + "settings.general.notifications.agent.title": "エージェント", + "settings.general.notifications.agent.description": + "エージェントが完了したか、注意が必要な場合にシステム通知を表示します", + "settings.general.notifications.permissions.title": "権限", + "settings.general.notifications.permissions.description": "権限が必要な場合にシステム通知を表示します", + "settings.general.notifications.errors.title": "エラー", + "settings.general.notifications.errors.description": "エラーが発生した場合にシステム通知を表示します", + + "settings.general.sounds.agent.title": "エージェント", + "settings.general.sounds.agent.description": "エージェントが完了したか、注意が必要な場合に音を再生します", + "settings.general.sounds.permissions.title": "権限", + "settings.general.sounds.permissions.description": "権限が必要な場合に音を再生します", + "settings.general.sounds.errors.title": "エラー", + "settings.general.sounds.errors.description": "エラーが発生した場合に音を再生します", + + "settings.shortcuts.title": "キーボードショートカット", + "settings.shortcuts.reset.button": "デフォルトにリセット", + "settings.shortcuts.reset.toast.title": "ショートカットをリセットしました", + "settings.shortcuts.reset.toast.description": "キーボードショートカットがデフォルトにリセットされました。", + "settings.shortcuts.conflict.title": "ショートカットは既に使用されています", + "settings.shortcuts.conflict.description": "{{keybind}} は既に {{titles}} に割り当てられています。", + "settings.shortcuts.unassigned": "未割り当て", + "settings.shortcuts.pressKeys": "キーを押してください", + + "settings.shortcuts.group.general": "一般", + "settings.shortcuts.group.session": "セッション", + "settings.shortcuts.group.navigation": "ナビゲーション", + "settings.shortcuts.group.modelAndAgent": "モデルとエージェント", + "settings.shortcuts.group.terminal": "ターミナル", + "settings.shortcuts.group.prompt": "プロンプト", + + "settings.providers.title": "プロバイダー", + "settings.providers.description": "プロバイダー設定はここで構成できます。", + "settings.models.title": "モデル", + "settings.models.description": "モデル設定はここで構成できます。", + "settings.agents.title": "エージェント", + "settings.agents.description": "エージェント設定はここで構成できます。", + "settings.commands.title": "コマンド", + "settings.commands.description": "コマンド設定はここで構成できます。", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP設定はここで構成できます。", + + "settings.permissions.title": "権限", + "settings.permissions.description": "サーバーがデフォルトで使用できるツールを制御します。", + "settings.permissions.section.tools": "ツール", + "settings.permissions.toast.updateFailed.title": "権限の更新に失敗しました", + + "settings.permissions.action.allow": "許可", + "settings.permissions.action.ask": "確認", + "settings.permissions.action.deny": "拒否", + + "settings.permissions.tool.read.title": "読み込み", + "settings.permissions.tool.read.description": "ファイルの読み込み (ファイルパスに一致)", + "settings.permissions.tool.edit.title": "編集", + "settings.permissions.tool.edit.description": "ファイルの変更(編集、書き込み、パッチ、複数編集を含む)", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Globパターンを使用したファイルの一致", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "正規表現を使用したファイル内容の検索", + "settings.permissions.tool.list.title": "リスト", + "settings.permissions.tool.list.description": "ディレクトリ内のファイル一覧表示", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "シェルコマンドの実行", + "settings.permissions.tool.task.title": "タスク", + "settings.permissions.tool.task.description": "サブエージェントの起動", + "settings.permissions.tool.skill.title": "スキル", + "settings.permissions.tool.skill.description": "名前によるスキルの読み込み", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "言語サーバークエリの実行", + "settings.permissions.tool.todoread.title": "Todo読み込み", + "settings.permissions.tool.todoread.description": "Todoリストの読み込み", + "settings.permissions.tool.todowrite.title": "Todo書き込み", + "settings.permissions.tool.todowrite.description": "Todoリストの更新", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "URLからコンテンツを取得", + "settings.permissions.tool.websearch.title": "Web Search", + "settings.permissions.tool.websearch.description": "ウェブを検索", + "settings.permissions.tool.codesearch.title": "Code Search", + "settings.permissions.tool.codesearch.description": "ウェブ上のコードを検索", + "settings.permissions.tool.external_directory.title": "外部ディレクトリ", + "settings.permissions.tool.external_directory.description": "プロジェクトディレクトリ外のファイルへのアクセス", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "同一入力による繰り返しのツール呼び出しを検出", + + "workspace.new": "新しいワークスペース", + "workspace.type.local": "ローカル", + "workspace.type.sandbox": "サンドボックス", + "workspace.create.failed.title": "ワークスペースの作成に失敗しました", + "workspace.delete.failed.title": "ワークスペースの削除に失敗しました", + "workspace.resetting.title": "ワークスペースをリセット中", + "workspace.resetting.description": "これには少し時間がかかる場合があります。", + "workspace.reset.failed.title": "ワークスペースのリセットに失敗しました", + "workspace.reset.success.title": "ワークスペースをリセットしました", + "workspace.reset.success.description": "ワークスペースはデフォルトブランチと一致しています。", + "workspace.status.checking": "未マージの変更を確認中...", + "workspace.status.error": "gitステータスを確認できません。", + "workspace.status.clean": "未マージの変更は検出されませんでした。", + "workspace.status.dirty": "このワークスペースで未マージの変更が検出されました。", + "workspace.delete.title": "ワークスペースの削除", + "workspace.delete.confirm": 'ワークスペース "{{name}}" を削除しますか?', + "workspace.delete.button": "ワークスペースを削除", + "workspace.reset.title": "ワークスペースのリセット", + "workspace.reset.confirm": 'ワークスペース "{{name}}" をリセットしますか?', + "workspace.reset.button": "ワークスペースをリセット", + "workspace.reset.archived.none": "アクティブなセッションはアーカイブされません。", + "workspace.reset.archived.one": "1つのセッションがアーカイブされます。", + "workspace.reset.archived.many": "{{count}}個のセッションがアーカイブされます。", + "workspace.reset.note": "これにより、ワークスペースはデフォルトブランチと一致するようにリセットされます。", +} diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index fefb7c723b9..e2417d5793a 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -275,6 +275,7 @@ export const dict = { "language.de": "독일어", "language.es": "스페인어", "language.fr": "프랑스어", + "language.ja": "일본어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index c0b6d7c15b2..d780dc4c472 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -271,6 +271,7 @@ export const dict = { "language.de": "德语", "language.es": "西班牙语", "language.fr": "法语", + "language.ja": "日语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/ja.ts b/packages/ui/src/i18n/ja.ts new file mode 100644 index 00000000000..ec748c06479 --- /dev/null +++ b/packages/ui/src/i18n/ja.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "セッションの変更", + "ui.sessionReview.diffStyle.unified": "Unified", + "ui.sessionReview.diffStyle.split": "Split", + "ui.sessionReview.expandAll": "すべて展開", + "ui.sessionReview.collapseAll": "すべて折りたたむ", + + "ui.sessionTurn.steps.show": "ステップを表示", + "ui.sessionTurn.steps.hide": "ステップを隠す", + "ui.sessionTurn.summary.response": "応答", + "ui.sessionTurn.diff.showMore": "さらに変更を表示 ({{count}})", + + "ui.sessionTurn.retry.retrying": "再試行中", + "ui.sessionTurn.retry.inSeconds": "{{seconds}}秒後", + + "ui.sessionTurn.status.delegating": "作業を委任中", + "ui.sessionTurn.status.planning": "次のステップを計画中", + "ui.sessionTurn.status.gatheringContext": "コンテキストを収集中", + "ui.sessionTurn.status.searchingCodebase": "コードベースを検索中", + "ui.sessionTurn.status.searchingWeb": "ウェブを検索中", + "ui.sessionTurn.status.makingEdits": "編集を実行中", + "ui.sessionTurn.status.runningCommands": "コマンドを実行中", + "ui.sessionTurn.status.thinking": "思考中", + "ui.sessionTurn.status.thinkingWithTopic": "思考中 - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "考えをまとめています", + "ui.sessionTurn.status.consideringNextSteps": "次のステップを検討中", + + "ui.messagePart.diagnostic.error": "エラー", + "ui.messagePart.title.edit": "編集", + "ui.messagePart.title.write": "作成", + "ui.messagePart.option.typeOwnAnswer": "自分の回答を入力", + "ui.messagePart.review.title": "回答を確認", + + "ui.list.loading": "読み込み中", + "ui.list.empty": "結果なし", + "ui.list.emptyWithFilter.prefix": "次の検索結果はありません: ", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "新しいメッセージ", + + "ui.textField.copyToClipboard": "クリップボードにコピー", + "ui.textField.copied": "コピーしました", + + "ui.imagePreview.alt": "画像プレビュー", + + "ui.tool.read": "読み込み", + "ui.tool.list": "リスト", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webfetch", + "ui.tool.shell": "Shell", + "ui.tool.patch": "Patch", + "ui.tool.todos": "Todo", + "ui.tool.todos.read": "Todo読み込み", + "ui.tool.questions": "質問", + "ui.tool.agent": "{{type}}エージェント", + + "ui.common.file.one": "ファイル", + "ui.common.file.other": "ファイル", + "ui.common.question.one": "質問", + "ui.common.question.other": "質問", + + "ui.common.add": "追加", + "ui.common.cancel": "キャンセル", + "ui.common.confirm": "確認", + "ui.common.dismiss": "閉じる", + "ui.common.next": "次へ", + "ui.common.submit": "送信", + + "ui.permission.deny": "拒否", + "ui.permission.allowAlways": "常に許可", + "ui.permission.allowOnce": "今回のみ許可", + + "ui.message.expand": "メッセージを展開", + "ui.message.collapse": "メッセージを折りたたむ", + "ui.message.copy": "コピー", + "ui.message.copied": "コピーしました!", + "ui.message.attachment.alt": "添付ファイル", + + "ui.patch.action.deleted": "削除済み", + "ui.patch.action.created": "作成済み", + "ui.patch.action.moved": "移動済み", + "ui.patch.action.patched": "パッチ適用済み", + + "ui.question.subtitle.answered": "{{count}}件回答済み", + "ui.question.answer.none": "(回答なし)", + "ui.question.review.notAnswered": "(未回答)", + "ui.question.multiHint": "(該当するものをすべて選択)", + "ui.question.custom.placeholder": "回答を入力...", +} From 8b0353cb2a559b0e02f9195f08393423e777f63f Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:48:44 -0600 Subject: [PATCH 245/426] feat(app): danish translations --- packages/app/src/context/language.tsx | 10 +- packages/app/src/i18n/da.ts | 554 ++++++++++++++++++++++++++ packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 1 + packages/app/src/i18n/fr.ts | 1 + packages/app/src/i18n/ja.ts | 1 + packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/da.ts | 90 +++++ 10 files changed, 659 insertions(+), 2 deletions(-) create mode 100644 packages/app/src/i18n/da.ts create mode 100644 packages/ui/src/i18n/da.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 7d65af75e78..d627997bb8d 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -9,19 +9,21 @@ import { dict as ko } from "@/i18n/ko" import { dict as de } from "@/i18n/de" import { dict as es } from "@/i18n/es" import { dict as fr } from "@/i18n/fr" +import { dict as da } from "@/i18n/da" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" import { dict as uiDe } from "@opencode-ai/ui/i18n/de" import { dict as uiEs } from "@opencode-ai/ui/i18n/es" import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" +import { dict as uiDa } from "@opencode-ai/ui/i18n/da" -export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" +export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -34,6 +36,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("de")) return "de" if (language.toLowerCase().startsWith("es")) return "es" if (language.toLowerCase().startsWith("fr")) return "fr" + if (language.toLowerCase().startsWith("da")) return "da" } return "en" @@ -55,6 +58,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "de") return "de" if (store.locale === "es") return "es" if (store.locale === "fr") return "fr" + if (store.locale === "da") return "da" return "en" }) @@ -71,6 +75,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) } if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) } if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } + if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -83,6 +88,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont de: "language.de", es: "language.es", fr: "language.fr", + da: "language.da", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts new file mode 100644 index 00000000000..237fc060d8d --- /dev/null +++ b/packages/app/src/i18n/da.ts @@ -0,0 +1,554 @@ +export const dict = { + "command.category.suggested": "Foreslået", + "command.category.view": "Vis", + "command.category.project": "Projekt", + "command.category.provider": "Udbyder", + "command.category.server": "Server", + "command.category.session": "Session", + "command.category.theme": "Tema", + "command.category.language": "Sprog", + "command.category.file": "Fil", + "command.category.terminal": "Terminal", + "command.category.model": "Model", + "command.category.mcp": "MCP", + "command.category.agent": "Agent", + "command.category.permissions": "Tilladelser", + + "theme.scheme.system": "System", + "theme.scheme.light": "Lys", + "theme.scheme.dark": "Mørk", + + "command.sidebar.toggle": "Skift sidebjælke", + "command.project.open": "Åbn projekt", + "command.provider.connect": "Tilslut udbyder", + "command.server.switch": "Skift server", + "command.session.previous": "Forrige session", + "command.session.next": "Næste session", + "command.session.archive": "Arkivér session", + + "command.palette": "Kommandopalette", + + "command.theme.cycle": "Skift tema", + "command.theme.set": "Brug tema: {{theme}}", + "command.theme.scheme.cycle": "Skift farveskema", + "command.theme.scheme.set": "Brug farveskema: {{scheme}}", + + "command.language.cycle": "Skift sprog", + "command.language.set": "Brug sprog: {{language}}", + + "command.session.new": "Ny session", + "command.file.open": "Åbn fil", + "command.file.open.description": "Søg i filer og kommandoer", + "command.terminal.toggle": "Skift terminal", + "command.review.toggle": "Skift gennemgang", + "command.terminal.new": "Ny terminal", + "command.terminal.new.description": "Opret en ny terminalfane", + "command.steps.toggle": "Skift trin", + "command.steps.toggle.description": "Vis eller skjul trin for den aktuelle besked", + "command.message.previous": "Forrige besked", + "command.message.previous.description": "Gå til den forrige brugerbesked", + "command.message.next": "Næste besked", + "command.message.next.description": "Gå til den næste brugerbesked", + "command.model.choose": "Vælg model", + "command.model.choose.description": "Vælg en anden model", + "command.mcp.toggle": "Skift MCP'er", + "command.mcp.toggle.description": "Skift MCP'er", + "command.agent.cycle": "Skift agent", + "command.agent.cycle.description": "Skift til næste agent", + "command.agent.cycle.reverse": "Skift agent baglæns", + "command.agent.cycle.reverse.description": "Skift til forrige agent", + "command.model.variant.cycle": "Skift tænkeindsats", + "command.model.variant.cycle.description": "Skift til næste indsatsniveau", + "command.permissions.autoaccept.enable": "Accepter ændringer automatisk", + "command.permissions.autoaccept.disable": "Stop automatisk accept af ændringer", + "command.session.undo": "Fortryd", + "command.session.undo.description": "Fortryd den sidste besked", + "command.session.redo": "Omgør", + "command.session.redo.description": "Omgør den sidste fortrudte besked", + "command.session.compact": "Komprimér session", + "command.session.compact.description": "Opsummer sessionen for at reducere kontekststørrelsen", + "command.session.fork": "Forgren fra besked", + "command.session.fork.description": "Opret en ny session fra en tidligere besked", + "command.session.share": "Del session", + "command.session.share.description": "Del denne session og kopier URL'en til udklipsholderen", + "command.session.unshare": "Stop deling af session", + "command.session.unshare.description": "Stop med at dele denne session", + + "palette.search.placeholder": "Søg i filer og kommandoer", + "palette.empty": "Ingen resultater fundet", + "palette.group.commands": "Kommandoer", + "palette.group.files": "Filer", + + "dialog.provider.search.placeholder": "Søg udbydere", + "dialog.provider.empty": "Ingen udbydere fundet", + "dialog.provider.group.popular": "Populære", + "dialog.provider.group.other": "Andre", + "dialog.provider.tag.recommended": "Anbefalet", + "dialog.provider.anthropic.note": "Forbind med Claude Pro/Max eller API-nøgle", + + "dialog.model.select.title": "Vælg model", + "dialog.model.search.placeholder": "Søg modeller", + "dialog.model.empty": "Ingen modeller fundet", + "dialog.model.manage": "Administrer modeller", + "dialog.model.manage.description": "Tilpas hvilke modeller der vises i modelvælgeren.", + + "dialog.model.unpaid.freeModels.title": "Gratis modeller leveret af OpenCode", + "dialog.model.unpaid.addMore.title": "Tilføj flere modeller fra populære udbydere", + + "dialog.provider.viewAll": "Vis alle udbydere", + + "provider.connect.title": "Forbind {{provider}}", + "provider.connect.title.anthropicProMax": "Log ind med Claude Pro/Max", + "provider.connect.selectMethod": "Vælg loginmetode for {{provider}}.", + "provider.connect.method.apiKey": "API-nøgle", + "provider.connect.status.inProgress": "Godkendelse i gang...", + "provider.connect.status.waiting": "Venter på godkendelse...", + "provider.connect.status.failed": "Godkendelse mislykkedes: {{error}}", + "provider.connect.apiKey.description": + "Indtast din {{provider}} API-nøgle for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + "provider.connect.apiKey.label": "{{provider}} API-nøgle", + "provider.connect.apiKey.placeholder": "API-nøgle", + "provider.connect.apiKey.required": "API-nøgle er påkrævet", + "provider.connect.opencodeZen.line1": + "OpenCode Zen giver dig adgang til et udvalg af pålidelige optimerede modeller til kodningsagenter.", + "provider.connect.opencodeZen.line2": + "Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.", + "provider.connect.opencodeZen.visit.prefix": "Besøg ", + "provider.connect.opencodeZen.visit.suffix": " for at hente din API-nøgle.", + "provider.connect.oauth.code.visit.prefix": "Besøg ", + "provider.connect.oauth.code.visit.link": "dette link", + "provider.connect.oauth.code.visit.suffix": + " for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + "provider.connect.oauth.code.label": "{{method}} godkendelseskode", + "provider.connect.oauth.code.placeholder": "Godkendelseskode", + "provider.connect.oauth.code.required": "Godkendelseskode er påkrævet", + "provider.connect.oauth.code.invalid": "Ugyldig godkendelseskode", + "provider.connect.oauth.auto.visit.prefix": "Besøg ", + "provider.connect.oauth.auto.visit.link": "dette link", + "provider.connect.oauth.auto.visit.suffix": + " og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode", + "provider.connect.toast.connected.title": "{{provider}} forbundet", + "provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.", + + "model.tag.free": "Gratis", + "model.tag.latest": "Nyeste", + + "common.search.placeholder": "Søg", + "common.loading": "Indlæser", + "common.cancel": "Annuller", + "common.submit": "Indsend", + "common.save": "Gem", + "common.saving": "Gemmer...", + "common.default": "Standard", + "common.attachment": "vedhæftning", + + "prompt.placeholder.shell": "Indtast shell-kommando...", + "prompt.placeholder.normal": 'Spørg om hvad som helst... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "esc for at afslutte", + + "prompt.example.1": "Ret en TODO i koden", + "prompt.example.2": "Hvad er teknologistakken for dette projekt?", + "prompt.example.3": "Ret ødelagte tests", + "prompt.example.4": "Forklar hvordan godkendelse fungerer", + "prompt.example.5": "Find og ret sikkerhedshuller", + "prompt.example.6": "Tilføj enhedstests for brugerservice", + "prompt.example.7": "Refaktorer denne funktion så den er mere læsbar", + "prompt.example.8": "Hvad betyder denne fejl?", + "prompt.example.9": "Hjælp mig med at debugge dette problem", + "prompt.example.10": "Generer API-dokumentation", + "prompt.example.11": "Optimer databaseforespørgsler", + "prompt.example.12": "Tilføj validering af input", + "prompt.example.13": "Opret en ny komponent til...", + "prompt.example.14": "Hvordan deployerer jeg dette projekt?", + "prompt.example.15": "Gennemgå min kode for bedste praksis", + "prompt.example.16": "Tilføj fejlhåndtering til denne funktion", + "prompt.example.17": "Forklar dette regex-mønster", + "prompt.example.18": "Konverter dette til TypeScript", + "prompt.example.19": "Tilføj logning i hele koden", + "prompt.example.20": "Hvilke afhængigheder er forældede?", + "prompt.example.21": "Hjælp mig med at skrive et migreringsscript", + "prompt.example.22": "Implementer caching for dette endpoint", + "prompt.example.23": "Tilføj sideinddeling til denne liste", + "prompt.example.24": "Opret en CLI-kommando til...", + "prompt.example.25": "Hvordan fungerer miljøvariabler her?", + + "prompt.popover.emptyResults": "Ingen matchende resultater", + "prompt.popover.emptyCommands": "Ingen matchende kommandoer", + "prompt.dropzone.label": "Slip billeder eller PDF'er her", + "prompt.slash.badge.custom": "brugerdefineret", + "prompt.context.active": "aktiv", + "prompt.context.includeActiveFile": "Inkluder aktiv fil", + "prompt.action.attachFile": "Vedhæft fil", + "prompt.action.send": "Send", + "prompt.action.stop": "Stop", + + "prompt.toast.pasteUnsupported.title": "Ikke understøttet indsæt", + "prompt.toast.pasteUnsupported.description": "Kun billeder eller PDF'er kan indsættes her.", + "prompt.toast.modelAgentRequired.title": "Vælg en agent og model", + "prompt.toast.modelAgentRequired.description": "Vælg en agent og model før du sender en forespørgsel.", + "prompt.toast.worktreeCreateFailed.title": "Kunne ikke oprette worktree", + "prompt.toast.sessionCreateFailed.title": "Kunne ikke oprette session", + "prompt.toast.shellSendFailed.title": "Kunne ikke sende shell-kommando", + "prompt.toast.commandSendFailed.title": "Kunne ikke sende kommando", + "prompt.toast.promptSendFailed.title": "Kunne ikke sende forespørgsel", + + "dialog.mcp.title": "MCP'er", + "dialog.mcp.description": "{{enabled}} af {{total}} aktiveret", + "dialog.mcp.empty": "Ingen MCP'er konfigureret", + + "mcp.status.connected": "forbundet", + "mcp.status.failed": "mislykkedes", + "mcp.status.needs_auth": "kræver godkendelse", + "mcp.status.disabled": "deaktiveret", + + "dialog.fork.empty": "Ingen beskeder at forgrene fra", + + "dialog.directory.search.placeholder": "Søg mapper", + "dialog.directory.empty": "Ingen mapper fundet", + + "dialog.server.title": "Servere", + "dialog.server.description": "Skift hvilken OpenCode-server denne app forbinder til.", + "dialog.server.search.placeholder": "Søg servere", + "dialog.server.empty": "Ingen servere endnu", + "dialog.server.add.title": "Tilføj en server", + "dialog.server.add.url": "Server URL", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Kunne ikke forbinde til server", + "dialog.server.add.checking": "Tjekker...", + "dialog.server.add.button": "Tilføj", + "dialog.server.default.title": "Standardserver", + "dialog.server.default.description": + "Forbind til denne server ved start af app i stedet for at starte en lokal server. Kræver genstart.", + "dialog.server.default.none": "Ingen server valgt", + "dialog.server.default.set": "Sæt nuværende server som standard", + "dialog.server.default.clear": "Ryd", + + "dialog.project.edit.title": "Rediger projekt", + "dialog.project.edit.name": "Navn", + "dialog.project.edit.icon": "Ikon", + "dialog.project.edit.icon.alt": "Projektikon", + "dialog.project.edit.icon.hint": "Klik eller træk et billede", + "dialog.project.edit.icon.recommended": "Anbefalet: 128x128px", + "dialog.project.edit.color": "Farve", + + "context.breakdown.title": "Kontekstfordeling", + "context.breakdown.note": + 'Omtrentlig fordeling af input-tokens. "Andre" inkluderer værktøjsdefinitioner og overhead.', + "context.breakdown.system": "System", + "context.breakdown.user": "Bruger", + "context.breakdown.assistant": "Assistent", + "context.breakdown.tool": "Værktøjskald", + "context.breakdown.other": "Andre", + + "context.systemPrompt.title": "Systemprompt", + "context.rawMessages.title": "Rå beskeder", + + "context.stats.session": "Session", + "context.stats.messages": "Beskeder", + "context.stats.provider": "Udbyder", + "context.stats.model": "Model", + "context.stats.limit": "Kontekstgrænse", + "context.stats.totalTokens": "Total Tokens", + "context.stats.usage": "Forbrug", + "context.stats.inputTokens": "Input Tokens", + "context.stats.outputTokens": "Output Tokens", + "context.stats.reasoningTokens": "Tænke Tokens", + "context.stats.cacheTokens": "Cache Tokens (læs/skriv)", + "context.stats.userMessages": "Brugerbeskeder", + "context.stats.assistantMessages": "Assistentbeskeder", + "context.stats.totalCost": "Samlede omkostninger", + "context.stats.sessionCreated": "Session oprettet", + "context.stats.lastActivity": "Seneste aktivitet", + + "context.usage.tokens": "Tokens", + "context.usage.usage": "Forbrug", + "context.usage.cost": "Omkostning", + "context.usage.clickToView": "Klik for at se kontekst", + + "language.en": "Engelsk", + "language.zh": "Kinesisk", + "language.ko": "Koreansk", + "language.de": "Tysk", + "language.es": "Spansk", + "language.fr": "Fransk", + "language.ja": "Japansk", + "language.da": "Dansk", + + "toast.language.title": "Sprog", + "toast.language.description": "Skiftede til {{language}}", + + "toast.theme.title": "Tema skiftet", + "toast.scheme.title": "Farveskema", + + "toast.permissions.autoaccept.on.title": "Accepterer ændringer automatisk", + "toast.permissions.autoaccept.on.description": "Redigerings- og skrivetilladelser vil automatisk blive godkendt", + "toast.permissions.autoaccept.off.title": "Stoppede automatisk accept af ændringer", + "toast.permissions.autoaccept.off.description": "Redigerings- og skrivetilladelser vil kræve godkendelse", + + "toast.model.none.title": "Ingen model valgt", + "toast.model.none.description": "Forbind en udbyder for at opsummere denne session", + + "toast.file.loadFailed.title": "Kunne ikke indlæse fil", + + "toast.session.share.copyFailed.title": "Kunne ikke kopiere URL til udklipsholder", + "toast.session.share.success.title": "Session delt", + "toast.session.share.success.description": "Delings-URL kopieret til udklipsholder!", + "toast.session.share.failed.title": "Kunne ikke dele session", + "toast.session.share.failed.description": "Der opstod en fejl under deling af sessionen", + + "toast.session.unshare.success.title": "Deling af session stoppet", + "toast.session.unshare.success.description": "Deling af session blev stoppet!", + "toast.session.unshare.failed.title": "Kunne ikke stoppe deling af session", + "toast.session.unshare.failed.description": "Der opstod en fejl under stop af sessionsdeling", + + "toast.session.listFailed.title": "Kunne ikke indlæse sessioner for {{project}}", + + "toast.update.title": "Opdatering tilgængelig", + "toast.update.description": "En ny version af OpenCode ({{version}}) er nu tilgængelig til installation.", + "toast.update.action.installRestart": "Installer og genstart", + "toast.update.action.notYet": "Ikke endnu", + + "error.page.title": "Noget gik galt", + "error.page.description": "Der opstod en fejl under indlæsning af applikationen.", + "error.page.details.label": "Fejldetaljer", + "error.page.action.restart": "Genstart", + "error.page.action.checking": "Tjekker...", + "error.page.action.checkUpdates": "Tjek for opdateringer", + "error.page.action.updateTo": "Opdater til {{version}}", + "error.page.report.prefix": "Rapporter venligst denne fejl til OpenCode-teamet", + "error.page.report.discord": "på Discord", + "error.page.version": "Version: {{version}}", + + "error.dev.rootNotFound": + "Rodelement ikke fundet. Har du glemt at tilføje det til din index.html? Eller måske er id-attributten stavet forkert?", + + "error.globalSync.connectFailed": "Kunne ikke forbinde til server. Kører der en server på `{{url}}`?", + + "error.chain.unknown": "Ukendt fejl", + "error.chain.causedBy": "Forårsaget af:", + "error.chain.apiError": "API-fejl", + "error.chain.status": "Status: {{status}}", + "error.chain.retryable": "Kan forsøges igen: {{retryable}}", + "error.chain.responseBody": "Svarindhold:\n{{body}}", + "error.chain.didYouMean": "Mente du: {{suggestions}}", + "error.chain.modelNotFound": "Model ikke fundet: {{provider}}/{{model}}", + "error.chain.checkConfig": "Tjek dine konfigurations (opencode.json) udbyder/modelnavne", + "error.chain.mcpFailed": 'MCP-server "{{name}}" fejlede. Bemærk, OpenCode understøtter ikke MCP-godkendelse endnu.', + "error.chain.providerAuthFailed": "Udbydergodkendelse mislykkedes ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Kunne ikke initialisere udbyder "{{provider}}". Tjek legitimationsoplysninger og konfiguration.', + "error.chain.configJsonInvalid": "Konfigurationsfil på {{path}} er ikke gyldig JSON(C)", + "error.chain.configJsonInvalidWithMessage": "Konfigurationsfil på {{path}} er ikke gyldig JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Mappe "{{dir}}" i {{path}} er ikke gyldig. Omdøb mappen til "{{suggestion}}" eller fjern den. Dette er en almindelig slåfejl.', + "error.chain.configFrontmatterError": "Kunne ikke parse frontmatter i {{path}}:\n{{message}}", + "error.chain.configInvalid": "Konfigurationsfil på {{path}} er ugyldig", + "error.chain.configInvalidWithMessage": "Konfigurationsfil på {{path}} er ugyldig: {{message}}", + + "notification.permission.title": "Tilladelse påkrævet", + "notification.permission.description": "{{sessionTitle}} i {{projectName}} kræver tilladelse", + "notification.question.title": "Spørgsmål", + "notification.question.description": "{{sessionTitle}} i {{projectName}} har et spørgsmål", + "notification.action.goToSession": "Gå til session", + + "notification.session.responseReady.title": "Svar klar", + "notification.session.error.title": "Sessionsfejl", + "notification.session.error.fallbackDescription": "Der opstod en fejl", + + "home.recentProjects": "Seneste projekter", + "home.empty.title": "Ingen seneste projekter", + "home.empty.description": "Kom i gang ved at åbne et lokalt projekt", + + "session.tab.session": "Session", + "session.tab.review": "Gennemgang", + "session.tab.context": "Kontekst", + "session.review.filesChanged": "{{count}} Filer ændret", + "session.review.loadingChanges": "Indlæser ændringer...", + "session.review.empty": "Ingen ændringer i denne session endnu", + "session.messages.renderEarlier": "Vis tidligere beskeder", + "session.messages.loadingEarlier": "Indlæser tidligere beskeder...", + "session.messages.loadEarlier": "Indlæs tidligere beskeder", + "session.messages.loading": "Indlæser beskeder...", + + "session.context.addToContext": "Tilføj {{selection}} til kontekst", + + "session.new.worktree.main": "Hovedgren", + "session.new.worktree.mainWithBranch": "Hovedgren ({{branch}})", + "session.new.worktree.create": "Opret nyt worktree", + "session.new.lastModified": "Sidst ændret", + + "session.header.search.placeholder": "Søg {{project}}", + + "session.share.popover.title": "Udgiv på nettet", + "session.share.popover.description.shared": + "Denne session er offentlig på nettet. Den er tilgængelig for alle med linket.", + "session.share.popover.description.unshared": + "Del session offentligt på nettet. Den vil være tilgængelig for alle med linket.", + "session.share.action.share": "Del", + "session.share.action.publish": "Udgiv", + "session.share.action.publishing": "Udgiver...", + "session.share.action.unpublish": "Afpublicer", + "session.share.action.unpublishing": "Afpublicerer...", + "session.share.action.view": "Vis", + "session.share.copy.copied": "Kopieret", + "session.share.copy.copyLink": "Kopier link", + + "lsp.tooltip.none": "Ingen LSP-servere", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Indlæser prompt...", + "terminal.loading": "Indlæser terminal...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + + "common.closeTab": "Luk fane", + "common.dismiss": "Afvis", + "common.requestFailed": "Forespørgsel mislykkedes", + "common.moreOptions": "Flere muligheder", + "common.learnMore": "Lær mere", + "common.rename": "Omdøb", + "common.reset": "Nulstil", + "common.delete": "Slet", + "common.close": "Luk", + "common.edit": "Rediger", + "common.loadMore": "Indlæs flere", + + "sidebar.settings": "Indstillinger", + "sidebar.help": "Hjælp", + "sidebar.workspaces.enable": "Aktiver arbejdsområder", + "sidebar.workspaces.disable": "Deaktiver arbejdsområder", + "sidebar.gettingStarted.title": "Kom i gang", + "sidebar.gettingStarted.line1": "OpenCode inkluderer gratis modeller så du kan starte med det samme.", + "sidebar.gettingStarted.line2": "Forbind enhver udbyder for at bruge modeller, inkl. Claude, GPT, Gemini osv.", + "sidebar.project.recentSessions": "Seneste sessioner", + "sidebar.project.viewAllSessions": "Vis alle sessioner", + + "settings.section.desktop": "Desktop", + "settings.tab.general": "Generelt", + "settings.tab.shortcuts": "Genveje", + + "settings.general.section.appearance": "Udseende", + "settings.general.section.notifications": "Systemmeddelelser", + "settings.general.section.sounds": "Lydeffekter", + + "settings.general.row.language.title": "Sprog", + "settings.general.row.language.description": "Ændr visningssproget for OpenCode", + "settings.general.row.appearance.title": "Udseende", + "settings.general.row.appearance.description": "Tilpas hvordan OpenCode ser ud på din enhed", + "settings.general.row.theme.title": "Tema", + "settings.general.row.theme.description": "Tilpas hvordan OpenCode er temabestemt.", + "settings.general.row.font.title": "Skrifttype", + "settings.general.row.font.description": "Tilpas mono-skrifttypen brugt i kodeblokke", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": + "Vis systemmeddelelse når agenten er færdig eller kræver opmærksomhed", + "settings.general.notifications.permissions.title": "Tilladelser", + "settings.general.notifications.permissions.description": "Vis systemmeddelelse når en tilladelse er påkrævet", + "settings.general.notifications.errors.title": "Fejl", + "settings.general.notifications.errors.description": "Vis systemmeddelelse når der opstår en fejl", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Afspil lyd når agenten er færdig eller kræver opmærksomhed", + "settings.general.sounds.permissions.title": "Tilladelser", + "settings.general.sounds.permissions.description": "Afspil lyd når en tilladelse er påkrævet", + "settings.general.sounds.errors.title": "Fejl", + "settings.general.sounds.errors.description": "Afspil lyd når der opstår en fejl", + + "settings.shortcuts.title": "Tastaturgenveje", + "settings.shortcuts.reset.button": "Nulstil til standard", + "settings.shortcuts.reset.toast.title": "Genveje nulstillet", + "settings.shortcuts.reset.toast.description": "Tastaturgenveje er blevet nulstillet til standard.", + "settings.shortcuts.conflict.title": "Genvej allerede i brug", + "settings.shortcuts.conflict.description": "{{keybind}} er allerede tildelt til {{titles}}.", + "settings.shortcuts.unassigned": "Ikke tildelt", + "settings.shortcuts.pressKeys": "Tryk på taster", + + "settings.shortcuts.group.general": "Generelt", + "settings.shortcuts.group.session": "Session", + "settings.shortcuts.group.navigation": "Navigation", + "settings.shortcuts.group.modelAndAgent": "Model og agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Udbydere", + "settings.providers.description": "Udbyderindstillinger vil kunne konfigureres her.", + "settings.models.title": "Modeller", + "settings.models.description": "Modelindstillinger vil kunne konfigureres her.", + "settings.agents.title": "Agenter", + "settings.agents.description": "Agentindstillinger vil kunne konfigureres her.", + "settings.commands.title": "Kommandoer", + "settings.commands.description": "Kommandoindstillinger vil kunne konfigureres her.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP-indstillinger vil kunne konfigureres her.", + + "settings.permissions.title": "Tilladelser", + "settings.permissions.description": "Styr hvilke værktøjer serveren kan bruge som standard.", + "settings.permissions.section.tools": "Værktøjer", + "settings.permissions.toast.updateFailed.title": "Kunne ikke opdatere tilladelser", + + "settings.permissions.action.allow": "Tillad", + "settings.permissions.action.ask": "Spørg", + "settings.permissions.action.deny": "Afvis", + + "settings.permissions.tool.read.title": "Læs", + "settings.permissions.tool.read.description": "Læsning af en fil (matcher filstien)", + "settings.permissions.tool.edit.title": "Rediger", + "settings.permissions.tool.edit.description": + "Ændre filer, herunder redigeringer, skrivninger, patches og multi-redigeringer", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Match filer ved hjælp af glob-mønstre", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Søg i filindhold ved hjælp af regulære udtryk", + "settings.permissions.tool.list.title": "Liste", + "settings.permissions.tool.list.description": "List filer i en mappe", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Kør shell-kommandoer", + "settings.permissions.tool.task.title": "Opgave", + "settings.permissions.tool.task.description": "Start underagenter", + "settings.permissions.tool.skill.title": "Færdighed", + "settings.permissions.tool.skill.description": "Indlæs en færdighed efter navn", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Kør sprogserverforespørgsler", + "settings.permissions.tool.todoread.title": "Læs To-do", + "settings.permissions.tool.todoread.description": "Læs to-do listen", + "settings.permissions.tool.todowrite.title": "Skriv To-do", + "settings.permissions.tool.todowrite.description": "Opdater to-do listen", + "settings.permissions.tool.webfetch.title": "Webhentning", + "settings.permissions.tool.webfetch.description": "Hent indhold fra en URL", + "settings.permissions.tool.websearch.title": "Websøgning", + "settings.permissions.tool.websearch.description": "Søg på nettet", + "settings.permissions.tool.codesearch.title": "Kodesøgning", + "settings.permissions.tool.codesearch.description": "Søg kode på nettet", + "settings.permissions.tool.external_directory.title": "Ekstern mappe", + "settings.permissions.tool.external_directory.description": "Få adgang til filer uden for projektmappen", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "Opdag gentagne værktøjskald med identisk input", + + "workspace.new": "Nyt arbejdsområde", + "workspace.type.local": "lokal", + "workspace.type.sandbox": "sandkasse", + "workspace.create.failed.title": "Kunne ikke oprette arbejdsområde", + "workspace.delete.failed.title": "Kunne ikke slette arbejdsområde", + "workspace.resetting.title": "Nulstiller arbejdsområde", + "workspace.resetting.description": "Dette kan tage et minut.", + "workspace.reset.failed.title": "Kunne ikke nulstille arbejdsområde", + "workspace.reset.success.title": "Arbejdsområde nulstillet", + "workspace.reset.success.description": "Arbejdsområdet matcher nu hovedgrenen.", + "workspace.status.checking": "Tjekker for uflettede ændringer...", + "workspace.status.error": "Kunne ikke bekræfte git-status.", + "workspace.status.clean": "Ingen uflettede ændringer fundet.", + "workspace.status.dirty": "Uflettede ændringer fundet i dette arbejdsområde.", + "workspace.delete.title": "Slet arbejdsområde", + "workspace.delete.confirm": 'Slet arbejdsområde "{{name}}"?', + "workspace.delete.button": "Slet arbejdsområde", + "workspace.reset.title": "Nulstil arbejdsområde", + "workspace.reset.confirm": 'Nulstil arbejdsområde "{{name}}"?', + "workspace.reset.button": "Nulstil arbejdsområde", + "workspace.reset.archived.none": "Ingen aktive sessioner vil blive arkiveret.", + "workspace.reset.archived.one": "1 session vil blive arkiveret.", + "workspace.reset.archived.many": "{{count}} sessioner vil blive arkiveret.", + "workspace.reset.note": "Dette vil nulstille arbejdsområdet til at matche hovedgrenen.", +} diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index b7eb698821e..9b003554840 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -279,6 +279,7 @@ export const dict = { "language.es": "Spanisch", "language.fr": "Französisch", "language.ja": "Japanisch", + "language.da": "Dänisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 6525b07bee7..de5c9a32b19 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -273,6 +273,7 @@ export const dict = { "language.es": "Spanish", "language.fr": "French", "language.ja": "Japanese", + "language.da": "Danish", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 39864ce5dc4..d4479292100 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -274,6 +274,7 @@ export const dict = { "language.es": "Español", "language.fr": "Francés", "language.ja": "Japonés", + "language.da": "Danés", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 9522e10d860..0ac1b94e981 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -274,6 +274,7 @@ export const dict = { "language.es": "Espagnol", "language.fr": "Français", "language.ja": "Japonais", + "language.da": "Danois", "toast.language.title": "Langue", "toast.language.description": "Passé à {{language}}", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 4da0c160fe7..9aaf6d6fade 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -272,6 +272,7 @@ export const dict = { "language.es": "スペイン語", "language.fr": "フランス語", "language.ja": "日本語", + "language.da": "デンマーク語", "toast.language.title": "言語", "toast.language.description": "{{language}}に切り替えました", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index e2417d5793a..281e1c55d0e 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -276,6 +276,7 @@ export const dict = { "language.es": "스페인어", "language.fr": "프랑스어", "language.ja": "일본어", + "language.da": "덴마크어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index d780dc4c472..e5c2049d6b6 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -272,6 +272,7 @@ export const dict = { "language.es": "西班牙语", "language.fr": "法语", "language.ja": "日语", + "language.da": "丹麦语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/da.ts b/packages/ui/src/i18n/da.ts new file mode 100644 index 00000000000..2b4a9ca07bb --- /dev/null +++ b/packages/ui/src/i18n/da.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "Sessionsændringer", + "ui.sessionReview.diffStyle.unified": "Samlet", + "ui.sessionReview.diffStyle.split": "Opdelt", + "ui.sessionReview.expandAll": "Udvid alle", + "ui.sessionReview.collapseAll": "Skjul alle", + + "ui.sessionTurn.steps.show": "Vis trin", + "ui.sessionTurn.steps.hide": "Skjul trin", + "ui.sessionTurn.summary.response": "Svar", + "ui.sessionTurn.diff.showMore": "Vis flere ændringer ({{count}})", + + "ui.sessionTurn.retry.retrying": "prøver igen", + "ui.sessionTurn.retry.inSeconds": "om {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Delegerer arbejde", + "ui.sessionTurn.status.planning": "Planlægger næste trin", + "ui.sessionTurn.status.gatheringContext": "Indsamler kontekst", + "ui.sessionTurn.status.searchingCodebase": "Søger i koden", + "ui.sessionTurn.status.searchingWeb": "Søger på nettet", + "ui.sessionTurn.status.makingEdits": "Laver ændringer", + "ui.sessionTurn.status.runningCommands": "Kører kommandoer", + "ui.sessionTurn.status.thinking": "Tænker", + "ui.sessionTurn.status.thinkingWithTopic": "Tænker - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Samler tanker", + "ui.sessionTurn.status.consideringNextSteps": "Overvejer næste skridt", + + "ui.messagePart.diagnostic.error": "Fejl", + "ui.messagePart.title.edit": "Rediger", + "ui.messagePart.title.write": "Skriv", + "ui.messagePart.option.typeOwnAnswer": "Skriv dit eget svar", + "ui.messagePart.review.title": "Gennemgå dine svar", + + "ui.list.loading": "Indlæser", + "ui.list.empty": "Ingen resultater", + "ui.list.emptyWithFilter.prefix": "Ingen resultater for", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Ny besked", + + "ui.textField.copyToClipboard": "Kopier til udklipsholder", + "ui.textField.copied": "Kopieret", + + "ui.imagePreview.alt": "Billedforhåndsvisning", + + "ui.tool.read": "Læs", + "ui.tool.list": "Liste", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webhentning", + "ui.tool.shell": "Shell", + "ui.tool.patch": "Patch", + "ui.tool.todos": "To-dos", + "ui.tool.todos.read": "Læs to-dos", + "ui.tool.questions": "Spørgsmål", + "ui.tool.agent": "{{type}} Agent", + + "ui.common.file.one": "fil", + "ui.common.file.other": "filer", + "ui.common.question.one": "spørgsmål", + "ui.common.question.other": "spørgsmål", + + "ui.common.add": "Tilføj", + "ui.common.cancel": "Annuller", + "ui.common.confirm": "Bekræft", + "ui.common.dismiss": "Afvis", + "ui.common.next": "Næste", + "ui.common.submit": "Indsend", + + "ui.permission.deny": "Afvis", + "ui.permission.allowAlways": "Tillad altid", + "ui.permission.allowOnce": "Tillad én gang", + + "ui.message.expand": "Udvid besked", + "ui.message.collapse": "Skjul besked", + "ui.message.copy": "Kopier", + "ui.message.copied": "Kopieret!", + "ui.message.attachment.alt": "vedhæftning", + + "ui.patch.action.deleted": "Slettet", + "ui.patch.action.created": "Oprettet", + "ui.patch.action.moved": "Flyttet", + "ui.patch.action.patched": "Patched", + + "ui.question.subtitle.answered": "{{count}} besvaret", + "ui.question.answer.none": "(intet svar)", + "ui.question.review.notAnswered": "(ikke besvaret)", + "ui.question.multiHint": "(vælg alle der gælder)", + "ui.question.custom.placeholder": "Skriv dit svar...", +} From 4b8335160b1095aa090cf32982451ef2984038af Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 05:59:28 -0600 Subject: [PATCH 246/426] test(app): fix e2e --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 02d5baedf74..6874d580c5e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,7 @@ jobs: host: windows-latest playwright: bunx playwright install workdir: packages/app - command: bun test:e2e + command: bun test:e2e:local runs-on: ${{ matrix.settings.host }} defaults: run: @@ -65,6 +65,7 @@ jobs: fi - name: Seed opencode data + if: matrix.settings.name != 'windows' working-directory: packages/opencode run: bun script/seed-e2e.ts env: @@ -85,6 +86,7 @@ jobs: OPENCODE_E2E_MODEL: "opencode/gpt-5-nano" - name: Run opencode server + if: matrix.settings.name != 'windows' working-directory: packages/opencode run: bun dev -- --print-logs --log-level WARN serve --port 4096 --hostname 127.0.0.1 & env: @@ -102,6 +104,7 @@ jobs: OPENCODE_CLIENT: "app" - name: Wait for opencode server + if: matrix.settings.name != 'windows' run: | for i in {1..120}; do curl -fsS "http://127.0.0.1:4096/global/health" > /dev/null && exit 0 From 34e4d077cd06b01610631c2a606fc3e12e3fbc75 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 12:05:58 +0000 Subject: [PATCH 247/426] ignore: update download stats 2026-01-21 --- STATS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/STATS.md b/STATS.md index a7af9bd251a..25c848ccb34 100644 --- a/STATS.md +++ b/STATS.md @@ -206,3 +206,4 @@ | 2026-01-18 | 4,627,623 (+238,065) | 1,839,171 (+33,856) | 6,466,794 (+271,921) | | 2026-01-19 | 4,861,108 (+233,485) | 1,863,112 (+23,941) | 6,724,220 (+257,426) | | 2026-01-20 | 5,128,999 (+267,891) | 1,903,665 (+40,553) | 7,032,664 (+308,444) | +| 2026-01-21 | 5,444,842 (+315,843) | 1,962,531 (+58,866) | 7,407,373 (+374,709) | From bb710e9ea151c94e68391a22c8199da8a8223342 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 06:09:50 -0600 Subject: [PATCH 248/426] fix(core): snapshot regression --- packages/opencode/src/snapshot/index.ts | 32 +++++++++++-------------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/packages/opencode/src/snapshot/index.ts b/packages/opencode/src/snapshot/index.ts index 0f5e9c66e01..dcf6499fb00 100644 --- a/packages/opencode/src/snapshot/index.ts +++ b/packages/opencode/src/snapshot/index.ts @@ -197,6 +197,18 @@ export namespace Snapshot { export async function diffFull(from: string, to: string): Promise<FileDiff[]> { const git = gitdir() const result: FileDiff[] = [] + + const show = async (hash: string, file: string) => { + const response = + await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${hash}:${file}` + .quiet() + .nothrow() + if (response.exitCode === 0) return response.text() + const stderr = response.stderr.toString() + if (stderr.toLowerCase().includes("does not exist in")) return "" + return `[DEBUG ERROR] git show ${hash}:${file} failed: ${stderr}` + } + for await (const line of $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} diff --no-ext-diff --no-renames --numstat ${from} ${to} -- .` .quiet() .cwd(Instance.directory) @@ -206,25 +218,9 @@ export namespace Snapshot { const [additions, deletions, rawFile] = line.split("\t") const file = unquote(rawFile) const isBinaryFile = additions === "-" && deletions === "-" - const beforeResult = isBinaryFile - ? { exitCode: 0, text: () => "", stderr: Buffer.from("") } - : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${from}:${file}` - .quiet() - .nothrow() - const before = - beforeResult.exitCode === 0 - ? beforeResult.text() - : `[DEBUG ERROR] git show ${from}:${file} failed: ${beforeResult.stderr.toString()}` - const afterResult = isBinaryFile - ? { exitCode: 0, text: () => "", stderr: Buffer.from("") } - : await $`git -c core.autocrlf=false --git-dir ${git} --work-tree ${Instance.worktree} show ${to}:${file}` - .quiet() - .nothrow() - const after = - afterResult.exitCode === 0 - ? afterResult.text() - : `[DEBUG ERROR] git show ${to}:${file} failed: ${afterResult.stderr.toString()}` + const before = isBinaryFile ? "" : await show(from, file) + const after = isBinaryFile ? "" : await show(to, file) const added = isBinaryFile ? 0 : parseInt(additions) const deleted = isBinaryFile ? 0 : parseInt(deletions) result.push({ From e237f06c96ec1b8076756a47ee1761bb853b5954 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 06:08:42 -0600 Subject: [PATCH 249/426] test(app): fix e2e --- packages/app/script/e2e-local.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/app/script/e2e-local.ts b/packages/app/script/e2e-local.ts index dd0e9a52e2b..d764a401f6e 100644 --- a/packages/app/script/e2e-local.ts +++ b/packages/app/script/e2e-local.ts @@ -73,9 +73,9 @@ const serverEnv = { const runnerEnv = { ...process.env, - PLAYWRIGHT_SERVER_HOST: "localhost", + PLAYWRIGHT_SERVER_HOST: "127.0.0.1", PLAYWRIGHT_SERVER_PORT: String(serverPort), - VITE_OPENCODE_SERVER_HOST: "localhost", + VITE_OPENCODE_SERVER_HOST: "127.0.0.1", VITE_OPENCODE_SERVER_PORT: String(serverPort), PLAYWRIGHT_PORT: String(webPort), } satisfies Record<string, string> @@ -115,7 +115,7 @@ const server = Bun.spawn( ) try { - await waitForHealth(`http://localhost:${serverPort}/global/health`) + await waitForHealth(`http://127.0.0.1:${serverPort}/global/health`) const runner = Bun.spawn(["bun", "test:e2e", ...extraArgs], { cwd: appDir, From ab705bbc31b0a630243c015aa9ea4750caa42737 Mon Sep 17 00:00:00 2001 From: Brendan Allan <git@brendonovich.dev> Date: Wed, 21 Jan 2026 20:15:19 +0800 Subject: [PATCH 250/426] fix(desktop): add workaround for nushell --- packages/desktop/src-tauri/src/cli.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/desktop/src-tauri/src/cli.rs b/packages/desktop/src-tauri/src/cli.rs index 2fd26dd01cd..b019d66b5c8 100644 --- a/packages/desktop/src-tauri/src/cli.rs +++ b/packages/desktop/src-tauri/src/cli.rs @@ -1,5 +1,5 @@ -use tauri::{path::BaseDirectory, AppHandle, Manager}; -use tauri_plugin_shell::{process::Command, ShellExt}; +use tauri::{AppHandle, Manager, path::BaseDirectory}; +use tauri_plugin_shell::{ShellExt, process::Command}; const CLI_INSTALL_DIR: &str = ".opencode/bin"; const CLI_BINARY_NAME: &str = "opencode"; @@ -164,11 +164,18 @@ pub fn create_command(app: &tauri::AppHandle, args: &str) -> Command { return { let sidecar = get_sidecar_path(app); let shell = get_user_shell(); + + let cmd = if shell.ends_with("/nu") { + format!("^\"{}\" {}", sidecar.display(), args) + } else { + format!("\"{}\" {}", sidecar.display(), args) + }; + app.shell() .command(&shell) .env("OPENCODE_EXPERIMENTAL_ICON_DISCOVERY", "true") .env("OPENCODE_CLIENT", "desktop") .env("XDG_STATE_HOME", &state_dir) - .args(["-il", "-c", &format!("\"{}\" {}", sidecar.display(), args)]) + .args(["-il", "-c", &cmd]) }; } From 259b2a3c2dbb785dd46c83e243f20436a05e3021 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 06:16:28 -0600 Subject: [PATCH 251/426] fix(app): japanese language support --- packages/app/src/context/language.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index d627997bb8d..f7c2e277b67 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -10,6 +10,7 @@ import { dict as de } from "@/i18n/de" import { dict as es } from "@/i18n/es" import { dict as fr } from "@/i18n/fr" import { dict as da } from "@/i18n/da" +import { dict as ja } from "@/i18n/ja" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" @@ -17,13 +18,14 @@ import { dict as uiDe } from "@opencode-ai/ui/i18n/de" import { dict as uiEs } from "@opencode-ai/ui/i18n/es" import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" import { dict as uiDa } from "@opencode-ai/ui/i18n/da" +import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" -export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" +export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten<RawDictionary> -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -37,6 +39,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("es")) return "es" if (language.toLowerCase().startsWith("fr")) return "fr" if (language.toLowerCase().startsWith("da")) return "da" + if (language.toLowerCase().startsWith("ja")) return "ja" } return "en" @@ -59,6 +62,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "es") return "es" if (store.locale === "fr") return "fr" if (store.locale === "da") return "da" + if (store.locale === "ja") return "ja" return "en" }) @@ -76,6 +80,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) } if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa }) } + if (locale() === "ja") return { ...base, ...i18n.flatten({ ...ja, ...uiJa }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -89,6 +94,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont es: "language.es", fr: "language.fr", da: "language.da", + ja: "language.ja", } const label = (value: Locale) => t(labelKey[value]) From 87d91c29e23d136436342542f83a20bfc4a3d0bf Mon Sep 17 00:00:00 2001 From: Halil Tezcan KARABULUT <unitythemaker+github@gmail.com> Date: Wed, 21 Jan 2026 15:49:46 +0300 Subject: [PATCH 252/426] fix(app): terminal improvements - focus, rename, error state, CSP (#9700) --- .../session/session-sortable-terminal-tab.tsx | 136 +++++++++++- packages/app/src/components/terminal.tsx | 12 +- packages/app/src/context/terminal.tsx | 48 +++-- packages/app/src/pages/session.tsx | 200 ++++++++++++++---- packages/opencode/src/pty/index.ts | 11 +- packages/opencode/src/server/server.ts | 3 +- 6 files changed, 348 insertions(+), 62 deletions(-) diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 0e387b9fb1a..63efa54a846 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -1,14 +1,22 @@ import type { JSX } from "solid-js" +import { createSignal, Show } from "solid-js" import { createSortable } from "@thisbeyond/solid-dnd" import { IconButton } from "@opencode-ai/ui/icon-button" import { Tabs } from "@opencode-ai/ui/tabs" +import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" +import { Icon } from "@opencode-ai/ui/icon" import { useTerminal, type LocalPTY } from "@/context/terminal" import { useLanguage } from "@/context/language" -export function SortableTerminalTab(props: { terminal: LocalPTY }): JSX.Element { +export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => void }): JSX.Element { const terminal = useTerminal() const language = useLanguage() const sortable = createSortable(props.terminal.id) + const [editing, setEditing] = createSignal(false) + const [title, setTitle] = createSignal(props.terminal.title) + const [menuOpen, setMenuOpen] = createSignal(false) + const [menuPosition, setMenuPosition] = createSignal({ x: 0, y: 0 }) + const [blurEnabled, setBlurEnabled] = createSignal(false) const label = () => { language.locale() @@ -19,20 +27,138 @@ export function SortableTerminalTab(props: { terminal: LocalPTY }): JSX.Element if (props.terminal.title) return props.terminal.title return language.t("terminal.title") } + + const close = () => { + const count = terminal.all().length + terminal.close(props.terminal.id) + if (count === 1) { + props.onClose?.() + } + } + + const focus = () => { + if (editing()) return + + if (document.activeElement instanceof HTMLElement) { + document.activeElement.blur() + } + const wrapper = document.getElementById(`terminal-wrapper-${props.terminal.id}`) + const element = wrapper?.querySelector('[data-component="terminal"]') as HTMLElement + if (!element) return + + const textarea = element.querySelector("textarea") as HTMLTextAreaElement + if (textarea) { + textarea.focus() + return + } + element.focus() + element.dispatchEvent(new PointerEvent("pointerdown", { bubbles: true, cancelable: true })) + } + + const edit = (e?: Event) => { + if (e) { + e.stopPropagation() + e.preventDefault() + } + + setBlurEnabled(false) + setTitle(props.terminal.title) + setEditing(true) + setTimeout(() => { + const input = document.getElementById(`terminal-title-input-${props.terminal.id}`) as HTMLInputElement + if (!input) return + input.focus() + input.select() + setTimeout(() => setBlurEnabled(true), 100) + }, 10) + } + + const save = () => { + if (!blurEnabled()) return + + const value = title().trim() + if (value && value !== props.terminal.title) { + terminal.update({ id: props.terminal.id, title: value }) + } + setEditing(false) + } + + const keydown = (e: KeyboardEvent) => { + if (e.key === "Enter") { + e.preventDefault() + save() + return + } + if (e.key === "Escape") { + e.preventDefault() + setEditing(false) + } + } + + const menu = (e: MouseEvent) => { + e.preventDefault() + setMenuPosition({ x: e.clientX, y: e.clientY }) + setMenuOpen(true) + } + return ( // @ts-ignore <div use:sortable classList={{ "h-full": true, "opacity-0": sortable.isActiveDraggable }}> <div class="relative h-full"> <Tabs.Trigger value={props.terminal.id} + onClick={focus} + onMouseDown={(e) => e.preventDefault()} + onContextMenu={menu} closeButton={ - terminal.all().length > 1 && ( - <IconButton icon="close" variant="ghost" onClick={() => terminal.close(props.terminal.id)} /> - ) + <IconButton + icon="close" + variant="ghost" + onClick={(e) => { + e.stopPropagation() + close() + }} + /> } > - {label()} + <span onDblClick={edit} style={{ visibility: editing() ? "hidden" : "visible" }}> + {label()} + </span> </Tabs.Trigger> + <Show when={editing()}> + <div class="absolute inset-0 flex items-center px-3 bg-muted z-10 pointer-events-auto"> + <input + id={`terminal-title-input-${props.terminal.id}`} + type="text" + value={title()} + onInput={(e) => setTitle(e.currentTarget.value)} + onBlur={save} + onKeyDown={keydown} + onMouseDown={(e) => e.stopPropagation()} + class="bg-transparent border-none outline-none text-sm min-w-0 flex-1" + /> + </div> + </Show> + <DropdownMenu open={menuOpen()} onOpenChange={setMenuOpen}> + <DropdownMenu.Portal> + <DropdownMenu.Content + style={{ + position: "fixed", + left: `${menuPosition().x}px`, + top: `${menuPosition().y}px`, + }} + > + <DropdownMenu.Item onSelect={edit}> + <Icon name="edit" class="w-4 h-4 mr-2" /> + Rename + </DropdownMenu.Item> + <DropdownMenu.Item onSelect={close}> + <Icon name="close" class="w-4 h-4 mr-2" /> + Close + </DropdownMenu.Item> + </DropdownMenu.Content> + </DropdownMenu.Portal> + </DropdownMenu> </div> </div> ) diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index f19366b8ab9..1ab17189829 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -241,7 +241,6 @@ export const Terminal = (props: TerminalProps) => { // console.log("Scroll position:", ydisp) // }) socket.addEventListener("open", () => { - console.log("WebSocket connected") sdk.client.pty .update({ ptyID: local.pty.id, @@ -257,10 +256,14 @@ export const Terminal = (props: TerminalProps) => { }) socket.addEventListener("error", (error) => { console.error("WebSocket error:", error) - props.onConnectError?.(error) + local.onConnectError?.(error) }) - socket.addEventListener("close", () => { - console.log("WebSocket disconnected") + socket.addEventListener("close", (event) => { + // Normal closure (code 1000) means PTY process exited - server event handles cleanup + // For other codes (network issues, server restart), trigger error handler + if (event.code !== 1000) { + local.onConnectError?.(new Error(`WebSocket closed abnormally: ${event.code}`)) + } }) }) @@ -293,6 +296,7 @@ export const Terminal = (props: TerminalProps) => { ref={container} data-component="terminal" data-prevent-autofocus + tabIndex={-1} style={{ "background-color": terminalColors().background }} classList={{ ...(local.classList ?? {}), diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index 8bde12da11b..147c4f8f7ea 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -13,6 +13,7 @@ export type LocalPTY = { cols?: number buffer?: string scrollY?: number + error?: boolean } const WORKSPACE_KEY = "__workspace__" @@ -107,14 +108,15 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, sess .then((pty) => { const id = pty.data?.id if (!id) return - setStore("all", [ - ...store.all, - { - id, - title: pty.data?.title ?? "Terminal", - titleNumber: nextNumber, - }, - ]) + const newTerminal = { + id, + title: pty.data?.title ?? "Terminal", + titleNumber: nextNumber, + } + setStore("all", (all) => { + const newAll = [...all, newTerminal] + return newAll + }) setStore("active", id) }) .catch((e) => { @@ -122,7 +124,10 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, sess }) }, update(pty: Partial<LocalPTY> & { id: string }) { - setStore("all", (x) => x.map((x) => (x.id === pty.id ? { ...x, ...pty } : x))) + const index = store.all.findIndex((x) => x.id === pty.id) + if (index !== -1) { + setStore("all", index, (existing) => ({ ...existing, ...pty })) + } sdk.client.pty .update({ ptyID: pty.id, @@ -157,18 +162,29 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, sess open(id: string) { setStore("active", id) }, + next() { + const index = store.all.findIndex((x) => x.id === store.active) + if (index === -1) return + const nextIndex = (index + 1) % store.all.length + setStore("active", store.all[nextIndex]?.id) + }, + previous() { + const index = store.all.findIndex((x) => x.id === store.active) + if (index === -1) return + const prevIndex = index === 0 ? store.all.length - 1 : index - 1 + setStore("active", store.all[prevIndex]?.id) + }, async close(id: string) { batch(() => { - setStore( - "all", - store.all.filter((x) => x.id !== id), - ) + const filtered = store.all.filter((x) => x.id !== id) if (store.active === id) { const index = store.all.findIndex((f) => f.id === id) - const previous = store.all[Math.max(0, index - 1)] - setStore("active", previous?.id) + const next = index > 0 ? index - 1 : 0 + setStore("active", filtered[next]?.id) } + setStore("all", filtered) }) + await sdk.client.pty.remove({ ptyID: id }).catch((e) => { console.error("Failed to close terminal", e) }) @@ -244,6 +260,8 @@ export const { use: useTerminal, provider: TerminalProvider } = createSimpleCont open: (id: string) => workspace().open(id), close: (id: string) => workspace().close(id), move: (id: string, to: number) => workspace().move(id, to), + next: () => workspace().next(), + previous: () => workspace().previous(), } }, }) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 562176c1b7e..a75a0f0c1ed 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1,4 +1,16 @@ -import { For, onCleanup, onMount, Show, Match, Switch, createMemo, createEffect, on, createSignal } from "solid-js" +import { + For, + Index, + onCleanup, + onMount, + Show, + Match, + Switch, + createMemo, + createEffect, + on, + createSignal, +} from "solid-js" import { createMediaQuery } from "@solid-primitives/media" import { createResizeObserver } from "@solid-primitives/resize-observer" import { Dynamic } from "solid-js/web" @@ -350,14 +362,7 @@ export default function Page() { const current = activeMessage() const currentIndex = current ? msgs.findIndex((m) => m.id === current.id) : -1 - - let targetIndex: number - if (currentIndex === -1) { - targetIndex = offset > 0 ? 0 : msgs.length - 1 - } else { - targetIndex = currentIndex + offset - } - + const targetIndex = currentIndex === -1 ? (offset > 0 ? 0 : msgs.length - 1) : currentIndex + offset if (targetIndex < 0 || targetIndex >= msgs.length) return scrollToMessage(msgs[targetIndex], "auto") @@ -381,11 +386,16 @@ export default function Page() { sync.session.sync(params.id) }) + const [autoCreated, setAutoCreated] = createSignal(false) + createEffect(() => { - if (!view().terminal.opened()) return - if (!terminal.ready()) return - if (terminal.all().length !== 0) return + if (!view().terminal.opened()) { + setAutoCreated(false) + return + } + if (!terminal.ready() || terminal.all().length !== 0 || autoCreated()) return terminal.new() + setAutoCreated(true) }) createEffect( @@ -401,6 +411,32 @@ export default function Page() { ), ) + createEffect( + on( + () => terminal.active(), + (activeId) => { + if (!activeId || !view().terminal.opened()) return + // Immediately remove focus + if (document.activeElement instanceof HTMLElement) { + document.activeElement.blur() + } + const wrapper = document.getElementById(`terminal-wrapper-${activeId}`) + const element = wrapper?.querySelector('[data-component="terminal"]') as HTMLElement + if (!element) return + + // Find and focus the ghostty textarea (the actual input element) + const textarea = element.querySelector("textarea") as HTMLTextAreaElement + if (textarea) { + textarea.focus() + return + } + // Fallback: focus container and dispatch pointer event + element.focus() + element.dispatchEvent(new PointerEvent("pointerdown", { bubbles: true, cancelable: true })) + }, + ), + ) + createEffect( on( () => visibleUserMessages().at(-1)?.id, @@ -753,6 +789,9 @@ export default function Page() { return } + // Don't autofocus chat if terminal panel is open + if (view().terminal.opened()) return + if (event.key.length === 1 && event.key !== "Unidentified" && !(event.ctrlKey || event.metaKey)) { inputRef?.focus() } @@ -800,6 +839,23 @@ export default function Page() { const handleTerminalDragEnd = () => { setStore("activeTerminalDraggable", undefined) + const activeId = terminal.active() + if (!activeId) return + setTimeout(() => { + const wrapper = document.getElementById(`terminal-wrapper-${activeId}`) + const element = wrapper?.querySelector('[data-component="terminal"]') as HTMLElement + if (!element) return + + // Find and focus the ghostty textarea (the actual input element) + const textarea = element.querySelector("textarea") as HTMLTextAreaElement + if (textarea) { + textarea.focus() + return + } + // Fallback: focus container and dispatch pointer event + element.focus() + element.dispatchEvent(new PointerEvent("pointerdown", { bubbles: true, cancelable: true })) + }, 0) } const contextOpen = createMemo(() => tabs().active() === "context" || tabs().all().includes("context")) @@ -1855,7 +1911,7 @@ export default function Page() { <Show when={isDesktop() && view().terminal.opened()}> <div - class="relative w-full flex-col shrink-0 border-t border-border-weak-base" + class="relative w-full flex flex-col shrink-0 border-t border-border-weak-base" style={{ height: `${layout.terminal.height()}px` }} > <ResizeHandle @@ -1896,29 +1952,101 @@ export default function Page() { > <DragDropSensors /> <ConstrainDragYAxis /> - <Tabs variant="alt" value={terminal.active()} onChange={terminal.open}> - <Tabs.List class="h-10"> - <SortableProvider ids={terminal.all().map((t: LocalPTY) => t.id)}> - <For each={terminal.all()}>{(pty) => <SortableTerminalTab terminal={pty} />}</For> - </SortableProvider> - <div class="h-full flex items-center justify-center"> - <TooltipKeybind - title={language.t("command.terminal.new")} - keybind={command.keybind("terminal.new")} - class="flex items-center" - > - <IconButton icon="plus-small" variant="ghost" iconSize="large" onClick={terminal.new} /> - </TooltipKeybind> - </div> - </Tabs.List> - <For each={terminal.all()}> - {(pty) => ( - <Tabs.Content value={pty.id}> - <Terminal pty={pty} onCleanup={terminal.update} onConnectError={() => terminal.clone(pty.id)} /> - </Tabs.Content> - )} - </For> - </Tabs> + <div class="flex flex-col h-full"> + <Tabs + variant="alt" + value={terminal.active()} + onChange={(id) => { + // Only switch tabs if not in the middle of starting edit mode + terminal.open(id) + }} + class="!h-auto !flex-none" + > + <Tabs.List class="h-10"> + <SortableProvider ids={terminal.all().map((t: LocalPTY) => t.id)}> + <For each={terminal.all()}> + {(pty) => ( + <SortableTerminalTab + terminal={pty} + onClose={() => { + view().terminal.close() + setAutoCreated(false) + }} + /> + )} + </For> + </SortableProvider> + <div class="h-full flex items-center justify-center"> + <TooltipKeybind + title={language.t("command.terminal.new")} + keybind={command.keybind("terminal.new")} + class="flex items-center" + > + <IconButton icon="plus-small" variant="ghost" iconSize="large" onClick={terminal.new} /> + </TooltipKeybind> + </div> + </Tabs.List> + </Tabs> + <div class="flex-1 min-h-0 relative"> + <For each={terminal.all()}> + {(pty) => { + const [dismissed, setDismissed] = createSignal(false) + return ( + <div + id={`terminal-wrapper-${pty.id}`} + class="absolute inset-0" + style={{ + display: terminal.active() === pty.id ? "block" : "none", + }} + > + <Terminal + pty={pty} + onCleanup={(data) => terminal.update({ ...data, id: pty.id })} + onConnectError={() => { + terminal.update({ id: pty.id, error: true }) + }} + /> + <Show when={pty.error && !dismissed()}> + <div + class="absolute inset-0 flex flex-col items-center justify-center gap-3" + style={{ "background-color": "rgba(0, 0, 0, 0.6)" }} + > + <Icon + name="circle-ban-sign" + class="w-8 h-8" + style={{ color: "rgba(239, 68, 68, 0.8)" }} + /> + <div class="text-center" style={{ color: "rgba(255, 255, 255, 0.7)" }}> + <div class="text-14-semibold mb-1">Connection Lost</div> + <div class="text-12-regular" style={{ color: "rgba(255, 255, 255, 0.5)" }}> + The terminal connection was interrupted. This can happen when the server restarts. + </div> + </div> + <button + class="mt-2 px-3 py-1.5 text-12-medium rounded-lg transition-colors" + style={{ + "background-color": "rgba(255, 255, 255, 0.1)", + color: "rgba(255, 255, 255, 0.7)", + border: "1px solid rgba(255, 255, 255, 0.2)", + }} + onMouseEnter={(e) => + (e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.15)") + } + onMouseLeave={(e) => + (e.currentTarget.style.backgroundColor = "rgba(255, 255, 255, 0.1)") + } + onClick={() => setDismissed(true)} + > + Dismiss + </button> + </div> + </Show> + </div> + ) + }} + </For> + </div> + </div> <DragOverlay> <Show when={store.activeTerminalDraggable}> {(draggedId) => { diff --git a/packages/opencode/src/pty/index.ts b/packages/opencode/src/pty/index.ts index 6edff32e132..73474ed4f87 100644 --- a/packages/opencode/src/pty/index.ts +++ b/packages/opencode/src/pty/index.ts @@ -102,7 +102,12 @@ export namespace Pty { } const cwd = input.cwd || Instance.directory - const env = { ...process.env, ...input.env, TERM: "xterm-256color" } as Record<string, string> + const env = { + ...process.env, + ...input.env, + TERM: "xterm-256color", + OPENCODE_TERMINAL: "1", + } as Record<string, string> log.info("creating session", { id, cmd: command, args, cwd }) const spawn = await pty() @@ -146,6 +151,10 @@ export namespace Pty { ptyProcess.onExit(({ exitCode }) => { log.info("session exited", { id, exitCode }) session.info.status = "exited" + for (const ws of session.subscribers) { + ws.close() + } + session.subscribers.clear() Bus.publish(Event.Exited, { id, exitCode }) for (const ws of session.subscribers) { ws.close() diff --git a/packages/opencode/src/server/server.ts b/packages/opencode/src/server/server.ts index 15b7f829b9c..fa646f21ea8 100644 --- a/packages/opencode/src/server/server.ts +++ b/packages/opencode/src/server/server.ts @@ -499,6 +499,7 @@ export namespace Server { ) .all("/*", async (c) => { const path = c.req.path + const response = await proxy(`https://app.opencode.ai${path}`, { ...c.req, headers: { @@ -508,7 +509,7 @@ export namespace Server { }) response.headers.set( "Content-Security-Policy", - "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'", + "default-src 'self'; script-src 'self' 'wasm-unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' data:", ) return response }) as unknown as Hono, From 7ed448a7e8d8e1d2278086fe6dd2bd5b5e18e4f3 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 07:47:52 -0600 Subject: [PATCH 253/426] test(app): fix e2e --- packages/app/script/e2e-local.ts | 58 ++++++++++++++++---------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/packages/app/script/e2e-local.ts b/packages/app/script/e2e-local.ts index d764a401f6e..2998a99825e 100644 --- a/packages/app/script/e2e-local.ts +++ b/packages/app/script/e2e-local.ts @@ -25,15 +25,21 @@ async function freePort() { } async function waitForHealth(url: string) { - const timeout = Date.now() + 60_000 + const timeout = Date.now() + 120_000 + const errors: string[] = [] while (Date.now() < timeout) { - const ok = await fetch(url) - .then((r) => r.ok) - .catch(() => false) - if (ok) return + const result = await fetch(url) + .then((r) => ({ ok: r.ok, error: undefined })) + .catch((error) => ({ + ok: false, + error: error instanceof Error ? error.message : String(error), + })) + if (result.ok) return + if (result.error) errors.push(result.error) await new Promise((r) => setTimeout(r, 250)) } - throw new Error(`Timed out waiting for server health: ${url}`) + const last = errors.length ? ` (last error: ${errors[errors.length - 1]})` : "" + throw new Error(`Timed out waiting for server health: ${url}${last}`) } const appDir = process.cwd() @@ -72,7 +78,7 @@ const serverEnv = { } satisfies Record<string, string> const runnerEnv = { - ...process.env, + ...serverEnv, PLAYWRIGHT_SERVER_HOST: "127.0.0.1", PLAYWRIGHT_SERVER_PORT: String(serverPort), VITE_OPENCODE_SERVER_HOST: "127.0.0.1", @@ -92,27 +98,21 @@ if (seedExit !== 0) { process.exit(seedExit) } -const server = Bun.spawn( - [ - "bun", - "dev", - "--", - "--print-logs", - "--log-level", - "WARN", - "serve", - "--port", - String(serverPort), - "--hostname", - "127.0.0.1", - ], - { - cwd: opencodeDir, - env: serverEnv, - stdout: "inherit", - stderr: "inherit", - }, -) +Object.assign(process.env, serverEnv) +process.env.AGENT = "1" +process.env.OPENCODE = "1" + +const log = await import("../../opencode/src/util/log") +const install = await import("../../opencode/src/installation") +await log.Log.init({ + print: true, + dev: install.Installation.isLocal(), + level: "WARN", +}) + +const servermod = await import("../../opencode/src/server/server") +const server = servermod.Server.listen({ port: serverPort, hostname: "127.0.0.1" }) +console.log(`opencode server listening on http://127.0.0.1:${serverPort}`) try { await waitForHealth(`http://127.0.0.1:${serverPort}/global/health`) @@ -126,5 +126,5 @@ try { process.exitCode = await runner.exited } finally { - server.kill() + await server.stop() } From d00b8df7707c0a4ad94ce7a3488780fe5764ae6c Mon Sep 17 00:00:00 2001 From: Brendan Allan <brendonovich@outlook.com> Date: Wed, 21 Jan 2026 22:35:05 +0800 Subject: [PATCH 254/426] feat(desktop): properly integrate window controls on windows (#9835) --- packages/app/src/components/titlebar.tsx | 18 +- packages/desktop/index.html | 1 + packages/desktop/src-tauri/Cargo.lock | 342 +++++++++++++++++- packages/desktop/src-tauri/Cargo.toml | 1 + .../src-tauri/capabilities/default.json | 8 + packages/desktop/src-tauri/src/lib.rs | 11 +- packages/desktop/src/index.tsx | 8 +- packages/desktop/src/styles.css | 7 + 8 files changed, 373 insertions(+), 23 deletions(-) create mode 100644 packages/desktop/src/styles.css diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index d0d27e99f60..7e50687d516 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -18,6 +18,7 @@ export function Titlebar() { const theme = useTheme() const mac = createMemo(() => platform.platform === "desktop" && platform.os === "macos") + const windows = createMemo(() => platform.platform === "desktop" && platform.os === "windows") const reserve = createMemo( () => platform.platform === "desktop" && (platform.os === "windows" || platform.os === "linux"), ) @@ -75,13 +76,15 @@ export function Titlebar() { } return ( - <header class="h-10 shrink-0 bg-background-base flex items-center relative"> + <header class="h-10 shrink-0 bg-background-base flex items-center relative" data-tauri-drag-region> <div classList={{ - "flex items-center w-full min-w-0 pr-2": true, + "flex items-center w-full min-w-0": true, "pl-2": !mac(), + "pr-2": !windows(), }} onMouseDown={drag} + data-tauri-drag-region > <Show when={mac()}> <div class="w-[72px] h-full shrink-0" data-tauri-drag-region /> @@ -116,9 +119,16 @@ export function Titlebar() { </div> </Button> </TooltipKeybind> - <div id="opencode-titlebar-left" class="flex items-center gap-3 min-w-0 px-2" /> + <div id="opencode-titlebar-left" class="flex items-center gap-3 min-w-0 px-2" data-tauri-drag-region /> <div class="flex-1 h-full" data-tauri-drag-region /> - <div id="opencode-titlebar-right" class="flex items-center gap-3 shrink-0 flex-1 justify-end" /> + <div + id="opencode-titlebar-right" + class="flex items-center gap-3 shrink-0 flex-1 justify-end" + data-tauri-drag-region + /> + <Show when={windows()}> + <div data-tauri-decorum-tb class="flex flex-row" /> + </Show> </div> <div class="absolute inset-0 flex items-center justify-center pointer-events-none"> <div id="opencode-titlebar-center" class="pointer-events-auto" /> diff --git a/packages/desktop/index.html b/packages/desktop/index.html index f03666d5e78..7bed1e8bd4c 100644 --- a/packages/desktop/index.html +++ b/packages/desktop/index.html @@ -18,6 +18,7 @@ <body class="antialiased overscroll-none text-12-regular overflow-hidden"> <noscript>You need to enable JavaScript to run this app.</noscript> <div id="root" class="flex flex-col h-dvh"></div> + <div data-tauri-decorum-tb class="w-0 h-0 hidden" /> <script src="/src/index.tsx" type="module"></script> </body> </html> diff --git a/packages/desktop/src-tauri/Cargo.lock b/packages/desktop/src-tauri/Cargo.lock index e577b4db78a..5505f4e4d0c 100644 --- a/packages/desktop/src-tauri/Cargo.lock +++ b/packages/desktop/src-tauri/Cargo.lock @@ -8,6 +8,12 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "ahash" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289" + [[package]] name = "aho-corasick" version = "1.1.4" @@ -291,6 +297,12 @@ dependencies = [ "serde_core", ] +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + [[package]] name = "block-buffer" version = "0.10.4" @@ -522,6 +534,36 @@ dependencies = [ "error-code", ] +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + [[package]] name = "combine" version = "4.6.7" @@ -602,6 +644,19 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types", + "libc", +] + [[package]] name = "core-graphics" version = "0.24.0" @@ -610,11 +665,22 @@ checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" dependencies = [ "bitflags 2.10.0", "core-foundation 0.10.1", - "core-graphics-types", + "core-graphics-types 0.2.0", "foreign-types", "libc", ] +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + [[package]] name = "core-graphics-types" version = "0.2.0" @@ -879,6 +945,15 @@ dependencies = [ "syn 2.0.110", ] +[[package]] +name = "dlv-list" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68df3f2b690c1b86e65ef7830956aededf3cb0a16f898f79b9a6f421a7b6211b" +dependencies = [ + "rand 0.8.5", +] + [[package]] name = "document-features" version = "0.2.12" @@ -965,6 +1040,19 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf" +[[package]] +name = "enigo" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "802e4b2ae123615659085369b453cba87c5562e46ed8050a909fee18a9bc3157" +dependencies = [ + "core-graphics 0.23.2", + "libc", + "objc", + "pkg-config", + "windows 0.51.1", +] + [[package]] name = "enumflags2" version = "0.7.12" @@ -1085,6 +1173,15 @@ dependencies = [ "rustc_version", ] +[[package]] +name = "file-locker" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75ae8b5984a4863d8a32109a848d038bd6d914f20f010cc141375f7a183c41cf" +dependencies = [ + "nix 0.29.0", +] + [[package]] name = "filetime" version = "0.2.26" @@ -1167,6 +1264,16 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "freedesktop_entry_parser" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db9c27b72f19a99a895f8ca89e2d26e4ef31013376e56fdafef697627306c3e4" +dependencies = [ + "nom 7.1.3", + "thiserror 1.0.69", +] + [[package]] name = "futf" version = "0.1.5" @@ -1623,6 +1730,15 @@ dependencies = [ "zerocopy", ] +[[package]] +name = "hashbrown" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +dependencies = [ + "ahash", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -2171,6 +2287,29 @@ dependencies = [ "redox_syscall", ] +[[package]] +name = "linicon" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee8c5653188a809616c97296180a0547a61dba205bcdcbdd261dbd022a25fd9" +dependencies = [ + "file-locker", + "freedesktop_entry_parser", + "linicon-theme", + "memmap2", + "thiserror 1.0.69", +] + +[[package]] +name = "linicon-theme" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f8240c33bb08c5d8b8cdea87b683b05e61037aa76ff26bef40672cc6ecbb80" +dependencies = [ + "freedesktop_entry_parser", + "rust-ini", +] + [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -2185,7 +2324,7 @@ checksum = "557f908c6cb431dd2496687aa9ea326507110ee4780517a42ade2df25d31126c" dependencies = [ "byteorder", "rustix", - "windows", + "windows 0.61.3", ] [[package]] @@ -2239,6 +2378,15 @@ dependencies = [ "time", ] +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + [[package]] name = "markup5ever" version = "0.14.1" @@ -2276,6 +2424,15 @@ version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + [[package]] name = "memoffset" version = "0.9.1" @@ -2291,6 +2448,12 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + [[package]] name = "minisign-verify" version = "0.2.4" @@ -2385,6 +2548,18 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nix" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" +dependencies = [ + "bitflags 2.10.0", + "cfg-if", + "cfg_aliases", + "libc", +] + [[package]] name = "nix" version = "0.30.1" @@ -2404,6 +2579,16 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + [[package]] name = "nom" version = "8.0.0" @@ -2464,6 +2649,15 @@ dependencies = [ "syn 2.0.110", ] +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + [[package]] name = "objc-sys" version = "0.3.5" @@ -2802,6 +2996,7 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-clipboard-manager", + "tauri-plugin-decorum", "tauri-plugin-dialog", "tauri-plugin-http", "tauri-plugin-notification", @@ -2816,7 +3011,7 @@ dependencies = [ "tokio", "uuid", "webkit2gtk", - "windows", + "windows 0.61.3", ] [[package]] @@ -2825,6 +3020,16 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "ordered-multimap" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c672c7ad9ec066e428c00eb917124a06f08db19e2584de982cc34b1f4c12485" +dependencies = [ + "dlv-list", + "hashbrown 0.9.1", +] + [[package]] name = "ordered-stream" version = "0.2.0" @@ -2843,7 +3048,7 @@ checksum = "7c39b5918402d564846d5aba164c09a66cc88d232179dfd3e3c619a25a268392" dependencies = [ "android_system_properties", "log", - "nix", + "nix 0.30.1", "objc2 0.6.3", "objc2-foundation 0.3.2", "objc2-ui-kit", @@ -3655,6 +3860,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rust-ini" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63471c4aa97a1cf8332a5f97709a79a4234698de6a1f5087faf66f2dae810e22" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + [[package]] name = "rustc-hash" version = "2.1.1" @@ -4106,7 +4321,7 @@ checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "bytemuck", "cfg_aliases", - "core-graphics", + "core-graphics 0.24.0", "foreign-types", "js-sys", "log", @@ -4300,7 +4515,7 @@ dependencies = [ "bitflags 2.10.0", "block2 0.6.2", "core-foundation 0.10.1", - "core-graphics", + "core-graphics 0.24.0", "crossbeam-channel", "dispatch", "dlopen2", @@ -4325,7 +4540,7 @@ dependencies = [ "tao-macros", "unicode-segmentation", "url", - "windows", + "windows 0.61.3", "windows-core 0.61.2", "windows-version", "x11-dl", @@ -4407,7 +4622,7 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows", + "windows 0.61.3", ] [[package]] @@ -4505,6 +4720,23 @@ dependencies = [ "thiserror 2.0.17", ] +[[package]] +name = "tauri-plugin-decorum" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db925c61a04a937028bc91ad8ae64a93b84a1715b964530925a54e793d494999" +dependencies = [ + "anyhow", + "cocoa", + "enigo", + "linicon", + "objc", + "rand 0.8.5", + "serde", + "tauri", + "tauri-plugin", +] + [[package]] name = "tauri-plugin-dialog" version = "2.4.2" @@ -4606,7 +4838,7 @@ dependencies = [ "tauri-plugin", "thiserror 2.0.17", "url", - "windows", + "windows 0.61.3", "zbus", ] @@ -4759,7 +4991,7 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows", + "windows 0.61.3", ] [[package]] @@ -4785,7 +5017,7 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows", + "windows 0.61.3", "wry", ] @@ -4846,7 +5078,7 @@ checksum = "0b1e66e07de489fe43a46678dd0b8df65e0c973909df1b60ba33874e297ba9b9" dependencies = [ "quick-xml 0.37.5", "thiserror 2.0.17", - "windows", + "windows 0.61.3", "windows-version", ] @@ -5236,7 +5468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" dependencies = [ "memchr", - "nom", + "nom 8.0.0", "petgraph", ] @@ -5673,7 +5905,7 @@ checksum = "d4ba622a989277ef3886dd5afb3e280e3dd6d974b766118950a08f8f678ad6a4" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows", + "windows 0.61.3", "windows-core 0.61.2", "windows-implement", "windows-interface", @@ -5697,7 +5929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "36695906a1b53a3bf5c4289621efedac12b73eeb0b89e7e1a89b517302d5d75c" dependencies = [ "thiserror 2.0.17", - "windows", + "windows 0.61.3", "windows-core 0.61.2", ] @@ -5753,6 +5985,16 @@ dependencies = [ "windows-version", ] +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + [[package]] name = "windows" version = "0.61.3" @@ -5775,6 +6017,15 @@ dependencies = [ "windows-core 0.61.2", ] +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-core" version = "0.61.2" @@ -5963,6 +6214,21 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + [[package]] name = "windows-targets" version = "0.52.6" @@ -6020,6 +6286,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -6038,6 +6310,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -6056,6 +6334,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -6086,6 +6370,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -6104,6 +6394,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -6122,6 +6418,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -6140,6 +6442,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -6249,7 +6557,7 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows", + "windows 0.61.3", "windows-core 0.61.2", "windows-version", "x11-dl", @@ -6346,7 +6654,7 @@ dependencies = [ "futures-core", "futures-lite", "hex", - "nix", + "nix 0.30.1", "ordered-stream", "serde", "serde_repr", diff --git a/packages/desktop/src-tauri/Cargo.toml b/packages/desktop/src-tauri/Cargo.toml index 1a586464151..bcbf068bbbf 100644 --- a/packages/desktop/src-tauri/Cargo.toml +++ b/packages/desktop/src-tauri/Cargo.toml @@ -40,6 +40,7 @@ futures = "0.3.31" semver = "1.0.27" reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] } uuid = { version = "1.19.0", features = ["v4"] } +tauri-plugin-decorum = "1.1.1" [target.'cfg(target_os = "linux")'.dependencies] diff --git a/packages/desktop/src-tauri/capabilities/default.json b/packages/desktop/src-tauri/capabilities/default.json index 2653f8c2800..12de32931bc 100644 --- a/packages/desktop/src-tauri/capabilities/default.json +++ b/packages/desktop/src-tauri/capabilities/default.json @@ -13,6 +13,14 @@ "core:window:allow-show", "core:window:allow-unminimize", "core:window:allow-set-focus", + "core:window:allow-close", + "core:window:allow-center", + "core:window:allow-minimize", + "core:window:allow-maximize", + "core:window:allow-set-size", + "core:window:allow-is-maximized", + "core:window:allow-toggle-maximize", + "decorum:allow-show-snap-overlay", "shell:default", "updater:default", "dialog:default", diff --git a/packages/desktop/src-tauri/src/lib.rs b/packages/desktop/src-tauri/src/lib.rs index 7b11397a396..aea730926a7 100644 --- a/packages/desktop/src-tauri/src/lib.rs +++ b/packages/desktop/src-tauri/src/lib.rs @@ -15,6 +15,8 @@ use std::{ time::{Duration, Instant}, }; use tauri::{AppHandle, LogicalSize, Manager, RunEvent, State, WebviewWindowBuilder}; +#[cfg(windows)] +use tauri_plugin_decorum::WebviewWindowExt; use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogResult}; use tauri_plugin_shell::process::{CommandChild, CommandEvent}; use tauri_plugin_store::StoreExt; @@ -275,6 +277,7 @@ pub fn run() { .plugin(tauri_plugin_http::init()) .plugin(tauri_plugin_notification::init()) .plugin(PinchZoomDisablePlugin) + .plugin(tauri_plugin_decorum::init()) .invoke_handler(tauri::generate_handler![ kill_sidecar, install_cli, @@ -319,7 +322,13 @@ pub fn run() { .title_bar_style(tauri::TitleBarStyle::Overlay) .hidden_title(true); - let _window = window_builder.build().expect("Failed to create window"); + #[cfg(windows)] + let window_builder = window_builder.decorations(false); + + let window = window_builder.build().expect("Failed to create window"); + + #[cfg(windows)] + let _ = window.create_overlay_titlebar(); let (tx, rx) = oneshot::channel(); app.manage(ServerState::new(None, rx)); diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index 7d41fd8f457..e45f2854330 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -19,6 +19,7 @@ import { createSignal, Show, Accessor, JSX, createResource, onMount, onCleanup } import { UPDATER_ENABLED } from "./updater" import { createMenu } from "./menu" import pkg from "../package.json" +import "./styles.css" const root = document.getElementById("root") if (import.meta.env.DEV && !(root instanceof HTMLElement)) { @@ -359,7 +360,11 @@ type ServerReadyData = { url: string; password: string | null } // Gate component that waits for the server to be ready function ServerGate(props: { children: (data: Accessor<ServerReadyData>) => JSX.Element }) { - const [serverData] = createResource<ServerReadyData>(() => invoke("ensure_server_ready")) + const [serverData] = createResource<ServerReadyData>(() => + invoke("ensure_server_ready").then((v) => { + return new Promise((res) => setTimeout(() => res(v), 2000)) + }), + ) return ( // Not using suspense as not all components are compatible with it (undefined refs) @@ -368,6 +373,7 @@ function ServerGate(props: { children: (data: Accessor<ServerReadyData>) => JSX. fallback={ <div class="h-screen w-screen flex flex-col items-center justify-center bg-background-base"> <Splash class="w-16 h-20 opacity-50 animate-pulse" /> + <div data-tauri-decorum-tb class="flex flex-row absolute top-0 right-0 z-10 h-10" /> </div> } > diff --git a/packages/desktop/src/styles.css b/packages/desktop/src/styles.css new file mode 100644 index 00000000000..143a21312e1 --- /dev/null +++ b/packages/desktop/src/styles.css @@ -0,0 +1,7 @@ +button.decorum-tb-btn, +button#decorum-tb-minimize, +button#decorum-tb-maximize, +button#decorum-tb-close, +div[data-tauri-decorum-tb] { + height: calc(var(--spacing) * 10) !important; +} From 368cd2af4c53323eb9d2a9b65621a5bc254fb470 Mon Sep 17 00:00:00 2001 From: DNGriffin <31415269+DNGriffin@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:22:40 -0600 Subject: [PATCH 255/426] fix(app): workspaces padding wonkiness (#9772) --- packages/app/src/pages/layout.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 172ae71740c..756ddbe00e9 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1173,7 +1173,7 @@ export default function Layout(props: ParentProps) { return ( <Dialog title={language.t("workspace.delete.title")} fit> - <div class="flex flex-col gap-4 px-2.5 pb-3"> + <div class="flex flex-col gap-4 pl-6 pr-2.5 pb-3"> <div class="flex flex-col gap-1"> <span class="text-14-regular text-text-strong"> {language.t("workspace.delete.confirm", { name: name() })} @@ -1253,7 +1253,7 @@ export default function Layout(props: ParentProps) { return ( <Dialog title={language.t("workspace.reset.title")} fit> - <div class="flex flex-col gap-4 px-2.5 pb-3"> + <div class="flex flex-col gap-4 pl-6 pr-2.5 pb-3"> <div class="flex flex-col gap-1"> <span class="text-14-regular text-text-strong"> {language.t("workspace.reset.confirm", { name: name() })} @@ -1830,7 +1830,7 @@ export default function Layout(props: ParentProps) { size="large" onClick={(e: MouseEvent) => { loadMore() - ;(e.currentTarget as HTMLButtonElement).blur() + ;(e.currentTarget as HTMLButtonElement).blur() }} > {language.t("common.loadMore")} @@ -2015,7 +2015,7 @@ export default function Layout(props: ParentProps) { size="large" onClick={(e: MouseEvent) => { loadMore() - ;(e.currentTarget as HTMLButtonElement).blur() + ;(e.currentTarget as HTMLButtonElement).blur() }} > {language.t("common.loadMore")} From 19f68382fd3501d1abc3ca9c49aee61f2c01fdb4 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 15:23:21 +0000 Subject: [PATCH 256/426] chore: generate --- packages/app/src/pages/layout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 756ddbe00e9..d8e0d55f3ba 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1830,7 +1830,7 @@ export default function Layout(props: ParentProps) { size="large" onClick={(e: MouseEvent) => { loadMore() - ;(e.currentTarget as HTMLButtonElement).blur() + ;(e.currentTarget as HTMLButtonElement).blur() }} > {language.t("common.loadMore")} @@ -2015,7 +2015,7 @@ export default function Layout(props: ParentProps) { size="large" onClick={(e: MouseEvent) => { loadMore() - ;(e.currentTarget as HTMLButtonElement).blur() + ;(e.currentTarget as HTMLButtonElement).blur() }} > {language.t("common.loadMore")} From 6ac8c85b3441ddd5522d37e3e28cabc604d34d70 Mon Sep 17 00:00:00 2001 From: Ronan Kearns <90280289+kearns-cu@users.noreply.github.com> Date: Wed, 21 Jan 2026 10:25:34 -0500 Subject: [PATCH 257/426] feat(app): model tooltip metadata in chooser (per Figma request) (#9707) --- .../components/dialog-select-model-unpaid.tsx | 12 ++++ .../src/components/dialog-select-model.tsx | 13 ++++ packages/app/src/components/model-tooltip.tsx | 70 +++++++++++++++++++ packages/ui/src/components/list.tsx | 69 +++++++++--------- 4 files changed, 132 insertions(+), 32 deletions(-) create mode 100644 packages/app/src/components/model-tooltip.tsx diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index 98cf575083c..208e90d174c 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -5,11 +5,13 @@ import type { IconName } from "@opencode-ai/ui/icons/provider" import { List, type ListRef } from "@opencode-ai/ui/list" import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { Tag } from "@opencode-ai/ui/tag" +import { Tooltip } from "@opencode-ai/ui/tooltip" import { type Component, onCleanup, onMount, Show } from "solid-js" import { useLocal } from "@/context/local" import { popularProviders, useProviders } from "@/hooks/use-providers" import { DialogConnectProvider } from "./dialog-connect-provider" import { DialogSelectProvider } from "./dialog-select-provider" +import { ModelTooltip } from "./model-tooltip" import { useLanguage } from "@/context/language" export const DialogSelectModelUnpaid: Component = () => { @@ -40,6 +42,16 @@ export const DialogSelectModelUnpaid: Component = () => { items={local.model.list} current={local.model.current()} key={(x) => `${x.provider.id}:${x.id}`} + itemWrapper={(item, node) => ( + <Tooltip + class="w-full" + placement="right-start" + gutter={12} + value={<ModelTooltip model={item} latest={item.latest} free={item.provider.id === "opencode" && (!item.cost || item.cost.input === 0)} />} + > + {node} + </Tooltip> + )} onSelect={(x) => { local.model.set(x ? { modelID: x.id, providerID: x.provider.id } : undefined, { recent: true, diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index 8288a825579..dd599e14332 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -8,8 +8,10 @@ import { IconButton } from "@opencode-ai/ui/icon-button" import { Tag } from "@opencode-ai/ui/tag" import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" +import { Tooltip } from "@opencode-ai/ui/tooltip" import { DialogSelectProvider } from "./dialog-select-provider" import { DialogManageModels } from "./dialog-manage-models" +import { ModelTooltip } from "./model-tooltip" import { useLanguage } from "@/context/language" const ModelList: Component<{ @@ -28,6 +30,7 @@ const ModelList: Component<{ .filter((m) => (props.provider ? m.provider.id === props.provider : true)), ) + return ( <List class={`flex-1 min-h-0 [&_[data-slot=list-scroll]]:flex-1 [&_[data-slot=list-scroll]]:min-h-0 ${props.class ?? ""}`} @@ -46,6 +49,16 @@ const ModelList: Component<{ if (!popularProviders.includes(aProvider) && popularProviders.includes(bProvider)) return 1 return popularProviders.indexOf(aProvider) - popularProviders.indexOf(bProvider) }} + itemWrapper={(item, node) => ( + <Tooltip + class="w-full" + placement="right-start" + gutter={12} + value={<ModelTooltip model={item} latest={item.latest} free={item.provider.id === "opencode" && (!item.cost || item.cost.input === 0)} />} + > + {node} + </Tooltip> + )} onSelect={(x) => { local.model.set(x ? { modelID: x.id, providerID: x.provider.id } : undefined, { recent: true, diff --git a/packages/app/src/components/model-tooltip.tsx b/packages/app/src/components/model-tooltip.tsx new file mode 100644 index 00000000000..14b4ba799bd --- /dev/null +++ b/packages/app/src/components/model-tooltip.tsx @@ -0,0 +1,70 @@ +import { Show, type Component } from "solid-js" + +type InputKey = "text" | "image" | "audio" | "video" | "pdf" +type InputMap = Record<InputKey, boolean> + +type ModelInfo = { + id: string + name: string + provider: { + name: string + } + capabilities?: { + reasoning: boolean + input: InputMap + } + modalities?: { + input: Array<string> + } + reasoning?: boolean + limit: { + context: number + } +} + +function sourceName(model: ModelInfo) { + const value = `${model.id} ${model.name}`.toLowerCase() + + if (/claude|anthropic/.test(value)) return "Anthropic" + if (/gpt|o[1-4]|codex|openai/.test(value)) return "OpenAI" + if (/gemini|palm|bard|google/.test(value)) return "Google" + if (/grok|xai/.test(value)) return "xAI" + if (/llama|meta/.test(value)) return "Meta" + + return model.provider.name +} + +export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?: boolean }> = (props) => { + const title = () => { + const tags: Array<string> = [] + if (props.latest) tags.push("Latest") + if (props.free) tags.push("Free") + const suffix = tags.length ? ` (${tags.join(", ")})` : "" + return `${sourceName(props.model)} ${props.model.name}${suffix}` + } + const inputs = () => { + if (props.model.capabilities) { + const input = props.model.capabilities.input + const order: Array<InputKey> = ["text", "image", "audio", "video", "pdf"] + const entries = order.filter((key) => input[key]) + return entries.length ? entries.join(", ") : undefined + } + return props.model.modalities?.input?.join(", ") + } + const reasoning = () => { + if (props.model.capabilities) return props.model.capabilities.reasoning ? "Allows reasoning" : "No reasoning" + return props.model.reasoning ? "Allows reasoning" : "No reasoning" + } + const context = () => `Context limit ${props.model.limit.context.toLocaleString()}` + + return ( + <div class="flex flex-col gap-1 py-1"> + <div class="text-13-medium">{title()}</div> + <Show when={inputs()}> + {(value) => <div class="text-12-regular text-text-invert-base">Allows: {value()}</div>} + </Show> + <div class="text-12-regular text-text-invert-base">{reasoning()}</div> + <div class="text-12-regular text-text-invert-base">{context()}</div> + </div> + ) +} diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index fc9fa540517..6d7ad1da6d7 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -24,6 +24,7 @@ export interface ListProps<T> extends FilteredListProps<T> { activeIcon?: IconProps["name"] filter?: string search?: ListSearchProps | boolean + itemWrapper?: (item: T, node: JSX.Element) => JSX.Element } export interface ListRef { @@ -245,39 +246,43 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void }) </Show> <div data-slot="list-items"> <For each={group.items}> - {(item, i) => ( - <button - data-slot="list-item" - data-key={props.key(item)} - data-active={props.key(item) === active()} - data-selected={item === props.current} - onClick={() => handleSelect(item, i())} - type="button" - onMouseMove={(event) => { - if (!moved(event)) return - setStore("mouseActive", true) - setActive(props.key(item)) - }} - onMouseLeave={() => { - if (!store.mouseActive) return - setActive(null) - }} - > - {props.children(item)} - <Show when={item === props.current}> - <span data-slot="list-item-selected-icon"> - <Icon name="check-small" /> - </span> - </Show> - <Show when={props.activeIcon}> - {(icon) => ( - <span data-slot="list-item-active-icon"> - <Icon name={icon()} /> + {(item, i) => { + const node = ( + <button + data-slot="list-item" + data-key={props.key(item)} + data-active={props.key(item) === active()} + data-selected={item === props.current} + onClick={() => handleSelect(item, i())} + type="button" + onMouseMove={(event) => { + if (!moved(event)) return + setStore("mouseActive", true) + setActive(props.key(item)) + }} + onMouseLeave={() => { + if (!store.mouseActive) return + setActive(null) + }} + > + {props.children(item)} + <Show when={item === props.current}> + <span data-slot="list-item-selected-icon"> + <Icon name="check-small" /> </span> - )} - </Show> - </button> - )} + </Show> + <Show when={props.activeIcon}> + {(icon) => ( + <span data-slot="list-item-active-icon"> + <Icon name={icon()} /> + </span> + )} + </Show> + </button> + ) + if (props.itemWrapper) return props.itemWrapper(item, node) + return node + }} </For> </div> </div> From f736751a8cba81938ffccfdada7e0a0cdcba7501 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 15:26:15 +0000 Subject: [PATCH 258/426] chore: generate --- .../app/src/components/dialog-select-model-unpaid.tsx | 8 +++++++- packages/app/src/components/dialog-select-model.tsx | 9 +++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index 208e90d174c..1e7c9f52a9a 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -47,7 +47,13 @@ export const DialogSelectModelUnpaid: Component = () => { class="w-full" placement="right-start" gutter={12} - value={<ModelTooltip model={item} latest={item.latest} free={item.provider.id === "opencode" && (!item.cost || item.cost.input === 0)} />} + value={ + <ModelTooltip + model={item} + latest={item.latest} + free={item.provider.id === "opencode" && (!item.cost || item.cost.input === 0)} + /> + } > {node} </Tooltip> diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index dd599e14332..a030e952b9a 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -30,7 +30,6 @@ const ModelList: Component<{ .filter((m) => (props.provider ? m.provider.id === props.provider : true)), ) - return ( <List class={`flex-1 min-h-0 [&_[data-slot=list-scroll]]:flex-1 [&_[data-slot=list-scroll]]:min-h-0 ${props.class ?? ""}`} @@ -54,7 +53,13 @@ const ModelList: Component<{ class="w-full" placement="right-start" gutter={12} - value={<ModelTooltip model={item} latest={item.latest} free={item.provider.id === "opencode" && (!item.cost || item.cost.input === 0)} />} + value={ + <ModelTooltip + model={item} + latest={item.latest} + free={item.provider.id === "opencode" && (!item.cost || item.cost.input === 0)} + /> + } > {node} </Tooltip> From 63da3a338a6c2da8062e75634b1263d4dd028578 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:28:50 -0600 Subject: [PATCH 259/426] fix(app): breaking out of auto-scroll --- packages/app/src/pages/session.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index a75a0f0c1ed..8d6122819ad 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -903,7 +903,7 @@ export default function Page() { const autoScroll = createAutoScroll({ working: () => true, - overflowAnchor: "auto", + overflowAnchor: "dynamic", }) // When the user returns to the bottom, treat the active message as "latest". From 4fc7bcf09e5bf57d697915cd9236dbca24cf8192 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:30:40 -0600 Subject: [PATCH 260/426] fix: type error --- packages/desktop/src/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index e45f2854330..e36644b05bb 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -362,7 +362,7 @@ type ServerReadyData = { url: string; password: string | null } function ServerGate(props: { children: (data: Accessor<ServerReadyData>) => JSX.Element }) { const [serverData] = createResource<ServerReadyData>(() => invoke("ensure_server_ready").then((v) => { - return new Promise((res) => setTimeout(() => res(v), 2000)) + return new Promise((res) => setTimeout(() => res(v as ServerReadyData), 2000)) }), ) From 97e0e79f1a7f268ad40d91e17a0a174d009db5a1 Mon Sep 17 00:00:00 2001 From: Frank <frank@anoma.ly> Date: Tue, 20 Jan 2026 23:15:07 -0500 Subject: [PATCH 261/426] wip: black --- packages/console/core/script/black-gift.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/console/core/script/black-gift.ts b/packages/console/core/script/black-gift.ts index 3fbf210ab5c..ec7db879914 100644 --- a/packages/console/core/script/black-gift.ts +++ b/packages/console/core/script/black-gift.ts @@ -68,7 +68,7 @@ const subscription = await Billing.stripe().subscriptions.create({ { price: `price_1SmfyI2StuRr0lbXovxJNeZn`, discounts: [{ coupon: couponID }], - quantity: 2, + quantity: seats, }, ], }) From f7f2d9700aad9b9599055121815cb9d6de8a036f Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:45:57 -0600 Subject: [PATCH 262/426] test(app): fix e2e --- packages/app/script/e2e-local.ts | 35 ++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/packages/app/script/e2e-local.ts b/packages/app/script/e2e-local.ts index 2998a99825e..aac2c15bb76 100644 --- a/packages/app/script/e2e-local.ts +++ b/packages/app/script/e2e-local.ts @@ -111,20 +111,33 @@ await log.Log.init({ }) const servermod = await import("../../opencode/src/server/server") +const inst = await import("../../opencode/src/project/instance") const server = servermod.Server.listen({ port: serverPort, hostname: "127.0.0.1" }) console.log(`opencode server listening on http://127.0.0.1:${serverPort}`) -try { - await waitForHealth(`http://127.0.0.1:${serverPort}/global/health`) +const result = await (async () => { + try { + await waitForHealth(`http://127.0.0.1:${serverPort}/global/health`) - const runner = Bun.spawn(["bun", "test:e2e", ...extraArgs], { - cwd: appDir, - env: runnerEnv, - stdout: "inherit", - stderr: "inherit", - }) + const runner = Bun.spawn(["bun", "test:e2e", ...extraArgs], { + cwd: appDir, + env: runnerEnv, + stdout: "inherit", + stderr: "inherit", + }) + + return { code: await runner.exited } + } catch (error) { + return { error } + } finally { + await inst.Instance.disposeAll() + await server.stop() + } +})() - process.exitCode = await runner.exited -} finally { - await server.stop() +if ("error" in result) { + console.error(result.error) + process.exit(1) } + +process.exit(result.code) From 0059fdc1f5158fc41642b8982928c5abc25e4a4f Mon Sep 17 00:00:00 2001 From: Nolan Darilek <nolan@thewordnerd.info> Date: Wed, 21 Jan 2026 09:57:50 -0600 Subject: [PATCH 263/426] fix(app): add aria-labels to titlebar and sidebar buttons (#9843) --- packages/app/src/components/titlebar.tsx | 12 +++++++++--- packages/app/src/pages/layout.tsx | 13 +++++++++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index 7e50687d516..67c012651cb 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -89,12 +89,12 @@ export function Titlebar() { <Show when={mac()}> <div class="w-[72px] h-full shrink-0" data-tauri-drag-region /> <div class="xl:hidden w-10 shrink-0 flex items-center justify-center"> - <IconButton icon="menu" variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} /> + <IconButton icon="menu" variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} aria-label="Toggle menu" /> </div> </Show> <Show when={!mac()}> <div class="xl:hidden w-[48px] shrink-0 flex items-center justify-center"> - <IconButton icon="menu" variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} /> + <IconButton icon="menu" variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} aria-label="Toggle menu" /> </div> </Show> <TooltipKeybind @@ -103,7 +103,13 @@ export function Titlebar() { title={language.t("command.sidebar.toggle")} keybind={command.keybind("sidebar.toggle")} > - <Button variant="ghost" class="group/sidebar-toggle size-6 p-0" onClick={layout.sidebar.toggle}> + <Button + variant="ghost" + class="group/sidebar-toggle size-6 p-0" + onClick={layout.sidebar.toggle} + aria-label="Toggle sidebar" + aria-expanded={layout.sidebar.opened()} + > <div class="relative flex items-center justify-center size-4 [&>*]:absolute [&>*]:inset-0"> <Icon size="small" diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index d8e0d55f3ba..9d7cc9c716e 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1573,7 +1573,7 @@ export default function Layout(props: ParentProps) { keybind={command.keybind("session.archive")} gutter={8} > - <IconButton icon="archive" variant="ghost" onClick={() => archiveSession(props.session)} /> + <IconButton icon="archive" variant="ghost" onClick={() => archiveSession(props.session)} aria-label="Archive session" /> </TooltipKeybind> </div> </div> @@ -1749,7 +1749,7 @@ export default function Layout(props: ParentProps) { > <DropdownMenu open={menuOpen()} onOpenChange={setMenuOpen}> <Tooltip value={language.t("common.moreOptions")} placement="top"> - <DropdownMenu.Trigger as={IconButton} icon="dot-grid" variant="ghost" class="size-6 rounded-md" /> + <DropdownMenu.Trigger as={IconButton} icon="dot-grid" variant="ghost" class="size-6 rounded-md" aria-label="More options" /> </Tooltip> <DropdownMenu.Portal> <DropdownMenu.Content @@ -1797,6 +1797,7 @@ export default function Layout(props: ParentProps) { variant="ghost" class="size-6 rounded-md" onClick={() => navigate(`/${slug()}/session`)} + aria-label="New session" /> </TooltipKeybind> </div> @@ -1881,9 +1882,11 @@ export default function Layout(props: ParentProps) { .slice(0, 2) } + const projectName = () => props.project.name || getFilename(props.project.worktree) const trigger = ( <button type="button" + aria-label={projectName()} classList={{ "flex items-center justify-center size-10 p-1 rounded-lg overflow-hidden transition-colors cursor-default": true, "bg-transparent border-2 border-icon-strong-base hover:bg-surface-base-hover": selected(), @@ -2103,7 +2106,7 @@ export default function Layout(props: ParentProps) { </div> } > - <IconButton icon="plus" variant="ghost" size="large" onClick={chooseProject} /> + <IconButton icon="plus" variant="ghost" size="large" onClick={chooseProject} aria-label="Open project" /> </Tooltip> </div> <DragOverlay> @@ -2117,7 +2120,7 @@ export default function Layout(props: ParentProps) { title={language.t("sidebar.settings")} keybind={command.keybind("settings.open")} > - <IconButton icon="settings-gear" variant="ghost" size="large" onClick={openSettings} /> + <IconButton icon="settings-gear" variant="ghost" size="large" onClick={openSettings} aria-label="Settings" /> </TooltipKeybind> <Tooltip placement={sidebarProps.mobile ? "bottom" : "right"} value={language.t("sidebar.help")}> <IconButton @@ -2125,6 +2128,7 @@ export default function Layout(props: ParentProps) { variant="ghost" size="large" onClick={() => platform.openLink("https://opencode.ai/desktop-feedback")} + aria-label="Help" /> </Tooltip> </div> @@ -2175,6 +2179,7 @@ export default function Layout(props: ParentProps) { icon="dot-grid" variant="ghost" class="shrink-0 size-6 rounded-md opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100 data-[expanded]:bg-surface-base-active" + aria-label="Project options" /> <DropdownMenu.Portal> <DropdownMenu.Content class="mt-1"> From b10f4237439f6fd0754a305b53a4a318248d4597 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 15:58:36 +0000 Subject: [PATCH 264/426] chore: generate --- packages/app/src/components/titlebar.tsx | 16 ++++++++++-- packages/app/src/pages/layout.tsx | 31 +++++++++++++++++++++--- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index 67c012651cb..a5103d90d74 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -89,12 +89,24 @@ export function Titlebar() { <Show when={mac()}> <div class="w-[72px] h-full shrink-0" data-tauri-drag-region /> <div class="xl:hidden w-10 shrink-0 flex items-center justify-center"> - <IconButton icon="menu" variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} aria-label="Toggle menu" /> + <IconButton + icon="menu" + variant="ghost" + class="size-8 rounded-md" + onClick={layout.mobileSidebar.toggle} + aria-label="Toggle menu" + /> </div> </Show> <Show when={!mac()}> <div class="xl:hidden w-[48px] shrink-0 flex items-center justify-center"> - <IconButton icon="menu" variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} aria-label="Toggle menu" /> + <IconButton + icon="menu" + variant="ghost" + class="size-8 rounded-md" + onClick={layout.mobileSidebar.toggle} + aria-label="Toggle menu" + /> </div> </Show> <TooltipKeybind diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 9d7cc9c716e..7052ba003f3 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1573,7 +1573,12 @@ export default function Layout(props: ParentProps) { keybind={command.keybind("session.archive")} gutter={8} > - <IconButton icon="archive" variant="ghost" onClick={() => archiveSession(props.session)} aria-label="Archive session" /> + <IconButton + icon="archive" + variant="ghost" + onClick={() => archiveSession(props.session)} + aria-label="Archive session" + /> </TooltipKeybind> </div> </div> @@ -1749,7 +1754,13 @@ export default function Layout(props: ParentProps) { > <DropdownMenu open={menuOpen()} onOpenChange={setMenuOpen}> <Tooltip value={language.t("common.moreOptions")} placement="top"> - <DropdownMenu.Trigger as={IconButton} icon="dot-grid" variant="ghost" class="size-6 rounded-md" aria-label="More options" /> + <DropdownMenu.Trigger + as={IconButton} + icon="dot-grid" + variant="ghost" + class="size-6 rounded-md" + aria-label="More options" + /> </Tooltip> <DropdownMenu.Portal> <DropdownMenu.Content @@ -2106,7 +2117,13 @@ export default function Layout(props: ParentProps) { </div> } > - <IconButton icon="plus" variant="ghost" size="large" onClick={chooseProject} aria-label="Open project" /> + <IconButton + icon="plus" + variant="ghost" + size="large" + onClick={chooseProject} + aria-label="Open project" + /> </Tooltip> </div> <DragOverlay> @@ -2120,7 +2137,13 @@ export default function Layout(props: ParentProps) { title={language.t("sidebar.settings")} keybind={command.keybind("settings.open")} > - <IconButton icon="settings-gear" variant="ghost" size="large" onClick={openSettings} aria-label="Settings" /> + <IconButton + icon="settings-gear" + variant="ghost" + size="large" + onClick={openSettings} + aria-label="Settings" + /> </TooltipKeybind> <Tooltip placement={sidebarProps.mobile ? "bottom" : "right"} value={language.t("sidebar.help")}> <IconButton From 9f02ffe02dc32acd03aa15fff322c4ca85d28fa2 Mon Sep 17 00:00:00 2001 From: Rahul A Mistry <149420892+ProdigyRahul@users.noreply.github.com> Date: Wed, 21 Jan 2026 21:33:29 +0530 Subject: [PATCH 265/426] fix(app): new workspace button with all languages (#9848) --- packages/app/src/i18n/da.ts | 1 + packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 1 + packages/app/src/i18n/fr.ts | 1 + packages/app/src/i18n/ja.ts | 1 + packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/zh.ts | 1 + packages/app/src/pages/layout.tsx | 4 ++-- 9 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 237fc060d8d..9f87cc98709 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -13,6 +13,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "Agent", "command.category.permissions": "Tilladelser", + "command.category.workspace": "Arbejdsområde", "theme.scheme.system": "System", "theme.scheme.light": "Lys", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 9b003554840..c0100f95ec5 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -17,6 +17,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "Agent", "command.category.permissions": "Berechtigungen", + "command.category.workspace": "Arbeitsbereich", "theme.scheme.system": "System", "theme.scheme.light": "Hell", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index de5c9a32b19..7e7c6f79031 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -13,6 +13,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "Agent", "command.category.permissions": "Permissions", + "command.category.workspace": "Workspace", "theme.scheme.system": "System", "theme.scheme.light": "Light", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index d4479292100..224c8eedf96 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -13,6 +13,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "Agente", "command.category.permissions": "Permisos", + "command.category.workspace": "Espacio de trabajo", "theme.scheme.system": "Sistema", "theme.scheme.light": "Claro", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 0ac1b94e981..e76e1393827 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -13,6 +13,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "Agent", "command.category.permissions": "Permissions", + "command.category.workspace": "Espace de travail", "theme.scheme.system": "Système", "theme.scheme.light": "Clair", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 9aaf6d6fade..8be5f87d110 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -13,6 +13,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "エージェント", "command.category.permissions": "権限", + "command.category.workspace": "ワークスペース", "theme.scheme.system": "システム", "theme.scheme.light": "ライト", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 281e1c55d0e..b612a78733a 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -17,6 +17,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "에이전트", "command.category.permissions": "권한", + "command.category.workspace": "작업 공간", "theme.scheme.system": "시스템", "theme.scheme.light": "라이트", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index e5c2049d6b6..f020b10b8ca 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -17,6 +17,7 @@ export const dict = { "command.category.mcp": "MCP", "command.category.agent": "智能体", "command.category.permissions": "权限", + "command.category.workspace": "工作区", "theme.scheme.system": "系统", "theme.scheme.light": "浅色", diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 7052ba003f3..e00928cfc70 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -2078,8 +2078,8 @@ export default function Layout(props: ParentProps) { command.register(() => [ { id: "workspace.new", - title: "New workspace", - category: "Workspace", + title: language.t("workspace.new"), + category: language.t("command.category.workspace"), keybind: "mod+shift+w", disabled: !layout.sidebar.workspaces(project()?.worktree ?? "")(), onSelect: createWorkspace, From fd77d31b492e6db9d8c8b90fceee48ecbc52f3af Mon Sep 17 00:00:00 2001 From: Spoon <212802214+spoons-and-mirrors@users.noreply.github.com> Date: Wed, 21 Jan 2026 17:05:09 +0100 Subject: [PATCH 266/426] tweak(session title): change prompt to have the response with user language (#9847) --- packages/opencode/src/agent/prompt/title.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/opencode/src/agent/prompt/title.txt b/packages/opencode/src/agent/prompt/title.txt index e7fc7b50003..62960b2c475 100644 --- a/packages/opencode/src/agent/prompt/title.txt +++ b/packages/opencode/src/agent/prompt/title.txt @@ -12,6 +12,7 @@ Your output must be: </task> <rules> +- you MUST use the same language as the user message you are summarizing - Title must be grammatically correct and read naturally - no word salad - Never include tool names in the title (e.g. "read tool", "bash tool", "edit tool") - Focus on the main topic or question the user needs to retrieve From bfbcbc88632869f1a6b86b05a3fff0c7a46e5863 Mon Sep 17 00:00:00 2001 From: nuno maduro <enunomaduro@gmail.com> Date: Wed, 21 Jan 2026 16:31:39 +0000 Subject: [PATCH 267/426] feat(formatters): add laravel pint as a `.php` formatter (#7312) --- packages/opencode/src/format/formatter.ts | 15 +++++++++++++++ packages/web/src/content/docs/formatters.mdx | 1 + 2 files changed, 16 insertions(+) diff --git a/packages/opencode/src/format/formatter.ts b/packages/opencode/src/format/formatter.ts index 1a3aa1bb15a..5f0624d6c9d 100644 --- a/packages/opencode/src/format/formatter.ts +++ b/packages/opencode/src/format/formatter.ts @@ -340,3 +340,18 @@ export const rustfmt: Info = { return Bun.which("rustfmt") !== null }, } + +export const pint: Info = { + name: "pint", + command: ["./vendor/bin/pint", "$FILE"], + extensions: [".php"], + async enabled() { + const items = await Filesystem.findUp("composer.json", Instance.directory, Instance.worktree) + for (const item of items) { + const json = await Bun.file(item).json() + if (json.require?.["laravel/pint"]) return true + if (json["require-dev"]?.["laravel/pint"]) return true + } + return false + }, +} diff --git a/packages/web/src/content/docs/formatters.mdx b/packages/web/src/content/docs/formatters.mdx index e4faa5eb865..225875f6252 100644 --- a/packages/web/src/content/docs/formatters.mdx +++ b/packages/web/src/content/docs/formatters.mdx @@ -34,6 +34,7 @@ OpenCode comes with several built-in formatters for popular languages and framew | gleam | .gleam | `gleam` command available | | nixfmt | .nix | `nixfmt` command available | | shfmt | .sh, .bash | `shfmt` command available | +| pint | .php | `laravel/pint` dependency in `composer.json` | | oxfmt (Experimental) | .js, .jsx, .ts, .tsx | `oxfmt` dependency in `package.json` and an [experimental env variable flag](/docs/cli/#experimental) | So if your project has `prettier` in your `package.json`, OpenCode will automatically use it. From b8a0e420f8e8c3abb8ceceecb3e511236e2e9735 Mon Sep 17 00:00:00 2001 From: Rahul A Mistry <149420892+ProdigyRahul@users.noreply.github.com> Date: Wed, 21 Jan 2026 22:05:15 +0530 Subject: [PATCH 268/426] feat(app): search on settings shortcuts (#9850) --- .../app/src/components/settings-keybinds.tsx | 90 +++++++++++++++++-- packages/app/src/i18n/da.ts | 2 + packages/app/src/i18n/de.ts | 2 + packages/app/src/i18n/en.ts | 2 + packages/app/src/i18n/es.ts | 2 + packages/app/src/i18n/fr.ts | 2 + packages/app/src/i18n/ja.ts | 2 + packages/app/src/i18n/ko.ts | 2 + packages/app/src/i18n/zh.ts | 2 + 9 files changed, 99 insertions(+), 7 deletions(-) diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index 13a0042ff5c..3f1f34e5fb7 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -1,6 +1,10 @@ import { Component, For, Show, createMemo, createSignal, onCleanup, onMount } from "solid-js" import { Button } from "@opencode-ai/ui/button" +import { Icon } from "@opencode-ai/ui/icon" +import { IconButton } from "@opencode-ai/ui/icon-button" +import { TextField } from "@opencode-ai/ui/text-field" import { showToast } from "@opencode-ai/ui/toast" +import fuzzysort from "fuzzysort" import { formatKeybind, parseKeybind, useCommand } from "@/context/command" import { useLanguage } from "@/context/language" import { useSettings } from "@/context/settings" @@ -108,6 +112,7 @@ export const SettingsKeybinds: Component = () => { const settings = useSettings() const [active, setActive] = createSignal<string | null>(null) + const [filter, setFilter] = createSignal("") const stop = () => { if (!active()) return @@ -197,6 +202,45 @@ export const SettingsKeybinds: Component = () => { return out }) + const filtered = createMemo(() => { + const query = filter().toLowerCase().trim() + if (!query) return grouped() + + const map = list() + const out = new Map<KeybindGroup, string[]>() + + for (const group of GROUPS) out.set(group, []) + + const items = Array.from(map.entries()).map(([id, meta]) => ({ + id, + title: meta.title, + group: meta.group, + keybind: command.keybind(id) || "", + })) + + const results = fuzzysort.go(query, items, { + keys: ["title", "keybind"], + threshold: -10000, + }) + + for (const result of results) { + const item = result.obj + const ids = out.get(item.group) + if (!ids) continue + ids.push(item.id) + } + + return out + }) + + const hasResults = createMemo(() => { + for (const group of GROUPS) { + const ids = filtered().get(group) ?? [] + if (ids.length > 0) return true + } + return false + }) + const used = createMemo(() => { const map = new Map<string, { id: string; title: string }[]>() @@ -313,22 +357,43 @@ export const SettingsKeybinds: Component = () => { "linear-gradient(to bottom, var(--surface-raised-stronger-non-alpha) calc(100% - 24px), transparent)", }} > - <div class="flex items-center justify-between gap-4 pt-6 pb-8 max-w-[720px]"> - <h2 class="text-16-medium text-text-strong">{language.t("settings.shortcuts.title")}</h2> - <Button size="small" variant="secondary" onClick={resetAll} disabled={!hasOverrides()}> - {language.t("settings.shortcuts.reset.button")} - </Button> + <div class="flex flex-col gap-4 pt-6 pb-6 max-w-[720px]"> + <div class="flex items-center justify-between gap-4"> + <h2 class="text-16-medium text-text-strong">{language.t("settings.shortcuts.title")}</h2> + <Button size="small" variant="secondary" onClick={resetAll} disabled={!hasOverrides()}> + {language.t("settings.shortcuts.reset.button")} + </Button> + </div> + + <div class="flex items-center gap-2 px-3 py-2 rounded-lg bg-surface-base"> + <Icon name="magnifying-glass" class="text-icon-weak-base flex-shrink-0" /> + <TextField + variant="ghost" + type="text" + value={filter()} + onChange={setFilter} + placeholder={language.t("settings.shortcuts.search.placeholder")} + spellcheck={false} + autocorrect="off" + autocomplete="off" + autocapitalize="off" + class="flex-1" + /> + <Show when={filter()}> + <IconButton icon="circle-x" variant="ghost" onClick={() => setFilter("")} /> + </Show> + </div> </div> </div> <div class="flex flex-col gap-8 max-w-[720px]"> <For each={GROUPS}> {(group) => ( - <Show when={(grouped().get(group) ?? []).length > 0}> + <Show when={(filtered().get(group) ?? []).length > 0}> <div class="flex flex-col gap-1"> <h3 class="text-14-medium text-text-strong pb-2">{language.t(groupKey[group])}</h3> <div class="bg-surface-raised-base px-4 rounded-lg"> - <For each={grouped().get(group) ?? []}> + <For each={filtered().get(group) ?? []}> {(id) => ( <div class="flex items-center justify-between gap-4 py-3 border-b border-border-weak-base last:border-none"> <span class="text-14-regular text-text-strong">{title(id)}</span> @@ -357,6 +422,17 @@ export const SettingsKeybinds: Component = () => { </Show> )} </For> + + <Show when={filter() && !hasResults()}> + <div class="flex flex-col items-center justify-center py-12 text-center"> + <span class="text-14-regular text-text-weak"> + {language.t("settings.shortcuts.search.empty")} + </span> + <Show when={filter()}> + <span class="text-14-regular text-text-strong mt-1">"{filter()}"</span> + </Show> + </div> + </Show> </div> </div> ) diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 9f87cc98709..7d381a8209f 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -466,6 +466,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} er allerede tildelt til {{titles}}.", "settings.shortcuts.unassigned": "Ikke tildelt", "settings.shortcuts.pressKeys": "Tryk på taster", + "settings.shortcuts.search.placeholder": "Søg genveje", + "settings.shortcuts.search.empty": "Ingen genveje fundet", "settings.shortcuts.group.general": "Generelt", "settings.shortcuts.group.session": "Session", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index c0100f95ec5..495308a6f78 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -475,6 +475,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} ist bereits {{titles}} zugewiesen.", "settings.shortcuts.unassigned": "Nicht zugewiesen", "settings.shortcuts.pressKeys": "Tasten drücken", + "settings.shortcuts.search.placeholder": "Tastenkürzel suchen", + "settings.shortcuts.search.empty": "Keine Tastenkürzel gefunden", "settings.shortcuts.group.general": "Allgemein", "settings.shortcuts.group.session": "Sitzung", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 7e7c6f79031..8e4c9aa5084 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -465,6 +465,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} is already assigned to {{titles}}.", "settings.shortcuts.unassigned": "Unassigned", "settings.shortcuts.pressKeys": "Press keys", + "settings.shortcuts.search.placeholder": "Search shortcuts", + "settings.shortcuts.search.empty": "No shortcuts found", "settings.shortcuts.group.general": "General", "settings.shortcuts.group.session": "Session", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 224c8eedf96..bae4ad48035 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -469,6 +469,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} ya está asignado a {{titles}}.", "settings.shortcuts.unassigned": "Sin asignar", "settings.shortcuts.pressKeys": "Presiona teclas", + "settings.shortcuts.search.placeholder": "Buscar atajos", + "settings.shortcuts.search.empty": "No se encontraron atajos", "settings.shortcuts.group.general": "General", "settings.shortcuts.group.session": "Sesión", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index e76e1393827..c0014210001 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -475,6 +475,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} est déjà assigné à {{titles}}.", "settings.shortcuts.unassigned": "Non assigné", "settings.shortcuts.pressKeys": "Appuyez sur les touches", + "settings.shortcuts.search.placeholder": "Rechercher des raccourcis", + "settings.shortcuts.search.empty": "Aucun raccourci trouvé", "settings.shortcuts.group.general": "Général", "settings.shortcuts.group.session": "Session", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 8be5f87d110..c8448811a82 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -464,6 +464,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} は既に {{titles}} に割り当てられています。", "settings.shortcuts.unassigned": "未割り当て", "settings.shortcuts.pressKeys": "キーを押してください", + "settings.shortcuts.search.placeholder": "ショートカットを検索", + "settings.shortcuts.search.empty": "ショートカットが見つかりません", "settings.shortcuts.group.general": "一般", "settings.shortcuts.group.session": "セッション", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index b612a78733a..dbd02270cb8 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -465,6 +465,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}}은(는) 이미 {{titles}}에 할당되어 있습니다.", "settings.shortcuts.unassigned": "할당되지 않음", "settings.shortcuts.pressKeys": "키 누르기", + "settings.shortcuts.search.placeholder": "단축키 검색", + "settings.shortcuts.search.empty": "단축키를 찾을 수 없습니다", "settings.shortcuts.group.general": "일반", "settings.shortcuts.group.session": "세션", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index f020b10b8ca..ac976b627b0 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -459,6 +459,8 @@ export const dict = { "settings.shortcuts.conflict.description": "{{keybind}} 已分配给 {{titles}}。", "settings.shortcuts.unassigned": "未设置", "settings.shortcuts.pressKeys": "按下按键", + "settings.shortcuts.search.placeholder": "搜索快捷键", + "settings.shortcuts.search.empty": "未找到快捷键", "settings.shortcuts.group.general": "通用", "settings.shortcuts.group.session": "会话", From 178767af700682322389c3bc9332e4d9f524c1c1 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 16:36:03 +0000 Subject: [PATCH 269/426] chore: generate --- packages/app/src/components/settings-keybinds.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index 3f1f34e5fb7..46ff49ce3a0 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -425,9 +425,7 @@ export const SettingsKeybinds: Component = () => { <Show when={filter() && !hasResults()}> <div class="flex flex-col items-center justify-center py-12 text-center"> - <span class="text-14-regular text-text-weak"> - {language.t("settings.shortcuts.search.empty")} - </span> + <span class="text-14-regular text-text-weak">{language.t("settings.shortcuts.search.empty")}</span> <Show when={filter()}> <span class="text-14-regular text-text-strong mt-1">"{filter()}"</span> </Show> From 0e1a8a1839f647dca41eae1be66c451b54338c74 Mon Sep 17 00:00:00 2001 From: Stephen Collings <stevoland@gmail.com> Date: Wed, 21 Jan 2026 16:42:13 +0000 Subject: [PATCH 270/426] fix: Claude w/bedrock custom inference profile - caching support (#9838) Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> --- packages/opencode/src/provider/transform.ts | 2 ++ .../opencode/test/provider/transform.test.ts | 35 +++++++++++++++++++ packages/web/src/content/docs/providers.mdx | 21 +++++++++++ 3 files changed, 58 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index c983bf32c4f..02fdffa00d4 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -248,6 +248,8 @@ export namespace ProviderTransform { model.providerID === "anthropic" || model.api.id.includes("anthropic") || model.api.id.includes("claude") || + model.id.includes("anthropic") || + model.id.includes("claude") || model.api.npm === "@ai-sdk/anthropic" ) { msgs = applyCaching(msgs, model.providerID) diff --git a/packages/opencode/test/provider/transform.test.ts b/packages/opencode/test/provider/transform.test.ts index 2b8f1872f56..6ebac7d28b9 100644 --- a/packages/opencode/test/provider/transform.test.ts +++ b/packages/opencode/test/provider/transform.test.ts @@ -996,6 +996,41 @@ describe("ProviderTransform.message - providerOptions key remapping", () => { }) }) +describe("ProviderTransform.message - claude w/bedrock custom inference profile", () => { + test("adds cachePoint", () => { + const model = { + id: "amazon-bedrock/custom-claude-sonnet-4.5", + providerID: "amazon-bedrock", + api: { + id: "arn:aws:bedrock:xxx:yyy:application-inference-profile/zzz", + url: "https://api.test.com", + npm: "@ai-sdk/amazon-bedrock", + }, + name: "Custom inference profile", + capabilities: {}, + options: {}, + headers: {}, + } as any + + const msgs = [ + { + role: "user", + content: "Hello", + }, + ] as any[] + + const result = ProviderTransform.message(msgs, model, {}) + + expect(result[0].providerOptions?.bedrock).toEqual( + expect.objectContaining({ + cachePoint: { + type: "ephemeral", + }, + }), + ) + }) +}) + describe("ProviderTransform.variants", () => { const createMockModel = (overrides: Partial<any> = {}): any => ({ id: "test/test-model", diff --git a/packages/web/src/content/docs/providers.mdx b/packages/web/src/content/docs/providers.mdx index a5ae45815e5..8e1d0b4ed5c 100644 --- a/packages/web/src/content/docs/providers.mdx +++ b/packages/web/src/content/docs/providers.mdx @@ -229,6 +229,27 @@ To use Amazon Bedrock with OpenCode: /models ``` +:::note +For custom inference profiles, use the model and provider name in the key and set the `id` property to the arn. This ensures correct caching: + +```json title="opencode.json" +{ + "$schema": "https://opencode.ai/config.json", + "provider": { + "amazon-bedrock": { + // ... + "models": { + "anthropic-claude-sonnet-4.5": { + "id": "arn:aws:bedrock:us-east-1:xxx:application-inference-profile/yyy" + } + } + } + } +} +``` + +::: + --- ### Anthropic From ab3d412a817ea6570a7d260705d77efefc44550b Mon Sep 17 00:00:00 2001 From: Aiden Cline <aidenpcline@gmail.com> Date: Wed, 21 Jan 2026 11:08:04 -0600 Subject: [PATCH 271/426] tweak: adjust skill tool description to make it more clear which skills are available --- packages/opencode/src/skill/skill.ts | 1 - packages/opencode/src/tool/skill.ts | 15 +++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/skill/skill.ts b/packages/opencode/src/skill/skill.ts index 6ae0e9fe887..12fc9ee90c7 100644 --- a/packages/opencode/src/skill/skill.ts +++ b/packages/opencode/src/skill/skill.ts @@ -9,7 +9,6 @@ import { Global } from "@/global" import { Filesystem } from "@/util/filesystem" import { Flag } from "@/flag/flag" import { Bus } from "@/bus" -import { TuiEvent } from "@/cli/cmd/tui/event" import { Session } from "@/session" export namespace Skill { diff --git a/packages/opencode/src/tool/skill.ts b/packages/opencode/src/tool/skill.ts index 386abdae745..9536685ef94 100644 --- a/packages/opencode/src/tool/skill.ts +++ b/packages/opencode/src/tool/skill.ts @@ -5,10 +5,6 @@ import { Skill } from "../skill" import { ConfigMarkdown } from "../config/markdown" import { PermissionNext } from "../permission/next" -const parameters = z.object({ - name: z.string().describe("The skill identifier from available_skills (e.g., 'code-review' or 'category/helper')"), -}) - export const SkillTool = Tool.define("skill", async (ctx) => { const skills = await Skill.all() @@ -28,6 +24,7 @@ export const SkillTool = Tool.define("skill", async (ctx) => { "Load a skill to get detailed instructions for a specific task.", "Skills provide specialized knowledge and step-by-step guidance.", "Use this when a task matches an available skill's description.", + "Only the skills listed here are available:", "<available_skills>", ...accessibleSkills.flatMap((skill) => [ ` <skill>`, @@ -38,6 +35,16 @@ export const SkillTool = Tool.define("skill", async (ctx) => { "</available_skills>", ].join(" ") + const examples = accessibleSkills + .map((skill) => `'${skill.name}'`) + .slice(0, 3) + .join(", ") + const hint = examples.length > 0 ? ` (e.g., ${examples}, ...)` : "" + + const parameters = z.object({ + name: z.string().describe(`The skill identifier from available_skills${hint}`), + }) + return { description, parameters, From 850d50eb645b4a0a92ba673b1d0af88887f92178 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 10:42:26 -0600 Subject: [PATCH 272/426] fix(app): missing i18n keys --- .../components/dialog-connect-provider.tsx | 4 +- .../app/src/components/dialog-select-mcp.tsx | 4 +- .../src/components/dialog-select-model.tsx | 4 +- packages/app/src/components/model-tooltip.tsx | 60 +++++++++++++------ packages/app/src/components/prompt-input.tsx | 4 +- .../session/session-sortable-terminal-tab.tsx | 4 +- .../app/src/components/settings-general.tsx | 43 +++++++------ packages/app/src/components/titlebar.tsx | 6 +- packages/app/src/i18n/en.ts | 46 ++++++++++++++ packages/app/src/pages/layout.tsx | 28 ++++----- packages/app/src/pages/session.tsx | 10 ++-- packages/app/src/utils/sound.ts | 24 ++++---- 12 files changed, 158 insertions(+), 79 deletions(-) diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 63f3c5dbeee..66c5bd0b821 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -33,7 +33,7 @@ export function DialogConnectProvider(props: { provider: string }) { globalSync.data.provider_auth[props.provider] ?? [ { type: "api", - label: "API key", + label: language.t("provider.connect.method.apiKey"), }, ], ) @@ -245,7 +245,7 @@ export function DialogConnectProvider(props: { provider: string }) { <div class="text-14-regular text-text-base"> {language.t("provider.connect.opencodeZen.visit.prefix")} <Link href="https://opencode.ai/zen" tabIndex={-1}> - opencode.ai/zen + {language.t("provider.connect.opencodeZen.visit.link")} </Link> {language.t("provider.connect.opencodeZen.visit.suffix")} </div> diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index 25ef8df0150..b9169956170 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -77,7 +77,9 @@ export const DialogSelectMcp: Component = () => { <span class="text-11-regular text-text-weaker">{language.t("mcp.status.disabled")}</span> </Show> <Show when={loading() === i.name}> - <span class="text-11-regular text-text-weak">...</span> + <span class="text-11-regular text-text-weak"> + {language.t("common.loading.ellipsis")} + </span> </Show> </div> <Show when={error()}> diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index a030e952b9a..4fd8af1b368 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -115,8 +115,8 @@ export const ModelSelectorPopover: Component<{ variant="ghost" iconSize="normal" class="size-6" - aria-label="Manage models" - title="Manage models" + aria-label={language.t("dialog.model.manage")} + title={language.t("dialog.model.manage")} onClick={handleManage} /> } diff --git a/packages/app/src/components/model-tooltip.tsx b/packages/app/src/components/model-tooltip.tsx index 14b4ba799bd..54550cf76af 100644 --- a/packages/app/src/components/model-tooltip.tsx +++ b/packages/app/src/components/model-tooltip.tsx @@ -1,4 +1,5 @@ import { Show, type Component } from "solid-js" +import { useLanguage } from "@/context/language" type InputKey = "text" | "image" | "audio" | "video" | "pdf" type InputMap = Record<InputKey, boolean> @@ -22,23 +23,31 @@ type ModelInfo = { } } -function sourceName(model: ModelInfo) { - const value = `${model.id} ${model.name}`.toLowerCase() - - if (/claude|anthropic/.test(value)) return "Anthropic" - if (/gpt|o[1-4]|codex|openai/.test(value)) return "OpenAI" - if (/gemini|palm|bard|google/.test(value)) return "Google" - if (/grok|xai/.test(value)) return "xAI" - if (/llama|meta/.test(value)) return "Meta" +export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?: boolean }> = (props) => { + const language = useLanguage() + const sourceName = (model: ModelInfo) => { + const value = `${model.id} ${model.name}`.toLowerCase() - return model.provider.name -} + if (/claude|anthropic/.test(value)) return language.t("model.provider.anthropic") + if (/gpt|o[1-4]|codex|openai/.test(value)) return language.t("model.provider.openai") + if (/gemini|palm|bard|google/.test(value)) return language.t("model.provider.google") + if (/grok|xai/.test(value)) return language.t("model.provider.xai") + if (/llama|meta/.test(value)) return language.t("model.provider.meta") -export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free?: boolean }> = (props) => { + return model.provider.name + } + const inputLabel = (value: string) => { + if (value === "text") return language.t("model.input.text") + if (value === "image") return language.t("model.input.image") + if (value === "audio") return language.t("model.input.audio") + if (value === "video") return language.t("model.input.video") + if (value === "pdf") return language.t("model.input.pdf") + return value + } const title = () => { const tags: Array<string> = [] - if (props.latest) tags.push("Latest") - if (props.free) tags.push("Free") + if (props.latest) tags.push(language.t("model.tag.latest")) + if (props.free) tags.push(language.t("model.tag.free")) const suffix = tags.length ? ` (${tags.join(", ")})` : "" return `${sourceName(props.model)} ${props.model.name}${suffix}` } @@ -46,22 +55,35 @@ export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free? if (props.model.capabilities) { const input = props.model.capabilities.input const order: Array<InputKey> = ["text", "image", "audio", "video", "pdf"] - const entries = order.filter((key) => input[key]) + const entries = order.filter((key) => input[key]).map((key) => inputLabel(key)) return entries.length ? entries.join(", ") : undefined } - return props.model.modalities?.input?.join(", ") + const raw = props.model.modalities?.input + if (!raw) return + const entries = raw.map((value) => inputLabel(value)) + return entries.length ? entries.join(", ") : undefined } const reasoning = () => { - if (props.model.capabilities) return props.model.capabilities.reasoning ? "Allows reasoning" : "No reasoning" - return props.model.reasoning ? "Allows reasoning" : "No reasoning" + if (props.model.capabilities) + return props.model.capabilities.reasoning + ? language.t("model.tooltip.reasoning.allowed") + : language.t("model.tooltip.reasoning.none") + return props.model.reasoning + ? language.t("model.tooltip.reasoning.allowed") + : language.t("model.tooltip.reasoning.none") } - const context = () => `Context limit ${props.model.limit.context.toLocaleString()}` + const context = () => + language.t("model.tooltip.context", { limit: props.model.limit.context.toLocaleString() }) return ( <div class="flex flex-col gap-1 py-1"> <div class="text-13-medium">{title()}</div> <Show when={inputs()}> - {(value) => <div class="text-12-regular text-text-invert-base">Allows: {value()}</div>} + {(value) => ( + <div class="text-12-regular text-text-invert-base"> + {language.t("model.tooltip.allows", { inputs: value() })} + </div> + )} </Show> <div class="text-12-regular text-text-invert-base">{reasoning()}</div> <div class="text-12-regular text-text-invert-base">{context()}</div> diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 35a74f43e90..d80abf0c3cb 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1696,7 +1696,9 @@ export const PromptInput: Component<PromptInputProps> = (props) => { <Match when={working()}> <div class="flex items-center gap-2"> <span>{language.t("prompt.action.stop")}</span> - <span class="text-icon-base text-12-medium text-[10px]!">ESC</span> + <span class="text-icon-base text-12-medium text-[10px]!"> + {language.t("common.key.esc")} + </span> </div> </Match> <Match when={true}> diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 63efa54a846..03f07fa565b 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -150,11 +150,11 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => > <DropdownMenu.Item onSelect={edit}> <Icon name="edit" class="w-4 h-4 mr-2" /> - Rename + {language.t("common.rename")} </DropdownMenu.Item> <DropdownMenu.Item onSelect={close}> <Icon name="close" class="w-4 h-4 mr-2" /> - Close + {language.t("common.close")} </DropdownMenu.Item> </DropdownMenu.Content> </DropdownMenu.Portal> diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx index c356b269b97..69d180f9d6e 100644 --- a/packages/app/src/components/settings-general.tsx +++ b/packages/app/src/components/settings-general.tsx @@ -29,18 +29,19 @@ export const SettingsGeneral: Component = () => { ) const fontOptions = [ - { value: "ibm-plex-mono", label: "IBM Plex Mono" }, - { value: "cascadia-code", label: "Cascadia Code" }, - { value: "fira-code", label: "Fira Code" }, - { value: "hack", label: "Hack" }, - { value: "inconsolata", label: "Inconsolata" }, - { value: "intel-one-mono", label: "Intel One Mono" }, - { value: "jetbrains-mono", label: "JetBrains Mono" }, - { value: "meslo-lgs", label: "Meslo LGS" }, - { value: "roboto-mono", label: "Roboto Mono" }, - { value: "source-code-pro", label: "Source Code Pro" }, - { value: "ubuntu-mono", label: "Ubuntu Mono" }, - ] + { value: "ibm-plex-mono", label: "font.option.ibmPlexMono" }, + { value: "cascadia-code", label: "font.option.cascadiaCode" }, + { value: "fira-code", label: "font.option.firaCode" }, + { value: "hack", label: "font.option.hack" }, + { value: "inconsolata", label: "font.option.inconsolata" }, + { value: "intel-one-mono", label: "font.option.intelOneMono" }, + { value: "jetbrains-mono", label: "font.option.jetbrainsMono" }, + { value: "meslo-lgs", label: "font.option.mesloLgs" }, + { value: "roboto-mono", label: "font.option.robotoMono" }, + { value: "source-code-pro", label: "font.option.sourceCodePro" }, + { value: "ubuntu-mono", label: "font.option.ubuntuMono" }, + ] as const + const fontOptionsList = [...fontOptions] const soundOptions = [...SOUND_OPTIONS] @@ -137,17 +138,21 @@ export const SettingsGeneral: Component = () => { description={language.t("settings.general.row.font.description")} > <Select - options={fontOptions} - current={fontOptions.find((o) => o.value === settings.appearance.font())} + options={fontOptionsList} + current={fontOptionsList.find((o) => o.value === settings.appearance.font())} value={(o) => o.value} - label={(o) => o.label} + label={(o) => language.t(o.label)} onSelect={(option) => option && settings.appearance.setFont(option.value)} variant="secondary" size="small" triggerVariant="settings" triggerStyle={{ "font-family": monoFontFamily(settings.appearance.font()), "min-width": "180px" }} > - {(option) => <span style={{ "font-family": monoFontFamily(option?.value) }}>{option?.label}</span>} + {(option) => ( + <span style={{ "font-family": monoFontFamily(option?.value) }}> + {option ? language.t(option.label) : ""} + </span> + )} </Select> </SettingsRow> </div> @@ -203,7 +208,7 @@ export const SettingsGeneral: Component = () => { options={soundOptions} current={soundOptions.find((o) => o.id === settings.sounds.agent())} value={(o) => o.id} - label={(o) => o.label} + label={(o) => language.t(o.label)} onHighlight={(option) => { if (!option) return playSound(option.src) @@ -227,7 +232,7 @@ export const SettingsGeneral: Component = () => { options={soundOptions} current={soundOptions.find((o) => o.id === settings.sounds.permissions())} value={(o) => o.id} - label={(o) => o.label} + label={(o) => language.t(o.label)} onHighlight={(option) => { if (!option) return playSound(option.src) @@ -251,7 +256,7 @@ export const SettingsGeneral: Component = () => { options={soundOptions} current={soundOptions.find((o) => o.id === settings.sounds.errors())} value={(o) => o.id} - label={(o) => o.label} + label={(o) => language.t(o.label)} onHighlight={(option) => { if (!option) return playSound(option.src) diff --git a/packages/app/src/components/titlebar.tsx b/packages/app/src/components/titlebar.tsx index a5103d90d74..877fe84925d 100644 --- a/packages/app/src/components/titlebar.tsx +++ b/packages/app/src/components/titlebar.tsx @@ -94,7 +94,7 @@ export function Titlebar() { variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} - aria-label="Toggle menu" + aria-label={language.t("sidebar.menu.toggle")} /> </div> </Show> @@ -105,7 +105,7 @@ export function Titlebar() { variant="ghost" class="size-8 rounded-md" onClick={layout.mobileSidebar.toggle} - aria-label="Toggle menu" + aria-label={language.t("sidebar.menu.toggle")} /> </div> </Show> @@ -119,7 +119,7 @@ export function Titlebar() { variant="ghost" class="group/sidebar-toggle size-6 p-0" onClick={layout.sidebar.toggle} - aria-label="Toggle sidebar" + aria-label={language.t("command.sidebar.toggle")} aria-expanded={layout.sidebar.opened()} > <div class="relative flex items-center justify-center size-4 [&>*]:absolute [&>*]:inset-0"> diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 8e4c9aa5084..27361a2e6b5 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -14,6 +14,7 @@ export const dict = { "command.category.agent": "Agent", "command.category.permissions": "Permissions", "command.category.workspace": "Workspace", + "command.category.settings": "Settings", "theme.scheme.system": "System", "theme.scheme.light": "Light", @@ -23,6 +24,7 @@ export const dict = { "command.project.open": "Open project", "command.provider.connect": "Connect provider", "command.server.switch": "Switch server", + "command.settings.open": "Open settings", "command.session.previous": "Previous session", "command.session.next": "Next session", "command.session.archive": "Archive session", @@ -115,6 +117,7 @@ export const dict = { "provider.connect.opencodeZen.line2": "With a single API key you'll get access to models such as Claude, GPT, Gemini, GLM and more.", "provider.connect.opencodeZen.visit.prefix": "Visit ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " to collect your API key.", "provider.connect.oauth.code.visit.prefix": "Visit ", "provider.connect.oauth.code.visit.link": "this link", @@ -134,9 +137,24 @@ export const dict = { "model.tag.free": "Free", "model.tag.latest": "Latest", + "model.provider.anthropic": "Anthropic", + "model.provider.openai": "OpenAI", + "model.provider.google": "Google", + "model.provider.xai": "xAI", + "model.provider.meta": "Meta", + "model.input.text": "text", + "model.input.image": "image", + "model.input.audio": "audio", + "model.input.video": "video", + "model.input.pdf": "pdf", + "model.tooltip.allows": "Allows: {{inputs}}", + "model.tooltip.reasoning.allowed": "Allows reasoning", + "model.tooltip.reasoning.none": "No reasoning", + "model.tooltip.context": "Context limit {{limit}}", "common.search.placeholder": "Search", "common.loading": "Loading", + "common.loading.ellipsis": "...", "common.cancel": "Cancel", "common.submit": "Submit", "common.save": "Save", @@ -371,6 +389,7 @@ export const dict = { "session.messages.loadingEarlier": "Loading earlier messages...", "session.messages.loadEarlier": "Load earlier messages", "session.messages.loading": "Loading messages...", + "session.messages.jumpToLatest": "Jump to latest", "session.context.addToContext": "Add {{selection}} to context", @@ -402,6 +421,8 @@ export const dict = { "terminal.loading": "Loading terminal...", "terminal.title": "Terminal", "terminal.title.numbered": "Terminal {{number}}", + "terminal.connectionLost.title": "Connection Lost", + "terminal.connectionLost.description": "The terminal connection was interrupted. This can happen when the server restarts.", "common.closeTab": "Close tab", "common.dismiss": "Dismiss", @@ -414,7 +435,9 @@ export const dict = { "common.close": "Close", "common.edit": "Edit", "common.loadMore": "Load more", + "common.key.esc": "ESC", + "sidebar.menu.toggle": "Toggle menu", "sidebar.settings": "Settings", "sidebar.help": "Help", "sidebar.workspaces.enable": "Enable workspaces", @@ -441,6 +464,29 @@ export const dict = { "settings.general.row.theme.description": "Customise how OpenCode is themed.", "settings.general.row.font.title": "Font", "settings.general.row.font.description": "Customise the mono font used in code blocks", + "font.option.ibmPlexMono": "IBM Plex Mono", + "font.option.cascadiaCode": "Cascadia Code", + "font.option.firaCode": "Fira Code", + "font.option.hack": "Hack", + "font.option.inconsolata": "Inconsolata", + "font.option.intelOneMono": "Intel One Mono", + "font.option.jetbrainsMono": "JetBrains Mono", + "font.option.mesloLgs": "Meslo LGS", + "font.option.robotoMono": "Roboto Mono", + "font.option.sourceCodePro": "Source Code Pro", + "font.option.ubuntuMono": "Ubuntu Mono", + "sound.option.staplebops01": "Boopy", + "sound.option.staplebops02": "Beepy", + "sound.option.staplebops03": "Staplebops 03", + "sound.option.staplebops04": "Staplebops 04", + "sound.option.staplebops05": "Staplebops 05", + "sound.option.staplebops06": "Staplebops 06", + "sound.option.staplebops07": "Staplebops 07", + "sound.option.nope01": "Nope 01", + "sound.option.nope02": "Nope 02", + "sound.option.nope03": "Oopsie", + "sound.option.nope04": "Nope 04", + "sound.option.nope05": "Nope 05", "settings.general.notifications.agent.title": "Agent", "settings.general.notifications.agent.description": diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index e00928cfc70..1318217b568 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -847,8 +847,8 @@ export default function Layout(props: ParentProps) { }, { id: "settings.open", - title: "Open settings", - category: "Settings", + title: language.t("command.settings.open"), + category: language.t("command.category.settings"), keybind: "mod+comma", onSelect: () => openSettings(), }, @@ -1573,12 +1573,12 @@ export default function Layout(props: ParentProps) { keybind={command.keybind("session.archive")} gutter={8} > - <IconButton - icon="archive" - variant="ghost" - onClick={() => archiveSession(props.session)} - aria-label="Archive session" - /> + <IconButton + icon="archive" + variant="ghost" + onClick={() => archiveSession(props.session)} + aria-label={language.t("command.session.archive")} + /> </TooltipKeybind> </div> </div> @@ -1759,7 +1759,7 @@ export default function Layout(props: ParentProps) { icon="dot-grid" variant="ghost" class="size-6 rounded-md" - aria-label="More options" + aria-label={language.t("common.moreOptions")} /> </Tooltip> <DropdownMenu.Portal> @@ -1808,7 +1808,7 @@ export default function Layout(props: ParentProps) { variant="ghost" class="size-6 rounded-md" onClick={() => navigate(`/${slug()}/session`)} - aria-label="New session" + aria-label={language.t("command.session.new")} /> </TooltipKeybind> </div> @@ -2122,7 +2122,7 @@ export default function Layout(props: ParentProps) { variant="ghost" size="large" onClick={chooseProject} - aria-label="Open project" + aria-label={language.t("command.project.open")} /> </Tooltip> </div> @@ -2142,7 +2142,7 @@ export default function Layout(props: ParentProps) { variant="ghost" size="large" onClick={openSettings} - aria-label="Settings" + aria-label={language.t("sidebar.settings")} /> </TooltipKeybind> <Tooltip placement={sidebarProps.mobile ? "bottom" : "right"} value={language.t("sidebar.help")}> @@ -2151,7 +2151,7 @@ export default function Layout(props: ParentProps) { variant="ghost" size="large" onClick={() => platform.openLink("https://opencode.ai/desktop-feedback")} - aria-label="Help" + aria-label={language.t("sidebar.help")} /> </Tooltip> </div> @@ -2202,7 +2202,7 @@ export default function Layout(props: ParentProps) { icon="dot-grid" variant="ghost" class="shrink-0 size-6 rounded-md opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100 data-[expanded]:bg-surface-base-active" - aria-label="Project options" + aria-label={language.t("common.moreOptions")} /> <DropdownMenu.Portal> <DropdownMenu.Content class="mt-1"> diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 8d6122819ad..48b05945927 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1366,7 +1366,7 @@ export default function Page() { window.history.replaceState(null, "", window.location.href.replace(/#.*$/, "")) }} > - Jump to latest + {language.t("session.messages.jumpToLatest")} </Button> </div> </Show> @@ -2017,9 +2017,11 @@ export default function Page() { style={{ color: "rgba(239, 68, 68, 0.8)" }} /> <div class="text-center" style={{ color: "rgba(255, 255, 255, 0.7)" }}> - <div class="text-14-semibold mb-1">Connection Lost</div> + <div class="text-14-semibold mb-1"> + {language.t("terminal.connectionLost.title")} + </div> <div class="text-12-regular" style={{ color: "rgba(255, 255, 255, 0.5)" }}> - The terminal connection was interrupted. This can happen when the server restarts. + {language.t("terminal.connectionLost.description")} </div> </div> <button @@ -2037,7 +2039,7 @@ export default function Page() { } onClick={() => setDismissed(true)} > - Dismiss + {language.t("common.dismiss")} </button> </div> </Show> diff --git a/packages/app/src/utils/sound.ts b/packages/app/src/utils/sound.ts index e8db0bf7b9a..fa65f1d61a1 100644 --- a/packages/app/src/utils/sound.ts +++ b/packages/app/src/utils/sound.ts @@ -12,18 +12,18 @@ import staplebops06 from "@opencode-ai/ui/audio/staplebops-06.aac" import staplebops07 from "@opencode-ai/ui/audio/staplebops-07.aac" export const SOUND_OPTIONS = [ - { id: "staplebops-01", label: "Boopy", src: staplebops01 }, - { id: "staplebops-02", label: "Beepy", src: staplebops02 }, - { id: "staplebops-03", label: "Staplebops 03", src: staplebops03 }, - { id: "staplebops-04", label: "Staplebops 04", src: staplebops04 }, - { id: "staplebops-05", label: "Staplebops 05", src: staplebops05 }, - { id: "staplebops-06", label: "Staplebops 06", src: staplebops06 }, - { id: "staplebops-07", label: "Staplebops 07", src: staplebops07 }, - { id: "nope-01", label: "Nope 01", src: nope01 }, - { id: "nope-02", label: "Nope 02", src: nope02 }, - { id: "nope-03", label: "Oopsie", src: nope03 }, - { id: "nope-04", label: "Nope 04", src: nope04 }, - { id: "nope-05", label: "Nope 05", src: nope05 }, + { id: "staplebops-01", label: "sound.option.staplebops01", src: staplebops01 }, + { id: "staplebops-02", label: "sound.option.staplebops02", src: staplebops02 }, + { id: "staplebops-03", label: "sound.option.staplebops03", src: staplebops03 }, + { id: "staplebops-04", label: "sound.option.staplebops04", src: staplebops04 }, + { id: "staplebops-05", label: "sound.option.staplebops05", src: staplebops05 }, + { id: "staplebops-06", label: "sound.option.staplebops06", src: staplebops06 }, + { id: "staplebops-07", label: "sound.option.staplebops07", src: staplebops07 }, + { id: "nope-01", label: "sound.option.nope01", src: nope01 }, + { id: "nope-02", label: "sound.option.nope02", src: nope02 }, + { id: "nope-03", label: "sound.option.nope03", src: nope03 }, + { id: "nope-04", label: "sound.option.nope04", src: nope04 }, + { id: "nope-05", label: "sound.option.nope05", src: nope05 }, ] as const export type SoundOption = (typeof SOUND_OPTIONS)[number] From b746c006cfacb1729e40829fa598fb77f94e1e9a Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 10:53:46 -0600 Subject: [PATCH 273/426] feat(app): new sounds --- packages/app/src/i18n/en.ts | 9 +++++---- packages/ui/src/assets/audio/alert-01.aac | Bin 0 -> 15378 bytes packages/ui/src/assets/audio/alert-02.aac | Bin 0 -> 10527 bytes packages/ui/src/assets/audio/alert-03.aac | Bin 0 -> 3016 bytes packages/ui/src/assets/audio/alert-04.aac | Bin 0 -> 8352 bytes packages/ui/src/assets/audio/alert-05.aac | Bin 0 -> 11941 bytes packages/ui/src/assets/audio/alert-06.aac | Bin 0 -> 10829 bytes packages/ui/src/assets/audio/alert-07.aac | Bin 0 -> 9966 bytes packages/ui/src/assets/audio/alert-08.aac | Bin 0 -> 11522 bytes packages/ui/src/assets/audio/alert-09.aac | Bin 0 -> 8061 bytes packages/ui/src/assets/audio/alert-10.aac | Bin 0 -> 10273 bytes packages/ui/src/assets/audio/bip-bop-01.aac | Bin 0 -> 4303 bytes packages/ui/src/assets/audio/bip-bop-02.aac | Bin 0 -> 6187 bytes packages/ui/src/assets/audio/bip-bop-03.aac | Bin 0 -> 9747 bytes packages/ui/src/assets/audio/bip-bop-04.aac | Bin 0 -> 12327 bytes packages/ui/src/assets/audio/bip-bop-05.aac | Bin 0 -> 5467 bytes packages/ui/src/assets/audio/bip-bop-06.aac | Bin 0 -> 13281 bytes packages/ui/src/assets/audio/bip-bop-07.aac | Bin 0 -> 6448 bytes packages/ui/src/assets/audio/bip-bop-08.aac | Bin 0 -> 9730 bytes packages/ui/src/assets/audio/bip-bop-09.aac | Bin 0 -> 15909 bytes packages/ui/src/assets/audio/bip-bop-10.aac | Bin 0 -> 5567 bytes packages/ui/src/assets/audio/nope-06.aac | Bin 0 -> 5976 bytes packages/ui/src/assets/audio/nope-07.aac | Bin 0 -> 4957 bytes packages/ui/src/assets/audio/nope-08.aac | Bin 0 -> 9621 bytes packages/ui/src/assets/audio/nope-09.aac | Bin 0 -> 6120 bytes packages/ui/src/assets/audio/nope-10.aac | Bin 0 -> 4356 bytes packages/ui/src/assets/audio/nope-11.aac | Bin 0 -> 13297 bytes packages/ui/src/assets/audio/nope-12.aac | Bin 0 -> 14005 bytes packages/ui/src/assets/audio/yup-01.aac | Bin 0 -> 12404 bytes packages/ui/src/assets/audio/yup-02.aac | Bin 0 -> 6287 bytes packages/ui/src/assets/audio/yup-03.aac | Bin 0 -> 9187 bytes packages/ui/src/assets/audio/yup-04.aac | Bin 0 -> 14164 bytes packages/ui/src/assets/audio/yup-05.aac | Bin 0 -> 9993 bytes packages/ui/src/assets/audio/yup-06.aac | Bin 0 -> 5585 bytes 34 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 packages/ui/src/assets/audio/alert-01.aac create mode 100644 packages/ui/src/assets/audio/alert-02.aac create mode 100644 packages/ui/src/assets/audio/alert-03.aac create mode 100644 packages/ui/src/assets/audio/alert-04.aac create mode 100644 packages/ui/src/assets/audio/alert-05.aac create mode 100644 packages/ui/src/assets/audio/alert-06.aac create mode 100644 packages/ui/src/assets/audio/alert-07.aac create mode 100644 packages/ui/src/assets/audio/alert-08.aac create mode 100644 packages/ui/src/assets/audio/alert-09.aac create mode 100644 packages/ui/src/assets/audio/alert-10.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-01.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-02.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-03.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-04.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-05.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-06.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-07.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-08.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-09.aac create mode 100644 packages/ui/src/assets/audio/bip-bop-10.aac create mode 100644 packages/ui/src/assets/audio/nope-06.aac create mode 100644 packages/ui/src/assets/audio/nope-07.aac create mode 100644 packages/ui/src/assets/audio/nope-08.aac create mode 100644 packages/ui/src/assets/audio/nope-09.aac create mode 100644 packages/ui/src/assets/audio/nope-10.aac create mode 100644 packages/ui/src/assets/audio/nope-11.aac create mode 100644 packages/ui/src/assets/audio/nope-12.aac create mode 100644 packages/ui/src/assets/audio/yup-01.aac create mode 100644 packages/ui/src/assets/audio/yup-02.aac create mode 100644 packages/ui/src/assets/audio/yup-03.aac create mode 100644 packages/ui/src/assets/audio/yup-04.aac create mode 100644 packages/ui/src/assets/audio/yup-05.aac create mode 100644 packages/ui/src/assets/audio/yup-06.aac diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 27361a2e6b5..2cfe09a095e 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -422,7 +422,8 @@ export const dict = { "terminal.title": "Terminal", "terminal.title.numbered": "Terminal {{number}}", "terminal.connectionLost.title": "Connection Lost", - "terminal.connectionLost.description": "The terminal connection was interrupted. This can happen when the server restarts.", + "terminal.connectionLost.description": + "The terminal connection was interrupted. This can happen when the server restarts.", "common.closeTab": "Close tab", "common.dismiss": "Dismiss", @@ -475,8 +476,8 @@ export const dict = { "font.option.robotoMono": "Roboto Mono", "font.option.sourceCodePro": "Source Code Pro", "font.option.ubuntuMono": "Ubuntu Mono", - "sound.option.staplebops01": "Boopy", - "sound.option.staplebops02": "Beepy", + "sound.option.staplebops01": "Staplebops 01", + "sound.option.staplebops02": "Staplebops 02", "sound.option.staplebops03": "Staplebops 03", "sound.option.staplebops04": "Staplebops 04", "sound.option.staplebops05": "Staplebops 05", @@ -484,7 +485,7 @@ export const dict = { "sound.option.staplebops07": "Staplebops 07", "sound.option.nope01": "Nope 01", "sound.option.nope02": "Nope 02", - "sound.option.nope03": "Oopsie", + "sound.option.nope03": "Nope 03", "sound.option.nope04": "Nope 04", "sound.option.nope05": "Nope 05", diff --git a/packages/ui/src/assets/audio/alert-01.aac b/packages/ui/src/assets/audio/alert-01.aac new file mode 100644 index 0000000000000000000000000000000000000000..04772e68ea596ffeaa125f0e366e1b65abcb5856 GIT binary patch literal 15378 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 Xz-I~!IFs1Fne_kvP!0ay@4^28!Eftj literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-02.aac b/packages/ui/src/assets/audio/alert-02.aac new file mode 100644 index 0000000000000000000000000000000000000000..b7d066b499906770b87f319d04495d6d042282c1 GIT binary patch literal 10527 zcmeI2RZv{*x8||n(6|R}EI0&rOB#YhAZQabxLc6Mg1ZwmK!OE#mmtAOaCdiaq`T)! z{!??#cWSQZYWCe*wd=ju^?TN{p0zgOLL*Q&?`ahUN#(t#xey;WpC~sUFCUWJyF3H} zagKx*dmBzL`PG={e)CZE@axX%vK4goVbMk1@hqOI<ECkzrH)u$sig1JLFvq`fs7_B z8I_YJltv#<Ep570b&DP&QBG+~VEf{7C{SSs%*uX`qK_LJjERgX7-7bjf=`m8ly+W5 zMqC`u8kRYwj~BX87x#+6z`n#NBMA`cDaT@IGUW?73?O>_hz8fPz&Kgo?pw$Kq6K5q z1j^Kcv{LzV2MLh`#M*O4`NR|bW3p_BQ<hvQv7EmKT7rOVIt&^Xqvas24W-6Racu`P z!#!3i$?uy4MZ-~7y(pAuOmi08@|B$zH8kY1FXWas1~<zpUJ?gCaJIkSah=3u#KOqS z;V)t&-bo}J8i*Ds@M0Gwi5xS^=ZUQAPo<G9Peo0PKoZ}=zz8qBMfkL4qhtG1Op3!q zRbGIfPfkhp)DH2H72}ZYo%_m&ocq+d5@349&z;#rj_y6)*n8vGfS8krR6jC=lYkiQ zn=`9S^Y@}rPhtfD_Ycq+Nr>OoPv!6et<A0Q@G1hsL=E`_-hp-GK{P?j*6feOc<-An zn+fkvX1G_k2)BhooBX6q+Fv<h1sY}-(uVfu#E3U<j8y%sH%Xqi@*@fG^?1|N+{aHX zXV|HJe|v~x#*cZjWg!4zA|fgS-nsm!`?YNVP&(GklZ!{}1)qV7`d(7Yz2PKx8DwPi z@CL$KPf-Q$C=#Ly)Ryyi=C)0qhi$6(Ms_*26J4A#QtIHo>_cT`{B0r;B`r<+TQ%Uv zyU&J7;`NambK68KVVi^TL3S``4-ai<FM3E|*0IELjEca%=ING>{?gC*ALj)BlQ1Nt zYo!1FhzNX`Sm;JMl*?T7M*PF9t@IOvntdBG0^^D9+$aSl-lO#rK@Nqi-t6J2ai5uZ z-JM@eZ$%1%Z|BxH#xD9-mJr9jega$3TY8)ri(C7E3<?)~5K$yARN|2$lnlHHE0cp4 zUDgTf)yJW`G#L4Z-8jV67c)(!J`@8tqhlTboel0{05DAAQLIW2)^yvTlHL?>P7~gI z@Z!+WrH#w#$K6d?U#f)dJicU{x;Qq3(B;}|C&6n%=TP?;?BAqXond@J1t{#IEa}!X z88RI1pxRDVArWS)Ke1H(qVx>kMKZcVo7u(WaM_kRuxujqj(bSX%tAzsUgn!wat}m& zqH=V`u<y>xBE<mYrl6z1TZxnEN7il_b!Qf_@CrYIcYx6r9WPX&2^a%KdmjY^H4G{G zu#Ds_B%{f^XC`$gz|@NG&G^Jt$55F(0t9vwrc*Y3KugF~ei^L6Oo+?)OcsqId1Um` zt>`D((#z0&AVW;xE16gZB0>tKybNXP{py9g%7wIMuC0Vfl+jo1kMBu)nUEz=uV?W1 zv6Ix;O5P?I5fSLh^d2d*d9#DQ3fYLaCt2(nSYQCNKK0^HBBNvnugVq=1}~6yV^MUR z<)|p^ToKVDv%X?fYC(CvYVhr!S15u>WKkZO6BEKffwTA1-k24^9LQ{mpaLD}nf&~n z42Yx;KL#mVUxf(EabvIjkS=!b7@eKn1+!7%DHf<AlW9hj@SQ*b*9@HtL~Z5`lSK+l zRMo}_Mr^fl=Mxe5iNuI>rB!09a^$ll<-78{B9ke+Mvn+T<Xe}vX>_7%-^iQ~jgo4d z5Sw*(dD+9jMnTfnz#n0~Uo=8lAq?`D&*E!|E1y#cWR%Cy*J@D52O=9@mNO9Ku_6<S zYnt{=&_)Hyp?zd1+U)6}PekMQ;vy=#B(w6iL6Xa7CQdZ~$H{E&yQ1gH1z~j;Y7g87 zTQZ<%GU)eBycqm63S4iaS7R`EK8FH+YfI!(F#8KrBU~!^L>~=p^A(VZAdmW_HkflN zIa%)12a|KY1^F5c#hGRF{3nT|a4G{qoUPlIH*IG;_;pn!kGja=R&)nA2lga!BZ6^J z)v1@Y6$rVxg<21icVk3}{dZ|0(fk!u-XB3B{v#+=J?efq&jlo`qqbF|d2>!$!q?(q zw*8{K1@TmM@%Cb%eT}ROQGPK;i!fQZ+iaZy>|4HYo)g|_A+6Ref0^t(^QCngv3x=D zwmQHL3eIvh%T0mbj3D}?S(a|z&a)`+r(61u#JGpW%xL6MJ@j|FB9l*vhd?RLbw9LF z-z}P)Ig~l5ch#&nqM`B<GC2MkNS<l6InPU8q}zWS_~4z0XoKY>69WkoQFeg-U?C^m zeH3K!Q}$0WV?O@V5krB|zzZTJ2I9t5^~n0AKzhCeigvyN-Yxq^1$4#`oi7p2p}>no zbN-qG|G8vLnZj<=Eb8U=*_DZeauG$@N9r2b%(!R<G1+X-X0a1V1wfcZm;lrFRZ<H% z$m`j+3XzNrrp!^&rwNJtnC*E{SEIT1$SEW^f>g9mb5nG1h*?GMVnjWBcxJmuxqw4; z@pa$6nW-jvu!-NW+Uv?R72Jo{Cofr|M{f3}U$TB;Bq1~hmE@S+xkp4%vc^C6`Xtct zL_Wt*&c|(5<#@?5<x0LxXTmz^`1~=eQ*T?OKrpF`c~q)tGABvJGCk;ExxXG}cMH5+ z4@rxUN2NLg96~ud=~bChan9URK@wrgxbMO`Pi?J9$BQbWx9{DQCqB{F7+94K?=QC> z<bHq8xm@u!;b(qPu+K|^iIB=rS*C|EGW6$e!@Phsb~UeO_~I|OL-F4aBvV#w5`2Uw z@7w}7rwfXB>3>hBHcR0C9^o{<RF_MZS3*LgnRqt4<er%+3vgR!+LR6$G5+)kVWlC< z`?*M>Ub*g<1LM#(z1azE9|FbvExtN}owld11!K(WtmIBvecZ|A5#s^uF^gC3+z>RB zcx}+dz`TMv7@aG<bFqfA*itNl@C6)VV}gD9iX8Q?)fh*P@)By0b!2#DtZ=paMW&AF zrs-WA=a0rE%?&u24&+cMQ2^-_Gv{&yqAu&_S==Bv#*LstJY*OR+n3iR-fmuB0}Tyt z;Z{1n0!iju9mWLYe(O5{1(M6e42<U;<VOWdc<lPe2T6b0&W4lJUps?jE%#eXtg{W< zbO<X1DVWCYr!;(G(8w3&YrXt0Ng+A^(Uj>QlUhXd{9{tY!hI}ORTq$O<F_|uGjGNb zRbX;sy9pW>!90X^6+c`MOg`O4Cpo5-@uDJA;z9cenuPQ1Rg6_m*hgW5>PA5xrJO`3 zcJd-2h2Z521F_*BRu7kn4{+D&(!;i=4z22n>5sB?G2fii?8v2gLdfT5ZqJ!xNVL?= zmp3yhjr(a_m`G-n4fM7zL0+m`z;!K2mQO3&-Es%VWw_7he|NDa$#Y7i?fB(?6&KH7 z!YH*wTsONj&y;<2z1F=(^@VbOvb<WJft{E~nC12hK5QLb5TPf=i%EUuM4giAj}Hn0 zK)bTfa90MTt@cY5W{^GisQkh=UuYbjcAW!zmFY<XNXO!IOV=aAp}L{l8m@9i4@UPe zJl?b1OU#IrrVmvH58&sEy-F-^QORDNsAd8;&!Ju)5(z;mCRATEa5D$FW!v)1q8?Xh z<~L4YofU8Pv<OAdiQdL>i(+P)5k!2X1=cE0OSyoq^X_jAU4IdhR7XuH1ivaALgDhF z4>B|_)G+@=qz#H9<x4|IU%5QW11R^j5@k<+{Qz=P=g0?!HOIm_lhaI-J{Ry65K%4X zAs(r<LjaF?V}nm^Zi<(fpcqd!`jnYYeoVXy9AtkL?ug1+8BS2C@RA$#R83FpRi5!6 z*B*)6GQW=}xwjz@1$T>gW7eCj&d;zOhNl;{9$JUBSznww{;7aKW%5IjVefEHX`I^o zT4Yf@ABaLkkkFwP3IMdS9wHf_WWcmiI|*XJD+@NKb^R^$L9|I6$69fRcinn8x{dVU zmI%=eZz`@M3oFr3lXz2V!N@8xjS3T<Ok@-fem3)#9jhl^mMs{|brEwghJ}33%wD3* z@#a^Ru*RV&aTH)*cRe{t?j^M%a8;BzF1!Tt=8``!l0ed$mlzjE)B-qJV4^B_fqO=h zT?m_w&{n`rz>o#()#b|S{JgpTBL|Neut5bXTnyTJWa5p1=%34kP*nx~TLAcf1Yo`P z*HnW3c4_MU)~yx8x`%6eP@lHeO)-yRz=X++)Wclk-gF+KaMRc6;ABtoTOQ&~JeSDa zQU7ueIC|w>zUz_4eBE=evs5A#qf<8b@8vC1`kXWZc?xCcQJm#s3tu=hIm_bd>fezs zxZ%}tyA=2OJ~N{c^M#*qG_(`%Z(}|0M`L^swVU2Um9mI6oi9wwiiYVSXiJrnk;?+U z!Ly2RoqjwSrvrX6GHR_e6)`LoFJ79lp}+#<WTm_sW=9$ys&Z!xsk@)(D(^6b<QHz+ zEA%@tVtPBIWd<HP>|!W0FD<%haG!^(UgRAh;t^->u7nr9NsCUli!TVYvhl-eeGm=v zbkesX9TPW*t}EYIb;POiSKC~x@$M(>xHDGzLU&DMz~_M5h5?B7?4eqONpixH<P!*` zJ0v^q{P>s~F{OZ{q(K=={%h8>PjGNAH!F46@?*`3NyK)A3*wNDWW&7Ge&ttbbgI{f zGHZ6K-S#phmu&S7X&$dQp~t{P(ln!ilbIzJ(-oJll2_uC%LA$-^b`w%{F4#NNpfy2 z)fvb?{Inqpw9GZId!#o^_!d=x3}%|VgLz1D{=tL{#vYL~t?H<h?}ty=&4$~8yb&8Y zV@}wg1l8#1hu2y97uK5q5q;9a8WmeuQ#Qy%MWmfL?L}mpr0fgH9RUMa=+&VwpLC+W zCf?v2ZjQ_u?pP4KcWV}nQz3^EGt{<X_2;WGvN5<+>M04Qfzf^Dj0>y1hq>k!G0~;o za>YrD)FT_!CydDeL)HoG{H!t1iuh5ulo`!9zy&Acj*d_eA|RRIj+M(=<Bc^vqn^c# z!n~MMtE7E~ddChDgoU!Hg{hnk#X3%Ce&H~~+2|>Ls*7n;pk&W=`u*v_{Hg;x|9&q4 z%N&b+*^32yAR>VgGgLvM{8O?=3s_lo{v+iKZ)E5^4WsrZQDzLi1Ut6t&o@e_G{Ix> z9Pct{e6)4n9SpC3jpQQtKygn}bzspP9{%!K#UgoT6bjYe8s9kD|D&2KFONR=BQ?6* zjxzt7DpLq7KJuiixG4d0vo)e7`0#J_pa%X?j}`cjdf<QTgYH~Yfc0zI(vzN^-I7{) z?9z`-7e6&=^>|0&nfoiR5(FG<;&`_wI9qIhc%*gO&@<SIoF;>$#5xTiT#wE(LddGH zIEFoWER49kn0F{Ui_6Ss9l1wmAkzVFFQSu$gdMRO*&)8gG%q!z$b;RzvVE3ac-`n~ zI&83ubx-jt`#1av_qbvt$F4%(_W&`A2G}h;BpC7h9Vdne!V2&J@AsUQ-vhDweku3W zD=!zYr~d%GP<b>;6#?>OWH-YjWNVrt1r1oWG)4RAEfzP&dl@nN2#);)=oR5uND)~D z3An#mKW(Ja52f@i4o_N;vc+W5xVSdwQ_kpao*urtG$w<5Dh-oeXAsq9uYPG;@C>8< zdvRha?e8Fg^i9_f<zWVAtYSWBlS5TC$?t--6bmjvq9XN5!&zLi!+{%E$vpxoLHMs| zup_7S&k3&_+HLInbU&l;iA2*|!g#oi*Xfz3og)+y`Dv%r&~su}n?<pDJQOmsi<GIi zpvJEhKBeG-aN9IFvg*XK`|<D#a47kM>qSwb(>=g6SZJS**`jkfO@c?hyW(ociB<$W ztGo238@*c6^~nBlY32MbDlDY)2#4ofXt~(<tF&Y9Pi<#$K<yLkbZOlszO{1U!QSL; zjja9J+kp_+#ODv5DGTWn0W6xauWNjD@`!hNeZ%GN^Ts~H`8*q4Xfx;hgBuH1q>bY} z6(FzeBo8i3csfg2R=_0<*2eZsu`!0Ht@2gX-bOB8J`18d2fUd1TnIJp&stc^_{PGc ze7!7C)#y?^_BI$bu|X&7^w+ziO!(_(fZ<h6_o_<x9DR7b@M@`fl!xBD#r4G2{KsgI z>n_rDxh<1d4{5)hrgEM@!FkW*qrReD?;m~-W<S>l8x3_?rkrq7TwcaW8#ynp9*nx4 z1|?gdYc4`7<$qlK0G_}#r{U$t{7`DokPC=UW*6uC%)=G!Sy;j#PPA=Y^09r}r(XI@ zavq0ahDAk({~cof2j!OlMBB~oS%8}iB3}5syyD+>gWUZ$#QbTvg#I>Mbmtm_hE5ld z=qG9F&AF1}t8A0U$JL?=j{rvmJUv(HMeDf8Y-<;ybTF^ba4U`{aJs4S^aXA+g<{LP z=}?c$qC)OGL2+GE{5Mfwph+sd>%eATV==F7Tw;adcC(}A>6-S@M@-rdCb72i8xx=9 zTtlmHZg^-JUF_GLni2WUce=Nimo{|INzK^ZX?{$%g#TjgpMHH)>3C7awmVU~r)|tI zBO$NBckd}hdk(D<I$2>orkYn<KjOCj))vn8Fh=>51-NSAY0MUPdkKD5rE(RvmD^eP zm|JT6=$P{>J9UUIc?<nic~w-WBa7<XR|73dq(e9XL%i@CFFi!R-#z`9gjY~~?W?Rm zTp<y%4YGlr=GDn(!V~35qOd%uFP(WTSon3r5wVpLAH7VzJt`5=Ar>qax(cMg$U<sd z8Lw9>t~hv$x?j+Le1mXznzEvyNy~?pt?xdPXm3gzjxUh!0Vj#DB9XOu8(~ZhU1LE= z33?&nq2$am{IJhB-XhSX0{crh`KXI)=}YTlk}h~3zq3gCWFi|@pld1I0JO9XqW12x zX2DPzc#5a?cWh<;%|Rh-Yx*|P^@1QF0_!dk>bn0>*1qG)g!@EWK1jm8b7_#D9%PGM zM><dUw5MU_m|1zgd1y!SWWV7<``BA$s+lFUGlRH=I`Tih$@(lxo+wF-U*!TVb9My0 z+m1Jesa@RDpg|S_`kh)Q70}}3BOZ8q+UmyN3NBJ1aY<W`x<Z*ZF0XWd-kdFI>oIcX zYMF6%iflA2tl~wy32nfkxz(hnPmta9u9(+DU)x1N=GkPEo1rob1gr`Rq1bx8<+YgH z{%!cBduZA#ES-gZ_I3W)oTu)$hfb75H2na9CnbWwj35@YK-6&pzlKM3+|~ud;wjki zUG6Qo!7+0l(wi9`R~%(<impz{pO@0+#tZ9;w3gZ0I2%TSgtmy?U`ilur=lf<^F+z5 z(mm4$oGV~rd!4$GI~#SaonImee&E#hbi>H~Fj0T0TA*He=^*eE-l~Z7g|_j}SfFrj zZp+W$=6SAL^cuu>IyE0MH9<#eY>k8%qz#C5`nLrk{cYe(ApZ#JKM96t)-FfIy{4-l zPBmMn>E!S7<H6@@_ipxPjz$deNM6<dX03^8j*6yXR3y(^kABq8&0yElj!bjVgntPv zgZ>?LJ!T*aJNwtr?RPw8+l%;G)xoa%1hkJv`<HtHyqfuawoN!m*@EA8%}OT792R4| zQ0>cOapKo``Fg46kDbPZU=rztde%oxaVb9a#n#FRJ1=I<7zP&DQnAW%wL(#H*{9(? zD@L&cl6Aw>2e5_bmWZ(GbCX2)DSKB{Rpbw5Qw5HoX|xri!2wTpq1VB;-;;mXYXmfM zgrIgkG)0%TvnF|0rsTTXf)Wm2W)k9{TVtD$z#5xugLmPL15Y%=(p|5)I;*ZFnYh!8 zIL)Ly85n4-NCxf>L`9OJJ3TtxHGojZk!nhf%f#<mF0{6fLjB{#aNH?_o%a))4d|f2 znx4^fR%TlwE=#kLIh+$B7D5)P27KpgJ5yK}%UH?gx>bIBXPq&=zR$L4&maZA5-v?~ z`^UPWnq$V-mf!Gis^ASAfsv^4g@l=^w%D0xYqIo6L<UOCw0Li-?>yB=vz6zKy=vbJ zVHo>|D-hs`EvoM%%^@d~zN3f{e4r%djMl!AR?MrIA@qyF^sd6&4wic+$BkUq68}iL z(8iN@YG?QIgF%;-<S(QkpVfe4$Scps4iqZRJgA#wu2dHcf7&)$7m0;&tj-EkIe~aR zfIPV_jOiAV#p7cDEKQQ#VDV52O~eWe{h6oSgA-32FJIj`m`co2lF*}tQTenUq{O>@ zJ(*B>efg^LDHdPLiSs+%hh|%6%U}W(mE#J$(dLQL9ogAk`h5j_ECpSWy1NAb<;+jX zxr!(S(N}^5&RRqiEIJ-8sNHRVn@-)~Pv7yJ;zB-Yaa(g%8{m<fDdhuk<y<x<<>)Qn z<g+lr_JhHJLhnA#?5QXI(}CSo*a?!|O@$xqO=PVZPD;<-KudjZ|Lq}2>wi4N_)lh8 z{5uFEO0%=G`Nu(c;@S?SSq)md4rV)dn*ydPq~XO|@iqqIf-{HM9`U8(<%tbv43h#o z?_zP{bU64Wup`)$zjMi{fCLhz7x@=;w6{Fd+DKpnN<(<S2vnTzFx}Ua?i*S&-&X#~ zd~593_pRWU$PJxpCt8F`;TIEeNZzN7`@z868XX3LG}}HZ;P7t{qt(}hv6_JciYc7y zyakS$V?V`-s|OAxx7WHC_)62Tz_nfM%LtM;r#_EY{H%Giy`9c3?s_r$U(&}s0Y|r@ zOpHhv?#jVws;4iAV@Wv)K97Z6v8YI5z9=^_46ct(#gmHPYSB)+xR-+WEU!gh`^7V< zt;26hjBxY1C7+}X&#Iuh$d1<%rv}@(@U%SDZ;g~F2^rLy-1FOAwf<Kal>FSkxwTg2 zoFkF^=M^^6e(e*^At0*y-yE+|C(oeD;pv*g0^?tvfFl&yZUlyQt|~e+AUSJUOoIJ{ z?U(uo3r{2&KZ0U{OeZF~gEr4#`Xd>bKdDS`NRq;PnRtvXlW7&~$0O-~HZr+6xp-SU zCma0CnY#bxuBmu^=9wR*YFd}Sk`S3~Wb?f%n&*4SxN7YAkqrO3qtdwri4js!Z)+&x z)Ao2`at}vf;*T`0@+gPYkho6s$wvIh2Q`t0IF0-ef=fr;8SiWT_}`$w=RXVqTZbAK zseFl@;VflzMb%m>&j!EN$m4I>d<cDof7-h#I_+o2N|F#6#2C}6^nnU2OA>cTzF2$o zN(z~Q?hI@_^PJ;4G9y$$ygdW+g_gyeX7E5|j()B_e)2`HBKZR-a$8F&#oP0CFNv8} zHBiRvdn(M(Zq{Mb_&p=k^8>671^q|UD@Eiw#TV^K6OPFP5_vZyqL|tGm}n8Be*WPJ zvYi&|L<Y64=Pr||4M982P*I)RpsyIQ5R89H{mjLj|Lg62sTI3ZJ5K;yn#Nao*7;w& z|D_!a{!f92VLTD(+I=%~iWROppVR%kH(Fi^U-gETZQNC|YJ(Bx6M2J<9MMM_T%G5Y zJq}af19<SPmPGM`CfzIVF@||bf`nftPOV})1eoKhrRJ+I|F*>Dp;BbZr>~Us=NOQC zIW=HYXH9ndyXa!K@8vk&{1QTI!&jPuN8IhV*t0JyP1&bz*T3I?E;Boi9?^)+4G<~y zu&eQVU^Z&p;{4tr=uA#6-kHP5lWfs;nP1?xH>RjtR@ah}=r9HvEnpT95WrzJ#X6_c zx^c8@gfr@*o7@7>A3Iw+T;pT*@DIkp#>1q%SxMc`S0smY^6q_dRnWr+rTv$s-i|{W zMpp`tjWTPGW4SUNhy!9?d;wgr19l%&MnQvO2@x2}q}7g_XSt9k7AYwY=^cu$EBa@8 z96<WXZ$Q&%+FMOViUf7}GGp|t8u^@9!>B>s;{*FLD$HBPk}vQWA7#(CF<9<%&V1!y zCL^TGp<s;OoM}k=_}~wV3tRm4*_9^DhWy09d)b$SkKxDCM!+Cq9o!&{XNuW)$v?Pj zl_F|hYb0Kc5lDh-{EJySi$s}|`~lo00p(Mdw!BP>#pyj!H$vFh8JRjdT?9~Y5xl9| zJCZCkAuFdxChK=2&rXL)VAwy4SlL?>oBWV>oLTC|A>=Ja4;<B^uPp+$0I*lpEE*qY zn(=;3K#H5I<J=zh;D9Is0eZMOqY*^(25Y*JoKYDoheV~n`xnK>L5cwM19Zzd1Zygh zEH4MTooEv>G6C`BWt)g@GRX82-3yB^z4q&smQUvdx;*Eh7J8r@0r)dTV9;fzj?sO4 zp_Er?lqw-sZ@3~80-J!Q>ME3?;0^wVG-GZaShEvwJ){OBbzT+akW2ekjME26D^&DX z9^W+I*Ti0;K>cU@@1DKFcZ+a2;7^*ML`Dw)gj;l2-o$DKhJijlNZ1hn6SV)p`%^kz z!tbr~<D~S(-o#cDY4^Xt|4&u`)BRU#BRHF(@@F_ps~x=tP$GqiL7~etc4NyEh-k33 zp6^lgbkAvyU5mW{3^iT1Vayj&DyMOsHTb-NkMJHRKesSlUw_gDWGPDXBi%zUHr;l_ z!Omf{(YKW=ul0M0eY>6LS#w5fqn#37k;AR5v9)x|mQciYD%|kiFgHO`TIa-9aL^;0 z>4j%w!VGiFeTadk_glSLOF^;4o$yh98^dW9dbCFN7u&iS+%u7soO8UrTw}(LEb5=E zg5&yl&C&UcgO^&2p6(akc?r3wiENg?C_+cHqRuDxbC`$o`7w*0)>)gwJDCIa&Z?Yw zpyu6eA2c=5U@Y7DL4~!au&;18puvZqE2QkSehOEMy62+HpP%VR&xvc_C9~TRXiEY- zV<Lhg_O3!vYM*hT0J;Y2*{o!*`bk8M5~pnyFc?V|iXUu56f?Z;1$j{Mnv?7?^jEc^ z%;ajPn;ofFKn+($J!Jan;qY;t;#xmZKH3nKPA*}2lxXQEw){z1%_p99rHYvhzw$t7 zajIjC4Xjd8$>e*%fVzE1>F9RHk@=3Proy=9uKf@g{L^$uXARKNFgUETpWh?g<lZ$4 z1Dhui)Dm`iOl#V0K9q*2G1=1&dr9~e>nY}|?Jcjp?uB$5EMb>L+BiIimWoI|M#Bm% z+`N>aN-vF%o@mQvM;q8r92`T;VN5p}gy)*Bimwbo5T8A+lM%2rW1{0YrD57{DO~lI z(fl!RWLp1a+8X`ECX2#xY4)}X_T8xt!%&F=nvaTSqA;Xb_uF@LC8nY7)t3AW)MP@V z!e>T5rQ@dRMF|2Eq7~8yS2_>a;|lB>3)pxRtWIWj+}JK%YYy2wbWz)(64`+3Bu1|D zU%=xMp~hCldu+^WIqnNjd0+3RIZSa1T7hiN5|Z#6T7xI)ZDB*74vVX<Md0fS=|A;; z?k~GC@D4veN85V9gWaL+ng74ANBYlF!l>*2a8KB1SE5pND15?dWT<77OgEU@QOeT3 z+A;wXxrLUs_}Sji?>DzEuFX+K3+>Z1QU0n~+{yDR0V=}@1Brq#Xniu+*|}>{WDmrx zdcMtlSEE(!wt1rY$>HHVGOOHhWZ&AiM}H}%L<n8wpOJF8C(l{y3NqakofY#>=8U)5 z7d!UBTbdJy;xl?R9>)$E-xKJ-_S{f+g2ILS*gb+{gj~!I_;@hU%VB;F0|a?_ifF~p z$&@Y|l0FX`o;V{FgnhGMB^&l6kl4u&1tr#eMee&u{<PNIRiyX++pdiN5kp9gh;X&P zb>L&=_&jyoIO<$lxm#Owdj;VY<XRMw1ka3*)Cl=tx|#B9zs=XyIB?`Mg4ss(R>7>? zW};>`<a4hW<mQIRj$i-lZ{0}y^~K;#f8+a+YMcySdTU*aUY!v}hGl{3+7Bg6)8XB{ z#i^+GSSkvA0G<lGjT=H&%J1`NDVInu=6;U$*O93LVFN!O!4U-fU%M@Y-h3|z`e@uU zR7(F=eX}LoxW+tgO)$=LmiW<MO=gIh1gO%Lzbmbg*{2AkPucSrMw{Shq`Sci1Y*~s z14^F!Rz5?DPauk8Pe-5B#W;+wF({0jS(_9F?caU8il*mombcogeR|}}{%6kDoc%i} zGsJ<qUiZTEb46&`BOF!;lRq>zPZv9Ss~)r$9p!dFSR7cb3TIlG=WP?dN;37?9Kg%Q z!6p_mTA~(uEvkG->-h}3wWk@W!4geB`a<%DkYP|BwHVJ)?i8g3{fDw+3O3H)^94&{ z{1)s;!Jd@F=){(<Gp9v$*6!`ScT?tx_9IF>Z9O^fXyCh{tmwCu9A=Btdr^t}5kaKv zl4**~(AhEkR?>qf<&>ZQ<k%eaH1xvAvoiHG3St6*#KcbqY0oOcUjAnh*Sfiw)br?b zw3zgP?qaa1|Lw^Cfc$S;qw!zGoq&9q1?beO0$S6^h(y`QGa6^!ZQB#My68CYQhz?D zy{S{o+FX(2nB0D`QQq+3K4BiJzntqc0%otgifhTuOL^3Ik=EWRbYRHS&eOIAyr}o0 z+Vtvkok8j)7oSPttavC(@*PH{eBKWyiUQ1;=2jgnzh<5?{#8dYah)!I<FsD8ly2nC zW9jZhnwm%IWwPe)q&v%hd9o~Ez|n1UG$^`(MYcQge&oy<<S~svb?nZpT$;=1|MKMT zG)OWq+;%M?`IQ%&3*z$ew4*1Nd+~#pk;4QBCQ<2?mJFN9HyT7EQ`<56(`OqMvJfnq znOfFK{ZiO2S{8*?H^PBMCMW#P8uDwBzMFWPxOrBf+Q?YgJ*@!W^YxJ0`Zb+>%BKlE zXJ-aCq5$KEM#%ijU9Jadmn28~P%Sy}D6G4~X^&{m0gK*%0kpgotK5wTD>QYFT2ZuP zaiyEy{h&!UH|zHn8}^;|b@He;JXv*0Avm9RwNA1ci=IvDi!@_yw2CXKOUo};6u<Uy zKO=FR&$gYQ{s~FHZX#CigS~Ae6z?DTB|58PPm-!~7YC&ka6u~A@}}A;EyFeaay`ZW ze5-tDh5j=cg-I|#g|xoyRDRWz7T$t^|3w>1P;6iLjTf+hmj7MLv4+HiwthB{i0<*2 z(MlAF1tJ`4H<6-Vb(q^>9TSuo<KO~!8ahmle=^bi+Ri_pyVQkj7*{~P>T7Fb3VN(! z=HHdJ-kd+GK-)#;k#&@-{>`~7+OssM@+@`qE2d0z2^!Mh-Iw2Ag6JiofA}$dx{+d5 z{=e~ux%R}Myol&VLfVI}dp>XS^7CB;KoM67cg+|aAWrf!n&(b9AmkLuH=l`iuQllV rQ1frL#qpQgIwg<)-iPrgiX#70s-4kHWB&f2@#jGB{}2Cfzrp_k09RR~ literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-03.aac b/packages/ui/src/assets/audio/alert-03.aac new file mode 100644 index 0000000000000000000000000000000000000000..315cd68499543be5c16359a1f36a45b62bb17435 GIT binary patch literal 3016 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-04.aac b/packages/ui/src/assets/audio/alert-04.aac new file mode 100644 index 0000000000000000000000000000000000000000..392413decd5ad6ffdb33ee554fa61dfd89fe85fa GIT binary patch literal 8352 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-05.aac b/packages/ui/src/assets/audio/alert-05.aac new file mode 100644 index 0000000000000000000000000000000000000000..b77e04c6f831671e154c316d3c27a3f7566b7479 GIT binary patch literal 11941 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 Xw!d%nf%m@=qe2<R{4L@CU%dPutcwWR literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-06.aac b/packages/ui/src/assets/audio/alert-06.aac new file mode 100644 index 0000000000000000000000000000000000000000..264d8d82de8a3be1ed943e6c1ba0664e481e7a41 GIT binary patch literal 10829 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%0D*z%Tx|qWENW*Nx~FNsUEB$w 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 U4gQS7_aJu+Pq3__|9}1XKY_wTL;wH) literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-07.aac b/packages/ui/src/assets/audio/alert-07.aac new file mode 100644 index 0000000000000000000000000000000000000000..9c3c237095b5c70e7207623d37259d5a54867d11 GIT binary patch literal 9966 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-08.aac b/packages/ui/src/assets/audio/alert-08.aac new file mode 100644 index 0000000000000000000000000000000000000000..099a9b25e5b5571bb2eaced239a25474cb0a2e29 GIT binary patch literal 11522 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 SryoK1_vP{L1N#5}!~X$u`W1-) literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-09.aac b/packages/ui/src/assets/audio/alert-09.aac new file mode 100644 index 0000000000000000000000000000000000000000..a3e74b47e6fc7cfdf885ba72a74b69afec9ba774 GIT binary patch literal 8061 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 EA4tXd*Z=?k literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/alert-10.aac b/packages/ui/src/assets/audio/alert-10.aac new file mode 100644 index 0000000000000000000000000000000000000000..a5a306364bcaf3a71c8adaa50ded88565d7af334 GIT binary patch literal 10273 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 SVf=4)`~N#?LI3Z)gZ~9QDuMz4 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-01.aac b/packages/ui/src/assets/audio/bip-bop-01.aac new file mode 100644 index 0000000000000000000000000000000000000000..4eee0ec97cb0501aa9876e4687197ddc2b8b526b GIT binary patch literal 4303 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 P-v1^6_}3Z4|6|}k=|VuJ literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-02.aac b/packages/ui/src/assets/audio/bip-bop-02.aac new file mode 100644 index 0000000000000000000000000000000000000000..41c67cc5080e16644baef98eacf5b1c81aee18c3 GIT binary patch literal 6187 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-03.aac b/packages/ui/src/assets/audio/bip-bop-03.aac new file mode 100644 index 0000000000000000000000000000000000000000..c7919d111b8fd488ee92d69ffb1ae50ab502d4d9 GIT binary patch literal 9747 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 O6yr#eztY6NAN~(k7H;$a literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-04.aac b/packages/ui/src/assets/audio/bip-bop-04.aac new file mode 100644 index 0000000000000000000000000000000000000000..71d21c37eb79c46b210ea6d90000cae6652c7230 GIT binary patch literal 12327 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 HxKl5UhS3tq zF`C<2XQTkPM<J?2&4V42hV&6O(NT(It7Hm|cPJNRQ59K<E<#HBF3c`79flO)!aOE^ zqUR07r2?UT?r!Wj)mEF=A|7qnqqk^z&>D%_^{m08gqKYsrq@TC>l%-iM`o@r&S)X= z09PNy|07QluPF#j0Y6^sWY_op^&6pI^a0zA<?n7D9&#rCJ|+6A{6crXkbZ|Xi2T0; J>i@^#e*j+gG&cYM literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-05.aac b/packages/ui/src/assets/audio/bip-bop-05.aac new file mode 100644 index 0000000000000000000000000000000000000000..cd3c0b67532c26f9ce6e368417cf017c475256b1 GIT binary patch literal 5467 zcmZWscRXBOw;mzUdkCV9(YpxIg&-zs5H%yBMAT@BK6>;~qcg<ly#yhm_fDATeMB#V zAj4epeedty_jjLvb~)$S>+Jokwbwe>Lv4S<7R<sefconX7UCj;B9ek4!Xf}gLpT<T zbpqh|9!1|q(7Ew_a`hwgE!NjTdPKsWpIoSI$4tHG1MMsjPQVo?Ml#xd-@*an76ub2 zvGuYdDO`Ks)F4F9kLY&}Nl=y{Qh1#Gz>FS>*5{v@)sF~A>$C_XxT1Thd)Enn)dnBW z1bUS{mo+WTa+lB&OXf=Gq3$#bA4$<vH+Ke7dxz)YjRsnah|;A-sc&$)CWwFw*ZPGP zduGv`c>ev5H(B#yEmXx24DFOaiog|O1zhrrw45d_l!TYV`N?46ty{obDFLv@C|2`W z*25)eUl|RX2mJn_-@RqqLsH;2i~ptdw%qx4=2$LUsJSP$;cDaj$c#`pI0YxB4dd7M z+q7rwJVs<w-UP#Pj>U2Ur~!ojbl3e$Eb@;~^{Kq`X-nCq78;vy0snDTFms9QI{SKl zcDg&8E^a?vW0eg84{(Ag!zxwia42W{rVl;7nF`&DgkQtazQO-BP|~u~T!bzXZ_PZA zEP~Stw${<j))p2eY=*<|5C8xOw;_U2*Zk|3Xi2--+iBAs>I{eR=n7{X#6QuHP+Y%) zOCnM`<G{;H_u8MegG9K4L{CrFeSUB8b&%w+Yr3OnYlzB(P3w%hiKn*@1SV6(&Lu(@ z-i60D4242vzrGc=k(8v%4t+CQUp3N`L`_K8*VlE2DLtWTdUZCb4G|LP;;azru(5jR zyxWcwjAC<feoQufy%AURItBanSR^pWezvBo9!|s+KB#0Fq=-+t=XZ~VnTm>(KQ2l6 z4pY|9t7NroHv-DlA%d7E%VQU{!ZiI~TSDa~`FQNUDR=Cr{Q3UQANLA->3_YOe{joJ z_Uq=f`Ac_dZgV`UjosCWx57e|qvK`utV+7{PCbP7^h9BSpxcNm?6niyVlhBXdu$sP zAH#B>_9`uS(akJ87y4Y06Qgu{b^mbk(DbFa#3{A_<~K2tzOCzt#`?|v!4{x>O-;N{ zwkvk8;E~Pl-P=>RJXWQpWVXI0g7@6!hYaiKT|cZ$PfXNh7C67iOt=4K=v4awda395 zsXeur#HUK-tLA)djG6%`s%C#UZYf1-d6Ju}&Eo8+a8}zAMEvGsH|fyFu5>wKYy3F) zv}gVh5Ez(8{@U8yEsA)`skF&eOTM`()UDiXN}aAW0u7T4E1{7%gKi&=^+X|m!YqG0 ztjlA|88A;K0fVsJ)yyAA>oe-3hgK>DG3jm#wljF9wo6FzJa6(Ik594(KgwjgO9Z21 z=q862f({HbN_hI=`OSJ3DK#;xNw-y;ovUn%ZS#k1663&>cnTCsl=$aZ34k0vZ|77A zkYWMM@A5o*p2M<pf@<)iGmtJo6k)E#p#_T#b1~kYkm`GHbb9qLafV*plT;P_TMEJV zFk=^otqW9Om3cSQl>bSb4oEjJUc54tp*?<G;+EG+eCʼnWPP0b16GPq@zol0()M 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-06.aac b/packages/ui/src/assets/audio/bip-bop-06.aac new file mode 100644 index 0000000000000000000000000000000000000000..a51ff515faa2b147684cf3dd0f90435b14ecaec7 GIT binary patch literal 13281 zcmdscRaYEL(=9T<pkZ)#*Wm7Mg9LYXC%6+JxVr{-5AG5yxNC3-8JyrUC(rx+i_>?t z`leUyUAuQxL9f+9QVU;y!NDk-d0FssuyF{maeU-}k<?9(-T8TC44}li#wf8h@ErRK zRV5ATUyNxWC(dS1#5PzpoCweXX&(q~6dhCdpKF@_#*{luB;52Zc%X;LeR3D*{V^MS z*<ov%#3}kH!Ca@Xvh`WJ(IK^~WB4|24Xjygk)q0+T30*KeA61nS%uZ^_!avXW_uy! zbf+1oyJP?svhbxT{j^i^B(RWZ|1cM)V6gye-j#}!-c^cqPTohXD!Gh5lG$3?FHCPM zl%(9WkY*Qft-l{o7_YaMVpl6!{~Fmwr#z4}Cii@eos>_=Ptd^LhzV?jIYVDf9a1i% zlL&fmm?RzC$mPuX%-<w~v72nNVY2_MoF%8yH7Y;%f5)w(MWv!(IjJWP{I`n4@rV2n z*1jWit!*Fs3z-;_*@O4c8@yT%MH|gdWbNs0RyjUJ1m^lE6?Vn#qo><%%n&8GWwgJ4 zMnITez#<NDm9E~t9hXGmRt|M_b+rN7vCM>OE3*RFE#)E(PXO!xZrf`d<uxsx(354i zNqdO8{Y3&1wzMU_Q&TlPv>oZKmLyW-(^=R!N;8>TEhe-r1EcWa7O5KBXeUb&*}ECt zIWQ}S)ZxtyZcZw+jdn=I`EgS?U<YzE^Ve>6GKEpr%q@*;G#N#-3)3MtuD2m`qT-(N zQ(w*m_&Z;X+3`hd>9FvWWy0KwfC;~Xf`UZ!j%n!W>8Wurqs}&GXUA$-5wWmSljCt< zVg&@Ao*wUPq88lU-HO9Nq&<1BuYN5fb^-#JQaytKEaW&y!+_?bPr)PstA-{COr={B z0a~pG^_IP@%o`1Hkf;W+SJYV|>DW@avP>d56L~jd@{VAc<WUqc730={asDewICNQL zapBKvM986@91~l`U{(#UpI#l|W!N4JfYgce+CQEo#W2g5yIGSlo#-p_1xm6~gyT_% zUVt{tW^yL_9X|zOr?3FNaLgf(1!4Kp@+(Oah_GVW0x5Mp=2mGWwWX{MBmJUxIK)oj z8todmqA=7eX5)6gkIiezN5F}k%rZ?+Y3MM(OoN$^nZ36POP7uPeG-w8>Rapx*gOhz z$GaUFBH}!F_|EX_62+vD=i;)_cZUg>uUC3JO;1SP{$gyoEyhlAaOHbEnAbluYP0Wh zt<#N5KrNRi(PS!R*V*5^rND1<El_ee(y_szru+fV-tBZ2W)7HzAT^0>s@&b<QS?qW zx`??1lr-N43vPPytuTg|9bq;ChfHHWU=;ic)UzfaXvo0$<7abVl6n7F0dKcu{!zk~ zMSi(Ln_4Mhh)lLA`b!wrUJY9zfyI(Y;}wGwZE5_CkH^hHRvR`ZjW-B0)miX+``v?o zH!67e9zJB|KFn7%J91yod+kD5tUzFX`3`uDQ0B>Vx*af);l?WU>vOryq@hIXMjkZQ zTrl>Svq1NXoVt{$KfKev2I<EeC(r3j{3X}3s;<2PGp}2BPU3J^F+G*FpS>==&B4I7 z)$>E!)L=LA)%&Snq&||nhp{+XG3=tSjxjUoM6W#{2cy(**cJLuo5l-YDU!f^hUeIU zlM9HiVY2Zr3J(n?V{h-Qi}j>I?2nfX!Tlc++6{dgHXPpWW?BvI-h;&;_t4dyhg%a8 z7yq@WTh_*&$;5Bp0%<zI+V%RMPNmZ^N)0raZ|N7rh(9@fa4G#}N7QUaJAmUqw6^QZ zQd5KjE6a=jCN>Ws@f8Ou^`Aa^d=(m}^7YqiSHFTZ(a5H#>FC1b#lcd>MF!i;dYT&; zZ>c=^sACSha$@GG1mdJQxczBDeJUnAV`O>Pjel2go}<()wNjzRlOU@|{bmlT1EhqD zhtLl4T0SN)6o@v#!^DaHk+or@9&bFXP^Qk?zol2tn3jy$ZkGE3o*d3lZ9v|eQaoRv zsFv`M*B@d0s4MNf`3L#DPw|zlqE*TUiC#Oy*|^L><HHwnP!g(x_^2<QM7%V7PxFrZ zoD+m$Qob@ZQJS1FZFe)bE2A0saFm{Qr2SU4us9>MR^ibk>YkV}Ynv4jfixx%tKzJb z9V6aJP)69X99uP6y6wbzgE64|ae7urliyOL;H(ja2?gGy29~#d#ZRa6k{F48%nMGh z%kszy*}@q#Z5mb1!N6Aslj?%@!a=af>cPN}Q6rEuepc&g$3oBsLQ4c@bTG2sj_Wte zDQOm{NmHI8U!W=aPk_fTEs-;mu-3?QoAemc3V^EEa3R$yhm<7(q*De&zAyun4wK<M zxS!((uo&EXse&}><&aRmX30jzWro(yyW6WJM*s_md6-ZWYtpdxghvu!R$N{2lmC!9 zY(K9AQKH!p(+{|YlRzg^<Ixfs$FSx-n}dWm)OE&}QxtR;F#VE+!C9HH4`fJo3{m#j z>*mqcj>(AxsiyiM`Ohq+ofMJ7L~`WP=>*b6EQR31QX6&Z6&MBA@jU7J5!%w3UCs7Y zVyl3FPU3TYK60WaH|jxZ*2hO~d5+(lSZos>Jm~BX>{BObZn9%?{9Q6LgH7h|)FH2Y zckW_%cL?_OG+ryRUFmt>xvZ<(R+L^@4J4<%UX|Tvoc8rsS;P#(bH(T+dB*DHsW^}b zCa|?YeAONBg*KYv^>2uI8!f#dF4ZjI>;1Na{aJkh-eZvAuMrUacQMt(hOuQ&q1D;9 zpq=Z>$H%t-Na#)g^ij*?9ZKq^XZR8t;hFVt)VZysXGC=PLWdammwjleuI^2JLtssK zS|~Z;yXNK>wz$dzrBG~mq7_j%5$0cFAwv%5r0*;9yltk7j;wC>nz`7o0uat5BG*~e zG+Hc+0?x#il8%bP&V_|SFC>v2z?^_@b=CK`WMXLx#$=2;B$23~o^8`BLDv}Ex~Az? zvP&hm)BtMYkMb>sA8!ZL4)~9S0=@iVKER%4&RNApB1EjK7?3zof7k{vyQ0wzWpj8v z2;s3=QmetwU@XG15$2+HC&}U3%OX_`^Kuq{DTJ=G!6s4<v;wS-kX81>t#*;^PfaDM zC0UC7Yhv%6>Sz)P0L|{U6$jES-)aZI7YqebXo|23EP!o-JTJ8^yzpVr!0+oLCBb!6 zdHSJqP_es@dFme~I>PmhWYE#LONYeAQw8<mIesi*c0$&x6n@6$wvUNu`v6mO1;IhA zY1)=uOHa26GfPmFd_1cghT;M*P0B!4JOhnyBtt4QNK4OG+NZZ!$11r7Q71_*XMj3A zONp2!el;aCfnGyGl(><mdc<^zW(q{plfj!UygZ~k5$-%qYu>Bin1%wVmZYYWU|d1o z9<;I@(O+Q7kxw4aU}XByWtM^(_0yN(YJ8+wG9ByVj3QRFuqRCzItYg(6(A!?MdwV# z^-G>{rkaKp6oA46OCU#+0#dNHIC5K|q!G7RP!gXK8*P!WiG@Q{!C#IFFC49uIA2Gg zNr0n71V~b={_W#?G3s{g)OFUu=jyG<cI3B*IF?VZ+7nO5GM0}F<H+Qq!UctK#$q!C zBhwObe5EPYt<5IrfCj4VBh#f7lGABW8-@SL(dA&HoQv9P#Kq~tpro`uGqU6DC?wn? z+~k)MW6qm6xU+2U8Hn8A04mWdp*mOtU9u$6BrWT~0HP(D4`kk%Hs9i4F(uD&=WI4x zOVMz!`E`TVq(hFM`WbjloL^vXHXRzx{ePVA{`ZH3LtiO;l{fu}gwC|?0F(Hl52Ea2 zV?m3FkS8eV+v`llvB?QE@hv#<<!Q0twfC-YfO1Fn;0m{dByrmWx5iTsMs9*;BVn}C z6Tr=yFRAJhTR9>{SQMVh03=E#!~^bKJ1UQxUESC2^ZV)96kou3pKN0THKUV&yTV`a zN>Nx&I-$=l>le;3N}z*8KZ<1<N&_2@4!&QGjm?e78mO~^BSuPSOjAqeh<NoA9d#u8 zL+ngrw0UfoGU1`aHBOXghIuuP(UM1%;ct%u_W^dFC3WcJSIK_5*rQHmBq(5X&WQ0* zehpiaptljTMb{d5ZztC}%w-EmPz{HSTf3KzPK5^q=~{{e+EDR(FVGxzslg*~*(${_ z$DX_In(S||Uevnfhz5kyu;h=wHt$W8^Ou$k+TeVwLb>56IFjU*9DML=(;{Br%PG^q zCY7uBc8+EhTSLTIMWQ3AZLGx;CwBN#T8_+|!Zy!`T{%s5JD@IM&3hDp;bJA?n)U+z zj3J7n)p)BOHj~KsWrjCzYN?_y^<S59HtvhXSz(D>(ccdRbz?mQy;GRxNhX##6%7<7 zV$i5lWCV(u$MEQpF0<oSDKY4bjPyt{tf-+xY#M3q^?1*=FtsFfOuIk|U5H<OULK!4 zt|1SX4YiZ+U-nj(xHxF->~ifgm71$Vompwubz8YF!Y{}>p!?EDlf~H*x*;(?gchk| z#xd(+DRaJjt|3c23aXa2q~cI#DQ~{#r+O4^nNB^hd0eS}+;y5DVQKz|&q)xfsQCR) zw&1s@5cz5vvw*aJ<_M4$+o4MgZ0t{>Ya7S=4GbYay3$dqz_~GIT-a*0K=B}(<?^tz zrn=&!QFE|&j&`-H_aZlQV5t;F2nHW!ObpFMna^9HB7Tb8WJHqBpjDAooXAt9Hf*Za zcPV%F6&FFB$q#nu4Nw*O<Z$>y)>#pqMnf|vU`CUVuij0Iv%Wak!d6WZo1c<nBQ6uw zDUL~!REeb}W%8S#BYL)sFEt7!R~4$$t#gHymTXflj~6?Yx~#m~kCGxZ(%PI(`VH6a zx<wO*t}w#ydJ{il$|T4|tW&i267Whs*&R2ZKYsG2B4y%MqX~~mQWFkoHnd%!R{)=j zrG7j3tcO!yFlEtFdKo(6N)x6mVejAm(DM>+(eby?49YI^*JKKMaLr7pSHY(3lJlE| ztKuTnS1mN<v(91n#PV0iKT5=f_Bq~Jfi}73_4(AafsaYZ=fTePX!1kQY=kfLed>A$ zky-+<wNdDYh0|}0KJKp2n`f_@J8zz1l0WA3Nc%pkSzgM?Q^qVY2?tKSonCCzu`IeJ z&)Q%lcE@^-6_SbKr^_S*Ve(x6ii$qSpid&fFaNHMnv;*C>1Ou&-*UpZbmsp$WUz<) zClkgduN1*bYoj-*-iyh6KPmVoDcG|g8u}Bgp<^cP?_w{HP~yFr*XK8`9jLSL^GyG% zNbt#XaDUF7Jjq?+Ac9Y8<B=6LJzb^c?>jFk#{>zrt84_GgcM++zAkN!Gw&Fw{P{;Y z1cL{TSkO!?J(^e{<dsa@WZsEy3<nS4HmWS`)bL|pzz2R#5f26mShNA!*2mPC3UnMI z9If+Cc+Bs6vRgG*N460c&2?rVO;nrVezA6^6g6zyus~!8D7^zJvLN&YR>wdU%T)~5 za_s)FGXNWFe1xL(RDOI=*{8m#;?gREC4>lVvIeT+Ao%V{w&EDaoOU7jYPHYqJ^L*Y zjK<DX-%7tUA<P~R>`mAe9p)NLlT-x2ap~QRAj5=52PMVjO=5knGFPcxaK-NL5TD#5 z$@6$?sdzJ*3e$oMt8IYuMqx{Wa#<#sr%WEXT?yQL9R(2v(vRE7ODn4OT$3TE<xTYQ zHJ`T#=z<1DJJhy5%Ap~X?d%i?KlO_({%s%=Gj2}zeeCyxs&3w0_Fo?)wnKKbb`DMs z0)=h}V64@D9!)}PMJEq4y&@*RM%@}lmyq^bjO`u?iCdzeTO>fKlYW|~Y*)$#kWs(t zU}HI1O?6X82i1st4^&Q8TE9r>QA8uRpCnWpDG~3En9+ip;J|l%Vgn;nr=I?zSI0~a zt*jTRdO2C(rV1Hzp}nrP46W6~t>b)I8?My|RQ63APHcMirc%&(-9bc%&^<nO+d5Ti zDTy68OaVo-)$1XysvjAEUj|sJtWuHDvZ#GWbx9N_Le$6G%I{AauX^#?jfw#%Af>1x z<OsC(`kZSElb}sFUR>?X9ed6#8-A<TMPL>Fy6fjJo;ssn@&SVBsQZh3+AXVm#lD%Z zIm<@HssQ-2G}RnF%L6Ij4Cjkg%lRYi+m?CoS^uEXuh|IBo?qWD4$PL?a9=U^6AUiD z?;z=qRuw?*9ii1J8@9&;dqIFNJ)8XhF<zehmEyDFrWeZ3{a6s+WW{y=-{YsihwIm1 z^2?pu;l2Q<;jKvmy}wk#&L9j+`T6Z4xLs0=IwcUK+9qGk6i_?9IkDo5Qg1pX4G0KB zYudCA?mv0~kpY-g>3~MJ*S*x$AD+n1X%)2jG2D%wpKJ&{&Iu62)hHkTl6OsB^N7r& z3XM>r`y#gQj?)d|V5e(enewvEv!rCkQzxuBn=9c2ttiIjekU4xVbLcDjg+^W3|w{~ z&i7?pWR<DbJ_u8B;aN=}7ujG0P{=sNk0p3#$@cS28RH!H?1mcVp;;3F!k?7Isctph zkKCY#(q72JnzbpYRo)oCQ#W-vf2#?yQ<)0zN(g)g<bo2HBUOwTCyGd>e`FH!pUjak z-9SkGpkce5fD4HmbM5_4o<>^v1PoE+CDBGmN52B3VWQajdi?`@PoND44F;D7N_8&v z^jwhVpw@hy0!Oy#&*gzblf0%QpOr(WA`2;E!Yy`@-7sL}I8vy?2SK@g)C}a|r&My% zedze=4NPstMq57RgWt0I>F^&c_EJ~5-*nVm^^PXWPsBARJ4+RTz7;%|P^g{JVux$= z1!_}`S}Rzj#3s$6TrCCIvVOlBW8>4P8-{m`y1%Jru!fbr+VQTMvTWpa<Sw}nPD0_o z5N5sv$3^z1di=--GnWqJU2c1YbsHJDo!xuTOg<r}+^`q_t(n-itZTyMH0|dRS^n)P zdP`kX$;iAiZJUsf(wY)n<ke;7O<nc(f5uAkpRw{*7;{(e-qZRm=@Ln0lKl)d8FgD7 zd+UC?eC?ZnIt4vFLjq6!9=vhgos3c83zBf>5vhod3$PMXJvmwl4bRD==ObLt7f}w< zN+INdo%kzW*(J9U&BtT~uU92DnC_h*t~2;ma&<}0oFYqIKMJA_d9}njt)1fH=F5N> z(zTQ-vom<jf5DQi+1q4NIw>@8Tvb?k-K~UbI~%jC4b`llFt0+i%P94J@s3V5Q~A*N zO|j~jR^&62YifL_EuSU*F7e@XU&+W?35Rq1l<-bZYvx@|LM*q?*Q*=}eH?x>J9gJf zk92i3;W0jyN2qYGM$RE^+y!k;+U1fjejK*33uwmSjAKoU{J#ANxrP=(e;h2e3%c>G zw68Xdtj^{fOaXC1H>>XCFU#fU(&Q}iOq>qyL5ca)VT^eEk(?MJ*{nEm0^ylh0UX3Y zstPFTV{kroP`aY1UEv1{{PVyRmJ?u(h4sbl`O(H^&ykv!_P)2jjRd4t7m`ip<T2yL z9pUs=p?Q|@HI9Y7rbUWAu8G+9e#`T6kli?CQf8UsHwlh>*GBbPwNR`w7-hcy8s&-+ zjiz~Mo7>$oS45p%Olp)F$BVePvaB>c6o?_?+*g@NB)$>ByWVA_BN3;4;RG|y7@XT% zdSb3!raLoU6==uSuA8Vw1%E3+c2IX$mDR18f!;=xCUqR<{hzD|2ES5#@d+2o2MrCW z4b*~p&ZnLIPNsiepL_7}6dL>QC__o1!tnkt^*$Q*-V!;bwai$aKFeUIMHv)teB(dh z>NgEC*|zqY)Y^X9)n=+bE%w@!sJOCUq_ow=8$vF8-@(_rLijxTQjhf-VW#DEQY?jC zLDMeSEnVGt9#sx%OCh61!|f48@6LLJn3*H~Vd-te!nV()G1(H|q(9>p_?`RUu8~}k zc#ZVcKQexhpsG4L!e&)yT>YN758<hf+6mi(cq(Lt0MIHcnJm2HFcJ#ARTSyO>1k2U z<=8HrCaY@(<p;5bEOptMtC`PG)Ms82+zjZ}o%?i`jh?(!OZ@0Y(biY>mhMe`>Dgu( zsR=Z<2|u;-J@uJ1la6AOElWvPkrP6$8;pCr&waVB&tE)O?^k!S7vnX1&;Ywj3YCF5 zXnLy`zcjk#egMSljmXKu@-xQH$yX)}!-o4+ES|k7hz-W+r4F)H*1%vy{N>=V1ku>g z{DGk846W~FBfkYAg;Gmx%%t@z7x(&&>EtGw9K72UN%8liG8TD^XN6vx*`8}>T*{me zj~XvTXZf~;QIkH=%*y2*{zy;b%Db#+;lM=Aa5+hMH!b)N(vLf@lmx)M5E%G%lt1BS z43+FIf8WH8`=3ob`0E1u`rh9rs_P5HW;vnih+6Z5N@t9EB5$S2Dfuxq?m6;sC%-O+ zKA&Tf$^Q1G=e0CK_Lu9{5WLRxh)L|ct#OTDYfKI=;W?{T^p_H9%#+=CwEodtQQuI9 zztfw%z3n{*o!H2q-g+M%g6B~jZL<a4e(>~NPDZMBKYz!&Z;Uo}a=GHId}DeWxiRQP zrC~0>p1XKz7&A&@Rz73~94(|1XsCI6#0B*DHGw=Rl6m_!hA8Ee{FdM(o~PS&g(uiX zJs_qihi4womoFwBar^D>LH*Z{_t4UVpzXIi)rN5ZV`h)WPlh<{&T^`j%gZ-^tejU| zO<tQLB3^}4hL);@vp>eEN1n&=5wa_;Lb3GJv7J6~+%e;7db1+GA-1-0(|Y(_-?Cju zaNOU}P-%==F|^w#;NrX;)?lJmRu&JPCS|^Ln-8bXm(rk2R4fWFQs7k2UkJ0eoVRUl zAIMtaW{8vghXVaS6zCIPVc;-^DA1?F!i&TW-4aOxdmj6k`@~3Yj3Ji>(44<8uw$eG zuFhutC54KT#H{jaZyd5+eAp$pUbnR#RhoGpSzC`TxgjaENEc9^mCNIvv4oDkco$tY zy<_wERzTFUTemwGqMe&B?w3_kp3)cDgkv_=3#0UrYa?}4jh9EhAID~C&chHte+f77 zGOWGaj$aiAsP(<}EpxE*ERF^cc)Oog8YL$WUpppf)rROjaU|6Sg;YeobwJee+AT2= zH)>(B{_o+z1wlPN(89~-fM8Kk&j7cTO8O7-a|3f{VI;|9CD;Kk<BQK?OHYZ}$C-B* zzW9cH+=pxJR7Y<;rlHAy9gUHJaQ6r^4>F(Mj2~g(>Th6xi_P=#Dq#>|i}nK;d_Md@ zk+sCMHwM;$|FYLa{z?gUjDkUgK}+J7kOjM32NA&s4gsv&uYRU~;Q93mJ-YQyq3^$* z#ecoiN?jEVGP-+w+@4i~lWE8_aog*(D9}%O3^%)nVGwCVq;?+0D|AI7+s7sLydPTM z^m5vhdXVIG=lLERjBiM^5TmHMH6#sL23TZ8wx_9n)Q*x6*mf<nn}8U);M{^RhG&5> zge>nA83v+CT;;Su3K*pA^tqc!(WO*xz8_-qLJG?}DMiV5iw*2)%!ks@6iJ3OPO;p& znvs{EILY^D)sL~Xc2C?uvBL38VzA4++UYb`0?%A=g57)a`2aQhG_h%j_DsrbJ1=!v z@a*50gATe6ix#`jnquw2N?7iL`SmA`Y*H#Xwl;71sRjLI(99;G9Q`c)9CN28Jb;`W z^m7#KL)PMA|NHymCsb?{%c_(@X*Y`BtC@N2s?WjKe+ne-TwaqYrNhl+aa|*0J_7lE z6+_LaV1jLUZ+X37!{QhQV5U$RB&WG3zM8ZJjV(bl-7Mx5ss>l-NWQ2rz@*eBhr%bG zQy5_?IM{%y>gf>f-Ov-c>#hJkU@1Yy+lBN3V7P*G)8A<QfmCc@4l)Lkxs|7|xHbJs zCn0b}s2#9BVm*^ao*$YTp^%$D2hM{N3_mi%rUQo^XuiAtIIW0QA^-A6c#jZsLj3sn z*PmofMx7Nb<^AwhU)3V#6gp*}vf?0gVvR{aooedF%{Z<kTUA51nczSPcLI~mU~Jw6 z2d!%(&(-)_Sl2=W6s-0uQ2$+3o-*kxOKxRyD(iwjdVE*29!9gO)%>^@DI+_=!T3^+ z(tutwf4TP6#LtD~sb3VGBM0tS`oc!PQc#EI@M^GA-H?|{BpbX;!)P%@$1a*8P)zJA zrFzXpL5kfgZPSgDV2pnJ$G+XF8^o7z<gHt-*#Iu}=l4P`$ie<&Z3Ew1@cHfa^NZ)X z-i#J>jND~)cC2;Q0Q}qrgL(N4hJ`zP;wGrdY!9QQf54m^;o#MIlnXHuHnlJj`HO4< zlJnMgGy+P{W{t3H43M<jea>`VoaO%_nyL{SH{^MfDjFP+B_|hc5*hs&VE6EiXueVv z+0P1@VNPMRLVBATgKpn}K5RTC;rW0{$tL4WPvB619G5z5DrFz%{ZVl%%p63J0$fc~ z9qzeGuMX$nnJ6ZtRqHM~(h43(hXnyNxNDNj9K$J=%wN*sn3iaW$ljlQiPa!c(p84E zezS?cH$z|Y^+va^{gQXrIdN#QemW_*f)SN$ax>2`L&!_6ywEU3EM#P<GA#?eUbbVf zcsT(c&zu5hzC^n;li`g|j2Gll4!%u7_U1#ccnAs6rVUs%SP(tJmGNCyfTN<9f^+## zy65;7YEs1(Ys@s{(rRs5u;x@VU5soXC--q32`D}VYs`=PQ>?rqK>`y8jR|e`64uIT zv=xhuucezGoM4@@#Kwyprh5bF_jBWHqlGPf>dqO=;$q!tJ2r$N1y@ot76tjGndB{3 z?MMMirhog&VSxZyxhxIAJYRsum#7e$DABS^m<myJx&E4+s%zW)cGXcg1tMr&%O33@ zHKGnv@6xy0BFrI$iJuuVu4a9@Dxf1X!*I&l3|Ak5GPu-2YFHdkSMbpOFU2}y4ZZ^2 zr;mf#s^<+2wkHk7!^rtB!5gn@sk#2q^?P<kQB)e={GQ`K6DAS-&QWP06;+lV^p!z# zg!8}6o!OsE$hhEpP+2jIYv+g6yf#GOF7($TRfPHdl|Q3N<(BK|22*Y)jb$HDv8$ub zdlV)MKXE5?SdtQK2JEQDL#V`ZS<`&1Qcj;ijNNpMbq#l}MtwXSaORIcU<71+=yMc~ z(#akwY40UO(q#Gj^M74KNdGH^e}K*?dSrM#N8i>v&x}rA=gI4BW+FM^iEwA0ixwB1 zgI0B~3M2=G<w*<k7;92pxoz%P--uGmqO=u?@4+kQOM#h+CW$t%#5eBvShiM-Uz73` zkoqA>WmzD$yDu|QR;GCE_L{#TR)JrPSA2v9&XQo0Aook6HF#ORtB81QL3eV*Y&Xgz zHvu@rJ!JqUM0TbX)gvi(La{turlL(r#IhoUs~<JYaSUKW)}m2ZTgVM;XP={*sq0pj z)-(oI;&S{w(^K6LPV6)K(05m0{&C)5h9|nS>(ui)jt>^_Y|g@+^*Ab%)5JyKIjI!M z<9eKr%TPP>{fEz3zrCha4j`M~Xx^u?OmRjkY7=KhT9ppj{G-YE-^;gd=+J^P5@x=2 z^9?P_N62h6Fj+cT^Nhl}Yv!yR{pUAH#qpdxoJBu`rkB^iz@W>Dxb2JQcSB8t%z&2V zpWQm2+!DwMOJRi8Yt1v*1F?s^;GWLcCwXG1Gb5kWDU5CsL^9+59CyET8NhTGta)kc zt_KQM#b%@C1v;v_8D$FQWhE@aoOFLba*yuVa=SFY=Gl2Aoa1SC<qbHopTnpJJW%lX z$tIr)S=~&j5nsfBbf!2d8U`r}MMb~guN>X-yg8k0&U8#(ZwCek7ZxVI_1w*XPoSI7 zpD)n%_K}6Y*+6LGPT($vErxZw0?z=#=YoYo1FD@A<xjsw4qx&ql~{EnuEb^o3i1V4 zy76RX!gRHhl!ZjZ!YM40i-2)zptzi#3=sOc@8`Uft8gvUGaWbn(lKWIJ#J$dX2a%2 zehw<hx4*air;juTiQfZck0*y~voZ1@wI^^U(E5ws!v42?c9}pi?hIc46?B@{_m2&a zOZgpr%zC}F1{YNlXZ5eddv%)1Iv@Wgn=)&s4607fI|Q`Gk>tX}SYuw6RkDHheAYSZ z!Lq`^omgfLzPLF7K56aKw8A7)DX@enQ3+1BNeMMx$Y^d>$wtj@vDy9uVWHK&DWOKu zAM(6Pbs#-XoD#>iFl<<=WJX&}zFNd|5g2G2=-9hN&6X(0o9tMF`7%gVR)awe>!OlI zyxQzU2YZ{-kJ&!xeJ>eW^i;Jfi$R-#62X)dZRMtawXM(X%jt_+77r34<FmN+_cz^L z+vv(E1v%O9`=jIZ{;Uj_?W<js_;jHqrsKhVb(bvN7SA9G1ze1K5&IPvBe_`k|Dd&? z@35lTI6dE<0@Dx(k2kvk)(4S}9{R1m?9_M>xaFpD$;b$_6xrR-^6r7onTy_+@|xF0 zuqo%=Z#p0-4<EcGyEW7afgdh~!c_9NO$sk3((zJ*J+@KZulV0-->f6@EicukI$DAq z!T*^t^M5^J7>SyH4r17lY=|-iHK_l`%Zi1GaM0_DdDm_CcvpJz=yUGN?Y!n9+AlFg zVi*__2+2Uop~5ik2Q<=Lu&>gB(2e=zz~u1EWf6?>2TCSN7IswXU~ZK!=EkuGF3Z}9 zlPd$6#n$ZS_J#X*nfZ>ZgcO;r^2sJcG#vo(Fb<Zac(&r?&wI?YSfR{JS+V;Q12h0d zij^n+a7{Q4nj^CmN3p_j1`2vh_?5cf!r=kXBT>TBQdu~fSlx-i1!?gM-zjEBGq*UO zcc%_KX`CWOVV^&r2)sXR`cjjlG_!XI=_ipfO!F-;Fgd78VA=-aeQ>H0f7Ea&mO>`W zQJWrtk;wJFt>}M#_6x>@3CK(i-1xJ7yVMd0vDSiZqpH8OWm|2<5R!IIhxhjOmvQV) zH$)GNvP`(t#G{X#)Pbg#^jhCnI<lv(pb%#~TkRFk&htujmcKdVlMUX!xcDzTR7N}0 zdEU>Pf=_dra_b7`t^KO2g6Z)MB7H-w_qU}p=<fLCekgP(XaKm4cgCKsKi$60bpOoR zAzaMX{+V-<z^uhzXI_n}mHlPu)=IJ|f5vN0B5bC1`vnn63ya~*1}pMLrvrWh07#u| z*hItep1H7B%*+5wgMiWv54la`2WoJe1G+LagHpP1+5ydqD~{Dv2pq(k@|=3Y;my1Y zvVflwmfwERJ6f92sgJCsM)Q|e3YH6Sq)gLUbo9pNx1S|GZAcc8t69lf;({d2>oZ>F zPcn!RiAHOg%V}~*9Qe4EF!Zi%U*^vD-r4VWsAF76pX@YUr0~u+@}Ww*!t|R#MqA}; zF)8lG93<e1*r5cmFL#EV3qP4VM?n!nY0NXG$To0gd|&Xd%CFOTn(J~56N7$IR+)?( zw>IgADxJ`VD)j?3CWbtj4y~Ufv=+<5zW6lEh*i4_awvl@0XV44IcW|Z6;kJSD7hmS z{*O(XOeoCL5?;;DEPo1o6eg*)>}za`{HlkUcc}z*-Cs!=fgc{(#4r1d=>R~jS`sf9 zJjdvoqoAPwO2V-4m6Ajr%2`PV1IPW<lVVQORvQNs>!9H)-kb2r-{<FFubsE~TDN}3 z+?m%0ukU&O@RDnj)vC^h@dqAF^2XzsldI0V@su4q$%`cU>mzit--=QJ{OB=`XDM22 zNy+348YqPyo?cug=|(RX6@!9>{y2S$&gv1;{(UJ#hl9mZ3=UVqahjCnCRTppWcgk! zi_;ho=FbVDqe$I8CsnmCjhePaQNsYJgr>@9z)CH4bx|h4f{&OhNgd^7GIQ5^t2jz{ zQIg83F`8e+{T%^U$tT?p4_*3qlwVd?3m}zrERrwp{Vp=s&%LDnNwF#@-u@DOC{D7i zbLzGES2W8XAeyl=F*$gwW!dcUTD1@Qrz(E6X)xk7ZlTs$1LF#kd3woHY%Z-ra?!1K zLDO+Ny~4fW2hsAFA+f9nIO4nd2qOc;(>$_e?$~I+M`+^q@fzaZ*Iz+cBUgnkGz7Q^ z=z9{4wiE<FP<Rc0`{{{jP(x6Fy+YtqzahIPfA36-&b!c^d5XDbT2zZNg1Si@E+GSr z<xroSyE}>`V8Oak(PzAZMKV%4Ar(>9nLoo^21UW``xw~PcJQawhG{1+eZ$Ya$*(jg zAopnbbQh{WRt4wBGLc`B1j+~+hxj{2qTrB+uzD_MQ{oNNu|V+h^^^eoEo4|eL@!cj zhlA|5Fp0UsyPxg081L9^e?DpsC$3XTQcx9a*=g%>3SY%RdcXR(dD7m!OB~EcoS^&N z+Ri+$>@6<a7zA}Q6=38VQVJ;YOYQ+MCB)&`!R7e|wJyt^-RTHizP~KB9#_(P?NY;_ zf4oC<*SMHdW0`yY*7)YLrl|EZs6GX2w${3C25Z?cu-2C64A`-0UFWV8yVphmV;Cds zm+q#bDgJaT^b--swDhg}oL<x%1N>`D4G&vz%IZ^3u@FPHJ)~&8zqM#A3eZH#qrqTY zQ7gh=GKWwALolZ<O}rf=4150LxZ*#K6UJ+N4dHBLF-XY@A5xpsb%stq-tOEzzqr*y ziCdLSxF9<R9-kn>!G%Fi<%HirQ+#8)BJv?p*5$YIi2&-u@e`ld_AgX$$@?!aD#pR~ zUj&PzOz@JKoN#n+#z&2lsI|v%&t67isNT2)6Rezgnww_1hXV@K$ax>XYE8d(=UOP? z1RNyB->A18PfowMQ55>@8TOWRHpGB@Ah8#1<ltex4;{L~i-ZdeIaX@wsM0&R7OLIQ zo=8p;@aItv7>kq5_Z?L^_BMgPH%rsI08nDV3)jx=`7Rc+__^CkvrhNks=T*|=N}dS z7tdfpjtaNUd&1KnWO>ZBuFT1|i-H$bNhNGr!&bgFhURt)K!IrWlPpu-?(968m^pVC zP)HQ~*3K&Btq<W;Ef8%$3NEta<2QzK;{My8?}ZO1!D6_dl&U<81?z=_`dw^m0)6(% z2}}0Tc#!~%R#ic%wP*A~_Nw(hj)k;C$%#LsE=w>YK+8q)1qz5!VV0@$*p%WF2BlRw z-=c};BwtihF0(7v4Met6y2$fCXBfVK&nwL5bs<uI%W<M@0}{fo+I>x5PqWt+8o3(9 z#Nv{gd0J2OAUqQ?TAxN9@K<w{GFqLJ7nZ)j(Av*a5|<@S`$cwjQ2H3$@Ni{SMumpl ziq{KWxViA>gp%TFimjydv7LU=LwH$<sz;680MAanI{ZAs&n{I(;&TEOrvDM^ZuFQZ z6m<!zU_*bbHC7tQpA9W4wid^k+Xo=x88nxV+M<D)=tOXr#%~Y;{^OLW*ngY~4ZWJf zRCf4`j93aYFhxO&ig5nY{t~dzPrNg>bDy(cZ4KSLfvN`go}8YHXW>xLtr=BZG|KlJ z0t}Z8KBTAJU+&%@i@5x*%^7(egi^`mat)PV5}ced5qOEQ^Q}}xD+Cm@Rum-X+T~W| zEE9?zaB!3I&E#24EX}M3t4G?^OnZ(+em^lCD+ZhX#C=|07JB2_^V2Tyszmg>J>SdI zMJ*(4iL|!qFQ9wa+4P_?FT=rGViTlCjvlfE&#Psh0FYa1>g;buK{TFN-z>q7uo0BU zK@M5&nv$`k#;doZzf*Et6zWERLqHk#P)glN0w6*dtk}`*v;S6q{M{$EJ1wqH*O0r1 zmzrNeLO=@PzjiegmuJnI>krW)!In=D;p~TpLUMEb5eLc?HMg5Oac?pe9vW%5AGt=v z33msv*4L^)+%mjM?C#Hh3NC)XhJ-2MW7S4fyzwGn9jJPxhjp1nuL-8q2!0XpaIkR> zOTPm!ZfWCFaaH#(7JbSIbeL)l(u7K|_AmJ5ktjx`=Z`0uj8hyUD}984aliMxo!^wu z9=7tE@vgxsUe*7E7jf0y4*&E?IqT~4swBoYEY56DUQRTFiMI|L4603;CS7>C+Zht; zaEDMFJby{M_pjJdJ36-i0RIU62e>Lwg%gHMx2=mQ2LP`Q6UQcI1bGQs^@H%ZJAbdf zEu8UzvJ<YEQmjnJ{Tgr)YHl<U;?oHfq`aC<c)JCTR>htM;cSg4xc}AUVn47S!yW8B zVV_M8yEt5(kyZqK)6KI%*Y{!6!f<%X`pm4RwoqyxDR1-5@cyEuhPiOoA-iHZ>c__I z<|ocvYpQFJ?iEv1LyllxMEk;A+CQ?NK7C(VD^IA^%;GHK0D1>rI#h5*SY19{Ka-=a zT8CT?9?H2&Hi;{K#EKY$KoX&KVvDmP9@n4ZH~AX)#&8$u697h7Wb&KvzUVIx>$mm( z%vaNIx7*+4JBc4BEo0&RjbvyMWf(`-HaOY_5zIpLP1kSOoI{%Bm-ZnpKdjbhXe*F~ zFmR`lUopnUxgaeVQQXVPtUA#jEEIU)so?~y1?%v2VUXMkM$rI<^UM`mW`I-aK4Lz( z)Ye1TFf3RB&Z!4?<XVmdV<Rro%tEH~=ROi+SD1}vm4`pUkstB@H&3PO|F;uRhLPZh z-3kMIS6|z;+2|)c@y>Jj@yl~+`MvKA4qk1xl&Ta|-z77=)I$uZy%0{OcF#aD=lwQk z9-&Va{9bdqQfJh5d-7@A7m8JF;YO%6tcZ%2hEjwrAh+EVg!H-g9y3Vy(R!^X3Cv<0 zVk#-&uS}<KbnldJSFaEN=O{mb4g;gQ?P8%?b;|7xf^i1g5?~Ik{t7-|4K#%GC(e#q zzqNXwRNVvXh~cbV(k31tXr3|1YK+e%pRCRfY~i#KN*%+@8Ilx7^xTLc?PXX+y9-7d z?~9rD^lMP3D!UWpJ>4ZyFJIdWhTb?lCcC5`aZ)WO88O6HOt4L12#hZ55M}j30@tT# zMSWxjS%$Kyc`Z?t@)E>Sw{KlXShQKEKj<WVu)0?qioS;Y$6bnlVud#)5A^Y*2suxZ zrUk%B1bV+Xm;|Z1xa4no2bkQx0(Cm^g_hp2oV*u_o?~MB`xM4Vers|h=K2&!YDfOk z=4_|uVjc2ZSU;H7I`npB%0e&V0w3n#;$AoQqS2tF-$`Dv6Wv7`Wc}R6y|TAEu}~cC zT_&h4C+tLVLvJIMreO9X42KQ;S1rNb-#gFmZ!gdHdv@@T2dOYwe!bo3kMJb5sReF! zJ>JdF8lZf~n5D-9;TQji{(;g^R^X*y!`Wov_@mBXhxqL%uh^E>#Z1lK>ItdwGnnn# zh=+e*V@<UfC4L&#Z)hnggso)n&$2Vc>oM!IL+<|)fc39<@qpq$Y*Vb6IGFCs1CwC# zis*-#*30v&IRf*ono@Hq#Ny9QE}Z|yFlC5wVF@Fei)*+IdfanN3Gr4#MF^T|uS=<F zy<d$6kN{L_>Iq^h!K%^0MsII+{bTvF6h#E!RA@(b&h#ZWpWXXq;He3$>gybHSXf6% riG(KZqe(U`jn18Jk>#Am=&;m*l-B>q4EvAFm;lqb|Ls}+e+vE|!A`T+ literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-07.aac b/packages/ui/src/assets/audio/bip-bop-07.aac new file mode 100644 index 0000000000000000000000000000000000000000..7d66375aa4bcc9d827b9a967500923a3eb732c70 GIT binary patch literal 6448 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-08.aac b/packages/ui/src/assets/audio/bip-bop-08.aac new file mode 100644 index 0000000000000000000000000000000000000000..a92e74f4f49e351ad5b93138a50859c9000c07c3 GIT binary patch literal 9730 zcmb_?RZtyW{N&&gf&~q3f#B|LL4&)y27)^mcXubjgG+D=1Sfca1iM(!;0{-oeE-_2 z-Ku@usq->b^D^DPKHYt0;1}v4+F-~ABA{a7ZN<;U&Lzao#mNOo>lee}@N)o}VlVd9 zY<BLxS#kZ{#fKYk8)khcgUQ7$)b;x5%tUAUIyqJF<KbK-){u9*(nUs|N)Ttv3H~Be zk}{*+Sgo;I0#mf~(5p>%1z&;Th<o@~MF`4;1s40aqU;#_?nR8hqK3-xAKlsZhdKqY z=$f}>J6tl7kq6S2EqqlUSbJz+cU+4O5^BF^8k18L;fXOB*}Nb0l^a$J(M%CPQcR5* z*I+uKlcGOoq2b$|rNt29E(<MHyR8evz#3^xc$q5B;2BjJikF?)dRfLoULc#|X)0X( z%L{`W*LgNTukm(S{<0_{@d_#IY0?C#V3kFKqD@jyX+@bqOFWVrD`%VuTbq=#lm<V> zfIDfHQmZ`!NwFde%x6QVT2h(d-dJ9<LLM_s!JuuEZbGprLEd%%`g_#d$8Dp>Vorim zg8P<7Bu=cH=bMTLdiDlW&SLg4{{vPw%4>+C#|>$hsM1$#Df>(!(ZR9APcv)$mJRZC zGq$TzW`^$MRy{^YIwEY}C;0UKzPED5irVT^eOkQDxlg|%wI}9k9H~2bO3YRMxL$dC zU7(2nG?Svwb-{I;>q%x=7iY&By-g%#O*CjP`0`6U1=X*65V_o#Ef-hG>W`xD&N?Tk z*B?-WY=c`U7ko7IQrw+dbDk8f%6~isV6bJz81Su^2ipdf_qF(FBx~r(1vdx27o7}d zh5Ufb;NXM*nq;PW%nXt8-(WQULcW19LnedlutT=38cmJ^lpZIbwr39QzZ_RMt<pi< z8+TNp>uV(WzL^hs5EcIzuKQqA{43GptD6lNTVMC>fX*^~O(TFU3H+ZIe_LDEk02gD z2nY#&JnC%z5&k@-Ic5-=_s(zxI2ybkCc7H@MK@L0wUgF7w}1GlV)7BbYy#swT?hu7 zz>4}rFD{mu&x#@a_aG3o2Mms=-gtoaFT(<1?IVjp@S-_z(C$Z{IcXB?wVOLRXOG6# zX2d$@BTgRDtje<yx8i!F!YLhnW{kq&eOVcx7<2YlhK*`#oO{3zR0$K?f`<jF{JUEA z7Mu%)(13Yq#;+?omzaLzR;Zs*eUQ793QStoDBCBJ!qi{OVbFWxy{)p*F0YNAC>Y3j zdTX6RjmI;NVJ%zhRp9&ud7C#5l=VPm_%~<89`>=Lkd_9IRN;Qr@{q-LrP9bua79Nn z6uaNpAz{D1X+c+I81IRgFG>HA^zFdHY)=!g4C&9f=y&O6EKV137dB_tjCF<g-~G>e z2w>coi~5k?Mk<CH5r1Cx;s=Jw5Z;RCpa@0=A-8@KzhpQgkCpcV-NeVTDkDa<@RTX) zY`!&RB87A3Sk?x_H*3REqFMEG<Rkn)b}zpUiUc-Mn`3+wGoVDMq?@Kq`!P$`H}PsG zwCX99b%unFLszPRHM>ew_}veR&FnbgL(2UHg>zL5HfKwb2kYjPn2}}t@2)X__;#!8 z#{EF!yMdo~HBBkc{islVfh5#eR_#GSq1{IOnB7+T%02WSWBAFD3>zW{l%)$8p4h(c zaxdKlg(7Op5`S4&_av62Ws@ZI_%Z#)=WIg$Y#vjz#c04V?dL{mG=||W&iO9xeBPKN zBz4QEnd=1qKwxYzL<t#@&46Kwj^zdW4I)#NqFYQo7tK$Gwx8*vZirg#^!AS9W;3ai z`{-r|veZ(vX=xwPQwTI-_h)59jl;&d1Qh#*)QFqE@oDp`Brzb@FVIPQPKX~(iHPKR z>%NM#ntc$khX`=qF9og17HzY;G1kUsD8|ud;7g+y-2O0R!7j3x)gz+wQ2lxxPp4P6 zEklEcl_CQ_d+0ZMI2)@s{Wu-pGE^`^T+U0OtWS8YZODA&IqIO7A$6r_#W&<766OiW zd@zr#U0t2mRFHAXW2_m)-78=%3dfdVG|p`v;`YYaF?0OQ80?3}TJRB9-R0J5K-Z}j zBYjX3@!&B^2wiaP&DCt7^E<R}_FblPM$xOhBFLsBJ9%8SjCil5b~??|)nh67{O8df zY0Xr@rp9HJ#A?|$@cM3u!zxY#<$s!@4hHqZHeAmJbzDaqR-vH%nd86@df?>@AFv-e z0H6aebw)&*Bd8`X-)NW+{1L>7(6q*1m{RKQ8AGro(jZeuK^SI8>3c^P89&a}MB;!{ zL*ETHq1zB5WiK3vxeQvePoR}=Vq4?lHi@plI}}6DmfW}Yv!jZrTlC4k8Wksg#V~T8 zN=fle(bb3ED{pFLTl(lV|IV(qv+weVY@6Y{a3U!ic3@HfzcNQEUHWil8krNx$ZGGG zm9n9GhUjm217<X2Oe!Sv@4lthsKSo@ouxE{3C&qJhmgx>XxQgOQY(}q$_8ooTG&){ ztztB_l#OW`81PAA66hoFX)vh6DZ}9$mvb5b{do`7i@HB<Jfppaij|4{O`BBgS5sl| z)vb{zc^MSh1AT0Rbml|<p%2Z2v@3q^(EjaU?<F8KfojjTdXI|8f2<Prn@LjU1+1T= z9;CEy+7EIS+i&GCs_FD{%6<&Kx`zc<5>A7Dy?#rO5SQKL>B0=%Ku(GOB3m;3MEuYn z^yGj!AND@C47xT$d6u79wijklXDVH!B-3;;E=|J}+7*5xYlFnxO<6Jr+VBMZ44`5} z9r=*7vYFO%{Nhi)|K2>eJ$i?+%>((73Ni$G-y^jwfz;74>1GGj+r7o1xjBgD0dwDe zIgRvB3`~jw2dcf&VHlpslz-hCWmAe$Pc&)Zq^)!lwP4U(u5YV6A8+F%TtS=rVTs8i z+w@nfmBCP*C9Yz=L1}5O1Ra0Zl?gXX1gWB$8o#zy8#hlgvvwF>scJsIwr{PKot@zq zl(~wj%6w*b!DgP8rfR9!jO%pUi8#XAgcEP?mrSf>m6fH5w0|OKxPK<Z7g4c(MsrF} zZ(ZAMu6nCuWu?RW$m{OiZBp|_DQneh-OtGJPbU(r)&Gfl9yelNh@yVkDP0p^I_r32 z(N~oZugwG70>-BGy4xZDc)nvbzLr(VvF2BY%i$?ieZM}HZ`Ssn3;T(SOSC0NLHE3b z7Yt{?<gEnTx|!w!$FS=@KBV-ppKf2mq1vp4I5ya5sc-S-L{$_K`<=tIb4ycwS*JMP zNOQ&Hs9#~@hBLFA4FiLiZ5?|aAl!@70e^x4=yOU0HV2`;Aw|T{U^8P_=5%i`Y$IUC z(X?I9{b(7GSP8*Ya8o_$Aj1;4K5;Gi1av&RW2d>c@TQU;g13T<*p+;><_}V<^lb5Y z0Up+q6U*_sy}5@-o3^u}tTP5T)b8v1e*>pL1)(8V1H<8C03s=xdl_{OGp|F$@#=>w zaOKs{rCx`{rHZf1#jW7vRmjXeTxjuq!MfU31!-kyg1|SVsMO0;J~H&goD!U#rl(Vf zE~%%>mwv><bV?Yn#<z(z{qctg6U3(M!*%WIBd+SX(@36<z8|<VVi2p+`ew0;5C3+R z7k^u;Bj03H9B;vvLn~$a_P98{%(}yeVHE!*>7KeNnJJOy$J{mUeAl;u2Te_tAD1xe zI!_fmaA&=QC!B`hZ7uqi!y;p!sB%V@ow#*;6&D+8J(tA%Bw0DX_*K*v8U5h)B_+|r z%>T{TP<`Z&#mbCZI-uL`_)9MUm(#K=1dXrBp~ka1_offUNM$;W6TTo2O7VLNl`Di~ z<Vl>OkpJ#(tBaYHFk|eeq6TQfzdsZfcY1n3SR(LXk}M}=me-O$2(Jqyer0yq^??O{ zHcy!MEq~nB2hx(XStaG<)AbYB!j3q;h44E$?SZ<I$SdBzH7_Oz6>49~D2<<DItlSO zp?>V2{uB2N;X&fQ-UUFnGbB)t2vt`XXC_W~wIzJJZYTB#5>s_rDl~C)QuQ<IJel)d zz*-m>A=^awh88rTUSaHjduJh^sf=l<974AMAYhEx)?ym|tjYQuPpxO}WRj}-xIutd znrWj$(TITQ!t?3K=#N2Dvf;v%p76z=&AxA615{dsJ+!th(iLA*e%U)vY3}NYb<<tO zeHp{toTYA?E5=UkxUXCEXH<RqkW})oQ_H#&%;n$w@PQ#TtZD*h@DKozP|?kTHsMqG zi!*TEJ!H>y^l7QrseHQkZg@RVgK7cV4($iemi{{Gx0)za@k6r{h7BWTO<sqg3DG#j zE@@z<)r-guHM@_=hx$mhzbuq1=V!&3ym`Fp{Ip<|4^G9stn%l<Z;}ef5tP@I@4NY} zkKZN1c>6v%zs2}FrJ2eurAcL3(DTFE#YVr~B86XJR+-lasf1pu3-;iDqnS1qFrR^& zGEWAwi0Hi5_p#_{iN)Y~Clx_4p=iP9e{QKAy~r@>0StfoxlC44(i%=umi<saofd}z zueeluG{KRGW(=CDG@#37Z;(Cr3oXk(=p~E)3IK={AY-uI0yTiH#ZYU6e4#EWPOTSt zcj|WWu>KE&7GdLKaG=TZXi+BxARg4VZ%kwR$eWUw_?{6}(EcLdg?+^9!;<6egXJNI zN?%Q?@H-VH-Coa;xgXDxMqP4Hvpd!|Ms;G_PO~9Z!sil#u|N5Kd{xQ#<~UzAUiN@3 zFJQPX$F%%SLf7c9Dq|!&*)SRr%>`d}JVI%;z(i&j0-uvgTg|tBYzaOGWaS_5ct5zr zPWg~@=!P}>HGy<PgnY3?qW^tY0~`moveU4TyX^r1EwBD~IEC7oEkpYnlG|f*!u#?h zclr`=H>pr4*wmw0m$k;f8A`v@Ew5E$$Ch@VdC|61_pSSFzVD(z<f%p6y|S4+s-W7# zQ+N;tL7Bq(4dtX=lfEMJiKY_H%a-_%8kkwo`FC>C-|*~9JHc0~l^Hhl-Z!Pxai8a{ zL*Is@#Z%8>|LradX0RfLlcuD9@Ky=I4jZFyW4K5cW{FNqB#&oMj)w<)$1JokQK{2# zz|FuY(;-Rwj3>MyGCKdqcpe7km>SSJGIxEDSTb27At8gQ-J}$jo3{;5$#?b}Dx52* z#ZC-qItlS29NDI7a9yBR4Mn~9D&BMGXrO|Hh4sPIc|=&#l9ysDxb(#hiCN{$j%goz z%_F?8<M?_{YyTeJ(4Kp>J}U7)0L4(BRip`?l_Cq`g`vhViFb9^$=T4%FmTmBgaAMX z@{FztpQ+KxwldKlQ}uCxX|h>}-!^4$%KpQbqoPm(BZUlN7=;KkJ9@ZHy4Rb-v@phc zbKqriTyT7h(>XK4Lu$x>6^E<;nZXtK%ms|1Zh_1<MPw)>7V!a2-0w<kDsTe<^-~7I z{dR8QE<G1e#xl3LI3VoZc<NU@3gHoKcTJnw7wzZQ=xno-7H{T$MbmRGQ)i;=8uamO zwiQX~@zYr`zo_XWqYEpv9!Y6_0d07$4tOArKft}y3w&l{1QZ2qi!nX-ByS3ZZWGfW zHewp(R2Blu`?oHi9)pMeB=#DFm&HVormykx>!2dz+#l4&F04kb$;x&`XTE!KSo01M zBHoG?nEWHUQ1j<fy|+Tc^ZJ;w{<E}71~-%lOi_icVqTK{r-NFUy_qU*U9NDz3O^Rd z$V=7Pwd-2<&!hU)PyQ>EXh(bb$FCD9pFB%2k#=9~LrkGPCK~_utJA-u5W*Y7!?mTJ za~^WtT(ikSGIy|9W@#!B$6Jhfj-j3<Oqj1l=Hh1FT+JO_uV%fz^OhQYw=iT?)D@s` z!uZKYR;q(`4FL4D%I@0(Gr?sOFA~T`71PaDEx~p%sJQ>7wUB2yJ@?H4I2w%NTzsQK z7it;xRKgA+g22U$r)>`@AK;?!WXHQ)gAI5&d^tI};n;LTG~iF*6}-KuuV2YW+(*G} zPKu=CtS8C$^cS{lk~@Ko{qF)~QluJm1j-Oe`MnjR&$m>iXMtoFZwWZ{sTq^>;UW<J zCJ7##mnCXB-~Wn3Mcis((!@GPMlu5t!okfIMen}KK({F0;soQaUR7sp3Fj7&C8cke zFj#J3*-FOft2OTjnrHJ3Up9%dS0&wLs2fTPt2|ItcqTZ|3uf6TgDyy^&0{WmH6*e% z(a$)`nuYL5Zc`5+!Igt}ndFf|Wo<%f{zz$iD}(xVitN8f-8&VP2XMcTCySj7)uyxj z8h9>;eU%(oG1Dq|%$6#D#z~FIR-3eA(r9o+?&*yw4AcisAF^ciHhl1ql-$zuI1q|D zhVls%cJ@kSs4h-72}?_tjq`f5+-XlE7JC2Yn#n)*pLv}T^~`v8B&r-*jP?HYdwY?? z#o}b8HD~QD8IIne@p~sDszg3Ti~iD2G{>>Ojs(z_|AyN*B=INEf#b5Np8wpDs4wd1 zv}i?v!sBBavA~;JG{sj3DKP!w2pab$vEH*dx`_tE%&{9x>zXOLx@}qd*%Ei_a&@{c zDaH{xHCf3l^y609rVn%jr}%>%$q7N4%IRL)BK?SIdnRRxg?=1p*Z9KX$jVvnmg43! z_<Q68$!=S+Ew7Wz=?C$`(bG#etLYK#)L}+DZWjtw)+w5Fv6-J&*sBsDW@&T1i|L9f ziDB`VLzb2bl5?*@Q>n>G`4?!y2X^MuRYm>XWe{+qmcOM^aBJ}(TbhpxmzQ!k4yFrT zeUfn5y$EJK&2#)C#1{2ZE?ZM!&E~dmld_T=11olI=`~@>Jq42dlO;j#WK2Z}Ad9uF zxON$R&{JsZuIUS;u9_=a?c=RwWa&0h*3~eKwnTUvaT{Qf5+_Be;!7)2D5)KTi0Av} z<rK;-O<0xQdeH~vSS6|@D4#veV|(Xy)l`(c`?;yNoV6ZAH1UIlJ@`f2%<&cE#zQDY zLg;@+KO-7$1aF|CGF$5HQHP)J!(Cm(`;`!|g_-CWDeh92DOM52A2(ls%;wGk62$Mg z-V%f4MGB5t2&x3ef2HMx=t)wg9}DV;N|kyWt}9J@AsAMo)B3qw1u&|qyDmQaxsg(% zouE6gub~!#rvkd#EBtZEhlWc;jTzF>#BP>T&%3#CQ^u<DG+#l^Uk*#2(r=slP2c%^ zT`jcpPG^rabMz_(Hr=b3%;`i+GG$d{h?nv~Cltje0cXRv+w!*40#;mQ-gE;^^ewzg zudjHsTkT>p)M6*m8>J!t3{{}`fA=*20d_1Wt*_2c%#4d@0aPU@-9!8Ol|c)~4?8<2 zC(DT(ikj_u3`V_BNDzZ>(Z&-_oQ=g)VTuy6sU_rs$$eb=+X-ud!rmyhc#;fX41GGT z;5c=^DMQ&vS{-MG0De@MWRzmqP2HZX^iCa}uoQ8LDo&8m=8+gpe|x(gtgqv%LOSb! zv!MXdF9JL!<TPIeYD$})5^Y<{_%~)9wn?|hkf-8Sq9^d&FyG|}YGx|59!?tHrrWm! zI!T2`mdclX_>keJR$~ROo9wvBk@L|g`@+3QOi#$!rraxv;7#j>f?_m^oA<G_yGC#P zfqlh_1~)7$1C=Po`iB~4gW5v{*8~DeSlHp`sT3rjk+-zOtkrdcw|aGhPqbd%0HxIy zP#<)Syvx&82j1jj?NGk=7Y0op-E+kN*=2=go1c5mz!`dfWzRa(KY!Hal?sk++8CKE zE?6om7l6NlVF)8zmGl|BDBi*2B2C9I$BrJjY2FP%Q<(gmEs3*p{um;Ti<4?b)xLb_ z`WOTf4Gik-x+p(n);-$&^qitno@1JTias&=vll;K*#Ec_ezsEb|GIX_Gk4O`OzN6^ ztmsGxK$RpjE=KHV!@fi%`1;}T_^#O1#*J8~<8i%xf4{-BpAvrMx>_&oArxDW*z`Jy zpqxB)xx}LieXEh4vp_qEm_SD2`&iWyU5o>l!IF^B=@TAxd{K=qz7p%NG7H6wQRb=9 zqr$(?bQ+0v2FtN*eGj>vOiNs*z7pBD*ONW3v-v&xxK@8-c`tRHQAOtLlWV;j7OBo| z^NatxmhB7{V<Y=WH)8Q3El1=nB4vbscF>ea)O_sHiaA}<0eQ=no*!;XFalacu<pC= z8WCv^d+}x^aPR3<uwFoTNs7CHO;NVPE&M#V?lkCnMA+Cx{Pi!FK?G{NuHd(qXL$#L zfs8@<Yx)W7A?UrXSC8HRfZ*K|7({aPGX#Y}TiPJWE+TGU0J+?hW;p*{#tX-)IQ0#| zB!tL3gzXjNzeKH_fj0?~3OtuHIQ@b38nxl|XMx#zqcOmSvorj74gR-EA~t77f+Tv( z;yfgfnhG6lXlMDVc;W0Z5bE_b)85<>U%eLOvU(}e0cr$xrrIB=3J!&hLyBAUL@(Tt zhwIc+o+(7j2WL;2qla>i0|=g<05>@T|Aw!d|B?DENOCpk^8pHgaQk;GgENE^7b61k zGmukg6W{|SES_0<*f9kQZyD+Koaul^S9eaji%$$;Y`>IIQ<H?|YXmq6@NqF-B3EeN zt3k$<FxcWTwlC>@>mM8QFC)Hsjmw4}h}BCe(c-6OlQH9Lmp6L2NQwUCR*&87or^Y3 zpkUNOFZk^p$2V;2L_`t3pQdw`amyjO+uK$QxrEZhUf8xZRPyag2*-2IXo@vWm1reK zW5T#A3Pvj*@73{tS>RYm@iL3X+wvjOBZ{E-d=;tD^cKRX`NWM?Bqap^0&YNs#p@B3 z*Zv4gmeqOW=$Hsa^^`M>us?r|+||6co!%Q7uN#F)Voti&`QNSj<+PS&E|~W5*Ceup zC|D7itY+7kKWo9&tZDO5I|R%9$smB*{@RFv_X>L0-i<Qe|0DR38UXkNqN+>s5?kZP z*XpGG)z<n;NThv!Q^LlHLxmoeclsuOo`#@2Zd8VQji4=vB}Q2jKLXDJj6m7~?*9kq z9cW+s%<J2SWz3b<egAqG03hx49*nZ7TUYgJh<j{M9!}*d;-4kLun9WaYr!nfWhX>f z+D1lZY`B-XfmaVW*c$`4g#6=_kLtfO3eZ1JVMoJZg1?w0nIq6GyoCBGNk@;FTiM@p z?6nq~frwzmC$RpV%UfvwG}51MhWe!J{)sNam2US+i}ViWG22%W*Ss;6$nV6M?GSjj z(N_>iq+o2AYTte6l@FUF*x-ppKdO={Mh8AAzT9E`+-8n>E&h6W(lE56y>d>nX8~;Z zM0}!mGO0A&oMryKtzcxcDYS0QD9>t9@y%ZA)G|I#WEQoo<+;-ylBBLOqm_S>vuawC zEM9#>cL9N6!XMV{dP`3mp;4iERwv1iVT26T9&zT|QilWnH^0|5LpbLzHXS_AZVW{8 znj%|2rXX_tuB>Tt{5^J|PK-A$Zw}N;U^gT^(?=Aum0a9ivJ0R#T`cv%elv53C0AMk zMrUT<p=YrCC$pUroNXh)&aiMizmPs$#>k(0PuJ5D20CBd-9UV`k5BjQ*Kl)yDoN;+ zle67eXmjB6v~EP&0ZgR!?P>ci(^oeC7v&}WIRFBRys7qbV2{JLn^=zNV7-@MZejGS zzFSgWhe>k?f=37r$JwQSkox$4?eZT_WH@L4v?uZDR3-BziVBK)Yt0noczJZB3|u5~ zbUXrWzc@Mj3pay;p#3vYaZw0tyP<Skx79QIO?=cu*w$jl{<y6Br6U$$VHynwF^}0- zbGN#L4UQ+5si&;BrS6Si>A$*y70YJI)S2lWXHTFG-!iw?(dlQMAk`d$mdjtMhCScY z)*l^$0!W0Ssy8+~q~AMSy12ws74%h<^ZEGuPD)7%V)D?Fc8cK`47Q+$T<9q7)7ZWL zO$;&#rg~ZQ&Q?COVGJ0Q);@}T%SKQV2G5hoz=c2|Q``(G)8Af$yW1keXRp*rt8_Np z#~aX^LbCv%p++0*L-qJ5P%Xd1{|&(Me%_-L?Uu!20OS#9?wxnoE{wiuPQN6JItpnI z@!oK84|?|hz(n>Fc1VPFP`OctC>3w+I_bX0o2u4M)3%BIY|(XeU;@Lrn{CZ=IX60) z*%;_Rfl@krRu(OAQf6+PBEe8kL6*YEviV%2KhhpssQ*`1OL&BI47l*sZZ&Uj7LSZ~ zaVov|uS1Id$J3K5<Pi{E*H6(SM;=4rZ1QLTJ$L<nf3V@r-P+-!S1r_axfRs#1b<#5 zMes=#Zu`v~XM{1C+)#T2X@xaE*EhH^ySU7MSXCWZvm~&ktb4|G4N_8+=oAQ%zof*= zAk%VRU*EIrKl1769dzr<F5ujF;K+EiUFLvZx!+{ZzQVKz&J_=<2XY5qR(Euv{1Q#2 zr6>&u$mu(o?Nelqz5BSqFv`bE>zkvBp5oHFfdeo&H`-=?SF&)`R@LTusjnI)t76E% za9iK`y}iD~j^aHFo{L}s;ZHj8&((F-56Ywb+3)bZuI)8*jg8p9g=-#!bh$kk(wPQ> zKNzlY#6}4dw+ntl$nZS0FH8HnEPAh!qb@v@qKz~UF$dHJ7l7g#KM2xz)~^VB&KOo2 zOtit!ON5-x<^G0a7`UIkVHE69dAQWFniNz61#P5#t{~+NR^bOWU&u_qo59vsu|lU# zTXY+r-g{a{<iEbqPclENf;30D6LfTNU@sVUd<GC4FwQP0IbEIv2=I1PIK@2@o!FPc z(3$=+8|Nw&fbZHhR)4ymvcQIztUoGDiKqWI&eR+yTvVUf&zsc5d;cEc=4Ai$P5OPN zy2)`ELQ0J-+J7F%`|N?F$xk5oIZlFdJSDP~c_*QdP;q<m{zZ4Nz_55Hl<#6^`|f53 z3M$@#ff`0fp-8#x$}5j#?wt-S3T2TWbEF)2Qx+#L_kony=@dyV8wWn>UOUUS{Iia| z<eRn9EAjHGY65tAnjju^_T{g0W77u1XpYV|*M)kB2}Vl1QFLFeNE^VJVykfWtmB8P z<pS`RSW}f4S;AbPCyYi?`K4mQ`rtN)f?%WurQ9s4j~!9$sv7+ArIp+u=9E;henDz# z4rYz_VGq+19nK{G$7C;bb1{~qAUA**o++GMZAPeXk4?4Lbg{Ei++V-&O2u`=4M5qN zIBrb)hB2VygEu}mnRw7gJZwV^1mgeRqLn2_L8Jj5GXLK=*k>Y;1=G>l=TCU0;R$UN zBud!UpSGLDT&e0&jMAbczRDAwcOueXXKefMP*6<S;HaOl+3C|VOynqwpKt%^6(tD# z9&GqomY>4Op0xJhma4|P9k{F>4^K_k^8UG;OH>`Dl9ptkBd2=Ri2GmoWHNi^C=mpQ zo^z-uyK@dAaE8cI)4kB@4fKIBZafyi;Jg_@Dt+8n*Y%J%3vk(Z=b|dycG$U)Aj6mE z06ik2OpQ+Yt=8^|fjGwG18-AppNYWxYxYDYl_{NxlB3F(wc075of+}Lt-LlhT3z{Z z6FGF5JLc+YdyymXE1&N9Ahar^a@$Ol8Y8Cn9<GLDz!xL5L?Ae%@mLudnz_ctqlscp zT;+pk-eEA#+~EYO1|B(4pyz1iY<cM6uNu|EIMC4s5pny3_Fy8g^s}J%AW)u?ctxPC zX>hT}Uo7R<(7z)AFPG1#PgWAi#VZJcECMin)qHNWK#uvyfE51+wq``Pm_-**1b{S9 z-(7hSGCXa1@V!rKKQVpVcE<Eo7^H;dJBx?o!F}xkKjU=ZOF~12kl>Go?39iFA;|o^ zi;*T9!{LoM+35HbaTY+1<QrVP$e#@jxjRn*pdyYy+xzu*?PRy>NBvvFArxa@KGazf zVf%2rRv;OaV~}%<OjEMn_)wcKMShdhy9H;X2R9n!*O4(`obH{)8)I)YCTI^Eo;U9E zI*j^i*F~El+fi0n`yH7lT%MHuu0KgHP-Wngr&w}~CTH%f`RO}^`y-WRF!R8ICV>)$ zNR6m%#exMbBj0Z}b;tc|qlFl`y$xK3Q0gPCLK1*Lyp^01Z5DKCgnu!Z<HeW$(bb0M z^aAq=*bx{x66*lBor2GSN_wrMRhyY=vGTb>Ypd7emcw%4kH|_CgrtXsNEdsUUh|#b z?;sPJ*x2C;<baM!Hy(gc*}^`AJ7-|xYHMb?B_OuDzmdSaKsN7LWKCT1lTQQOfW7&i z=0p5%)lc5x6N}W<OP|R9r7R}UKRgZl_i(X?L@a5;5fParX>n;HwXc4h^}F=;m>omu zi;a(;|Cn%1Ubwz@katB!Obh|A9*ks%Np~_a&OGs*o7LZ>^|O~mDZvCYTJg{w^S_9j zlvwM@sD5V<SYx**whH>v9u_9=ai+0G{P@L`DO0jO6KA7!IcPa<wEX8+sSkYA+l!1g zTkP`}XCHWS^HSzC=B6B21M_3~+f?<)t&K0Bc<awi10)RmrE9~;`9y?{{w$qP9lh^C zFi>!B*8>z(mVR95Gz}B=J)cjQ2T;hU0aSWb6`97)rrhdROl7HK3Xb%tPO!TSgkhgb z^{w^v)vtG6OluQAu<5KSjSxJY$6!WLqMb<j)Ldmrr~AgKI$Cf_B`u24MAjrkwcA_~ zlPKp_KSVRs`tEoEP2EpCK^e#}hyMZ)t^|aJa14i2{+yx^3t6hm_0jJbJaZ50v%8v^ z<+PqY;BGeLn;fAxLQX(QjUqwRlCQp%k`Bvrt7d@A>j-{oSPDyOUPBJYkd(#6iwmoJ z{@xn^uMB#)y<dJne3kalIq;Hc#F2I5YzHE<v(>cS&v#VKQ&+=0tY15`_K!n^eh3XN NvU$RPg#Q1#`Cp?;4buPs literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-09.aac b/packages/ui/src/assets/audio/bip-bop-09.aac new file mode 100644 index 0000000000000000000000000000000000000000..457b3888662d8d4df41b89124820947879cbeb85 GIT binary patch literal 15909 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 XFowsA*gomPM8Drq|GzhXF!=ufVe3`^ literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/bip-bop-10.aac b/packages/ui/src/assets/audio/bip-bop-10.aac new file mode 100644 index 0000000000000000000000000000000000000000..4a55cbf52e68cbdceef8730363333644f1dcd3a3 GIT binary patch literal 5567 zcmeH~<zExvyT(U|j3Hx_?ii^cAmAwJ!GO`DOC+Ra0#edQ3Bo`@q(wlwq)Q0_>F(~3 zR${QD=W~AV&VO*u_3FOwm-ll$&-H!qN7_NgvbY68fW{NAr{cnb!V-eQLc#zAqf9&= ze+Zy*qB(+=Z<)<yvb@k+sP#mfshNE?<@YWtt%EJx>;>-qAwwWN&-%^6u7_vxGHPB) z?Z}Sc-*gJ~>5+Fzj~Z#1++$aT@9H18fYMqOQR9z)AB~wzUSB@U!iA<^t}2>`^!v-D z5*UGqlv6_7<cUZIp8zZJtSMV9cI3&w9(z3xV;kXlN}@2Kod%0v^^eTFcRVeqx5mNp zVTJh8!aw5CSmMqNl&51kv1^gNbz|-MITSnq5x`OkkGC)c)M$8DYP3P9>t`vI>p1jQ zAsSfuEM+RBe4O$Tkk3Z-Sk?G$al({x7%T(=?_q)id&rGWe+&N_p6bj|Hzuo~w&5q% z6DrU-dkH@jJlp!EvGj_d`n2m~4~xoNnpU*L16L=1_rfzo?eK><zARi9&oMK2V?mMP zla~oC4nnNf0PIeF@{~W8Po!WZXPhQyBzkOmQbxwAPhZ}mm1ZuaTVU&ie@m|$#V3G@ zHGW$?y)A40e$sq+u=>Z0`IOs;ZH}e)hAd6o$Re~fToRa-N|}}3m8tX87J+8aHNj%x zuyvcAN=%_^iG%()DxI2Nd^V<Tl)`S|N5S%xqN4q&gKKr&sDrXPd9Dp-=$&`5{Nnm< zVaTDz^2Kqpb?aGo%aoL;%&6pq{1MMTrLL8j3J(*IzeZ#1RbiS#lUK?Gtrv|*!GLX1 zXY<uL<({DT#_l<Egp7nt$L+{|<>`#;In`8=bpW@tdcbOgdwzMc`)j2Js-dE~#=5Gy zs`AC$KFXoSg~asId2xOaHUkj9rRM3#uj@Rw?Hsv@6**~23s#N%1eFMEWRL~NsILtB zuu0NB;`xy__NQbXZ3s=~Gw2PyDk0Gh#Q6gLin!YTJm_EXSEM8Ra7^wG6CJ*HB8+ED z_`gPuYQ?c@IyZj9-^R1vAT)^VSZ064Kn%}Y*&PBO<K1Kp+Y5c_Cs}S<C$I6wlQkEI z_?cQ<pw{MfI(^!e9bWdwE?&%kkp498s%#0sWbskOe19~HmYu;t|4H>9rR#_QFI|pf z&Cp*0a+vmx`r3m<&~TlFz?5KVkC)kS@><n`XDFLi(cq+Nv2@cn)X-LPN5N4d+wm>F zu-E!Y+ENk$USO+@2QKHuDiS9T<ZLBkt3n@})86B1UwzEqwfm|+tx|Kb7@U1F9shPr zzie%_;@wFu*U8H@>IzW7k06GtxQ$*mR)JxOMD9?BJ&XAIt9&2B^B(k~^Ce4()UC9c zuYXLDZd#Y1>LN$v{Rv%!ElQvIeJJ{2t-5all7Qws2s*LS4OUX&O5tP;(4r6LQtCLP zBV-IonEVyFxt9p*4Tc>vhQL8KFHAU?Oxz{tLyYJ}nHOgupR9s?^3b6sLj}2amnVgn zq7b9Q$l5urR!vR}y-4?2rB6$!5wfRkWmh)dd~(M?FYFQz{5GT&a}cR8g01$e;!u(L z-t(>VZktI(x!5>{qFBB8l+d4+SSzi&;xkmqgcFL`Qk`u;RhM3b*+BPv9y@g-t>G0i zG&XS!%b>bSI^UOW5}YGG-{9Gt33)2OB+k%ywE(+;9RpE?JH>KC!lxXJI32R;$ftYp zee0?gU6e&p9MV8~LXNr%3jq?SVqhSYSdD8@t!;R&<Ng49__tnzZq(2C?_KODn{3fU z7&cZki5Hfm%H=gd;e<Su=lujfF`ptNCi>XYlOQ1jTbAQK5BsdbCGNwgi_}R`Q^M%l zU?WHqE$31_n6>C%poLak9K@wRnrV_D+rm&oQ4K(Gd6*TJ&Uq>D<5YUfi{BGfy<g1o zr=q#p@c5g+!9VG>=$5+4L)l^cTYRnpAv**DOtrI)BziAT7h)nUPmc!PB~z3jPoI<E zH2|tjL0k_b7?+jm2b$i)TN~$Xyh+S5cwR%6{Bdaus>&$}O!tEHQ_6OA*2Iq^U1Gm4 zlOn-qrFr^UvQJ5Vu#6Non{t2eS-yJY<fgk)&=CZtxINkd<&&48|LWda+fQe4P@v?$ z?SAn4T6T8l+*iv%a&>X?65qNjdHc!$|8^UPugWrTJHZ9Co*4EWS$e#j4+IdN5H(B! z0MRx?{KOdqw`WJZp3gUFyrfc-<8#F!%dtm>bXLI=6NebX%Ofz?bby1*O%v?4CApLi z2{OXrXr0l(!d95IacI`S`DgbQudf?Wm+%&K@Kk<{#EW@9{&A}I@@*wPk^AN&pSA^S zj=VI-_WBtzW~;AAI16iM#O?(+y?^nz{mD>d=+woXa<9_kYE&*EorR*XZZ0Ta^C7|| z**BOi!aMLS$K~Xm^Jh#2F_ga-vUJ&lHTvV&Vd!q3R0Ec0O{w+f*A-tb{}@*{oy%ow ziGZ|{KA!)3Ow?s@?EYG582mYaU>)e0BM(v12KoD5`wmK;Es_-$AElmc7Piz%|0#1D zIV&^V&}itU3^~rq*R{*{uyygHdYO(;3W@bVe?>{AmJ~VOk6WLrD|skg_q5b{-&L?P zXZSr=*TUC%13j<wHy&}Z@upKrXD$v8ByqI6%}zX|2}#Hp*mH~oZ3idNf>c#GD>Pm& zT}?TGw66d$ehj})&%{C;y9;wr;WUF~>c5+{Dd=oWu+`FWh!*K+jF~LNqizJ}!(1QK zzq<OE-5yQS=m$3LwbyUJW@I>PPfv_ncN%@Jc>b&)hqzmqtV`u?RICV~D;DW~U~qNN zva3HP6EW^PpvO43k~Orowr@R>R-?f#F@Vfo+xMy$gZ0inrAFlC^Eipd7pN$wreckI z=2oi2mN|6^<Fb*r{z`kec&2+uTPG{4;60zcwG{QEKK=)>qGF45sSIRfWXmYRCQW^s zafK{Xl&QS+>-xO9_t9i+d^6r?lY$|0PzFs4c(9*nRix^+szl}@!Z~jB)58t_0l)kY zwUhDEQ39k=T#!gbh%ewV8*g}vOaLB-KlhpZae0JRkvXtvIy0Qu%sAslk0Z^4Vg#VC zF*+3hQqAag$2Kmq=C3p+C@oVRn~l2C4(ewDGP%u8hn4{w>)xHD#VM(&pYC7JSz>OI zFWwUWG|256sQm2HUlp>eKV_-BE1}`o!=-?IXkF`7DvS%fnI_);z=Q%0GP&E?*;(<F zfq4>d)0UAU6z%D+drlOHAK>Wh|NH@fMP(!Z##h}xV-fsKDK=uOH~$@3ewlwGOFRgW z8G&Ox)QVWS8ns8?JUGN(Hy5^=mee>J7XG<;cYeL&__bmD{05)-2mkP6Z#MvVEd7PT zawuwM$tI>Va`(|%{bQyG<87FD8eN3khLU9sS5gMzh~M?Q;=ARZjpsJY#szR4=2GWO zrUpf3|KQJ%2t-UfWf_?%RUyWXC6Db<0!RqnK{5F70$gokmmDdV`wMCf0oHx@upI+) z3qhld(#$GYh%&gQu8bK;c<iFc&Nlpr-K9544yg)`y}x88aK^UXeH+8B5*8mN^!CXL zan^DaMpDT=0VwYR0VVGVXd^5l!y3F~2!&L<G4JOlemC;#>L^@5jZxWmn2#~;9sDB~ zBk)642eTK|m2in<y?dgG?R_7f-K`J`r;s;7aDPvTwTXMk?)DZSzRF=o`D?B(+C4WL z)h&X_;qn|y>E$Ou-7W@0lY5mzdfP8#g{~%KY=;=qX(Er@952_YWISU=q2eg5BVMcd z0$3%4Ab;}d%Ixb#j$_LTRhliS+Z8S9I=+uQr*m#-u^WUO)I*ZwqkQnP`gKZ=-%2er z)|qCj_p4addN?Yu3L;-xhn<L{LR7h@15xKYK~x;gYM_)S2^q_CLQ~^2XWfk$I}$?h zf%~uO^&L~$5&9j*P6o!>F}sr2S42J?hHI~+PCR%b0$z?*N!)JdLJZUIajE8F7s(Jc zOGy-I2=5-{@6bqV$OC9QJi-h@E(_pH8i2Mf6={Zhtn|2Nk|n+tfd?!hEV?tKtJUV9 zKc{`Bj=P^Wn}4-axqA0oKzRI)$?Lfd;+1Ervytjt!5qv;!Pt_a+z&?Yu63kc%hQZu zav_o>?&K`|F%2qCM(+(I$mzRln436^F=Jw?I(LQ?jF{YMG}(C3(*AyQNxZtlm0CXi z)As1XMe%{XP<tqEmb?(~JCKeOR)?Mw-Vt&}OSeO>-Y*>ZfA-5_voUbt_y)b_gr)?n za!>Hjd2+z_FwE8x0(4PCiBWuS>$z+oydn_Y3}ZvJ6=Ufr%xTHziXTbePMDRiEOUP0 zt&)TIiesqSh{&mOdI62{ZnrmYMC`!$n)qgoEW%Eqsyn<DfO2tvS=xmkySwsg%C7=% z7Pc)*CT7Jv4=nH_t*p&*?g6r`o7echH2@LQ+F@eJH>BM1+KbdmGalxv2C3alVU|I! zcv2<{r&D|bW&=NQ)b*_8K*q;l&{;F=o}Jq<dK_0`cF2%L+N8L)tI5VNd%^ttHmzdm zIACbqaTy*2fC3?32OAC*%ojd!*lrQNIUUhsb=+xiVQsAjrTx3;T8sY@<nK4?96$&K zdu5joy@8S6x<vqJ(-6=+-!-%UvAwzAGH981bK_lNy}t62+p=?V@Y4GTw|jn@wBqBj z-6y9SKXm%M#Z~C3Gn7x5s_k`g)$0;Xj`~aMfk*dAK%3&*lKGeL_2G@FbD9^;BsKCJ zpr~~ORtjn5rhfqif5$F0iaa_C%M^-qS8`8rlJo)n;!4g@=Sktnfpl0!_7@}cFdqEm zxkB2&Jc37n$acrv1g!e)5Uv1}M~;qy5^)xRC-})&#|d+&R8aI=L0a04*|W~!q5iTP z%kVeC(JxiGwQurCqkh8@ntUQ^vn#o-I-bBZSVAw?DJZr%;8b#wM%XDN=jbbRVg7RO z>O5$v6#hnRU(|XnYFgmU1FIbn#p69bF%Lz*!Zh6hKb{LtZz|(Fkh1=7%kZm(&~c2I zI^N}|<@cwJw4%%z=a$MAo3k(58;$JPBDlWo=t=%cZ%amLOB@-+rgPZ|{$@t#*s+yy zt788y&n-Ldd<KEB?b0Ax?U$77RtGM&yjeL(d0Wk{(fk+Ykl$uorxjH0#ja*A&>_bf zXu?|BN+F+w?^uvcNf#CMRB}8IH|T1cJAL>|bc&F(angvDkjZoH#R>|QOYRn4?Xx>n zL!X;+1_manzsy>v(ixNG=T}@jyP@JyDK5*owH6jk{G}OD+9>dJq+vc&dE!_0Eg`5h zJu%N8fIsSgIsYX<QW8M&C`ZoDl2R{F<p;j*c`J!HqAdsdt`>(IC0+plZGPw~#24x; zqh^lVhV?swvr|_Fs!Y#M^0KoVJaGqd1Z>pQkpQBgf9}(@#IZAJUHo$&!6n2qhx1hM z-mGs!+2-Z$q*=}B<;fSUoZniKDz9Gz|MOdD2Aq$G^v%Z0WYdXZDOEa&G?(TpB6lrc z8R?h(_uh2uvnd^uc?e3psr_w05pi=i_F(nZ%n1wzWk)L3pvp;C_^nd>G)1>oY)Qy5 zddF)uMwQ;g2|YXAbuiZWf%6>k6|LS9Op=m_5Q#E)GN4=yqWa#vZdaP6QjHntlWe5Q z9VPx~!-+D1j(v2iAQ4N6B(QvOwpTn4-Wvd$Ph*}p#rzpNee!eS5Iz%47M|!b_#H1= z`XKMR%lDJm^^7WNOoUyA&<QDOB0P|NC^KCMhu(b6TYMB3(@t&UozxBrb)>j8Q!kpU z#>2(AGUS`YbQ0&$7jf`<@XVg&qfysj_v2bwfub`PaXdk>$D^NvdW8s;l_Zrt1+8Y$ z{4(h$8_%+j5R6A#z@sm$)1rxDr2SQ^Q-g2%dF>!&;bF9Uy4*Psv#8!RU3+CN4BtbJ z#QBHfqPm76@$*#gx^qka4euo&&7#%zVE@yoQV`98t%L&P6V~X!x=Hmk2&-~9w!2SP zMY~cmJYnp9T(*rTh_k?$S)qG}=HKw`cV9-9pNdb|0~lzj_nXZPYg?K<f4XUvNq&Hl z0tgOCcx~&HaEXf_Fb^>%IqFN4<@<u+@aaVyS~{iXbD=#)k7<O(SN@w$nM3SMF@y41 zQJ2VicY4vAI=j?^Naf1RQTXo%pZq4SB)*-#VKlpYP+e7O(rl_kIFqMrmufm(BN+LB z**|h0DS0+(7|cp<4^+D!2dS36nkPWcZaqwZAOq1CiWj}Xxr>Cy!&dn7&mD1gJG!Oc z*8KlDk`Iq#r&n(&XFX?X<5dp@(h<nj9Bj*`?=HB-PVP6JELJDN5iuab)>JabzY3L) zqO<fJF_A2E)6g$cM@i*+IHU7iMkGEP5bf4`t?#|N)gpZPR(wrs@Yz!}(SmoP0m9CT zC6EL&sAx$-s~Z7Um3xzCU#zc@D~jP~U1BszE67F^5c57KrHDH^rx=~6T{vX)dhIWr z7JGKBQ;Fx?QHTjIqJCOUvTOPEPLcelYFd4)NpWl;Qa~5!h*j6e?o5sAX^%JE)yEne zSCob8hN0I=t!SlLI>Lg<{B2l4u0Y(c`X6^Q@!<W|OME3VjZ+)ILK}7q%^k7-yt&Yk zGJJ2}tCjb?P0et^x68R51zsc->t5w8^kV6~O|56V{Aq<;)w+7sjmaU|%rr<~1s=TQ o)0EH}Cb0GwAI%8a0CRCJ125#_{=<=!|KZ4gQ2GDO|G6Ff7YGEUegFUf literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-06.aac b/packages/ui/src/assets/audio/nope-06.aac new file mode 100644 index 0000000000000000000000000000000000000000..1608618ff111e788d2176625123a87a72a7c9f2c GIT binary patch literal 5976 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-07.aac b/packages/ui/src/assets/audio/nope-07.aac new file mode 100644 index 0000000000000000000000000000000000000000..5ace479880390085c2c48592c43d76e95f16f664 GIT binary patch literal 4957 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 akERc)oUVbcmjC^Y|5@vq{<qfuzu-UG2u!;G literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-08.aac b/packages/ui/src/assets/audio/nope-08.aac new file mode 100644 index 0000000000000000000000000000000000000000..7d3c9d61911a1055844e70fa9fa61f3c3226ed27 GIT binary patch literal 9621 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 S-}MXvAeqMg1N#5Jm;VDZCUso^ literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-09.aac b/packages/ui/src/assets/audio/nope-09.aac new file mode 100644 index 0000000000000000000000000000000000000000..fe6ac68b7d9b83098c51305d1059fc8a24a8fe78 GIT binary patch literal 6120 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-10.aac b/packages/ui/src/assets/audio/nope-10.aac new file mode 100644 index 0000000000000000000000000000000000000000..5576577a72503137a59a4a9462477981b0e37637 GIT binary patch literal 4356 zcmb8yWmFVey9aPmKtQA<9A?O&ln!YL>5y&)1SF(Oh89ptT52ePK_v(22BicXx|A3Y zaOloqVBX`ocinaFxu5R-w4b%t{<MG3|5+P%_%y;G9J@q-r)?KtFCi=-EF~Z;B#ftI zR*1vl4)BQbvBH$(1BD|wVPQD8v(v-<u%&zO8EZkAX>Sz0Mdzt$mBJUw0>14mdA{9S z+JmY63*5xH3EemKig(qY$SXgo1oZTx3kTDExBN_2!5iYKBA?<u0~+FcyIT0(<y|$1 zxm#j{txb`%7Rs$ZZV=U<m&--IuX;hHr0WMMrKbJ!$o(8v_`il4w#b9T*M$6y=O|wa zyFf;<UCy41rAfXod(B*~!e!pU#`W*O6{dG8htHto%`Eao2E+hrX+VE(5tfQ={sc`m z1w9r}KjhxtM-G<C<zG<Ib&`^zUKI~qkS00<@EFkzxZFM>^BCki^w%Kt-PWEV8{U5G z<tKqq;Ixkeo{tmax1QB6BwL_gJ~B6)yP;7jH<?GZ?tX_W53Pes%yF36pm3LvHjwQZ zK_Vuvk1{3z9_)LG!dxkw-Y0=A(`MZ-pz04<S{ltzdESUlSO7gOzgx065to(3n%UZf z)UMQ#Yu;LIjaKUJRdcY=s#uvl0IzmypJcO<l<(Dv{EWpBddG1CRWzNf<=T(dEUZ!4 zImSefdcxTsT)!^uUxBr@oich4x9#mNf9rMfwCih{a^@SdC8gHAzWoL`+~gJ8hG5Sz zzn6xd-uI9^J!gj8Sv4%)BdbVCo=4OzHaukx5i4e>nNilQtOtYBe>gsK+5X_ToY1p( zIG=IkZCF9CJSP*^dP$lgEV*G*QB%^^t&O2rEqYj~N(f?GV_+9p%3RK7cO1!KALrNI z4@%^Dy<ovjARfp$uyR3aBYWdFe0+Z8)PzV5K09at*KP*l;V<L;bLkhjzrXK6uz>rE zqz44crt8*<k0Zf?4j^;{+)zZ{jo<;U-KCD}`|7I2>KphByvq{<os69x6kNsag<hoX zhR`0IkB`$OVdOwSj3($~D4y*_NTWD5<GYgvbiJX%5n*DHvx2sI`N6(7Au92-H3{ws zNt$3oeeS5!tdRRE6t#U>m0mEy_q55_q@Qcr0@Zo!8mtXct0b-dAs1jWU|e8_<~dF9 zRB#A(yBvQ&YtimxM!8p@I?Lj;siXcrC8N;O3juJMrs6^ZW#P_%0Y0sfpd=f)D4Rj= z!loA_N~?wqdyeER_w~d3Po!N15;C_BpwWm?FJhAJ9Ji%gz7_VI8BCwd{dc#cmmcu@ z$_Vh>s5>8r0&k}bel&1Lmz8bo7Q@68>*byL9r04#ezCq<a<F4Z@!saC8aEr-5fQn+ zU>vPPEFo(yQ5o$_N5^kO#QZ`>w9J+8Cv|KqXEltEiGPO^tYr^2T>bzioe`U_28^WX zx!W2jk`WBB`#Fox52}(qYSPGwUR7;Km{M5~!KZHlH`(zD#gfsMX$;~&`VHPtA#!=j zL?BELjt~~^o^Gjpt46C7$D*P>LC^GxHIh(43+(GzOHAxU3#2OfW*%YeF>ih5_Ld@= zO|gz+4F2V@qL9NT(NL`hRQTS~9or(x{`C5157{KBT6cLR><^T&fHKZVJ8uGQDN@!1 zOE|035ZB-~7xB4+Nu-;qE>%6QU!=H%n)Dl))U?8D&YH!?wH|e;Vs2r@96DAiJnw-T zC9D|E1(D|}_2eQT>|~0!BWo%}*RszcQ9-T3vvfKFQigD9mlx^=Jx<F<RxLbn%K=XA zYaG7DZv}d<^yvWE<CjNnl8Nc+whc1n4n~igh_6O6TEASvfd;A(PXsu?8XWzX2E2Ki z=7DpGu;?u2QYd3ASAag_3Wo>&L%Q<sy*~I{0g3dFlEA6~ihMmBVb#V^-u(==)a0kB zD|*?rUUnwvrW&H{Y}j&27Wwr0g-EHAco9vlZYW1&t!9yiN`dMymvisOWsjk?Weu)J zy<7m8rD3gEtZp&cOq!Y;Ps&C*Ttp<FM|EhYO0GQ_qJ}7$oz?G?hPUJgzp(O}f{`Gk zy_svmC--}^UJ#<xR19P`PC|k=dBXBf@T2z6Id&rc(RldXe>%<(gk=lS`z!M=@CcG_ zG{pc)7pGkVZyYL-<xOXb_f{_Kg1PaKCj{IAH~rBOuPj<f6mvrc*k%1Ng5O`MYY zerHhagJxF6{|?(PoQSH4!}IF1lEGLfbgYs@ELx&c#f*^$KNB`vDozW9hoe>Qc#O3} zB4}@cRkq)tIDHUH&M2j6x$p*=<e`geOW|Hl%GVn&6=DpR9Q)6BummNy=1bfdZqBhW z^Vo?+hGXqDcH--%A1->gqH!fN+wa%&b%Mf5Mw?p=fR%6s9q3Dw!?iqW=9moc%OYLi zvHNo}Z5XcB|DMhr=X|Ye?H#E+IqJBu(K?@`rUD5#%8<NgT_4&@Zlt$7DvN4ce=O5- zp3?<AmO3&bf&r%0{kKxA7KLn8a8xwi$>$4K@qz4NFAjGGlKV1o^uwX}3IyUC``p*z zAjdqttTQKKEN+>%>h!|&-p1_7S@4yb@X@HcCTo`R5r~qev5Sq_vC@M!Se^bo8z7x? zB5$r7og%sfNfTxeOBlQK1~3Pg2sVqoL2rE&NV@b8OnFvAlREe=Xch{Kk7BJzk#wUd zuQznyYY$e#e}^*BRDRErD7g{N^+bt`ugLRNdYC1PYu*@S;>Tv+$FEEj0Sh`8K%1(% z$`xtY&nu^KHKR>SD-wJ1J1Vb#8TQI#-M2mzL=sY0ajfd4J<+DojEGN!47U^oq~G&S zcz9i!6@P|!ZK+E-Z4ObCR^IY?W)Lau5`P30mGN|C^~`D;_>?unzNb_47-)4GICuuB z%TZ3mF%KuW#(3X{#_vXJMTYkKnKNG&7z{TLEj0t;2kyR7RiNrS+zwA>8h{NYHCg0# z7|)b%J^lyEKU=RqE{zJYYyh4AavAv*zf1ptSRmVL6ru{UeL8vo+iq_jsW3K4SkP|Q zEaUT*>m3^C=B?QZm{)+Ok%rnIMPKNcTeZ2}l3E2MoTn*D9*C>LPZ#J>l+1*(CFwfp zwnM{M&hBwvt1*uaOn^TH>V&>K-+@t6DLeAzX&yVfCz=O;%Sx~I7zi7M^5NAB++Z7S zlP`%td)xST=}Q1pW-YmCvS@{Lyuc-Ys!cbqP?dC2?T=ekt1|JS<j)&H@)O=}iLeWt z^ZuUDAmnRKx5}p-NbaOiC{s<iWZanDuX3VVl4-!wF&{~LIQJQ1#Z8a3n)>l=)o)W% z&^6i_9TJ}5?%%orNIF)ZX7K2PzAo+^(O<ljO*Ono<5GBc1{{%Vl-}=g9&9ERH5$x< zJTz|hVG8Uz&k_s|P=#)XjbTnZfh(u`woUjy@7~0uUhf9T4EFaG9M*f(X{m3xuVU`> zWxGGp5e>^ez7F5;PnJHe4Ey1Tz_6hBcU92$7PxxIVn4cn3QM@ak*&+9fPlXQ1Ge;H z`Y!K89@z|b-!+nFn8lBVGMAHUG!@pYzs>lDjC~SiH+_!+74-FRk%iSRdzM1yj&*Lk zl{3Huk&*lQXiMa!*hE&v@b-AdXSl;M{82x~I0(e?qiDb4j!z!**;P1s2_&La$niub zu$`0Zk#Ri)NbbQEuhKkGK-7I7_+_xOv#im%s34km{)T4KvXLX@+f(KP|93MKpVn=h zeA1ht9dZ(B*`gl9l!Wu=#!N2jBWhs5H!VBX2cBC@b%~3}%mzuekHgFgvI$;Owc3q; zJsQZR41n_XRp!zev2|MKA!4OI@B2T_=Kf`L`S0vh_}@k&3)uWG&oUs_IM4CQ?X25x z$^s}_GfcD6sxj9@<xPDDkIB372lYRvJ=oJmP(;k`YR*V$6qEEEwP}&pZ3wBP+;%d- zP)RH(kl+gKL%AiAIeSMu29C6qoB0Y67jGI5t(1yc-jhji<_#@?#&=loXFKMEzL6k@ zpRY!Ylzix%J{1UQycp)$7MSr>KLWB2x$lOSY6s4%-M>~Fj{}H!#YV417k2J0f;xZ8 z+aE*sw+po~*^8ecDousbnBmm~wO^k%7tRK%FK!`!U*{}Hur^YuhVsoa+^w@68@RN2 z_G1xvnfzS;<*+_J4I$?R(doCvwk66?$UKJG@)rF;MmPVfdeg_P#IUkBZT;`_3!s3( zwWBWey1uu^4|r!~pLD)ITnno#W%tf(c<EQQUw0TXOy{xEKA*XHO<R91De2drIxD9D z4SG4U4%@i@@r|^xU_C~sL}0tQ<H_^n2R+7jyXP%XqR16D#=;3zl+SMKmous^<B7J) zB{|%_z=(kv5n`Z{rY&$5jAlM_ta!#NWJAWS5Ik|6NvOU_*$UjxoEDd{5tgu?m7-t4 zyjmu=mdF4v<niC~K0VK@$5<$eD9!~gG2~c^1-Dce+3&gPT!q(bY!G%NO*2IFBc`?l z$H<tc<%@oG@>=@YKpp#!{gOLOlE)q<2D!kdK01I%+3cVkMg~Q60+Wx;-S?HvO}<y{ zxV#$+JpI7f&7Gp-8X+3=YHfb7;k7GPZjXp=cs0kEc2n=<VZ|h?(_A~D_}gMF-Br=V z{#>_*isdbRx5g>5Ol7{JX_G6-KK)H|7X8yW{QSC0wXWKVkGb^UFz@_<sgJ_4J^1gT z9(JSY{Cd`}rJ8^AXZwh0RXs|3iWh8PZwAW`*N-UV#TCj#)eh2d(X=YQDz3L<taTUi z#R>1+9Ao5<cYPe09<`*I+tTzqC@71WB1gt<_=bVA{`#<4x3FjVUw9L60$fiC!tbGm zz6{Gw$~M^t!=Uv88BB9T02)@Xt~?Q_&eybbuL51-320O8&0J+Z6a7Y7td`Pqr1C~4 zAt}ntPK$v{ABlS!epo5kw?}c@WX8e!m`3XXM5}Hwza(%1f{cvFo!kUHzuNb~_^are zB>Ghp_84H2tP}G=yYOu!JgYs#+K?;vQNcyEbZUhGwh2W_)Fej(@#yHBUlpZvd#JFz z;G}^Z>2y!oS$5aCJ_lGx3^2YEVVy=5Fr8h!moE7&yI*sB^8Mk^%9W{H=!pBQY>&3h z!@Jc(B^_w~$;GKMASG)B{elAb4pZir-D@-e1R>t!_K#sS7^B1ne0l4qV>l;OHTPpu zTw9g>XOvUt)^?KC=G+noTy)BXZuy(hSt6r@x?JfAhOFauB-x2{fOn7Onfl^ZazTz) zlZ@A?{Hqz)xewn5ts;^8C03#_4gBg+xY*g_G8v*<6SLl_c0r5>lU1^4A<Y*Tuhu2o zsNFf=*T?%uPaCMW0n&(54SdS0sN1&1GZBpnTwRIq(vVEoH<h1_D*b|9UW}!(Y)l89 z>+hP0egS_rQZo-}DFmZQ<fL6G8#Z;a`xFgk->8U+KIB}Ni~4JHWw7x*h|SOdu))*x z$V!#mvY5o9Kcr@mnU@=-k3vjKyW3$e#x#QJB16JJ3DujvR;Gmw&^&~tOJ~lfr~it{ zzehQF_@7T5uKVvZttpS515gB3Kx==#pt^*>L(aGVZKil{_xEpT&lLU9?=f%fI97~B zB}8dE0?7&Og_!I(TIxjcWQLO=%KvjQ0uS%+1jg^evUw5Nz6JbI|EIY7|0w<goq2_p literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-11.aac b/packages/ui/src/assets/audio/nope-11.aac new file mode 100644 index 0000000000000000000000000000000000000000..f00d5ec3f73fb7da8d7216879de97a829e7ad3e9 GIT binary patch literal 13297 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 Z1p<aw!BDTvzr``}1LFTa{GXM<{{xxk;b#B< literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/nope-12.aac b/packages/ui/src/assets/audio/nope-12.aac new file mode 100644 index 0000000000000000000000000000000000000000..fc766c08d68565287ce75bcfaf2077b8b607da6e GIT binary patch literal 14005 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 Drm~N= literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/yup-01.aac b/packages/ui/src/assets/audio/yup-01.aac new file mode 100644 index 0000000000000000000000000000000000000000..61ad4ea83024719282e40a95fdf1c2859680fac1 GIT binary patch literal 12404 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/yup-02.aac b/packages/ui/src/assets/audio/yup-02.aac new file mode 100644 index 0000000000000000000000000000000000000000..885f847e72f4b3b50a770267075cd1be01c8f23f GIT binary patch literal 6287 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 F{14uW88rX^ literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/yup-03.aac b/packages/ui/src/assets/audio/yup-03.aac new file mode 100644 index 0000000000000000000000000000000000000000..49e951abb66152e481dec39086b140f2e3c01cb9 GIT binary patch literal 9187 zcmbt(XH*ki7w!p!-g}48K@n+6Cy1ytDT)+PnkZOlB1%h;F1-p!lcIt&u^>_sI!IL! zkRn|~K$<{+khv55zW00Ay6gVBPiD<bX7-tL_C9+*d!HF-%^Z6bNBm9!Oq}jrIj$(L zs4lOlpa}GAav=y>1xP36RPU!Y*TaPv9xM%cKUzzcwQi4U9lY`Eo%hA@!j&kVp*xCO zO?O|Wd>K<43;9k_`^!H0Qv-XoWAAF(uH2F66RW$@Ea`IEwrSpjPTww_AKUjZ0eeM* ze#1k?QSx+xhYi=5eOy=1@ltRU2?kr59_bDfdzxvuDAqD)zIUac)Hxrd2nFeE<TTA+ z-X21>F{U3bP0m}i!1%QyyJZuPKj`4p$J^y?e*2w2Z(-AvdPX^^g-;>m5OcM}l5rvW z#~<O5Ewfe<<!@5)0FG%*g-x>AW)7v`vNjr4ZtTtijijIJl&KoVLfP;6Oq5r3&Mezs z`GE-~LU>EZ1$VwBdGXnR#IOY#<l400OABVpbkjy!cfY61(XrAg?FnI_WjB(z*cC4s z@!vP}(K^S*diGXl_=_Gi2Nl;Cy@aK@Oz`EYkJ##F8S1Ar!wp~NKI3(A_sm}XnGgK4 zowdg!vx;WighCf^V5;tRPpxsP`q2;S@%J%0<)1Z1%@^uxqO0t7e)0Y4xmavhY5h~> z&$*-hl`FBc!Yk=j=W3kaGLFV>y1v&E)|BEjX-4T@@^5OaEX_13Hsh08qd~S>9vPjv z7w^HTWKr?e=s}x1tA~l5&UnL_4sE<{)s1~07T)n`X1ZwC(dv#Jn)kHaXC0n8O$c<H zXw-TaSQ{GewvC|p^Y#404!JXK6s*+B+Ds?!rm7b6{Iv0HTW9g@mrH5ZL$?{$ooF<` z>3r#>{**;w{j6fhY%K}y$?Qn(oeA+-;YpNzChju2P4#}rL+6p>WtL^VhIJ10$AZEl z%*VrUIZtz9U+SUXTuZP%Ex}8aAIXamiRgQ}`m;_0%@kI*b+e}RerL+dnU?9rW9RLF z-otq_C=2`>?7^X8b;2}3)j6hPNjF1H^%)ucZfbBo%+V9nV=G{drVXV|(8UOd#$@uE zB9%NvlOt%KB$+gJeFOTepIK1}VT_?X2{&#vo>$i@?5}bUHDzS?5IlRTxUrEI6mouM z!Rj$mFxw(oveh6sSiI0gQPW!=f*~5B$f`*l#fo8q#!B(=*@<b08Lb_(vHq(MGqeWP zL0@urp?J&;)DBfZ=xV~s3~rMMt?cfSa*0s;KE`Z9eGOX1>;?Km?j-0731fyk+^`Hy zBCPFkq#<i-i^q1P`jBtZFRuzzJ$PR8l28LJ32c1_Lmk_Q4_yJr)(p~YT7C{n-{Q5? zUmq~aqL7hCvLxagcbHW_i;QoS?s0pY-eN4L6{OgE!6~lx>!~_N@>$8aDo*O)?&`5A zUdi#zT-xBXW~AgdnA>g)qa+T7xFbrQ#Xn8cCS7}oQZ~ZTe;TKQ5+tLL9|KwDeJ*X| zmi5)g(ns`awW?HP`IT0~U$9XuPBt9%Y&mT(rz4i5kjH^I-{^c!9f-^pQ!2PAB-R;8 z{ke9|vtG7urjyalm#yf<klaq6_fNuI9b;?j@cW)_6e@W$OX{-Q2Cbb*Z!P2a-x}KF zT=+JMxU)!S@$d}S$r`$k(d~5THJv7L7N#rCNBs?zGb!f8PAVDo#w_2nh&1MXsHAr? zvNWgLhT6}nBPsE%SWL0Rs5tvmd5&9g*AnGUDXElLFiSEbudAgMTsX>o*-2eoH0R?i z%CMsGFh^<^t%r6Xm#PUa%ERO~o4D#b+Sv!x)UvNk!bfe4)jq3rN>n7o{&cBomCl~{ zm@c4E_>wl8YnA>>;+%hg7jZ=yB@vT$=v{f1G~I`Qx|q06Pvn0K(0-F0EX=rfn6?8y zN0cZ@_}uU1)R8I5wpQh3`+353Z9z$qYk_VquMa<mD=51zq?sAz-EmhT&Ce|>U+mP3 zgt{f^>BSAN6PEPicC@)PU7P3McAo2c6}_C}fB9@zR%<|FaB;RC)NG&^VR>)m0c(_0 zON2&TkSyYHtC;d?)wQ<grHNCQ@iT5WGb*j4qg+-CsHwPb2di4<^oxt#XyM6_TB2jH zJ7oVe=ZyBrOuE_i7OC^nPe&4}v!sZ@RMV15gP)X`n#^|=kX{V$Ex5#vtNVNn?R|Yn zcGgfX^oK&(Eah-LyO!4Jw^f%u^0Aj<IrXF8D0pOT>NJYBJ%}&G7on1~Mrf5MeG<h# zTxK+rVLv^MRsZ3}QD~Z^doNKVAow$_->!C`a6>I|v!Zrm`Oh{qf?4R>$F$?tplN1J z$f1t}Ra7iM9si1u$;;dB5I7cv{a558@Z^9zp9=@%Fw_XKzyYZ>p>WmqoD_*8D2g&L z>LK06V(!KuWHz+5x0#FHT-n2zK_c!V?Ihfnot-TbwBx%4$7ilXZtm7^AL4`gcn4f= z?jp%=zdpS6hg7$_*;Ss~-LF{O&nO-FdhAn3IG09;v<&N_MvVJiMEEjuZ$4Gk-frsV zc&usdhc72*9#tH%k^hmHdcE|QZ6R9FW>P1qxti6KF(_8+!V@0<EV-mBCuulB4ZFpi z+wWH~WFgY$HTxPOvbOu-^mfDhbii`HIvz2_V`oC`-OoEwofbf~jlDr3s@QCwH=}gT zD0v9kIfnqqa7HRLr7Xt=t}Q>zru;mWTSF(LOo+4<8cZ6wEfX~TAw#J`-acABX;Iq5 zN@8??<3);PGf^(*x`N>A{;x9r3<_i4_GAX}AFfwlTYh9<oK<OtX{q+$^HC^d5h#d@ zJt_4^$9l9QrpCs>keIfJVjFIr*1Ei|`1M)C&z^g2()DaIy`Nw3(S=carPyAe1Ps#3 zdO3%_`@a8B$Xze+#p=abwtJGQdr>o-d6L;ylJZ>p-Xf~>$|*6P@5~fP3Jmo5nQv}> z$=*t3&(C{KxEboimBUDHeg&*gD&N%Cr`q%hLDDIzE+BKoOCnI-Gi$8pI<XUX*Ho__ z?c*9X=+1s+8T%q6u$`@YI@|eC5>tuXx0-7_{4tcgfi<!@trchToL^%VHPbJ?F<Gj* zVaR>*wUr^u_lYlJYwYamI=9^f6Xv(xT2gf%F=?g98)UkbWIk!!95l<R@#KidU{}ZH zA3uVG9|7sN^<VcH5UIe7?qUdg_etnYmOaee#3&>}3JeOu3~PJ0S4{NvZ9=GjIVSm( zhU}ZX4n$G^rd8UKhlf?q$E#;uN*cQP*y~xfoNl5y4M|5w`NYb~Z!=;5pAKmXipQ?t z-eYDaHCKL%5V~VXyZoG7RoP{&_rx!pQq8da$l;=SHCwBVfbn!QWb6xV&JwB%R`|*C zM8Q{xuH#<Y-KJ{h5&pZGSAMw2N1jbMZu>>SW0i>xHM+?9f!US9@Tr1_hN$t>>oSG1 z=8U$av#JVC8l0>GAN$jLg^{xAC%um(YltfUGE`xHrG&NA;{%gq4G=h@C<^HqBS`*p zRRj*T%wPmL_w}2Fak4SJBsxqJzPOw7K%Z8A;0Pu4^6zhs5cY9Hean!tJ<b6$(S8my zvyYyE-20fm*Ao5K!Lw~&4@XD$pLp0v987cdIu244i*m$ENV3(~`va3p){O4l4{4OI zaZ##&ShRrLMN5ln+RFYg)Nf6$?&|c;5j<1iME57kMLkU=S997$-TJoF1Y6Sdcx1fQ zq{IiEfe6p99CKL);T6%zsd(D+D@b3#)yE=}$Oor+AB)g23o8ZOJbv<KsdUP>gr_g1 zIqn(>SH}52WFK|wSXm9N{?p;9rcaRKjEL|T)#?1+aaV*Z`7>c4Wr8Dd${s1%=Qkx> z{fX|u^AOgJM|3*{Q3>lJX3|qRgp<#<ANtEj>O~->SrTS{^Pc|wCoS6Oj4w9zy&*Hl z-JETM)8VL8=8AQF!^6vkQF4#jzYQ9S<Gp*5?7EwVbgxW4<C1A~27QZ9_VkV~e`Fi& z9$hN0apA7gYA!d)U=wty@fF)H=%HQzEjbkBI-A%v8>QEr95EGA{+n5M{J}+za@y*W z1hLXh;}^x@S!|*<)NWCmTG!>$RH7@@j#b@>G;$Xd9ah##`qi%_D#$#XYce!9zqBco z)NunBzby3jV^uzm-J^)D^j?k*J+0?-n50G`-&-#q3W=%eQx9+DGOZtRHj>X|o{q1- z7bEVjsi0I!cO^18O8L+$$t(<X^F;%zt(Qi}S7Xj+FPXS$Sl5>fvj>vI<E0Iy^jI&x zF4a@gH7xEe^t(H7#nsiwlZ*QbdiUg2Lx#s~TI^F}m&Lza=IG0Au)qR9l?i)-kzkc7 z!HL(a^YYZJzqD|Pp-+yqXwYa3<|ZzKBZ@AAR^c{cHbBrapZb%$9o~<yEb+jqUE-Y+ ze_a|)RnO&}$+#;oSr>>W1$(@@b>ni+nPqy8xRuGQNS1fM<9S=p@n~-2LLZBZ5Ypyq zp(bNmgjv?iklb%IeB5i<7dIAG^B?*PH^e)fi4_aHK>_X3Kt?Y=FJf=*2aqN<jxBD| z<PtH@iJ0Y`soGDA9c0h_4-SGx2M(G57I^(c0Q!<&!`vK)Ev-11!cI9Qza;FBFV^h& zkd9^cRWB~aWo_;TE${TYOTJc{$UVP8!o@XAaePpE9?tLQbJVN$`b0U@{yu0XTTlO5 zrR%VjOHuH-L|_oA_D7^u3>7q#=~SBiWni=5)%Asei`?9ar#P*RI$|uh70-_tFMd;# zh-tDcW1F<@_!N5TxtK!W{IxB{V=4T8Ik=T4oPMi~<KvxUg{Di!=?&xA4-KwL_^{tX z^M4%r`G#M~r88N$HNUr@?WvJl{v(<EN2wz~>DmjGP3jPhw3Is+kw_U2CA;VBp<buB zku06QR!El29@By)1sl2brm7Tk1*dTLDwFh8d|0^RXY}PCBEJ(wBfp-Iqc9W{xi<al z`oJ5-{6~lDok4eZkIqwoIHi{wRy4{x$BuelYhGl$u|r&oF^HmgO`L5>&5c-(dA&Ur z^`7UJh*PU`dCK!sl%P%Y6J|CaP%|nti<x|NXVgW!&YC|)p(}C;)H#isZqrf5J(Ir? zt&tYb2xJhBe4c+CsnurU;)$2q;?!mYCc8}O^E$xQwzY|BqHA<P9EuTZuT7n1Qq_eL zbPN@V7#3aoe@xabfJXgyy8j+M$mFO9Px|4$gGr~kD_InM<%CUw6&F|7Nhd`clj9s* zq0LTSnq_}7a&JT3rJY0Q>K(gX($2;<E;sr~&thMn-B9&N078~V+$Ht$H=#C*XUSua z4P1wjp1ad(YW2<pvv#WKI@~KIt&6%b`y&lH$9s;nDHJx-FUvbfauq+UrZ%}}*30I6 z3{jNAXvW}1Wv^c}r@8+tu|V*2)HKU!XPrJx&XkOS^G_MBaoW&)WH8=O4ttf4OnT3Y zaOTf6m6c8HG?8n0=U4>SL4L)LBB{K0UEch9)jX|{_CcZ;Ss+|)FPaDITL&EW0#Tf9 zoa$lHange}m7R(iv4+0mnSmzK&>=~PQ_X~@&)^+bW>F#&**r*`5&58)c~r7k*CVe$ z$)Sj4UYBBrkkI-pksrR}2sEL5vIxJ*VZ!BGwocBI4pLN15YIy({CN8Yo{|?)rWQA| zx;H+!Ytr`)`eEg=m^(@=+s6d#>`nCH$xZ)<zeOP{hFlb4$(Kb|4QVFP2tq@N?X|jz zk%@};&>!F!IcoRtsiFEH-L%}dzNIK0yH8KVPkrB6*M2wnRASz$eLa#Z#ULuhzRaVu z*%@`yoi%Jop2cf~zAW_FjErd=ei5&h*|huQNW`q^Xhi2h2f_`n?cJB%2LNCu`-8~@ zOaf*H{y-rl@F2L~<{l?^SZeC|3*U_&Ct=Luud7_rCZ%#EAKJQ^J3cE)b%0~6=H})W z!$CKiK7al~_3%yUBii)5fi1~b^*1*rK0}EpkU){4(AG>VY$5lsQxW+{PmfuLW-UrR zG|5Y!XRD@oUu=VA3}Z)fSSMAlqZ5B;U1<8K)bf6mWIK$+Qs^R3l+emdka1>l!G=5k ze*3Qa08*D-l#Vq-ID~*poc<QZIo|gDE#c?}W<MKi5GrvZi8l%<GO|<dT=L_)6On~z z5aVKSPEwXVC5l$xS&S9KQ|EcXur|G6ZeMPR{Ctprh!2JyPt^NI7Z+XSZD$*<Pae~L zxrnydjh}}HcIg*|C>vW!RKlsVdv|;gT#cgHc-JcdgK^PExWk??@b)QpvVus&es05d zTx@v#*%9OS4MjUEeL==UwJ*<{H#V6OJY%p{;j#s9rm?NgFU1s3TW(3Fzd9n6{_4gJ z#y6TKS8n|fif*g3`=}(h!F63DYMjr`Hd^tTTq{{X?#)G>TUSg+)x*ENyPomm(1NXo zGfZq(wav~C@H0{S96NTR;P8{Ss=H(U@<lY<({Fm`Ia7~acsJ@%TlQ|0zqp``+qM`+ zW~Zn}=$Er9@FuG6bSlm5?TvxX1asO?&w8F$|5VCIpqqfXiBTbOjOmG>XS<+hMml1A z6~53+<Lhh8ghF}W-GqBPBBf<RFO!#-SK{jnrRK-g#!_7q3=#?dzdQvCgmuBcK#3)L znLL^(D$o~9PBk>nC_WY!XPd%%l1x#joE3&s?r||hE&h6`tU3=Z>|u7Sq`Zf46Hqhc z=THwh?5tcW+u0S7aNh4%baXit92`waN%@8;IJT1`QBDCU+p=?cah?hV;B4~PiSJ9^ zTfRHB-XFTsBqc*6&x?yQ`||N2tO1}URi8RU0>HmM2LOSujZ(gDDB!hpw08lKKug23 zr~mcq@7cR!q?d20FL0i7@3>p+NLGScS6fmxJl##w9ss_5fWy5J?1j(N%JU4`03vlx z$sB0=Cdx?}3!kz9K*`Nq!;uTP@es_(jp;Y2V|71v!j%FJ3&3#S4i5k>!Y#=P@N=(X zfq?NqBQIQB%EMz{v=o|XpX5*QUZ9NR!lJ{21Ay!yc~vR69X9}6(0f2xnZS5_`+ZJB z$!p~x3@Nu7N_BSC_TPty=xuUm|HDC8%fVqS(0dTpXU?%w30(=6Svsf5_^2hn@_p%P zP5Ln9sY4~IsSSS6o-)+7eN=O%eFk3I>U`hr>mw8_6CqQrN2#<5FjVrsHU=je%e^Q{ zJMWdPRZ{xxHbA`jrr{wY=&Fka7u%xwWi1?L8;n=b>MbTFrq`sT4mWbJFJdXY+l{-= zU;$5%J^_Fss`4%Z;Kw#>qZAR~CvI`Z$45szzGG=0HLR{WXXs@boBZ@lD_IT7*d48q zb0_Xnmtsp`D{iUFn9Bpo!^`0|fPY)I@yS^L6!K`AbSJ6t>%-&*^c&J=@^1ca!ZJHL zEJ7}n3aYwts{qc{Sb(H?%nVOBg9bn_WY4n8MRqW-SZRJ&M=|vjUN5(%g{2$;0<)0- zG$OI$6OIur8LO!m1U^n^WA-zk8UM%GYcp#k+$2Cdl6(3e4l1a_n19@wM-Rmte<c{T zWOSI5Y~_w6DNWk2fWU^=hgGvN`+Y;u;c=f{2TVK(w>P)<ejnFT5mZsPboOz^&X1f2 z^W-fs`L&;amZ_62=*xEvxX%BE^uZChcQl7E@;Vl0GqN_`f4exe;X74fUte$($P9_) zgBO6BXBIB(Xoi&D+<sF@Im<wlVZ<f?0UU_T|0rk3S6Mz8@o<q<!fSP52umJ4?Hc;W zA<9$`M=N+X?<pQIdChXqt>FRZj!h*{G{-i7Y{ddzz`V*z9gK-EAUB~C*F2GT=MO@c zZYl&bypN<>M3hzXu7Yt<`wU107C46oRL`%rPt-=SBnrM7*HYu+yWwTI6twCHfE)nI z*t_hA@b6RfguTFPR_+?mUTy`+`om&Y10=GK*#?xmSok6T;4fnwK5*bDGGp-Qu_E;- zQP_knHFoA!aoB;44l~9zU8#(;o>{qIYv&1Vq5F0{lQy1|<8T`|?YWhacfGYk!x~){ ziVM#&uah^m#LE_KlNi`kw?<AgvIqGDUm4^D;t94?i9)f8R0%dxzn(qGKdUm9bp6?) z6^MA)#oP}7LrP01K$u!caxNnQ6L9d?bqn@K^zI3lwzOSZW)kM{r2Co5Ur0ox5zu}I zF|U@p*}?%z@q<{H1{obchR-|W!S|CCaAh%Iczpu_0HYkDg#jzUBA)=Lv4E*P^tn^V zM&n4r5I9;$4fW|dQ~M)qgLQB3tvLdaR|gO^8fuZ3mMKT#J#xecqYCx>CgW(r=Y1-% zfWHoa<Jh}wKp&+@OMCk_YeoC_lB#zz&=My1&y3`}>SYXO7O=od{|g7NhYzgVmwUj+ z=TLM!E>5(i2lU{4;JEZ*twa+21*>bj(4Gj6v==Z@9alpjK~rnQn?bnjiDS#ZRu65P zv;PN{2LFN4HE!vf9~1$lvM7a>WQXLSp&$^KzFAXL9R7H9ptra8PH!(a2SAM^AIe1m zssO|!ps5)M3S9@(!wf4Plqh*b7pc~(ydrkY=Yw#^H_qsd7PW2ki@Y;oSXhMvVhEu4 zgPmETdI8h08GE!C_F^6o9eXYM2vAzO4mQEuK!GQ|=VH^`$CH&-xH8qR&a%%5%3}l| zq1AJAlmQe3yb0B=I|+dWpwJvp$bZlHxk-4YMeutyfe*4|;O&l=^0*aRs0*ko;K=%f z0zT{@!hV})gCKjs_Q@i&6a?)pZv=hUn4j5$;D`Jh2jqJ|3*CRSofs{x9`(uL;dkO( zQLWAvHZJ!#ghHEEw!6D~197Cs1gPe+Z$<V4XaRb+SvRysk{$9Rp@qY?D8J+X!SCQo z#af{?x;nr(q#y4XakSu`U_T)35&bv1G;ykOa&pED3<!?|K(!8^yZq9n=lX<Zhq=?g zY~29R?EexxuBWjIbXV{j;s$_L?QJ@o(&Bt6N4>Zy%;Lnxq)k!|boh;#(*2rXkLAyU zGZp`~bdD1zK<KT>07eg1<7bYH0J!0q%^46_Eu8v61AB+Zw}KRP8D=Sn+g%0<l=qpi zHbN2GUz4z4xM$rQTz>%38d>qgM(dMM>n?kt_%@P3jzBmY_DvqF3Kr0$gIQ4ot!}fs zKW;)<S$zxIb(kT|`FwBinTMW}@c*{#-&a*K2ec4!;JEBCEl}y(vZl!jg`a_!F9)X8 z%fZo?baz7WU!Wnsn!5Qo^e$#OS&B5VP)^)0&}LS)<mE>>UU4KFw<9=;Qb^0k_CgEb z$SN1}FYA8Ev<^U3Y03SC1x%ORi`Xu?^sb}gX%}wY0h^jEmGF>-W>Y-?la5cI0Sy*N zFs)K22u$*0o|?z(5Po{@<?(E-TNR9T9gJKs{>?O_1Xm=l!J)?Z-k`KozS+D0XuMk6 zZiIa+g=S9oGpF<zSx1WauXC9iDS)ewvS>?|eu&cA?XZFzbJrgqFFY8XB><$eeuCnU z?NAAJ;mW+=N&U)eZ$*s)T}}d+l>m4_!$vlRz}}aksSCCl=(SzU?uxZ))>=DcwvQ!u z@DKiytE32=w>q!~Ry5}gWj_5XuiHvmD6G|4(dH7_LG^Y^dp0nT>l!4l6?nh298G}w zhH~7s10O7xYkN;#eDGCkqYvKHpDDZa`~-ZfcD_LW)3F6CV$Yp_bA^3#v9-cJ0e8FX zXbE8K7=H&_)jo(7AZjlqS<3YTM%@XZ%Z>ESbB~J6J9@lJrMLWGgje^g=n*J$3OqpY zh@jxyTrml#pO%?Sz;|U>kT#aN9%Q*&(ub=q*Y-;SK1A_+f(y04iMtdh<_NGgKs21m z4u{NJsyq%}7ylZ!#nFS$<A0H@U@QjHhc29s5Chbrl(B&;CEXLM&=y8yeWrcr(Z?Am zo`{E={|^U?WpT2%b&vyDmxh%$lri#^=q)2nIQKYLzBtJ5pI<7~KwA*{l8?`fuh}M) ztNCMpF}~u-P<urd*Wb(o@3mFFT*m|2mKYAp@3%^SF#?XWDic4*w{P4(tJ<8lQmY1( zCynudVoC)dSa5GCR^iHX9;M4o*-zE1hO}Cv>kC1^B`A!Een9b)NgG=ioV$ey!_IG` z041`K=4mwSMc7p;tS(vTc5}i^SM{z+9tC~|&xmLP3Bc@^49uADy<s2bn$q*a0}qtz zXL6I-u_x~g{#Ye90`yo<L?j%GsEC1u3mKQ7Jxp%7#)q}q=etmc-+{zGy91gNMU$-q zFc1M5Ug^Z&66P^%a*vH89JWsSEV=rzeKHSK>|)~7YKa5IBpgPm9;dxS#5m~ORG<Cp zKkz;ffZh`q4JAL84D<>D<oE}U&O76D?CcyH2?+_g4am^YC259T+^>XyX4pX0b4h0b zB6I~`S&W`#KH_-X=j;jVSS)#92rL6bBsIG08PhKO@5$p5Jba++!S};S7lxkema*cY ze!%?4INl?HX_y0nnT6&&qgZq}*|bDGIwMnfdGqjONrWSlW8?F@lhdq(uNe)PUFbPs zCK}gcl)JbM3jUgkEJnuPWxQnWfgwa7f<86Mo4utqVc7B>k5Fi<6DwB#I0r4V*@?B` z+XOTKx$nQ--QC#t++NwL*oAoJ=Ue*RaXO06_;677aRAiJo;&8{=i~F6U{#L<9y;v> zfU!nXQ_CAUnR{0ky0l(*+DvxPZ5lJs=f0QYS+4Kr`Y{A6$s=D5&wdS+KUl$9PoP}w zekswPI4a(B{{c@K9C|PefT|b1f1U~~sbD|BZ#&-o<TZjXQ+BuH(UR{oC0*s^-7+mQ z-+tMIr542k@EI;niriQwe=D=3Xs*f&Fp1swmB}N^BFq_eryeJqoCc8rx*`J0+0ee( z7BuQmQGp&334(60Nav|Et3o^Bc(U~WaPV?o%mKDlB!WymOuB{INyvv5sPy9;0-;n+ z=GaTRn)I*Xb>O})RKDnIkLK!|C;Duaks7K2l_%w-2!%@If`#0vG8MKXeFC)SRM8$+ z?LyrS@jHe;&cQ|9+J3TUV70t5rvF@<ntM2%-c=!>)h}f7424=TX~OvCl{bvUS#du7 zcdxF7{5Tvbf^>8?xnX`|M|G2M#>w@1VP)#ig0IuGR9FCldY`j!irtm-<HzvJYyC7~ zsoK;fE8@0sovlTj(ZYhBIcDwp>nYfR*7`uOBBc8x(tvt>=3xB-j!}evSKx`HoJJ5X zWMtsbi@1GXyANxGatwNs{FMLVulKM)L{Yv-z(P`B(%lk@eMG4+tlPw+Qh(mwb#3h@ z>uc609674@@^apkFYWu5bO+<ZzI+JbwtjBM>YBzi+;b_W<wwgTe!64Y&Gdd7!y_w| zw_fKJHNJ4gqI&9ygSPD=Tq7D^lFF?qi~TI9<<5oH^XahOpm~IMMyZDN9JL(EAO`$r yKnEX#$e&VJ|NANB|N9RTO%&zo0N@zwOS+DlBKVia=M>JVmoJU_n~MJF;r{@KAeOHH literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/yup-04.aac b/packages/ui/src/assets/audio/yup-04.aac new file mode 100644 index 0000000000000000000000000000000000000000..545067ecdaf1d2e84b8f88ba04b9ebc63e9afb33 GIT binary patch literal 14164 zcmb7~Q+Q_E)~#dPsn|{`w!YZ5Rk3YXY}>YN+jdg1lZtg}t-b&A@4cRLbLQ2Y7vo}% z=k2Yx-p2U4mG{%xdEW*Bk~VNLVq>Id<fLc(&Iklh&-wcLx&Z<Uen(m)4^|m+^eAaE zHbu9qQdun1DvWN*R71qyHg7~BMFOPWe+psnW1L+?677qP?~*g2VoPLp^9KM0jR}(o z5+168HTKIWjIH#dw&43vK{N)44B_!fhm)_89!yfuqi2FZn?n#>V%v8N8&7Y-8v`Q+ z!x)qHjf9-<NRb11UnyckEkS8F0}2D+sepm}ehQ2eJ_nI45LukUDnkJ<c^~wMk+?@i z;sMI_C<b#-(<kIjsNdW4P6^y5NC)F>0%T#s3cY^>1}1z9>n7r4hMtU-`8A@+Oq>8b zmidfLTUiQ#F^8!1_n*o%NPqyq#iLOpRY(V&G!gUm+&b=xQw`$wLo-Ah|3>vfu~muY z30vt=l_n$yPT&fw!oucA&H9uEe%ED)7+sqkM5~7)0s``z7L+DTMEc%iex3|~%X>l$ zb-Lo$djC59iaGx(8QFc~-~5VMauB6F9Q?%r;q`j_o8Np26;v2`kIU7|wDnCd;*rm2 zgg$%g6&;nD18;c2ym2t79UUD<rf`6Kt#?Qe?eXzO8EJ1}gboHB9UTnVuX)Yp`!L(x zTUY1ra%%jJy{m&-Sv}Y2*FQ^&NyW{VE^j9k;l2aT&d!cU*A20ZWUJjy4`u?*-CnRl zFK-9IPH*1Yj%6!5q7RV6!N|3viV9m#q+XsJ7bdb9n>U;t=T}{^g0Q*Tn+FHrkm;-c zJRaI`Vr5H9hgS!q>(*>Za1hx$wp&-Xg9AXwA<er$Fo=j+s|J(yF5BZ2lZf<QLcmuK zq>y`$=Cst+G#N|06(k%L!4}m;lB+=6JTJbVvq1m(0EoOQQ-4a2lMg2tjuo!BIqP8G zVb79+F@a(ONBa3cg|5tv`3a9Inou#pKE2tzkNXi4#S)351%V-o`~1$9gJw)jlavnZ z9ayzzs6~PrMJj{>fIzNOM}PgH-LmJMNY<*u{|oY+;6{Vm7(A{^-?m-f_K5vA=FU0A zkbP8iSGnUz({07+@yzS9eKiHH{m2MD|L3o48#x<>8Exz99ykyn+?FxtL}jum8rwi@ zqcxR1sx8{Jg38h_vQPeW?KVfjHqzAg;D%(C{3v&~O@Q@*q*_$Yv+CvcqiE;?w`S!W zTWfn(KL2UtTR}PThiW^-#~VHjf4KwO(1?<?t^nb@uiK_F?3?M0H$%Onn!L0w3PY;# zuF2+e$wf?r8)itW*t=;bw;rhp_x@8!`*H6#cW|{|%{L`gmV~#i9)~?(Eu0LKOjr32 zB{FCB-G{u?d6k>(zS)!Gx-rvl#kxZ$6aGBe)%hMgy<x7&5Ak87q-yC^Rf1^5y@S84 zu_7R3Wla3XLlR8oVn__w&Lr^ZED7+Za}H4bg&;J*SBXOs+}e)GdkHOa-U-7Bv9vLQ zQ?FYUoFoK-WZj=H3;}%n<48?j!LZ4%Hlx36b|@reiin#vXg7(`w3NUyao3Q(2c-^% zJ1{eRbOt#mBm%Ioh4=D96}Sy4WXCw{L-{1Y(UOBnNg^{L;{)>16=fm_Q%Q#qN=mpy zi2UP4X_?eaQSy|iCn@L(X~ifI3UlY#a*@7COjH9%nUr!TQ`_nDNEV1Q=`8(;P^idy zQ;y<8QP3k4W(i%_;>J>q?WM>>gpH(0QIVM(+rt*oBZ7z}fAeHsLJo^V2y(KH=^<kk zbnGvRkRTP7EfJGVFI>zmic*LH^I;f=rBa5)Z}<>~i^^(uN(avPNw_EnpXjxsqJzkj z-ZYQa1!bXfx96r1#beW-pmNrikp+I}<U2ZNq`$XJ+V|7R*SJz9vTBSMx~<JbpQdHa z_Mr^clLd$WShUgq#uGW31c$B4$U#U*8e0s4LM(ks#%uheymlm^c%Gq90vp8&8!22f zU8EHSi8_HN0Eq~tc;0joNg1F<f*b)Bc#1lfLA^7bFh;L8fD#FCF_*2E*kQz(qZRLg z5(7^p!y_#nA%kjTQ5JMRn`3dG)ieE^5p^9pj_bHfFla_K41HOJ@^}XGc;)qWd!32V zL%Td(%)GtyvKZjuSV4^j{z7qY<81}q@xcNEJ|_8E^ZU=Dwfn2MB>xnbm)xJu@eBmQ z^hu3N1ZCh|e9!xZ>+O@~crduax_G}8w4;#_-nQ7yurq_Y3-=w4HDm*|m6;5MvT}o! zJ<nUIzUkpow}^WvnUR~dYjFwM(`63N9OlR#AAgm^7c_t)k;9S4SM!<JK+W%BGg~sV zGl>CkGFq6aCEp|45+cCaU!NE0BGq@6v*-fHzVXHIS%XmPJOu<pyO`beVWL*atUy|r zNrIB%UnU{n07)_K*~DuLN`n#>h4hj&fE6)cA5pAy?DmZ-9I;MZdnvA`Vx%yOejf3- zF-cgKdUh~?=K=+SVRtl?Kw*L__s!&sZ}bJL+I+4=NBivy`+G9c>p8#7!os9=s|T^E z2`d4yS;2j@=Kbe0T?4#IEY?QW)<sQIN^7{41dq|F$C9X-U9D!3JCWVU2;CL6tNT3$ zoeUi{c~Bn{^7qNX!8296Ck$N&=gqqXo^}yCt~OhbN$Min*1#xp172{cd;t}9qA0l0 zJW&&M2k3!t_rzr;U2(EX;--xJ)cA1u0=YZOJ;z!Vg)jm;RcMKVkiIjm%aYXg)DXE~ zBJm;A#S$}ve9Mfv0A7B<MH7)cuHydwIBC%xr8PcBHEl;KYtc`G?}B_K*pPQSvOEHl z(>Aag@-jxQ3iZETo-3MhXYla(S<-dsFqVZuiUo_Z<xsqUOHC8TxvQk*JUp-~q9+Cb z#f3>US=0MFdd_)O2ezhjo}_i~c2IrKJ`9c9racESH4F4!Zs|wu*`Bo-C;v&*pLdSG zpc49eC&ESi8!9leS8&1LJpAshv$vJ>W7gy07SFTJ@~fI|M$da{y)=gE2M<sn1dHvy zNv!YB7T7Etu`H`a3SW(l=t^iMg8ITQj$w8830&fp-J12zBNK!1XL4uUkl{zTejDl{ zZ?dwuF$r>!+>=X}($trV<qGxg>Wv|RIk#W|Hci3LGbGj?ZzvwsF*FRPinv3jsC7jS zeb(qwNFS~(CjsoL1nY{jd<a_+@!0HhPQN2Ye+9!1<oh=HnoDmvI?rLDn#6GsYMWGe zSZaMBQ`(W}$h>C3LeExBb}$8mAQVl!8Sj8wR5W*`H<xoUh5?L=BP%sW%^=bGzA3+o zwP_Ud8D_YT-RKAx_B$zPm%BgRrY~zFL91{0kfil%l{>J=3Nvt6yM4?RzK8+G*gO<Z zO1JW;^Mjt!3JVYhAYj;K9&nBnShVo5%DN_P5V`^tz*@4kzOXXNqbohc9Li?Fa&1%| zYR6-Na~*3&mQD!)acJ}k$L6L!a@K~@HaM$nsUaDcV2Ddd_2BqoHjz84%F<m_pL2v- zn2NEjv@PcsnHg5#P`4&uTUPmjDEfluTn?!ylcb;5bZtNshKukTRW*^k*vD90lvkRb z+;U^5bK%oq4+%<9%!Z$+XojHH!|0%^$g^nVQ%`gfzVk!Yw0Lws9JNik-&SqE)=+m; zTu1%`4}`z)kR$km$G<h_d$4ytKs*55ZL$aRn1I0c_eXV+-I5qs#gL?$;&s*23hE6> z*;oyCK@W|f84g00x$6->=9E$?bY@Dj*3?pN*FsoAj(S!lBg9%hC}u-nR<E2OkN*#( z8n2&P(DXG`P+%+i^BRsE{PZ$N5>sJD2^}w*;x29@XG{j80BaaMsgk?5cru01)KwYD zDp)20qKKON9=I{QNI^#LAG**WKb0uR_K>@l9jt<Ti{W|*ML1*q#s%pK6H%$G?Nx!> zhg<{CK1LEoWhjkYUIc+-IOK5r{D6PNX0|5V-N>V=AJiOt;-<z*8<dJlPd50wkoD}v zyYXW_dj$bN+0`F+Ubrxa-i7dC!4X^`BW~V0x%*v_SsF7yxd;Qq&eLYu^<7Nu43p%x z?#XEq`ZjNO`rbE#>KG5W{qK?d_UygwT|nFmza(l|#8|$ca@F{L_Jj?x^B46NPb9n( zEPjTl&+_(c{@!+5R!=aU#qU|UM?m?QCa7BJfV|{_AW1Z<UWbTvbpEKmNKgf<zle?8 z$hUH6jp0$^Qx5!v%N73F#dL>Vv?)C(1IHLzoIHoJFjD)-kpyi9Nnh>0Ob=OyJYctA z1qbGIyD>t4u$p@BKnEpL8Q|t?^UOqkIU_HAb|~GtOy!E^=IIpXBL?!Q%V{FLHeIR@ z(YGn$6Tt1|aebO5Q&l*ct>Z$<yeq2!nJb5=tBDIU+5U({#PLS*=Aw(1N&m7N2~)<^ zy)_^W(IKZNGe*FF`oZiQ(LfOC2K1LMQQxNdFii9D?VP^pNbZ$KL#z4yH+R6je{m<1 z^S|8j1pC6FMEVn@YWp};J1#eb-FwMes(DsdYPo7n*OXOP#Hfwn_b!%70zRu{r86bG zVlQ>n8?L!TM<9l_IUAbo8DvRE!LaHX3l0@^%1PQF8<fR~=`=VB1=6}G&{9`yLGlph zE3*{7O{VathMOammDc4OGh5KbK5uQ23FQBf&Ssf}x$c}Q(|%D`2~?c)9F|oQPKhve zUxo3p@I}}6Q9SoC^H*dupd-3!v5fp3$7|}m7Mi+cL+yTqX$Td%yCs^NmQj+m1l<9B z<b(|+S@D={t~nkso_D#4rh2h2mZ2ohZHA&odwjKu#HA^p^5GRw)4R_bSmlEjiUq*s z!qUEdpbqsBF;;8Bg2wx`AFTm)ueZ=RqxJYGP3NMcgmbd`%4ugG4fV!x6HMn-R3cPu zn@-;UhH&|FNX&j}dtl-=noB9QFtY&ZRgi?7vVXA%#uYZ=x+kg=%jr-p(LLp1qpI^{ zza$O1fL~MiogSsy*?oxGdMtDUl+d9SnP8wf?KkN6&E)|li)R@5K;&F3QF-Mm>_kj( zL&O+OQ$Cevte1R6stQg2m6w-7lpu|f{G@R)pJ-pM^A$iqCptsS#K!b+EnY4_V6kLM zJwpnwH-ohjifx_{1XSTbiQa^?xFl@;JgExBeF1VU+uT29bhORvO`qMurdC~kyKGW^ zRt(Epx9*a44x~C#^CzX=P-AXxBfhqH>S@Kwq?=~pMp3IEO<2cu+Ix=Wd|7?h5)jnw zvkyH#ryA$E#^6gg1#3muiYi_0f3pU(`xk4%f3YU>FJDCq0Pc~`6BmU2UDaB{+5LLn z#?ZrbMt1L-B7HxDYhib=qIuwtSwkJ|b|R~}r};h;rt;OZTzo>I$p)Mq(*!+sw(6V> zsizdrqJw*cw>57ZFyY2Wb~a;k;p1k7At&5e70lI~5j35D5LgwM04Wr-NSyQq0+3dM zgoIid%B70swXW^dFip2MX*JIZqr)_D_(c-^El;+zup3p-Bx<uok_MW<t~pu#m<Ki0 zevJZzBe*vsI?ANla7CLA#(k)uEZr7)e?wubDgKck<tTLs!-tgP3DS`>)nCJEColyV zLG(Mu>CdMvWAX)-s8y=OA}eSwIm&G@AGXALGD))Ig|bS3;%IlPH`fGnnW(dCT>mt% zSpuECPo8v|xDobLPZFPDYDHEloKv(Ym$D%UXYyrrkef)l?7j6eV%R{fh%k>rZz?@d z`YBZ(NIFs_VDZi$PMNcdkc2K-F{#{svJU!|AxuKxnRM~a4%c1-I!JB*W)7{wGVEJI zc!ds^4ptXjp6Gdl#hDgmL>C4x^_j~1;u(*|T(#k;F@`Gm*k(~repC9VG&{cPK#B$X zbqDqW|B_M;ZQ+%|;D#Z(k)w#p#z3XEVv!yJeSPK}t>TpkjZ&@)<`6fb;zrhR-n2vQ zVRGB8ex)A}vLO=G+x`cQ4b8M|cl(vp^<;aP*Vf@b1nKWSDDC@)5%_=EBy2EH?|gxi z@5*p6{h#+Vw=egckGJRy-K-8x>E%o0P6?X!Tn|rgU%CEgtr#tYK%U-UtFFsoyQJo= zMIfp7mfoUq5SOCT9{q4VAY;$O>Ya~x9{?tQ^DrHWtXbmkr4q*%cqB&{L#0>MKauRj z;c?Xc(=^~`8pQE}f{29ztFj?%xeI@pc?>2^%CzU{a7U7>9BwBSgd#1sb&$v1zuY+H zS}45?3#4eI`omIT;uk#@4mC@{kce+G-^Q{#gzQ)Y>Ch%ooMgre3v}Y#X!M-2#krLc zv&Y~~Qq*|C!1?mLm3s=v9_y$}&ru?|{uqZY?yw)ATe)2QdFtVaFIB_@#SLTOrxed6 z%{{~Kq@_vx0xNj+YT>}Pzzo<n4|23LkqJXSz^T@Qw+kE{fO>+RDxs59K!vMmv78>^ z1$30!-kS+?GT9jl9G>c+8EiCyAK#V?5*_E#!BghqcR~wy#{TLJ4swLhVr`ot6Yh~Z zvXTGUET&-_A?bvs7ZMS;zLR;tlGe=CzbQ_^>=jwK^zD}W8(u^nlogl}G>Ao4aRZj! zQBvDN0E}XJboQ~5pE+sV-snzqdYI&TMOoKOR}0TtLS>J{iIE%(D=RnLW`)^YnUJV0 z^OJMM0c+!d$*!W2GkClpK3eO6>Je1p+i8)CH&U?)p&|jNop-nFN6ERpvEnDe#M)i4 zK`crI#Ia;5(<z@)&Tc{w2qUsUZlK7^CeQ*CZ7U-bnD>pZd(!j!OXizfc*@SVHq9v& zi+>;n`Iiid{4ZjlZD61tc^n3%Vqe-bwwF(@D;qvK+udJWJ19-g)aAOJ=dLc#2|N3Z z%vAQhQu^<#00zT~Vmh#nvl(#qIlT`)L<ctuAq5hZSvqyJ5O$OvBSwx0%roQI=<<+N zdgj7V1eQ?&LjBdi-|;FJb4Yp|Ec;YC(J!J9ATVw9pANomVIzk1fvlnYGxoj80TUb& z(dQ06r}L_K0DS!q3gug3V`P%#I!J(~e&)zIcX%r&N;LN__4xO%kL@IwF@H2D_MQfA zv%{(d^~@kg6`G99Zwy;Iu&oloY3Iuw0-y4;W&6zmuWzc4o;F85J@a~wy+2oSY)M0s z3|8zI1CgB8uRuEa?}iiXaO>gWx1@+xp}2V?J>rJZ@lMm(EgpGw%EjR)s2TQfAswQl zVp6_0Ov7w>+Hs)er@41uQ{9U=M#2V1&1@UuT67)qtR9lVd3Gr}>!M*V05@iFh#VK7 zSG!^R9|MCf8W8&7I(NsArrpORSwvO;q=ezsD+!Noe*UglStZipO(Er~Bnx)IE4#gy zdTTxI>U$<D2$n|?O#Qsfq}Kdno^j!wbuB8f<*cZ{aLc;5rXmob0l74Vd$mV~>T%Bb ztp*%dnpFjl{xP}I4GAD>w!fuJ@W5yTDZJQIVPb2_9vgkJqhVuK))6W|avk_pZQAnq z_F;M1Lw~L3n`IlO*`B2GkB;@X8i^9T6Vd*AXbXPC6!gzS_~`aH{G@p_ZE?-E^@t#j zay*V^YT~+2*<A7;!EII)g;atZlsmZ!u_~UxlJfFR_$i<;3S@jULjJwuf-ABR=3C|y zX>PuiR}3^^pDxSscOQX(;287KjGi`auT_z#h^v~NbrP{8(+^+Mm*3NdHtgQ3V<FsB zI*5V2qZIidBJkJzdc7MS@0d;-eTRk$d*gBSKvdzqPN1e{JQe3b${?bc-S?;3+bhwJ zpGKtnzM^fc94n)ycP~$5Qn^XHCSUydKu?8KU2A)Za3AhDgxPsg_UFeU<FlrnPjnIa zZ{8*=Qu4)CuM6a7BeE3BZpg%%sPP0d5Zv7Ip<x7r`xh3z=^>a81;IG@*z&_-4x>46 zp%gLu+>3hHn|#xEPO(7HM)o{o8&$-YPtLL8OdCt8GJoWiYK9xU5(%mWfZyHW&5fBz zrcXx(EvrGgsH&{37N1!9=s~CD%I?YaoHd4dnq$Jk@_RhY%x`Hsu1K`{6P;Ygd(Lwd zTE8f7-oGJU)SJ6og)@+b7Y;xft`j86Jrm)<px)uMQOB31nw1?P?%|=-poU3ni&W@T zXHs@~npt5!Dq58lDLl+dcs<6};u86QkH{tCRg}2y>0>;#8>x2_9_a4xc3!5(s{5!9 zZ$x|j^3wY&^}@tmtO`P7kB}d+_j=>FT5rGSho`Ii(Nk$X<$s60K>u<$>VJ5VS^paN zB)AFhreYNHN$XK=Y4gQ(dwYC-{yNRl{j9hiX>NM_deazL{^YnH$@2Nyw3oo5sYax# zISH+E2#4l^5R^V=fE47UJ-V(y7WeSv#`k7O8P0-zt=8YZ#aB-8U*#0UCjGVu`IY=k zCOB){Cnp>kA^3p^(&$g-TN(zeB0Cl-p6e}ix;=2hk2-oFYAd6qD00+U25UP5yXr*d zeV*mKb5uLqOij;x%Nm7|N-BO$m^;Ixy+%o8MkE5Si7VSt)5~;m5tPF<U2-=^-E(Zw zaVnt;mP-w%TPabI)Mtp=TDjMM6`a5$Nn02YPYm9H8$Lq`Xby!TLaJ}lNuPc_ebM$N zXyBTR!vPR05gd;W$m|fN$Eio_Aw%Vj1(PaH`X`PxkbHy6K5sM0J<mkjT4@L!WR;~R zQ=^-g%`J=I{~3V?C@1rQ=E}%0e5{1?2}iU4HaBttd2yQgP=82qX#uQE+|*Ku3d15+ z>C5Mlq_>RqU7V16I-5*znUOVyjxa|+0w@ohIfqAbJQr37!;c8;X9Ss~ZbxOvSNkSL zUUjeg62x@kYa|Ws(9)kuZT;;q``*ANt_s_MAD$<MsPz-uQS4dlBZnE4o@l0ykax}c z!<DYe7|1>CJEjeC2*?P6Al(XA3;u9Q;LTuZX&R1J_PHP<S2H7c$DObgH&?Z(4#xUw z@&$-F!v4rP85lD&*Ur-~w2o#1JVca6<OFm>;;Ar!>IK^-BzH<w<$~TZL&+u~x$*rL zsdBUOWWP>V8dRu9o;TLyEjqRz{8)>5$wrgKi_Dzw@6nPEq5#EpNds359!zCr6B3$l zLfon?C9$MhB}B;XY{OI6S9vgxhBra-4>umqyk52rpB%SOi2uT`*Y{zXujO_m`yYDu zck(H?^G@VB^SAqgmb&1DIP&uDd|Www-tOwQez^Xn9bXLiEYLXWuBb_y1r|XUvxtvJ zQB2{{ELvoYY*kLnc<^{C)C*=AZD{LO)FGa<Wa8a#gOJs3rMG^_d0wn+KyTQ!@gY4M zKOJY83dQxp$X5uCG4z4hqIU{bM+(TuOip0JxhP!BKKh)>{F)m-p5!lF(Mmwi5sNp* zB3*lWCX>ZOrHIzRME620b$}@AP*VoaHNTfFaCg+Zusi3rTPWj*nplXyCI`0jp-t~y z*027;n0pyPoF29K2;YsCWt=r-4_>vP^x6TlVA%@9-_6g?Sa9q-owMP=MHVsoiP2}w zUB7~?jKVBQEI+RWJ^>wY=5dfE%N&QuWG@$b01gwc3d%90bTh^nNrh2zjtgT&!imfn zO^6FDrn>)=8GM2hf@wHu=q<dCp#fye97jcQVqG2iAZ-d|C%3jRgr4T6Gcic(R7Thk z`Sjx}HW?TOc71=eS~%72<Xc!-GcE@#Wx#1**1h_=w7tV>hAA==_GLYHGO8^=e#|$j zF4J;BSz}ljo#5KhD4+<BrD*zR!G~;VGmWpVDbxaTnh^<uS(Gea+A|BxvZiC7rG=PS z*0SmrG-G{K%idEd{7%#WB|l=<<nx>RWzE8Em#5dp`Oat?ne;z=5~$x_MoI9Gn*H00 zgPsI|dO85i#Kk@ne70$H9yE^X+ix#5wI|rkR~kijhV;Bl0WrQG6HCx-7XJ9XIe5ZR zs&5T`R}ZpnT&iqJdWX=l)OYsKNz<;tXqcl${o%jQvUx*whO|J~t&ljGerra+ONwT= zkkX1B@$gDBNg(vm4uR9yW5f9@X^RD_JGQ^6B@8WG1c0!rsj;=&mVB!+Ubuhzr08Lh zuFZlmq93lx+oivZcCm)t_0DUcJ6OEP_$3!7K|r^tU)3+(Z){KJDQS(&BwU};ZuxE+ zB}jz7tf%MR<%DMa{`lf}Xh6k!C328XD_R7uZC;E`#wYiCb5_X6h}F_{`dT6_g(AzV z|F!$Bse!o5HpR6WGbW|JG*HWw<m701c-`Hr6TTL_;08m2j^m0I17o)un7KMsCnwav zu=^msE=M<d9rgnV*|8H{{DE;u+N{GJzng{FxQODQ{5SEWMxl<0s^vJ2;GHA`1E=38 zsy#^vQr8!wKaaj)cGCLr_Nud6tp1(qdQx#JGxo$sO&z`hPLxwc+n7WyTNeCzWG5DS zgyyWDpTVA1tQ6XEk3wKH5+=Fgr6}=8tj|8D9kp-xBHURHKxeo%#p)NR*h?UtQ*6gc z5D4Eh|L=^)Tg~h88P=qg7>oHMjgEh)0`C8CfHU?lRhUJ;!Vh$>=yuzdxSZ78o^z*@ zOj=2E_vm5u-u7?z=5&JaAy<&E4*6`n(TJ@M`x7fJ^<8zq(|nL@@ktmtYq@<=2y`-g z-e#YE_)`1A{2HozhgC*E0T!N~j7uQ2b^fe89Xlp=uYX>RG;~o0)bl?*^X6{#>Bj?n z=k~t*H`idApkZE%e0#%$(huDTW|H(5k2_#3!fTCn8k<mB!eYSrz6nXsx!puwQ*jio zLszK4fvdZaTtj6R;<An1w@mL&DpE+u6)kz{z3^tlkfN9F#$zhN+zsJXYu~#cX?xJc zc&UH$s|(>By9vxy_jltxg`?w!vvNr2e}3=dBbJWkR53C+=CoX0{H~ZuQek5AJ=I1N zM<-Z+^8hSt<7t-zA2rJ9MmjL)f$x}4nO-RioSq`c6g@?DMRag;yg7Efwz(0uEW}}Z zh)@h{Ej;c}Q^^bzf6(mrk+5W{82a@pI+ny)&UmpS{?CcVwyJgE`0{!A9QY}h5QEAY z!Y6GX5gJkz!`~g{sjre%plq7!sR2mBPnrf+dqt*agjDgne!pqe%LZ9jKwD_^K<A6a zA_|&ewPrn=dKU|`$z=1RIqcv|Bz_QG+^3%paQy0h9jxC<$R&E}I;ws-aHnWt^z;<@ z)kOUd4*u>AfSh+CoT<M#fK-NpcmOy6Vr{>wo_4S$yKZ0Kub#`7B+A2Wqh224{+uwM zXVk)39k<aCs`@{+EZ-%qz8;so!+1^yaGP~nJEYDpk_<5m^YOgOK|`dT&(m=)_9&;I zD?vJ~y1UHTT#fa&>)S9Ojm3GGN^1(`pk|HAqKvWlFnH9RTY3$K62Lbu?ZxAT`o7ma zJH$ks><j8ZJ>SJO1~3e~s66?h3?%opo80Qcj8R#g5gTKSd^w}`@S;umN{q@os7bH- zPjl-G9e$Se)3D*92*1aWjPRLjlr$$=ho`!eqhhNWU1|<yd=#qS1W>hC2cDbRV1DC4 zv%8WJebg}JayI2(t{U4RknBOQPT+BZ1_iMTHaCkA>}d*1;PFa(IiPE)7`=P+36Y49 z5@L`@WHe>nKT5S(n0wT+g#!)i0|Bu)GHBLC*s8ByL2Z)}n&Qjfv2<w}$t9(9eb!|o zL}BZ=ctwoz$3^m<V1eb@t6USd1`UC1PIXyE{lP?h+=?jMbA>;8EqFT>l{i*p%fC}Z zAU1j_H(B3Uw#*;w?A<bEjcYJw|LjPjoKOpglDpAV?0+uM+-9_5krwEtDJ&+}9d256 z>r8RRyv}v!X~Zp;tR7Vt5JK_Wd0NqVFl!M2OyIfmrFGrSl;nBv@UnHQQl6lKw(}1r z{+^Ho^!_mMFUJ7sfPN(fBiIx3+_~iOTweBcO{3uIT-la{z+0@dqwA>4YH$iayzbX1 zL?UGp^{N{{yA&ftvqC!Urw%>kz=wBZ^t80B!he*wD{cFf$orA?%f@E8B@mIFi`kw= zfAsAffe-Qyn#{90|1qbD4fv9O-pbG!K}HP~#&0kh{^p~^oZlhI;2|1yfi<?OLxDp? z5Oe+x$x_j%_W~J<a*UO<81%xk>k!)E`S?!huCUvxjlS+#B}hB0EzDnaLw$~3s?*4K zsxbm4;zRIj74hIo5^N!3_(?Q|&SoghoKe!F@7>g2%FzRyCA1FCW@+@5E*L7V?L(r+ zW`9tM4(rz|UPB*h)lECcA(Yr+V~L`=Y|jkKcZ#GPdtL_b!v?S&>oWCom8+WM%MsjP zPMUd}XQ|{T5e!W6NIGjT@Pt2k*rgS!zmZpVJI36YOxUUWLU2m-x<Vk}D*)`LVJ0+4 zG_zmDU>j8^$I;^))XD<}<bJGeUP{=lS2;OLW(-EBoK==Z>8+W-C=7dK|FjU^$)V4I z5ux>nPvt|z3;O0J>|L9K<do)0)RMCN`qq&!@Uw_FhlJ+7!|m>t#Va<6z{P#d63F_t z9P#}4fjeg4+Lz$gz5L-;Md^B5HUH{d!||W0@HYW}dB*=CzzOdRT`+)fr{$yOd`HV? z=OCM7*r`N09&6eC-km~ozx6g3HKt*cw}CtVYFOy`#K+$`&=A}3SBxYL4p+ma^LIp> zPOs7y?09+a3PDj@vshfoNIdL7h*58it2E*84z*7iw)eKC`Rr>2qR@;8YWV&sRl|uy zWJ<+YXi9^YBH+0n>+7Oa1ncGv;%DI(W6F1SmCHZI<`LPKfezP_nl%c9YSl@>q-PeT z*2waKQ@lIy{YO+k6<GW0Bue8+`Jr(LqHWA)nUuxD5R)&{zO$2KoqL9(;P^1-rREGt zXw~f`NY$?z@y~KuZiYQFn27>ulP9{~Uy}Qa0tG0<ey~G2fx-ywWCG(&+gHYQqhifM z<Ae|FD$IagT^eZl8;9|Lh67=sN6_EMGE*ISMZTF;LQkVyGH}FZzj5oP3A;<9?2}pa z0B5k1r(mQI{#2Ezn=4;y28FlVK&=Iu;gp1%QDw}tqgA4)Eb!A&({1_HE5k>M<qu04 z?gbXCPLfm>7}m8aNiAQ$%0{8pG+=~$IkzD3V-F}1=*9C#fRL-qL}*6qi<33KCS(KY zWCB~S^4oZwss9E_<mpSH$C?k@SL^T9IaF3K-jX6^&Klw@c|mU|S=Ej|H2Ca1_SAS= zzxhVH9bnIADT*5j{I?+d9j*!V{PB#?fA<KmSeOU$U?SZ6<AeMA5%lM$%@0pGo3s79 zB2Dj!l#%ov9c>u&S+9}OSJ(JVZ)zbxSgiJ~rXR~ivl;Jne)*ALry(0jR{=g;^!Q{C z<%{7LOTGq1cJ@(J1PhMUt0ClAT*Ej0T-50wFBc=iP~n2ES;J|H*)52N%XtzYnBf9U zMf(Qf(z8X1@g%Hbmu7V;4K6WB5nPzD{Utwaq)0m2=}H&$A7FV)c<$>SH8OVJ*S%CA z!miLyt~|^;^7xh1t8XbgBci#iokE0|zLMXfxvu-<^}xh6ON2_9wcloOnvigzgJ*#j z6h8FU4UzFd#h#*3I^mrx9&8mN8N=p!PzO{EJCE6II1|v%TO0F2FmrCpsXL~+)J*BD zrRK8q!U1g5$9+;-NK37><70CE6000UsBZmdZSrzaOP;FYkRe_|cnB|hj#p(=I^c<6 zn;%Iz*-c@Jw7+KZ*|E6Oc2ibGz)xj%vT5tiDlE5=;x0&I*Gw63*+v|{JeF2KPUb0N zLwimZ&-%q=O0f)eYH*hYly@Y-N3+;xeonuqE+y)9F2x)uNXA1U@N~_8q()B;6nMJ7 zc%moSJ1!s;EGR&mhHqp=4B1==0>yMAe%ZL+-@d#Ygui=U`E-@EINQ4`RssQu|0f22 zLm)-)zk@>o7^r8yP$k1x)y)chM|%w?a}4jhZ8n_+yKQI+>t*`&M$IFlVCu9)yA*## z;WyGg=@P5HBjb53>X6{vl&A!GaiY>uUMJ0{%h&d6TNs#57u8f~P*^PtV>}zmVE`#r z4p#iR3Yhu;x7f|Zef^LEaABZ3Fr}iyev7wjXBOluTY*IIJypf25M2V0c)}U$#3>;V z5(^FA-gg-L{X!&5@xi@-FDix+Z`jTglOaio$)-)tXFYhD$Tx?LzNild?7E7VEecI~ z;1jGKl)hL|X!IN#cNBlLS~<wJQQ;q&ms(YNtT{aoUN+qA6tP+bfxlX9=^h}`$f0uF zS3h6@z_V6#Gt}t6AI;9M;KN_5Vc~q(zyEefA{)4-24OQmmtyB}sy&Y7B3;=TPux@h zWz_+PVnlEf>>E13;y4I!I`n129>`Y~{?6K*htCLuvza)}zIhBS1Kz7}(32=N*K-6J zw>Z422It1IlzMvqohkeV8{#d0oE8dE_-7XS3>6T2eOjm~9ZfA_tRPIi(0uU>{GnW` zpaki+;@?`gInrHX0_764QFpV~$O#mi6g4V1*o<h7?!4&^x(GS%#dL%g>xGMn&o9to zXSef}-FA6H6;|zL1x3$Tczq&*eGQW)n2|RSM(|?lk%v6eu|-O-f_^v9vrOUAgA4uE zAK21`IuH-tJSzFwQaSzsJ<ce|dHg?K8RYu!=+nsM+oAqWWY4`=C#tV1rlk*Nd~uE= zG^70flPVyfe+?pkS`E#=<B5zz=n+`K?oS%uo*o_pujMA}WvQ@A?91b*4b4-Z)?Fx4 zl*~}sfbI{a#uK2}pgZspN#dEeoJ&-%&yCVLaEZxuiOghXf-eL~!7|ApW1``-a3=65 zcgmJHedMU4gHf}3y&#x)Ldco~tRe+I))DsU<FXQYly2h8HeBzma+BV5Qfxr3Di}eT zV{y;rq#qYvT~~|RU1!Aa6Q>i|2$7c0)k?cAQ{*PHBY2ix2O`Y?Ij~Rn@3?-|2Tt?W zk=8CCa<Cu+6sBGC35$x?@b#q+5u#!Wh8W@Lsz#=on{o-<4wnoJ6w5f^y|ue5U_g2g zKa|C}ZdSfbXbYT)QoqS|OiSbLvI9C2%7LOsb)G+)l^`nLeecahI~f<xK2s=wHREny zNKYmZscj7AC=Ji6LSd8j8S$Rr_8Jh%9*>tqI-#4i5ICT0jl%Y<SXo?#ei>&uaVzn? z^lz$vg2&~igXOzh4R<ml26OVbNXVLOZ*Xj7zi@R7mWzNeR&#LF1)z0CCjgNa+KjGB zrK*u=nTNkeQx|chp!O#Rh;%(_1IQ$)h0CUtR?JLJHPHv*#0!3z(Umjn0}4)S)5u_O zX}!-DBOeok7s&_VoscENQotLcOMhVTjK1?d?F`vIJsn3fq%Rk6joGvQ1BQQvt*U=$ z_;=VE(XC%6O#WfyljnJSaQtq2;5>rsD|i07Q?vE3qHVeJb@k5c<!yf)V_sv=MO`am z1;R8l%G^pVe*yRQ%qw!5en-ZBhy(IerGL8^XY5TaNI~kPV*AVzOwxQ+f2d%84Niv3 zn#j$eRA;<9S>NT-fKE298D4WWRTW`MIU*{i-UWe>v&>=*7nZ8|nrQe8`%`T3%t|T7 z=f`J_51mOL)}1vx^S4zG@l2soG{2irN^i>?d^PSl(^6yfgdU`|B`ZR0?>BUi`fi4~ zFfnqqOp)nmR$7exwJ&Pvv-db?(|jeG(s+Yd8W()!pMrwqKXpR47mQtN7(7WMIY@t{ z&jtt^5)$o36UY7{Ke&^kBXyBGC095W+~7a>!i!qxZ3+OnVx3r1BBhSxH!K!UZN!zU z{GdLk1JZ=jOB(lnF%7I@Dy1wy#<o6GvnYj+9SAiVh$pIAkQ+_QLlzJxVlMT-G51Lr z94kgQ!{;A0xH)Sf6wDi-3~aPVKx7Cg6l8+QWdMBSM11Ak>1pLhSq(@OI?~dn@)Br) zPLs%?*5e}6_Bn31!C|zX13m2h^0xJhz)v6wG-)?Gl56gU76v&|3<Mg!6t^>Z;{u4B z<N6|{nrW00$rMUENNZ3bhvw-@>2f-^aQZwJlDEATneugDKF~lF;)BQs=TuS1lf1?Z zB?R0Ni7XH#7CU*%weVBLj4&&lo%19C^O6_gJ_zQI;GU!G$jo<CbvueM6UN-I61J9X zbPVfe3C63ctn;~U3@XBkCo<EatcQ#ZjFRRIoMG7YOdmb-c<_1T`bBNDYR6?yU+H?F zj~UPCX)s+^r46B}|0`epH**F%4<EKGSFb1hpECn1BP;lB|1Dv_e_yzf<^R9bCjB`g zAf|rLCw~w4b6f4D^I*oNtLK3C%ZK?Ox~oag_RC`B`nH>5L~S(4DG+tTC*4XsgDW2r z;O%l~nFAW@Ck*;(i_I{vHt?dFizu=saxm#mLxU8CY!gDA@Y<+E!~BV(qac3{w98O? zzO_I$^ya`fxb5A+WASVqt>YntJz-h=S&(re*D;jy^3~C#+=E)?{YBI2#lU^0+`<Qf zIozvEe^NX8Tnd^zH(`P3dft+Z=B9iwnu-9@M8tVGP8tGQcC3sP;9wbCP^AIp$3^J_ zjC|nT3@n@A&k!Utzi$Zdz3@vsEej07f-=P_#`5i2_OeD8iQwL~M#uNf!Ql~yYLFCS z`Y_F(YKYX->q>xJKnGvg)M~b-Y0oa?i4T%KKaf7GA=k-vm;Ay*izAtahI}&C%tSS$ zWx^$(m=OgwxjTA`BGAG2>W2VQ^c(J-VVEBWp-1};ORanO4no6FX|aZT&U`^>Vl5x* zEnGU4cxF{V4h`(It6I_f9ulmr>*s@ESjGG+!lDlNx9Ojz{9I&b0~wR$jeb&0tbW=K zcxNu0^_;ICMc3ZUrOqmC7}pZO1k@wrrPH_d`j!dGXKVb4E!mQQOZ%<qtf3Jo5o!{2 zgqVjoS{gKC06-p=uH^UwqY$F(bc}|&=9J_4SFDB?I%P@!qIkZaxY(YOAi`zXQqJ$s zW&m`HXG;^oYD|~LU6+O}$WvEU>Rd&&A-9oidy)pBJ%cT?V7>|znOIHWO5gb^+Ih~= zeGJi?Y0verm;J2oLzT}L&c4_G3%I{--AJ>2jlBDgyo>4quKU<mD~`hB2(=!4KEFJV zGtS?97<79)&ns%q&$nM6GwnZfa;7_NwY8%0OU*??H(YOZ8r*us{T?U5f3U=upeP%z zcL3BW*fy=r5>d(Bd71Lb+ix8tqg)1w+2SJWsRNT%YWKiMg2H4{E>GU=!L|svvupj; zBM3xuQs^TfeFTDIU}Ow#%S@QtS=gPFvdyLKb=Oy8ZCl<)LUskJq$MTna^86zrj-fG z8eF4}^}j4H7>D({T;TI5gM3~mJEg!}m#u-MrythGT<mX8FVPZ!&H&PT=YK+rp(_GW zLe}NH<Ul_VO_B7BRu@VhF^<XJDHi4O6N03f!EhcloB_lJ&_$omUJ^-rssf_mc-cpe zpI&JYWx%`8S-*%0v&7kKXp<IEe!l)3k|0b>JX8-Ns@P4p&Wq-7v1}7rES-VLtZhz5 z`P?j&Em?sAK2z+acTctyWA%`(&L_r8_hBG4NT7nIN^&W`tYBe5<3IELTJbgs+8rJ# zNgJyiBh;d=Q(G!(R5t4q`4JrkQTnAuF}33`UOduY7FK7vj{^1ed1=FTVq@VgS=kOc zJpBP5ZJs)Et#vxZ>s~Wlu+u~<1G`o6^Kk8VLXwL9=<T*O51gclF)_$@k4Iil{H_>X zzm|)SkI$#kPkziAy{?DZuad5ZOOAsN$j^)wjDvsl(!Vb!GkpCy_ksO;YU2hHSEJ@e zM#>YMIlokWe15Od(A60J{4Be@zqy|AaX*ikXc=_Jo{`g1PdMGkv5HT$Q6!}kC*YbG zIlvouB7mRcWYNWvfFpfYb>wA_uvagi+<@mYT+VUxm3m&*3OKs2%90Vu5<i)~n^awD z!Wh>mYvSq6)KfXJxtm*F_zZm6aG^ox*)i9$d8Vtty~iQ>)>33{EuCh>b-;MoWdXjw z6u0h@S*WWtY{gim8ISz1y3Lf&F)JwWkeIMAm1Iy~YDohzS*I`+1wl^R3z0P1yNhrw z<7V&^g%8EB7YGP4f|;3_jSs7VnO*NAEf%DW_!|tYKv_xNefe@nJPeH2H`1kc)mfb~ zW)&+K>itTX53>syT^O!CG2K}m8jH+D+I|?=gaLZHtGA9f^)@04=*C!iWf_w;1B`MQ zT~!~<2PHWb(JTRy8#h7Q|JN1@{AZQ^Jukuh*?vqYfnGOue<;EqNO(xEJLfGk_ew(h z!dHuvF<(zb$9k{z7vXyS$$PR_G!EwSUrWqG2D9>7hFXIem-$&2wjfXf{e&E`P=Bo) Z{qvK5<@Ufm??gyo`jLNo=l|c2{{vg__~8Hm literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/yup-05.aac b/packages/ui/src/assets/audio/yup-05.aac new file mode 100644 index 0000000000000000000000000000000000000000..90408d3153442c2caf6628b6b17e294d1face88b GIT binary patch literal 9993 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/assets/audio/yup-06.aac b/packages/ui/src/assets/audio/yup-06.aac new file mode 100644 index 0000000000000000000000000000000000000000..094489afd16f97d7f099f203abff188d3cf4ef49 GIT binary patch literal 5585 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 literal 0 HcmV?d00001 From 621550ac77fd4f9250b5b5bea7f493bfc23cacbe Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 11:13:54 -0600 Subject: [PATCH 274/426] fix(app): keybind search height --- packages/app/src/components/settings-keybinds.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/settings-keybinds.tsx b/packages/app/src/components/settings-keybinds.tsx index 46ff49ce3a0..4dc39714955 100644 --- a/packages/app/src/components/settings-keybinds.tsx +++ b/packages/app/src/components/settings-keybinds.tsx @@ -365,7 +365,7 @@ export const SettingsKeybinds: Component = () => { </Button> </div> - <div class="flex items-center gap-2 px-3 py-2 rounded-lg bg-surface-base"> + <div class="flex items-center gap-2 px-3 h-9 rounded-lg bg-surface-base"> <Icon name="magnifying-glass" class="text-icon-weak-base flex-shrink-0" /> <TextField variant="ghost" From cd34f5e07c33dee8f06ef07a437193e41c39d90f Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 11:14:07 -0600 Subject: [PATCH 275/426] feat(app): new sound effects, downmixed to mono --- packages/app/src/i18n/en.ts | 33 +++++++++ packages/app/src/utils/sound.ts | 66 ++++++++++++++++++ packages/ui/src/assets/audio/alert-01.aac | Bin 15378 -> 6304 bytes packages/ui/src/assets/audio/alert-02.aac | Bin 10527 -> 4688 bytes packages/ui/src/assets/audio/alert-03.aac | Bin 3016 -> 1605 bytes packages/ui/src/assets/audio/alert-04.aac | Bin 8352 -> 5317 bytes packages/ui/src/assets/audio/alert-05.aac | Bin 11941 -> 5207 bytes packages/ui/src/assets/audio/alert-06.aac | Bin 10829 -> 7407 bytes packages/ui/src/assets/audio/alert-07.aac | Bin 9966 -> 5186 bytes packages/ui/src/assets/audio/alert-08.aac | Bin 11522 -> 6321 bytes packages/ui/src/assets/audio/alert-09.aac | Bin 8061 -> 3835 bytes packages/ui/src/assets/audio/alert-10.aac | Bin 10273 -> 6686 bytes packages/ui/src/assets/audio/bip-bop-01.aac | Bin 4303 -> 3065 bytes packages/ui/src/assets/audio/bip-bop-02.aac | Bin 6187 -> 4011 bytes packages/ui/src/assets/audio/bip-bop-03.aac | Bin 9747 -> 4385 bytes packages/ui/src/assets/audio/bip-bop-04.aac | Bin 12327 -> 5578 bytes packages/ui/src/assets/audio/bip-bop-05.aac | Bin 5467 -> 3830 bytes packages/ui/src/assets/audio/bip-bop-06.aac | Bin 13281 -> 5615 bytes packages/ui/src/assets/audio/bip-bop-07.aac | Bin 6448 -> 4036 bytes packages/ui/src/assets/audio/bip-bop-08.aac | Bin 9730 -> 5301 bytes packages/ui/src/assets/audio/bip-bop-09.aac | Bin 15909 -> 12087 bytes packages/ui/src/assets/audio/bip-bop-10.aac | Bin 5567 -> 3206 bytes packages/ui/src/assets/audio/nope-01.aac | Bin 6316 -> 1760 bytes packages/ui/src/assets/audio/nope-02.aac | Bin 7431 -> 4186 bytes packages/ui/src/assets/audio/nope-03.aac | Bin 6688 -> 3768 bytes packages/ui/src/assets/audio/nope-04.aac | Bin 5573 -> 1875 bytes packages/ui/src/assets/audio/nope-05.aac | Bin 6316 -> 4797 bytes packages/ui/src/assets/audio/nope-06.aac | Bin 5976 -> 2812 bytes packages/ui/src/assets/audio/nope-07.aac | Bin 4957 -> 2095 bytes packages/ui/src/assets/audio/nope-08.aac | Bin 9621 -> 4240 bytes packages/ui/src/assets/audio/nope-09.aac | Bin 6120 -> 2994 bytes packages/ui/src/assets/audio/nope-10.aac | Bin 4356 -> 2302 bytes packages/ui/src/assets/audio/nope-11.aac | Bin 13297 -> 5767 bytes packages/ui/src/assets/audio/nope-12.aac | Bin 14005 -> 5722 bytes .../ui/src/assets/audio/staplebops-01.aac | Bin 5573 -> 3888 bytes .../ui/src/assets/audio/staplebops-02.aac | Bin 5945 -> 3542 bytes .../ui/src/assets/audio/staplebops-03.aac | Bin 9660 -> 5310 bytes .../ui/src/assets/audio/staplebops-04.aac | Bin 5202 -> 4667 bytes .../ui/src/assets/audio/staplebops-05.aac | Bin 3716 -> 3461 bytes .../ui/src/assets/audio/staplebops-06.aac | Bin 6316 -> 4282 bytes .../ui/src/assets/audio/staplebops-07.aac | Bin 29351 -> 4627 bytes packages/ui/src/assets/audio/yup-01.aac | Bin 12404 -> 4419 bytes packages/ui/src/assets/audio/yup-02.aac | Bin 6287 -> 3767 bytes packages/ui/src/assets/audio/yup-03.aac | Bin 9187 -> 7180 bytes packages/ui/src/assets/audio/yup-04.aac | Bin 14164 -> 8376 bytes packages/ui/src/assets/audio/yup-05.aac | Bin 9993 -> 5423 bytes packages/ui/src/assets/audio/yup-06.aac | Bin 5585 -> 2878 bytes 47 files changed, 99 insertions(+) diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 2cfe09a095e..36f90a4fee0 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -476,6 +476,26 @@ export const dict = { "font.option.robotoMono": "Roboto Mono", "font.option.sourceCodePro": "Source Code Pro", "font.option.ubuntuMono": "Ubuntu Mono", + "sound.option.alert01": "Alert 01", + "sound.option.alert02": "Alert 02", + "sound.option.alert03": "Alert 03", + "sound.option.alert04": "Alert 04", + "sound.option.alert05": "Alert 05", + "sound.option.alert06": "Alert 06", + "sound.option.alert07": "Alert 07", + "sound.option.alert08": "Alert 08", + "sound.option.alert09": "Alert 09", + "sound.option.alert10": "Alert 10", + "sound.option.bipbop01": "Bip-bop 01", + "sound.option.bipbop02": "Bip-bop 02", + "sound.option.bipbop03": "Bip-bop 03", + "sound.option.bipbop04": "Bip-bop 04", + "sound.option.bipbop05": "Bip-bop 05", + "sound.option.bipbop06": "Bip-bop 06", + "sound.option.bipbop07": "Bip-bop 07", + "sound.option.bipbop08": "Bip-bop 08", + "sound.option.bipbop09": "Bip-bop 09", + "sound.option.bipbop10": "Bip-bop 10", "sound.option.staplebops01": "Staplebops 01", "sound.option.staplebops02": "Staplebops 02", "sound.option.staplebops03": "Staplebops 03", @@ -488,6 +508,19 @@ export const dict = { "sound.option.nope03": "Nope 03", "sound.option.nope04": "Nope 04", "sound.option.nope05": "Nope 05", + "sound.option.nope06": "Nope 06", + "sound.option.nope07": "Nope 07", + "sound.option.nope08": "Nope 08", + "sound.option.nope09": "Nope 09", + "sound.option.nope10": "Nope 10", + "sound.option.nope11": "Nope 11", + "sound.option.nope12": "Nope 12", + "sound.option.yup01": "Yup 01", + "sound.option.yup02": "Yup 02", + "sound.option.yup03": "Yup 03", + "sound.option.yup04": "Yup 04", + "sound.option.yup05": "Yup 05", + "sound.option.yup06": "Yup 06", "settings.general.notifications.agent.title": "Agent", "settings.general.notifications.agent.description": diff --git a/packages/app/src/utils/sound.ts b/packages/app/src/utils/sound.ts index fa65f1d61a1..d5e606c6750 100644 --- a/packages/app/src/utils/sound.ts +++ b/packages/app/src/utils/sound.ts @@ -1,8 +1,35 @@ +import alert01 from "@opencode-ai/ui/audio/alert-01.aac" +import alert02 from "@opencode-ai/ui/audio/alert-02.aac" +import alert03 from "@opencode-ai/ui/audio/alert-03.aac" +import alert04 from "@opencode-ai/ui/audio/alert-04.aac" +import alert05 from "@opencode-ai/ui/audio/alert-05.aac" +import alert06 from "@opencode-ai/ui/audio/alert-06.aac" +import alert07 from "@opencode-ai/ui/audio/alert-07.aac" +import alert08 from "@opencode-ai/ui/audio/alert-08.aac" +import alert09 from "@opencode-ai/ui/audio/alert-09.aac" +import alert10 from "@opencode-ai/ui/audio/alert-10.aac" +import bipbop01 from "@opencode-ai/ui/audio/bip-bop-01.aac" +import bipbop02 from "@opencode-ai/ui/audio/bip-bop-02.aac" +import bipbop03 from "@opencode-ai/ui/audio/bip-bop-03.aac" +import bipbop04 from "@opencode-ai/ui/audio/bip-bop-04.aac" +import bipbop05 from "@opencode-ai/ui/audio/bip-bop-05.aac" +import bipbop06 from "@opencode-ai/ui/audio/bip-bop-06.aac" +import bipbop07 from "@opencode-ai/ui/audio/bip-bop-07.aac" +import bipbop08 from "@opencode-ai/ui/audio/bip-bop-08.aac" +import bipbop09 from "@opencode-ai/ui/audio/bip-bop-09.aac" +import bipbop10 from "@opencode-ai/ui/audio/bip-bop-10.aac" import nope01 from "@opencode-ai/ui/audio/nope-01.aac" import nope02 from "@opencode-ai/ui/audio/nope-02.aac" import nope03 from "@opencode-ai/ui/audio/nope-03.aac" import nope04 from "@opencode-ai/ui/audio/nope-04.aac" import nope05 from "@opencode-ai/ui/audio/nope-05.aac" +import nope06 from "@opencode-ai/ui/audio/nope-06.aac" +import nope07 from "@opencode-ai/ui/audio/nope-07.aac" +import nope08 from "@opencode-ai/ui/audio/nope-08.aac" +import nope09 from "@opencode-ai/ui/audio/nope-09.aac" +import nope10 from "@opencode-ai/ui/audio/nope-10.aac" +import nope11 from "@opencode-ai/ui/audio/nope-11.aac" +import nope12 from "@opencode-ai/ui/audio/nope-12.aac" import staplebops01 from "@opencode-ai/ui/audio/staplebops-01.aac" import staplebops02 from "@opencode-ai/ui/audio/staplebops-02.aac" import staplebops03 from "@opencode-ai/ui/audio/staplebops-03.aac" @@ -10,8 +37,34 @@ import staplebops04 from "@opencode-ai/ui/audio/staplebops-04.aac" import staplebops05 from "@opencode-ai/ui/audio/staplebops-05.aac" import staplebops06 from "@opencode-ai/ui/audio/staplebops-06.aac" import staplebops07 from "@opencode-ai/ui/audio/staplebops-07.aac" +import yup01 from "@opencode-ai/ui/audio/yup-01.aac" +import yup02 from "@opencode-ai/ui/audio/yup-02.aac" +import yup03 from "@opencode-ai/ui/audio/yup-03.aac" +import yup04 from "@opencode-ai/ui/audio/yup-04.aac" +import yup05 from "@opencode-ai/ui/audio/yup-05.aac" +import yup06 from "@opencode-ai/ui/audio/yup-06.aac" export const SOUND_OPTIONS = [ + { id: "alert-01", label: "sound.option.alert01", src: alert01 }, + { id: "alert-02", label: "sound.option.alert02", src: alert02 }, + { id: "alert-03", label: "sound.option.alert03", src: alert03 }, + { id: "alert-04", label: "sound.option.alert04", src: alert04 }, + { id: "alert-05", label: "sound.option.alert05", src: alert05 }, + { id: "alert-06", label: "sound.option.alert06", src: alert06 }, + { id: "alert-07", label: "sound.option.alert07", src: alert07 }, + { id: "alert-08", label: "sound.option.alert08", src: alert08 }, + { id: "alert-09", label: "sound.option.alert09", src: alert09 }, + { id: "alert-10", label: "sound.option.alert10", src: alert10 }, + { id: "bip-bop-01", label: "sound.option.bipbop01", src: bipbop01 }, + { id: "bip-bop-02", label: "sound.option.bipbop02", src: bipbop02 }, + { id: "bip-bop-03", label: "sound.option.bipbop03", src: bipbop03 }, + { id: "bip-bop-04", label: "sound.option.bipbop04", src: bipbop04 }, + { id: "bip-bop-05", label: "sound.option.bipbop05", src: bipbop05 }, + { id: "bip-bop-06", label: "sound.option.bipbop06", src: bipbop06 }, + { id: "bip-bop-07", label: "sound.option.bipbop07", src: bipbop07 }, + { id: "bip-bop-08", label: "sound.option.bipbop08", src: bipbop08 }, + { id: "bip-bop-09", label: "sound.option.bipbop09", src: bipbop09 }, + { id: "bip-bop-10", label: "sound.option.bipbop10", src: bipbop10 }, { id: "staplebops-01", label: "sound.option.staplebops01", src: staplebops01 }, { id: "staplebops-02", label: "sound.option.staplebops02", src: staplebops02 }, { id: "staplebops-03", label: "sound.option.staplebops03", src: staplebops03 }, @@ -24,6 +77,19 @@ export const SOUND_OPTIONS = [ { id: "nope-03", label: "sound.option.nope03", src: nope03 }, { id: "nope-04", label: "sound.option.nope04", src: nope04 }, { id: "nope-05", label: "sound.option.nope05", src: nope05 }, + { id: "nope-06", label: "sound.option.nope06", src: nope06 }, + { id: "nope-07", label: "sound.option.nope07", src: nope07 }, + { id: "nope-08", label: "sound.option.nope08", src: nope08 }, + { id: "nope-09", label: "sound.option.nope09", src: nope09 }, + { id: "nope-10", label: "sound.option.nope10", src: nope10 }, + { id: "nope-11", label: "sound.option.nope11", src: nope11 }, + { id: "nope-12", label: "sound.option.nope12", src: nope12 }, + { id: "yup-01", label: "sound.option.yup01", src: yup01 }, + { id: "yup-02", label: "sound.option.yup02", src: yup02 }, + { id: "yup-03", label: "sound.option.yup03", src: yup03 }, + { id: "yup-04", label: "sound.option.yup04", src: yup04 }, + { id: "yup-05", label: "sound.option.yup05", src: yup05 }, + { id: "yup-06", label: "sound.option.yup06", src: yup06 }, ] as const export type SoundOption = (typeof SOUND_OPTIONS)[number] diff --git a/packages/ui/src/assets/audio/alert-01.aac b/packages/ui/src/assets/audio/alert-01.aac index 04772e68ea596ffeaa125f0e366e1b65abcb5856..dc608d8b1cf7ba3e9b7120ae0e6e3cf34799df1e 100644 GIT binary patch literal 6304 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%0As&|c9`XC;tRl*O!D^1rmO!jV9s9FZ|g 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 literal 15378 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 Xz-I~!IFs1Fne_kvP!0ay@4^28!Eftj diff --git a/packages/ui/src/assets/audio/alert-02.aac b/packages/ui/src/assets/audio/alert-02.aac index b7d066b499906770b87f319d04495d6d042282c1..008bc4f700972feee14a696126b691efadae1837 100644 GIT binary patch literal 4688 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 aVuR<Y-N5d@I|p8eDia6E|Hl7{!~X$$a0QwG literal 10527 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 diff --git a/packages/ui/src/assets/audio/alert-03.aac b/packages/ui/src/assets/audio/alert-03.aac index 315cd68499543be5c16359a1f36a45b62bb17435..bd977d4afb3dac2df7bd4b8c6200f67c5b767c06 100644 GIT binary patch literal 1605 zcmcJPYd8}M7{`r@<(53;T4Zj+*a$1RHkYt5vfLWESK^?N=GJ5qrcB#t$dIr!j<t2l zEw^y!L1ihDOCn^{a;$c$=Q-c{dcOSM-`C&!f8JNL?qv@Z38%!xJVJ3{mQV;34uP6M z#Q?%4-+*}ba$(AF>g-GQ!p3m(a+=q5AB!FZt7sU9|4w6~TWYk!jRmlLgpjB-`r~0Q z>`tPYdUwOo!u|Fqk~GmB_i<ZOnEi3aq?X!?tD<NX#LYQ!)1ou9*nN8ZEN}G1P?da3 zA7lO|W<VVuzIF>16VhWjm;gy2hY!lqUFdDt$-3TQ+JGxVLG!!cdi}!R{D_Bu#HK;3 zr~<FkVbkM9c`np>)-h4jnwv`oWpMmOBxa!ErF%2NfaSQ_po=aa#%`aMj1m?b&98lX zNG^jTum*%??-K;?T&Er4Yka{Lma_`BR_keesFM5Xvp_lXkkv$B#BG>zx0s1Vy;)x+ zKlb?um@tsqSSyCG=0l}?WE5nBvGU27Lh^uyoH2LSK2s8cS9c{KnFsgOxj?4G&kTC7 zwJQjm+^pTH<?v_JFeWQJS&6)~K3hM_xoS!*1PyXlp;Cdd6bax+Z1Xed&_u3}%u!@Y zZw=*O2%tmsqYjG<Awa7v|I#RU{9@XZwklIwy<(H;*CM;vK+nW`qwOdxrt(6%-R5#r zZ>BWm@#Yi`iQWt;_qACZ*7(jsc}C|p9agW=@%7~<x$AGQ9uBJfrteq3#0<nqDOJ|d zEZKLWKQI1iq9J3oGJnoVCklV|qgrBCgbJJsv!3Db)T`X$kYrTeA80)BRx!=s))~-S z5B<YH16V&g$5CdlthP8ct4Bl(f@@g^+fg^m`xb1MCxlpD8ij{{$y&#sDl1<S#Ey|{ z)71o8i1thESa&A}J)jPaMe=jmQ<Y*cS3s#sVLWJGb~ssNbhUJ%G(Nj-MAu)4>Zt<N z86A-Kx~p;gI61**AJIL;d!)MVgswB(z(W^kN@MHP^Rbcd?*)QtZWy|$bQc=v1e-&d zjtn9aC+8<Q#m%z`$ZhraZs3yU{%Sac@`|Xh1+ATz>bQRSdo3-By^U(61O|h<R6q0| z^~rK{(+krFT@cisYG?-<wjNPhWFjKZ8+XN2{)4F0?><;6J&C!2)Q)afB<(nPEd|xZ zE)D4URgpSY2yhiJ=Q|JX1vZSoPrVA6e}#TmedDg;dEzGYt!)nGkgFTs?(u^wTQ;eh zF?2$*xYKL98j&e4o$<zwz7jNsT%3%gQ=^LWk=1Ucr4+Jwkw5YF`4JfiiI4*lnu9E= zNx0%YaW>u(kvV#a!{4ZR7CQ#vSG5_O9HEDpe133{DUEp6sjGzz!_YPt&14-aB_qNi zyGA+<YwqX3INCj#;tbho(9wMD*35U#&Kty`v7#1hxg*jGXCxM~b-(1lqigkF_K#5n z6cnpb!$`^szs%G`LV&SV<Hv-r74h2w%3d<pwJ00t=RsZSgup$nY~C1N0QPzBlm9xF zR#dthoPz76v`F$2_s0eaH2HUr%|uSq9$(9N85bp3Aq@#|YQp51B!bs;mTz2h^4Np> z)8Uhzqv{{aP#2s(dAe|Sl|V-Yp*$rH><PLAd%?K`?C)#nf^A{TdKq4s!vQYQPcI*6 zSKayajeB0z+=%NG&y`ut7`PVUNxZoeU15UWvdiE<FL4ft4Lzw^knOkgdZDqjqq3`H zbN#6)oMYUsfEY)~pEq^jhn9*}qc7V($Yy=x^OxtZU%!puE>kaqrNH|31u`Er_3R5I zKG3f*BM|(GtPQnY1I&{?pv)K+@>Og6)8;#|0R`5q(9F+Uk4#oq)bL~blB37+dve4l zSeVS8Ab~VjmXqm6&i<HtWvx3`zn}XgbofnfUmTn{d>{^v*LPZZUpDhbRbB93nzfyq zg(ZbsaW{_0IbEtSzd!dIv`k6Y5@h_!v`6!w=<*M4wJF~IvO(!evYkr!iX=`BV}Z}M bTJk#x=^OYXQW`(?0Y6@fiq@}9{2%x)nL!ds literal 3016 zcmchZ=OY`67QoGGwno*yDu_|4MX0T{XKfKB8nY;o>k^|@t0ml4g*5i86|qVy_NZB< zHKJ<8u05Mtsl4{SFZbO);GHjLeE$8;In;ft7&j7Sj*iA07UHg=Ag`b%uW&<wM%OWq zN~P}6uwza|3u|!I^7h~ctsvWKxIum*9*QY8>(0|zryj7OGj>`LcD<y%7Npd!5Wi?~ z44GOMterWXGD3F?kWb_!Ar6G8Wt<zo^E_?VbA++XgCxk|x)0sO^w{1T2S<e%0V<@b zK95fp^8bLaubV6d>(^c~_5*R}hUOApDV;vLI*>Z_BA$JL*v<%Su)grpDvx%LR$id5 zKbR7$tuxTCf##a=G$F<48fX|oq>TZp-3w-&`Lk7hd(1MF;G;hhG(Ea9jtR_H|Kt?# zLoO|IhMJ(b5jg9~6)JGzK^)7ySN*bq4aOxwF91NrWzi94Nrmy>%5NJaQ!oUomLeO4 zOcTMB+P3fWc(~d9_y@~});z2>M_$v-MT%bNH{^#vika|M+swPb%0|Mmq|0J7pdtwD z{7~n&F^%gDio+#1Rg$=Ki>0wogkON|QTIFW{SOTmQ2yK;{?X7lAnpfWjIOKIU@kDK z;Y7VXxwf=vH{csap;n&!`&KBhH^V~GecViDqmiM{?XLCJWo~=@dQ=|5NJpF<_r4kR zhRhpOXy2a%SKKZ^oUu7hWU1Sy9>@i4(2HVMT}JU0qX-?8H-AnWgS)@nl0F>Pqsep7 z!q#Z*o`UtvU+8_R#?oK(92X@&<{h=G6U#fO1TWk5pRap{Vzoi~aK@SXZyleTb{BdM zPibcP!k$KjO*|%eDVJi4yswx*9vxlWtS^<xIx|tMxcUwAmU6*T>sc;1metY!K%gOi z?-M|6J1Ms3UBh6`f!!u03A&?!(FH1&xR5gBwO0_f;pH`FYTxW;9^7XcjI$V$B${@L zhDwN=02ISmLCh9uy0ZI=H)Ry1vlddHiDsi1mh>c-zbt(%q*G%g#4$^Vc8IRLP;FX@ zPo-takr*%Zy{*J?wBJzTeT$Phf!T2nDm_+sUVR?j{=F3}p~I01Uf}!}$4o2Z<`zEG zgBY6sjf>QuRy=5@0PZ|!qNOrXuIxct=<Zqx$@_KQJjgmW+duk2#xL3`P<yED-G|{# z6PB)&Xwu^G2DujpCs9wLzn?A!BYQVxKWUkp85wrXm)&(;7YQoxPUM<yTJkZabvVlq zTY{wbB)uQW*ipmT^3Nc3=*qE=XYQ;|OyO~Tx|5Zba~txlLET{4#6+O^E@AhJgOS7j z*Mhoi^Yyl~Ib7I<{oWGs###EBPq*P;z=BiFQoUX?QcrAJmi$#ND^*ra54HPwc9m~C z1dwbef}t8o$psH#4kgW7(3RCF*P}1U=qT9jTQ$NATD5>8s}Y~g#vyOLQ@K3UnNXSv zEFB?CCWqayuC(}4C$qL#MZ?nB)@y1}^{5<?ZDT3p)XOE!BBqS)G7#rtkg@~ZxlGHO z4SZZ^7zfp0&n}ZFG^p${edwl;C)*|3sBb8CgVXd?my#G~ubCKkYNOZ3=f?FWn#ezO z<<Vwbq0i~cua5Ok<lat6fYmUV3Fq{8TP2LAt%szWfHMs%>1;i?uo5`~5|=Un845Sc zP_UE=&XiKL8OjcC=v-*y#}&asB%vFnpKQf4r#nq#s3TC)9`Jk8Ji~)PQ>`{d`+W~L z7hrs$A*Im4J7s7<>Wu>P)PVrYxFJpM=O?MoZsH|IT%4&uZmdIHn&ER{Oty?LH_9VW zAM7;q$cQfo0GBipu>rwS=Lucvj3$_b4)$VA^!lZ1zC<3AqkUmbwBrL>u1+A`f~uAA zW_hY68nK)T8l~;<7+iLDtXoH$H^5Y{i+NHRV#U#{18+^}l|(G@wdn3HBdlD<OBmPv zwX6EPP2w!qC&UC_rU}N(9f>B!283i_L{kMRnlVgR7Te!$Lm2-;U9u8HUCU<e=A?hJ zx)w>&iT_w9;8;J#g#n=*3|qTwfGMSRX<t0N%z)f7LYD`u@rDww?L1Smq|>}oP&{e9 zDe>%SC*4+PE4P#)PE0dFPS*r)#K?~kQt{pYW~0c4tWWR??&LR@;CHQ9ZF+I(M(AKm z8}LnwPYVM?uPUIRu{bbACi9GOh(gWKVhGq{2tU<|6lwE`Y@@a(mns@vK5sauUK-ly zr0)M$hYlSo6BS-11%AkMKA!}e{HJEBza%rGQUDJve_onn8alTV8vwI2qPlM=vgfN{ z&{peA%jib_09Xkk7I9_;d<zj4WbXIjNl)U@zgMdl?tNds$c#F8=BnJ&ov2A1RRihk z+K9_=C2n&(8dX9r*NAe{Xs^sT)_)d1PM(j(>38-OQMRTnA|n9wvP{qF?Cqn`QDZR) z2_5=$@AD6_!)fcgwNcY_*Rpl$93fJlBamYeNW(c$TuM>|-(p+w^kfhp;Okt<wyVje z3+qb7X~mA~%kMjj!%iaaKB$+XLjo3xp^J7QP9Nv4y}!%)yQsIw`mu;mu5aca9a*oB zAQ8O1grbB#&CTqaNueCK3~M!47D><}{}q4R<H+c@2O`tG$f<J|gYmWrV#N4*Ki(;V zBbMlu-eo632$*dJmjP6A-J7Q2Dy*I3=i05cLE{$>!&O2=^zg$24JF~PgFcR*-i_n~ zhINlW*i{}5i=D|$E0+R>S`xP8oa|+p<|+}>ZwR*`osT3@g{v!llKBF>8#DNp(f+Jt zb0GbQ|H6k3Y0>a3?letx=b6T<;%o-hrL4SV^>;HJEH5z2M>bx^7>(?B_GueSz(r>1 zd8!lVR%1)d*QUwNgDchs@QVkTiZvx#=i}c-JA5xV&AZB@3Z6#Cz=9R4C6@)?Z9gsi zp0l95yh`5d|BEnb`!Ve)m+$29(Yn+iL*pS5a7|DYJooigMY?1#KN;S@$gSwNvmpp$ zpIsw{YFQT>6y1sb<H{9U>`#UynHG)-ORmY8XGz1LuU{e>!-|Qw{>j$QI`9`>mO2!G zFvs6`F;t%ByG5NFm%ed2s+en@sDr$!M83-Mam0jek_CvbplCJzL+PN`1IixHg^>q3 z$H#cYrpt<uabrA7u68BG-#+k1-!3TrT~sr=j8sJ#0<4o(H}G)5wdo^)s0g@;&g^+5 zWYL9)t!?qEgU<p_wp*b;kgHHJhjF!?oRP|;EO&?nsp=?cDLT^3-bA~u=q{g1Z+d~c z5vW~taKj1rjGXHe6>uH;BLC+I?>wch8?!Fr^CtpZ?T!OagcXnULR&p;S}W>Ygp!(Y zI4~i^&v22vQE`Es>mL%tS8eYI#~=EorW2Y}Y9gdSjUX(a4qilguyP3a-PbJY9Eo#J zu6{^#X^++zdTsQ%%~!i>TR9_R!d||)e!|NeV%M}YRyE$t=M+C5$>&lYBL9S=<5XUy zc(RGRjcFtR<dRe%J0CvOn^cP^p_I-CsKOoAEKV#tW&-D)eabq>n_AQ0TWvlhrTwrd zbvxUMJ6h49_o?=GTs|4LWrI%PO%Ah5cw65%lzde)$9*R{Wo54@R!rOb!qZN+KQrz* zk&SA|>37&h-fSepHg9C}6}jWI;`7@Aq0jy(*wSJ&VkB1BX@UK%bAo++MKs=~&l8AB z!;)QYLy1qrx+nGP+_0L9eqxYXvs{F7iri%JN7eKZC46}>(g*)x_;q>kY)PGx`upPk zMRzX<{*DJip-yf>Y&j(J1E0uy?61sA#9Z&+29@JSdisaUEwqG%9En9LJtLv&4$e}C x(2E#fl=X2G2Wf!kdj*sn@i~0L4}_`u_Al`M-fOf!p9fBcdw&W4qVWIG{0HoC;}QS> diff --git a/packages/ui/src/assets/audio/alert-04.aac b/packages/ui/src/assets/audio/alert-04.aac index 392413decd5ad6ffdb33ee554fa61dfd89fe85fa..a1d6cdcc71c1e7a69871eae0dd824aed5014b5fe 100644 GIT binary patch literal 5317 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ⅆD^8npg|-9zF1UaGB!Vyuw7YMNNM1N zlwKL5yPhL$ZlI+yADG3~p0t#j^l;SNGmQDIp0M2GQWJ>#^}!$7W>$s+x__MREgN>5 zzV&0NY?0pS>oa&2Ro>gjHZH}l;+r<k@_@u57WZrO94nyy8K!Ae<tJ&dkXV!`mG=xC zwB!2vPTr7=n&3iE5v}D2bV&q$EwX&T$71FQ&YlQ#t*wJ)t9aUE&7U?gGSQR`Rh40! zg*o_Q8J{L(M1MDg9LHuqEX|>VF;zJ$)bm|$`)-;&=kdU<3f>JGNTWAJrBO$m{F9D2 z{46?32qi6+)Z5NO4AG)In|4HsCZN+u);R<ki6=lK5VC$k?r7}xw8qVU`5k~;3YHfB zsR5tc)>d4KFCtEFTC1Ln`hL6ZzQ5V%{jm(`nT!9R71%(<`BbK}qrB_G_{dlwEJVjP zHukEVbJc3&maM<WxrW?)ThBU?k%CWGGigyTK1b8L$=rTAg36YlKJKZceVp*$uedBe z2c_?dPAb=$pYiBbLN!vQmu;E!u>-FgB*B^8eyTxDytLjOv}Kd>0e$b>+pG}FSM^N3 zuUz~zew~a9qhVl-4$JhHxLS6-TC^cEd-Z<!vr(}Uo=FpFb-TS+-gz^*G^;L!KTrG5 z_xSW8Ee6{?mE$}dWXRiTg1GmJnlGtHy6;v0rbOh-MB<7Fe*Vh|iDiE6pWwd7q{xUf z9WNp0flTt(BT@uK<7j1DIVAfHn~~GT>bug(HfXi-pQpD3rUmU>5u3)^3O_HeJiW-# z>YTp*WZbTf@xOdictS8Kr2t;hl+RK%neg2@_;F^W8?;(fB?0u%N3C9{eX62V)Qx6v zP}8}T@uH?&{#}WTBHFjMZk@n)?1wgsJP(w!NW8mAr{RXJ4$Y((Z%f9rn#OwxVBEAy zp~Kkq96zd;Z*WGr{uID}yY)WbGG=w7NvD35`y3d(8-#(4#)(D4T57D2I`?9xKSV<y z4P0L@)@B>VMTC~8SUf&yKh+3PFMIQ9qXSqva02~9Aqo65&4In(g*$q>>vPjM^htz2 z<^b>=5JHk*jrMrVX4LZ~6<p7Vl!Yqs4+cFSsx3oknzt4lx3h9|r4-p#RO&hl3{B_I z>hcZp^%ioxhQI)TJcrA`5{#riIdBm(fjt*S#dMvU3kHR3(#Yp?yyd+vT&3~z$5EZ{ z_}K)w_RyoF!8<el<)+@~;Mqp+MZZvWw0#wCo5_W#2wXQA3*QIo);gexAMtHbC@CQ+ zp*0F(C+b2EX@Dnek$|LkT#L+{CL!LO*a57B#&Kd1T%%_*v;*pjIzCjvujHutpy6~! zd$LFAVprbWYD&A2pxFCu$g37ICBkp=fKOAp&{G&P^y)&ge7<Ka)q9R&-Fw9z(TzT{ zt-*T%`}l42*|I70e*^Y6K|*KP*q}9m_AE4U*M}iNk9bNQp}BK4=uHefW98Rz1UUr1 zP9XNA!!j|>TTs)QE~jenq?}<74_ItgwThd`3#oK}wBxXQDrI_d_Dy{$vh#@P@O8_( zVTYi)Qq5Rq8k)QEB$(KAnR%?F3<q;k+@?+uDf0>5r(4wJrSPvLab4yxYGL|0GLEly z$zQ`{<jaa`p~*;cQBi+r|44F=|F!zMYMZxD%KmUy+k6yXNKl%pf7Dl?;)TZi9gF|F z`TMM_Je^<3W2p4jze|<1oceS_^(WbGZ(D0C7cY+yFUWW1f0I#g{^ttSzYjjDvjXu7 L|NH;`|GE4>yNt7M literal 8352 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 diff --git a/packages/ui/src/assets/audio/alert-05.aac b/packages/ui/src/assets/audio/alert-05.aac index b77e04c6f831671e154c316d3c27a3f7566b7479..185d7372d8f10f28fd24cf61d3be842c424b4d2c 100644 GIT binary patch literal 5207 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 literal 11941 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 Xw!d%nf%m@=qe2<R{4L@CU%dPutcwWR diff --git a/packages/ui/src/assets/audio/alert-06.aac b/packages/ui/src/assets/audio/alert-06.aac index 264d8d82de8a3be1ed943e6c1ba0664e481e7a41..8da19b7d8d6bfb67cb6b414d8d992fd851039c71 100644 GIT binary patch literal 7407 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 L87<cTyU+gvDh|9j literal 10829 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%0D*z%Tx|qWENW*Nx~FNsUEB$w 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 U4gQS7_aJu+Pq3__|9}1XKY_wTL;wH) diff --git a/packages/ui/src/assets/audio/alert-07.aac b/packages/ui/src/assets/audio/alert-07.aac index 9c3c237095b5c70e7207623d37259d5a54867d11..6cfd9533e86239654d68fccacf21634168600b52 100644 GIT binary patch literal 5186 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%0D|lA)a($&d&pg$9VWD5rxOYkp$uisq0Kh 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 literal 9966 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 diff --git a/packages/ui/src/assets/audio/alert-08.aac b/packages/ui/src/assets/audio/alert-08.aac index 099a9b25e5b5571bb2eaced239a25474cb0a2e29..880387150105c4ac3b622d490395c7588e1a37fa 100644 GIT binary patch literal 6321 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 R=)X&D6XpMv)c+sK{{yd<GXekr literal 11522 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 SryoK1_vP{L1N#5}!~X$u`W1-) diff --git a/packages/ui/src/assets/audio/alert-09.aac b/packages/ui/src/assets/audio/alert-09.aac index a3e74b47e6fc7cfdf885ba72a74b69afec9ba774..13662cdd50775a3a690fa24a613a3ba1e252feaf 100644 GIT binary patch literal 3835 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 Gi2nif4rh%3 literal 8061 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 EA4tXd*Z=?k diff --git a/packages/ui/src/assets/audio/alert-10.aac b/packages/ui/src/assets/audio/alert-10.aac index a5a306364bcaf3a71c8adaa50ded88565d7af334..9720f0b79aeec2e592d41753170bf2f3bcf7b97d 100644 GIT binary patch literal 6686 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 literal 10273 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 SVf=4)`~N#?LI3Z)gZ~9QDuMz4 diff --git a/packages/ui/src/assets/audio/bip-bop-01.aac b/packages/ui/src/assets/audio/bip-bop-01.aac index 4eee0ec97cb0501aa9876e4687197ddc2b8b526b..d5ece46f1d1ccdc9b4c3d4b75c47584554c534db 100644 GIT binary patch literal 3065 zcmbW2TRhW`|HnTgXGug(eOU-OpXa!o{+Y8FVG+q;<S>~-giPgpTnwd%Otu_yN^HJJ z<UC7G5jr@vDTgrjtM30d->cXA=5_IYz8~+`i@E7=LA8wWkp-~vMqkrWS5enfQCCw3 zK%;~!E4*3?IJfp~!X_z1*3(^>sHjv^wcXwW$K0q;C(2h!+Ae7wKUZn!bOt<iGJA0a zCYOFR**JrOuI*e=C{#RBje;oHkB6K4OQX%`mR{l`SMY{|C}{XvT>me=Y7D87wFUM~ zFM0m(k;H-qXTE2IuL{!;B{})?)<$_@HX)^89l4^#Y}x)ON<Ym4GM=Z0j%66IyUFFx zY+%jM@$VRApaOs44BDenrC+Mko~+$RUS-{r8kuDyQ_92i`Ij|*XMXA)9Nj(AbFmy| z&0G3)K$HI@MZK&EouM}0D|!7XGi&6U0%oCpMa;k@I!xSL%8#wgC3xzK1fLL&Fr^bS z;Bqsrp{%iDcUwDe&M3KHlmCHrX-lM2QBf}8md8KerGV}@NW2t_a*?Ft$MFekk*503 zouf2>@t}uwOMUB*U6W%}ck=~UI$?ERfK0xa@JLUeoh9CHh)0i+y0pOj&0d?t07;bK zq_*RzoeJF@9@beh`RR*Rhi#;c6$ll^v|rh0+%ny=Upr*d#-g6TLOrHEyT=rE8|Vl| z3#;kZV*M5o*Br&Eha!)`GM2*DGA7Pq2NlZJjn|x664L_(Dad}aKpvsD&MAq~;CFJy z-jEaRBOUia<^s^y$oc+5Qr_bBmw+B^p###1uIUMMRvQ@(UytYOvnU830@4#a2B<!o z8QwxhFNE=xIjO|lnb6Nb{=HE4aP=)kPxlzl;!fi<+F6TSlTo=Pn?SLKV5$;?J^*ER zQ*g=;h^rr5eg>1}9KV0RXlgj*(b~G7BsV(OtzGBBFWGOI$V+i8BDbG2Wq+voRTXRX zjFo+vMd$J_6lL_BljZ&K_FaXc&fM*v<gZGu0!XI^4$`t*^Nord3CfWg);wS2Imtg$ zXBnjCUFuF#?*>m1qWluV*L;|>{9^L#uDVKRkavMMu%L%Ydr+C=`v3(oHZ&cGUvBb* z2g;OfYVpT^jf}9X`8PuOt9!$~&QHV1^IN58N?PqV$M(qH{ddP}r=Ov!MBu8F=H;q_ zus_EVVKRWDUBZ@&N<C|(545>6?&n9+jS%}6f%^F3yvO^wC~Ig!nf|6LVN2ykDbnrB zL#qcoZ2CTOQR=sGbM~>5F}^4%WgmNryL3U)nwE(1%5M6Wzkjmrc&VEP>%Tp-2DX^) zK%{5kn*jTQ&Ft&Oww?p~dkvp@#YJ+~YSaSd-Gy5VUOJsSX@MHw@rh0WTUNYkg5D~r zPTUJn7rdW5@kFl#G7&wLG6~jdoo9(E#=jOHTqQ#uUK;Zlbm2pLhLiuSAyvizzUUH9 z4e@d~g2u=<vs>bCAY$!TXnpgko3-zW<x;y^d3Hf?cy9>j_XSU>Zf!ZpL<)>#LsD1d z`R<_@J@@$L&1^H>Ygsj~Yzw2&Xf7~kekp8NreRl9f{$fA%}V@vxTA^;7;TK$n6Z5Y zU5|S=5Mh0$s;P8+#)}r#izXiWZ3RcIk`}WH7b50eCb5REJsTft6ANVsJ-p}O3EmGg zZKj8s{5@RsW1QL~zF^mccz^8U!tfPU1mA$MZ}rHqr>Bz74*#EpwGjB&hvphsEJD~O zV;b_r9LrS;sU7QRXl~oPJ<^z#Y|VKAeRr5ocopTL+C<FPK3n*g0qbuDvx*`n5FRh) zvJHhaHyIR;lgHBk@Bt+-Kq68c|7pDN*Cq#L0OKWf#vMwR#rF?<WllFoXCGygR(HNh zFd6pk+i@OV56A$=1}PQ*xv?Yxz_Hgn&Hy0r!LSZsojy_n0DxtLV-xDNLq4&>^gSpW z0E{G;jmpvhzGv9}`6c~Z3aE)AIP{0^5hP_oy)kTh$@?rPv6-T4*Mdb=oV2W+IJ zA<>eOKfLL2D=D`-pg+QhFf+>a0|Db>t&>Ze;pZb~BI=dkwH!+JVvDC&1yj9_5iL-u zmd<!cDT+UF(I-hBs{b^%TS=qOgoOuOd`XpY-N)e=x%&=_{pqgja~BJ>9$oGXCU)#E zil}g8*Edwdl%P!;8>({V1IsVD3O`ZMP~}#9v<sd~{;7?RrE#PkTKN^9dzSM*-M2T^ zUP>YlL+|BfoIvG!Yvse}le&L+n==_8VE08%8V~oKzVIa@a{S)H0hY@ZeqACowhd+_ z7BZ$M^1R-91ao)Mu`;hdQKm01Qy$B`{Nhu;?@LTe>CHkry0_}t7{fB}ujcWt3#Oi4 z^phuGD_p-Q!x)Cg;5wt(HO9~`_))&-HJDUVKCjr@pVablY3&-xtOG)Dn>psLb)ESe z1B6#WJ%=fKJ)0HZloZ5`3*)N$538g(*~XHtf#g!qcn2%(;Y-&tA3Y1>eZ1n(;~*D2 zn97K|Vphy=`D6xj$1Cyi*ao(`{jRTcaUb8s{=^?hS6jEGXM65$${`_^Wqs5VNt4yn zyXp}kF`tb}8X>*iJ)>@+=^QnJ2)9V>!TI4U6A=&VI>5&dL&=}L-&gD?B^oA5jMeI! zY9kskl+ic$4Q#)6-xbpjl@ZDNY(3GkOnuYTRvCJ9GRifgwfcu(gva&=>c&b%q5pX* zemm;;96T_%+so0h<;@}XXxRDAxqe5}uxE|u1o^Sn?B~CI6LwTTMh}>#d98AU8p0z6 zf_PPlr%Q^jTFH;gjZOF2BsN)afbU%I2tNN5n%uUT4sAKwtEv>mV!Ni?tStP`hptE` z2#40u4R2lB6sL7fQ=L6Z)D>nP3Og=WAn502UJ{K%2vBim<+Bu3cMPs~(fPAyNmMl) zBY6{5fUQa+gh)=5ouK_2=vh#=1+q8HQ?Ojjmbyn$gz60?Z?xMNHdZ96nTh=kVin2X zAF5lllO}G$-EG>@P6oxihldwZJUfX8JH+VS16r)rk`9G;{ujIW0>HOQNCz9d-^Z2{ z*KR`TvSz$?Jpu-Hh>Q50MPq=j{?F2&rDmbP_tynkebqT7L#ZRnzW5Ex;P>_%S#k&r z=MP?8iug;0SLPHYqnMj3=R;|wMOxMiS2V;)N!ej=FyljGzmvlnB!_YWQ3SMd>VOdi zgWFClLR5iM7@f@LHeIqoHm=}iNEMIP{in(B%TFw~C>*xOBG@&>cx12>Mdaz)A}bO7 zN|CWrwITPVj6r~Np#|NKx$~Cdf_-Z}X_i`k^?C@%y(5R&yH`jtzHAW2IBiqhz+k0E zgq9=(?Ga8<UaK&<7oje+L)r@T)}izG)F6;LH{ZVZoYv?(z88pHI0jr8J=2vq%?NMj zk#oicRgz^KDUm7POH~ovcc)=-Y1J_bq|TKEP5l`Qwnn>|f?BUNnCaWUi6}qM0M>PJ zI#o4icKSEwqF&(ll{fw4LVisUZ;Q9pJbmx2aoJ-EhZB9rs}`m62v2iAh@9oRAFagk z-54HOl!4BJkGmn4EyA*dKN@9YvtaTv4*Sl7lA>opxnR!HR?g<tH?p%=2-CAyYz^B3 zXZ)tBd<EC&$XJGSdp{<N_ic0?$e=x)RYP1TC|y{D6JT}H)D)adZUs?(YioY1rkay> zG_uMkiq#M4#}d074h98>UloXo;@9!>jbiDVJ&wcS&dkkq{TATi$9h(zpPyD#>~feN zE=M$V4Mh&@E$W(ubycvf;ikA|&yYoNxE!vzx!FJ;J^aOPUWwy)T+RoswcH*tUt<#U zm8iU;4jY>(H+OlG37o*DebwR8eA*#?otr!0)G2C`iQSS(Ft_}B;PF#D8=LYGH{)-a VkQl(C6b5YfpPJ=A7SjJ``yU=q-HQMK literal 4303 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 P-v1^6_}3Z4|6|}k=|VuJ diff --git a/packages/ui/src/assets/audio/bip-bop-02.aac b/packages/ui/src/assets/audio/bip-bop-02.aac index 41c67cc5080e16644baef98eacf5b1c81aee18c3..2bf272c1ac777baeb2b0130501c47ea4050b3f30 100644 GIT binary patch literal 4011 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 CEx|DW literal 6187 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 diff --git a/packages/ui/src/assets/audio/bip-bop-03.aac b/packages/ui/src/assets/audio/bip-bop-03.aac index c7919d111b8fd488ee92d69ffb1ae50ab502d4d9..5011f12d1034394a1a2e4c47e2e01656defcb001 100644 GIT binary patch literal 4385 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 bqK^OZP(T5H`~ess2mkR<KmmXJ0T>_$CI{qC literal 9747 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 O6yr#eztY6NAN~(k7H;$a diff --git a/packages/ui/src/assets/audio/bip-bop-04.aac b/packages/ui/src/assets/audio/bip-bop-04.aac index 71d21c37eb79c46b210ea6d90000cae6652c7230..af6fd3c0a3f290cdb0ffc296dc0b08968fd6068a 100644 GIT binary patch literal 5578 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 bzZx3)zjGJ?<ci?o3duk1ZkBBS|MGtTQ7dMx literal 12327 zcmb7~Ra9JUwzYxa5!@}f2X`p~1b26L4ek^k+}+(hxD$fA7Vhp2h1E%aXY}d*`tO^6 zU+wp9kFlS3uDRA+kShg0m7JG#7$_M-S7T0=FDyJ?SeRL$gf(&?5XdDIEXQ>)`c%!r z!N$SKEhsD7^uc2?b8aZ9FMQji(V@MfZx`d(C3GL!?d(*ShZmZZg<?So;Va9}&+K6= zL4jdIq<Mi#m6_#F#2b{WZInT^Mx<$$451PZQNz5oL*MlPE?c3l05!C0^KaCr7yRg> z7Ge9XUm0xk?H16xZK9Banr}k)4&%oXL!^*s>OxJ7G2&q`ixQBAct45AT4X8Se_XOa zpQoHN!rFCGe9u{thq`{t%5S=Ro2mqB$vKo0p`G5sSr}^gq*VrVKx~uFntL3}#%-3- zurtHD@pf6q3!qP5d$IpCLx_EWE#rdPKI-X3OuOopFL^N$cKSG*y5oYhMaffryONI< zjnza&f?i{Jx@3AV6cM&9F&$q0pd;HaL*Z`gjW9+rLCdgz<y9<Bcb28kzC#?QTOp@O zm$uGCk8gDV-($`zW6`|NB}@>aMEQ`xW+4KPuiE&S<VJ84M#tEWloz6+soMC^?1JZp z<BH#2kzUrg5YF<8x_m^lPrb0f)Y>+;=J#m8c@qA<?J+`ZWRM*P_Y%*1)>?no+|okK zHdQ|l!EHku-MT<;Iqjli7B=V3XxrjR1J7gB*r)`Ja6BWMo!t43Z=$BMbz{_2aROtc zxyT0_v2%v=D(jZI`)s}Y>SJ5FfyRVuhD-P3v?A-Au;x<^9@U>eIS-`+CX%8WZCwgq zWICy%%lB8p*9({wm3bL~4piK8o0D<fyf)S{o;Y404z&)K)KjW*qYxy<Z`N#Xwex!> zZ#=1YIPMf9W-cdJbcZ4+eV3^JFHb#C?+l>+?STmgU4#1WbD_G*xFLTSwcU6jm9uI0 zhakL=T&i`vL$M$@k3>_yC3pdlT)YCWL)03-wC+8<S^+uIE^_Q=U)v#E)K4}CIgsY= z=QrTe0q{s=gXYtdCoHu7{9BaT;={8La+h;!gLyao=+Tj<_sXy7`ohZul=m-jAH*h4 zDQ<CX+wwrl*|%zT5B}r(>Yt`->B?amQ(eRm^DUV!${i+mMt&#g?xt8sgcW}9a)rIy zAU+HBDVgTza`j*HRlMTBd@rFcL76va{Q0-%To(a0oJl?@)(1iH#r2HhdPM3iNJYrz zP}$e+E`<BSAV3eqOITBFvPPLRmMOWyvR59!=Vi5*X#!I0C()6?%HPv;T(Rua)TXVp z7z6MIv^Et;#=$X!#+7F6*1#(rk&%L!or-mMcVsK7p){8L&(CO?!xv_Dl6D<o_k}gQ z;fTdTgmN%AQh(t`?gMP){Ze!_QKQ+Q@}&g{oMBl%lGfBHS%i^b$}o`!45OEMXW^ST zCrjqw3zJE#W%v)0ri{lGRFGBK7FdJ?lrfwcsh-4F*hG3yW2u$06|(aLcu0t{e@8q! zj7tL0kB}o<(&IYXH%RlqnDwD97$6$#$9HpTH^#U_<F@5%s81<9??y|xMAoB{NzD%} zYZ6)`{w@}pGFe4~ZgVLY^RcPoj@UGHhzpYlpxiS?Lqw9s!+w{A$h=WBa`<^z7y0XV za{bhw36=;tCNR5OS4l$J+?{L21jW<_%jR`x5Oiu{FEWk7*i>~>$*pHJ^7t@&S@kAR z?aRGp8;m6NQhGS+i$1Rt$x~yYaeoTOclp6rP!7+9cTsx9BRfYiIF`#9KB3;di(b88 zOb!8)s7?{l_oAF@JjUF3?i9&t&*7mhIo8rtLHW*pkFDu2nHP<aI0IgjCl!YG%}#z` ziPh^|O$3@dIp%}BtRK~ziEu}}!+u->P0*UJ?AMRYh@|M6D2k6mF+Us&%Pxji!-W^v zL#a>$;#p|o`zEQRXMQ?$2rK9t_0|asD}@OuVlrfkXy>(My%H0O79_%1G+(TD$A)Qy zc%zIkc*|uLKbX{6QvOKi$iMd|?mW5{@FDIhd4}jet#WWwBuz4bPL#n2Z#gB;Zht=R z76G!c@d^Q)-gMu>yz9#LhlT>22>si=gChLLZIjY}A@!F3Qve>JVDw(mQ9B#UFQWEa z?rvVLw5ryV9MHRQ)XBb`xTUXm=cZ-Ub`Xf$RT?{#i>bjYeUdhg&C;ZfaFK@|U3<0W zs(E4|??~KDh|xMz>mR2u?Fb7?5P2ko<u`u(@f&1r;Sc#(yxa&9f1tj0HcL+It=X>s zs4ZMUr$QmBu+w>`O8ahkZXmAJPTogqAe@ih%zCUH<zxz0nh<mijQM>vhrEiC>5ee+ z+1Y8ITp6j(2@m!V{L|XCnhPy_=sK4n!~BXk4qj^huB&hKGW|^zo%qLDc)lq)QU5WZ z^$u|<1mmzh;xkMM0_D7&^IOTPj<WkV4el)y%cFUbfLmAYt(nbqUM;XnsISkABVsKS zG?f~L2?iq)on%DFG<jz{ZF&EyWM4Exc(`)yBSst%Zj{i_v=E-^k@;bYv4Y&|2+pSO zkaGSz0bC{&_<J%zT1AQ6NhWI6ufv{#A<pK-J71Xb(Xbbu3ccjmn;y1i!jl6|EW61q zBe>h=o4@Ivnjax6X?<w$aOATTUb4Z;6FU<mm~Yd%7{`G<!+Q0OOy%K?9z<;z^|jTV z8}^m!V`aSH4a77ZUKu(qHNyBYEbhC<gWfO~UzRzXlTs4S`c0iCy}}y8>ckL}wUP)M z+4Fp5iJ4R_#_Hmk{#KC&?;S;H&BIzUXPYhNn|;?<1i;O1NKdSe9Pic&J8?FOBO70` zM^v4NSmW8XhC$!Ce9>E;cN@6T@dUrQSE*e{wS?(M{5wv6-aq|=D8)beP56IAAr~x) zG668C^me*WAl*?~-wKmBHcr^os)#}3kN2YxMYgX~%4FYN0oXS^69Qi8s<#V_`K|Rs zJH#FkodD45@D6)VXsn5Zo)dco4?cE)B5HK<%Qe6LL|e=WS|-7q0Pg|<kK;Vo0e6u_ z<|)Fbol@x7x?Mw4leUTi7Lr<<3zG2khZ6Bn-y&rMpkzVl>8Gg|Ta;JJqpLGQVA#dR z);F(WQ|!l7-e@yuQhG?!CJ*O1MI|z#55gEmo(n|>M%w<+S+wYJdp6Fuh*AM7IckqV ztk5cq$CPMk=xG;R$FlZ5dSqAcLjkh+v-au%*+`-Xa~RM^czKf{3UXm2MCSU6(tIi8 zyxfs|)5^C##dKYp0_2fH6&6c(eCM$bWAl;g7GqFMoK$LWH%j&@_OqYXIX0`82g&BW zq2m!QQdoU%kC~5y1zkUGGkx@?$WI(1SrQ@VT=rzpYTm9G_ae8>v{I}oAdpKkzE9CA z+s`=dm8m?UwKrASFZfj$d}7y|Ix~K{3Do{XT31M2F;s$*Vj>zn7K7NAb-kwTIJLZX zMlKN5aL+wBG*N%y@HKZ1V_4sn(KmLoXtB$4-L;P(MVanAnZ~Ak@5hQSM>YSX-@XDs zd1Dz!vc$&QbYxUmpN~M?{P>+f6?5IqbSrJHapJks8s883yTaOFqnOtG&$yD*#ji)! zaVI5XB^3w8+I4z8*@I*ET?Fc{U-k~?7(8ky8#Nx<1dO$UvNG~CD>ZI(MYex_^aa<T zb<Kaz?Bi6w>RQB#n*9lf)BGNzp}ilo<pqF~6PCc_uyF_37^otfkxIX~^ZPrE&^`a4 zQRR=m{gXzmSGc0ZP&x=!Ctc$L1mL3_qocbYPuKOOv9zO_f17*b0Ta`z<D+(QUXv7C z8<+|IL^TT7-sF0=PGUOz>!;)?k0$OfH55A=3BI`aBp8O11d+b)=#%-75#uHcf0JL% zS<CN7o{vNHEmQiO-%$cf%+-opcD(G7^GBo#-*c-BuJEyi9`lw<fjc=6@}Otbj@@3e z>A!P#)Y>oJZU{b}P$$++a`;Z#=x%2Dr_+!b^kpf}V>XrFopOd@I$04cI$C`H{L+ce z??-%CelAcjBZ|(CO7gmQqM>x+6$nE)M|eo+ZBzC>$7af;*IB($rxPb21Lti`KpUmX zi{yOqv+s|HHS9z3=<IED#;uf6XrE$~Mew4YNWQPzS-anBAd!c9*#X01iaNmWC(Qc~ zP`o(Y(@ZJldFm9hOM;y~_^47%E$}oC8AjFF(Uha=!?`NqGYEV~Vh*A#$|;?nBltgF zXn{^~wda+sR%$2n=r7IgS>lW5G+a=c#XvBRkWg=bn<P#JxDeqYDht$Vqt0Y%tZ3ir z9Jfr0A9tfCsmp>s$))R+DuPn6#%9XGlDJG9%x{!x<qfHx1=szt(>7mnl4{PMZt3zr z4l9VXxx9Hho+}<TYc*}G?s)exMA>h5Hean?>0s;6P^g`!dPN}jR&dT6_`e#R;~)XE zT!_arqR5*Cx1Hoyb-v)GOLK{B@&KRIo>%k)BC8%CG!w5{k`Fb8*j=w11={60F}-ba zk0TrqdT(9Q=yPA1HUvi}pq&^#{$rp;sGx5ubLBT<^O+aL>Pr4d5VPw|$DxrNnBdi* z*v~Ls!<QtyyWd`_%B6d9LuChq<53u1^I!E+x%*#)>b=4iE{QV5u$?`u=sHcFy`@mJ zwJN$$`j}dei)N{AcusVmQdy{^JD->J^ALTC;ox%9Yqor|wUm5(mlH$TKLsZpemyCV z9!NkUI3KWv!qv}<%-ztx?JPtWZMF*Vs_v!e<8qtyC`r=x(H(Y6j(W16dbJ5!+;w1j za_w*Xbmlz=Wp@iY<D(}IG`Bg;<PVb9DdGmclpO`09&YO-m3q_<kkpI@3<`X2-1YtX zVwZY_$L}372=7MK$o0)fONB&j-@4UBCrocfb@-*+jpU+Qa4q{aUwY8*S=iTbtW|~o z^t(pPIt9pp)WRQw8?e?SfmD}ynlo)ircQn8fLWt8x@EKF4A^~zwD5Uh*I}VgtUL=8 z^M4>giybXyY!mP#m!T;>CI1pk=)RW)?_lU(GNK~3p3%=~gl>famm%Au@{v90kX|Y) zM3rZp1GA!%6KCnuZGE7lqFMdwnNxVp-0<+A;#!y5b?e^F*T{P4APy}zL}`T022EQm z!>ZYe4v+NJkZvCgEo6@Y`C3T}_3`jz5T8yH=N9vOko-pq0fzH6y#}LV>Uy=KL>74> z=yArTvLp{0z>ZH+?y^)(>xA<<*6%ORqc1lC83g-nmD!9<mg)A~N%gyr)_S&sZeJRS zeIlyuK6JZioT#?sPppMq98z-SJIGG&rj_qKHz^&Ryq>7iDEoqY^@MdWohEL7^b8C- zzgYTge7D_08Pkwg+18RAuP<c8EBuM{!tshQtxVw2bQrb84g9!gH}gg{R%9?W?o$2y zthw$AH;4SpE&t<nx|n9F5J<*<n|_4n@aX$r5Ht9@d_sNyOFna6NE!aGm?Pvb1u=mp zIjGbLUm<62!v{G;va0iQ755QI{b&2uzHVc0+x0<^GhplPO#<2jfUSQMoG^Mg{#x&( z1@d#D0)8_Nv3zX3w<OPvO_!ov#nvAf$9scK9aoOoFxcObJhmV10qOUE85)0oiCY0G zL%0G5(>zmZm2DWYERog2$k1@P=*8QGX-;$)aHzG8hjrK`x;GB24Gj4LlnJG)=}KdA zo*=P4!E0;mzf<315}M!es_X0aC5B1)W;}zMXw}%3^pNiHG@8^ps1B-Zn%CN7pxg}H z4;@=*;#qW!9}vM>i$_bbZ2g0o$;^~z&{uM(Sy^Puh7*-3y&DZ@R!xO0To_+%P*>Q& z><jqwij_#ICVtOEoM9~qo1v<vsN^>H`_1?c;$<VKb@VAACZd>#pMTg!(#B$dO4Lof z&>6{O&Xt5@#Ve*}+g&C&(9};_G&yf=SK=Bx9o3Ia9bChUGmVVKDk|!*vP<&l26nLd zS!xEGN=Of9qioy3tfdA=do?v-VS09I2iD~}%e0GMD|CLQQvY-c;6#T9pcJqGlL-RN z&SCl$4MQxWB9X2N-dk((zAtGn+vSY@8VUkf9=V&J$_nVmdlcos=V^6!Tt%9LE_KVL z;3Hye^tvBe`T|*;x~$3%-&8F-UbLcp9zw>?u~c@He|}h?UeVUqkhncD&~cKnAT(6r zwEKCHF&QbSf6v?A;PN{pFrI<&rpWP!d*_zNq@LSOzTJe|7ql7c6nRT^Mxsz9=W=mC z$Uc$H>vYPRkBXcLqhQLs?IB^H`y#TOyJ#UL>Amw7w?P)J<BX0kNyOdFxMb2G0Qd~7 z_c$0-R&{Zqd(HiCjA{Y?3=9?_y?+f1#5XX-^(XAFeCvH)9&<YFM7O(t#@IFT9v7Jb zAAy4qz$}FRL~m#Was-Kan5@}|8Bp!CCAw7*B)SiP`pSgrr9tIZTStaYI;hI7`5|1B z?d#r>OB3dG(^4!9_DAIq@Dx$!%>8Bib4y7yM{+Rp17zI`MapBJC+%Y^9ho>b7P;g_ zk=5x(XTf(z+lTskymM9~I<$j0KnEDVQMpa$MJS+}>dAYkrng(zu?Kr6qMprI=lRIY zM*KN71~P}-gZ=bx8gYiG(GjD>VP>3UWC?+|38~)<{U%ie0uV{5Xd)!7u{B7HUMeN8 zg+J)P1x?^{>N()R7pG~=`1=Avcc$-?8yD5^=oBTU73tusl*v?jC_+_K@E+YSv(yuM zV{^2AG*Y;fH$#?0gS1q+>pf{(t~8;RRFtMog}BO6E-%e37sI4iChd+_>%jocETlu` zQse-q3Yi6+QRxMn?-uPR?k}FkxoqqbLW&qv{E4$DT2T4W?`|Q3-W+=@;kdI1G)_{u zGZD;f+HK4cG3HH+1T70Z=7|ywCC$$$5I+5zx3^?}x@081EWSWw%IbJwjMsir1|l+f zQBSdoOb_m$-~0hab}_MjQh2OZ5~;+9Qib`h1_>(Y?D|>7PfKV*WK-xm+X@@@nUNX| zv`C2asfdZ)t`ruqsW9XoIP^z_nY{L!cK+xrg8Fo+VZDPn%llnNPYkD@`pL+=n4)}m zInt_KlN_<m(;fwid!<0X%`n~to)(H(D;5$5NWjC|!2J%eQy80V4MQ#(O=f&lX)tzj zjd8GDR3B>QcCk5DT_eo>BBOh{-{)iqQ9T*OVLuRvE~)1CeELU29;2@h6r{e;_IoAt zaw!7|L7o9ukjY!f$P=g*@C4a;y*YW<x$+bD!9@Atlk122ccT9iUDZF1;GaFY8W<+F zm!^s4Bl@pAZwK2~2+w3!_h1(I+5OF)J!4)j2N0tl{c_%M^$MIkdz|38dCL#?|J`+0 z*jhn(=-C!uYm9P+k)#oX%sNG7=sf|$)V8N|PExw3bf6=Nd<Wbc(`YzC9)xYUh9VY8 z6bl|!3d2R+!!Upz2}qEV!U|Bzi$g_%QOW(7K<?A#-oWfQt*eZY8e53Y%;4ZWzA9MK z*XF58J?CiY@OW4cT=1h5`XUK#3xy5hO>JVU!jc~NOt~hUva+;WsZvLkfKjV5Y91f@ z`Fi*;IF1Kt%zXP$!LdYht|xK)uJyahFcg9FO+^&jlZ-gUp0H=p6ho?<ey%LIdqQF; zAm$tW+?mL-(C1mtYK*NqhI75zqhq-HqZi1}6UU|Ap$#kz0ce~4)t`<8skBNXAQOqg z32e#WsLI75<Z|Y6^pABB1DB@ruT-Ohgc(`m(hF6g`QdT(wta|_1-X+ndlaPHBJfm9 z3BCR8v<m~JnV@97Gj!os{D8WQ^?+?9m5a6ax~xxBn};(pPA(Vj`)Go(Gy99TNA`L1 z!$$tUzV?Nj!+}j}`D#a1jYq#{D-(zeTV7VcBN`%lddkIPAoQ6y@=WBV8Lw>LJP`u5 z>yV)oa%lrUuo}|uDLUJ6)w@g<c5frIqVsEu95T3vr@s@0VSPg%*vvHgBszdSawAm_ zBL&dd*Uwm0+hcqFq_q=Foafb?krn`A#3^-NhZxNtc#&)x^6<s9x`dZhY1Q?W8s`$s z_%w@<2K>O2gj?my4}|X>Ry4cP5UU-RcplmBJY}MJnApNbWd1$+J!m0AjhcOhju=R* z_{SbZGj?|$@H~JXZ@K~YB;)%Do@KKKmw#vVe+Njakbl|NzhFI7Aoz$UeDVh5N}AMt z1HHYzb#(ziZ(h}O6xoxLCr`dN^f~=+IR~v=By%#8Q{Om4J#hMdId~<ASa(d0wkr)H z;4|owzhM?aBkw#HN2SFjiyazJV8>f>YEt$!OYgPCHOAnXB__JNM!Z&=F)b7mIFfRg zW%&<gMM_M22PZ_WF>%MEWlaecHe-r@XJj_0JP9kzec!<ssQ>y<+cGmi(ITv*m< z?CRCT=yMhaF}U2w)#UVMNo&5N3JpiNxAy$dVFWGCIF^@2V9iGKY>6EZy`Z#&$jvz* zWYQamts<_bQbOf2GG*c5c!Y{_c^}`15E@Tj?jT>3CeDO#JwH`nHvE}ATmHw3?!ji^ zXW_Lac9R+JVwuRdak4n~X>K+&DYa?(Rkaq*>_V)y?JLH{nEmp@6&r`~!gW=tjg_b9 zvDy)rHD@!u@-H7a8W}p*#E?Q5S>%vc5%7dvLCSIqnFH%MfH)kJ_l7nn<<n(*w&k}t z{9$jLckxy9QwxP~*UR+vQ<766rRZwlW%|RTsZGI2ELHFNDb?jH?_V6HcYs@4!98Z= zU-hPVoG!M$oemr}YK#b(<(pvI-L$(8&Mya25mtCTjobwtrW6p<Tymm$T)pOU(oR~{ zopSR#pz$2ooJpHom$s?0crxygq>HLVfA5TOL78pc$GTytc{%sHwIFc5R^EeRO`Bk5 zy;d8pJGfjLtP}F?INtIGE7J&1jH<)H=L^ES8RXwfPIG~Di*skI*6Q0ASn`frH-v40 z2|eb{9IqmvC-aZd$`#uTugX;F?Eygx1#n*y)3mm1*M14a7hJyR0w?#cTTi-|AsgKw z(BKnf(xqQCVF~;y^mkm}`TfJtYLNU3S1mBi_uexp9DN`2!ExDV;1$G6a^qs#I*s&h zqh=$Ui3{KZ1YRj!O&)Tqi|+|IK!464m#`!(`;cksr5-%ob2p(n=V`q>gsxg$kJclu zBCXbxhU&r0mqHqF@y+an8R(Qa?Sgzm#k^_!+%GhWs#&fS2dF!6m<T2%yTa>z6(_iH zU|S&nXz~s!Y?umpFsueJ$yC4_Lxo%iSYX%^L`oD5iV$sqz|qR2DAM4Dz=*aWPgJ1- zd}W5)^->%zSz)-yY0-rm0%}NfEkYdUj?0HKht<*PB^cx?zTzU0b`vpR(Dx60r!-l- zJRvjbTg{PZ_^dWgmbM`(^lO7xC?HWzNKo48j8#PW8k{fbU$9{+oIppes*QIyCDB9t zqw9t6=s5oou!FwBd7Qyc?|z~rrX=>QT``su{?M7O*SSdl-a<1w;#yIoU~a2*pIni+ z^RbZR+JP|`b}EUx7`3kT!{tPPw~bF7ngbn~sYZWJ(Y1ZfV&Z^vzH%~)?$vl-@o#!V z4+w3}hx(Nwi+~TBj=M5ccA#d-T1!O1eIGG#0sid1;Op70?&yQy;7UGP?j!Rmmr81d z(}|bYhk4o;5w7PC#-)#asRbkmm%el(I@R!O3<c8A;oJzBbKytrC=1sNefbogO}~y2 zWa+~_#WBT31yFDeo3Oh<i3Q*o%!O<GCTmVeOT(9V<>@~&;EH;k?0X;Bh#75O+d2N| zl44hL-$8H$h0*fEMQg&u%TAz;Po78fPaK}!FW*98=KCUi&ALj+iDVu7b8;%@+VDr# zJa;5#2}plE6dIlNHsEc2tC1Q)*>dw7B)xMp0`V3WHO!P#WF~Yn@r_Vf;#&XuGbxCu z>H4{|U;Ntr2<a@mc(~#ii+#EPo&TNR|CL*{zw;a0dnARE6H)Htc`^A4xM15^s5VPU z>Gbe=<2kNrd$GPbqpD!L$6yzL{mmoAJK}5>o>8|kH~{SFA;%zG4Iw-XJ<fw>qox;c zuHVhMWR6reiGx1}t8s#7vA>6+rfKr%x`;bme=?+Maot5%(2}@1_@y#*^=3lxCo2Aq z&R4HSdnz3rW>dWJ;>ZyEK!DQgXhH9QW=Qv)Rt@G=Z@npY?qcvq!uto`-$SBpa1Ss> z#PWE!!@W2G@wJjr6n;NwWBB@WqE5j(p!1$N=seKr_2p0``lemIG)!)Q(0545+e~h) z)8^rGFARI6gA{Wi%vY>wlyv?Ax|m4GAm2DkCO!ay{06<EW_h}L`VMb%Hd3@W5o|Sb zBy1>s2W#$woAH4V18bTXW94$0tXPGxS-lP-xp4#G$o{OMyY(kMJY#nzPF<X?!?b;? zraG=*{W!OxGU1t}mg=CH*0r4|C{h?HlXQZ67xrT_^vU-klOl!_<vAEIBIB{wyOy+% zr*sj~4_-y~`T0Nenq3yAEhx8wB4tMCiyRaKBIeewT-6;Y_Jbu91I^I4p2a)O$KQlE zEg^$JHv?pv*ES@2@h;J~)RJ?LSuE>g>K~Q%w8bu=%#%-hsQI9%XbamdxwFd@=eXUE z!PxEDtP^EUEjV8DJ#B&EK1`D~*ygFGKZJx1gFLeei_k{^Qv+`&P4+exBv%lw;Hca6 zqeKWs()KNi!nhNmShv$kyLjOR(9LSqU9ju<Wrwy7I{`aeWP_S7!fc(>a<1(|sUmCS z?5C$^4>LBI1$A|4tNs^)U@chLU$K?ra<k#NqN-ocHkKFwDE$Z9$2ofKHxT*fvB$fL zw4%KWJw1rufAG5b554_&d!PqK%v-d$$9i8Q0O31->j2s>JZ=|T9ZM?d)f`-<tKOU) zoIRNRq`pIMKzuRat@O4<5ehHME?@*7&vj;?hM7AJ@OrTcN~uU*GWN^qF-;1@tk(}& z9|;i-yG9Jxff><#iG9qoWH1#tqJ_=W-ZdZN!8R)(?uH4Iq*MB#a+BfZn7V!w^|kyg z_Ih%isErt!r8}rd^&w7V1XIyU!C>G?Pld45YSrU5qAw;8Z26e_NPNNzUr6{ESw7}D zh6Fn$Y=)BY%(QhXVgfx@Iuc$v%Ny>G1|9B0ts3VcKpiY7NJRZw!LNdgl*qBv?c(xr zC2Lf(*#|gytit-Va^5WLozQw6$JP^YQzYStVE$FDq*P4kk2h7cPOZ0a7~wCA#ljc9 zfB2BYxOPHyUKQ0|46c8tsE>bJAY?KYH<sS0v!LUYAXUH_g@4p+;8mQN9LZ^9e|=Y@ z0u7&D#jH5<wZHk}7Zh#($`sDy7$R(Md)4pN5gFthQC|W@b?!g6`-G-Q6yNt5Q#X!X zOj0^4W$3zsqP>wH)Qu^3Dp)T`e`{|ugT1{bCZXUT1gfiuedhvch~=iXQ~OF4f%CQw zIOFt0nzjWI9y#ng5j4BVexLLEY?z_DhJDO3^}o!3la$$BC*B0_==rK2?<d<1sk(t* zv#;0N_dMiPAJoHEg57M|3Vnliz8D`}sXf_m-X#zpg+H%zrG33*5<qDNPA_!xB?=>) zKNHuS<gUZ7-_yKD2|om4Gop;Fx@?r<*5zu6MP|_7@Q1L7yh(2S;v{TwewSiSkMpEt z<SK$IFipqhh82k?Gl6BBD^<NutE#N?@Z}G$plnFi15gjpeB$k(%;7>&#-x7p_#e3b z6<(?QX}$g#7wCau3zkZaa5gr*1VP}PD{7Y8WvLP(0dFg*{mzcJjY?HLpdp)3%q(M% z&W({>Y|yos1%;n(Qm7o2npj`+AecnoWZ!~<_xCfV=Y$T@w0SoO5l!{omtQI(RB?(1 zr^rKY8s!*94G-7PI08-!YA76L6X>>O!PA{(Mk%~Z&<t;F>uS!1IEnERk_nUtRqCWv z!6u}0Tb08UKu;5d%h1Zk-lFN-%HZc#=EhRqK6;EJUj~_>^+wb>aL0@qQGS33q5kY1 znj-5>*%kOHet?ADCt=Ce61`XlfshKGs5r*Gk7fHinVdxcr1>KSjW)8ZC25EW929&> z88^?iJ}jTp=vIH&=iRw*s0NJ_w54FGAT<TE33ah5R#_qxxNoPUG-U$EN3KQMTv5V( z-8M+eNSi|+s2oOlnFTJtt5Gs|-C_8YGsrW#B`WeV?kf!MS{OCW*2QSlmkd{;hqwPp z96itWz`^8h%Q7;VP{9p(0Tb5NDp`EWvR^yLWerQ^RF=uTq%8tgtS0-QP_La8#+1;h zRs*7C5TT=y0)Luz=eT90<4DZDdvsJeNhySNN8Dp?h}a}9?BvUFdf}Po;{3f=DpnQ4 z2~m+993h<P>Dy0Ly8ER{ev$>(rB>!{IKe`Hv;li^HLnZtCVgBkq7aDSZw3Q9JO!|Q zq(kR3-dHQhzx<f7XWw1JlUNJxUkl_PV%64FL=S(`!OPG2<t*yI^vP=hdqd}Od@Es) zyl{qw53T}1NKB(<`Iy(#x3}$bMmJSpgY=0pzjNmL<|cw%Sr<ciiQ+K|P`EZ>_BIV` z)AcgbmXX(Q6aOb-)d%{YKI<RE{LUPlwWP~*zWc8&mkQwDA%)KqI#iRw4Ss+C$C-RP zyQLtL^Q@gk=XZ*F^BW-F={11v-A=^##yxriZ>Q=n36?N*dO1fhL}_H;Al&$*t0Ghk zIQeSd&(5W!>nN#eb|G~wt8gM}vX9Zoc@A&UuKq~CJ-+K>++UA?%+$!uv33O}(iADy zP0DztEc8ckLrj$q@l=z+5+gGsDWCiC6E4q<F`9Vq1c;u|IUt8Uc1p;JwcIh?T(Td} z;#f+96VJ?U6g5Le7q%)2gO`b(MtP<7V{rxl)W5hD5<NH*A7nMgCm1^&giULaumN1N zOCcJe7afNWgS!co$i*-Vu%kv=lI<n5K40&zZbh#|a<_0PL;W0PD1FJ+pi3E8Zb!xa zYT`Y<`c!44jTo%skbumhwpKRXL41XUXQIvUcmZu7^D`)bH|<2o4>=1}2fIv*M;T-2 z+{O&O9Q97Z78BhQuG$H&fz!1kB7&$9bT=OIp3{K#^|)7dzey`eGhnF^ks;U3jqzhC z3flhuc3~tZ8_|6Z{#(XTiIb~t7sZG+woW_(_LsDR-n3n@*WW*~5^|tPO@F6~Lk)D+ z(7&;d2La-1W?T_s0QI+;L<p$)1Ku(3bV0RZ>W}9ZovJ4|dyDYg`$QQk5+tKTlj*{g z-RvJRmGdi%9M~5XcL+H+(?bg!c!)>}sx*w=tB*0UAVOMgvM^dG@VTO@?PW6>W<6$| zV?MbId0K+gY@$<cA7}cAV~p?k!3j2v&8B<pI>gC>g6Mf8>}4MgEXuJm(sjccu1cS? zeyI&{#pj0jk3J>$o@UNAY0>LALDoX2Q}3l?`mTH+8#mG$HTE;zH+M2MmR_AI>Wyx< z|DmFPEtRNk{0mSc@cY`SQ)jaGJFon5p8GXtpy!urx#mGP=izy^hMm+J&_cY+)+=l$ zat*)ERSMk!K=`$pU1ISu3HKP)s_McbkQ-R^u7YeAZ}+qE)a<IGFjXME0g_g)_A+L& z{(*VVkn>*dN99RaKPd`lTs9M&bOu8yy2LA3$IDYSnLO}mHP2lO^l%>*0&aw+Il3$l zbIj515IU43EPJ9vQ-iRrt%;)|)m|s*Sw~m;k*tA0-*(}c6w$q<M>A;zEanIqBE_H0 z3sqC18{WvM(%*zJM4uBEjGE^~<rAjas#|;t9pU&NB~^k#%Hmi(5OKK~_`Zd#l;*6& zEb;#SnFa>Pv_lCM?j91sv$^u=Ls5J+r+tZi;|{Y-s0G&SHA~i)IetKqijTgwsvmK1 zKcp$2NwEJBe4_`oKS*z$f=2&4ZGSO@-ywM(B<ufq{YJo-w-K>!N#xU;hmDeGf-mmy zXxVP=+N%b7o)Z~Ghe=*NJf<t}ScaF4Wj2=FZurUK+m}NEApC&rtWUnpJ^v}9aR__7 zi~SlX*k|Ltto~5@o%P9^!J@34<h{~*ME=`MT?^a3spneL`4h}nG!f)qD)>uRNd3+w z)YEMM)O{k#m21M3_%?y_7Pz^6H|-u&evEQ9{G(__w?YR;S8rnf6bZ8k%mX(7fpMdi zX^Y?*==3R)sw}!z$)Q8(vSznwf-|~=tV5ZnxB)TKa+IfCT3)^t)>97pLDuNPzx*)R z7NGMc9>p`e_Vz={<(>W&qX8uPq@`iQe!Z2LOYdAk^Am?gi@9$7bF!8Pg9(a2dC8W& zrbyMjg_RHJ?2OW?cW>6xB}3Pr0_KAe{yxIiV;5ld_d&JQ+ZwQYWcS3|%}pjt)#5*> z{cG`1{g15vGwU(}!{;w6Fo7<zz-@a+Z>cAZ>+RR&RSu0Sk)t&Otn`9_O_iw)-|jV& zO%bXglL4tQUI^{J#`eSMWT|IL<XiAM{Rf=_K*HzoGV5Ct#T!>$inQDJ^(OR!SozET zc#EP6=H?eRX;VD96sic&diRx*^O?PN`95Jv(%H4>J9EBNlhCNBVX}o~8O*;i^FM#X z1V})1tJwHL0~t*oQC7YML9HKCh<NMu6`E|`-{q272AXT;k(xlog%bv4Lq-nTBqSZI z@IF~Z!pelrPz6&XdN!TJF(LXb{T{046hcE|@G~%|Av2592+J36f(nX5lM$wLBhudz z7*$AkXQm1iFsfO3Uo8QJ@i-imD58<Zuojf}!|P&OM5Zs=GP8UXHIW-5V#&3l$Z2&x z`|J%~mN!$Ik`jpcYwL*Jz<r*A{izhgS4K14*1-#uuSjl9L>hl%;-?jz=}eY@<KRt{ z9L{b9cGI90afGRln;x7#%3#b`mX6`cZ@H^Sg`amWXFsJ}G$&&=#zyyBG~P-rRm=Yr z@0h#Pzb47X;COiS(Sx^i#*8Vl(pu(xuw<6k#kT?HI9bJ7k7n^4RpqNPGK{*%01+j* zUeELzi|v`akJN_~)=1k5&N9i1GX;$joVG%V_BPL0mnqv%eie<3wZQH=KD+y{fd@=2 znilsC%<DP8R=h-*g4gWv@znws#q0zfFAE?eDYquHXW!});d&j%eUJrlZ7}_{^@%<Z zE#?wT`+#+7WlX3#V&^qNYtx#0iN&61`u6FmyNjSUjMf~SvxVknqQe6#9`0Dn<~)S2 z;cI-9F5A55dqaU+z4Q{aGiNs@rq_FBTu;+3knrx09jMvhyKxzvePsbzce?GVYVBD6 z2e^NkR$-EV1z>)X`iLPLn7MW8K64#}-IIer!n>5Vo7M{*ZyhhLl#DBHNcch-TgII} z(BtK8XYj{0xeH6v6NB33MY1|ox}TXFT)OPI);kTS<m<v>?k|q6FRO*};Tv;iq}@$x z<Wvahx9SFvV6N}3#iTA}?D&<<Uu|r;PbTVr9CkF-QJ|KNJEc>+w;!&w7w$dyf_NE| zobw3?mk?JS|4wJ$utd%;*+M;!MyTIzNOu@eJf5JC@2|JFok5nSXf>r6OK_5_NPT{x zc4&nd1RFjE^vM@r<>Enwk)_3jIWA*{^(#-C3{Pc8<Ii?U(Si>kq&fqX=t<rU`ibJR z258W8uA1=zA0RoaORP2TwWJmm7lO<#xSuEeM$lWB*cc@lso6m&?Q1C_{*FC$TBnG_ z0wmp|due5bh71w6E|5t`_eIJE1l-ydxvPb;Gp%p`_)J{}SI8i! HxKl5UhS3tq zF`C<2XQTkPM<J?2&4V42hV&6O(NT(It7Hm|cPJNRQ59K<E<#HBF3c`79flO)!aOE^ zqUR07r2?UT?r!Wj)mEF=A|7qnqqk^z&>D%_^{m08gqKYsrq@TC>l%-iM`o@r&S)X= z09PNy|07QluPF#j0Y6^sWY_op^&6pI^a0zA<?n7D9&#rCJ|+6A{6crXkbZ|Xi2T0; J>i@^#e*j+gG&cYM diff --git a/packages/ui/src/assets/audio/bip-bop-05.aac b/packages/ui/src/assets/audio/bip-bop-05.aac index cd3c0b67532c26f9ce6e368417cf017c475256b1..75ce28a8c418819ed61b0f3bb57f10d794c10023 100644 GIT binary patch delta 3760 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 a@LXoE1;rjpaft<{uLYSOn9Y1=%IR=Hos3xk literal 5467 zcmZWscRXBOw;mzUdkCV9(YpxIg&-zs5H%yBMAT@BK6>;~qcg<ly#yhm_fDATeMB#V zAj4epeedty_jjLvb~)$S>+Jokwbwe>Lv4S<7R<sefconX7UCj;B9ek4!Xf}gLpT<T zbpqh|9!1|q(7Ew_a`hwgE!NjTdPKsWpIoSI$4tHG1MMsjPQVo?Ml#xd-@*an76ub2 zvGuYdDO`Ks)F4F9kLY&}Nl=y{Qh1#Gz>FS>*5{v@)sF~A>$C_XxT1Thd)Enn)dnBW z1bUS{mo+WTa+lB&OXf=Gq3$#bA4$<vH+Ke7dxz)YjRsnah|;A-sc&$)CWwFw*ZPGP zduGv`c>ev5H(B#yEmXx24DFOaiog|O1zhrrw45d_l!TYV`N?46ty{obDFLv@C|2`W z*25)eUl|RX2mJn_-@RqqLsH;2i~ptdw%qx4=2$LUsJSP$;cDaj$c#`pI0YxB4dd7M z+q7rwJVs<w-UP#Pj>U2Ur~!ojbl3e$Eb@;~^{Kq`X-nCq78;vy0snDTFms9QI{SKl zcDg&8E^a?vW0eg84{(Ag!zxwia42W{rVl;7nF`&DgkQtazQO-BP|~u~T!bzXZ_PZA zEP~Stw${<j))p2eY=*<|5C8xOw;_U2*Zk|3Xi2--+iBAs>I{eR=n7{X#6QuHP+Y%) zOCnM`<G{;H_u8MegG9K4L{CrFeSUB8b&%w+Yr3OnYlzB(P3w%hiKn*@1SV6(&Lu(@ z-i60D4242vzrGc=k(8v%4t+CQUp3N`L`_K8*VlE2DLtWTdUZCb4G|LP;;azru(5jR zyxWcwjAC<feoQufy%AURItBanSR^pWezvBo9!|s+KB#0Fq=-+t=XZ~VnTm>(KQ2l6 z4pY|9t7NroHv-DlA%d7E%VQU{!ZiI~TSDa~`FQNUDR=Cr{Q3UQANLA->3_YOe{joJ z_Uq=f`Ac_dZgV`UjosCWx57e|qvK`utV+7{PCbP7^h9BSpxcNm?6niyVlhBXdu$sP zAH#B>_9`uS(akJ87y4Y06Qgu{b^mbk(DbFa#3{A_<~K2tzOCzt#`?|v!4{x>O-;N{ zwkvk8;E~Pl-P=>RJXWQpWVXI0g7@6!hYaiKT|cZ$PfXNh7C67iOt=4K=v4awda395 zsXeur#HUK-tLA)djG6%`s%C#UZYf1-d6Ju}&Eo8+a8}zAMEvGsH|fyFu5>wKYy3F) zv}gVh5Ez(8{@U8yEsA)`skF&eOTM`()UDiXN}aAW0u7T4E1{7%gKi&=^+X|m!YqG0 ztjlA|88A;K0fVsJ)yyAA>oe-3hgK>DG3jm#wljF9wo6FzJa6(Ik594(KgwjgO9Z21 z=q862f({HbN_hI=`OSJ3DK#;xNw-y;ovUn%ZS#k1663&>cnTCsl=$aZ34k0vZ|77A zkYWMM@A5o*p2M<pf@<)iGmtJo6k)E#p#_T#b1~kYkm`GHbb9qLafV*plT;P_TMEJV zFk=^otqW9Om3cSQl>bSb4oEjJUc54tp*?<G;+EG+eCʼnWPP0b16GPq@zol0()M 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 diff --git a/packages/ui/src/assets/audio/bip-bop-06.aac b/packages/ui/src/assets/audio/bip-bop-06.aac index a51ff515faa2b147684cf3dd0f90435b14ecaec7..1aa68df769f223696a761b00aab786e1141a116d 100644 GIT binary patch literal 5615 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 literal 13281 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 diff --git a/packages/ui/src/assets/audio/bip-bop-07.aac b/packages/ui/src/assets/audio/bip-bop-07.aac index 7d66375aa4bcc9d827b9a967500923a3eb732c70..47d0e602a1a1d51308ef3fa093dddc42662bf2f1 100644 GIT binary patch literal 4036 zcmai0WmprA*BufP%8v#?q(%$UAyNtp1V>7@fJ%eXA(9GGV@OGND&3<Q5)(#>gmfd| z7|gl7>WBC1|9-k3?(^K|o_p@OhjgN^A%r9>UjgXa`#CB|OG+zCN=r!t$jZwB9zQ`W z6d+2C&JfSV;ky@=qg!{^Tx)`Hx?3==8Jcd%9OBMpEL9wDVKOcCb*5e!jyGuo->mK$ zr8q+Q?ssK!R<%=Upm_CvugU3~IUncZVQVY844`POBZytuH1{>kZQz5nUv=D}`me}V zlO{+Fy+uFjn||A}9QTpS&p+Hgdh(^uLsd&Gd7y926O38YqFQ6*XYhfD&b%JU<x{HZ z7_KAUNuj1zfBMU1K@2tSeykEJZA3sW?*Cwn;ozusxM_cPAjxsvdk<YSyp<PN4BKrl zoj?14Ddr^uvO(7loa0;=!{6x_QP;oj+-ebWe3EOvj{H2W#1V1xUCEw%vk+rdUjAa< z`Tj4!1!0=7UR=jz$71+j<SWu2&_vY<faUD0DNVbmhz6^|8RwcTHxru@=7(p)JU5O5 z)mzX<$g1}Ka}sg5?$_lxQbJsosD42j-A7wkjT|xKdf?33ecwgBlr+;b)JF35)Xj;( z`OmTlu?1k~3rI@nYXBgBpRSq#^FgS|vm??e_uxI-?Ba}e!yyz4XT6^VwEGth9i3=m z;Rj9E_<q%0&fPus11724??-q46FMvVeapRdWzyWxYz1D6tFh4mgI4qxX~8d5oV%73 zre<~Be(sC1PF7u1&u%&mp+WOmNKj>UorUTB<G{zlcWaxBoxD@iN4*S2f6j7ZUkZ$l zovGaJR}!`k96{4mJDJt4-Hq*FM1S^G5|N~1n-B<Wy?6slr5!&^K*)`FpeHw0f^`pI z8MtLm>H4rRN6Rci2ETXxH0G7*+yCr}I!S>OtAByKV@m)KvYW9&A_()UYnxePh=_1c z{JxQNJUR~_UN&qon=6@ja!KMD3oLz1e>Y6IPy7lT87$P(BD-<QLC-=VCH{UbH6pb! zV%Sb6|C97LBabQI6EE6K6X0tnWhUX$q6Im_4bhM%X2==u`$^;6{Pp@92V4S+P(Wza z&zhM07;)8+&G`02lYvEwtS`GW8>!Pz6(%O_?`5lBw*Y<P#L%!CqonyYCiVT}Z|Wt2 z-pU3ZjL#A`yrLZ|C&ejDD7H?kyuBG|Wo9b6m=&gNu<UedAEI~AydWo2s8J?44)dfu z>Z;*^6sxr?%brF0wWL$bwwFcMMG+^X`t;UewRcnV9FW!cQCsHYN@uOF57IvC_>A#r ze_gaml*tKoZ${qG@jp*pKf(Y5An6)pT?~gm4{ouITfxbziid?Sc-EDnL%x-8_{3MY zS+no7N)wpR^_fR+$u3FvKKMlP#<1WVtwpZ6+!)eaNLW|Gp#-C9>HkqUoIu8(^)*|y zuzD8camWD~w5$X}Kk(aPh^KhJ=bP9=5)a9Rgxn9&a6Kf!PPXT%kT9Zp_~x{2vuE+k z$yc`$+oc5T>-55|mN8AB;~NGM4S(7g^IE&pmy2$<foy0bdRP3tUl-(fI)>y%3|zhb zv|m2ep@)}z5jP>R_U282Zj84_D!n5SHl>Xw$y&H3C%-o$t02E}|GtmE4YOZ6S7g__ zJSI#1-~rK!>*il<R2u6yFi*t#cEcQMKxdK6zA2)s@KaPmJKo}Xsh`l&0apgrdfDVS z;rx8ufH*t&(^A3p?IT1GyVwz@zc80jvXe5V-pL>vnx5u+*UJ!$Z|RMwQoSz2#9R>( z@nK1HAit--!Pnv0CGtF@Ev+}YY(}F^>hK$?R@9IqNiBcPnQb$r$%gfQEwJKIc#5`v z^!mGRf1%_j5diq?=5GqX!G-EU+EMA`T_w^k_GGT#zxJ^1c>QvJ|J|%ElIJ}9@SNz8 zEBn%sb>ZmNoyQr%@;@T4J(H#xfH<h{3%`)geU!HBP81kZU-;mwQy=Gu-ewy&8<pB& zjUrn&%=mPA>BLXxhCaEx!Iwm?oOT`&G^n9V-dsri(NSqfyt*OZdCFtBt2Ku%!nrZl z>9LiO_DJ5dr2@XRgQJ`6Mj{fA^YsFcjUf<u)YJpL>Q-q)LIgA8Sxm02jv0d0g54|1 z5?N-5E^DUw`2u39oPO0L0%HhiI{FFisHf5>8&1$-U-{gHjZKUd+xnH`)6(&>@s0l+ ze}-{GZ}4!C^^N+1aJ=Ks;%+Y|k$(*1S|I>_WG7--z<2IX#X-2%*go=|kyuG#;n}#B z8UpNi1s@!S9YxEAtq?K4@#~4^exh~7sHvx+{wkE}+w`ze=2)O<3Ok{_p;Dl6D^G8B zOjB8Os)<jph2`~E6US*Dy^R{ztfHz`5tDtLf{R=((a$v%vV`mhte?Mdaa}5;Q;BTd zRRrw}7l_!ivtP-l_Jlw3Xh~HOOVX$$rJh$n)?b@j(1l%%9dtuA%J1urW^6$d_<Qf* z3<ZUKex{EUM$E}esS0N|dk*?OniyB9wtAk4v2ZF4_`7tnKlj72diDQP-v5<q{3~Gj z^Eqm>KdR9_QR=SX?>46kCkp?b!wLFYlYWreiMwYRJv`VvECL1XmR8cPj7!fHq2`y- z9YQ>qId?odQAYA@2Tn4VyYw#>G)Cj{DjxDKSZY?v`Pgo;Em_i~KCgJD^*#tEG(B_@ z-s7hlZ&=@>Er|!R(07azJ6lr=b>a~vmxIok^Eis$&Xy!W*QJ|GhF(p@F3nI0hL*p> z=phMY)VR82@tbV@l=hz{LW#Xwo9GxKsf-7?Rkpq@PG};S=9&B=hKaq+FHv-`9>hCn zu&*LF@yC};O-~U7W!`GIE7O3tp|#4uMkiycz=FyrN&9)o8QsPOP;HM_j!C3Nl~E*{ zE^g;dGUvmBQ&$NCCaLayOBo|7KOT&1YY=))L?b0lMkb#TL0^JU5rHRa(W9sY8CXT2 z09*H8#_i&|w`h`_ndO*_xgw3;TYw_kuEv8E*p6O=su=#RidVa16FT=Ixr-xt6W&|D zVozl^@~~W+T97g?G9^&b{C1%SDh+(X*kzg{B+&&Km$z=9n6JGiQN(OA*5<$+ZSwJ8 zdbjW`w4j0Rj*wpD!3|2Fi}rWk)Ebcl4mqo1eBic%L58!~Zu1MtNICt~X&r3!MCY-S zub7kZS_>-<6)YA~0WWW1E7cGFb+&W?<p-vXjSwz@@vw3&ZT|gkMl3`7Rsn1AD<Fk| zMxo~1Aw_@%F9qN=FPWSMZyZ|!t&leBl?iq$?BM-WC{#E;n*EnCv>fAH{8l?z+n_9p zJ$%RGqe%c{FA^r00GwR?8f+R|)2~2q3@LC(&5Y~<LlIqR7Tj~Ay<eas>VoSNPgj$# zJV-Gpz#KNKEH#}q7F@qdAxR<D{nh3SXK(3qGxihS7WS1}9G7>}2m{;iTHwxKc~m=V zJM%tPG!0~3p1S^~B4~alt!*g@F_<@zuM+>UzFl6pF*kxSPEuYA6P+0)GynwI;|pia zc1NooRGG-@JweYL)b0x&HBA}Q)MR085S~?4G%%O{6!p>!u}W>G{r`NF2$BFeS4^HQ zHjJjNc)&@72LQYggVWPXm(wd*b?TmyVfCj{6jA#bqN7)E4mue+DRJvcDYQ4g<?-zl zd!ESHkoP6;{VtEaImT?l|8kw-b|IUGbqbO+AF$fN+gviN4|W4HJ)jT0QtlD0GT3!I z>@$%Zd#{a2j|&y7-XnS=m~?&bZ3^rMP2~DybCF=z+}A9d3fu7Y^Pq`J@e3bh4+4l+ z0xz79GQX&Q1h)z-7!fayqlgc@!O=$DuwnlpRjb+>$bqS?yHHsGIDFKM{T)_~1Pbsz zc=OI6L(;U`U&+O)$3+sEh{rdOILEX+TsU&}19Ij;?M=!FPD5&8xyx}0UliH%z}EU9 z%F-wj>}=(8ge~WPttRu-SgXS@^5x()B;QceiSAI8vAWvJTxsO`%G2%G>~b`e3efrY zV#WXHEKxD}{4GCYWn{4FMB62~wNIkQBT2>K^o#YmTWaESvln&u&e?AVK`d^qqHH%q z0^%4YMB>+yt)|Qlze|#%XuNan9;Tl#1rlg(3G|_K7U5_+YNs9eCxN4T?@t0@CZYZ9 zN|Ef0$rtV}>DNAei7J+P&e-NApa8GBd|V>FmJ*U*vVA&!aapMCtC)FUVVDZ0)i}r! zQ#AH7mU(EYX1VmSfrWuXCBqd}pg}o8K_6V|tuqi!-8UN3z}Z{>iZR2{AtPU4M%VV~ zHOdt6`%=pkv3D6@Ov?$BCW<!E#n))TLm(8Zw$@{Sj2UH+F8>co@x5c(=ST(y6+<&= zx<l#+RQ{fdBt@!a4-_y0xSxL00^?`0Iiposnr}xdm@GmKdFO_vEx!Jwuz*?6$nL$P zAum9pz~#oH7v*NFzs16#ieJe4`&*HypENT7$yTcD{6_zOIxn6_0Bk5`vNZ?2iz(Hp z%MJ1EIvY5|RkUzpp(iW1NbHqs0Z1NZ1h$*|t!9;fkS<?V*@{9%;IYy<o8JxLVL_1b zzEmR5RRd?5g$&qLyBJH3M}8258Bn=Sj<4AKuDMRuU|p2ZcQ<}P38O;1ix9liB{lZR z^mM1O2>(b?w&2p@LpOU1V{YArQb!5-xz}(OL?Z1Et-#irL%nTTS>7U)9GaJ6I#<vu zr|0Mj!22s05!0Fpad`E>jI4nyA3$?UQe)78Aw$pn^Z6Y(=s-!DEQL;^kvAXyW(Zj4 z9v}|yz|ej<ZBEe6fUDa|`W_ng8Cj`u+k*RSxkGj!6giBU?^5dADzNj<JebI(BM_j0 zBe${ZbaShu;fC(*bRZSTcOgUE=*KtJpu>T&^XDf@egwx_)%Q_|Y`*NJbqYsrgK+<< zj(Xv4hbk#ERfzD|<Vu~_U*-Zy1i+30K*TbV=BmA>NV2mRE#-1((D!BU^XgxhRr`M1 zCWm8Nde3p|YT4WK5|os?0oAM}i$34FeFs~0`#$Xq#MG{#v;}FMKJdnG8Aw(6q!hhK z@JeMK(Xh^e<`hE;#Z|MoSUBbJTW!q>iG!b>HdH)qlsmE?bkBCy^tCi(<yyFBIoMh) zUs6&cQuuL5VM5^TOacl3ptMT6?4;`$nd%r|C5dB8=4V{>LiX2#(pUgDgmh{0CxilV z@xHJ@O+AaJhD&`}EG#TvuAGP+U4%}?*i~;)shh|h(+PvJXiMqrO#9NmYl5vwbSIAx zan4EG;hVv?HRusj$kX-}(!*;XN2&HpXigi#$AdgcC4GQ?^}%p_-G|Ud7R)@$-2e0! F{|6}Z^cVmD literal 6448 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 diff --git a/packages/ui/src/assets/audio/bip-bop-08.aac b/packages/ui/src/assets/audio/bip-bop-08.aac index a92e74f4f49e351ad5b93138a50859c9000c07c3..ce6c3cffd3caf3230b506921388cb4292f4ac107 100644 GIT binary patch delta 5216 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 literal 9730 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 NvU$RPg#Q1#`Cp?;4buPs diff --git a/packages/ui/src/assets/audio/bip-bop-09.aac b/packages/ui/src/assets/audio/bip-bop-09.aac index 457b3888662d8d4df41b89124820947879cbeb85..450bc5e747c4d5304fab92fc8050bba866376bbd 100644 GIT binary patch literal 12087 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 TU&DaldmuIQzoFm%ugm`dazoNi literal 15909 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 XFowsA*gomPM8Drq|GzhXF!=ufVe3`^ diff --git a/packages/ui/src/assets/audio/bip-bop-10.aac b/packages/ui/src/assets/audio/bip-bop-10.aac index 4a55cbf52e68cbdceef8730363333644f1dcd3a3..50076b3c91d40629b79e6f759d389361505185e2 100644 GIT binary patch literal 3206 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 W!+)6|@;4Ly#>4;RKbZVq_Tk@X4)e$W literal 5567 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 diff --git a/packages/ui/src/assets/audio/nope-01.aac b/packages/ui/src/assets/audio/nope-01.aac index 9fb614d0808026ac186a8641d4dd9e5f1bff6073..b55a4dc4e3d324e6aa0df3dad5c8c0417e766bfc 100644 GIT binary patch literal 1760 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 literal 6316 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 T{|FiuAw2$b&q>jnBya!#MV?Tk diff --git a/packages/ui/src/assets/audio/nope-02.aac b/packages/ui/src/assets/audio/nope-02.aac index 75603cc16f8596b1a787d9b58f6bb9d843f21dc4..efa349ec1c6ccf428f563e1e7330f341823993f2 100644 GIT binary patch literal 4186 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 literal 7431 zcmeHMS5%YR)(t%rA)yJOhGGH&BB6?uU_d}hs3H)0lOi3ZgpRa;G$T!^p(9PCOD71@ zM4E^oMG)`^QWO#L>-opI_nx;q?l|W>IbXiLAHKcDm}{=R*W8=5iw>8tLqVbH09G`a z25Fbh{1^UU0JBlZ`sA-hJLw1I(gI>ooq=#B(hoG#G%e>Go)|%fS9&`~Ag!;an@^J- z<$X3_ZIB?pH0yBqI_*verx@%kbY&5qx@!3%&v0dR_u@v2gUB@)GqqBcmZYW`r-Hxm zZHtvtFpXpcu_+Ap3dN_kjn}<!F5}gQW9sebOPJTx_8vvaB2gXI19E1-CEATQC+Uwg zEm5)9nUgD%kBgYO$+<pa?e306IEQ3WyWN__pIwNjDt78_i#q-^bKR!O=|<0QRX~%Q zbm?1UZszUrKvm<wtA73q%$$eaiu6qnZbwA}0S4Y}?ip(9EtYy6-fJG^sN~InfXUSL z+1K+r>SqSc=pcQyF8YZo{wyUFDbOBAQKHAn5~67G#%aez+=ftPf|Gzo;01%D%|ys} z>G7aXm7&E{JhJE2Kw1;{a{K&%XSJ%DH1WI1RlG#e9bbiB>;WP{U{!4b{Dq|&og4&< zWUW}$7xaD336}NX_U{&SfI16rk77v~*W)rfhf1Xl@$hxL6BCRv5>m?!V1$9+bpd#p z*pu!6%xMZXf_Mw@j@?~96NH4WLUo8&7n|nK@96Go&&GsyTwar_p1U;g)tQ`Eq%(Qu zar50w|3R9!j`@c^w|A~ZRt?5S*8x=@K1ANs#TOc@XWh4_-)^PVUc+W%Xe|bbN;nZ0 zj*rg~s-{j+k7LLh7bo@=c`fR~ao1u`l4IX~?E3aeLS^O53;Eg_DtJ7_j%DTiOVil2 zg3$7Xp)(EFYN~c19-N;JNjEnY9UGX0WOQ^yDXywuLrdh20-IvEcSl0wFQx#6<fqIf z9rde#gP~o0>|_!w(oEm;y3hb}djcH*paBdW-pc``)}+mKpD1lz)vJTk_-IEjo-oV1 z%oer|yvHXzaY-WG;{I^BzyCRZH^dyi(D+406`)oqX1Y(3GauJ-pP-+m9ZU}7E^F<r zZy50qC8oX`|9XfZA?PaadURcdi1l#dx?_v65A{YNYeZoDsDuglEaL#R3Qj9>a*y&U z@15G>a_Rcdj?#w<uI>VR^KF>!1CH)RJ!A#o@+&pGxuGMYKp|Fz&>=sPT;f=nOIRu5 zmEetVA5`@v(K)@T^($bzOzIz4?Ql8!Rwct>>c(z+<fPG*!oiM&@pkiV$Z|mcTA(II zi@GPsSGer@l`*-^FwNNz9@4v@!@;p+#+cuD)HNN2#X)%6W}BuZK#uHCSlvuG^*CQE zthyE;PBFf(#AI$e!_WOw2x`a-sE&uaHO_N>SN9uVsFf9lgnp^-VSU1N=rwbF`UI|A zM?3>B77@D)s?6`>?-ej)xhI(m_UM56I1gbLQm9nvN8jYstTc@>GCkPTtJ)8R`PhO+ zj{5Q3Un=D58m}H$_OoL532*>P;EPA}H=<5FrS(ula@wjLbg8&d2zTz9U#aUWV{$Dm zK^mc_**ARaC{TXs=3J|2KJO@Bc2gNT&I;YLwJ%{VFrQH+MkO*(cm!e4nZDX`Ndsny zc08CFhIzr6a=Y52A#hVT54Yp?l>$~9F-|;HmPLZ;xt8fp1dN6o-KXYKuOjYk$a3ap z^ZqTQOg3a3BLgX^j9EZjc`u8z;_mFwPnzi>yHqv_0#ID!tOy72F)dr=ejMm6-uJPU zb=|glq^e_oJjdKrITqUn;&|qCC)d&bRM6?fEW`eVMrQDKo3eI?FxpJTqz###Fb{V_ zc~{_w;Y;_8o#xKrrOi-fjG9F|21|l*Sh(qj7y>AZ);<cSY|rXvgS!4{F+TE^n8Np) zHgCP0zdu_Z;w<7T)e+gfC%uIlU~s+Sl~?%<BYTP1<R4J@L|uvuJ8vtKYvcK#bd5j5 zrpmHe%7=Ot?}atWB!IvzF-K+@=^{c89c*<4jV0>x8$bH%>yJ`AvVUIemCKodc^C7Z zyeE>q?0se;fIj?(9<EGh7_#DjSHvYU2dK`R$|5>?5lp$5;Q8t}lvGNrNesa@!<5WA zn|3aRIQLqq*w}v&C(kgvu7-0#1}T8qEtsrZX^VqPhDx-Uon?$pC`kU+!(%)SM=b^Q z2K*w7YZ6d(UM}1RCGGuScnv(@pj~>Irmun>ylcZ-8BLd#^!j{i#))KUi*yIXzE|MD zZIuRaD;r91uZ-MzLExuQ=+W%)A?M+BThn@69^*a7k*7_D^vW==w?kBo*;K9Fs8}8S zw8`D=6+*@=WnpSudLc?tV{=sGhBvafCFa4~Wy2+-;Ik`2*4h<@9COTp$>S)g{1`8R zZxvIq^o`-8LP>P|Py2`!ZEZCbM5OfE1AE!XGt|^WiJ)==`p6wxVE&W*=B+%#9C3nl zeoL{n27el8y@RsfRf7Ox%sU5Wxvb{r&O+egE2>xnfFwTy1zyv5KOf+qBpK<PbXxqT zlvmf>uyi^@F?(ofn;N9&*}G@m;bHIcMTt0Y`V0wD<PDFv)DRcou5FYdheE-?a61-} zmBD1JAQ$~eu*@Xc8kk=qOAQJCB-F^P9WR_$P9j!>tXBt>H?1qRt>myHFZ<X=@9BjD z&XWDu>0`@S3)5+SR=5)K$5}jgWii=ven)p7cN~_td3f0A7Pe8%r+0amZ*IMb7o+g* zTQE91+R%)7r|46!<iL7S%dVt;RnvDsMx<O^{>`w};PvI4BdUg~4)a)@Bypb3p{p^z zdP8DVv+pyNSrBK8`*}7#xB5(@mnT+?>`uYCuFo7rQN)KM1*49S*$lc}*xm&mtr_>} z&QZJND>N^Ct!OtAVchK0(j%L)*h67#UZ2vh4Fo8nU6p7rf)ZWM$X%e>4W*I)aM-v^ zErukmA6-%rak1}o__jV3Pl;<6&$N(qs7x3X1bE2Rl%CSRPo+)o{(8XdBCFMNKkZZ0 zaxkY)vOzVkJUuLZe{3}61U6T&YaSd;brSGkiW#uCfEc)8#_^Q}d>9oR#*(=r)1W0} ziDA68#<Vb|k5@Bzi^<!4eRJiOU2g9ocMwEKC4MAXE^0Q%ab$rbzq*lzcpif!=1(** zoK;0$JZDB7K`B`aFmyQBQNaPgY#9}*0Ln^DV&>Tk8O$vRPs=-w?!gc#M8eSok4D+O z)Ie{;V3TgNkJrTw>G#XBS(e_SW;ZL5Vau2&gW6FD>9||qg7d}$*OS^q=$f~DyXDnJ zfYX<*S0d%#gv>igvONw$<#i+G-Z8%&|53W*2dwztGp%3?fa**lt%{uJnFT!6oX(we zvNrF2{moB%cS0Ba__S-fwHiYTxF_p{ymp(Ne^Khlo)<l#t7vFD&c_<aPvy2FaP;!{ zz3|8cE!}<Z;r^PBUh5tE=4rTAmdN;Ntrz<4<2ClJnE;>^O9y-j#zs}Fah=Ts8IH}W z!Ho*7qiR|0V(H|*-=^f+rA(tUN;6TSc-$5u`Z)nWm#v|KDKLG@cs@4hT$3O>-atqT z;g>QO>ePl}Zwbp2)(2)kJCVFpjG0{AWO!+m*ddH+zJI&)qpACAi@j@5Y&D#H-pqYa zH~x&lEvd{I{%9ZLyD))3y6^B<hBCc3Js`UUTT-;=Mt#b8<CU*+Hp*jul;IS1k)M=R zFH$5F#ow0N#)#L3@Co={En44l`n=81l(UDr2b>8#%v=Z*c>&PZ*TFXg=|@+dPne+A z>wlSrSv_J%0It?%O30O8`7Rz<_1v@<4G`ESDAK%`J!d!C&6`R~bJiKGyxyj%0gw*1 z=u{7ADx4*pzVa|OM2D3+LVOhkTe&q&na9>%i*6|?b!Byjhu9wh2Sp986tSjwd%tvW zPLntdecQRWtmxBa`Fn$wPiRa2S+pW#tk9qg!m~u%h*>mRih(LY4GB~&s{kfF!Ynec zw)osAk;#aTq*&sOK&mmTd@CC6h%K$dM!hjP`Owg$tB~6gyQe5|jLX|GW4?1JHMtLb z8lNdh+Su3dk02tq@<9DslQNr%FZStIeTOwa%+j~a5d7-(y{gkPLsQGlf+J-&w^yHM zGP22w>fmcrrdTh$8q#}OiA@U7!9AiK57T`1PDH;pY}?o*)8c}VwgZ<Q;ew$4@NrhT zweFf&zZm(Cj7vr-3>Sk~aa0XlEJk0x!~qPHnAEqN(&0{M)d2L=N2QPiaZW_8BE<_) ze})556ZO96sy%0wR@!{d5#ZoM$;9G#2L)Q{9(+*a=Xz+IY6k6f4tdm`EhyCNh2i5K z1wIEEs5pT9(VpaPq9E?WUU)lGbycwth!3z&M+f@<%}+E!2nxv%Z%wi-l+1UB(=j9z zkc$xz$&8lPqs`T#+6m#)W`PB9fUxj<lPBq+W~-wU!jh&%byr9EwhCz5ojcpj*H%4K zr%WSUB7#oDbAoD$5lSZI62Y70lYxb>zPN%{KocvKkZ*?qQ`;<^R{UGpjEiw2*z+ZR zN(I$5(2BWAu2b9G>I2zhKSZ+oJ$rb1ID!dRBxBaUndFHv%6dO#Ns=#Hcq93q?(w{G z#mB__uB{z@zaW=%5H+PmaS5fjI_06tvCSMVKoy}z^G;aE1_oKx;OYU!i@!^KTH2D5 zOVd9z#6#_<5g?C-`P<F-CB-at)4f?qF=HIIfY6q4aQLWv-nb<;+936vZNboJ+PLre zM~bi!Z|{P>?1j;>g30HTd%~2-`VNoy!z>%}4g@#^(mb@}EW>{D@3pH{ep=r<!k|j= zor=7=IQOSE84HS`kaPm!Zmb}sX(GW?6hK|yl^GIpndXE%y3jJmV-lP)9LUFaoO6d4 z_MFH6vy#XN_R6f4U?-a`9fkte8@Jl79ufP<)Y^o~s-3N*9{tvN(X(A97j^7$x1o-a zOp?#yhK-K0GB3qxgqneb*UzBTYN#KH?816D#`QAFFXgLy8<8C};sqJxS0W?W`aM8| z|G?7EKO`biQ1CC?|A*QC_ZPF#^Vi${C%^mtpI0rvIR7`*{~G;$S1rF}{x6dMJoqK^ zKlAZV%znxIpJ4e<F@DMXPjvhvlV39bM`-@fAb+#WA?f#pl!XA(#;)G{K$?6bBcr?z zq`YibnI^X?kXy3fHE%}wqwsI9hm!P!$bR?>S6AP#uQB4k@CO4DyQ%-()0)*Ey*VU3 zn?d=9{o<IViH*INZ@{XUQ+}?5V#`g8!JVSFmpBej;29w;{|&9`U;X6ukFD1>L@9Ff If54sp19W#k{r~^~ diff --git a/packages/ui/src/assets/audio/nope-03.aac b/packages/ui/src/assets/audio/nope-03.aac index 1fe459a16e8de42721ba6813a0699fb019b6a741..f9650c8e49518feed23d69fdb7b433db813415b9 100644 GIT binary patch delta 3726 zcmZvfcR1Dm`^S$xvx!sIF%FK+k&$p5B9wU)jx7{r^Wo%eM=4uosFO`r2q7aglHD<n zSw!UESm#IIe}Dho*Y&zy|2&@KzV3X*MqYrlW2{M$cQQu~GIR)VQj(LFQ<0XFl>?E> zYBF8CkpU-U+?q5OBm82_%usK8j3cZ)|GU~oZAY59u|1~#37DR=otbMJozZ?>>9sD> znZiTI7{zg8MHDjFLA+%%Z#RJ?m&q+}?@6jBljmP0aNV1l>!aR^jeiQTl5)LN6Z2?} z4v)kNcN5L<92&eR6dh$m1KD+@1E{GGP3u%WZ9@iocZ^-=ErC)bzg}uMx>BGj@veRr zRViSfM5krc<fyGPMeb<rdJjk*;$eO7hmq13qO3GDmDEEzge7wNDVfMgUY8dN4~W>H z%)kpqYcJ3W+ZCUE6akv~+Ly#nqAr8tBEyiP+=^Cy{vKB`9-BOd*Whb<K9@c=El&T< z7UruOeaK%jDrpQm+3gxtU-2>;uL2lEy3Vc@xP)tD)x-q<m`y%IlUHy~2L2ZchwiAZ zCo=@5k8`1@bm(vEAd;PozCFZnzaA?dn8COVSutAr4QOrSIDl7|*Fn^khx`*Zq~mkw z3gb#q8UDfu&!kgKlwN@#^?k-AWgl~TxXC8j-Du^Q=Tz(hVPrZK9ai?K`W^!}`#k&0 z2q-3*TB#xpQ2hhVotw0>poI&yB<#-BI;d1sf_$X~ff!n~33J}>gAccGYXC|2gBUA9 zzF04l5<qjrmm)nKdOb?nCN|^zc}t{34bz!MBu3-(OjJ1gd|GRC8fzrnxjqYVIe-It z@qxn1x;Zf~r=^By(@L-f?ZR)_z;Rar^lR0hcgL<=$toCqWx)7Xg4&8dd?B(sJ>jQ} zQME;;)}y&J_0LxG`W)DYGlP?1RE$$~?E%#b0>IeU$%5I9BVynJbbT2%yb@3CdvC~h z`lvd5mY~P>MfUZQ%CHVKtbyW2=-|FyOW<DZY}g&dr_;l3iK42-pt)+pHPxkKou#X- zo2z94J-|zQxkTGvI>9$82iM>|Q#?bC&T3~W5wfL2p&*;;jLL0~r8TizEBE+L4nnF0 z*#HF|ns$)Dv~kUHU$)>S3ElVmKD>6Q6w!Dc==?Fe>S!g6VMPd3<b7b+1ylk46EZdn zX-WSSdl1+kd{9i{15dV|EvXav=a2Hfp58eQP?2;KZh`jHU@^r^y&1}TaeuJz5TBqW zlH{Xg`_EuqYT-0PqZ#h$Y?TCl{u)5k8Ot)V@S;TQuv0uBO*p}^{#HYi^MLUSi6Tlu zA1%RJny2&yp$_6~*jOX=;1z}Nz!r6={n9jOtt#+|0OlikMTJ#p#n2RSf!C&5Bm{rv zl&f-lKLk5gHqE)c9<R?&mSu@RsGX5scFsFg&XL))2SkRpqM&QI7ZCNS-$0E5Zfk#N zf0+M0xS7~2`^HtMEZOHh5d0`(*`o233nMqO-TP{YMqYarq<ld@`@&Y4^>`Bj<b1=1 z?F7Cx&*PNej8Jm)^t=qtFm1-{<+rKCvLYFkzR*Z|U%_N9?KaKlKa~td9!<s5T3%t+ zeEUn%CSm5`#*oW5Rp7tiie`i0F8^ROt<ij>EuJ%gbpi%L2va-xyEw9x(dL%ZT%GyT zs8Q@H@0EmmbvN#k?KFzLYc_>mv#7+tv#=*|hgcbY${wTIAaSeaR5CS4BK~%CvJZ56 zK)`>t@K}!h6<^-ZR9qbBlYg2(5?lGcb-@I&Y!H3(xomX23BX+h6{O_68{hbWVspeC zQYgcfVQ#`irkE4lmH3^*^-i_N8k;ABqgi(4I{~z3Ky~NNHK-Cxiu8Qx?RGt@0`~O2 zK(Rzz+lqpLQFBkQ-qGyW>$=Y1U>5AGa#8`yGgF5|JqlqrcCp?FK1<3%cjo=<S~;^g z`?WYGcRG-03m`6H`HFH4>G#~otT<Z}`E?N%My6aKNF$3B7vZWFkAsp4i{t)e5Uh_D zeP@Sz-gSrMKO@&?=q$XxEgSVJIsOK0`$~|aIJ|%@Hpxt@qo+z_XYK6%A~^!-XyS<5 ztD+x;{cdgSbr*R+$2u;^5tS~v<p{rz7HxiEOz{D$0_ZvCqP9{@zx~1MnCA(^_IM<5 zuWBpq%28;FK;$@Bp5?Q7ARgRt4|Szg%V%TemE*DK)q0{MGqO^0iC{i1d-e^{*q3ot zIRAg8BRGHV4uZ5Syb1)m4NFZqSe2Rcn)K~)jI@BIhH}I*B1dV5=aP4A1Ma2}wh3%3 zK%d|;HuWi8=}og(A(aF74-Sx))E0tkci+fFQu`oe5B+vXfot$2suybNkdxHv^E-$b zR2Ca+=+&RWF<MGe-Ms-x#?Gx|=cFUTXMyWd7QAX-4%xxmD^n<^wmO$V<}$XNz!P6k zyVES5XKQf}uVcN2dpQ=+o3pH{=EV;@?og{i&-b(+_>XC!EJvR+`Lq-syK-lgPmc8R zVJPHso*kF-tO%-u8Hql|=dnBVN}TVUjdyx-Jh7p2X7z>ID<g6XChcXZQfc}SH@ors z^T#dfYO<OCr3IpK&I2xO=mKL!beY1dRJW}s*~-6KG!JV8m-)UcZ3Z?`1{n=cxq8N@ zV*938hSdHL9<DFD`)fhGmd4XfQ^9xW#C?8$>F>B9_WkCbb=KI=x7EvwcLFtu({)Ps zhuW75i+rm3n`6LVYJ6!)(2dbWcuk5L<$h~(sv}00C6mY4Rxp8;>>41|TON+iuj0+e ze9F(sEUxgGb@ZX24*;6-+5f{b((1213TE*<RzZoin7}vfxuAX!7WNo@Ln```8Oyg_ z?CqC=#|y%oh~7bnjc*YG7QF&qex#JE$o;;V^zZAr0HvRzBss0ERZtfGT`ozbv|dB3 z;#!_AclW_*4vqN+SytFu7{$K|6*{*FHC*Z&N;NL4;4zR8vav$AS3W^JY<V|^M>Szh zEztL)D(sWB=6^t}Ip5f1Ll5Nhi^_*c#>L^`oOn*3Mqeha`xI(>1ZUS?Xr+8f^!r?> zC3F~z;PdpxUNu15IqTx?+~kBb1(rTANiQiGs9x^mdSmkFBn}mm)tOIj{O}(5(r;8t zxuQ*&D649>k+7h4PZOeXftO_G#tlk=F$w{Z6f6;%vPu;0;m5ItOybI#&|S62+AS`X z{*5wCw~_}*RtD4g`Jyc8yKEKiBl3zI#Z{t`DO9L#YWoC{GHXe8v@wX`CnQ?ukD``k zIc-Gk{Q(UP%RbQ6iwYGyHw6b=%CAsWvE#2e^yOO{LTk%yiFa9J5<3#Rzlu!|K#%DI z0$);zRxaAqee<>Bw2cD&OjM$cuO4z7^5Gk8)b|2;l!i9?unDgd<0IwE^ofa<?TTgT zkB=o0vGiV4{qLkcTyN_$F*m@-y4+fr(A9@}%kVv3L=iDJLS$cZl?;cY{C9$??K#~c zS=i+m$_0>-RUKPOaAppI1VMd~1J!ZDV^SCjv{H-sRUNx77YnQ<RwaTeGzM7Hco&>^ zmz%2adrSRUb7@Btt9m)#(^DER$pilu1OzxCV}wh4DM=_J7M3O(+O8g>GBM7*C1~%D zA*r^uGLAJG0Y9j|+Sv>q66MPg^p|}{#$3nbD<sQppjl|oB57oEu2%G9daV?(!FDgk zwBxWovEHn1^sU`2gIsNy!O?3>&6C~=hGb_!oBxLT;Y*6%zZ{8(ie=y$A|`<0HW;QZ zX_c#5So35;3_Xqeq5GOMcZ-n+B!d1lDly^a%;n<IBgJ&NPn2^{I~fu&KIXh>sglVe zV64GzIu|SPa~TD`X(x$8F^;?oJ}Oh>`qc-4UcRklyeDjt$B;ezCURB#l&iP+)5rS0 zD=PG$-F=tSa4o!sUn#&#e4sm<)Z^>Kw<OmC^xCla`G(;CNe<yZ0qw!1%~9a%h&2V9 zpl#gXT3qctGiw{+KFwM(iJdt0JkM8JxE7}$NC%mqV*T*rP`%w;z2U@8DOn#~CPwZX zwb;KNj714Wz7uMH-8No?M2@Xe&oG5pxpm9zGlM&^b~QjN^IpuY_w%qiE#~C-B&ujd zPu;iGRz1n5qtdrKJiT8C(u2#o6zjHD@x*R_)$e=V@!ZDnG-8B^Qh8ThYO+l0NR7SF z^f6%vVT5?DtN<4Kqrr+49r+10ivhb{aSd^|!m^DPxUi6$&kgwFJ$_4cPvaKM%i7oN zTb{;pPyvSR8M*D-fj|6|m#?{7{@z-5ayX^War^i!7<|y4WyKB&zjf;RY_a`c2+oOY z!lgN)1VyMJyr;Xh<*koJn}1a{RvvhOD0!2Xl#=?c&tG$c!c=4KXghwKBBfaU%Hzb? ze>us;^3~*aA+ZqIz!lM=OCzd<vP&XL%RWHO^mPAqPy97^wLoJxdkIV5&?4cjruwH+ z5B{nlUw8AP$Hm)TH0%zW)D!Q7FRRF)=kw|-UnJzNJfU#^X^BbcPk$2zo@8RoWlDbI z<=v=eo6(xqa?@b3B=~ZrIMV4>0u!metMbZIg#^XgQ;Waw$O8IkLX(m$HzUqYoANu* z`La+vF`LJt%05*^DQ=0hrC%Ljy05-@|8lh*MgJb1%UzB-tz3%fXZK8pOKtDj7W^Z@ ztZ@Ru!=yQcY3Vy;k55P+mTXB^#}7znF))41kjrU5uS=hy-cZ$wu@{GAY&x@FQh`B_ z+`3TNQ(5mP<QjSXk!h3uutic7@ExB8I}M8C^h<sh-5tVybDmpO{PM4IwWR>MuAHno zBZN&9^Bgfy*?(Tq>q3Knx1GSh+wT7#Db7V&7v^CA`2jL!u3}wC^5Q=iAL&Uapnh0| zq<}><`Oh{SZfM7jL?WrTvvN2pxH#d2vG)276(}#-%)5Jdu8z+s(Pk8hr@C+>ZWu*k cBx4RYQUC!Zr=w-jZ>6JY7d-^o+uLLQ51XS4@Bjb+ literal 6688 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 P!~Zw<%k2Ld{N{fE4(1i- diff --git a/packages/ui/src/assets/audio/nope-04.aac b/packages/ui/src/assets/audio/nope-04.aac index b731a2a0790b6a90dffd9520d2d75510077b4ed2..0abd12f29790f971d005fc72093e94cbe8a928d3 100644 GIT binary patch literal 1875 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 PD!b?81rpBWlX(0Klg4aV literal 5573 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 E0_1N1YybcN diff --git a/packages/ui/src/assets/audio/nope-05.aac b/packages/ui/src/assets/audio/nope-05.aac index 4534191b6c0f5c989da2d6105fc022f260764dbf..2352663343b8f4336eda09257d4b056cf6376877 100644 GIT binary patch literal 4797 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 E2R-c@Y5)KL literal 6316 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 diff --git a/packages/ui/src/assets/audio/nope-06.aac b/packages/ui/src/assets/audio/nope-06.aac index 1608618ff111e788d2176625123a87a72a7c9f2c..7e5b66ecd900de06c58ee27f0f6d57f7950857b9 100644 GIT binary patch literal 2812 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 literal 5976 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 diff --git a/packages/ui/src/assets/audio/nope-07.aac b/packages/ui/src/assets/audio/nope-07.aac index 5ace479880390085c2c48592c43d76e95f16f664..80b5b02c01c7dd3cdf3f22812222205d5acae7c5 100644 GIT binary patch literal 2095 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 DTp;c! literal 4957 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 akERc)oUVbcmjC^Y|5@vq{<qfuzu-UG2u!;G diff --git a/packages/ui/src/assets/audio/nope-08.aac b/packages/ui/src/assets/audio/nope-08.aac index 7d3c9d61911a1055844e70fa9fa61f3c3226ed27..96e92f99f995525ef44d6594b4df38951445ade8 100644 GIT binary patch literal 4240 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 literal 9621 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 S-}MXvAeqMg1N#5Jm;VDZCUso^ diff --git a/packages/ui/src/assets/audio/nope-09.aac b/packages/ui/src/assets/audio/nope-09.aac index fe6ac68b7d9b83098c51305d1059fc8a24a8fe78..d3e545be376afbeb25fa80d4e38ee21b172c579c 100644 GIT binary patch literal 2994 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 O^R6)bFJAsXj{gB{K;jAj literal 6120 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 diff --git a/packages/ui/src/assets/audio/nope-10.aac b/packages/ui/src/assets/audio/nope-10.aac index 5576577a72503137a59a4a9462477981b0e37637..798291aadbe013f11543c76659476d7192feaf9f 100644 GIT binary patch literal 2302 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 Y@lZekfBXR$AP4{PP(T5H`~ess2S0Cc4gdfE literal 4356 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 diff --git a/packages/ui/src/assets/audio/nope-11.aac b/packages/ui/src/assets/audio/nope-11.aac index f00d5ec3f73fb7da8d7216879de97a829e7ad3e9..64caccf36a6643a93f9b50554fcca2deed7442b0 100644 GIT binary patch literal 5767 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 G;lBX%4JqmX literal 13297 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 Z1p<aw!BDTvzr``}1LFTa{GXM<{{xxk;b#B< diff --git a/packages/ui/src/assets/audio/nope-12.aac b/packages/ui/src/assets/audio/nope-12.aac index fc766c08d68565287ce75bcfaf2077b8b607da6e..39ec243b551e925b238f5fd49a4f3a30f8a04a23 100644 GIT binary patch literal 5722 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 literal 14005 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 Drm~N= diff --git a/packages/ui/src/assets/audio/staplebops-01.aac b/packages/ui/src/assets/audio/staplebops-01.aac index 01ae83db7344c7be98990f47511d7e8705fe5808..8bb6abf28c28f871811367081c1af61944c7c42a 100644 GIT binary patch literal 3888 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 literal 5573 zcmeHLXHZk?+T8?{qC)6JTIeVpLg-RM3m70slS7v#pcH8e34#<sq$40AQUf9)5~PC^ z14s`6MNm+rNe@MkTsU{`x%16@^Zh#K*XR1P-*;xuo_W?<`*~(P<P9WR%2^iz(F0hJ z6maqeo$YV@hXMPALYCUU8%^Y6%3;p@5X1<YfqabDvA7=x5fwpp!d@-k$(@hJ>~G)2 zdiILDX{4JMm1(`_Cp@f@WBrCKI8avHG`~&hL}Me`-oU64P-q3>;=QHwf>Z$4Nxe=( zFq>_o)iR^2PvxLU3)2K>0HOED$2nA=69LLmd9R`p82|wJVce;rX~w9St{0hBA_0Kj z3ct|Si;ywIdjdTG06g_%j*_FXF9ql61%i+7r!^@k;xMUN!UBmfS_vTb^ZBi9ouAy~ z+arAMb(TCYm9?hSM06h(Jv?yuIYhGAXMv<K=OXgKx?fw|gvZbACey;^7WRQR>Rhz! zkD?!*Hn~aLpRMiI!E^;t!oP>}F?TL8lJJ!-v#}W>t-3Dxd)`AV7Q8d~zFR=yOqDuV zs~ng`)i*z@YUE!=^HfNee)eX#M4^V_#H5lCqe`$Db1a80ocNkQ@+fLezs8AbtDD{9 zGHla0stdKx(_Z#eq3W8y$z<4*tyR6x^lT}DH_uNjC&_d2KijK5@DhejSBEUs@ZB(- z+qKnS7&e(qI4jp5u%cFh=mIF{te&w0rwYP&W1lYlTZ{6x6Y10`79faG?HSyAS;eKd z%(qeIfquKI%U2`A$i6B&;!pA;&J#8Ff09erB0|IzUfUv(46C24InU3PmMc(gNxY0Q zKHE4IHJo)_Ji97-{Te5#MVhX)L<iy68~ElPTcoMO>U|%jD1ZwvoO{Hsl9E{a+#)4L z#-ThkS$g-z{Vthm%8+DOrE6}HocP@Y89JK+fZLilMrIsQk9Km-K6R{F0P)sWU$0V+ zQC$V#tQc@^ePGsQzO^dE5x7Smgs2AfAHQR@1Yap?RIHjn2n5-FX;Q^yzcGd8hFz@M zVHoNXbN=A@DorYfa5<h?No1LuJT({n%WC?X<Cs$>rvJ{Dvf0OJc5GeLX5rktzlfy% z%k#UTE31ks-^80yA=G2hb@D=mbzy`MRI^9z-L2=8A(PRiZ-q&M&BNh2Oi+41h_@<_ za>nJ05$%(*`29MOO8Y(@5pG?_7Nd}tS4uW2ri61k7&{M{Md?E6sRN^&Jw}uS-5HEl z9J)vYEf1!GlWv^5n~Ccdzed?qIfBwDpcIYS`f&cE@^!mkfJSpuWYcb63#m>-Wy7I2 zpk!kKi#31Anb(7}aCsc30HR3k*pk&ez+wZC!1*5ssv3B{?~BAujP<e53t=M!Pc2QQ z6P-0MWe~)q#;4M=?|UmB&fpdgNViyL9EclCKa$8=&HB8TNqNaGY7fQrgy5zM0vQ<n zqObX94fXD)+=RkhXKXh*mRtt21efcA*q<-b7bRFS=8<Z52j+&9OZNiHSE-#}S&8m0 zOMBJKHagf(SXJVY⪻2e8Yn_!1waU-fq`Pc-9K-p6jTV-U8Vt;1Yt#Bgm#J6e^2t z$(ux)`h4-Dd?4p}kCCHLr-u}xp>NT!ppMq_5<UYnb2P}@paf^ODjE(e)($Y#uE&oN z4Z^VE2~d@?ANDu=^(PAnSXCBk=>gl?*G;BygAVt`YcJb&_D}DTjW;dpO=e3A4EIf! z<9f&2Bbj2LxoHg}RYnE<911B(k0+oZ66I?5&vAbrq;Ja!Q~ng`-BmLJTmNLe$NlY@ z^5#aS&ZSk0Uun-I=l12M@)lAzd}B7_<@H42FI8?X%e$#G1PQbGQ-z*p*vWpeOg2Sm z4S$3*ADMQEfXRIE9{|WXRo(2zHuV_2hf}7M_}Y5Gcbc$Cr5?Um`CCPvLr3c%TMGxw zFROtCR@b3Esey|2!T?ciUqqC)>}7YFRKVb3+LV!+#<QL2GwZMyp02GV+xBr{CP4oo zJA#QwAtoxKa8$$BP)A;?U#|wr7<7iV)isM*@=i1tq!@#Qr9)pb38D+F%S37SEU7kP z_S6`B*fZbrCqUB^i`)1?7&wX-1s9tC)NMB~C@cUQn@7#HJZLwZtCwl?J|)gt9R)#_ z67njw)j%#*iyC~%Ft40eX4x&CB*)tqxY`=8V7bJ|7wAfLj?8U&nfIDfLRpq}q&yTh z(nU|{7}^O*B<Ug2Wm&XiDNxv%S~g}a9S=J#aglh|v0AUu`)(p@G54d{!6;ebLw3nu zM9D>`gti*3(8j!h?f2HBJR@9S!Mm~}gAnit0goWOlR1qJ>7NDo_oT!jb36oRbMp+m z32Pq_euiAOYWJE4>(y?%gPe*uNV;Cb$U_Y8O$1eI)YYV<*HZyVvEI7_C%o{0I3O3& zlIp<m0`Z!LgFvSlvaPHD7`Lu95CYSk0(a_Jw-2Vd69U{n#I<8~CGx@~EP*@Wt$|h( zO}&0UX4ZoALWf#!_Tv=qcBLY;+j?((c$4Ct(}Z|4EM6*u7S@-V3Dbr9!F%#)bBzLL z++<Obh9ny{-M+{_Wcwo=w&H^rev+tlPc2M^oTu*eX7d_aO~ca-=XpqD15#f<V0C>W zszZpYNsM%jk#iAXTh&bPgh*GBN*1V@6qdqMkxg1?00-$ydNt#`(cKqT884Mv6Nq&@ zuCuF9iyw^?yC)!ZQYRDyKoE*;e~#r=aRzA}T*RlG#b{z3nEc0H@Vs$`?ctG1*m86O z>TQ*0)tV8bIYD1UTLL?KbI!`N{IcZzXAx>>+BFq;k4SQ?H}k8b5aFeZew`&Ej90GD z?1;SR|5zFy=w5snYq14mT-K0CkNqWzE|J*kzR1jiNN6)%NeJe(sG|N@zY!!OyQea0 zbZK=cG|TDIcq-n(qc^%_n?0z6p0IcZ%&jB;?M9~>?c592@E<eOUGBJ^p~-LlMSaRW zlx%EEQHNw(@8GMJg)sH3BW<4sO7WZ;_HWl6H(&fH&5M_LYIUu9vRq4^vf+-G**Oo% z;?oc6eq|gEWcGG$?y1j^^L{KNr(^7+*vso*)juH?xtz1Lla$guYEe6vRqJ1_UIcAK zv>&$t3V*n)F>uPK!!GC^V?*;mfFyOtpq+soem2xCAD2y&=ov_LPwyKS--GQZUPNH% z>%rizdFCYp^5!y0m+inW@#x3b23{JvGfBREjbt~F;iZ71$uIbQJfOPDFn6PV9}Tc! z7LF${HaqA&^wXmD1>3UECpul|07Jskil^zjbZCs!pty;xs(gZ2F^bhnv#s2Cxp}VE zHzfqmny}1f5-Rv4_6qvZ{SP_0^IN_qJlfjQ`do*}+Xiu89XJyAH&=}7)nfBiGtz(h zI`yl4Tuc*l5opd`zuH9-gW4CAcVC($apLsbWNoP7UtaINc6-5wac)`OvA+-h<7M~^ zH+<FrHjd5q{?%o=G6CaiNbX^1EgTGQF07j#hN_I(TO67Z=>ja}YlO|-4VaQ9hw*Mp zrAtnj-J1N+QEw@y3!nK-C_SHniUWDmtQ)q}>{je193rWV8XpeIco}fVKAq9edZRvh zRUIE(mvMHlbdJ5aBKR|5R3{dlZ6SkDw$o5DRLd*<{(Uyk2Hj*IV;s$G0i=t_7pS?Z zpCyX{jNN+=<|uAZFW{K`KJs6D=*TI__0h&FyI!v%_soMn?`}FJ>kE{}BmS6GAps=_ zS6W6dU7uD8qFPKUJ-vXEA7rWWZ2Zmv3~Eb#Sc@09tRC3NE6X|85N%N1LRuWNmMb$} zpV?koTMnSw(F4EhFMmwAX(yJ7G2@P#og-XRnQ%o*W@PPWb}^`|`C|JF?SmJFaeVa! z36ouqz*pX(ddv|^!LU<`m6Q=P+b*P6r<@cw;`GZxThnrM6FM<BGW3(;zOfm6eXB4p zlaAO)us2X0#Fpy3<XKYg(0W%{fen|Z$ww_w6Iv3dV>4Dmg$<xSoK1L1oJ0+BT#l0f z`fhR6-+|5a3p%Bujk0ZuDg$kIBY|LR@S#GGP;m9rnRQxXrhjaVlo^H(_HB5}7UbG9 zqM^<!W!^0vxz;I3b{_(mFr)`31YJB1N?d7oiopV)IBm&p`NYbG;~psfhye%&3e1pb z8>%~RQdhFBm?bOc9!zJ@OIX;VvZqa&KR;*oVS5FOk<iV=rs~gPWcciC97|l)D5gLd zJ#7lVHE{9&WBmC?pJY(3v?OeHhumE~{$hio(_>tH^p`Yc7(pyFUZEOWU42jvpRYF9 ztW@2%!r(e#fdH%La!=i42QXWcA*@Wd_1U-ms>A0Gx`XwszlV+u9Q>4q?J^`B4xBgc zv$lM`4{vVy0+l)#YvMuATe3c~;wiISsb!fQpu-vE@WP9Hc6fx&#;EzQi*^>}5ZvJ} z?5`!0iF-!@Rw(xj=W!gL3zMDVhg$+CGvjUY&{-<Y7!X&!2?_M~2gJWSaQ-jf`!j<| zMV(MyDRz%X3Vv*3LF$FQ5b6Tt*k}Udut@qckDuGX=V{N<H4fvxH}4!HPAYHbxTOEK zO&xTvByZ*jV*DF_G0<e7o%w$vi~6L4oY<W4_p0ST3zq*r|G8DmiOqjg{$Hm5I@vFD W`~%JF->v1h&HtkLe;oc9oBs=yqHiYv diff --git a/packages/ui/src/assets/audio/staplebops-02.aac b/packages/ui/src/assets/audio/staplebops-02.aac index 698137c26174da7b9d2fa921555943a1004f709d..577a9e7f5a400b1ac6cae7e8fa46c232a2e3d103 100644 GIT binary patch delta 3510 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 Y0%1T+4hEix`>V~rLksq=|NoZ%13xp$-T(jq literal 5945 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 P(P7f&Ujsk%sp)?J2?>qI diff --git a/packages/ui/src/assets/audio/staplebops-03.aac b/packages/ui/src/assets/audio/staplebops-03.aac index 5efa4451ea511ada8987924f395bdc43886fe101..934f19ce706e421022176377e9b7487097c7cbae 100644 GIT binary patch literal 5310 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 V(sUz^_V0K94uy>W4u$`J^naE24~qZ* literal 9660 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 diff --git a/packages/ui/src/assets/audio/staplebops-04.aac b/packages/ui/src/assets/audio/staplebops-04.aac index 02d6bd5d7cf8a5b4be748ee6a931e7a2718417cf..3447c27341077150c44a95026c9d07bff9ba9e7f 100644 GIT binary patch literal 4667 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 literal 5202 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 diff --git a/packages/ui/src/assets/audio/staplebops-05.aac b/packages/ui/src/assets/audio/staplebops-05.aac index 7f0de4aa5c3983c2c80d3a2b973bea866b36faef..6d20a1a0c6a84298f4134f08a6ebf2dfd28a45df 100644 GIT binary patch delta 3431 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 J*6Q^Fy1dk<rn~?E literal 3716 zcmeIw_dgVl1IO{>e2mPHP4-U2$vDp0<BUY&?7hdy&Q8{qaCSzV9kR(f*>v_wNA@N{ zcD{K$zTf}g`}qF!eg6s1*ZbyBFHFQ*nS(<GK&ywRdUJTk<p2ARfZ1j~ZQXx+tv7$k zLDu{nuy2yljeD0N^|e_`_xjK4CD;~YR78g|pO$G+1KGe?GbQiY%5&z2Gepso%U(~w zqRGr62=_tifoY$rQ=PpusC5R{`^?ylRc+er*sp3~vO&&fVWT8{kc)u<);KDlS`J7} z>=@k0xr<cTtH4-Bkk~NA6Y8>U^682_uvS;;vQwf304zSiNOS4J1gV};=NuxeFeW>^ z<zdoMfRG^3qwe*0o{9N^!xDK2M{-^r3bHTJq6$-ig0KEbRHCf+pP<Rx_$}x7i)IzD z7S;vOKi&ME*j9WDAQ_C;7xd2_`m!7b$e~VY9p}y#(&UR+vTcmyVlta~&C7YS0aauN zuJX*~_5IpWOQwkxIFj}{@)V!VKbfhPVXNi&tPOv?I%-^eB;*So>|58Sv#aiNszHkp z6SI5%j-^cp@C&Qp9tlS1=nC;=noIMphu(<~(~kML09zUy;bO5Rc)uycCj6DtIr?Ib zB-aKLiKB;Po@_~rH*-0qk9UTYzyw>CkJ}vITqxV}I)cO+0;Kve+*knqJ2^_F(G%J( z5htBeVb9xCP!1di%nkbEHdUl_#;!&Cx4hPyrXp=acs<ID8pT~$Ho-dfv$-}fS!G)Q z5mur9jv#`TOjT+}JXHS&9U;u8j-P#7%RZj0cXK4*x;N<uC3IBi2L8Dux#vVK76L4j zpZLAEgsac|qr{ecjRDF4(Yt(S|D3u<lV8N(0ecL51IEHn21Ac<lZ0kg#Vjxd=9~H* z01a{ePaU)+fEN;Fld%1Kn;E>tZ0kj)3RSzA3XN_yFPK!*V$rB6alU9Ra_%2eY0mFM zy^$CN26+6shY`ZFw@8EgHqRAPaS<pZp`Q>JGn3mir_U<<bm+5PK%z{<gj*teYcji` z%K#GN#wgoXK<$%s0DzM?5(_XWL=S+gw&yCp)N};=3QUa^n4C#74bi=v+704S1$_?U z*}BugsJ~!@st!t0Ie{frX|{S*c@)k)qqGRawl*xcW-)5~UK**+k*=w)@6_c_t;1EZ zU`0w<+h)Bkp0*cS9dU;?wor?YuUltkC*zpKoejwn2_;=zZ9cv@8}Qf|T5DLYVK+B% zfGLWY4Kb;Gdp#Qr#fYBs;EKjep1ZcMhq&8e@SIg%KbBqZrWCL@?TT{z-t_#f*>3Oq zk%oO{b+DFj%NS>%A=>5A6Rf0UjyygmSP*BftfvS-C+LKt0K&l0V>wFwf7iv_9zmfK z#R0=YEdCzBykY6{Wa|QgRK?{O9W`KaGBj6O%uQQOT^N&Ecpp@>q#+ls^!e?`n*y<s zacTYMku+IZj2$Po062*0x6O@t0xD|Rn@P*AIpBvL*zZ9C@&GX%<|=<!4c2$t1%<*J zv0qO-7<<Pi)4aFZ9gO>}uXjIYo#j!BE7n=j3UvB=JhG(3HgdavV9)cxUf1=S#(FpJ z8|gb8$Y&LZo!1kzv!vV4Dl?*yENa}oE<wY#B1O}Qr08bc+arv97=ZG@U0h#77?G^M z6%}=)-~ph$fl!<sx)X}Ml!uY4GlTpYe)}S8fy3Ni%=54T26TZCzKRAuM|G<CsVmB} zozpUhedeyFi?p9`;MV=$H_->X2iNcg0MXSW$E=Zqf7qNAmI1s`^6NMQVB<CR(*_`K zs6fI+fsyOD%~d#E>bgQ-7(h4~*8<e1t^>dNRrC&uB^AA_Zvpx#R(*Y&>hwM(R=dge zkE_2rnItgXH5HFc6cAcFA3oHL&$8*Ut!_{mD<`JVt)9WZg~00|y%Ktvi`Qyh`u$AH zsT)-tCG|KuxJz!8;2<18)XVdB8eWbe6!TmJFeF?^DaZ~79`<;(*6}zTrhe0F=Ob{B z=L#0^PdQ>^YdmF5<9z+Vjw_dCg}h;VJFff5bD|HMfoyq&F)6~zO}8%)Swe9HqU>ri zyTipShqKFHPDzdjeDt2K4T6`pZKKT%L8#0;Yemj*1zm`uL_4D>=<Gh>j94EiRCSwe zV<Ahn(YG<+@%&qXbyh|kIJd>i9Uk{_Vvl_H{FMjulmr}J9x3-QUH(_o0~^Y!L;9S@ zMZNak(?qpDE1MutEl4miZak`DQmNNyG3RdAD&Gq*XIf1)<L8pzHDM!Dy(DU<A(l8t zH}~WT47)y!%(R{i$jeJ04%H~@VD|0lkEG+}+EdlGBZBBsYdLogcppnmtSlWdEEB6T zn;b!Zpz&VAk>s6&iTye2QxNx}M_<u3LT9*#{blh^Y@co@vijRYmG_TwYuKfADCRSo zARz_=YIa5+s}Vyp!c6H5qR4Lw(5LtFsPh$LX}Z5FOQJMA6{RC5zni^zA^>|Wq}?f~ zeOB17Ei5Lu$P1=q&sMJF<(sxC3bYfI0-P_`SnMQe5K9mHV1nK3cuN@G#pLPHjNoqB zMXit=Ov!6&v5HW!Jbs>#U^c<{%hC#u$`ik~WURNTd*wu}@pG3&UUPhY+8U9g%)4{o z`Q`gD1(zc^)r&!O8Dmi)z<W0q+1?c+b5{#>o37pzK7{GhKe#$jE;yx%Ha~u!M#r<_ zLVvcs6@iW{Z;;{3t%Rg~Nc%-}pVz+Y@h-%Ezq0&t#LvGzUqt<=lC&sf&FfIt#r$xa z(0#p?&&=mKXbIHl*&|C@9Ps!U=W&`dKKiE%UDtNllO?(|Nk(Mlkbr+u73TwemGm`j zA}!U~);MK3YWTpoW{qy?{b;ObcKwJFKObd6tpoYxHT-SBS|o#ZrL=fb9!g9yNR-gm zGbyrA;bHqsBe}O$XK3bR^0UslJFWOQiil$DAIBacCO!OCZa-JOFU|j~N)lRoThe*; zpj_5cpAIA6#6JQq*2x{o#(pw-&0497Azi`D!eR<o-4UDNGRd~&H$ppb=Qph7=@zmV zIRyjzz#SJM@|Ofd7!~|fm4(II1pH9+-vro(L=vmKS;41ApNHX~KMWJ#=0zt0@<?OO z5q?^IJi3gSK6$3qL&1*jP_E_<p8P*6wuV34VssN@n_n<!yrLVd;k&aoWKq7J9a|}# zKzP^%n?caoA~Hy}!M%O3vb*tHjN_ox#EEsUdmCLgsx8%!g9p<3#-QqQbQChb-v7f4 z{m$00&%pZf6>4j86OmgzAd=|1Bq$?h=teeM$nQ+sT|6;8U076_<%wmi<rBdFL^0X> zWQvSh(}v^CmAJ*EU>}dkPHyd=>Q=!rVj0~GKdl-0<(zX7<Yw(N6E;KoUvY!D%*Dfx z6s&?$e6sk91hedIdf=uNhzAnuhK{)iomIym_$2Ptnj_&`+MMN*<Z%nT1-u3K$U~m? z7}D|=*%zDWTTV%6u;VYvH`J))=<%cRMQ#Oomiqq+77izMDO1ff7($}1gJ%@_`7Hs| z{o@CrCAuqn&V%HF3Z113e|F+u=9aBcbj};k+9F$|=8GpZ1G>h<PhvEkyDgSOQp8S7 z{bo;eR}mW$eMa;Z_RN`gbKG)36K?xqW&0wMUw5y3ub1Z|8MRZL;b>5BM88hdTyY$N zXD=$S_u`Vb;U3OWbd<F1j<4aG_}P)>Xiyn;%woPsB;As!&(yfXnvEld(ZI-w9P*Hm zATnB0q9&SfSz&`kc~*JBc~x^}@>svV7ZF;wcF>M)E99*rN~e1w^&F&Zm2)5C5YDZ) zn!xShYG^9b)BZ@xj3jBb1IT$rMpE;EgV;EPbi5ha?J@GMxEe_?*wP;P>Dpk7DD}L! zjGkxFB=dX_KpTGY_Lhr#Y4?_^J*gL(NTtk0j3H9iFEJ2M2;+Goyft1@ArZp1CtRsW zV+x}RIXr{u`0%1CBClb@$FxZj<Plgd6E7P6FsO46V#Di~!y3p8(pVY()w3fZO?4G% zC53+36@57vLcf@Eb#xd)x+DkFbFKQej!OMtU-vV}=KS@8)CN?kHmeq=mB0rLfn9ux z*gsBV$wz}mDn%(rRz+NlYIZN2Gp8E*_PsaC;)W(_Rhp+EwGLp0ghQ3ohV!_C<iYaC z8zhESi*|xsnp1SfmvVM_CW3__ma^QN4#$KW!@s)?Dm?HVU>+XwGd{zI35kKt$51AR zDfZ%=T%DucX=rfzJq>qg%IDG)hC2%K@_fSP*OR53iWbU&xeIwPqG_pHCWd_Fzf8eJ zcUTw&_{nWo_)in^p6K-r%A9V?K3?)Jfxx%GC#S`XJ@Sb+4_6#tOjgGw$49&XaZ8-R bxL!@*ozy2I3l`+VRg~^~*ijY!&$sw5mQFcr diff --git a/packages/ui/src/assets/audio/staplebops-06.aac b/packages/ui/src/assets/audio/staplebops-06.aac index 0c010dfb09248bc38f4876a42347a4bcf5e554f1..5f68ade43fa204ab2eb77182ac44d34510d3ea17 100644 GIT binary patch literal 4282 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 E0Qbcn$^ZZW literal 6316 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 UJuYdAe(S#p%vf^j{jb&bFN>_PuK)l5 diff --git a/packages/ui/src/assets/audio/staplebops-07.aac b/packages/ui/src/assets/audio/staplebops-07.aac index 7d20ce755aa93fdc1f96d00de52f772d93837a1c..895c06f9bb75366aca3019075e393891f26d23e8 100644 GIT binary patch literal 4627 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 literal 29351 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 diff --git a/packages/ui/src/assets/audio/yup-01.aac b/packages/ui/src/assets/audio/yup-01.aac index 61ad4ea83024719282e40a95fdf1c2859680fac1..fd300404f7f09b3bd2821f949c77bed83159f38a 100644 GIT binary patch literal 4419 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 literal 12404 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 diff --git a/packages/ui/src/assets/audio/yup-02.aac b/packages/ui/src/assets/audio/yup-02.aac index 885f847e72f4b3b50a770267075cd1be01c8f23f..68ae153a6e95dad9b0c6f649b4412c577d2f2bdb 100644 GIT binary patch literal 3767 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 XC`h$K{A?oxnT3#)=h-9k|4aQJ0Ylh} literal 6287 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 F{14uW88rX^ diff --git a/packages/ui/src/assets/audio/yup-03.aac b/packages/ui/src/assets/audio/yup-03.aac index 49e951abb66152e481dec39086b140f2e3c01cb9..6d5d968f80bd21aac7c4c85146030fbfcf497810 100644 GIT binary patch literal 7180 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 literal 9187 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 diff --git a/packages/ui/src/assets/audio/yup-04.aac b/packages/ui/src/assets/audio/yup-04.aac index 545067ecdaf1d2e84b8f88ba04b9ebc63e9afb33..d3e88fe958d06260646acf522dbfcdd4dc5a4d4e 100644 GIT binary patch literal 8376 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 G)Bgdv$SjNi literal 14164 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 Z{qvK5<@Ufm??gyo`jLNo=l|c2{{vg__~8Hm diff --git a/packages/ui/src/assets/audio/yup-05.aac b/packages/ui/src/assets/audio/yup-05.aac index 90408d3153442c2caf6628b6b17e294d1face88b..3613c5d782e2e6c5b3fc1c551a8e097011a6cb74 100644 GIT binary patch literal 5423 zcmeH}`8!nq-^br$io&3fK}5=)eJ^IvVk=6rWEn+hvt^mc3_?=YWX%={S)xK&1~DX& z$`TnFB5OWl8)oKwk3RQxU-$jP{U6-tnz>%@Ip<twuGix{pU?LTTDHP!<TA$CfQ4(| zWi3@DRb3@j6;;3{P;udvhL~V<RDQMRyo1PIZGw0EX?jU&g;u$Zsf4xT*iE1Pft7a; zd?9CMtBxxPG8>ax))N><kTtm%f~7~(Ee(F$@tc!*O^!xC6w&ZP8@5D$IyQFT+vZrp zquVl*gr9jTcZW7cLjq^pxQCZ{dKz;&94ry*S(jRRYHr@hQF;?`M)!?yZb{fB>cC8C zL)bI|C;5{mlaNAPp(Ongvvv$;Qf5eJ$`=pZ8<7vKq=iuS^a*Ib?byZf%mX`2ObCF4 z+E<~`tzNE(*`(Js+#RkYXF||wQ1f-Vp;e$m=whv5hd>$dN%s(ZV1$hwxv7C#eIZr6 z_{YMjr4-e6v;cSO)NTFJp=i1Cr$HUQA-pp8YdE+WF&Y;|_ll-Z>P%oy+Qdk9K5FA> zUS%AqZPu+;iI%;@^FzkHGxjCdWfcRQJvgwiwrR#S>ObgnIp$q1*O>vw)8Af7)QCI| z?b&PTORY`loXX*)vj`~34?1m=W4z+Q!R9B)1M}W=ZcFB-(D_og#XC})*%17WG+h`7 zwalU5ei`?S7uGI=w7L4A+7m%(F4Rfj{uKmFoCACh6t11TnqjPX>f-xciJ!sZHVP~{ zlw&;76qkhIUE(|%R*z5rndY<7Wa}`lG$F}aXp1YyL)Kr|=G!OBnEt<@*fvr2fubgV z@1FeEUsrcAo?7bNJGnGL&HHp?Y^zK`jFb{SA64)ixAz;be0ubo8^`;7RGpsQ+#4>v z_REXKj>#!$9lrYF`DMSt*B04ypJAu|l8SR!b74OH(y;)lOZR*Tf5Dx;^PhIxlqVdT z)$Df-9%pv(PEKFC<@cmO`@PIm@?>J_Nnh3nTfWxrpUTC`(>F2VN`YL&G5kHQoLb!I zLyeB5{BiLL`GiAa-uTwFUk4?bS~3O#F&MmX%GY2Q5jr0;zFHJLr~j<!QNoAs(WXAG zZ)!XppQ**?DbRR?+_FO&AG&9?sfnRx>ctn;)fKASJHAkHL6e(z-wL58>IV*6(3S4Q zolcc4Q4SB)lONBj7xa|%OZd+DGz52%_gr+ABOxWNab-`C!hE^NHNRzk^V8e|M(R%^ zE!}RWjc>mx5ds4tz5cv!-5`pbZ|!MuTTpas@!Fu111*FZx(o@k0wC`d)=^qNhqkU6 zeS_j?HJFd+C^*h%h;<LUd5BujtytY9>62Ym-K}}lWhC3`>A{a9_JzB?op7}?;`=<V zA*0)B^6WnUDL-{1XVzPbddG4(X9?8lJb)PXB)LDfcb9~}MU+kPGty4B!&G~>28-%M z!Se4du2{|-3~*VS{|JC8Gekliux-r%a9JDxL<h&z?G!%V?pB2IgEG~A0HnHgI{`wK zwB3^U0R}=u`^EgVi_yq@pBcAXVhS-<kduGLuO{`-Am`!fX@}C3_O@x7zb516HT(u+ z^;3!QTd$w*kI8nP^<rET;lCI(FdKG9HYvO7oQ3mNlXE~-rd`E;;;bZIt~G;8S~Iq^ zvm;%%Q|rV?shOAHh{}>adAdsM>V2}cBv!XQENL=LO;za0v8cToarP=gioz!hkG9s- z#t`DpNK3bTJlwKMtGj>YLmhg}C7%T`@Wp~ETeVXJ#m{AC<+qe7t*3qvGG^*o_{Ao2 z`~_)rh0JK!ZS^YTq2i3i4PlOmy%Oj7(`{Q<T*ilEw)>TX7zhFFdvCC)@^;t0p<7yF zsA%K-s+sF*3j3l@xcUq^Y6;bfH4m;Z2-A+U1cnPsx7US<Szm>27-}Xf=w(hvE!9s` z)|rjr1ylU_uRO7YrU=gB^!NKcwDC0v@d1=7+SJmfPwre+rO91!(>szo^wuhoJj17W z#g2h8d6Zp|?-`LekFSFPTeM*C<0zY_71%zw_N4Ce$%7Y2fl|r0-0%W%Z5YQ3S63V- z7t)2Lm5<vAB>xFH&w)h&s~Nu&{AY21T?-4u5vqqoAUc7IEeEd|R7ZIy;s$!5S608^ zr*&fiM;a0S0Ki`0b}WJ`g|Lj#OY{nQzYxuzcjeedM&|$k;`=rLM-|8Og2`r9$TE1G zu*oYy!$*E34hHKtns{GjEqzH&n_H|ViRXwA#Yu>X_CwK#zw(iSvum&Rvp^xS7-Pw8 zoJUYG#;%DoZVsZ{k6Sm_sVfW?Wg1c@ud*<q5S76US!Oo(Vjc<F+PLW^m1MmgH=7+a z|FK^AXY@>X<-21#HJTw0Mmx=|gJvnCYYXW0w-;0UZanh6f#ncrI@yVB%5%A)fcShC z*=P%s0k)HvlrgyOW>sdHZJ)>v>?Q$#wgcQ&01f|6{=t@k17LlYiT45Epx1Ice7Q>p zAh1><&9kA|kp#MdU--Mo*rwgdWFe^LnTQvbZA7a|+yV)P7QLz_va<bMn`a0NN8I%d zr|4zf*2&5tJumJ%WK9)|p9N=~Y$<DxnveG5jQ+UQrz0g`3%U{aZwu`(Y^=So&`unQ z>T>n{E3_EnOG%#B;ed)hm7iqiW~rU)Jwjta>uW3uCI%8C<V>$Z$L2O7)CP0Hu8lm| z@+ZfouCL-K$NK_rL2dndZs^DU@xK**S&H|&2wZfys4-yttj0DVT!aLErg3R<CwIqZ z{T{Wn_>~#*qVej(akzh2MHEBsW!&~EO(IhFF<f`)jLRk-gRjJqKtB<{Ty_wS6ZcTg zD`YyEXfva+IVjpZ34r}rz(q`FFWxva33vlKpR+XpG`m+%5-7Kq*`q)uEUnaddef6d zUwPF8wsNi{v?VsJvThkF1)Wqp9jicfCL*j5CF6(}h@#)~h(cjHh4QNZ*wQ1>ha)=C zKWm^lvd%UqN!XCw|8g?@Z%(j+uImZIhJ-me>ItKwrkgRj3$$g3y38ab&@e3JgcX(n zG{U4amAKpD{jL2Ebx(vjk0K>Mozi-;xgZ_7_sEiCf1ogpe!{uoRCXT;A8v3l`B08K zQSjZ3akh<CMjug>ar2uf+$XFPHj1Xi4q2ED5Vj1D*#}o%o6qXQIM|jSciu&mu+s4G zdVTtBdKCbtK0~NPWe}mr-PAKBAymc+B>BHYo9YT^5J+Bv?6qsX<G+zFf5q!Idk75O zWSYxF%>y8^mSTk*LJsX@Heku?gp)}^V_WR^wShj;4mkugC&ym_pKTn6VA%i|hyCej z)BJ4;qWhxT@~b*;sck#!;LGab-*g64yv1rJFEf^*<*;Vz;DI@o$I36^fNzJDwx-Qq z^;Q_ibTYc!GY$j2C)l3k^P*}st`GgM{L>Uepkuzj>FjMBcWV}^ia%+R$bs5r`rJ&g zZ}gqz{SJHL5+P;N69`UVMkinf9F1jpoN#4#5>yDEgas1}IPFAs5&@9=YMi|f*dg^p z#$dl87F%9yXBSfRFhJLFu|Zwm*qV&DK9MQ{FZ*O6&9`!Qumd*U7oLZSXpnpjnkp=$ zSX1StLif~}9@srq82O{0y*80Ok-hd!9y^ge%z7dY{twKs1UQEL(nf;$=sQS;fWKSt z!CVGlXcrC0o!rJUbKOCh2UbZkY%5Xj*d9ly7!K|^R_^j#541s8@4Z79VbwF~(TwwD zk4*2=MtTzx42yOhe?Q5%_B%`}z5g@SbGg7i$gk2QZn}|Pk&W7QT>R)5`|8>;HJv~C zMNF}KJQ<oF7X9)>8744^ea&kPZ~-Wf*-9K-k#Y_sJY38Hk_*lh0KSUfekxIUp3&{8 zx?(xuyVL7_#MKK@E0*UHZRz4PFzxmE5r6pQQ_By_-ZmI?XFD^wUIbk~^n;P67V-9B z^@ObwJ8rjz{1mCjN9{pgsyp*SULsz~3TOfi{Z~LgQoML6i%T1Crz9whHmhNb`2HKh z6b9JPPK2W-`mAdoEEO?S+;$qj(t_cb!s2l(UZ8Igni;E%5Qgn0RGjNXSccTsp8HFg zb%ow!xXm?*{LvbD^W$Ys`SX*5ha=hU%suI69;OWiXnUOdydyK<zDMtziXM;G{@ocO zn7;3io<{oXu^LnO#1@P&2Mu6_5M4;n&?xXE{1cjq1;Ws=j~Du2(c1wvSrihWz)oG0 zhrijEW(@*fp^toMh0}+<Y#(sNa(#g*>XuKzV+%lc4SmzyM-q-ybeGOX>d2^QG^_vG zt=XKjiaz4>rlnW+6aJGf<y)9{gF@<$`ML{Z1|18<2cRXo63IC$;;h_5!w}8+8f}3h z;Fp!v(-t&)^wYMZqz`P<x%Z~%a1{A}?f4F&`(uoyUaDtp-D#pMvDRsGJ%kNHZbEM5 zCgDjiJ^I6=Up^E5Hmhqd>f2GdvIXV}mnD#1W+ZljZUs{=*&TuR*+l*T6&Wqlb&dqS z=?U8g%jyf@LO$^i-~NrBbpy#K3mo-}B4}?30ASMyn%NiG|IL^VMf7V!BHVHBoSqIG zC>m94JHy}2>lG0J@|zFp6%GLRmYbwP7?Kx2B#(nDbpY^B`79;E9xR)4tb`x9stMR} za6StIHs|5Y$UdO)hlmfpeft^+zTLM^g&sr+6!3kw)K@4p8r5?2LkeMIEZdBAvG_{H zLwjI4by3g<AQgL53V|b7;l;vv7wW@{{kw4;bYXyBu$rXxqfA}T{@2DO30v*oK!z9R zw99)Be4%YXy>pu^$_(_IrQa0R{G0WIHX--ogOhniU8U}s4b&c-q377U5CyhBGyKz! zZ^;1*#J<2f&Ut=e`J|c&C5Dej66Q<_;L@+IIDa@SKTLun$7-P%?h!sjc?v#+!e{_E z@QQkl2-u-2W-<bY0zd_3kejIrUy-|AJr3_(&UmP;eW%a$=LbpTP3H!Vkj=Hk{iFAi z{gCF%<%nmGz>V6gvDE-vN73YW<N?`%d8-0aKe5lTK^P#Fk2k`zk=}zsQfcy+@-^kk z1$n=f8+dKetR8C6Y^XJHTR}2#=KO()9MX*K+9m?~3!ZlV5<$T;WAc!jmS9jNm9n-5 zElp1|36v3Ngyqp(%fwK~n+)SCK1=r}8Ux7M6*T)zW*tIO&ggmwgQ5_<(rmbU&TE`y zd|3wjHUH?|c2SQ=;g;{S$~B)I15EOe=Nkl#+A!~Z=|n+2WM=~0I8o>~v|dMon{OjV zhQtG){GLg}DFRqIFbZDlIuR^9&6OVvxCY<DAv%4I^P?3`zz%`C#A{U=2X^9DPgw5i zw#AYL8SCpMJ6DGv#38wifG1G=EMd!4SME}M?YQ@V^L+hXp%qN_{E<5^xXrJaEE#a@ z5iFTgac-5(Pg`(uWAiRvHkU9Jt8o#lzw9<Y{xN=pcBG^zxT3+WPFTqV)CaS<WJmtH zpGm>)o7KMe*yhOpP}3!NQdB#_y&Y1W@ZinKawk;w*0MHN>C8FEa-Fsnh8biwgr)Ml zO;uK+g;0h3ZF`L><P+aZriXasrMAc|OjmHusFPdwID0#nYschW#*}{Akogf?C5rAl zbR)G;xnE}!@Dj=lqG41pH-{@$Vt=jo{#>GDI}twhjDGbw98mC-Xa@vfqv?Ml1^@(( z-PKtSHk&w8Xw8E7lQSIaPFvhSLC<0FHQ$vj$+Hz*Q9NvHOQX2H7vrJ)^ZnfZis=)r z;kU=#!0ynBRY!nmhy2Myz7MlDqT7@R>qib|1XB2uvPk;KPGld@cfuuN{~dcU+xuAh z8?7UIZSxbiT?XUW9-K3Uc%r&xepBaG*D9ck&=zLPm%a&+w>Fl0$qAL|yxf@`OY*a{ zCp(VAhnr>(L*Cr*Kq*0yeq7R-NR8t&N#to9>AoMP;sXQ<`K?XjFC^>Sr!CR#G|)Cz zTO7TNjJA{+74dFL?5`e#ySxljPUo6vd3RTnICVR>l_Z2IBK%pY7I`bdZHI`2$yvpx zHe%uY8fW#F0&vyY67t@GCUv^2@F+7VQA0p@(fPF=JX4<K22rP5<7Nm0GpW**49Y#? z)m#0JYL`sILTK5f)$4Je&yUJpWvt(2$1E&X8#)axSZD@sn@cg5fiTb}8p+#a+?|l< zv(nhh9UnoJ7{bY-IWr(u?u|L>8J*Q1Tlg)Tt+3wa(3|c`No38C61B)GV=PpQZ^P5p z<n{2?Pfte3N}Ui0Ry4dU^}zvS^UwD%uUkcC{f}l!Y*jU-Es)%?>H_8u-m*A(M_&-q zYt$vHZKa5+6HwY$NPEf4T|#6da+J?d9l=sI`{-M05xH6V&_={WB0@Md6T`}lO@E#j zv4I@bUW(V}9SP-Frd;`so)ApJP2G9db=xxIGkO1|!hJjV47s~7u6_1evJw%T%c@as z<o&+iHX1$XO*T|6vPg<z+5^tn=AIEKZIT+V!a(GB6L&w&>1w?4J66rDE3L>3)aV%b z81WT+OvoJOw^}r`yfAQFlJoI!^W(3de9nKiYk6?`3bJ{_ZzIsCdWoc<{Qyl4`e*Gj uy2HRfJ0n`<lYjP_KT9m%Wmi4m4qgA#{Wri61O@^v!Lg0||Cj$4hyMU!*8tA| literal 9993 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 diff --git a/packages/ui/src/assets/audio/yup-06.aac b/packages/ui/src/assets/audio/yup-06.aac index 094489afd16f97d7f099f203abff188d3cf4ef49..15786225db15f539ab0a05c7834857317f2cb598 100644 GIT binary patch literal 2878 zcmdVa`6JVh9|!RFjFBs!qNb4%a<|o-$q{peEaWUAMv*%o<rp%zNJT!D`;#N(_&CRh zh2g{G%9$MbFhWS1#g0$<{uSTXPp@BJkJsz@;_P4ylyS^CF2K?~?6w9{4XLe$L?8h! z!D`G5QHMX#0y}~UMJWq>%lh`$m&WzS)!joUD{&z%xm~#yl*zZ^*0JOIfy4I8pDtxR z#jfQo?|d7xGnxO9m^1Jp*86c7E;!rPB6L}jWg?sHtyJNO&k}WfjlDfz6P&-1ewi{C z;&S1-2r=!G>>RPwE4UW-a%$2{rKFZUWdEk&o-ND^iWa-A9^^b!Zu^wW_T%o>bL%e7 zX*w+#qWT>4uYSlhGXNRn8B)8ZF460DJGnigdnxh)Q6+&tSW#CpjoRvex@RI%(4e`c zZi;do9s2C=oP6z)OnQ4pCd0c%>y#pnNrycdR?d%bj#CSv1a<9zd!gk!t?eV!%#3IU zS^y=u)f?K4z<>ZK`~t~1LeF6tS2C-A$LHLU9u<g%bwlOt@qe3pQzFmKskzY@5oa&H zkJ!-oe)eR@gI>;0TD5s5NaBy_usY|e4n(d~s+yQ`K<+gUYDV>7N96nrdpv53wzC1Q zW*5*3##nk|uGjV5IDfIX*4PEUlZNX*a3p|^RaZ<vK&;aUx>rEtjgF^soM^=T%u`a> z(;PDl?#Gt)saK~GHuMkZk?9gWBi+;69NiN!pYIbMn@VlXdVq)C+r}&DowAf!{WuW5 z@WG@WI&_cZGHfooKP7*1T`Tb6+v+4=-nCV8A+GjJ5znKqd)yl-d*XzQV@ccPC3GMm z-7V$d8`!mF)u=YkI9!?;*dT-@LZ-9FRGmxU?PXtV#u;WIZFkhH3!HX8>NaL)Te&sg zdePB3XsPE!Y?Rj6eJT5aeNS=rMu*HliK(aS3PZCuB_N>313}^`XXuhpRhxu(j6)rt z#J2Uy(UoH8q&8yVcuvW&`^NAGq>|<)fO<*u+L6ug>GI;Ou8@4c_Kk|@VzqI`lDR|9 z#@iz_R;(amcs^D&{LBWiaN$s0Qi=)U-m6l{gUQ6lj$rClBn4B^h9g>`S5(h%l7|}X z_Lis_Zf*`y>jgFqVwJ>!)PF|3!^guJQc)COkt?vdbI>{an7^n*;~;WRd2V@P_2hF) zvxw$!hXQ<9_@(VtdvMjQdb2(TdE>HUMDy6ZxZ`qpY!+fY#6Q>9mNWS$58he>w*H%E zw_<NxELBikfq!A*^=NB(XPgN958ip^CuXItSCDSL=?2>(TKwi!WpYqf-ReVE2dnTf zi0p|Z(?=p@=k1<l;?=&>aFYvn4(0*`@R=YtzD+vIO`i<ly-0_1O6&ieQ?p9t_3=~x zNRLc~hDi!#pxs9t>+K~4Hd*@QFU@n*wJmn^8~W}%j9t(MqYhDMDAw;^u+7x!Ybebw zJ1zcs9R)L5=IFcW3z6@XRJftw3Ykaui-&?3yzv3w)l6*9vgrvvePVH!1QA<YCER9d zs3I~FxJ(j<&XCdtk7nJ0IF<rH=b(uqC603EPR#AXp!yv73n!371purr^G@MZZfftK zsp#cSZ7iR{QVK*&wl&x5ZSB-`ou=}O5D5$d_*tN~Mt?Lx$E-Fgti3v1p++lkfy5_< zK6dxhH|_%G$}#)?9&u;^v^b^)02>HG0+wv(140uw`Q;)t4<Y1#E?iiXpb{gLo^0gq z=&2(voX}MqI2Ed<ER64RA8z(@{@HZkyl)=3;mUS6^U3Y|JCz)_?=hCF>fR;tgZJxc z?QI9+zD8d~x9YQQH9NkCIW86J9Z8Tiv|RLyiDp=Nt+iAiq0T&?feW+MZ(KDG3mP4H zu%0Nb&X8+N!Z!%57(nt+G6-VV-lZ5RgRfQ#_gH-Z00D8E-c&n}JooMMqWY2&tmxLQ z<+j&G$u+aZ_6QPyRF)6#Sg0ZrLgl{-Bvtm-ciAp-J|r7H$Zk|D1TX*qKIi4o=W8fq zf#P-Mu8(_Ox|*qDiqPpm**HX~>kqWIV)I)f<VeTyly}iDnQP3gsyxr`4ppVko;=XL z8n6HslfaiK0bk8f&o`?V)jqn0YCH5g)4>EmGzk<JQE4Oh%+(t@Fkw9Te}^NO(p6lu z>dMh~(51~c?d(T&>@vLHYVWQe;9kgCUsYcsG7e5-Un{*zoONpaeW5gmXV5xr!Tu^A znz_-eSPqsZto5r3@`j)mNjAoLeIt@NaLr>8NBhN06yfmgf%6Oi>ddU-0hlHJo12S! zv;B68WEK}`SoHFkWUP01Ug$)XRnruyrhw-4y0FKeY~YkS7@sWm+@+Ngkm3VC6;>Xd zPeDiwe>lnO;OhrXCxxp3LWd`Wvj0+)Sw%!5FTT0b5)ak=+D#s%d+*=ByT{YNP+IqC zdxld!CY)D)VEOQ-olQ(<8dv~ToTk{ed7ej=UnoFFhi}67SE}F~Cg_A_ZkW6k{!vlP zs-Mn9;RLY9h~v+Ai6vg1yZ;6i9rcitul6@{kG8cREfwkT{)@}NibL1g;CgOIX{~Uj zEt&OFl|_ub&I=8QYe-@MmW@&wR}R=0!mup?*D>2kf9X-``shENl~hF6d9jQ8<(|0$ zI;a+P5s_{7u1ev!g@u>~S!U$lFEgVr;KEvb+t-y05*Exq7>m|pRoslT{`Lvt3R&XA zWFj^Pc)0c42l$?WP4zsCUX|&^0ZG%sbi-b>U8yl#*pUwdfbeIorgy%Rv5wru)_GrG zr~9EKO0PK^d0fT&1#yE-!Gh}071>+PrcqN?Th>%wW3%>O&t;wo;`_yrY6Kdd3Pnf? zC87@*FfieiuA&f|{TGwCCLEPANxa)pwzx-*YB`vk@opTgj-D0=nqijQ3w~lPV^{p| zue>U<EkN7gwGCOWw8iMg#-_3@6pJMH5vk2$^KIc)3cW*mkG(Z|<r~o!1L3+@uH(a; zsg!|>+9bfN{H}G%8_Uho3x9@5-mt35z4_!bvv`}bV?}CIl%g1)pi_mhp?_k^Rpe=~ zfdJS50u5C(45qzrkE$>#Y!eRj7!)mp0vH5{f058PJ!9~>Ea%Q>+HajA603DruA95q zv9!+$7vl-m3RY;*cL^Z0LJbOI^FZTX57NGH{RG9_CFW2=selP=Yd+C%M5l1a)-*dR z!32(U#|35*j1`XHH)lWZ<wop1pl3gQjI&O6Wznb?cikr45{JmTL7G5eXH`144u3Lo z#rH-1(`y{`cUU+IgP3j2!Kj~B$+RKtOWUH)7(c5_H1Sb1LH|L3c~5%^3Cb(_44$_h z`D*OZQd!-9U|ka4aIQA=?tm<5Fp$rJKVG`HALjAMM5UthY0HzHqJ|rGGBGFao;Xez zB)gffy9n_Aa9UmBA+=fMDsSF!QhrjA_xm<s8D4%HK>A>(_C|;UO<`9ce-_2qAf(|Q z!G72#5Y{xXtaENe0{{fe984F(W{6r71|TEzyG2zmc_!x5c|^B_K;aXOIqx>3HTieC zW4OLuJlYc_CA^D$51jAc&p+zb$++~kG20;tXv_5JLq+<pFnj>2mb?gFUTpyVRFsQ$ WGblPW@0TeE#{@y)yobF1r|o~g2W8j* literal 5585 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 From c4c489a5bcc438fa6c6827c187dce13d33b1eac0 Mon Sep 17 00:00:00 2001 From: opencode <opencode@sst.dev> Date: Wed, 21 Jan 2026 17:17:32 +0000 Subject: [PATCH 276/426] release: v1.1.29 --- bun.lock | 30 +++++++++++++------------- packages/app/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 4 ++-- packages/sdk/js/package.json | 4 ++-- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/bun.lock b/bun.lock index 22be7431c7d..f80ca6aef13 100644 --- a/bun.lock +++ b/bun.lock @@ -23,7 +23,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -73,7 +73,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -107,7 +107,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -134,7 +134,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -158,7 +158,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -182,7 +182,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -211,7 +211,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -240,7 +240,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -256,7 +256,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.1.28", + "version": "1.1.29", "bin": { "opencode": "./bin/opencode", }, @@ -360,7 +360,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -380,7 +380,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.1.28", + "version": "1.1.29", "devDependencies": { "@hey-api/openapi-ts": "0.90.4", "@tsconfig/node22": "catalog:", @@ -391,7 +391,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -404,7 +404,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -445,7 +445,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "zod": "catalog:", }, @@ -456,7 +456,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index ae71034d5fb..c6b8e71669b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.1.28", + "version": "1.1.29", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 211eb8e1e74..acc59322b4f 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.1.28", + "version": "1.1.29", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index d2f48fc58f7..a17d71ac57d 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.1.28", + "version": "1.1.29", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 4e3e4e34916..7a9a9117037 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.1.28", + "version": "1.1.29", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 1f39b81387c..aea82945671 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.1.28", + "version": "1.1.29", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index b49175658e4..59b6495af07 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.1.28", + "version": "1.1.29", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index f7f890119e7..1b359515b91 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.1.28", + "version": "1.1.29", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index a3ec52e4600..15b7e7fc194 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.1.28" +version = "1.1.29" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.28/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index 58fe9593441..1e91d88eb02 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.1.28", + "version": "1.1.29", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 5b993a4d7c1..5b460fcaadb 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.1.28", + "version": "1.1.29", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 05625f6d68e..3ca789cb825 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.1.28", + "version": "1.1.29", "type": "module", "license": "MIT", "scripts": { @@ -25,4 +25,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 cd1abcc157a..7c8a050973a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.1.28", + "version": "1.1.29", "type": "module", "license": "MIT", "scripts": { @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} +} \ No newline at end of file diff --git a/packages/slack/package.json b/packages/slack/package.json index de50bea5bbb..cfd84b00bff 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.1.28", + "version": "1.1.29", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 47257e75062..d3996cb1ba1 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.1.28", + "version": "1.1.29", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index d4b11aa2bb4..f0aa0158dd8 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.1.28", + "version": "1.1.29", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index fc10bcaabd8..b66e0c57da4 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.1.28", + "version": "1.1.29", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index c9b2d9cdbaf..646409a86a1 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.1.28", + "version": "1.1.29", "publisher": "sst-dev", "repository": { "type": "git", From 95b17bcf5eddf0bc350e9102c397b3b716c46331 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 17:15:18 +0000 Subject: [PATCH 277/426] chore: generate --- packages/app/src/components/dialog-select-mcp.tsx | 4 +--- packages/app/src/components/model-tooltip.tsx | 3 +-- packages/app/src/components/prompt-input.tsx | 4 +--- packages/app/src/pages/layout.tsx | 12 ++++++------ packages/app/src/pages/session.tsx | 4 +--- 5 files changed, 10 insertions(+), 17 deletions(-) diff --git a/packages/app/src/components/dialog-select-mcp.tsx b/packages/app/src/components/dialog-select-mcp.tsx index b9169956170..8eb08878912 100644 --- a/packages/app/src/components/dialog-select-mcp.tsx +++ b/packages/app/src/components/dialog-select-mcp.tsx @@ -77,9 +77,7 @@ export const DialogSelectMcp: Component = () => { <span class="text-11-regular text-text-weaker">{language.t("mcp.status.disabled")}</span> </Show> <Show when={loading() === i.name}> - <span class="text-11-regular text-text-weak"> - {language.t("common.loading.ellipsis")} - </span> + <span class="text-11-regular text-text-weak">{language.t("common.loading.ellipsis")}</span> </Show> </div> <Show when={error()}> diff --git a/packages/app/src/components/model-tooltip.tsx b/packages/app/src/components/model-tooltip.tsx index 54550cf76af..53164dae85e 100644 --- a/packages/app/src/components/model-tooltip.tsx +++ b/packages/app/src/components/model-tooltip.tsx @@ -72,8 +72,7 @@ export const ModelTooltip: Component<{ model: ModelInfo; latest?: boolean; free? ? language.t("model.tooltip.reasoning.allowed") : language.t("model.tooltip.reasoning.none") } - const context = () => - language.t("model.tooltip.context", { limit: props.model.limit.context.toLocaleString() }) + const context = () => language.t("model.tooltip.context", { limit: props.model.limit.context.toLocaleString() }) return ( <div class="flex flex-col gap-1 py-1"> diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index d80abf0c3cb..d380cf568c8 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -1696,9 +1696,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => { <Match when={working()}> <div class="flex items-center gap-2"> <span>{language.t("prompt.action.stop")}</span> - <span class="text-icon-base text-12-medium text-[10px]!"> - {language.t("common.key.esc")} - </span> + <span class="text-icon-base text-12-medium text-[10px]!">{language.t("common.key.esc")}</span> </div> </Match> <Match when={true}> diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 1318217b568..4cecec87d80 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -1573,12 +1573,12 @@ export default function Layout(props: ParentProps) { keybind={command.keybind("session.archive")} gutter={8} > - <IconButton - icon="archive" - variant="ghost" - onClick={() => archiveSession(props.session)} - aria-label={language.t("command.session.archive")} - /> + <IconButton + icon="archive" + variant="ghost" + onClick={() => archiveSession(props.session)} + aria-label={language.t("command.session.archive")} + /> </TooltipKeybind> </div> </div> diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 48b05945927..7dcf60b7268 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -2017,9 +2017,7 @@ export default function Page() { style={{ color: "rgba(239, 68, 68, 0.8)" }} /> <div class="text-center" style={{ color: "rgba(255, 255, 255, 0.7)" }}> - <div class="text-14-semibold mb-1"> - {language.t("terminal.connectionLost.title")} - </div> + <div class="text-14-semibold mb-1">{language.t("terminal.connectionLost.title")}</div> <div class="text-12-regular" style={{ color: "rgba(255, 255, 255, 0.5)" }}> {language.t("terminal.connectionLost.description")} </div> From 8df09abb1be48c873d3e5e33e70a4266b04a634c Mon Sep 17 00:00:00 2001 From: Bart Broere <mail@bartbroere.eu> Date: Wed, 21 Jan 2026 18:23:07 +0100 Subject: [PATCH 278/426] feat: Make the models.dev domain configurable for offline environments (#9258) --- packages/opencode/src/global/index.ts | 4 ++++ packages/opencode/src/provider/models-macro.ts | 5 ++++- packages/opencode/src/provider/models.ts | 6 ++++-- packages/opencode/test/preload.ts | 4 +++- packages/ui/vite.config.ts | 5 +++-- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/global/index.ts b/packages/opencode/src/global/index.ts index d3011b41506..25595abcddc 100644 --- a/packages/opencode/src/global/index.ts +++ b/packages/opencode/src/global/index.ts @@ -22,6 +22,10 @@ export namespace Global { cache, config, state, + // Allow overriding models.dev URL for offline deployments + get modelsDevUrl() { + return process.env.OPENCODE_MODELS_URL || "https://models.dev" + }, } } diff --git a/packages/opencode/src/provider/models-macro.ts b/packages/opencode/src/provider/models-macro.ts index 6c8492a7017..e8fd353c91d 100644 --- a/packages/opencode/src/provider/models-macro.ts +++ b/packages/opencode/src/provider/models-macro.ts @@ -1,3 +1,5 @@ +import { Global } from "../global" + export async function data() { const path = Bun.env.MODELS_DEV_API_JSON if (path) { @@ -6,6 +8,7 @@ export async function data() { return await file.text() } } - const json = await fetch("https://models.dev/api.json").then((x) => x.text()) + const url = Global.Path.modelsDevUrl + const json = await fetch(`${url}/api.json`).then((x) => x.text()) return json } diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index c5465f9880e..1f7b7408133 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -85,7 +85,8 @@ export namespace ModelsDev { const json = await data() return JSON.parse(json) as Record<string, Provider> } - const json = await fetch("https://models.dev/api.json").then((x) => x.text()) + const url = Global.Path.modelsDevUrl + const json = await fetch(`${url}/api.json`).then((x) => x.text()) return JSON.parse(json) as Record<string, Provider> } @@ -95,7 +96,8 @@ export namespace ModelsDev { log.info("refreshing", { file, }) - const result = await fetch("https://models.dev/api.json", { + const url = Global.Path.modelsDevUrl + const result = await fetch(`${url}/api.json`, { headers: { "User-Agent": Installation.USER_AGENT, }, diff --git a/packages/opencode/test/preload.ts b/packages/opencode/test/preload.ts index 35b0b6c7642..819166c94c6 100644 --- a/packages/opencode/test/preload.ts +++ b/packages/opencode/test/preload.ts @@ -5,6 +5,7 @@ import path from "path" import fs from "fs/promises" import fsSync from "fs" import { afterAll } from "bun:test" +const { Global } = await import("../src/global") const dir = path.join(os.tmpdir(), "opencode-test-data-" + process.pid) await fs.mkdir(dir, { recursive: true }) @@ -27,7 +28,8 @@ process.env["XDG_STATE_HOME"] = path.join(dir, "state") const cacheDir = path.join(dir, "cache", "opencode") await fs.mkdir(cacheDir, { recursive: true }) await fs.writeFile(path.join(cacheDir, "version"), "14") -const response = await fetch("https://models.dev/api.json") +const url = Global.Path.modelsDevUrl +const response = await fetch(`${url}/api.json`) if (response.ok) { await fs.writeFile(path.join(cacheDir, "models.json"), await response.text()) } diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts index 0f3630b3a1d..335084bd645 100644 --- a/packages/ui/vite.config.ts +++ b/packages/ui/vite.config.ts @@ -45,12 +45,13 @@ function providerIconsPlugin() { } async function fetchProviderIcons() { - const providers = await fetch("https://models.dev/api.json") + const url = process.env.OPENCODE_MODELS_URL || "https://models.dev" + const providers = await fetch(`${url}/api.json`) .then((res) => res.json()) .then((json) => Object.keys(json)) await Promise.all( providers.map((provider) => - fetch(`https://models.dev/logos/${provider}.svg`) + fetch(`${url}/logos/${provider}.svg`) .then((res) => res.text()) .then((svg) => fs.writeFileSync(`./src/assets/icons/provider/${provider}.svg`, svg)), ), From 182056981846ee2d732c928d562cfdf39b504d45 Mon Sep 17 00:00:00 2001 From: Vladimir Glafirov <vglafirov@gitlab.com> Date: Wed, 21 Jan 2026 18:23:33 +0100 Subject: [PATCH 279/426] chore(deps): update GitLab packages for better self-hosted instance support (#9856) --- bun.lock | 4 ++-- packages/opencode/package.json | 2 +- packages/opencode/src/plugin/index.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index f80ca6aef13..b06c0480994 100644 --- a/bun.lock +++ b/bun.lock @@ -284,7 +284,7 @@ "@ai-sdk/vercel": "1.0.31", "@ai-sdk/xai": "2.0.51", "@clack/prompts": "1.0.0-alpha.1", - "@gitlab/gitlab-ai-provider": "3.1.2", + "@gitlab/gitlab-ai-provider": "3.1.3", "@hono/standard-validator": "0.1.5", "@hono/zod-validator": "catalog:", "@modelcontextprotocol/sdk": "1.25.2", @@ -922,7 +922,7 @@ "@fontsource/inter": ["@fontsource/inter@5.2.8", "", {}, "sha512-P6r5WnJoKiNVV+zvW2xM13gNdFhAEpQ9dQJHt3naLvfg+LkF2ldgSLiF4T41lf1SQCM9QmkqPTn4TH568IRagg=="], - "@gitlab/gitlab-ai-provider": ["@gitlab/gitlab-ai-provider@3.1.2", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=2.0.0", "@ai-sdk/provider-utils": ">=3.0.0" } }, "sha512-p0NZhZJSavWDX9r/Px/mOK2YIC803GZa8iRzcg3f1C6S0qfea/HBTe4/NWvT2+2kWIwhCePGuI4FN2UFiUWXUg=="], + "@gitlab/gitlab-ai-provider": ["@gitlab/gitlab-ai-provider@3.1.3", "", { "dependencies": { "@anthropic-ai/sdk": "^0.71.0", "@anycable/core": "^0.9.2", "graphql-request": "^6.1.0", "isomorphic-ws": "^5.0.0", "socket.io-client": "^4.8.1", "vscode-jsonrpc": "^8.2.1", "zod": "^3.25.76" }, "peerDependencies": { "@ai-sdk/provider": ">=2.0.0", "@ai-sdk/provider-utils": ">=3.0.0" } }, "sha512-ikumi4PZN/S0f+j/5rb5dBRtORyT41Pl/tj8vHhnpFtpYcxXsaNv2RvCKBVf2/PovvSz2pYMOcpujIU4MdGfyQ=="], "@graphql-typed-document-node/core": ["@graphql-typed-document-node/core@3.2.0", "", { "peerDependencies": { "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 5b460fcaadb..a76099905c0 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -70,7 +70,7 @@ "@ai-sdk/vercel": "1.0.31", "@ai-sdk/xai": "2.0.51", "@clack/prompts": "1.0.0-alpha.1", - "@gitlab/gitlab-ai-provider": "3.1.2", + "@gitlab/gitlab-ai-provider": "3.1.3", "@hono/standard-validator": "0.1.5", "@hono/zod-validator": "catalog:", "@modelcontextprotocol/sdk": "1.25.2", diff --git a/packages/opencode/src/plugin/index.ts b/packages/opencode/src/plugin/index.ts index 84de520b81d..76d34b845ae 100644 --- a/packages/opencode/src/plugin/index.ts +++ b/packages/opencode/src/plugin/index.ts @@ -15,7 +15,7 @@ import { CopilotAuthPlugin } from "./copilot" export namespace Plugin { const log = Log.create({ service: "plugin" }) - const BUILTIN = ["opencode-anthropic-auth@0.0.9", "@gitlab/opencode-gitlab-auth@1.3.0"] + const BUILTIN = ["opencode-anthropic-auth@0.0.9", "@gitlab/opencode-gitlab-auth@1.3.2"] // Built-in plugins that are directly imported (not installed from npm) const INTERNAL_PLUGINS: PluginInstance[] = [CodexAuthPlugin, CopilotAuthPlugin] From d03cac23519dfa42a1720c22b879e9653a1e53c8 Mon Sep 17 00:00:00 2001 From: GitHub Action <action@github.com> Date: Wed, 21 Jan 2026 17:24:14 +0000 Subject: [PATCH 280/426] chore: generate --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 3ca789cb825..669543482c9 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -25,4 +25,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 7c8a050973a..8f9cfd10e96 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} From 51126f081d4761f7b4de8abe35357a48bd75309e Mon Sep 17 00:00:00 2001 From: Github Action <action@github.com> Date: Wed, 21 Jan 2026 17:26:09 +0000 Subject: [PATCH 281/426] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index f71de4b2c6c..c7a37fce4c6 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-fqwMFUpYQZrS7b+MnXQvRj1kemXlnILGAScJY+eWtD0=", - "aarch64-linux": "sha256-xsrV/gUVCKinzY4nx7NuceeLKx5pEdUWxeEm9GPHw34=", - "aarch64-darwin": "sha256-oH2cr1/Dfk6YToBon/mKMguvvj9WoE4E7MJjo/keL+A=", - "x86_64-darwin": "sha256-QvzBGDeqwGKC339KTDuh2X4DFGZF8AkpROx59nGbw0U=" + "x86_64-linux": "sha256-nEQtHSn3RnV11UOrtsqKHN9e31lOLmV/B70n8zzC6i4=", + "aarch64-linux": "sha256-eAGT96g9+rf2ITvoZjH+XqeDZjYk+IbUg0tORyvVsRo=", + "aarch64-darwin": "sha256-yanale/OiPx2PZWzTWn6PAU9FK6nTDryO6pvL0RlSRE=", + "x86_64-darwin": "sha256-VFKVfTEQwf2Ily/cRCESa0cfuJYsxE5HFV0PKmRSAJE=" } } From 301e74d953e9dbda407d5c65cbbcb879c73a6a09 Mon Sep 17 00:00:00 2001 From: Noam Bressler <noamzbr@gmail.com> Date: Wed, 21 Jan 2026 20:10:54 +0200 Subject: [PATCH 282/426] fix: Persist loaded model and mode on ACP session load (#9829) --- packages/opencode/src/acp/agent.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/opencode/src/acp/agent.ts b/packages/opencode/src/acp/agent.ts index 130d61d8605..0f5f23bfe5b 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/opencode/src/acp/agent.ts @@ -513,8 +513,13 @@ export namespace ACP { const lastUser = messages?.findLast((m) => m.info.role === "user")?.info if (lastUser?.role === "user") { result.models.currentModelId = `${lastUser.model.providerID}/${lastUser.model.modelID}` + this.sessionManager.setModel(sessionId, { + providerID: lastUser.model.providerID, + modelID: lastUser.model.modelID, + }) if (result.modes.availableModes.some((m) => m.id === lastUser.agent)) { result.modes.currentModeId = lastUser.agent + this.sessionManager.setMode(sessionId, lastUser.agent) } } From d9f0287d74a2eed89c5cb4f1919b5944959b5317 Mon Sep 17 00:00:00 2001 From: Aiden Cline <aidenpcline@gmail.com> Date: Wed, 21 Jan 2026 12:14:05 -0600 Subject: [PATCH 283/426] tweak: add back todo list tools for openai models --- packages/opencode/src/tool/registry.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/opencode/src/tool/registry.ts b/packages/opencode/src/tool/registry.ts index dad9914a289..faa5f72bcce 100644 --- a/packages/opencode/src/tool/registry.ts +++ b/packages/opencode/src/tool/registry.ts @@ -143,11 +143,6 @@ export namespace ToolRegistry { if (t.id === "apply_patch") return usePatch if (t.id === "edit" || t.id === "write") return !usePatch - // omit todo tools for openai models - if (t.id === "todoread" || t.id === "todowrite") { - if (model.modelID.includes("gpt-")) return false - } - return true }) .map(async (t) => { From 2a370f8038224859713010857a90037aa8298340 Mon Sep 17 00:00:00 2001 From: Daniel Olowoniyi <101122783+Danztee@users.noreply.github.com> Date: Wed, 21 Jan 2026 19:52:21 +0100 Subject: [PATCH 284/426] feat: implement home directory expansion for permission patterns using `~` and `$HOME` prefixes. (#9813) --- packages/opencode/src/permission/next.ts | 13 ++++++- .../opencode/test/permission/next.test.ts | 38 +++++++++++++++++++ packages/web/src/content/docs/permissions.mdx | 8 ++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/permission/next.ts b/packages/opencode/src/permission/next.ts index f95aaf34525..2481f104ed1 100644 --- a/packages/opencode/src/permission/next.ts +++ b/packages/opencode/src/permission/next.ts @@ -7,11 +7,20 @@ import { Storage } from "@/storage/storage" import { fn } from "@/util/fn" import { Log } from "@/util/log" import { Wildcard } from "@/util/wildcard" +import os from "os" import z from "zod" export namespace PermissionNext { const log = Log.create({ service: "permission" }) + function expand(pattern: string): string { + if (pattern.startsWith("~/")) return os.homedir() + pattern.slice(1) + if (pattern === "~") return os.homedir() + if (pattern.startsWith("$HOME/")) return os.homedir() + pattern.slice(5) + if (pattern.startsWith("$HOME")) return os.homedir() + pattern.slice(5) + return pattern + } + export const Action = z.enum(["allow", "deny", "ask"]).meta({ ref: "PermissionAction", }) @@ -44,7 +53,9 @@ export namespace PermissionNext { }) continue } - ruleset.push(...Object.entries(value).map(([pattern, action]) => ({ permission: key, pattern, action }))) + ruleset.push( + ...Object.entries(value).map(([pattern, action]) => ({ permission: key, pattern: expand(pattern), action })), + ) } return ruleset } diff --git a/packages/opencode/test/permission/next.test.ts b/packages/opencode/test/permission/next.test.ts index 68dc653de6d..29f1efa4019 100644 --- a/packages/opencode/test/permission/next.test.ts +++ b/packages/opencode/test/permission/next.test.ts @@ -1,4 +1,5 @@ import { test, expect } from "bun:test" +import os from "os" import { PermissionNext } from "../../src/permission/next" import { Instance } from "../../src/project/instance" import { Storage } from "../../src/storage/storage" @@ -38,6 +39,43 @@ test("fromConfig - empty object", () => { expect(result).toEqual([]) }) +test("fromConfig - expands tilde to home directory", () => { + const result = PermissionNext.fromConfig({ external_directory: { "~/projects/*": "allow" } }) + expect(result).toEqual([{ permission: "external_directory", pattern: `${os.homedir()}/projects/*`, action: "allow" }]) +}) + +test("fromConfig - expands $HOME to home directory", () => { + const result = PermissionNext.fromConfig({ external_directory: { "$HOME/projects/*": "allow" } }) + expect(result).toEqual([{ permission: "external_directory", pattern: `${os.homedir()}/projects/*`, action: "allow" }]) +}) + +test("fromConfig - expands $HOME without trailing slash", () => { + const result = PermissionNext.fromConfig({ external_directory: { $HOME: "allow" } }) + expect(result).toEqual([{ permission: "external_directory", pattern: os.homedir(), action: "allow" }]) +}) + +test("fromConfig - does not expand tilde in middle of path", () => { + const result = PermissionNext.fromConfig({ external_directory: { "/some/~/path": "allow" } }) + expect(result).toEqual([{ permission: "external_directory", pattern: "/some/~/path", action: "allow" }]) +}) + +test("fromConfig - expands exact tilde to home directory", () => { + const result = PermissionNext.fromConfig({ external_directory: { "~": "allow" } }) + expect(result).toEqual([{ permission: "external_directory", pattern: os.homedir(), action: "allow" }]) +}) + +test("evaluate - matches expanded tilde pattern", () => { + const ruleset = PermissionNext.fromConfig({ external_directory: { "~/projects/*": "allow" } }) + const result = PermissionNext.evaluate("external_directory", `${os.homedir()}/projects/file.txt`, ruleset) + expect(result.action).toBe("allow") +}) + +test("evaluate - matches expanded $HOME pattern", () => { + const ruleset = PermissionNext.fromConfig({ external_directory: { "$HOME/projects/*": "allow" } }) + const result = PermissionNext.evaluate("external_directory", `${os.homedir()}/projects/file.txt`, ruleset) + expect(result.action).toBe("allow") +}) + // merge tests test("merge - simple concatenation", () => { diff --git a/packages/web/src/content/docs/permissions.mdx b/packages/web/src/content/docs/permissions.mdx index 4df3841e34a..229cb264e64 100644 --- a/packages/web/src/content/docs/permissions.mdx +++ b/packages/web/src/content/docs/permissions.mdx @@ -78,6 +78,14 @@ Permission patterns use simple wildcard matching: - `?` matches exactly one character - All other characters match literally +### Home Directory Expansion + +You can use `~` or `$HOME` at the start of a pattern to reference your home directory. This is particularly useful for `external_directory` rules. + +- `~/projects/*` -> `/Users/username/projects/*` +- `$HOME/projects/*` -> `/Users/username/projects/*` +- `~` -> `/Users/username` + --- ## Available Permissions From c69e3bbde761db25710e6b5d44d0398a0470eeb5 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 12:52:52 -0600 Subject: [PATCH 285/426] fix(app): auto-scroll ux --- packages/ui/src/hooks/create-auto-scroll.tsx | 47 +++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/packages/ui/src/hooks/create-auto-scroll.tsx b/packages/ui/src/hooks/create-auto-scroll.tsx index b74fb699d7a..26cd06e88f7 100644 --- a/packages/ui/src/hooks/create-auto-scroll.tsx +++ b/packages/ui/src/hooks/create-auto-scroll.tsx @@ -13,8 +13,10 @@ export function createAutoScroll(options: AutoScrollOptions) { let scroll: HTMLElement | undefined let settling = false let settleTimer: ReturnType<typeof setTimeout> | undefined + let autoTimer: ReturnType<typeof setTimeout> | undefined let cleanup: (() => void) | undefined let resizeFrame: number | undefined + let auto: { top: number; time: number } | undefined const threshold = () => options.bottomThreshold ?? 10 @@ -29,10 +31,46 @@ export function createAutoScroll(options: AutoScrollOptions) { return el.scrollHeight - el.clientHeight - el.scrollTop } + // Browsers can dispatch scroll events asynchronously. If new content arrives + // between us calling `scrollTo()` and the subsequent `scroll` event firing, + // the handler can see a non-zero `distanceFromBottom` and incorrectly assume + // the user scrolled. + const markAuto = (el: HTMLElement) => { + auto = { + top: Math.max(0, el.scrollHeight - el.clientHeight), + time: Date.now(), + } + + if (autoTimer) clearTimeout(autoTimer) + autoTimer = setTimeout(() => { + auto = undefined + autoTimer = undefined + }, 250) + } + + const isAuto = (el: HTMLElement) => { + const a = auto + if (!a) return false + + if (Date.now() - a.time > 250) { + auto = undefined + return false + } + + return Math.abs(el.scrollTop - a.top) < 2 + } + const scrollToBottomNow = (behavior: ScrollBehavior) => { const el = scroll if (!el) return - el.scrollTo({ top: el.scrollHeight, behavior }) + markAuto(el) + if (behavior === "smooth") { + el.scrollTo({ top: el.scrollHeight, behavior }) + return + } + + // `scrollTop` assignment bypasses any CSS `scroll-behavior: smooth`. + el.scrollTop = el.scrollHeight } const scrollToBottom = (force: boolean) => { @@ -79,6 +117,12 @@ export function createAutoScroll(options: AutoScrollOptions) { return } + // Ignore scroll events triggered by our own scrollToBottom calls. + if (!store.userScrolled && isAuto(el)) { + scrollToBottom(false) + return + } + stop() } @@ -145,6 +189,7 @@ export function createAutoScroll(options: AutoScrollOptions) { onCleanup(() => { if (settleTimer) clearTimeout(settleTimer) + if (autoTimer) clearTimeout(autoTimer) if (resizeFrame !== undefined) cancelAnimationFrame(resizeFrame) if (cleanup) cleanup() }) From df2ed9923174ec5e479fa39349717df6ef990fee Mon Sep 17 00:00:00 2001 From: Daniel Polito <danielbpolito@gmail.com> Date: Wed, 21 Jan 2026 16:01:18 -0300 Subject: [PATCH 286/426] fix(desktop): Navigation with Big Sessions (#9529) --- packages/app/src/pages/layout.tsx | 17 +++++++++++++++-- packages/ui/src/components/hover-card.css | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 4cecec87d80..4d1c1f73b93 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -138,6 +138,8 @@ export default function Layout(props: ParentProps) { const isBusy = (directory: string) => busyWorkspaces().has(workspaceKey(directory)) const editorRef = { current: undefined as HTMLInputElement | undefined } + const [hoverSession, setHoverSession] = createSignal<string | undefined>() + const autoselecting = createMemo(() => { if (params.dir) return false if (initialDir) return false @@ -1540,7 +1542,15 @@ export default function Layout(props: ParentProps) { </Tooltip> } > - <HoverCard openDelay={1000} closeDelay={0} placement="right-start" gutter={28} trigger={item}> + <HoverCard + openDelay={1000} + closeDelay={0} + placement="right" + gutter={28} + trigger={item} + open={hoverSession() === props.session.id} + onOpenChange={(open) => setHoverSession(open ? props.session.id : undefined)} + > <Show when={hoverReady()} fallback={<div class="text-12-regular text-text-weak">{language.t("session.messages.loading")}</div>} @@ -1921,7 +1931,10 @@ export default function Layout(props: ParentProps) { placement="right-start" gutter={6} trigger={trigger} - onOpenChange={setOpen} + onOpenChange={(value) => { + setOpen(value) + if (value) setHoverSession(undefined) + }} > <div class="-m-3 p-2 flex flex-col w-72"> <div class="px-4 pt-2 pb-1 text-14-medium text-text-strong truncate">{displayName(props.project)}</div> diff --git a/packages/ui/src/components/hover-card.css b/packages/ui/src/components/hover-card.css index 70dcdd7a2ff..43918bf3803 100644 --- a/packages/ui/src/components/hover-card.css +++ b/packages/ui/src/components/hover-card.css @@ -8,6 +8,7 @@ z-index: 50; min-width: 200px; max-width: 320px; + max-height: calc(100vh - 1rem); border-radius: 8px; background-color: var(--surface-raised-stronger-non-alpha); pointer-events: auto; @@ -32,6 +33,8 @@ [data-slot="hover-card-body"] { padding: 4px; + max-height: inherit; + overflow-y: auto; } } From 13405aedea6e9e3b617bb131a90f0ad05f16baf3 Mon Sep 17 00:00:00 2001 From: Allan Hvam <allanhvam@users.noreply.github.com> Date: Wed, 21 Jan 2026 20:05:32 +0100 Subject: [PATCH 287/426] fix(app): remove terminal button border to align with close button (#9874) --- .../app/src/components/session/session-sortable-terminal-tab.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 03f07fa565b..539195553bd 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -106,6 +106,7 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => <div use:sortable classList={{ "h-full": true, "opacity-0": sortable.isActiveDraggable }}> <div class="relative h-full"> <Tabs.Trigger + classes={{ button: "border-0" }} value={props.terminal.id} onClick={focus} onMouseDown={(e) => e.preventDefault()} From 6f7a1c69a517b6f46e7b7c18b69fc38fa7aaa10f Mon Sep 17 00:00:00 2001 From: Aiden Cline <aidenpcline@gmail.com> Date: Wed, 21 Jan 2026 13:23:04 -0600 Subject: [PATCH 288/426] tweak: adjust textVerbosity and reasoningEffort defaults to better match codex cli --- packages/opencode/src/provider/transform.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 02fdffa00d4..6148b66b5c9 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -580,15 +580,15 @@ export namespace ProviderTransform { } if (input.model.api.id.includes("gpt-5") && !input.model.api.id.includes("gpt-5-chat")) { - if (input.model.providerID.includes("codex")) { - result["store"] = false - } - - if (!input.model.api.id.includes("codex") && !input.model.api.id.includes("gpt-5-pro")) { + if (!input.model.api.id.includes("gpt-5-pro")) { result["reasoningEffort"] = "medium" } - if (input.model.api.id.endsWith("gpt-5.") && input.model.providerID !== "azure") { + if ( + input.model.api.id.includes("gpt-5.") && + !input.model.api.id.includes("codex") && + input.model.providerID !== "azure" + ) { result["textVerbosity"] = "low" } From 3ba1111ed047ca4cc42bc964ae23c32959c0e8fd Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:23:45 -0600 Subject: [PATCH 289/426] fix(app): terminal issues/regression --- .../session/session-sortable-terminal-tab.tsx | 29 +++++++++++++++---- packages/app/src/components/terminal.tsx | 7 ++++- packages/app/src/pages/session.tsx | 29 ++++++++++++++----- 3 files changed, 52 insertions(+), 13 deletions(-) diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 539195553bd..2c661edf824 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -18,12 +18,22 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => const [menuPosition, setMenuPosition] = createSignal({ x: 0, y: 0 }) const [blurEnabled, setBlurEnabled] = createSignal(false) + const isDefaultTitle = () => { + const number = props.terminal.titleNumber + if (!Number.isFinite(number) || number <= 0) return false + const match = props.terminal.title.match(/^Terminal (\d+)$/) + if (!match) return false + const parsed = Number(match[1]) + if (!Number.isFinite(parsed) || parsed <= 0) return false + return parsed === number + } + const label = () => { language.locale() + if (props.terminal.title && !isDefaultTitle()) return props.terminal.title + const number = props.terminal.titleNumber - if (Number.isFinite(number) && number > 0) { - return language.t("terminal.title.numbered", { number }) - } + if (Number.isFinite(number) && number > 0) return language.t("terminal.title.numbered", { number }) if (props.terminal.title) return props.terminal.title return language.t("terminal.title") } @@ -102,8 +112,15 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => } return ( - // @ts-ignore - <div use:sortable classList={{ "h-full": true, "opacity-0": sortable.isActiveDraggable }}> + <div + // @ts-ignore + use:sortable + class="outline-none focus:outline-none focus-visible:outline-none" + classList={{ + "h-full": true, + "opacity-0": sortable.isActiveDraggable, + }} + > <div class="relative h-full"> <Tabs.Trigger classes={{ button: "border-0" }} @@ -111,6 +128,8 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => onClick={focus} onMouseDown={(e) => e.preventDefault()} onContextMenu={menu} + class="!shadow-none" + classes={{ button: "outline-none focus:outline-none focus-visible:outline-none !shadow-none !ring-0" }} closeButton={ <IconButton icon="close" diff --git a/packages/app/src/components/terminal.tsx b/packages/app/src/components/terminal.tsx index 1ab17189829..6bedcfae2ce 100644 --- a/packages/app/src/components/terminal.tsx +++ b/packages/app/src/components/terminal.tsx @@ -10,6 +10,7 @@ export interface TerminalProps extends ComponentProps<"div"> { pty: LocalPTY onSubmit?: () => void onCleanup?: (pty: LocalPTY) => void + onConnect?: () => void onConnectError?: (error: unknown) => void } @@ -40,7 +41,7 @@ export const Terminal = (props: TerminalProps) => { const settings = useSettings() const theme = useTheme() let container!: HTMLDivElement - const [local, others] = splitProps(props, ["pty", "class", "classList", "onConnectError"]) + const [local, others] = splitProps(props, ["pty", "class", "classList", "onConnect", "onConnectError"]) let ws: WebSocket | undefined let term: Term | undefined let ghostty: Ghostty @@ -241,6 +242,7 @@ export const Terminal = (props: TerminalProps) => { // console.log("Scroll position:", ydisp) // }) socket.addEventListener("open", () => { + local.onConnect?.() sdk.client.pty .update({ ptyID: local.pty.id, @@ -255,10 +257,12 @@ export const Terminal = (props: TerminalProps) => { t.write(event.data) }) socket.addEventListener("error", (error) => { + if (disposed) return console.error("WebSocket error:", error) local.onConnectError?.(error) }) socket.addEventListener("close", (event) => { + if (disposed) return // Normal closure (code 1000) means PTY process exited - server event handles cleanup // For other codes (network issues, server restart), trigger error handler if (event.code !== 1000) { @@ -268,6 +272,7 @@ export const Terminal = (props: TerminalProps) => { }) onCleanup(() => { + disposed = true if (handleResize) { window.removeEventListener("resize", handleResize) } diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 7dcf60b7268..560c133308f 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1231,11 +1231,15 @@ export default function Page() { language.locale() const label = (pty: LocalPTY) => { + const title = pty.title const number = pty.titleNumber - if (Number.isFinite(number) && number > 0) { - return language.t("terminal.title.numbered", { number }) - } - if (pty.title) return pty.title + const match = title.match(/^Terminal (\d+)$/) + const parsed = match ? Number(match[1]) : undefined + const isDefaultTitle = Number.isFinite(number) && number > 0 && Number.isFinite(parsed) && parsed === number + + if (title && !isDefaultTitle) return title + if (Number.isFinite(number) && number > 0) return language.t("terminal.title.numbered", { number }) + if (title) return title return language.t("terminal.title") } @@ -2002,7 +2006,12 @@ export default function Page() { <Terminal pty={pty} onCleanup={(data) => terminal.update({ ...data, id: pty.id })} + onConnect={() => { + terminal.update({ id: pty.id, error: false }) + setDismissed(false) + }} onConnectError={() => { + setDismissed(false) terminal.update({ id: pty.id, error: true }) }} /> @@ -2056,11 +2065,17 @@ export default function Page() { {(t) => ( <div class="relative p-1 h-10 flex items-center bg-background-stronger text-14-regular"> {(() => { + const title = t().title const number = t().titleNumber - if (Number.isFinite(number) && number > 0) { + const match = title.match(/^Terminal (\d+)$/) + const parsed = match ? Number(match[1]) : undefined + const isDefaultTitle = + Number.isFinite(number) && number > 0 && Number.isFinite(parsed) && parsed === number + + if (title && !isDefaultTitle) return title + if (Number.isFinite(number) && number > 0) return language.t("terminal.title.numbered", { number }) - } - if (t().title) return t().title + if (title) return title return language.t("terminal.title") })()} </div> From b33cec485ae5c148413f60a72fdd530c8ceb58c2 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:25:43 -0600 Subject: [PATCH 290/426] fix: type error --- .../src/components/session/session-sortable-terminal-tab.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/app/src/components/session/session-sortable-terminal-tab.tsx b/packages/app/src/components/session/session-sortable-terminal-tab.tsx index 2c661edf824..a3aaf606102 100644 --- a/packages/app/src/components/session/session-sortable-terminal-tab.tsx +++ b/packages/app/src/components/session/session-sortable-terminal-tab.tsx @@ -123,13 +123,14 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () => > <div class="relative h-full"> <Tabs.Trigger - classes={{ button: "border-0" }} value={props.terminal.id} onClick={focus} onMouseDown={(e) => e.preventDefault()} onContextMenu={menu} class="!shadow-none" - classes={{ button: "outline-none focus:outline-none focus-visible:outline-none !shadow-none !ring-0" }} + classes={{ + button: "border-0 outline-none focus:outline-none focus-visible:outline-none !shadow-none !ring-0", + }} closeButton={ <IconButton icon="close" From aa599b4a7da3799dd170e1ece745b37fcc3c64a7 Mon Sep 17 00:00:00 2001 From: Aiden Cline <aidenpcline@gmail.com> Date: Wed, 21 Jan 2026 13:39:42 -0600 Subject: [PATCH 291/426] fix: when dropping unsupported metadata match on providerID/model.id instead of providerID/model.api.id to prevent regression when using legacy model ids (pre-variant) --- packages/opencode/src/session/message-v2.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index 08e6cf0bc76..d0f2beb74ab 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -477,7 +477,7 @@ export namespace MessageV2 { } if (msg.info.role === "assistant") { - const differentModel = `${model.providerID}/${model.api.id}` !== `${msg.info.providerID}/${msg.info.modelID}` + const differentModel = `${model.providerID}/${model.id}` !== `${msg.info.providerID}/${msg.info.modelID}` if ( msg.info.error && From 416aaff488f5022065f4442049b5aede7967219c Mon Sep 17 00:00:00 2001 From: "Tommy D. Rossi" <beats.by.morse@gmail.com> Date: Wed, 21 Jan 2026 21:14:56 +0100 Subject: [PATCH 292/426] feat(acp): add session/list and session/fork support (#7976) --- bun.lock | 6 +- packages/opencode/package.json | 2 +- packages/opencode/src/acp/agent.ts | 147 +++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+), 5 deletions(-) diff --git a/bun.lock b/bun.lock index b06c0480994..403427ff6c8 100644 --- a/bun.lock +++ b/bun.lock @@ -263,7 +263,7 @@ "dependencies": { "@actions/core": "1.11.1", "@actions/github": "6.0.1", - "@agentclientprotocol/sdk": "0.5.1", + "@agentclientprotocol/sdk": "0.12.0", "@ai-sdk/amazon-bedrock": "3.0.73", "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/azure": "2.0.91", @@ -554,7 +554,7 @@ "@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="], - "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.5.1", "", { "dependencies": { "zod": "^3.0.0" } }, "sha512-9bq2TgjhLBSUSC5jE04MEe+Hqw8YePzKghhYZ9QcjOyonY3q2oJfX6GoSO83hURpEnsqEPIrex6VZN3+61fBJg=="], + "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.12.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-V8uH/KK1t7utqyJmTA7y7DzKu6+jKFIXM+ZVouz8E55j8Ej2RV42rEvPKn3/PpBJlliI5crcGk1qQhZ7VwaepA=="], "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.73", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-EAAGJ/dfbAZaqIhK3w52hq6cftSLZwXdC6uHKh8Cls1T0N4MxS6ykDf54UyFO3bZWkQxR+Mdw1B3qireGOxtJQ=="], @@ -3978,8 +3978,6 @@ "@actions/http-client/undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], - "@agentclientprotocol/sdk/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@ai-sdk/amazon-bedrock/@ai-sdk/anthropic": ["@ai-sdk/anthropic@2.0.57", "", { "dependencies": { "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-DREpYqW2pylgaj69gZ+K8u92bo9DaMgFdictYnY+IwYeY3bawQ4zI7l/o1VkDsBDljAx8iYz5lPURwVZNu+Xpg=="], "@ai-sdk/amazon-bedrock/@smithy/eventstream-codec": ["@smithy/eventstream-codec@4.2.5", "", { "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.9.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" } }, "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA=="], diff --git a/packages/opencode/package.json b/packages/opencode/package.json index a76099905c0..c2eaccbf316 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -49,7 +49,7 @@ "dependencies": { "@actions/core": "1.11.1", "@actions/github": "6.0.1", - "@agentclientprotocol/sdk": "0.5.1", + "@agentclientprotocol/sdk": "0.12.0", "@ai-sdk/amazon-bedrock": "3.0.73", "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/azure": "2.0.91", diff --git a/packages/opencode/src/acp/agent.ts b/packages/opencode/src/acp/agent.ts index 0f5f23bfe5b..e165509b9dc 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/opencode/src/acp/agent.ts @@ -5,14 +5,21 @@ import { type AuthenticateRequest, type AuthMethod, type CancelNotification, + type ForkSessionRequest, + type ForkSessionResponse, type InitializeRequest, type InitializeResponse, + type ListSessionsRequest, + type ListSessionsResponse, type LoadSessionRequest, type NewSessionRequest, type PermissionOption, type PlanEntry, type PromptRequest, + type ResumeSessionRequest, + type ResumeSessionResponse, type Role, + type SessionInfo, type SetSessionModelRequest, type SetSessionModeRequest, type SetSessionModeResponse, @@ -430,6 +437,11 @@ export namespace ACP { embeddedContext: true, image: true, }, + sessionCapabilities: { + fork: {}, + list: {}, + resume: {}, + }, }, authMethods: [authMethod], agentInfo: { @@ -540,6 +552,141 @@ export namespace ACP { } } + async unstable_listSessions(params: ListSessionsRequest): Promise<ListSessionsResponse> { + try { + const cursor = params.cursor ? Number(params.cursor) : undefined + const limit = 100 + + const sessions = await this.sdk.session + .list( + { + directory: params.cwd ?? undefined, + roots: true, + }, + { throwOnError: true }, + ) + .then((x) => x.data ?? []) + + const sorted = sessions.toSorted((a, b) => b.time.updated - a.time.updated) + const filtered = cursor ? sorted.filter((s) => s.time.updated < cursor) : sorted + const page = filtered.slice(0, limit) + + const entries: SessionInfo[] = page.map((session) => ({ + sessionId: session.id, + cwd: session.directory, + title: session.title, + updatedAt: new Date(session.time.updated).toISOString(), + })) + + const last = page[page.length - 1] + const next = filtered.length > limit && last ? String(last.time.updated) : undefined + + const response: ListSessionsResponse = { + sessions: entries, + } + if (next) response.nextCursor = next + return response + } catch (e) { + const error = MessageV2.fromError(e, { + providerID: this.config.defaultModel?.providerID ?? "unknown", + }) + if (LoadAPIKeyError.isInstance(error)) { + throw RequestError.authRequired() + } + throw e + } + } + + async unstable_forkSession(params: ForkSessionRequest): Promise<ForkSessionResponse> { + const directory = params.cwd + const mcpServers = params.mcpServers ?? [] + + try { + const model = await defaultModel(this.config, directory) + + const forked = await this.sdk.session + .fork( + { + sessionID: params.sessionId, + directory, + }, + { throwOnError: true }, + ) + .then((x) => x.data) + + if (!forked) { + throw new Error("Fork session returned no data") + } + + const sessionId = forked.id + await this.sessionManager.load(sessionId, directory, mcpServers, model) + + log.info("fork_session", { sessionId, mcpServers: mcpServers.length }) + + const mode = await this.loadSessionMode({ + cwd: directory, + mcpServers, + sessionId, + }) + + const messages = await this.sdk.session + .messages( + { + sessionID: sessionId, + directory, + }, + { throwOnError: true }, + ) + .then((x) => x.data) + .catch((err) => { + log.error("unexpected error when fetching message", { error: err }) + return undefined + }) + + for (const msg of messages ?? []) { + log.debug("replay message", msg) + await this.processMessage(msg) + } + + return mode + } catch (e) { + const error = MessageV2.fromError(e, { + providerID: this.config.defaultModel?.providerID ?? "unknown", + }) + if (LoadAPIKeyError.isInstance(error)) { + throw RequestError.authRequired() + } + throw e + } + } + + async unstable_resumeSession(params: ResumeSessionRequest): Promise<ResumeSessionResponse> { + const directory = params.cwd + const sessionId = params.sessionId + const mcpServers = params.mcpServers ?? [] + + try { + const model = await defaultModel(this.config, directory) + await this.sessionManager.load(sessionId, directory, mcpServers, model) + + log.info("resume_session", { sessionId, mcpServers: mcpServers.length }) + + return this.loadSessionMode({ + cwd: directory, + mcpServers, + sessionId, + }) + } catch (e) { + const error = MessageV2.fromError(e, { + providerID: this.config.defaultModel?.providerID ?? "unknown", + }) + if (LoadAPIKeyError.isInstance(error)) { + throw RequestError.authRequired() + } + throw e + } + } + private async processMessage(message: SessionMessageResponse) { log.debug("process message", message) if (message.info.role !== "assistant" && message.info.role !== "user") return From 7e609cc612de05d6a743002fe852a599cd46fd8e Mon Sep 17 00:00:00 2001 From: Github Action <action@github.com> Date: Wed, 21 Jan 2026 20:17:47 +0000 Subject: [PATCH 293/426] chore: update nix node_modules hashes --- nix/hashes.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nix/hashes.json b/nix/hashes.json index c7a37fce4c6..c94a408f0b8 100644 --- a/nix/hashes.json +++ b/nix/hashes.json @@ -1,8 +1,8 @@ { "nodeModules": { - "x86_64-linux": "sha256-nEQtHSn3RnV11UOrtsqKHN9e31lOLmV/B70n8zzC6i4=", - "aarch64-linux": "sha256-eAGT96g9+rf2ITvoZjH+XqeDZjYk+IbUg0tORyvVsRo=", - "aarch64-darwin": "sha256-yanale/OiPx2PZWzTWn6PAU9FK6nTDryO6pvL0RlSRE=", - "x86_64-darwin": "sha256-VFKVfTEQwf2Ily/cRCESa0cfuJYsxE5HFV0PKmRSAJE=" + "x86_64-linux": "sha256-sH6zUk9G4vC6btPZIR9aiSHX0F4aGyUZB7fKbpDUcpE=", + "aarch64-linux": "sha256-CVpdXnFns34hmGwwlRrrI6Uk6B/jZUxfnH4HC2NanEo=", + "aarch64-darwin": "sha256-khP27Iiq+FAZRlzUy7rGXc2MviZjirFH1ShRyd7q1bY=", + "x86_64-darwin": "sha256-nE2p62Tld64sQVMq7j0YNT5Zwjqp22H997+K8xfi1ag=" } } From 52535654e7a87343a0d631f29f76fab87a34de4d Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:10:42 -0600 Subject: [PATCH 294/426] fix(app): tab should select suggestion --- packages/app/src/components/prompt-input.tsx | 43 ++++++++++++++++---- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index d380cf568c8..3bd7856eee2 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -550,6 +550,25 @@ export const PromptInput: Component<PromptInputProps> = (props) => { }) }) + const selectPopoverActive = () => { + if (store.popover === "at") { + const items = atFlat() + if (items.length === 0) return + const active = atActive() + const item = items.find((entry) => atKey(entry) === active) ?? items[0] + handleAtSelect(item) + return + } + + if (store.popover === "slash") { + const items = slashFlat() + if (items.length === 0) return + const active = slashActive() + const item = items.find((entry) => entry.id === active) ?? items[0] + handleSlashSelect(item) + } + } + createEffect( on( () => prompt.current(), @@ -910,14 +929,24 @@ export const PromptInput: Component<PromptInputProps> = (props) => { return } - if (store.popover && (event.key === "ArrowUp" || event.key === "ArrowDown" || event.key === "Enter")) { - if (store.popover === "at") { - atOnKeyDown(event) - } else { - slashOnKeyDown(event) + if (store.popover) { + if (event.key === "Tab") { + selectPopoverActive() + event.preventDefault() + return + } + if (event.key === "ArrowUp" || event.key === "ArrowDown" || event.key === "Enter") { + if (store.popover === "at") { + atOnKeyDown(event) + event.preventDefault() + return + } + if (store.popover === "slash") { + slashOnKeyDown(event) + } + event.preventDefault() + return } - event.preventDefault() - return } const ctrl = event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey From ae8cff22e5c21a7e5b428721a5a26a7feab9cf87 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:15:45 -0600 Subject: [PATCH 295/426] fix(app): renaming non-git projects shouldn't affect other projects --- packages/app/src/components/dialog-edit-project.tsx | 1 + packages/app/src/context/layout.tsx | 2 +- packages/app/src/pages/layout.tsx | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/app/src/components/dialog-edit-project.tsx b/packages/app/src/components/dialog-edit-project.tsx index b6e2f822eba..acf146ef52d 100644 --- a/packages/app/src/components/dialog-edit-project.tsx +++ b/packages/app/src/components/dialog-edit-project.tsx @@ -75,6 +75,7 @@ export function DialogEditProject(props: { project: LocalProject }) { const name = store.name.trim() === folderName() ? "" : store.name.trim() await globalSDK.client.project.update({ projectID: props.project.id, + directory: props.project.worktree, name, icon: { color: store.color, override: store.iconUrl }, }) diff --git a/packages/app/src/context/layout.tsx b/packages/app/src/context/layout.tsx index d7d09aa3999..7a355629059 100644 --- a/packages/app/src/context/layout.tsx +++ b/packages/app/src/context/layout.tsx @@ -296,7 +296,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( used.add(color) setColors(project.worktree, color) if (!project.id) continue - void globalSdk.client.project.update({ projectID: project.id, icon: { color } }) + void globalSdk.client.project.update({ projectID: project.id, directory: project.worktree, icon: { color } }) } }) diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx index 4d1c1f73b93..befdf721d2b 100644 --- a/packages/app/src/pages/layout.tsx +++ b/packages/app/src/pages/layout.tsx @@ -979,7 +979,7 @@ export default function Layout(props: ParentProps) { const current = displayName(project) if (next === current) return const name = next === getFilename(project.worktree) ? "" : next - await globalSDK.client.project.update({ projectID: project.id, name }) + await globalSDK.client.project.update({ projectID: project.id, directory: project.worktree, name }) } async function renameSession(session: Session, next: string) { From 6d656e4827a28d154a36fd5bc748c0bf9aacd02e Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:21:52 -0600 Subject: [PATCH 296/426] fix(app): querySelector errors, more defensive scroll-to-item --- packages/ui/src/components/list.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/ui/src/components/list.tsx b/packages/ui/src/components/list.tsx index 6d7ad1da6d7..aeb2769d672 100644 --- a/packages/ui/src/components/list.tsx +++ b/packages/ui/src/components/list.tsx @@ -6,6 +6,13 @@ import { Icon, type IconProps } from "./icon" import { IconButton } from "./icon-button" import { TextField } from "./text-field" +function findByKey(container: HTMLElement, key: string) { + const nodes = container.querySelectorAll<HTMLElement>('[data-slot="list-item"][data-key]') + for (const node of nodes) { + if (node.getAttribute("data-key") === key) return node + } +} + export interface ListSearchProps { placeholder?: string autofocus?: boolean @@ -97,8 +104,8 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void }) if (!props.current) return const key = props.key(props.current) requestAnimationFrame(() => { - const element = scroll.querySelector(`[data-key="${CSS.escape(key)}"]`) - if (!(element instanceof HTMLElement)) return + const element = findByKey(scroll, key) + if (!element) return scrollIntoView(scroll, element, "center") }) }) @@ -114,8 +121,8 @@ export function List<T>(props: ListProps<T> & { ref?: (ref: ListRef) => void }) } const key = active() if (!key) return - const element = scroll.querySelector(`[data-key="${CSS.escape(key)}"]`) - if (!(element instanceof HTMLElement)) return + const element = findByKey(scroll, key) + if (!element) return scrollIntoView(scroll, element, "center") }) From fa913377238610c4c9e200f4207386904c48ef06 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:25:47 -0600 Subject: [PATCH 297/426] fix(app): provider connect oauth error handling --- .../components/dialog-connect-provider.tsx | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 66c5bd0b821..4ec4c8daa25 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -305,16 +305,22 @@ export function DialogConnectProvider(props: { provider: string }) { } setFormStore("error", undefined) - const { error } = await globalSDK.client.provider.oauth.callback({ - providerID: props.provider, - method: store.methodIndex, - code, - }) - if (!error) { + const result = await globalSDK.client.provider.oauth + .callback({ + providerID: props.provider, + method: store.methodIndex, + code, + }) + .then((value) => + value.error ? { ok: false as const, error: value.error } : { ok: true as const }, + ) + .catch((error) => ({ ok: false as const, error })) + if (result.ok) { await complete() return } - setFormStore("error", language.t("provider.connect.oauth.code.invalid")) + const message = result.error instanceof Error ? result.error.message : String(result.error) + setFormStore("error", message || language.t("provider.connect.oauth.code.invalid")) } return ( @@ -357,13 +363,19 @@ export function DialogConnectProvider(props: { provider: string }) { }) onMount(async () => { - const result = await globalSDK.client.provider.oauth.callback({ - providerID: props.provider, - method: store.methodIndex, - }) - if (result.error) { - // TODO: show error - dialog.close() + const result = await globalSDK.client.provider.oauth + .callback({ + providerID: props.provider, + method: store.methodIndex, + }) + .then((value) => + value.error ? { ok: false as const, error: value.error } : { ok: true as const }, + ) + .catch((error) => ({ ok: false as const, error })) + if (!result.ok) { + const message = result.error instanceof Error ? result.error.message : String(result.error) + setStore("state", "error") + setStore("error", message) return } await complete() From 1b98f26794664a464489414d8767897a03f9ee14 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:26:58 -0600 Subject: [PATCH 298/426] fix(web): missing favicons --- packages/console/app/public/apple-touch-icon-v2.png | 1 + packages/console/app/public/favicon-96x96-v2.png | 1 + packages/console/app/public/favicon-v2.ico | 1 + packages/console/app/public/favicon-v2.svg | 1 + packages/enterprise/public/apple-touch-icon-v2.png | 1 + packages/enterprise/public/favicon-96x96-v2.png | 1 + packages/enterprise/public/favicon-v2.ico | 1 + packages/enterprise/public/favicon-v2.svg | 1 + 8 files changed, 8 insertions(+) create mode 120000 packages/console/app/public/apple-touch-icon-v2.png create mode 120000 packages/console/app/public/favicon-96x96-v2.png create mode 120000 packages/console/app/public/favicon-v2.ico create mode 120000 packages/console/app/public/favicon-v2.svg create mode 120000 packages/enterprise/public/apple-touch-icon-v2.png create mode 120000 packages/enterprise/public/favicon-96x96-v2.png create mode 120000 packages/enterprise/public/favicon-v2.ico create mode 120000 packages/enterprise/public/favicon-v2.svg diff --git a/packages/console/app/public/apple-touch-icon-v2.png b/packages/console/app/public/apple-touch-icon-v2.png new file mode 120000 index 00000000000..1afba0f1f66 --- /dev/null +++ b/packages/console/app/public/apple-touch-icon-v2.png @@ -0,0 +1 @@ +../../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file diff --git a/packages/console/app/public/favicon-96x96-v2.png b/packages/console/app/public/favicon-96x96-v2.png new file mode 120000 index 00000000000..d2e35e80139 --- /dev/null +++ b/packages/console/app/public/favicon-96x96-v2.png @@ -0,0 +1 @@ +../../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file diff --git a/packages/console/app/public/favicon-v2.ico b/packages/console/app/public/favicon-v2.ico new file mode 120000 index 00000000000..b3a7b9e0209 --- /dev/null +++ b/packages/console/app/public/favicon-v2.ico @@ -0,0 +1 @@ +../../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file diff --git a/packages/console/app/public/favicon-v2.svg b/packages/console/app/public/favicon-v2.svg new file mode 120000 index 00000000000..ee4b459a96b --- /dev/null +++ b/packages/console/app/public/favicon-v2.svg @@ -0,0 +1 @@ +../../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file diff --git a/packages/enterprise/public/apple-touch-icon-v2.png b/packages/enterprise/public/apple-touch-icon-v2.png new file mode 120000 index 00000000000..c0d4353db47 --- /dev/null +++ b/packages/enterprise/public/apple-touch-icon-v2.png @@ -0,0 +1 @@ +../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file diff --git a/packages/enterprise/public/favicon-96x96-v2.png b/packages/enterprise/public/favicon-96x96-v2.png new file mode 120000 index 00000000000..b3129f6bf91 --- /dev/null +++ b/packages/enterprise/public/favicon-96x96-v2.png @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file diff --git a/packages/enterprise/public/favicon-v2.ico b/packages/enterprise/public/favicon-v2.ico new file mode 120000 index 00000000000..d8527270af6 --- /dev/null +++ b/packages/enterprise/public/favicon-v2.ico @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file diff --git a/packages/enterprise/public/favicon-v2.svg b/packages/enterprise/public/favicon-v2.svg new file mode 120000 index 00000000000..2600394ceae --- /dev/null +++ b/packages/enterprise/public/favicon-v2.svg @@ -0,0 +1 @@ +../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file From b7b2eae20c7c4276343e5f1f0e5feaeb5ac3a0ef Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:36:21 -0600 Subject: [PATCH 299/426] fix(web): favicon rename again --- packages/app/index.html | 8 ++++---- ...le-touch-icon-v2.png => apple-touch-icon-v3.png} | 0 .../{favicon-96x96-v2.png => favicon-96x96-v3.png} | 0 .../app/public/{favicon-v2.ico => favicon-v3.ico} | 0 .../app/public/{favicon-v2.svg => favicon-v3.svg} | 0 packages/app/src/entry.tsx | 2 +- ...le-touch-icon-v2.png => apple-touch-icon-v3.png} | 0 .../{favicon-96x96-v2.png => favicon-96x96-v3.png} | 0 .../app/public/{favicon-v2.ico => favicon-v3.ico} | 0 .../app/public/{favicon-v2.svg => favicon-v3.svg} | 0 packages/console/function/src/auth.ts | 2 +- packages/desktop/index.html | 8 ++++---- packages/desktop/src/index.tsx | 2 +- packages/docs/docs.json | 2 +- packages/docs/{favicon-v2.svg => favicon-v3.svg} | 0 ...le-touch-icon-v2.png => apple-touch-icon-v3.png} | 0 .../{favicon-96x96-v2.png => favicon-96x96-v3.png} | 0 .../public/{favicon-v2.ico => favicon-v3.ico} | 0 .../public/{favicon-v2.svg => favicon-v3.svg} | 0 ...le-touch-icon-v2.png => apple-touch-icon-v3.png} | Bin .../{favicon-96x96-v2.png => favicon-96x96-v3.png} | Bin .../favicon/{favicon-v2.ico => favicon-v3.ico} | Bin .../favicon/{favicon-v2.svg => favicon-v3.svg} | 0 packages/ui/src/components/favicon.tsx | 6 +++--- packages/web/astro.config.mjs | 8 ++++---- ...le-touch-icon-v2.png => apple-touch-icon-v3.png} | 0 .../{favicon-96x96-v2.png => favicon-96x96-v3.png} | 0 .../web/public/{favicon-v2.ico => favicon-v3.ico} | 0 .../web/public/{favicon-v2.svg => favicon-v3.svg} | 0 29 files changed, 19 insertions(+), 19 deletions(-) rename packages/app/public/{apple-touch-icon-v2.png => apple-touch-icon-v3.png} (100%) rename packages/app/public/{favicon-96x96-v2.png => favicon-96x96-v3.png} (100%) rename packages/app/public/{favicon-v2.ico => favicon-v3.ico} (100%) rename packages/app/public/{favicon-v2.svg => favicon-v3.svg} (100%) rename packages/console/app/public/{apple-touch-icon-v2.png => apple-touch-icon-v3.png} (100%) rename packages/console/app/public/{favicon-96x96-v2.png => favicon-96x96-v3.png} (100%) rename packages/console/app/public/{favicon-v2.ico => favicon-v3.ico} (100%) rename packages/console/app/public/{favicon-v2.svg => favicon-v3.svg} (100%) rename packages/docs/{favicon-v2.svg => favicon-v3.svg} (100%) rename packages/enterprise/public/{apple-touch-icon-v2.png => apple-touch-icon-v3.png} (100%) rename packages/enterprise/public/{favicon-96x96-v2.png => favicon-96x96-v3.png} (100%) rename packages/enterprise/public/{favicon-v2.ico => favicon-v3.ico} (100%) rename packages/enterprise/public/{favicon-v2.svg => favicon-v3.svg} (100%) rename packages/ui/src/assets/favicon/{apple-touch-icon-v2.png => apple-touch-icon-v3.png} (100%) rename packages/ui/src/assets/favicon/{favicon-96x96-v2.png => favicon-96x96-v3.png} (100%) rename packages/ui/src/assets/favicon/{favicon-v2.ico => favicon-v3.ico} (100%) rename packages/ui/src/assets/favicon/{favicon-v2.svg => favicon-v3.svg} (100%) rename packages/web/public/{apple-touch-icon-v2.png => apple-touch-icon-v3.png} (100%) rename packages/web/public/{favicon-96x96-v2.png => favicon-96x96-v3.png} (100%) rename packages/web/public/{favicon-v2.ico => favicon-v3.ico} (100%) rename packages/web/public/{favicon-v2.svg => favicon-v3.svg} (100%) diff --git a/packages/app/index.html b/packages/app/index.html index 1e516cbbb1d..6fa34553510 100644 --- a/packages/app/index.html +++ b/packages/app/index.html @@ -4,10 +4,10 @@ <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>OpenCode - - - - + + + + diff --git a/packages/app/public/apple-touch-icon-v2.png b/packages/app/public/apple-touch-icon-v3.png similarity index 100% rename from packages/app/public/apple-touch-icon-v2.png rename to packages/app/public/apple-touch-icon-v3.png diff --git a/packages/app/public/favicon-96x96-v2.png b/packages/app/public/favicon-96x96-v3.png similarity index 100% rename from packages/app/public/favicon-96x96-v2.png rename to packages/app/public/favicon-96x96-v3.png diff --git a/packages/app/public/favicon-v2.ico b/packages/app/public/favicon-v3.ico similarity index 100% rename from packages/app/public/favicon-v2.ico rename to packages/app/public/favicon-v3.ico diff --git a/packages/app/public/favicon-v2.svg b/packages/app/public/favicon-v3.svg similarity index 100% rename from packages/app/public/favicon-v2.svg rename to packages/app/public/favicon-v3.svg diff --git a/packages/app/src/entry.tsx b/packages/app/src/entry.tsx index a375a7ac689..df8547636b4 100644 --- a/packages/app/src/entry.tsx +++ b/packages/app/src/entry.tsx @@ -49,7 +49,7 @@ const platform: Platform = { .then(() => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96-v2.png", + icon: "https://opencode.ai/favicon-96x96-v3.png", }) notification.onclick = () => { window.focus() diff --git a/packages/console/app/public/apple-touch-icon-v2.png b/packages/console/app/public/apple-touch-icon-v3.png similarity index 100% rename from packages/console/app/public/apple-touch-icon-v2.png rename to packages/console/app/public/apple-touch-icon-v3.png diff --git a/packages/console/app/public/favicon-96x96-v2.png b/packages/console/app/public/favicon-96x96-v3.png similarity index 100% rename from packages/console/app/public/favicon-96x96-v2.png rename to packages/console/app/public/favicon-96x96-v3.png diff --git a/packages/console/app/public/favicon-v2.ico b/packages/console/app/public/favicon-v3.ico similarity index 100% rename from packages/console/app/public/favicon-v2.ico rename to packages/console/app/public/favicon-v3.ico diff --git a/packages/console/app/public/favicon-v2.svg b/packages/console/app/public/favicon-v3.svg similarity index 100% rename from packages/console/app/public/favicon-v2.svg rename to packages/console/app/public/favicon-v3.svg diff --git a/packages/console/function/src/auth.ts b/packages/console/function/src/auth.ts index ee68dffff53..c26ab215b32 100644 --- a/packages/console/function/src/auth.ts +++ b/packages/console/function/src/auth.ts @@ -35,7 +35,7 @@ export const subjects = createSubjects({ const MY_THEME: Theme = { ...THEME_OPENAUTH, - logo: "https://opencode.ai/favicon-v2.svg", + logo: "https://opencode.ai/favicon-v3.svg", } export default { diff --git a/packages/desktop/index.html b/packages/desktop/index.html index 7bed1e8bd4c..6a81ef4a50d 100644 --- a/packages/desktop/index.html +++ b/packages/desktop/index.html @@ -4,10 +4,10 @@ OpenCode - - - - + + + + diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx index e36644b05bb..ac21b3c2866 100644 --- a/packages/desktop/src/index.tsx +++ b/packages/desktop/src/index.tsx @@ -270,7 +270,7 @@ const createPlatform = (password: Accessor): Platform => ({ .then(() => { const notification = new Notification(title, { body: description ?? "", - icon: "https://opencode.ai/favicon-96x96-v2.png", + icon: "https://opencode.ai/favicon-96x96-v3.png", }) notification.onclick = () => { const win = getCurrentWindow() diff --git a/packages/docs/docs.json b/packages/docs/docs.json index 93dff10f8c2..1bf8b3700b9 100644 --- a/packages/docs/docs.json +++ b/packages/docs/docs.json @@ -7,7 +7,7 @@ "light": "#07C983", "dark": "#15803D" }, - "favicon": "/favicon-v2.svg", + "favicon": "/favicon-v3.svg", "navigation": { "tabs": [ { diff --git a/packages/docs/favicon-v2.svg b/packages/docs/favicon-v3.svg similarity index 100% rename from packages/docs/favicon-v2.svg rename to packages/docs/favicon-v3.svg diff --git a/packages/enterprise/public/apple-touch-icon-v2.png b/packages/enterprise/public/apple-touch-icon-v3.png similarity index 100% rename from packages/enterprise/public/apple-touch-icon-v2.png rename to packages/enterprise/public/apple-touch-icon-v3.png diff --git a/packages/enterprise/public/favicon-96x96-v2.png b/packages/enterprise/public/favicon-96x96-v3.png similarity index 100% rename from packages/enterprise/public/favicon-96x96-v2.png rename to packages/enterprise/public/favicon-96x96-v3.png diff --git a/packages/enterprise/public/favicon-v2.ico b/packages/enterprise/public/favicon-v3.ico similarity index 100% rename from packages/enterprise/public/favicon-v2.ico rename to packages/enterprise/public/favicon-v3.ico diff --git a/packages/enterprise/public/favicon-v2.svg b/packages/enterprise/public/favicon-v3.svg similarity index 100% rename from packages/enterprise/public/favicon-v2.svg rename to packages/enterprise/public/favicon-v3.svg diff --git a/packages/ui/src/assets/favicon/apple-touch-icon-v2.png b/packages/ui/src/assets/favicon/apple-touch-icon-v3.png similarity index 100% rename from packages/ui/src/assets/favicon/apple-touch-icon-v2.png rename to packages/ui/src/assets/favicon/apple-touch-icon-v3.png diff --git a/packages/ui/src/assets/favicon/favicon-96x96-v2.png b/packages/ui/src/assets/favicon/favicon-96x96-v3.png similarity index 100% rename from packages/ui/src/assets/favicon/favicon-96x96-v2.png rename to packages/ui/src/assets/favicon/favicon-96x96-v3.png diff --git a/packages/ui/src/assets/favicon/favicon-v2.ico b/packages/ui/src/assets/favicon/favicon-v3.ico similarity index 100% rename from packages/ui/src/assets/favicon/favicon-v2.ico rename to packages/ui/src/assets/favicon/favicon-v3.ico diff --git a/packages/ui/src/assets/favicon/favicon-v2.svg b/packages/ui/src/assets/favicon/favicon-v3.svg similarity index 100% rename from packages/ui/src/assets/favicon/favicon-v2.svg rename to packages/ui/src/assets/favicon/favicon-v3.svg diff --git a/packages/ui/src/components/favicon.tsx b/packages/ui/src/components/favicon.tsx index abb0e1f78c6..94cc82489fd 100644 --- a/packages/ui/src/components/favicon.tsx +++ b/packages/ui/src/components/favicon.tsx @@ -3,9 +3,9 @@ import { Link, Meta } from "@solidjs/meta" export const Favicon = () => { return ( <> - - - + + + diff --git a/packages/web/astro.config.mjs b/packages/web/astro.config.mjs index 9be189cede8..eed1b87fd77 100644 --- a/packages/web/astro.config.mjs +++ b/packages/web/astro.config.mjs @@ -32,13 +32,13 @@ export default defineConfig({ solidJs(), starlight({ title: "OpenCode", - favicon: "/favicon-v2.svg", + favicon: "/favicon-v3.svg", head: [ { tag: "link", attrs: { rel: "icon", - href: "/favicon-v2.ico", + href: "/favicon-v3.ico", sizes: "32x32", }, }, @@ -47,7 +47,7 @@ export default defineConfig({ attrs: { rel: "icon", type: "image/png", - href: "/favicon-96x96-v2.png", + href: "/favicon-96x96-v3.png", sizes: "96x96", }, }, @@ -55,7 +55,7 @@ export default defineConfig({ tag: "link", attrs: { rel: "apple-touch-icon", - href: "/apple-touch-icon-v2.png", + href: "/apple-touch-icon-v3.png", sizes: "180x180", }, }, diff --git a/packages/web/public/apple-touch-icon-v2.png b/packages/web/public/apple-touch-icon-v3.png similarity index 100% rename from packages/web/public/apple-touch-icon-v2.png rename to packages/web/public/apple-touch-icon-v3.png diff --git a/packages/web/public/favicon-96x96-v2.png b/packages/web/public/favicon-96x96-v3.png similarity index 100% rename from packages/web/public/favicon-96x96-v2.png rename to packages/web/public/favicon-96x96-v3.png diff --git a/packages/web/public/favicon-v2.ico b/packages/web/public/favicon-v3.ico similarity index 100% rename from packages/web/public/favicon-v2.ico rename to packages/web/public/favicon-v3.ico diff --git a/packages/web/public/favicon-v2.svg b/packages/web/public/favicon-v3.svg similarity index 100% rename from packages/web/public/favicon-v2.svg rename to packages/web/public/favicon-v3.svg From 0b63cae1aeb58f9ada3c0c703112f93add67d5eb Mon Sep 17 00:00:00 2001 From: Caleb Norton Date: Wed, 21 Jan 2026 14:40:01 -0600 Subject: [PATCH 300/426] fix: update pre-push hook to allow caret version differences (#9876) Co-authored-by: randymcmillan --- .husky/pre-push | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/.husky/pre-push b/.husky/pre-push index 2fd039d56dd..5d3cc53411b 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,9 +1,20 @@ #!/bin/sh +set -e # Check if bun version matches package.json -EXPECTED_VERSION=$(grep '"packageManager"' package.json | sed 's/.*"bun@\([^"]*\)".*/\1/') -CURRENT_VERSION=$(bun --version) -if [ "$CURRENT_VERSION" != "$EXPECTED_VERSION" ]; then - echo "Error: Bun version $CURRENT_VERSION does not match expected version $EXPECTED_VERSION from package.json" - exit 1 -fi +# keep in sync with packages/script/src/index.ts semver qualifier +bun -e ' +import { semver } from "bun"; +const pkg = await Bun.file("package.json").json(); +const expectedBunVersion = pkg.packageManager?.split("@")[1]; +if (!expectedBunVersion) { + throw new Error("packageManager field not found in root package.json"); +} +const expectedBunVersionRange = `^${expectedBunVersion}`; +if (!semver.satisfies(process.versions.bun, expectedBunVersionRange)) { + throw new Error(`This script requires bun@${expectedBunVersionRange}, but you are using bun@${process.versions.bun}`); +} +if (process.versions.bun !== expectedBunVersion) { + console.warn(`Warning: Bun version ${process.versions.bun} differs from expected ${expectedBunVersion}`); +} +' bun typecheck From bcdec15fb47361689a4105fd6d808528c2b10cad Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 14:52:12 -0600 Subject: [PATCH 301/426] fix(web): favicon rename again --- packages/app/public/apple-touch-icon-v3.png | 2 +- packages/app/public/favicon-96x96-v3.png | 2 +- packages/app/public/favicon-v3.ico | 2 +- packages/app/public/favicon-v3.svg | 2 +- packages/console/app/public/apple-touch-icon-v3.png | 2 +- packages/console/app/public/favicon-96x96-v3.png | 2 +- packages/console/app/public/favicon-v3.ico | 2 +- packages/console/app/public/favicon-v3.svg | 2 +- packages/enterprise/public/apple-touch-icon-v3.png | 2 +- packages/enterprise/public/favicon-96x96-v3.png | 2 +- packages/enterprise/public/favicon-v3.ico | 2 +- packages/enterprise/public/favicon-v3.svg | 2 +- packages/web/public/apple-touch-icon-v3.png | 2 +- packages/web/public/favicon-96x96-v3.png | 2 +- packages/web/public/favicon-v3.ico | 2 +- packages/web/public/favicon-v3.svg | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/app/public/apple-touch-icon-v3.png b/packages/app/public/apple-touch-icon-v3.png index c0d4353db47..a6f48a689db 120000 --- a/packages/app/public/apple-touch-icon-v3.png +++ b/packages/app/public/apple-touch-icon-v3.png @@ -1 +1 @@ -../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file +../../ui/src/assets/favicon/apple-touch-icon-v3.png \ No newline at end of file diff --git a/packages/app/public/favicon-96x96-v3.png b/packages/app/public/favicon-96x96-v3.png index b3129f6bf91..5d21163ce86 120000 --- a/packages/app/public/favicon-96x96-v3.png +++ b/packages/app/public/favicon-96x96-v3.png @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file +../../ui/src/assets/favicon/favicon-96x96-v3.png \ No newline at end of file diff --git a/packages/app/public/favicon-v3.ico b/packages/app/public/favicon-v3.ico index d8527270af6..b3da91f3c45 120000 --- a/packages/app/public/favicon-v3.ico +++ b/packages/app/public/favicon-v3.ico @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file +../../ui/src/assets/favicon/favicon-v3.ico \ No newline at end of file diff --git a/packages/app/public/favicon-v3.svg b/packages/app/public/favicon-v3.svg index 2600394ceae..fc95f68af4a 120000 --- a/packages/app/public/favicon-v3.svg +++ b/packages/app/public/favicon-v3.svg @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file +../../ui/src/assets/favicon/favicon-v3.svg \ No newline at end of file diff --git a/packages/console/app/public/apple-touch-icon-v3.png b/packages/console/app/public/apple-touch-icon-v3.png index 1afba0f1f66..ddd1d1ac33c 120000 --- a/packages/console/app/public/apple-touch-icon-v3.png +++ b/packages/console/app/public/apple-touch-icon-v3.png @@ -1 +1 @@ -../../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file +../../../ui/src/assets/favicon/apple-touch-icon-v3.png \ No newline at end of file diff --git a/packages/console/app/public/favicon-96x96-v3.png b/packages/console/app/public/favicon-96x96-v3.png index d2e35e80139..5f4b8a73bbf 120000 --- a/packages/console/app/public/favicon-96x96-v3.png +++ b/packages/console/app/public/favicon-96x96-v3.png @@ -1 +1 @@ -../../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file +../../../ui/src/assets/favicon/favicon-96x96-v3.png \ No newline at end of file diff --git a/packages/console/app/public/favicon-v3.ico b/packages/console/app/public/favicon-v3.ico index b3a7b9e0209..6e1f48aec90 120000 --- a/packages/console/app/public/favicon-v3.ico +++ b/packages/console/app/public/favicon-v3.ico @@ -1 +1 @@ -../../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file +../../../ui/src/assets/favicon/favicon-v3.ico \ No newline at end of file diff --git a/packages/console/app/public/favicon-v3.svg b/packages/console/app/public/favicon-v3.svg index ee4b459a96b..77814acf5c1 120000 --- a/packages/console/app/public/favicon-v3.svg +++ b/packages/console/app/public/favicon-v3.svg @@ -1 +1 @@ -../../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file +../../../ui/src/assets/favicon/favicon-v3.svg \ No newline at end of file diff --git a/packages/enterprise/public/apple-touch-icon-v3.png b/packages/enterprise/public/apple-touch-icon-v3.png index c0d4353db47..a6f48a689db 120000 --- a/packages/enterprise/public/apple-touch-icon-v3.png +++ b/packages/enterprise/public/apple-touch-icon-v3.png @@ -1 +1 @@ -../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file +../../ui/src/assets/favicon/apple-touch-icon-v3.png \ No newline at end of file diff --git a/packages/enterprise/public/favicon-96x96-v3.png b/packages/enterprise/public/favicon-96x96-v3.png index b3129f6bf91..5d21163ce86 120000 --- a/packages/enterprise/public/favicon-96x96-v3.png +++ b/packages/enterprise/public/favicon-96x96-v3.png @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file +../../ui/src/assets/favicon/favicon-96x96-v3.png \ No newline at end of file diff --git a/packages/enterprise/public/favicon-v3.ico b/packages/enterprise/public/favicon-v3.ico index d8527270af6..b3da91f3c45 120000 --- a/packages/enterprise/public/favicon-v3.ico +++ b/packages/enterprise/public/favicon-v3.ico @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file +../../ui/src/assets/favicon/favicon-v3.ico \ No newline at end of file diff --git a/packages/enterprise/public/favicon-v3.svg b/packages/enterprise/public/favicon-v3.svg index 2600394ceae..fc95f68af4a 120000 --- a/packages/enterprise/public/favicon-v3.svg +++ b/packages/enterprise/public/favicon-v3.svg @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file +../../ui/src/assets/favicon/favicon-v3.svg \ No newline at end of file diff --git a/packages/web/public/apple-touch-icon-v3.png b/packages/web/public/apple-touch-icon-v3.png index c0d4353db47..a6f48a689db 120000 --- a/packages/web/public/apple-touch-icon-v3.png +++ b/packages/web/public/apple-touch-icon-v3.png @@ -1 +1 @@ -../../ui/src/assets/favicon/apple-touch-icon-v2.png \ No newline at end of file +../../ui/src/assets/favicon/apple-touch-icon-v3.png \ No newline at end of file diff --git a/packages/web/public/favicon-96x96-v3.png b/packages/web/public/favicon-96x96-v3.png index b3129f6bf91..5d21163ce86 120000 --- a/packages/web/public/favicon-96x96-v3.png +++ b/packages/web/public/favicon-96x96-v3.png @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-96x96-v2.png \ No newline at end of file +../../ui/src/assets/favicon/favicon-96x96-v3.png \ No newline at end of file diff --git a/packages/web/public/favicon-v3.ico b/packages/web/public/favicon-v3.ico index d8527270af6..b3da91f3c45 120000 --- a/packages/web/public/favicon-v3.ico +++ b/packages/web/public/favicon-v3.ico @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-v2.ico \ No newline at end of file +../../ui/src/assets/favicon/favicon-v3.ico \ No newline at end of file diff --git a/packages/web/public/favicon-v3.svg b/packages/web/public/favicon-v3.svg index 2600394ceae..fc95f68af4a 120000 --- a/packages/web/public/favicon-v3.svg +++ b/packages/web/public/favicon-v3.svg @@ -1 +1 @@ -../../ui/src/assets/favicon/favicon-v2.svg \ No newline at end of file +../../ui/src/assets/favicon/favicon-v3.svg \ No newline at end of file From 09d2fd57ff7aaaff714e23cb89859611d0a95f9e Mon Sep 17 00:00:00 2001 From: opencode Date: Wed, 21 Jan 2026 20:55:35 +0000 Subject: [PATCH 302/426] release: v1.1.30 --- bun.lock | 30 +++++++++++++------------- packages/app/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 4 ++-- packages/sdk/js/package.json | 4 ++-- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/bun.lock b/bun.lock index 403427ff6c8..ea41ee49e68 100644 --- a/bun.lock +++ b/bun.lock @@ -23,7 +23,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -73,7 +73,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -107,7 +107,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -134,7 +134,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -158,7 +158,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -182,7 +182,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -211,7 +211,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -240,7 +240,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -256,7 +256,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.1.29", + "version": "1.1.30", "bin": { "opencode": "./bin/opencode", }, @@ -360,7 +360,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -380,7 +380,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.1.29", + "version": "1.1.30", "devDependencies": { "@hey-api/openapi-ts": "0.90.4", "@tsconfig/node22": "catalog:", @@ -391,7 +391,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -404,7 +404,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -445,7 +445,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "zod": "catalog:", }, @@ -456,7 +456,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index c6b8e71669b..155dfebd9f4 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.1.29", + "version": "1.1.30", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index acc59322b4f..237b6630f2f 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.1.29", + "version": "1.1.30", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index a17d71ac57d..3aa1f9e8acd 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.1.29", + "version": "1.1.30", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 7a9a9117037..37a09255c1d 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.1.29", + "version": "1.1.30", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index aea82945671..882e1f21a5c 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.1.29", + "version": "1.1.30", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 59b6495af07..5d93e3295cc 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.1.29", + "version": "1.1.30", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 1b359515b91..2cfcc6c2d70 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.1.29", + "version": "1.1.30", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index 15b7e7fc194..779641e56c5 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.1.29" +version = "1.1.30" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.29/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index 1e91d88eb02..a776dfb97ea 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.1.29", + "version": "1.1.30", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index c2eaccbf316..023f1c2d111 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.1.29", + "version": "1.1.30", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 669543482c9..7513dfabab2 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.1.29", + "version": "1.1.30", "type": "module", "license": "MIT", "scripts": { @@ -25,4 +25,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 8f9cfd10e96..29848c61939 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.1.29", + "version": "1.1.30", "type": "module", "license": "MIT", "scripts": { @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} +} \ No newline at end of file diff --git a/packages/slack/package.json b/packages/slack/package.json index cfd84b00bff..d173904eea1 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.1.29", + "version": "1.1.30", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index d3996cb1ba1..04d92b18e56 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.1.29", + "version": "1.1.30", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index f0aa0158dd8..989db6128ee 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.1.29", + "version": "1.1.30", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index b66e0c57da4..e216f2456c9 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.1.29", + "version": "1.1.30", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 646409a86a1..67ebdecb1f1 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.1.29", + "version": "1.1.30", "publisher": "sst-dev", "repository": { "type": "git", From 5ca28b645435e7210bded70b6de9fed34327bd4f Mon Sep 17 00:00:00 2001 From: Filip <34747899+neriousy@users.noreply.github.com> Date: Wed, 21 Jan 2026 22:04:25 +0100 Subject: [PATCH 303/426] feat(app): polish translations (#9884) --- packages/app/src/context/language.tsx | 10 +- packages/app/src/i18n/da.ts | 1 + packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 1 + packages/app/src/i18n/fr.ts | 1 + packages/app/src/i18n/ja.ts | 1 + packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/pl.ts | 638 ++++++++++++++++++++++++++ packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/pl.ts | 90 ++++ 11 files changed, 744 insertions(+), 2 deletions(-) create mode 100644 packages/app/src/i18n/pl.ts create mode 100644 packages/ui/src/i18n/pl.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index f7c2e277b67..7275fb36fce 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -19,13 +19,15 @@ import { dict as uiEs } from "@opencode-ai/ui/i18n/es" import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" import { dict as uiDa } from "@opencode-ai/ui/i18n/da" import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" +import { dict as pl } from "@/i18n/pl" +import { dict as uiPl } from "@opencode-ai/ui/i18n/pl" -export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" +export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja", "pl"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -40,6 +42,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("fr")) return "fr" if (language.toLowerCase().startsWith("da")) return "da" if (language.toLowerCase().startsWith("ja")) return "ja" + if (language.toLowerCase().startsWith("pl")) return "pl" } return "en" @@ -63,6 +66,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "fr") return "fr" if (store.locale === "da") return "da" if (store.locale === "ja") return "ja" + if (store.locale === "pl") return "pl" return "en" }) @@ -81,6 +85,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa }) } if (locale() === "ja") return { ...base, ...i18n.flatten({ ...ja, ...uiJa }) } + if (locale() === "pl") return { ...base, ...i18n.flatten({ ...pl, ...uiPl }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -95,6 +100,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont fr: "language.fr", da: "language.da", ja: "language.ja", + pl: "language.pl", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 7d381a8209f..c7149ec7541 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Fransk", "language.ja": "Japansk", "language.da": "Dansk", + "language.pl": "Polsk", "toast.language.title": "Sprog", "toast.language.description": "Skiftede til {{language}}", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 495308a6f78..941390a046a 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -281,6 +281,7 @@ export const dict = { "language.fr": "Französisch", "language.ja": "Japanisch", "language.da": "Dänisch", + "language.pl": "Polnisch", "toast.language.title": "Sprache", "toast.language.description": "Zu {{language}} gewechselt", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 36f90a4fee0..2eb69d0409c 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -293,6 +293,7 @@ export const dict = { "language.fr": "French", "language.ja": "Japanese", "language.da": "Danish", + "language.pl": "Polish", "toast.language.title": "Language", "toast.language.description": "Switched to {{language}}", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index bae4ad48035..21bd296eb68 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Francés", "language.ja": "Japonés", "language.da": "Danés", + "language.pl": "Polaco", "toast.language.title": "Idioma", "toast.language.description": "Cambiado a {{language}}", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index c0014210001..b2f78cd8ece 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Français", "language.ja": "Japonais", "language.da": "Danois", + "language.pl": "Polonais", "toast.language.title": "Langue", "toast.language.description": "Passé à {{language}}", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index c8448811a82..1d87037ae63 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -274,6 +274,7 @@ export const dict = { "language.fr": "フランス語", "language.ja": "日本語", "language.da": "デンマーク語", + "language.pl": "ポーランド語", "toast.language.title": "言語", "toast.language.description": "{{language}}に切り替えました", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index dbd02270cb8..64fa629c9cc 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -278,6 +278,7 @@ export const dict = { "language.fr": "프랑스어", "language.ja": "일본어", "language.da": "덴마크어", + "language.pl": "폴란드어", "toast.language.title": "언어", "toast.language.description": "{{language}}(으)로 전환됨", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts new file mode 100644 index 00000000000..e65229e25e7 --- /dev/null +++ b/packages/app/src/i18n/pl.ts @@ -0,0 +1,638 @@ +export const dict = { + "command.category.suggested": "Sugerowane", + "command.category.view": "Widok", + "command.category.project": "Projekt", + "command.category.provider": "Dostawca", + "command.category.server": "Serwer", + "command.category.session": "Sesja", + "command.category.theme": "Motyw", + "command.category.language": "Język", + "command.category.file": "Plik", + "command.category.terminal": "Terminal", + "command.category.model": "Model", + "command.category.mcp": "MCP", + "command.category.agent": "Agent", + "command.category.permissions": "Uprawnienia", + "command.category.workspace": "Przestrzeń robocza", + "command.category.settings": "Ustawienia", + + "theme.scheme.system": "Systemowy", + "theme.scheme.light": "Jasny", + "theme.scheme.dark": "Ciemny", + + "command.sidebar.toggle": "Przełącz pasek boczny", + "command.project.open": "Otwórz projekt", + "command.provider.connect": "Połącz dostawcę", + "command.server.switch": "Przełącz serwer", + "command.settings.open": "Otwórz ustawienia", + "command.session.previous": "Poprzednia sesja", + "command.session.next": "Następna sesja", + "command.session.archive": "Zarchiwizuj sesję", + + "command.palette": "Paleta poleceń", + + "command.theme.cycle": "Przełącz motyw", + "command.theme.set": "Użyj motywu: {{theme}}", + "command.theme.scheme.cycle": "Przełącz schemat kolorów", + "command.theme.scheme.set": "Użyj schematu kolorów: {{scheme}}", + + "command.language.cycle": "Przełącz język", + "command.language.set": "Użyj języka: {{language}}", + + "command.session.new": "Nowa sesja", + "command.file.open": "Otwórz plik", + "command.file.open.description": "Szukaj plików i poleceń", + "command.terminal.toggle": "Przełącz terminal", + "command.review.toggle": "Przełącz przegląd", + "command.terminal.new": "Nowy terminal", + "command.terminal.new.description": "Utwórz nową kartę terminala", + "command.steps.toggle": "Przełącz kroki", + "command.steps.toggle.description": "Pokaż lub ukryj kroki dla bieżącej wiadomości", + "command.message.previous": "Poprzednia wiadomość", + "command.message.previous.description": "Przejdź do poprzedniej wiadomości użytkownika", + "command.message.next": "Następna wiadomość", + "command.message.next.description": "Przejdź do następnej wiadomości użytkownika", + "command.model.choose": "Wybierz model", + "command.model.choose.description": "Wybierz inny model", + "command.mcp.toggle": "Przełącz MCP", + "command.mcp.toggle.description": "Przełącz MCP", + "command.agent.cycle": "Przełącz agenta", + "command.agent.cycle.description": "Przełącz na następnego agenta", + "command.agent.cycle.reverse": "Przełącz agenta wstecz", + "command.agent.cycle.reverse.description": "Przełącz na poprzedniego agenta", + "command.model.variant.cycle": "Przełącz wysiłek myślowy", + "command.model.variant.cycle.description": "Przełącz na następny poziom wysiłku", + "command.permissions.autoaccept.enable": "Automatyczne akceptowanie edycji", + "command.permissions.autoaccept.disable": "Zatrzymaj automatyczne akceptowanie edycji", + "command.session.undo": "Cofnij", + "command.session.undo.description": "Cofnij ostatnią wiadomość", + "command.session.redo": "Ponów", + "command.session.redo.description": "Ponów ostatnią cofniętą wiadomość", + "command.session.compact": "Kompaktuj sesję", + "command.session.compact.description": "Podsumuj sesję, aby zmniejszyć rozmiar kontekstu", + "command.session.fork": "Rozwidlij od wiadomości", + "command.session.fork.description": "Utwórz nową sesję od poprzedniej wiadomości", + "command.session.share": "Udostępnij sesję", + "command.session.share.description": "Udostępnij tę sesję i skopiuj URL do schowka", + "command.session.unshare": "Przestań udostępniać sesję", + "command.session.unshare.description": "Zatrzymaj udostępnianie tej sesji", + + "palette.search.placeholder": "Szukaj plików i poleceń", + "palette.empty": "Brak wyników", + "palette.group.commands": "Polecenia", + "palette.group.files": "Pliki", + + "dialog.provider.search.placeholder": "Szukaj dostawców", + "dialog.provider.empty": "Nie znaleziono dostawców", + "dialog.provider.group.popular": "Popularne", + "dialog.provider.group.other": "Inne", + "dialog.provider.tag.recommended": "Zalecane", + "dialog.provider.anthropic.note": "Połącz z Claude Pro/Max lub kluczem API", + + "dialog.model.select.title": "Wybierz model", + "dialog.model.search.placeholder": "Szukaj modeli", + "dialog.model.empty": "Brak wyników modelu", + "dialog.model.manage": "Zarządzaj modelami", + "dialog.model.manage.description": "Dostosuj, które modele pojawiają się w wyborze modelu.", + + "dialog.model.unpaid.freeModels.title": "Darmowe modele dostarczane przez OpenCode", + "dialog.model.unpaid.addMore.title": "Dodaj więcej modeli od popularnych dostawców", + + "dialog.provider.viewAll": "Zobacz wszystkich dostawców", + + "provider.connect.title": "Połącz {{provider}}", + "provider.connect.title.anthropicProMax": "Zaloguj się z Claude Pro/Max", + "provider.connect.selectMethod": "Wybierz metodę logowania dla {{provider}}.", + "provider.connect.method.apiKey": "Klucz API", + "provider.connect.status.inProgress": "Autoryzacja w toku...", + "provider.connect.status.waiting": "Oczekiwanie na autoryzację...", + "provider.connect.status.failed": "Autoryzacja nie powiodła się: {{error}}", + "provider.connect.apiKey.description": + "Wprowadź swój klucz API {{provider}}, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.apiKey.label": "Klucz API {{provider}}", + "provider.connect.apiKey.placeholder": "Klucz API", + "provider.connect.apiKey.required": "Klucz API jest wymagany", + "provider.connect.opencodeZen.line1": + "OpenCode Zen daje dostęp do wybranego zestawu niezawodnych, zoptymalizowanych modeli dla agentów kodujących.", + "provider.connect.opencodeZen.line2": + "Z jednym kluczem API uzyskasz dostęp do modeli takich jak Claude, GPT, Gemini, GLM i więcej.", + "provider.connect.opencodeZen.visit.prefix": "Odwiedź ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", + "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.", + "provider.connect.oauth.code.visit.prefix": "Odwiedź ", + "provider.connect.oauth.code.visit.link": "ten link", + "provider.connect.oauth.code.visit.suffix": + ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", + "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", + "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", + "provider.connect.oauth.code.invalid": "Nieprawidłowy kod autoryzacyjny", + "provider.connect.oauth.auto.visit.prefix": "Odwiedź ", + "provider.connect.oauth.auto.visit.link": "ten link", + "provider.connect.oauth.auto.visit.suffix": + " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", + "provider.connect.toast.connected.title": "Połączono {{provider}}", + "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", + + "model.tag.free": "Darmowy", + "model.tag.latest": "Najnowszy", + "model.provider.anthropic": "Anthropic", + "model.provider.openai": "OpenAI", + "model.provider.google": "Google", + "model.provider.xai": "xAI", + "model.provider.meta": "Meta", + "model.input.text": "tekst", + "model.input.image": "obraz", + "model.input.audio": "audio", + "model.input.video": "wideo", + "model.input.pdf": "pdf", + "model.tooltip.allows": "Obsługuje: {{inputs}}", + "model.tooltip.reasoning.allowed": "Obsługuje wnioskowanie", + "model.tooltip.reasoning.none": "Brak wnioskowania", + "model.tooltip.context": "Limit kontekstu {{limit}}", + + "common.search.placeholder": "Szukaj", + "common.loading": "Ładowanie", + "common.loading.ellipsis": "...", + "common.cancel": "Anuluj", + "common.submit": "Prześlij", + "common.save": "Zapisz", + "common.saving": "Zapisywanie...", + "common.default": "Domyślny", + "common.attachment": "załącznik", + + "prompt.placeholder.shell": "Wpisz polecenie terminala...", + "prompt.placeholder.normal": 'Zapytaj o cokolwiek... "{{example}}"', + "prompt.mode.shell": "Terminal", + "prompt.mode.shell.exit": "esc aby wyjść", + + "prompt.example.1": "Napraw TODO w bazie kodu", + "prompt.example.2": "Jaki jest stos technologiczny tego projektu?", + "prompt.example.3": "Napraw zepsute testy", + "prompt.example.4": "Wyjaśnij jak działa uwierzytelnianie", + "prompt.example.5": "Znajdź i napraw luki w zabezpieczeniach", + "prompt.example.6": "Dodaj testy jednostkowe dla serwisu użytkownika", + "prompt.example.7": "Zrefaktoryzuj tę funkcję, aby była bardziej czytelna", + "prompt.example.8": "Co oznacza ten błąd?", + "prompt.example.9": "Pomóż mi zdebugować ten problem", + "prompt.example.10": "Wygeneruj dokumentację API", + "prompt.example.11": "Zoptymalizuj zapytania do bazy danych", + "prompt.example.12": "Dodaj walidację danych wejściowych", + "prompt.example.13": "Utwórz nowy komponent dla...", + "prompt.example.14": "Jak wdrożyć ten projekt?", + "prompt.example.15": "Sprawdź mój kod pod kątem najlepszych praktyk", + "prompt.example.16": "Dodaj obsługę błędów do tej funkcję", + "prompt.example.17": "Wyjaśnij ten wzorzec regex", + "prompt.example.18": "Przekonwertuj to na TypeScript", + "prompt.example.19": "Dodaj logowanie w całej bazie kodu", + "prompt.example.20": "Które zależności są przestarzałe?", + "prompt.example.21": "Pomóż mi napisać skrypt migracyjny", + "prompt.example.22": "Zaimplementuj cachowanie dla tego punktu końcowego", + "prompt.example.23": "Dodaj stronicowanie do tej listy", + "prompt.example.24": "Utwórz polecenie CLI dla...", + "prompt.example.25": "Jak działają tutaj zmienne środowiskowe?", + + "prompt.popover.emptyResults": "Brak pasujących wyników", + "prompt.popover.emptyCommands": "Brak pasujących poleceń", + "prompt.dropzone.label": "Upuść obrazy lub pliki PDF tutaj", + "prompt.slash.badge.custom": "własne", + "prompt.context.active": "aktywny", + "prompt.context.includeActiveFile": "Dołącz aktywny plik", + "prompt.action.attachFile": "Załącz plik", + "prompt.action.send": "Wyślij", + "prompt.action.stop": "Zatrzymaj", + + "prompt.toast.pasteUnsupported.title": "Nieobsługiwane wklejanie", + "prompt.toast.pasteUnsupported.description": "Tylko obrazy lub pliki PDF mogą być tutaj wklejane.", + "prompt.toast.modelAgentRequired.title": "Wybierz agenta i model", + "prompt.toast.modelAgentRequired.description": "Wybierz agenta i model przed wysłaniem zapytania.", + "prompt.toast.worktreeCreateFailed.title": "Nie udało się utworzyć drzewa roboczego", + "prompt.toast.sessionCreateFailed.title": "Nie udało się utworzyć sesji", + "prompt.toast.shellSendFailed.title": "Nie udało się wysłać polecenia powłoki", + "prompt.toast.commandSendFailed.title": "Nie udało się wysłać polecenia", + "prompt.toast.promptSendFailed.title": "Nie udało się wysłać zapytania", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "{{enabled}} z {{total}} włączone", + "dialog.mcp.empty": "Brak skonfigurowanych MCP", + + "mcp.status.connected": "połączono", + "mcp.status.failed": "niepowodzenie", + "mcp.status.needs_auth": "wymaga autoryzacji", + "mcp.status.disabled": "wyłączone", + + "dialog.fork.empty": "Brak wiadomości do rozwidlenia", + + "dialog.directory.search.placeholder": "Szukaj folderów", + "dialog.directory.empty": "Nie znaleziono folderów", + + "dialog.server.title": "Serwery", + "dialog.server.description": "Przełącz serwer OpenCode, z którym łączy się ta aplikacja.", + "dialog.server.search.placeholder": "Szukaj serwerów", + "dialog.server.empty": "Brak serwerów", + "dialog.server.add.title": "Dodaj serwer", + "dialog.server.add.url": "URL serwera", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Nie można połączyć się z serwerem", + "dialog.server.add.checking": "Sprawdzanie...", + "dialog.server.add.button": "Dodaj", + "dialog.server.default.title": "Domyślny serwer", + "dialog.server.default.description": + "Połącz z tym serwerem przy uruchomieniu aplikacji zamiast uruchamiać lokalny serwer. Wymaga restartu.", + "dialog.server.default.none": "Nie wybrano serwera", + "dialog.server.default.set": "Ustaw bieżący serwer jako domyślny", + "dialog.server.default.clear": "Wyczyść", + + "dialog.project.edit.title": "Edytuj projekt", + "dialog.project.edit.name": "Nazwa", + "dialog.project.edit.icon": "Ikona", + "dialog.project.edit.icon.alt": "Ikona projektu", + "dialog.project.edit.icon.hint": "Kliknij lub przeciągnij obraz", + "dialog.project.edit.icon.recommended": "Zalecane: 128x128px", + "dialog.project.edit.color": "Kolor", + + "context.breakdown.title": "Podział kontekstu", + "context.breakdown.note": 'Przybliżony podział tokenów wejściowych. "Inne" obejmuje definicje narzędzi i narzut.', + "context.breakdown.system": "System", + "context.breakdown.user": "Użytkownik", + "context.breakdown.assistant": "Asystent", + "context.breakdown.tool": "Wywołania narzędzi", + "context.breakdown.other": "Inne", + + "context.systemPrompt.title": "Prompt systemowy", + "context.rawMessages.title": "Surowe wiadomości", + + "context.stats.session": "Sesja", + "context.stats.messages": "Wiadomości", + "context.stats.provider": "Dostawca", + "context.stats.model": "Model", + "context.stats.limit": "Limit kontekstu", + "context.stats.totalTokens": "Całkowita liczba tokenów", + "context.stats.usage": "Użycie", + "context.stats.inputTokens": "Tokeny wejściowe", + "context.stats.outputTokens": "Tokeny wyjściowe", + "context.stats.reasoningTokens": "Tokeny wnioskowania", + "context.stats.cacheTokens": "Tokeny pamięci podręcznej (odczyt/zapis)", + "context.stats.userMessages": "Wiadomości użytkownika", + "context.stats.assistantMessages": "Wiadomości asystenta", + "context.stats.totalCost": "Całkowity koszt", + "context.stats.sessionCreated": "Utworzono sesję", + "context.stats.lastActivity": "Ostatnia aktywność", + + "context.usage.tokens": "Tokeny", + "context.usage.usage": "Użycie", + "context.usage.cost": "Koszt", + "context.usage.clickToView": "Kliknij, aby zobaczyć kontekst", + + "language.en": "Angielski", + "language.zh": "Chiński", + "language.ko": "Koreański", + "language.de": "Niemiecki", + "language.es": "Hiszpański", + "language.fr": "Francuski", + "language.ja": "Japoński", + "language.da": "Duński", + "language.pl": "Polski", + + "toast.language.title": "Język", + "toast.language.description": "Przełączono na {{language}}", + + "toast.theme.title": "Przełączono motyw", + "toast.scheme.title": "Schemat kolorów", + + "toast.permissions.autoaccept.on.title": "Automatyczne akceptowanie edycji", + "toast.permissions.autoaccept.on.description": "Uprawnienia do edycji i zapisu będą automatycznie zatwierdzane", + "toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie edycji", + "toast.permissions.autoaccept.off.description": "Uprawnienia do edycji i zapisu będą wymagały zatwierdzenia", + + "toast.model.none.title": "Nie wybrano modelu", + "toast.model.none.description": "Połącz dostawcę, aby podsumować tę sesję", + + "toast.file.loadFailed.title": "Nie udało się załadować pliku", + + "toast.session.share.copyFailed.title": "Nie udało się skopiować URL do schowka", + "toast.session.share.success.title": "Sesja udostępniona", + "toast.session.share.success.description": "Link udostępniania skopiowany do schowka!", + "toast.session.share.failed.title": "Nie udało się udostępnić sesji", + "toast.session.share.failed.description": "Wystąpił błąd podczas udostępniania sesji", + + "toast.session.unshare.success.title": "Zatrzymano udostępnianie sesji", + "toast.session.unshare.success.description": "Udostępnianie sesji zostało pomyślnie zatrzymane!", + "toast.session.unshare.failed.title": "Nie udało się zatrzymać udostępniania sesji", + "toast.session.unshare.failed.description": "Wystąpił błąd podczas zatrzymywania udostępniania sesji", + + "toast.session.listFailed.title": "Nie udało się załadować sesji dla {{project}}", + + "toast.update.title": "Dostępna aktualizacja", + "toast.update.description": "Nowa wersja OpenCode ({{version}}) jest teraz dostępna do instalacji.", + "toast.update.action.installRestart": "Zainstaluj i zrestartuj", + "toast.update.action.notYet": "Jeszcze nie", + + "error.page.title": "Coś poszło nie tak", + "error.page.description": "Wystąpił błąd podczas ładowania aplikacji.", + "error.page.details.label": "Szczegóły błędu", + "error.page.action.restart": "Restartuj", + "error.page.action.checking": "Sprawdzanie...", + "error.page.action.checkUpdates": "Sprawdź aktualizacje", + "error.page.action.updateTo": "Zaktualizuj do {{version}}", + "error.page.report.prefix": "Proszę zgłosić ten błąd do zespołu OpenCode", + "error.page.report.discord": "na Discordzie", + "error.page.version": "Wersja: {{version}}", + + "error.dev.rootNotFound": + "Nie znaleziono elementu głównego. Czy zapomniałeś dodać go do swojego index.html? A może atrybut id został błędnie wpisany?", + + "error.globalSync.connectFailed": "Nie można połączyć się z serwerem. Czy serwer działa pod adresem `{{url}}`?", + + "error.chain.unknown": "Nieznany błąd", + "error.chain.causedBy": "Spowodowany przez:", + "error.chain.apiError": "Błąd API", + "error.chain.status": "Status: {{status}}", + "error.chain.retryable": "Można ponowić: {{retryable}}", + "error.chain.responseBody": "Treść odpowiedzi:\n{{body}}", + "error.chain.didYouMean": "Czy miałeś na myśli: {{suggestions}}", + "error.chain.modelNotFound": "Model nie znaleziony: {{provider}}/{{model}}", + "error.chain.checkConfig": "Sprawdź swoją konfigurację (opencode.json) nazwy dostawców/modeli", + "error.chain.mcpFailed": + 'Serwer MCP "{{name}}" nie powiódł się. Uwaga, OpenCode nie obsługuje jeszcze uwierzytelniania MCP.', + "error.chain.providerAuthFailed": "Uwierzytelnianie dostawcy nie powiodło się ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Nie udało się zainicjować dostawcy "{{provider}}". Sprawdź poświadczenia i konfigurację.', + "error.chain.configJsonInvalid": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C)", + "error.chain.configJsonInvalidWithMessage": "Plik konfiguracyjny w {{path}} nie jest poprawnym JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Katalog "{{dir}}" w {{path}} jest nieprawidłowy. Zmień nazwę katalogu na "{{suggestion}}" lub usuń go. To częsta literówka.', + "error.chain.configFrontmatterError": "Nie udało się przetworzyć frontmatter w {{path}}:\n{{message}}", + "error.chain.configInvalid": "Plik konfiguracyjny w {{path}} jest nieprawidłowy", + "error.chain.configInvalidWithMessage": "Plik konfiguracyjny w {{path}} jest nieprawidłowy: {{message}}", + + "notification.permission.title": "Wymagane uprawnienie", + "notification.permission.description": "{{sessionTitle}} w {{projectName}} potrzebuje uprawnienia", + "notification.question.title": "Pytanie", + "notification.question.description": "{{sessionTitle}} w {{projectName}} ma pytanie", + "notification.action.goToSession": "Przejdź do sesji", + + "notification.session.responseReady.title": "Odpowiedź gotowa", + "notification.session.error.title": "Błąd sesji", + "notification.session.error.fallbackDescription": "Wystąpił błąd", + + "home.recentProjects": "Ostatnie projekty", + "home.empty.title": "Brak ostatnich projektów", + "home.empty.description": "Zacznij od otwarcia lokalnego projektu", + + "session.tab.session": "Sesja", + "session.tab.review": "Przegląd", + "session.tab.context": "Kontekst", + "session.review.filesChanged": "Zmieniono {{count}} plików", + "session.review.loadingChanges": "Ładowanie zmian...", + "session.review.empty": "Brak zmian w tej sesji", + "session.messages.renderEarlier": "Renderuj wcześniejsze wiadomości", + "session.messages.loadingEarlier": "Ładowanie wcześniejszych wiadomości...", + "session.messages.loadEarlier": "Załaduj wcześniejsze wiadomości", + "session.messages.loading": "Ładowanie wiadomości...", + "session.messages.jumpToLatest": "Przejdź do najnowszych", + + "session.context.addToContext": "Dodaj {{selection}} do kontekstu", + + "session.new.worktree.main": "Główna gałąź", + "session.new.worktree.mainWithBranch": "Główna gałąź ({{branch}})", + "session.new.worktree.create": "Utwórz nowe drzewo robocze", + "session.new.lastModified": "Ostatnio zmodyfikowano", + + "session.header.search.placeholder": "Szukaj {{project}}", + + "session.share.popover.title": "Opublikuj w sieci", + "session.share.popover.description.shared": + "Ta sesja jest publiczna w sieci. Jest dostępna dla każdego, kto posiada link.", + "session.share.popover.description.unshared": + "Udostępnij sesję publicznie w sieci. Będzie dostępna dla każdego, kto posiada link.", + "session.share.action.share": "Udostępnij", + "session.share.action.publish": "Opublikuj", + "session.share.action.publishing": "Publikowanie...", + "session.share.action.unpublish": "Cofnij publikację", + "session.share.action.unpublishing": "Cofanie publikacji...", + "session.share.action.view": "Widok", + "session.share.copy.copied": "Skopiowano", + "session.share.copy.copyLink": "Kopiuj link", + + "lsp.tooltip.none": "Brak serwerów LSP", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Ładowanie promptu...", + "terminal.loading": "Ładowanie terminala...", + "terminal.title": "Terminal", + "terminal.title.numbered": "Terminal {{number}}", + "terminal.connectionLost.title": "Utracono połączenie", + "terminal.connectionLost.description": + "Połączenie z terminalem zostało przerwane. Może się to zdarzyć przy restarcie serwera.", + + "common.closeTab": "Zamknij kartę", + "common.dismiss": "Odrzuć", + "common.requestFailed": "Żądanie nie powiodło się", + "common.moreOptions": "Więcej opcji", + "common.learnMore": "Dowiedz się więcej", + "common.rename": "Zmień nazwę", + "common.reset": "Resetuj", + "common.delete": "Usuń", + "common.close": "Zamknij", + "common.edit": "Edytuj", + "common.loadMore": "Załaduj więcej", + "common.key.esc": "ESC", + + "sidebar.menu.toggle": "Przełącz menu", + "sidebar.settings": "Ustawienia", + "sidebar.help": "Pomoc", + "sidebar.workspaces.enable": "Włącz przestrzenie robocze", + "sidebar.workspaces.disable": "Wyłącz przestrzenie robocze", + "sidebar.gettingStarted.title": "Pierwsze kroki", + "sidebar.gettingStarted.line1": "OpenCode zawiera darmowe modele, więc możesz zacząć od razu.", + "sidebar.gettingStarted.line2": "Połącz dowolnego dostawcę, aby używać modeli, w tym Claude, GPT, Gemini itp.", + "sidebar.project.recentSessions": "Ostatnie sesje", + "sidebar.project.viewAllSessions": "Zobacz wszystkie sesje", + + "settings.section.desktop": "Pulpit", + "settings.tab.general": "Ogólne", + "settings.tab.shortcuts": "Skróty", + + "settings.general.section.appearance": "Wygląd", + "settings.general.section.notifications": "Powiadomienia systemowe", + "settings.general.section.sounds": "Efekty dźwiękowe", + + "settings.general.row.language.title": "Język", + "settings.general.row.language.description": "Zmień język wyświetlania dla OpenCode", + "settings.general.row.appearance.title": "Wygląd", + "settings.general.row.appearance.description": "Dostosuj wygląd OpenCode na swoim urządzeniu", + "settings.general.row.theme.title": "Motyw", + "settings.general.row.theme.description": "Dostosuj motyw OpenCode.", + "settings.general.row.font.title": "Czcionka", + "settings.general.row.font.description": "Dostosuj czcionkę mono używaną w blokach kodu", + "font.option.ibmPlexMono": "IBM Plex Mono", + "font.option.cascadiaCode": "Cascadia Code", + "font.option.firaCode": "Fira Code", + "font.option.hack": "Hack", + "font.option.inconsolata": "Inconsolata", + "font.option.intelOneMono": "Intel One Mono", + "font.option.jetbrainsMono": "JetBrains Mono", + "font.option.mesloLgs": "Meslo LGS", + "font.option.robotoMono": "Roboto Mono", + "font.option.sourceCodePro": "Source Code Pro", + "font.option.ubuntuMono": "Ubuntu Mono", + "sound.option.alert01": "Alert 01", + "sound.option.alert02": "Alert 02", + "sound.option.alert03": "Alert 03", + "sound.option.alert04": "Alert 04", + "sound.option.alert05": "Alert 05", + "sound.option.alert06": "Alert 06", + "sound.option.alert07": "Alert 07", + "sound.option.alert08": "Alert 08", + "sound.option.alert09": "Alert 09", + "sound.option.alert10": "Alert 10", + "sound.option.bipbop01": "Bip-bop 01", + "sound.option.bipbop02": "Bip-bop 02", + "sound.option.bipbop03": "Bip-bop 03", + "sound.option.bipbop04": "Bip-bop 04", + "sound.option.bipbop05": "Bip-bop 05", + "sound.option.bipbop06": "Bip-bop 06", + "sound.option.bipbop07": "Bip-bop 07", + "sound.option.bipbop08": "Bip-bop 08", + "sound.option.bipbop09": "Bip-bop 09", + "sound.option.bipbop10": "Bip-bop 10", + "sound.option.staplebops01": "Staplebops 01", + "sound.option.staplebops02": "Staplebops 02", + "sound.option.staplebops03": "Staplebops 03", + "sound.option.staplebops04": "Staplebops 04", + "sound.option.staplebops05": "Staplebops 05", + "sound.option.staplebops06": "Staplebops 06", + "sound.option.staplebops07": "Staplebops 07", + "sound.option.nope01": "Nope 01", + "sound.option.nope02": "Nope 02", + "sound.option.nope03": "Nope 03", + "sound.option.nope04": "Nope 04", + "sound.option.nope05": "Nope 05", + "sound.option.nope06": "Nope 06", + "sound.option.nope07": "Nope 07", + "sound.option.nope08": "Nope 08", + "sound.option.nope09": "Nope 09", + "sound.option.nope10": "Nope 10", + "sound.option.nope11": "Nope 11", + "sound.option.nope12": "Nope 12", + "sound.option.yup01": "Yup 01", + "sound.option.yup02": "Yup 02", + "sound.option.yup03": "Yup 03", + "sound.option.yup04": "Yup 04", + "sound.option.yup05": "Yup 05", + "sound.option.yup06": "Yup 06", + + "settings.general.notifications.agent.title": "Agent", + "settings.general.notifications.agent.description": + "Pokaż powiadomienie systemowe, gdy agent zakończy pracę lub wymaga uwagi", + "settings.general.notifications.permissions.title": "Uprawnienia", + "settings.general.notifications.permissions.description": + "Pokaż powiadomienie systemowe, gdy wymagane jest uprawnienie", + "settings.general.notifications.errors.title": "Błędy", + "settings.general.notifications.errors.description": "Pokaż powiadomienie systemowe, gdy wystąpi błąd", + + "settings.general.sounds.agent.title": "Agent", + "settings.general.sounds.agent.description": "Odtwórz dźwięk, gdy agent zakończy pracę lub wymaga uwagi", + "settings.general.sounds.permissions.title": "Uprawnienia", + "settings.general.sounds.permissions.description": "Odtwórz dźwięk, gdy wymagane jest uprawnienie", + "settings.general.sounds.errors.title": "Błędy", + "settings.general.sounds.errors.description": "Odtwórz dźwięk, gdy wystąpi błąd", + + "settings.shortcuts.title": "Skróty klawiszowe", + "settings.shortcuts.reset.button": "Przywróć domyślne", + "settings.shortcuts.reset.toast.title": "Zresetowano skróty", + "settings.shortcuts.reset.toast.description": "Skróty klawiszowe zostały przywrócone do ustawień domyślnych.", + "settings.shortcuts.conflict.title": "Skrót już w użyciu", + "settings.shortcuts.conflict.description": "{{keybind}} jest już przypisany do {{titles}}.", + "settings.shortcuts.unassigned": "Nieprzypisany", + "settings.shortcuts.pressKeys": "Naciśnij klawisze", + "settings.shortcuts.search.placeholder": "Szukaj skrótów", + "settings.shortcuts.search.empty": "Nie znaleziono skrótów", + + "settings.shortcuts.group.general": "Ogólne", + "settings.shortcuts.group.session": "Sesja", + "settings.shortcuts.group.navigation": "Nawigacja", + "settings.shortcuts.group.modelAndAgent": "Model i agent", + "settings.shortcuts.group.terminal": "Terminal", + "settings.shortcuts.group.prompt": "Prompt", + + "settings.providers.title": "Dostawcy", + "settings.providers.description": "Ustawienia dostawców będą tutaj konfigurowalne.", + "settings.models.title": "Modele", + "settings.models.description": "Ustawienia modeli będą tutaj konfigurowalne.", + "settings.agents.title": "Agenci", + "settings.agents.description": "Ustawienia agentów będą tutaj konfigurowalne.", + "settings.commands.title": "Polecenia", + "settings.commands.description": "Ustawienia poleceń będą tutaj konfigurowalne.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "Ustawienia MCP będą tutaj konfigurowalne.", + + "settings.permissions.title": "Uprawnienia", + "settings.permissions.description": "Kontroluj, jakich narzędzi serwer może używać domyślnie.", + "settings.permissions.section.tools": "Narzędzia", + "settings.permissions.toast.updateFailed.title": "Nie udało się zaktualizować uprawnień", + + "settings.permissions.action.allow": "Zezwól", + "settings.permissions.action.ask": "Pytaj", + "settings.permissions.action.deny": "Odmów", + + "settings.permissions.tool.read.title": "Odczyt", + "settings.permissions.tool.read.description": "Odczyt pliku (pasuje do ścieżki pliku)", + "settings.permissions.tool.edit.title": "Edycja", + "settings.permissions.tool.edit.description": "Modyfikacja plików, w tym edycje, zapisy, łatki i multi-edycje", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Dopasowywanie plików za pomocą wzorców glob", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Przeszukiwanie zawartości plików za pomocą wyrażeń regularnych", + "settings.permissions.tool.list.title": "Lista", + "settings.permissions.tool.list.description": "Wyświetlanie listy plików w katalogu", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Uruchamianie poleceń powłoki", + "settings.permissions.tool.task.title": "Zadanie", + "settings.permissions.tool.task.description": "Uruchamianie pod-agentów", + "settings.permissions.tool.skill.title": "Umiejętność", + "settings.permissions.tool.skill.description": "Ładowanie umiejętności według nazwy", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Uruchamianie zapytań serwera językowego", + "settings.permissions.tool.todoread.title": "Odczyt Todo", + "settings.permissions.tool.todoread.description": "Odczyt listy zadań", + "settings.permissions.tool.todowrite.title": "Zapis Todo", + "settings.permissions.tool.todowrite.description": "Aktualizacja listy zadań", + "settings.permissions.tool.webfetch.title": "Pobieranie z sieci", + "settings.permissions.tool.webfetch.description": "Pobieranie zawartości z adresu URL", + "settings.permissions.tool.websearch.title": "Wyszukiwanie w sieci", + "settings.permissions.tool.websearch.description": "Przeszukiwanie sieci", + "settings.permissions.tool.codesearch.title": "Wyszukiwanie kodu", + "settings.permissions.tool.codesearch.description": "Przeszukiwanie kodu w sieci", + "settings.permissions.tool.external_directory.title": "Katalog zewnętrzny", + "settings.permissions.tool.external_directory.description": "Dostęp do plików poza katalogiem projektu", + "settings.permissions.tool.doom_loop.title": "Zapętlenie", + "settings.permissions.tool.doom_loop.description": "Wykrywanie powtarzających się wywołań narzędzi (doom loop)", + + "workspace.new": "Nowa przestrzeń robocza", + "workspace.type.local": "lokalna", + "workspace.type.sandbox": "piaskownica", + "workspace.create.failed.title": "Nie udało się utworzyć przestrzeni roboczej", + "workspace.delete.failed.title": "Nie udało się usunąć przestrzeni roboczej", + "workspace.resetting.title": "Resetowanie przestrzeni roboczej", + "workspace.resetting.description": "To może potrwać minutę.", + "workspace.reset.failed.title": "Nie udało się zresetować przestrzeni roboczej", + "workspace.reset.success.title": "Przestrzeń robocza zresetowana", + "workspace.reset.success.description": "Przestrzeń robocza odpowiada teraz domyślnej gałęzi.", + "workspace.status.checking": "Sprawdzanie niezscalonych zmian...", + "workspace.status.error": "Nie można zweryfikować statusu git.", + "workspace.status.clean": "Nie wykryto niezscalonych zmian.", + "workspace.status.dirty": "Wykryto niezscalone zmiany w tej przestrzeni roboczej.", + "workspace.delete.title": "Usuń przestrzeń roboczą", + "workspace.delete.confirm": 'Usunąć przestrzeń roboczą "{{name}}"?', + "workspace.delete.button": "Usuń przestrzeń roboczą", + "workspace.reset.title": "Resetuj przestrzeń roboczą", + "workspace.reset.confirm": 'Zresetować przestrzeń roboczą "{{name}}"?', + "workspace.reset.button": "Resetuj przestrzeń roboczą", + "workspace.reset.archived.none": "Żadne aktywne sesje nie zostaną zarchiwizowane.", + "workspace.reset.archived.one": "1 sesja zostanie zarchiwizowana.", + "workspace.reset.archived.many": "{{count}} sesji zostanie zarchiwizowanych.", + "workspace.reset.note": "To zresetuje przestrzeń roboczą, aby odpowiadała domyślnej gałęzi.", +} diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index ac976b627b0..92a1ad45b26 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -274,6 +274,7 @@ export const dict = { "language.fr": "法语", "language.ja": "日语", "language.da": "丹麦语", + "language.pl": "波兰语", "toast.language.title": "语言", "toast.language.description": "已切换到{{language}}", diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts new file mode 100644 index 00000000000..e82bc69dce2 --- /dev/null +++ b/packages/ui/src/i18n/pl.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "Zmiany w sesji", + "ui.sessionReview.diffStyle.unified": "Ujednolicony", + "ui.sessionReview.diffStyle.split": "Podzielony", + "ui.sessionReview.expandAll": "Rozwiń wszystko", + "ui.sessionReview.collapseAll": "Zwiń wszystko", + + "ui.sessionTurn.steps.show": "Pokaż kroki", + "ui.sessionTurn.steps.hide": "Ukryj kroki", + "ui.sessionTurn.summary.response": "Odpowiedź", + "ui.sessionTurn.diff.showMore": "Pokaż więcej zmian ({{count}})", + + "ui.sessionTurn.retry.retrying": "ponawianie", + "ui.sessionTurn.retry.inSeconds": "za {{seconds}}s", + + "ui.sessionTurn.status.delegating": "Delegowanie pracy", + "ui.sessionTurn.status.planning": "Planowanie kolejnych kroków", + "ui.sessionTurn.status.gatheringContext": "Zbieranie kontekstu", + "ui.sessionTurn.status.searchingCodebase": "Przeszukiwanie bazy kodu", + "ui.sessionTurn.status.searchingWeb": "Przeszukiwanie sieci", + "ui.sessionTurn.status.makingEdits": "Wprowadzanie zmian", + "ui.sessionTurn.status.runningCommands": "Uruchamianie poleceń", + "ui.sessionTurn.status.thinking": "Myślenie", + "ui.sessionTurn.status.thinkingWithTopic": "Myślenie - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Zbieranie myśli", + "ui.sessionTurn.status.consideringNextSteps": "Rozważanie kolejnych kroków", + + "ui.messagePart.diagnostic.error": "Błąd", + "ui.messagePart.title.edit": "Edycja", + "ui.messagePart.title.write": "Pisanie", + "ui.messagePart.option.typeOwnAnswer": "Wpisz własną odpowiedź", + "ui.messagePart.review.title": "Przejrzyj swoje odpowiedzi", + + "ui.list.loading": "Ładowanie", + "ui.list.empty": "Brak wyników", + "ui.list.emptyWithFilter.prefix": "Brak wyników dla", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Nowa wiadomość", + + "ui.textField.copyToClipboard": "Skopiuj do schowka", + "ui.textField.copied": "Skopiowano", + + "ui.imagePreview.alt": "Podgląd obrazu", + + "ui.tool.read": "Odczyt", + "ui.tool.list": "Lista", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Pobieranie sieciowe", + "ui.tool.shell": "Terminal", + "ui.tool.patch": "Patch", + "ui.tool.todos": "Zadania", + "ui.tool.todos.read": "Czytaj zadania", + "ui.tool.questions": "Pytania", + "ui.tool.agent": "Agent {{type}}", + + "ui.common.file.one": "plik", + "ui.common.file.other": "pliki", + "ui.common.question.one": "pytanie", + "ui.common.question.other": "pytania", + + "ui.common.add": "Dodaj", + "ui.common.cancel": "Anuluj", + "ui.common.confirm": "Potwierdź", + "ui.common.dismiss": "Odrzuć", + "ui.common.next": "Dalej", + "ui.common.submit": "Prześlij", + + "ui.permission.deny": "Odmów", + "ui.permission.allowAlways": "Zezwalaj zawsze", + "ui.permission.allowOnce": "Zezwól raz", + + "ui.message.expand": "Rozwiń wiadomość", + "ui.message.collapse": "Zwiń wiadomość", + "ui.message.copy": "Kopiuj", + "ui.message.copied": "Skopiowano!", + "ui.message.attachment.alt": "załącznik", + + "ui.patch.action.deleted": "Usunięto", + "ui.patch.action.created": "Utworzono", + "ui.patch.action.moved": "Przeniesiono", + "ui.patch.action.patched": "Załatano", + + "ui.question.subtitle.answered": "{{count}} odpowiedzi", + "ui.question.answer.none": "(brak odpowiedzi)", + "ui.question.review.notAnswered": "(bez odpowiedzi)", + "ui.question.multiHint": "(zaznacz wszystkie pasujące)", + "ui.question.custom.placeholder": "Wpisz swoją odpowiedź...", +} From 17a5f75b543b2a6f30fecc87b3c5444e9264d239 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 21 Jan 2026 21:05:26 +0000 Subject: [PATCH 304/426] chore: generate --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 7513dfabab2..653a6361a39 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -25,4 +25,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 29848c61939..ef4f0e485e2 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} From c89f6e7ac61e0dd5404888df87555627efce6087 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 21 Jan 2026 15:09:56 -0600 Subject: [PATCH 305/426] add chat.headers hook, adjust codex and copilot plugins to use it --- packages/opencode/src/plugin/codex.ts | 11 +++++++++-- packages/opencode/src/plugin/copilot.ts | 18 ++++++++++++++++-- packages/opencode/src/session/llm.ts | 23 ++++++++++++++++------- packages/plugin/src/index.ts | 4 ++++ 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/packages/opencode/src/plugin/codex.ts b/packages/opencode/src/plugin/codex.ts index fc172dad939..3e31c6ce4ec 100644 --- a/packages/opencode/src/plugin/codex.ts +++ b/packages/opencode/src/plugin/codex.ts @@ -1,7 +1,8 @@ import type { Hooks, PluginInput } from "@opencode-ai/plugin" import { Log } from "../util/log" -import { OAUTH_DUMMY_KEY } from "../auth" -import { ProviderTransform } from "../provider/transform" +import { Installation } from "../installation" +import { Auth, OAUTH_DUMMY_KEY } from "../auth" +import os from "os" const log = Log.create({ service: "plugin.codex" }) @@ -489,5 +490,11 @@ export async function CodexAuthPlugin(input: PluginInput): Promise { }, ], }, + "chat.headers": async (input, output) => { + if (input.model.providerID !== "openai") return + output.headers.originator = "opencode" + output.headers["User-Agent"] = `opencode/${Installation.VERSION} (${os.platform()} ${os.release()}; ${os.arch()})` + output.headers.session_id = input.sessionID + }, } } diff --git a/packages/opencode/src/plugin/copilot.ts b/packages/opencode/src/plugin/copilot.ts index 932b3fd6aff..bf0f91dcdcc 100644 --- a/packages/opencode/src/plugin/copilot.ts +++ b/packages/opencode/src/plugin/copilot.ts @@ -6,7 +6,6 @@ const CLIENT_ID = "Ov23li8tweQw6odWQebz" // Add a small safety buffer when polling to avoid hitting the server // slightly too early due to clock skew / timer drift. const OAUTH_POLLING_SAFETY_MARGIN_MS = 3000 // 3 seconds - function normalizeDomain(url: string) { return url.replace(/^https?:\/\//, "").replace(/\/$/, "") } @@ -19,6 +18,7 @@ function getUrls(domain: string) { } export async function CopilotAuthPlugin(input: PluginInput): Promise { + const sdk = input.client return { auth: { provider: "github-copilot", @@ -83,11 +83,11 @@ export async function CopilotAuthPlugin(input: PluginInput): Promise { }) const headers: Record = { + "x-initiator": isAgent ? "agent" : "user", ...(init?.headers as Record), "User-Agent": `opencode/${Installation.VERSION}`, Authorization: `Bearer ${info.refresh}`, "Openai-Intent": "conversation-edits", - "X-Initiator": isAgent ? "agent" : "user", } if (isVision) { @@ -265,5 +265,19 @@ export async function CopilotAuthPlugin(input: PluginInput): Promise { }, ], }, + "chat.headers": async (input, output) => { + if (!input.model.providerID.includes("github-copilot")) return + const session = await sdk.session + .get({ + path: { + id: input.sessionID, + }, + throwOnError: true, + }) + .catch(() => undefined) + if (!session || !session.data.parentID) return + // TODO: mark subagent sessions as agent initiated once copilot gives ok + // output.headers["x-initiator"] = "agent" + }, } } diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index 1029b45ea0d..e73f20403f3 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -53,6 +53,7 @@ export namespace LLM { .tag("sessionID", input.sessionID) .tag("small", (input.small ?? false).toString()) .tag("agent", input.agent.name) + .tag("mode", input.agent.mode) l.info("stream", { modelID: input.model.id, providerID: input.model.providerID, @@ -131,6 +132,20 @@ export namespace LLM { }, ) + const { headers } = await Plugin.trigger( + "chat.headers", + { + sessionID: input.sessionID, + agent: input.agent, + model: input.model, + provider, + message: input.user, + }, + { + headers: {}, + }, + ) + const maxOutputTokens = isCodex ? undefined : ProviderTransform.maxOutputTokens( @@ -198,13 +213,6 @@ export namespace LLM { maxOutputTokens, abortSignal: input.abort, headers: { - ...(isCodex - ? { - originator: "opencode", - "User-Agent": `opencode/${Installation.VERSION} (${os.platform()} ${os.release()}; ${os.arch()})`, - session_id: input.sessionID, - } - : undefined), ...(input.model.providerID.startsWith("opencode") ? { "x-opencode-project": Instance.project.id, @@ -218,6 +226,7 @@ export namespace LLM { } : undefined), ...input.model.headers, + ...headers, }, maxRetries: input.retries ?? 0, messages: [ diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts index 36a4657d74c..d02c8bfe53e 100644 --- a/packages/plugin/src/index.ts +++ b/packages/plugin/src/index.ts @@ -172,6 +172,10 @@ export interface Hooks { input: { sessionID: string; agent: string; model: Model; provider: ProviderContext; message: UserMessage }, output: { temperature: number; topP: number; topK: number; options: Record }, ) => Promise + "chat.headers"?: ( + input: { sessionID: string; agent: string; model: Model; provider: ProviderContext; message: UserMessage }, + output: { headers: Record }, + ) => Promise "permission.ask"?: (input: Permission, output: { status: "ask" | "deny" | "allow" }) => Promise "command.execute.before"?: ( input: { command: string; sessionID: string; arguments: string }, From 383c2787f95463e74aefb78e526068249bc2db24 Mon Sep 17 00:00:00 2001 From: Alex Yaroshuk <34632190+alexyaroshuk@users.noreply.github.com> Date: Thu, 22 Jan 2026 05:30:12 +0800 Subject: [PATCH 306/426] feat(i18n): add Russian language support (#9882) --- packages/app/src/context/language.tsx | 12 +- packages/app/src/i18n/da.ts | 1 + packages/app/src/i18n/de.ts | 1 + packages/app/src/i18n/en.ts | 1 + packages/app/src/i18n/es.ts | 1 + packages/app/src/i18n/fr.ts | 1 + packages/app/src/i18n/ja.ts | 1 + packages/app/src/i18n/ko.ts | 1 + packages/app/src/i18n/ru.ts | 642 ++++++++++++++++++++++++++ packages/app/src/i18n/zh.ts | 1 + packages/ui/src/i18n/ru.ts | 90 ++++ 11 files changed, 749 insertions(+), 3 deletions(-) create mode 100644 packages/app/src/i18n/ru.ts create mode 100644 packages/ui/src/i18n/ru.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 7275fb36fce..5fb03afe234 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -11,6 +11,8 @@ import { dict as es } from "@/i18n/es" import { dict as fr } from "@/i18n/fr" import { dict as da } from "@/i18n/da" import { dict as ja } from "@/i18n/ja" +import { dict as pl } from "@/i18n/pl" +import { dict as ru } from "@/i18n/ru" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" @@ -19,15 +21,15 @@ import { dict as uiEs } from "@opencode-ai/ui/i18n/es" import { dict as uiFr } from "@opencode-ai/ui/i18n/fr" import { dict as uiDa } from "@opencode-ai/ui/i18n/da" import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" -import { dict as pl } from "@/i18n/pl" import { dict as uiPl } from "@opencode-ai/ui/i18n/pl" +import { dict as uiRu } from "@opencode-ai/ui/i18n/ru" -export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" +export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja", "pl"] +const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja", "pl", "ru"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -43,6 +45,7 @@ function detectLocale(): Locale { if (language.toLowerCase().startsWith("da")) return "da" if (language.toLowerCase().startsWith("ja")) return "ja" if (language.toLowerCase().startsWith("pl")) return "pl" + if (language.toLowerCase().startsWith("ru")) return "ru" } return "en" @@ -67,6 +70,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (store.locale === "da") return "da" if (store.locale === "ja") return "ja" if (store.locale === "pl") return "pl" + if (store.locale === "ru") return "ru" return "en" }) @@ -86,6 +90,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont if (locale() === "da") return { ...base, ...i18n.flatten({ ...da, ...uiDa }) } if (locale() === "ja") return { ...base, ...i18n.flatten({ ...ja, ...uiJa }) } if (locale() === "pl") return { ...base, ...i18n.flatten({ ...pl, ...uiPl }) } + if (locale() === "ru") return { ...base, ...i18n.flatten({ ...ru, ...uiRu }) } return { ...base, ...i18n.flatten({ ...ko, ...uiKo }) } }) @@ -101,6 +106,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont da: "language.da", ja: "language.ja", pl: "language.pl", + ru: "language.ru", } const label = (value: Locale) => t(labelKey[value]) diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index c7149ec7541..3ec4a5f6fb1 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Fransk", "language.ja": "Japansk", "language.da": "Dansk", + "language.ru": "Russisk", "language.pl": "Polsk", "toast.language.title": "Sprog", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 941390a046a..85bb436e510 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -281,6 +281,7 @@ export const dict = { "language.fr": "Französisch", "language.ja": "Japanisch", "language.da": "Dänisch", + "language.ru": "Russisch", "language.pl": "Polnisch", "toast.language.title": "Sprache", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 2eb69d0409c..ec7d8da2f9e 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -293,6 +293,7 @@ export const dict = { "language.fr": "French", "language.ja": "Japanese", "language.da": "Danish", + "language.ru": "Russian", "language.pl": "Polish", "toast.language.title": "Language", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index 21bd296eb68..d19a22f5c1c 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Francés", "language.ja": "Japonés", "language.da": "Danés", + "language.ru": "Ruso", "language.pl": "Polaco", "toast.language.title": "Idioma", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index b2f78cd8ece..831a23c0775 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -276,6 +276,7 @@ export const dict = { "language.fr": "Français", "language.ja": "Japonais", "language.da": "Danois", + "language.ru": "Russe", "language.pl": "Polonais", "toast.language.title": "Langue", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 1d87037ae63..7237659f2fe 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -274,6 +274,7 @@ export const dict = { "language.fr": "フランス語", "language.ja": "日本語", "language.da": "デンマーク語", + "language.ru": "ロシア語", "language.pl": "ポーランド語", "toast.language.title": "言語", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 64fa629c9cc..4ddeb9aeade 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -278,6 +278,7 @@ export const dict = { "language.fr": "프랑스어", "language.ja": "일본어", "language.da": "덴마크어", + "language.ru": "러시아어", "language.pl": "폴란드어", "toast.language.title": "언어", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts new file mode 100644 index 00000000000..f0d014dec9d --- /dev/null +++ b/packages/app/src/i18n/ru.ts @@ -0,0 +1,642 @@ +export const dict = { + "command.category.suggested": "Предложено", + "command.category.view": "Просмотр", + "command.category.project": "Проект", + "command.category.provider": "Провайдер", + "command.category.server": "Сервер", + "command.category.session": "Сессия", + "command.category.theme": "Тема", + "command.category.language": "Язык", + "command.category.file": "Файл", + "command.category.terminal": "Терминал", + "command.category.model": "Модель", + "command.category.mcp": "MCP", + "command.category.agent": "Агент", + "command.category.permissions": "Разрешения", + "command.category.workspace": "Рабочее пространство", + "command.category.settings": "Настройки", + + "theme.scheme.system": "Системная", + "theme.scheme.light": "Светлая", + "theme.scheme.dark": "Тёмная", + + "command.sidebar.toggle": "Переключить боковую панель", + "command.project.open": "Открыть проект", + "command.provider.connect": "Подключить провайдера", + "command.server.switch": "Переключить сервер", + "command.settings.open": "Открыть настройки", + "command.session.previous": "Предыдущая сессия", + "command.session.next": "Следующая сессия", + "command.session.archive": "Архивировать сессию", + + "command.palette": "Палитра команд", + + "command.theme.cycle": "Цикл тем", + "command.theme.set": "Использовать тему: {{theme}}", + "command.theme.scheme.cycle": "Цикл цветовой схемы", + "command.theme.scheme.set": "Использовать цветовую схему: {{scheme}}", + + "command.language.cycle": "Цикл языков", + "command.language.set": "Использовать язык: {{language}}", + + "command.session.new": "Новая сессия", + "command.file.open": "Открыть файл", + "command.file.open.description": "Поиск файлов и команд", + "command.terminal.toggle": "Переключить терминал", + "command.review.toggle": "Переключить обзор", + "command.terminal.new": "Новый терминал", + "command.terminal.new.description": "Создать новую вкладку терминала", + "command.steps.toggle": "Переключить шаги", + "command.steps.toggle.description": "Показать или скрыть шаги для текущего сообщения", + "command.message.previous": "Предыдущее сообщение", + "command.message.previous.description": "Перейти к предыдущему сообщению пользователя", + "command.message.next": "Следующее сообщение", + "command.message.next.description": "Перейти к следующему сообщению пользователя", + "command.model.choose": "Выбрать модель", + "command.model.choose.description": "Выбрать другую модель", + "command.mcp.toggle": "Переключить MCP", + "command.mcp.toggle.description": "Переключить MCP", + "command.agent.cycle": "Цикл агентов", + "command.agent.cycle.description": "Переключиться к следующему агенту", + "command.agent.cycle.reverse": "Цикл агентов назад", + "command.agent.cycle.reverse.description": "Переключиться к предыдущему агенту", + "command.model.variant.cycle": "Цикл режимов мышления", + "command.model.variant.cycle.description": "Переключиться к следующему уровню усилий", + "command.permissions.autoaccept.enable": "Авто-принятие изменений", + "command.permissions.autoaccept.disable": "Прекратить авто-принятие изменений", + "command.session.undo": "Отменить", + "command.session.undo.description": "Отменить последнее сообщение", + "command.session.redo": "Повторить", + "command.session.redo.description": "Повторить отменённое сообщение", + "command.session.compact": "Сжать сессию", + "command.session.compact.description": "Сократить сессию для уменьшения размера контекста", + "command.session.fork": "Создать ответвление", + "command.session.fork.description": "Создать новую сессию из сообщения", + "command.session.share": "Поделиться сессией", + "command.session.share.description": "Поделиться сессией и скопировать URL в буфер обмена", + "command.session.unshare": "Отменить публикацию", + "command.session.unshare.description": "Прекратить публикацию сессии", + + "palette.search.placeholder": "Поиск файлов и команд", + "palette.empty": "Ничего не найдено", + "palette.group.commands": "Команды", + "palette.group.files": "Файлы", + + "dialog.provider.search.placeholder": "Поиск провайдеров", + "dialog.provider.empty": "Провайдеры не найдены", + "dialog.provider.group.popular": "Популярные", + "dialog.provider.group.other": "Другие", + "dialog.provider.tag.recommended": "Рекомендуемые", + "dialog.provider.anthropic.note": "Подключитесь с помощью Claude Pro/Max или API ключа", + + "dialog.model.select.title": "Выбрать модель", + "dialog.model.search.placeholder": "Поиск моделей", + "dialog.model.empty": "Модели не найдены", + "dialog.model.manage": "Управление моделями", + "dialog.model.manage.description": "Настройте какие модели появляются в выборе модели", + + "dialog.model.unpaid.freeModels.title": "Бесплатные модели от OpenCode", + "dialog.model.unpaid.addMore.title": "Добавьте больше моделей от популярных провайдеров", + + "dialog.provider.viewAll": "Посмотреть всех провайдеров", + + "provider.connect.title": "Подключить {{provider}}", + "provider.connect.title.anthropicProMax": "Войти с помощью Claude Pro/Max", + "provider.connect.selectMethod": "Выберите способ входа для {{provider}}.", + "provider.connect.method.apiKey": "API ключ", + "provider.connect.status.inProgress": "Авторизация...", + "provider.connect.status.waiting": "Ожидание авторизации...", + "provider.connect.status.failed": "Ошибка авторизации: {{error}}", + "provider.connect.apiKey.description": + "Введите ваш API ключ {{provider}} для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + "provider.connect.apiKey.label": "{{provider}} API ключ", + "provider.connect.apiKey.placeholder": "API ключ", + "provider.connect.apiKey.required": "API ключ обязателен", + "provider.connect.opencodeZen.line1": + "OpenCode Zen даёт вам доступ к отобранным надёжным оптимизированным моделям для агентов программирования.", + "provider.connect.opencodeZen.line2": + "С одним API ключом вы получите доступ к таким моделям как Claude, GPT, Gemini, GLM и другим.", + "provider.connect.opencodeZen.visit.prefix": "Посетите ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", + "provider.connect.opencodeZen.visit.suffix": " чтобы получить ваш API ключ.", + "provider.connect.oauth.code.visit.prefix": "Посетите ", + "provider.connect.oauth.code.visit.link": "эту ссылку", + "provider.connect.oauth.code.visit.suffix": + " чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + "provider.connect.oauth.code.label": "{{method}} код авторизации", + "provider.connect.oauth.code.placeholder": "Код авторизации", + "provider.connect.oauth.code.required": "Код авторизации обязателен", + "provider.connect.oauth.code.invalid": "Неверный код авторизации", + "provider.connect.oauth.auto.visit.prefix": "Посетите ", + "provider.connect.oauth.auto.visit.link": "эту ссылку", + "provider.connect.oauth.auto.visit.suffix": + " и введите код ниже для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + "provider.connect.oauth.auto.confirmationCode": "Код подтверждения", + "provider.connect.toast.connected.title": "{{provider}} подключён", + "provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.", + + "model.tag.free": "Бесплатно", + "model.tag.latest": "Последняя", + "model.provider.anthropic": "Anthropic", + "model.provider.openai": "OpenAI", + "model.provider.google": "Google", + "model.provider.xai": "xAI", + "model.provider.meta": "Meta", + "model.input.text": "текст", + "model.input.image": "изображение", + "model.input.audio": "аудио", + "model.input.video": "видео", + "model.input.pdf": "pdf", + "model.tooltip.allows": "Разрешено: {{inputs}}", + "model.tooltip.reasoning.allowed": "Разрешает рассуждение", + "model.tooltip.reasoning.none": "Без рассуждения", + "model.tooltip.context": "Лимит контекста {{limit}}", + + "common.search.placeholder": "Поиск", + "common.loading": "Загрузка", + "common.loading.ellipsis": "...", + "common.cancel": "Отмена", + "common.submit": "Отправить", + "common.save": "Сохранить", + "common.saving": "Сохранение...", + "common.default": "По умолчанию", + "common.attachment": "вложение", + + "prompt.placeholder.shell": "Введите команду оболочки...", + "prompt.placeholder.normal": 'Спросите что угодно... "{{example}}"', + "prompt.mode.shell": "Оболочка", + "prompt.mode.shell.exit": "esc для выхода", + + "prompt.example.1": "Исправить TODO в коде", + "prompt.example.2": "Какой технологический стек этого проекта?", + "prompt.example.3": "Исправить сломанные тесты", + "prompt.example.4": "Объясни как работает аутентификация", + "prompt.example.5": "Найти и исправить уязвимости безопасности", + "prompt.example.6": "Добавить юнит-тесты для сервиса пользователя", + "prompt.example.7": "Рефакторить эту функцию для лучшей читаемости", + "prompt.example.8": "Что означает эта ошибка?", + "prompt.example.9": "Помоги мне отладить эту проблему", + "prompt.example.10": "Сгенерировать документацию API", + "prompt.example.11": "Оптимизировать запросы к базе данных", + "prompt.example.12": "Добавить валидацию ввода", + "prompt.example.13": "Создать новый компонент для...", + "prompt.example.14": "Как развернуть этот проект?", + "prompt.example.15": "Проверь мой код на лучшие практики", + "prompt.example.16": "Добавить обработку ошибок в эту функцию", + "prompt.example.17": "Объясни этот паттерн regex", + "prompt.example.18": "Конвертировать это в TypeScript", + "prompt.example.19": "Добавить логирование по всему проекту", + "prompt.example.20": "Какие зависимости устарели?", + "prompt.example.21": "Помоги написать скрипт миграции", + "prompt.example.22": "Реализовать кэширование для этой конечной точки", + "prompt.example.23": "Добавить пагинацию в этот список", + "prompt.example.24": "Создать CLI команду для...", + "prompt.example.25": "Как работают переменные окружения здесь?", + + "prompt.popover.emptyResults": "Нет совпадений", + "prompt.popover.emptyCommands": "Нет совпадающих команд", + "prompt.dropzone.label": "Перетащите изображения или PDF сюда", + "prompt.slash.badge.custom": "своё", + "prompt.context.active": "активно", + "prompt.context.includeActiveFile": "Включить активный файл", + "prompt.action.attachFile": "Прикрепить файл", + "prompt.action.send": "Отправить", + "prompt.action.stop": "Остановить", + + "prompt.toast.pasteUnsupported.title": "Неподдерживаемая вставка", + "prompt.toast.pasteUnsupported.description": "Сюда можно вставлять только изображения или PDF.", + "prompt.toast.modelAgentRequired.title": "Выберите агента и модель", + "prompt.toast.modelAgentRequired.description": "Выберите агента и модель перед отправкой запроса.", + "prompt.toast.worktreeCreateFailed.title": "Не удалось создать worktree", + "prompt.toast.sessionCreateFailed.title": "Не удалось создать сессию", + "prompt.toast.shellSendFailed.title": "Не удалось отправить команду оболочки", + "prompt.toast.commandSendFailed.title": "Не удалось отправить команду", + "prompt.toast.promptSendFailed.title": "Не удалось отправить запрос", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "{{enabled}} из {{total}} включено", + "dialog.mcp.empty": "MCP не настроены", + + "mcp.status.connected": "подключено", + "mcp.status.failed": "ошибка", + "mcp.status.needs_auth": "требуется авторизация", + "mcp.status.disabled": "отключено", + + "dialog.fork.empty": "Нет сообщений для ответвления", + + "dialog.directory.search.placeholder": "Поиск папок", + "dialog.directory.empty": "Папки не найдены", + + "dialog.server.title": "Серверы", + "dialog.server.description": "Переключите сервер OpenCode к которому подключается приложение.", + "dialog.server.search.placeholder": "Поиск серверов", + "dialog.server.empty": "Серверов пока нет", + "dialog.server.add.title": "Добавить сервер", + "dialog.server.add.url": "URL сервера", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "Не удалось подключиться к серверу", + "dialog.server.add.checking": "Проверка...", + "dialog.server.add.button": "Добавить", + "dialog.server.default.title": "Сервер по умолчанию", + "dialog.server.default.description": + "Подключаться к этому серверу при запуске приложения вместо запуска локального сервера. Требуется перезапуск.", + "dialog.server.default.none": "Сервер не выбран", + "dialog.server.default.set": "Установить текущий сервер по умолчанию", + "dialog.server.default.clear": "Очистить", + + "dialog.project.edit.title": "Редактировать проект", + "dialog.project.edit.name": "Название", + "dialog.project.edit.icon": "Иконка", + "dialog.project.edit.icon.alt": "Иконка проекта", + "dialog.project.edit.icon.hint": "Нажмите или перетащите изображение", + "dialog.project.edit.icon.recommended": "Рекомендуется: 128x128px", + "dialog.project.edit.color": "Цвет", + + "context.breakdown.title": "Разбивка контекста", + "context.breakdown.note": + 'Приблизительная разбивка входных токенов. "Другое" включает определения инструментов и накладные расходы.', + "context.breakdown.system": "Система", + "context.breakdown.user": "Пользователь", + "context.breakdown.assistant": "Ассистент", + "context.breakdown.tool": "Вызовы инструментов", + "context.breakdown.other": "Другое", + + "context.systemPrompt.title": "Системный промпт", + "context.rawMessages.title": "Исходные сообщения", + + "context.stats.session": "Сессия", + "context.stats.messages": "Сообщения", + "context.stats.provider": "Провайдер", + "context.stats.model": "Модель", + "context.stats.limit": "Лимит контекста", + "context.stats.totalTokens": "Всего токенов", + "context.stats.usage": "Использование", + "context.stats.inputTokens": "Входные токены", + "context.stats.outputTokens": "Выходные токены", + "context.stats.reasoningTokens": "Токены рассуждения", + "context.stats.cacheTokens": "Токены кэша (чтение/запись)", + "context.stats.userMessages": "Сообщения пользователя", + "context.stats.assistantMessages": "Сообщения ассистента", + "context.stats.totalCost": "Общая стоимость", + "context.stats.sessionCreated": "Сессия создана", + "context.stats.lastActivity": "Последняя активность", + + "context.usage.tokens": "Токены", + "context.usage.usage": "Использование", + "context.usage.cost": "Стоимость", + "context.usage.clickToView": "Нажмите для просмотра контекста", + + "language.en": "Английский", + "language.zh": "Китайский", + "language.ko": "Корейский", + "language.de": "Немецкий", + "language.es": "Испанский", + "language.fr": "Французский", + "language.ja": "Японский", + "language.da": "Датский", + "language.ru": "Русский", + + "toast.language.title": "Язык", + "toast.language.description": "Переключено на {{language}}", + + "toast.theme.title": "Тема переключена", + "toast.scheme.title": "Цветовая схема", + + "toast.permissions.autoaccept.on.title": "Авто-принятие изменений", + "toast.permissions.autoaccept.on.description": "Разрешения на редактирование и запись будут автоматически одобрены", + "toast.permissions.autoaccept.off.title": "Авто-принятие остановлено", + "toast.permissions.autoaccept.off.description": "Редактирование и запись потребуют подтверждения", + + "toast.model.none.title": "Модель не выбрана", + "toast.model.none.description": "Подключите провайдера для суммаризации сессии", + + "toast.file.loadFailed.title": "Не удалось загрузить файл", + + "toast.session.share.copyFailed.title": "Не удалось скопировать URL в буфер обмена", + "toast.session.share.success.title": "Сессия опубликована", + "toast.session.share.success.description": "URL скопирован в буфер обмена!", + "toast.session.share.failed.title": "Не удалось опубликовать сессию", + "toast.session.share.failed.description": "Произошла ошибка при публикации сессии", + + "toast.session.unshare.success.title": "Публикация отменена", + "toast.session.unshare.success.description": "Публикация успешно отменена!", + "toast.session.unshare.failed.title": "Не удалось отменить публикацию", + "toast.session.unshare.failed.description": "Произошла ошибка при отмене публикации", + + "toast.session.listFailed.title": "Не удалось загрузить сессии для {{project}}", + + "toast.update.title": "Доступно обновление", + "toast.update.description": "Новая версия OpenCode ({{version}}) доступна для установки.", + "toast.update.action.installRestart": "Установить и перезапустить", + "toast.update.action.notYet": "Пока нет", + + "error.page.title": "Что-то пошло не так", + "error.page.description": "Произошла ошибка при загрузке приложения.", + "error.page.details.label": "Детали ошибки", + "error.page.action.restart": "Перезапустить", + "error.page.action.checking": "Проверка...", + "error.page.action.checkUpdates": "Проверить обновления", + "error.page.action.updateTo": "Обновить до {{version}}", + "error.page.report.prefix": "Пожалуйста, сообщите об этой ошибке команде OpenCode", + "error.page.report.discord": "в Discord", + "error.page.version": "Версия: {{version}}", + + "error.dev.rootNotFound": + "Корневой элемент не найден. Вы забыли добавить его в index.html? Или, может быть, атрибут id был написан неправильно?", + + "error.globalSync.connectFailed": "Не удалось подключиться к серверу. Запущен ли сервер по адресу `{{url}}`?", + + "error.chain.unknown": "Неизвестная ошибка", + "error.chain.causedBy": "Причина:", + "error.chain.apiError": "Ошибка API", + "error.chain.status": "Статус: {{status}}", + "error.chain.retryable": "Повторная попытка: {{retryable}}", + "error.chain.responseBody": "Тело ответа:\n{{body}}", + "error.chain.didYouMean": "Возможно, вы имели в виду: {{suggestions}}", + "error.chain.modelNotFound": "Модель не найдена: {{provider}}/{{model}}", + "error.chain.checkConfig": "Проверьте названия провайдера/модели в конфиге (opencode.json)", + "error.chain.mcpFailed": + 'MCP сервер "{{name}}" завершился с ошибкой. Обратите внимание, что OpenCode пока не поддерживает MCP авторизацию.', + "error.chain.providerAuthFailed": "Ошибка аутентификации провайдера ({{provider}}): {{message}}", + "error.chain.providerInitFailed": + 'Не удалось инициализировать провайдера "{{provider}}". Проверьте учётные данные и конфигурацию.', + "error.chain.configJsonInvalid": "Конфигурационный файл по адресу {{path}} не является валидным JSON(C)", + "error.chain.configJsonInvalidWithMessage": + "Конфигурационный файл по адресу {{path}} не является валидным JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + 'Папка "{{dir}}" в {{path}} невалидна. Переименуйте папку в "{{suggestion}}" или удалите её. Это распространённая опечатка.', + "error.chain.configFrontmatterError": "Не удалось разобрать frontmatter в {{path}}:\n{{message}}", + "error.chain.configInvalid": "Конфигурационный файл по адресу {{path}} невалиден", + "error.chain.configInvalidWithMessage": "Конфигурационный файл по адресу {{path}} невалиден: {{message}}", + + "notification.permission.title": "Требуется разрешение", + "notification.permission.description": "{{sessionTitle}} в {{projectName}} требуется разрешение", + "notification.question.title": "Вопрос", + "notification.question.description": "У {{sessionTitle}} в {{projectName}} есть вопрос", + "notification.action.goToSession": "Перейти к сессии", + + "notification.session.responseReady.title": "Ответ готов", + "notification.session.error.title": "Ошибка сессии", + "notification.session.error.fallbackDescription": "Произошла ошибка", + + "home.recentProjects": "Недавние проекты", + "home.empty.title": "Нет недавних проектов", + "home.empty.description": "Начните с открытия локального проекта", + + "session.tab.session": "Сессия", + "session.tab.review": "Обзор", + "session.tab.context": "Контекст", + "session.review.filesChanged": "{{count}} файлов изменено", + "session.review.loadingChanges": "Загрузка изменений...", + "session.review.empty": "Изменений в этой сессии пока нет", + "session.messages.renderEarlier": "Показать предыдущие сообщения", + "session.messages.loadingEarlier": "Загрузка предыдущих сообщений...", + "session.messages.loadEarlier": "Загрузить предыдущие сообщения", + "session.messages.loading": "Загрузка сообщений...", + "session.messages.jumpToLatest": "Перейти к последнему", + + "session.context.addToContext": "Добавить {{selection}} в контекст", + + "session.new.worktree.main": "Основная ветка", + "session.new.worktree.mainWithBranch": "Основная ветка ({{branch}})", + "session.new.worktree.create": "Создать новый worktree", + "session.new.lastModified": "Последнее изменение", + + "session.header.search.placeholder": "Поиск {{project}}", + + "session.share.popover.title": "Опубликовать в интернете", + "session.share.popover.description.shared": + "Эта сессия общедоступна. Доступ к ней может получить любой, у кого есть ссылка.", + "session.share.popover.description.unshared": + "Опубликуйте сессию в интернете. Доступ к ней сможет получить любой, у кого есть ссылка.", + "session.share.action.share": "Поделиться", + "session.share.action.publish": "Опубликовать", + "session.share.action.publishing": "Публикация...", + "session.share.action.unpublish": "Отменить публикацию", + "session.share.action.unpublishing": "Отмена публикации...", + "session.share.action.view": "Посмотреть", + "session.share.copy.copied": "Скопировано", + "session.share.copy.copyLink": "Копировать ссылку", + + "lsp.tooltip.none": "Нет LSP серверов", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "Загрузка запроса...", + "terminal.loading": "Загрузка терминала...", + "terminal.title": "Терминал", + "terminal.title.numbered": "Терминал {{number}}", + "terminal.connectionLost.title": "Соединение потеряно", + "terminal.connectionLost.description": + "Соединение с терминалом прервано. Это может произойти при перезапуске сервера.", + + "common.closeTab": "Закрыть вкладку", + "common.dismiss": "Закрыть", + "common.requestFailed": "Запрос не выполнен", + "common.moreOptions": "Дополнительные опции", + "common.learnMore": "Подробнее", + "common.rename": "Переименовать", + "common.reset": "Сбросить", + "common.delete": "Удалить", + "common.close": "Закрыть", + "common.edit": "Редактировать", + "common.loadMore": "Загрузить ещё", + "common.key.esc": "ESC", + + "sidebar.menu.toggle": "Переключить меню", + "sidebar.settings": "Настройки", + "sidebar.help": "Помощь", + "sidebar.workspaces.enable": "Включить рабочие пространства", + "sidebar.workspaces.disable": "Отключить рабочие пространства", + "sidebar.gettingStarted.title": "Начало работы", + "sidebar.gettingStarted.line1": "OpenCode включает бесплатные модели, чтобы вы могли начать сразу.", + "sidebar.gettingStarted.line2": + "Подключите любого провайдера для использования моделей, включая Claude, GPT, Gemini и др.", + "sidebar.project.recentSessions": "Недавние сессии", + "sidebar.project.viewAllSessions": "Посмотреть все сессии", + + "settings.section.desktop": "Приложение", + "settings.tab.general": "Основные", + "settings.tab.shortcuts": "Горячие клавиши", + + "settings.general.section.appearance": "Внешний вид", + "settings.general.section.notifications": "Системные уведомления", + "settings.general.section.sounds": "Звуковые эффекты", + + "settings.general.row.language.title": "Язык", + "settings.general.row.language.description": "Изменить язык отображения OpenCode", + "settings.general.row.appearance.title": "Внешний вид", + "settings.general.row.appearance.description": "Настройте как OpenCode выглядит на вашем устройстве", + "settings.general.row.theme.title": "Тема", + "settings.general.row.theme.description": "Настройте оформление OpenCode.", + "settings.general.row.font.title": "Шрифт", + "settings.general.row.font.description": "Настройте моноширинный шрифт для блоков кода", + "font.option.ibmPlexMono": "IBM Plex Mono", + "font.option.cascadiaCode": "Cascadia Code", + "font.option.firaCode": "Fira Code", + "font.option.hack": "Hack", + "font.option.inconsolata": "Inconsolata", + "font.option.intelOneMono": "Intel One Mono", + "font.option.jetbrainsMono": "JetBrains Mono", + "font.option.mesloLgs": "Meslo LGS", + "font.option.robotoMono": "Roboto Mono", + "font.option.sourceCodePro": "Source Code Pro", + "font.option.ubuntuMono": "Ubuntu Mono", + "sound.option.alert01": "Alert 01", + "sound.option.alert02": "Alert 02", + "sound.option.alert03": "Alert 03", + "sound.option.alert04": "Alert 04", + "sound.option.alert05": "Alert 05", + "sound.option.alert06": "Alert 06", + "sound.option.alert07": "Alert 07", + "sound.option.alert08": "Alert 08", + "sound.option.alert09": "Alert 09", + "sound.option.alert10": "Alert 10", + "sound.option.bipbop01": "Bip-bop 01", + "sound.option.bipbop02": "Bip-bop 02", + "sound.option.bipbop03": "Bip-bop 03", + "sound.option.bipbop04": "Bip-bop 04", + "sound.option.bipbop05": "Bip-bop 05", + "sound.option.bipbop06": "Bip-bop 06", + "sound.option.bipbop07": "Bip-bop 07", + "sound.option.bipbop08": "Bip-bop 08", + "sound.option.bipbop09": "Bip-bop 09", + "sound.option.bipbop10": "Bip-bop 10", + "sound.option.staplebops01": "Staplebops 01", + "sound.option.staplebops02": "Staplebops 02", + "sound.option.staplebops03": "Staplebops 03", + "sound.option.staplebops04": "Staplebops 04", + "sound.option.staplebops05": "Staplebops 05", + "sound.option.staplebops06": "Staplebops 06", + "sound.option.staplebops07": "Staplebops 07", + "sound.option.nope01": "Nope 01", + "sound.option.nope02": "Nope 02", + "sound.option.nope03": "Nope 03", + "sound.option.nope04": "Nope 04", + "sound.option.nope05": "Nope 05", + "sound.option.nope06": "Nope 06", + "sound.option.nope07": "Nope 07", + "sound.option.nope08": "Nope 08", + "sound.option.nope09": "Nope 09", + "sound.option.nope10": "Nope 10", + "sound.option.nope11": "Nope 11", + "sound.option.nope12": "Nope 12", + "sound.option.yup01": "Yup 01", + "sound.option.yup02": "Yup 02", + "sound.option.yup03": "Yup 03", + "sound.option.yup04": "Yup 04", + "sound.option.yup05": "Yup 05", + "sound.option.yup06": "Yup 06", + + "settings.general.notifications.agent.title": "Агент", + "settings.general.notifications.agent.description": + "Показывать системное уведомление когда агент завершён или требует внимания", + "settings.general.notifications.permissions.title": "Разрешения", + "settings.general.notifications.permissions.description": + "Показывать системное уведомление когда требуется разрешение", + "settings.general.notifications.errors.title": "Ошибки", + "settings.general.notifications.errors.description": "Показывать системное уведомление когда происходит ошибка", + + "settings.general.sounds.agent.title": "Агент", + "settings.general.sounds.agent.description": "Воспроизводить звук когда агент завершён или требует внимания", + "settings.general.sounds.permissions.title": "Разрешения", + "settings.general.sounds.permissions.description": "Воспроизводить звук когда требуется разрешение", + "settings.general.sounds.errors.title": "Ошибки", + "settings.general.sounds.errors.description": "Воспроизводить звук когда происходит ошибка", + + "settings.shortcuts.title": "Горячие клавиши", + "settings.shortcuts.reset.button": "Сбросить к умолчаниям", + "settings.shortcuts.reset.toast.title": "Горячие клавиши сброшены", + "settings.shortcuts.reset.toast.description": "Горячие клавиши были сброшены к значениям по умолчанию.", + "settings.shortcuts.conflict.title": "Сочетание уже используется", + "settings.shortcuts.conflict.description": "{{keybind}} уже назначено для {{titles}}.", + "settings.shortcuts.unassigned": "Не назначено", + "settings.shortcuts.pressKeys": "Нажмите клавиши", + "settings.shortcuts.search.placeholder": "Поиск горячих клавиш", + "settings.shortcuts.search.empty": "Горячие клавиши не найдены", + + "settings.shortcuts.group.general": "Основные", + "settings.shortcuts.group.session": "Сессия", + "settings.shortcuts.group.navigation": "Навигация", + "settings.shortcuts.group.modelAndAgent": "Модель и агент", + "settings.shortcuts.group.terminal": "Терминал", + "settings.shortcuts.group.prompt": "Запрос", + + "settings.providers.title": "Провайдеры", + "settings.providers.description": "Настройки провайдеров будут доступны здесь.", + "settings.models.title": "Модели", + "settings.models.description": "Настройки моделей будут доступны здесь.", + "settings.agents.title": "Агенты", + "settings.agents.description": "Настройки агентов будут доступны здесь.", + "settings.commands.title": "Команды", + "settings.commands.description": "Настройки команд будут доступны здесь.", + "settings.mcp.title": "MCP", + "settings.mcp.description": "Настройки MCP будут доступны здесь.", + + "settings.permissions.title": "Разрешения", + "settings.permissions.description": "Контролируйте какие инструменты сервер может использовать по умолчанию.", + "settings.permissions.section.tools": "Инструменты", + "settings.permissions.toast.updateFailed.title": "Не удалось обновить разрешения", + + "settings.permissions.action.allow": "Разрешить", + "settings.permissions.action.ask": "Спрашивать", + "settings.permissions.action.deny": "Запретить", + + "settings.permissions.tool.read.title": "Чтение", + "settings.permissions.tool.read.description": "Чтение файла (по совпадению пути)", + "settings.permissions.tool.edit.title": "Редактирование", + "settings.permissions.tool.edit.description": + "Изменение файлов, включая редактирование, запись, патчи и мульти-редактирование", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "Сопоставление файлов по паттернам glob", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "Поиск по содержимому файлов с использованием регулярных выражений", + "settings.permissions.tool.list.title": "Список", + "settings.permissions.tool.list.description": "Список файлов в директории", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "Выполнение команд оболочки", + "settings.permissions.tool.task.title": "Task", + "settings.permissions.tool.task.description": "Запуск под-агентов", + "settings.permissions.tool.skill.title": "Skill", + "settings.permissions.tool.skill.description": "Загрузить навык по имени", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "Выполнение запросов к языковому серверу", + "settings.permissions.tool.todoread.title": "Чтение списка задач", + "settings.permissions.tool.todoread.description": "Чтение списка задач", + "settings.permissions.tool.todowrite.title": "Запись списка задач", + "settings.permissions.tool.todowrite.description": "Обновление списка задач", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "Получить содержимое по URL", + "settings.permissions.tool.websearch.title": "Web Search", + "settings.permissions.tool.websearch.description": "Поиск в интернете", + "settings.permissions.tool.codesearch.title": "Поиск кода", + "settings.permissions.tool.codesearch.description": "Поиск кода в интернете", + "settings.permissions.tool.external_directory.title": "Внешняя директория", + "settings.permissions.tool.external_directory.description": "Доступ к файлам вне директории проекта", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "Обнаружение повторных вызовов инструментов с одинаковым вводом", + + "workspace.new": "Новое рабочее пространство", + "workspace.type.local": "локальное", + "workspace.type.sandbox": "песочница", + "workspace.create.failed.title": "Не удалось создать рабочее пространство", + "workspace.delete.failed.title": "Не удалось удалить рабочее пространство", + "workspace.resetting.title": "Сброс рабочего пространства", + "workspace.resetting.description": "Это может занять минуту.", + "workspace.reset.failed.title": "Не удалось сбросить рабочее пространство", + "workspace.reset.success.title": "Рабочее пространство сброшено", + "workspace.reset.success.description": "Рабочее пространство теперь соответствует ветке по умолчанию.", + "workspace.status.checking": "Проверка наличия неслитых изменений...", + "workspace.status.error": "Не удалось проверить статус git.", + "workspace.status.clean": "Неслитые изменения не обнаружены.", + "workspace.status.dirty": "Обнаружены неслитые изменения в этом рабочем пространстве.", + "workspace.delete.title": "Удалить рабочее пространство", + "workspace.delete.confirm": 'Удалить рабочее пространство "{{name}}"?', + "workspace.delete.button": "Удалить рабочее пространство", + "workspace.reset.title": "Сбросить рабочее пространство", + "workspace.reset.confirm": 'Сбросить рабочее пространство "{{name}}"?', + "workspace.reset.button": "Сбросить рабочее пространство", + "workspace.reset.archived.none": "Никакие активные сессии не будут архивированы.", + "workspace.reset.archived.one": "1 сессия будет архивирована.", + "workspace.reset.archived.many": "{{count}} сессий будет архивировано.", + "workspace.reset.note": "Рабочее пространство будет сброшено в соответствие с веткой по умолчанию.", +} diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 92a1ad45b26..34a686dfdd8 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -274,6 +274,7 @@ export const dict = { "language.fr": "法语", "language.ja": "日语", "language.da": "丹麦语", + "language.ru": "俄语", "language.pl": "波兰语", "toast.language.title": "语言", diff --git a/packages/ui/src/i18n/ru.ts b/packages/ui/src/i18n/ru.ts new file mode 100644 index 00000000000..111d36f9e4e --- /dev/null +++ b/packages/ui/src/i18n/ru.ts @@ -0,0 +1,90 @@ +export const dict = { + "ui.sessionReview.title": "Изменения сессии", + "ui.sessionReview.diffStyle.unified": "Объединённый", + "ui.sessionReview.diffStyle.split": "Разделённый", + "ui.sessionReview.expandAll": "Развернуть всё", + "ui.sessionReview.collapseAll": "Свернуть всё", + + "ui.sessionTurn.steps.show": "Показать шаги", + "ui.sessionTurn.steps.hide": "Скрыть шаги", + "ui.sessionTurn.summary.response": "Ответ", + "ui.sessionTurn.diff.showMore": "Показать ещё изменений ({{count}})", + + "ui.sessionTurn.retry.retrying": "повтор", + "ui.sessionTurn.retry.inSeconds": "через {{seconds}}с", + + "ui.sessionTurn.status.delegating": "Делегирование работы", + "ui.sessionTurn.status.planning": "Планирование следующих шагов", + "ui.sessionTurn.status.gatheringContext": "Сбор контекста", + "ui.sessionTurn.status.searchingCodebase": "Поиск в кодовой базе", + "ui.sessionTurn.status.searchingWeb": "Поиск в интернете", + "ui.sessionTurn.status.makingEdits": "Внесение изменений", + "ui.sessionTurn.status.runningCommands": "Выполнение команд", + "ui.sessionTurn.status.thinking": "Размышление", + "ui.sessionTurn.status.thinkingWithTopic": "Размышление - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "Сбор мыслей", + "ui.sessionTurn.status.consideringNextSteps": "Рассмотрение следующих шагов", + + "ui.messagePart.diagnostic.error": "Ошибка", + "ui.messagePart.title.edit": "Редактировать", + "ui.messagePart.title.write": "Написать", + "ui.messagePart.option.typeOwnAnswer": "Введите свой ответ", + "ui.messagePart.review.title": "Проверьте ваши ответы", + + "ui.list.loading": "Загрузка", + "ui.list.empty": "Нет результатов", + "ui.list.emptyWithFilter.prefix": "Нет результатов для", + "ui.list.emptyWithFilter.suffix": "", + + "ui.messageNav.newMessage": "Новое сообщение", + + "ui.textField.copyToClipboard": "Копировать в буфер обмена", + "ui.textField.copied": "Скопировано", + + "ui.imagePreview.alt": "Предпросмотр изображения", + + "ui.tool.read": "Чтение", + "ui.tool.list": "Список", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webfetch", + "ui.tool.shell": "Оболочка", + "ui.tool.patch": "Патч", + "ui.tool.todos": "Задачи", + "ui.tool.todos.read": "Читать задачи", + "ui.tool.questions": "Вопросы", + "ui.tool.agent": "Агент {{type}}", + + "ui.common.file.one": "файл", + "ui.common.file.other": "файлов", + "ui.common.question.one": "вопрос", + "ui.common.question.other": "вопросов", + + "ui.common.add": "Добавить", + "ui.common.cancel": "Отмена", + "ui.common.confirm": "Подтвердить", + "ui.common.dismiss": "Закрыть", + "ui.common.next": "Далее", + "ui.common.submit": "Отправить", + + "ui.permission.deny": "Запретить", + "ui.permission.allowAlways": "Разрешить всегда", + "ui.permission.allowOnce": "Разрешить один раз", + + "ui.message.expand": "Развернуть сообщение", + "ui.message.collapse": "Свернуть сообщение", + "ui.message.copy": "Копировать", + "ui.message.copied": "Скопировано!", + "ui.message.attachment.alt": "вложение", + + "ui.patch.action.deleted": "Удалено", + "ui.patch.action.created": "Создано", + "ui.patch.action.moved": "Перемещено", + "ui.patch.action.patched": "Изменено", + + "ui.question.subtitle.answered": "{{count}} отвечено", + "ui.question.answer.none": "(нет ответа)", + "ui.question.review.notAnswered": "(не отвечено)", + "ui.question.multiHint": "(выберите все подходящие)", + "ui.question.custom.placeholder": "Введите ваш ответ...", +} From 23daac21703f9d67a62b7438e6dd1e5fed5ca559 Mon Sep 17 00:00:00 2001 From: Alex Yaroshuk <34632190+alexyaroshuk@users.noreply.github.com> Date: Thu, 22 Jan 2026 05:33:26 +0800 Subject: [PATCH 307/426] feat(i18n): add Traditional Chinese language support & rename 'Chinese' to 'Chinese (Simplified)' (#9887) --- packages/app/src/context/language.tsx | 14 +- packages/app/src/i18n/da.ts | 3 +- packages/app/src/i18n/de.ts | 3 +- packages/app/src/i18n/en.ts | 3 +- packages/app/src/i18n/es.ts | 3 +- packages/app/src/i18n/fr.ts | 3 +- packages/app/src/i18n/ja.ts | 3 +- packages/app/src/i18n/ko.ts | 3 +- packages/app/src/i18n/zh.ts | 3 +- packages/app/src/i18n/zht.ts | 547 ++++++++++++++++++++++++++ packages/ui/src/i18n/zht.ts | 94 +++++ 11 files changed, 668 insertions(+), 11 deletions(-) create mode 100644 packages/app/src/i18n/zht.ts create mode 100644 packages/ui/src/i18n/zht.ts diff --git a/packages/app/src/context/language.tsx b/packages/app/src/context/language.tsx index 5fb03afe234..e3cf3c50d17 100644 --- a/packages/app/src/context/language.tsx +++ b/packages/app/src/context/language.tsx @@ -5,6 +5,7 @@ import { createSimpleContext } from "@opencode-ai/ui/context" import { Persist, persisted } from "@/utils/persist" import { dict as en } from "@/i18n/en" import { dict as zh } from "@/i18n/zh" +import { dict as zht } from "@/i18n/zht" import { dict as ko } from "@/i18n/ko" import { dict as de } from "@/i18n/de" import { dict as es } from "@/i18n/es" @@ -15,6 +16,7 @@ import { dict as pl } from "@/i18n/pl" import { dict as ru } from "@/i18n/ru" import { dict as uiEn } from "@opencode-ai/ui/i18n/en" import { dict as uiZh } from "@opencode-ai/ui/i18n/zh" +import { dict as uiZht } from "@opencode-ai/ui/i18n/zht" import { dict as uiKo } from "@opencode-ai/ui/i18n/ko" import { dict as uiDe } from "@opencode-ai/ui/i18n/de" import { dict as uiEs } from "@opencode-ai/ui/i18n/es" @@ -24,12 +26,12 @@ import { dict as uiJa } from "@opencode-ai/ui/i18n/ja" import { dict as uiPl } from "@opencode-ai/ui/i18n/pl" import { dict as uiRu } from "@opencode-ai/ui/i18n/ru" -export type Locale = "en" | "zh" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru" +export type Locale = "en" | "zh" | "zht" | "ko" | "de" | "es" | "fr" | "da" | "ja" | "pl" | "ru" type RawDictionary = typeof en & typeof uiEn type Dictionary = i18n.Flatten -const LOCALES: readonly Locale[] = ["en", "zh", "ko", "de", "es", "fr", "da", "ja", "pl", "ru"] +const LOCALES: readonly Locale[] = ["en", "zh", "zht", "ko", "de", "es", "fr", "da", "ja", "pl", "ru"] function detectLocale(): Locale { if (typeof navigator !== "object") return "en" @@ -37,7 +39,10 @@ function detectLocale(): Locale { const languages = navigator.languages?.length ? navigator.languages : [navigator.language] for (const language of languages) { if (!language) continue - if (language.toLowerCase().startsWith("zh")) return "zh" + if (language.toLowerCase().startsWith("zh")) { + if (language.toLowerCase().includes("hant")) return "zht" + return "zh" + } if (language.toLowerCase().startsWith("ko")) return "ko" if (language.toLowerCase().startsWith("de")) return "de" if (language.toLowerCase().startsWith("es")) return "es" @@ -63,6 +68,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const locale = createMemo(() => { if (store.locale === "zh") return "zh" + if (store.locale === "zht") return "zht" if (store.locale === "ko") return "ko" if (store.locale === "de") return "de" if (store.locale === "es") return "es" @@ -84,6 +90,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const dict = createMemo(() => { if (locale() === "en") return base if (locale() === "zh") return { ...base, ...i18n.flatten({ ...zh, ...uiZh }) } + if (locale() === "zht") return { ...base, ...i18n.flatten({ ...zht, ...uiZht }) } if (locale() === "de") return { ...base, ...i18n.flatten({ ...de, ...uiDe }) } if (locale() === "es") return { ...base, ...i18n.flatten({ ...es, ...uiEs }) } if (locale() === "fr") return { ...base, ...i18n.flatten({ ...fr, ...uiFr }) } @@ -99,6 +106,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont const labelKey: Record = { en: "language.en", zh: "language.zh", + zht: "language.zht", ko: "language.ko", de: "language.de", es: "language.es", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 3ec4a5f6fb1..f86542ab12b 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -269,7 +269,8 @@ export const dict = { "context.usage.clickToView": "Klik for at se kontekst", "language.en": "Engelsk", - "language.zh": "Kinesisk", + "language.zh": "Kinesisk (forenklet)", + "language.zht": "Kinesisk (traditionelt)", "language.ko": "Koreansk", "language.de": "Tysk", "language.es": "Spansk", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 85bb436e510..882150cfce1 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -274,7 +274,8 @@ export const dict = { "context.usage.clickToView": "Klicken, um Kontext anzuzeigen", "language.en": "Englisch", - "language.zh": "Chinesisch", + "language.zh": "Chinesisch (Vereinfacht)", + "language.zht": "Chinesisch (Traditionell)", "language.ko": "Koreanisch", "language.de": "Deutsch", "language.es": "Spanisch", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index ec7d8da2f9e..b86d8e6597a 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -286,7 +286,8 @@ export const dict = { "context.usage.clickToView": "Click to view context", "language.en": "English", - "language.zh": "Chinese", + "language.zh": "Chinese (Simplified)", + "language.zht": "Chinese (Traditional)", "language.ko": "Korean", "language.de": "German", "language.es": "Spanish", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index d19a22f5c1c..c2892359269 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -269,7 +269,8 @@ export const dict = { "context.usage.clickToView": "Haz clic para ver contexto", "language.en": "Inglés", - "language.zh": "Chino", + "language.zh": "Chino (simplificado)", + "language.zht": "Chino (tradicional)", "language.ko": "Coreano", "language.de": "Alemán", "language.es": "Español", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 831a23c0775..1722706ab18 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -269,7 +269,8 @@ export const dict = { "context.usage.clickToView": "Cliquez pour voir le contexte", "language.en": "Anglais", - "language.zh": "Chinois", + "language.zh": "Chinois (simplifié)", + "language.zht": "Chinois (traditionnel)", "language.ko": "Coréen", "language.de": "Allemand", "language.es": "Espagnol", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 7237659f2fe..488eca707b1 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -267,7 +267,8 @@ export const dict = { "context.usage.clickToView": "クリックしてコンテキストを表示", "language.en": "英語", - "language.zh": "中国語", + "language.zh": "中国語(簡体字)", + "language.zht": "中国語(繁体字)", "language.ko": "韓国語", "language.de": "ドイツ語", "language.es": "スペイン語", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index 4ddeb9aeade..a9fa3e3d381 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -271,7 +271,8 @@ export const dict = { "context.usage.clickToView": "컨텍스트를 보려면 클릭", "language.en": "영어", - "language.zh": "중국어", + "language.zh": "중국어 (간체)", + "language.zht": "중국어 (번체)", "language.ko": "한국어", "language.de": "독일어", "language.es": "스페인어", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index 34a686dfdd8..f99e331a863 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -267,7 +267,8 @@ export const dict = { "context.usage.clickToView": "点击查看上下文", "language.en": "英语", - "language.zh": "中文", + "language.zh": "简体中文", + "language.zht": "繁体中文", "language.ko": "韩语", "language.de": "德语", "language.es": "西班牙语", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts new file mode 100644 index 00000000000..bd51c1ac78a --- /dev/null +++ b/packages/app/src/i18n/zht.ts @@ -0,0 +1,547 @@ +import { dict as en } from "./en" + +type Keys = keyof typeof en + +export const dict = { + "command.category.suggested": "建議", + "command.category.view": "檢視", + "command.category.project": "專案", + "command.category.provider": "提供者", + "command.category.server": "伺服器", + "command.category.session": "工作階段", + "command.category.theme": "主題", + "command.category.language": "語言", + "command.category.file": "檔案", + "command.category.terminal": "終端機", + "command.category.model": "模型", + "command.category.mcp": "MCP", + "command.category.agent": "代理程式", + "command.category.permissions": "權限", + "command.category.workspace": "工作區", + + "theme.scheme.system": "系統", + "theme.scheme.light": "淺色", + "theme.scheme.dark": "深色", + + "command.sidebar.toggle": "切換側邊欄", + "command.project.open": "開啟專案", + "command.provider.connect": "連接提供者", + "command.server.switch": "切換伺服器", + "command.session.previous": "上一個工作階段", + "command.session.next": "下一個工作階段", + "command.session.archive": "封存工作階段", + + "command.palette": "命令面板", + + "command.theme.cycle": "循環主題", + "command.theme.set": "使用主題: {{theme}}", + "command.theme.scheme.cycle": "循環配色方案", + "command.theme.scheme.set": "使用配色方案: {{scheme}}", + + "command.language.cycle": "循環語言", + "command.language.set": "使用語言: {{language}}", + + "command.session.new": "新增工作階段", + "command.file.open": "開啟檔案", + "command.file.open.description": "搜尋檔案和命令", + "command.terminal.toggle": "切換終端機", + "command.review.toggle": "切換審查", + "command.terminal.new": "新增終端機", + "command.terminal.new.description": "建立新的終端機標籤頁", + "command.steps.toggle": "切換步驟", + "command.steps.toggle.description": "顯示或隱藏目前訊息的步驟", + "command.message.previous": "上一則訊息", + "command.message.previous.description": "跳到上一則使用者訊息", + "command.message.next": "下一則訊息", + "command.message.next.description": "跳到下一則使用者訊息", + "command.model.choose": "選擇模型", + "command.model.choose.description": "選擇不同的模型", + "command.mcp.toggle": "切換 MCP", + "command.mcp.toggle.description": "切換 MCP", + "command.agent.cycle": "循環代理程式", + "command.agent.cycle.description": "切換到下一個代理程式", + "command.agent.cycle.reverse": "反向循環代理程式", + "command.agent.cycle.reverse.description": "切換到上一個代理程式", + "command.model.variant.cycle": "循環思考強度", + "command.model.variant.cycle.description": "切換到下一個強度等級", + "command.permissions.autoaccept.enable": "自動接受編輯", + "command.permissions.autoaccept.disable": "停止自動接受編輯", + "command.session.undo": "復原", + "command.session.undo.description": "復原上一則訊息", + "command.session.redo": "重做", + "command.session.redo.description": "重做上一則復原的訊息", + "command.session.compact": "精簡工作階段", + "command.session.compact.description": "總結工作階段以減少上下文大小", + "command.session.fork": "從訊息分支", + "command.session.fork.description": "從先前的訊息建立新工作階段", + "command.session.share": "分享工作階段", + "command.session.share.description": "分享此工作階段並將連結複製到剪貼簿", + "command.session.unshare": "取消分享工作階段", + "command.session.unshare.description": "停止分享此工作階段", + + "palette.search.placeholder": "搜尋檔案和命令", + "palette.empty": "找不到結果", + "palette.group.commands": "命令", + "palette.group.files": "檔案", + + "dialog.provider.search.placeholder": "搜尋提供者", + "dialog.provider.empty": "找不到提供者", + "dialog.provider.group.popular": "熱門", + "dialog.provider.group.other": "其他", + "dialog.provider.tag.recommended": "推薦", + "dialog.provider.anthropic.note": "使用 Claude Pro/Max 或 API 金鑰連線", + + "dialog.model.select.title": "選擇模型", + "dialog.model.search.placeholder": "搜尋模型", + "dialog.model.empty": "找不到模型", + "dialog.model.manage": "管理模型", + "dialog.model.manage.description": "自訂模型選擇器中顯示的模型。", + + "dialog.model.unpaid.freeModels.title": "OpenCode 提供的免費模型", + "dialog.model.unpaid.addMore.title": "從熱門提供者新增更多模型", + + "dialog.provider.viewAll": "查看全部提供者", + + "provider.connect.title": "連線 {{provider}}", + "provider.connect.title.anthropicProMax": "使用 Claude Pro/Max 登入", + "provider.connect.selectMethod": "選擇 {{provider}} 的登入方式。", + "provider.connect.method.apiKey": "API 金鑰", + "provider.connect.status.inProgress": "正在授權...", + "provider.connect.status.waiting": "等待授權...", + "provider.connect.status.failed": "授權失敗: {{error}}", + "provider.connect.apiKey.description": + "輸入你的 {{provider}} API 金鑰以連線帳戶,並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.apiKey.label": "{{provider}} API 金鑰", + "provider.connect.apiKey.placeholder": "API 金鑰", + "provider.connect.apiKey.required": "API 金鑰為必填", + "provider.connect.opencodeZen.line1": "OpenCode Zen 為你提供一組精選的可靠最佳化模型,用於程式碼代理程式。", + "provider.connect.opencodeZen.line2": "只需一個 API 金鑰,你就能使用 Claude、GPT、Gemini、GLM 等模型。", + "provider.connect.opencodeZen.visit.prefix": "造訪 ", + "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", + "provider.connect.opencodeZen.visit.suffix": " 取得你的 API 金鑰。", + "provider.connect.oauth.code.visit.prefix": "造訪 ", + "provider.connect.oauth.code.visit.link": "此連結", + "provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.code.label": "{{method}} 授權碼", + "provider.connect.oauth.code.placeholder": "授權碼", + "provider.connect.oauth.code.required": "授權碼為必填", + "provider.connect.oauth.code.invalid": "授權碼無效", + "provider.connect.oauth.auto.visit.prefix": "造訪 ", + "provider.connect.oauth.auto.visit.link": "此連結", + "provider.connect.oauth.auto.visit.suffix": + " 並輸入以下程式碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.auto.confirmationCode": "確認碼", + "provider.connect.toast.connected.title": "{{provider}} 已連線", + "provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。", + + "model.tag.free": "免費", + "model.tag.latest": "最新", + + "common.search.placeholder": "搜尋", + "common.loading": "載入中", + "common.cancel": "取消", + "common.submit": "提交", + "common.save": "儲存", + "common.saving": "儲存中...", + "common.default": "預設", + "common.attachment": "附件", + + "prompt.placeholder.shell": "輸入 shell 命令...", + "prompt.placeholder.normal": '隨便問點什麼... "{{example}}"', + "prompt.mode.shell": "Shell", + "prompt.mode.shell.exit": "按 esc 退出", + + "prompt.example.1": "修復程式碼庫中的一個 TODO", + "prompt.example.2": "這個專案的技術堆疊是什麼?", + "prompt.example.3": "修復失敗的測試", + "prompt.example.4": "解釋驗證是如何運作的", + "prompt.example.5": "尋找並修復安全漏洞", + "prompt.example.6": "為使用者服務新增單元測試", + "prompt.example.7": "重構這個函式,讓它更易讀", + "prompt.example.8": "這個錯誤是什麼意思?", + "prompt.example.9": "幫我偵錯這個問題", + "prompt.example.10": "產生 API 文件", + "prompt.example.11": "最佳化資料庫查詢", + "prompt.example.12": "新增輸入驗證", + "prompt.example.13": "建立一個新的元件用於...", + "prompt.example.14": "我該如何部署這個專案?", + "prompt.example.15": "審查我的程式碼並給出最佳實務建議", + "prompt.example.16": "為這個函式新增錯誤處理", + "prompt.example.17": "解釋這個正規表示式", + "prompt.example.18": "把它轉換成 TypeScript", + "prompt.example.19": "在整個程式碼庫中新增日誌", + "prompt.example.20": "哪些相依性已經過期?", + "prompt.example.21": "幫我寫一個遷移腳本", + "prompt.example.22": "為這個端點實作快取", + "prompt.example.23": "給這個清單新增分頁", + "prompt.example.24": "建立一個 CLI 命令用於...", + "prompt.example.25": "這裡的環境變數是怎麼運作的?", + + "prompt.popover.emptyResults": "沒有符合的結果", + "prompt.popover.emptyCommands": "沒有符合的命令", + "prompt.dropzone.label": "將圖片或 PDF 拖到這裡", + "prompt.slash.badge.custom": "自訂", + "prompt.context.active": "作用中", + "prompt.context.includeActiveFile": "包含作用中檔案", + "prompt.action.attachFile": "附加檔案", + "prompt.action.send": "傳送", + "prompt.action.stop": "停止", + + "prompt.toast.pasteUnsupported.title": "不支援的貼上", + "prompt.toast.pasteUnsupported.description": "這裡只能貼上圖片或 PDF 檔案。", + "prompt.toast.modelAgentRequired.title": "請選擇代理程式和模型", + "prompt.toast.modelAgentRequired.description": "傳送提示前請先選擇代理程式和模型。", + "prompt.toast.worktreeCreateFailed.title": "建立工作樹失敗", + "prompt.toast.sessionCreateFailed.title": "建立工作階段失敗", + "prompt.toast.shellSendFailed.title": "傳送 shell 命令失敗", + "prompt.toast.commandSendFailed.title": "傳送命令失敗", + "prompt.toast.promptSendFailed.title": "傳送提示失敗", + + "dialog.mcp.title": "MCP", + "dialog.mcp.description": "已啟用 {{enabled}} / {{total}}", + "dialog.mcp.empty": "未設定 MCP", + + "mcp.status.connected": "已連線", + "mcp.status.failed": "失敗", + "mcp.status.needs_auth": "需要授權", + "mcp.status.disabled": "已停用", + + "dialog.fork.empty": "沒有可用於分支的訊息", + + "dialog.directory.search.placeholder": "搜尋資料夾", + "dialog.directory.empty": "找不到資料夾", + + "dialog.server.title": "伺服器", + "dialog.server.description": "切換此應用程式連線的 OpenCode 伺服器。", + "dialog.server.search.placeholder": "搜尋伺服器", + "dialog.server.empty": "暫無伺服器", + "dialog.server.add.title": "新增伺服器", + "dialog.server.add.url": "伺服器 URL", + "dialog.server.add.placeholder": "http://localhost:4096", + "dialog.server.add.error": "無法連線到伺服器", + "dialog.server.add.checking": "檢查中...", + "dialog.server.add.button": "新增", + "dialog.server.default.title": "預設伺服器", + "dialog.server.default.description": "應用程式啟動時連線此伺服器,而不是啟動本地伺服器。需要重新啟動。", + "dialog.server.default.none": "未選擇伺服器", + "dialog.server.default.set": "將目前伺服器設為預設", + "dialog.server.default.clear": "清除", + + "dialog.project.edit.title": "編輯專案", + "dialog.project.edit.name": "名稱", + "dialog.project.edit.icon": "圖示", + "dialog.project.edit.icon.alt": "專案圖示", + "dialog.project.edit.icon.hint": "點擊或拖曳圖片", + "dialog.project.edit.icon.recommended": "建議:128x128px", + "dialog.project.edit.color": "顏色", + + "context.breakdown.title": "上下文拆分", + "context.breakdown.note": "輸入 token 的大致拆分。「其他」包含工具定義和額外開銷。", + "context.breakdown.system": "系統", + "context.breakdown.user": "使用者", + "context.breakdown.assistant": "助手", + "context.breakdown.tool": "工具呼叫", + "context.breakdown.other": "其他", + + "context.systemPrompt.title": "系統提示詞", + "context.rawMessages.title": "原始訊息", + + "context.stats.session": "工作階段", + "context.stats.messages": "訊息數", + "context.stats.provider": "提供者", + "context.stats.model": "模型", + "context.stats.limit": "上下文限制", + "context.stats.totalTokens": "總 token", + "context.stats.usage": "使用量", + "context.stats.inputTokens": "輸入 token", + "context.stats.outputTokens": "輸出 token", + "context.stats.reasoningTokens": "推理 token", + "context.stats.cacheTokens": "快取 token(讀/寫)", + "context.stats.userMessages": "使用者訊息", + "context.stats.assistantMessages": "助手訊息", + "context.stats.totalCost": "總成本", + "context.stats.sessionCreated": "建立時間", + "context.stats.lastActivity": "最後活動", + + "context.usage.tokens": "Token", + "context.usage.usage": "使用量", + "context.usage.cost": "成本", + "context.usage.clickToView": "點擊查看上下文", + + "language.en": "英語", + "language.zh": "簡體中文", + "language.zht": "繁體中文", + "language.ko": "韓語", + + "toast.language.title": "語言", + "toast.language.description": "已切換到 {{language}}", + + "toast.theme.title": "主題已切換", + "toast.scheme.title": "配色方案", + + "toast.permissions.autoaccept.on.title": "自動接受編輯", + "toast.permissions.autoaccept.on.description": "編輯和寫入權限將自動獲准", + "toast.permissions.autoaccept.off.title": "已停止自動接受編輯", + "toast.permissions.autoaccept.off.description": "編輯和寫入權限將需要手動批准", + + "toast.model.none.title": "未選擇模型", + "toast.model.none.description": "請先連線提供者以總結此工作階段", + + "toast.file.loadFailed.title": "載入檔案失敗", + + "toast.session.share.copyFailed.title": "無法複製連結到剪貼簿", + "toast.session.share.success.title": "工作階段已分享", + "toast.session.share.success.description": "分享連結已複製到剪貼簿", + "toast.session.share.failed.title": "分享工作階段失敗", + "toast.session.share.failed.description": "分享工作階段時發生錯誤", + + "toast.session.unshare.success.title": "已取消分享工作階段", + "toast.session.unshare.success.description": "工作階段已成功取消分享", + "toast.session.unshare.failed.title": "取消分享失敗", + "toast.session.unshare.failed.description": "取消分享工作階段時發生錯誤", + + "toast.session.listFailed.title": "無法載入 {{project}} 的工作階段", + + "toast.update.title": "有可用更新", + "toast.update.description": "OpenCode 有新版本 ({{version}}) 可安裝。", + "toast.update.action.installRestart": "安裝並重新啟動", + "toast.update.action.notYet": "稍後", + + "error.page.title": "出了點問題", + "error.page.description": "載入應用程式時發生錯誤。", + "error.page.details.label": "錯誤詳情", + "error.page.action.restart": "重新啟動", + "error.page.action.checking": "檢查中...", + "error.page.action.checkUpdates": "檢查更新", + "error.page.action.updateTo": "更新到 {{version}}", + "error.page.report.prefix": "請將此錯誤回報給 OpenCode 團隊", + "error.page.report.discord": "在 Discord 上", + "error.page.version": "版本: {{version}}", + + "error.dev.rootNotFound": "找不到根元素。你是不是忘了把它新增到 index.html? 或者 id 屬性拼錯了?", + + "error.globalSync.connectFailed": "無法連線到伺服器。是否有伺服器正在 `{{url}}` 執行?", + + "error.chain.unknown": "未知錯誤", + "error.chain.causedBy": "原因:", + "error.chain.apiError": "API 錯誤", + "error.chain.status": "狀態: {{status}}", + "error.chain.retryable": "可重試: {{retryable}}", + "error.chain.responseBody": "回應內容:\n{{body}}", + "error.chain.didYouMean": "你是不是想輸入: {{suggestions}}", + "error.chain.modelNotFound": "找不到模型: {{provider}}/{{model}}", + "error.chain.checkConfig": "請檢查你的設定 (opencode.json) 中的 provider/model 名稱", + "error.chain.mcpFailed": 'MCP 伺服器 "{{name}}" 啟動失敗。注意: OpenCode 暫不支援 MCP 認證。', + "error.chain.providerAuthFailed": "提供者認證失敗 ({{provider}}): {{message}}", + "error.chain.providerInitFailed": '無法初始化提供者 "{{provider}}"。請檢查憑證和設定。', + "error.chain.configJsonInvalid": "設定檔 {{path}} 不是有效的 JSON(C)", + "error.chain.configJsonInvalidWithMessage": "設定檔 {{path}} 不是有效的 JSON(C): {{message}}", + "error.chain.configDirectoryTypo": + '{{path}} 中的目錄 "{{dir}}" 無效。請將目錄重新命名為 "{{suggestion}}" 或移除它。這是一個常見拼寫錯誤。', + "error.chain.configFrontmatterError": "無法解析 {{path}} 中的 frontmatter:\n{{message}}", + "error.chain.configInvalid": "設定檔 {{path}} 無效", + "error.chain.configInvalidWithMessage": "設定檔 {{path}} 無效: {{message}}", + + "notification.permission.title": "需要權限", + "notification.permission.description": "{{sessionTitle}}({{projectName}})需要權限", + "notification.question.title": "問題", + "notification.question.description": "{{sessionTitle}}({{projectName}})有一個問題", + "notification.action.goToSession": "前往工作階段", + + "notification.session.responseReady.title": "回覆已就緒", + "notification.session.error.title": "工作階段錯誤", + "notification.session.error.fallbackDescription": "發生錯誤", + + "home.recentProjects": "最近專案", + "home.empty.title": "沒有最近專案", + "home.empty.description": "透過開啟本地專案開始使用", + + "session.tab.session": "工作階段", + "session.tab.review": "審查", + "session.tab.context": "上下文", + "session.review.filesChanged": "{{count}} 個檔案變更", + "session.review.loadingChanges": "正在載入變更...", + "session.review.empty": "此工作階段暫無變更", + "session.messages.renderEarlier": "顯示更早的訊息", + "session.messages.loadingEarlier": "正在載入更早的訊息...", + "session.messages.loadEarlier": "載入更早的訊息", + "session.messages.loading": "正在載入訊息...", + + "session.context.addToContext": "將 {{selection}} 新增到上下文", + + "session.new.worktree.main": "主分支", + "session.new.worktree.mainWithBranch": "主分支 ({{branch}})", + "session.new.worktree.create": "建立新的 worktree", + "session.new.lastModified": "最後修改", + + "session.header.search.placeholder": "搜尋 {{project}}", + + "session.share.popover.title": "發佈到網頁", + "session.share.popover.description.shared": "此工作階段已在網頁上公開。任何擁有連結的人都可以存取。", + "session.share.popover.description.unshared": "在網頁上公開分享此工作階段。任何擁有連結的人都可以存取。", + "session.share.action.share": "分享", + "session.share.action.publish": "發佈", + "session.share.action.publishing": "正在發佈...", + "session.share.action.unpublish": "取消發佈", + "session.share.action.unpublishing": "正在取消發佈...", + "session.share.action.view": "檢視", + "session.share.copy.copied": "已複製", + "session.share.copy.copyLink": "複製連結", + + "lsp.tooltip.none": "沒有 LSP 伺服器", + "lsp.label.connected": "{{count}} LSP", + + "prompt.loading": "正在載入提示...", + "terminal.loading": "正在載入終端機...", + "terminal.title": "終端機", + "terminal.title.numbered": "終端機 {{number}}", + + "common.closeTab": "關閉標籤頁", + "common.dismiss": "忽略", + "common.requestFailed": "要求失敗", + "common.moreOptions": "更多選項", + "common.learnMore": "深入了解", + "common.rename": "重新命名", + "common.reset": "重設", + "common.delete": "刪除", + "common.close": "關閉", + "common.edit": "編輯", + "common.loadMore": "載入更多", + + "sidebar.settings": "設定", + "sidebar.help": "說明", + "sidebar.workspaces.enable": "啟用工作區", + "sidebar.workspaces.disable": "停用工作區", + "sidebar.gettingStarted.title": "開始使用", + "sidebar.gettingStarted.line1": "OpenCode 提供免費模型,你可以立即開始使用。", + "sidebar.gettingStarted.line2": "連線任意提供者即可使用更多模型,如 Claude、GPT、Gemini 等。", + "sidebar.project.recentSessions": "最近工作階段", + "sidebar.project.viewAllSessions": "查看全部工作階段", + + "settings.section.desktop": "桌面", + "settings.tab.general": "一般", + "settings.tab.shortcuts": "快速鍵", + + "settings.general.section.appearance": "外觀", + "settings.general.section.notifications": "系統通知", + "settings.general.section.sounds": "音效", + + "settings.general.row.language.title": "語言", + "settings.general.row.language.description": "變更 OpenCode 的顯示語言", + "settings.general.row.appearance.title": "外觀", + "settings.general.row.appearance.description": "自訂 OpenCode 在你的裝置上的外觀", + "settings.general.row.theme.title": "主題", + "settings.general.row.theme.description": "自訂 OpenCode 的主題。", + "settings.general.row.font.title": "字型", + "settings.general.row.font.description": "自訂程式碼區塊使用的等寬字型", + + "settings.general.notifications.agent.title": "代理程式", + "settings.general.notifications.agent.description": "當代理程式完成或需要注意時顯示系統通知", + "settings.general.notifications.permissions.title": "權限", + "settings.general.notifications.permissions.description": "當需要權限時顯示系統通知", + "settings.general.notifications.errors.title": "錯誤", + "settings.general.notifications.errors.description": "發生錯誤時顯示系統通知", + + "settings.general.sounds.agent.title": "代理程式", + "settings.general.sounds.agent.description": "當代理程式完成或需要注意時播放聲音", + "settings.general.sounds.permissions.title": "權限", + "settings.general.sounds.permissions.description": "當需要權限時播放聲音", + "settings.general.sounds.errors.title": "錯誤", + "settings.general.sounds.errors.description": "發生錯誤時播放聲音", + + "settings.shortcuts.title": "鍵盤快速鍵", + "settings.shortcuts.reset.button": "重設為預設值", + "settings.shortcuts.reset.toast.title": "快速鍵已重設", + "settings.shortcuts.reset.toast.description": "鍵盤快速鍵已重設為預設設定。", + "settings.shortcuts.conflict.title": "快速鍵已被占用", + "settings.shortcuts.conflict.description": "{{keybind}} 已分配給 {{titles}}。", + "settings.shortcuts.unassigned": "未設定", + "settings.shortcuts.pressKeys": "按下按鍵", + "settings.shortcuts.search.placeholder": "搜尋快速鍵", + "settings.shortcuts.search.empty": "找不到快速鍵", + + "settings.shortcuts.group.general": "一般", + "settings.shortcuts.group.session": "工作階段", + "settings.shortcuts.group.navigation": "導覽", + "settings.shortcuts.group.modelAndAgent": "模型與代理程式", + "settings.shortcuts.group.terminal": "終端機", + "settings.shortcuts.group.prompt": "提示", + + "settings.providers.title": "提供者", + "settings.providers.description": "提供者設定將在此處可設定。", + "settings.models.title": "模型", + "settings.models.description": "模型設定將在此處可設定。", + "settings.agents.title": "代理程式", + "settings.agents.description": "代理程式設定將在此處可設定。", + "settings.commands.title": "命令", + "settings.commands.description": "命令設定將在此處可設定。", + "settings.mcp.title": "MCP", + "settings.mcp.description": "MCP 設定將在此處可設定。", + + "settings.permissions.title": "權限", + "settings.permissions.description": "控制伺服器預設可以使用哪些工具。", + "settings.permissions.section.tools": "工具", + "settings.permissions.toast.updateFailed.title": "更新權限失敗", + + "settings.permissions.action.allow": "允許", + "settings.permissions.action.ask": "詢問", + "settings.permissions.action.deny": "拒絕", + + "settings.permissions.tool.read.title": "讀取", + "settings.permissions.tool.read.description": "讀取檔案(符合檔案路徑)", + "settings.permissions.tool.edit.title": "編輯", + "settings.permissions.tool.edit.description": "修改檔案,包括編輯、寫入、修補和多重編輯", + "settings.permissions.tool.glob.title": "Glob", + "settings.permissions.tool.glob.description": "使用 glob 模式符合檔案", + "settings.permissions.tool.grep.title": "Grep", + "settings.permissions.tool.grep.description": "使用正規表示式搜尋檔案內容", + "settings.permissions.tool.list.title": "清單", + "settings.permissions.tool.list.description": "列出目錄中的檔案", + "settings.permissions.tool.bash.title": "Bash", + "settings.permissions.tool.bash.description": "執行 shell 命令", + "settings.permissions.tool.task.title": "Task", + "settings.permissions.tool.task.description": "啟動子代理程式", + "settings.permissions.tool.skill.title": "Skill", + "settings.permissions.tool.skill.description": "按名稱載入技能", + "settings.permissions.tool.lsp.title": "LSP", + "settings.permissions.tool.lsp.description": "執行語言伺服器查詢", + "settings.permissions.tool.todoread.title": "讀取待辦", + "settings.permissions.tool.todoread.description": "讀取待辦清單", + "settings.permissions.tool.todowrite.title": "更新待辦", + "settings.permissions.tool.todowrite.description": "更新待辦清單", + "settings.permissions.tool.webfetch.title": "Web Fetch", + "settings.permissions.tool.webfetch.description": "從 URL 取得內容", + "settings.permissions.tool.websearch.title": "Web Search", + "settings.permissions.tool.websearch.description": "搜尋網頁", + "settings.permissions.tool.codesearch.title": "Code Search", + "settings.permissions.tool.codesearch.description": "在網路上搜尋程式碼", + "settings.permissions.tool.external_directory.title": "外部目錄", + "settings.permissions.tool.external_directory.description": "存取專案目錄之外的檔案", + "settings.permissions.tool.doom_loop.title": "Doom Loop", + "settings.permissions.tool.doom_loop.description": "偵測具有相同輸入的重複工具呼叫", + + "workspace.new": "新增工作區", + "workspace.type.local": "本地", + "workspace.type.sandbox": "沙盒", + "workspace.create.failed.title": "建立工作區失敗", + "workspace.delete.failed.title": "刪除工作區失敗", + "workspace.resetting.title": "正在重設工作區", + "workspace.resetting.description": "這可能需要一點時間。", + "workspace.reset.failed.title": "重設工作區失敗", + "workspace.reset.success.title": "工作區已重設", + "workspace.reset.success.description": "工作區已與預設分支保持一致。", + "workspace.status.checking": "正在檢查未合併的變更...", + "workspace.status.error": "無法驗證 git 狀態。", + "workspace.status.clean": "未偵測到未合併的變更。", + "workspace.status.dirty": "偵測到未合併的變更。", + "workspace.delete.title": "刪除工作區", + "workspace.delete.confirm": '刪除工作區 "{{name}}"?', + "workspace.delete.button": "刪除工作區", + "workspace.reset.title": "重設工作區", + "workspace.reset.confirm": '重設工作區 "{{name}}"?', + "workspace.reset.button": "重設工作區", + "workspace.reset.archived.none": "不會封存任何作用中工作階段。", + "workspace.reset.archived.one": "將封存 1 個工作階段。", + "workspace.reset.archived.many": "將封存 {{count}} 個工作階段。", + "workspace.reset.note": "這將把工作區重設為與預設分支一致。", +} satisfies Partial> diff --git a/packages/ui/src/i18n/zht.ts b/packages/ui/src/i18n/zht.ts new file mode 100644 index 00000000000..9adcbe9d1d2 --- /dev/null +++ b/packages/ui/src/i18n/zht.ts @@ -0,0 +1,94 @@ +import { dict as en } from "./en" + +type Keys = keyof typeof en + +export const dict = { + "ui.sessionReview.title": "工作階段變更", + "ui.sessionReview.diffStyle.unified": "整合", + "ui.sessionReview.diffStyle.split": "拆分", + "ui.sessionReview.expandAll": "全部展開", + "ui.sessionReview.collapseAll": "全部收合", + + "ui.sessionTurn.steps.show": "顯示步驟", + "ui.sessionTurn.steps.hide": "隱藏步驟", + "ui.sessionTurn.summary.response": "回覆", + "ui.sessionTurn.diff.showMore": "顯示更多變更 ({{count}})", + + "ui.sessionTurn.retry.retrying": "重試中", + "ui.sessionTurn.retry.inSeconds": "{{seconds}} 秒後", + + "ui.sessionTurn.status.delegating": "正在委派工作", + "ui.sessionTurn.status.planning": "正在規劃下一步", + "ui.sessionTurn.status.gatheringContext": "正在收集上下文", + "ui.sessionTurn.status.searchingCodebase": "正在搜尋程式碼庫", + "ui.sessionTurn.status.searchingWeb": "正在搜尋網頁", + "ui.sessionTurn.status.makingEdits": "正在修改", + "ui.sessionTurn.status.runningCommands": "正在執行命令", + "ui.sessionTurn.status.thinking": "思考中", + "ui.sessionTurn.status.thinkingWithTopic": "思考 - {{topic}}", + "ui.sessionTurn.status.gatheringThoughts": "正在整理思緒", + "ui.sessionTurn.status.consideringNextSteps": "正在考慮下一步", + + "ui.messagePart.diagnostic.error": "錯誤", + "ui.messagePart.title.edit": "編輯", + "ui.messagePart.title.write": "寫入", + "ui.messagePart.option.typeOwnAnswer": "輸入自己的答案", + "ui.messagePart.review.title": "檢查你的答案", + + "ui.list.loading": "載入中", + "ui.list.empty": "無結果", + "ui.list.emptyWithFilter.prefix": "沒有關於", + "ui.list.emptyWithFilter.suffix": "的結果", + + "ui.messageNav.newMessage": "新訊息", + + "ui.textField.copyToClipboard": "複製到剪貼簿", + "ui.textField.copied": "已複製", + + "ui.imagePreview.alt": "圖片預覽", + + "ui.tool.read": "讀取", + "ui.tool.list": "清單", + "ui.tool.glob": "Glob", + "ui.tool.grep": "Grep", + "ui.tool.webfetch": "Webfetch", + "ui.tool.shell": "Shell", + "ui.tool.patch": "修補", + "ui.tool.todos": "待辦", + "ui.tool.todos.read": "讀取待辦", + "ui.tool.questions": "問題", + "ui.tool.agent": "{{type}} 代理程式", + + "ui.common.file.one": "個檔案", + "ui.common.file.other": "個檔案", + "ui.common.question.one": "個問題", + "ui.common.question.other": "個問題", + + "ui.common.add": "新增", + "ui.common.cancel": "取消", + "ui.common.confirm": "確認", + "ui.common.dismiss": "忽略", + "ui.common.next": "下一步", + "ui.common.submit": "提交", + + "ui.permission.deny": "拒絕", + "ui.permission.allowAlways": "永遠允許", + "ui.permission.allowOnce": "允許一次", + + "ui.message.expand": "展開訊息", + "ui.message.collapse": "收合訊息", + "ui.message.copy": "複製", + "ui.message.copied": "已複製", + "ui.message.attachment.alt": "附件", + + "ui.patch.action.deleted": "已刪除", + "ui.patch.action.created": "已建立", + "ui.patch.action.moved": "已移動", + "ui.patch.action.patched": "已套用修補", + + "ui.question.subtitle.answered": "{{count}} 已回答", + "ui.question.answer.none": "(無答案)", + "ui.question.review.notAnswered": "(未回答)", + "ui.question.multiHint": "(可多選)", + "ui.question.custom.placeholder": "輸入你的答案...", +} satisfies Partial> From 936f3ebe95c39e2f1e77c2db349c9349276e6cac Mon Sep 17 00:00:00 2001 From: Suad Wolgram <72341912+swolg@users.noreply.github.com> Date: Wed, 21 Jan 2026 22:34:27 +0100 Subject: [PATCH 308/426] feat(ui): add gruvbox theme (Web/App) (#9855) --- .../cli/cmd/tui/context/theme/gruvbox.json | 245 ++++++++++++++---- packages/ui/src/theme/default-themes.ts | 3 + packages/ui/src/theme/themes/gruvbox.json | 132 ++++++++++ 3 files changed, 331 insertions(+), 49 deletions(-) create mode 100644 packages/ui/src/theme/themes/gruvbox.json diff --git a/packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json b/packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json index c3101b5652d..dcae302581a 100644 --- a/packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json +++ b/packages/opencode/src/cli/cmd/tui/context/theme/gruvbox.json @@ -38,58 +38,205 @@ "lightOrange": "#af3a03" }, "theme": { - "primary": { "dark": "darkBlueBright", "light": "lightBlue" }, - "secondary": { "dark": "darkPurpleBright", "light": "lightPurple" }, - "accent": { "dark": "darkAquaBright", "light": "lightAqua" }, - "error": { "dark": "darkRedBright", "light": "lightRed" }, - "warning": { "dark": "darkOrangeBright", "light": "lightOrange" }, - "success": { "dark": "darkGreenBright", "light": "lightGreen" }, - "info": { "dark": "darkYellowBright", "light": "lightYellow" }, - "text": { "dark": "darkFg1", "light": "lightFg1" }, - "textMuted": { "dark": "darkGray", "light": "lightGray" }, - "background": { "dark": "darkBg0", "light": "lightBg0" }, - "backgroundPanel": { "dark": "darkBg1", "light": "lightBg1" }, - "backgroundElement": { "dark": "darkBg2", "light": "lightBg2" }, - "border": { "dark": "darkBg3", "light": "lightBg3" }, - "borderActive": { "dark": "darkFg1", "light": "lightFg1" }, - "borderSubtle": { "dark": "darkBg2", "light": "lightBg2" }, - "diffAdded": { "dark": "darkGreen", "light": "lightGreen" }, - "diffRemoved": { "dark": "darkRed", "light": "lightRed" }, - "diffContext": { "dark": "darkGray", "light": "lightGray" }, - "diffHunkHeader": { "dark": "darkAqua", "light": "lightAqua" }, - "diffHighlightAdded": { "dark": "darkGreenBright", "light": "lightGreen" }, - "diffHighlightRemoved": { "dark": "darkRedBright", "light": "lightRed" }, - "diffAddedBg": { "dark": "#32302f", "light": "#e2e0b5" }, - "diffRemovedBg": { "dark": "#322929", "light": "#e9d8d5" }, - "diffContextBg": { "dark": "darkBg1", "light": "lightBg1" }, - "diffLineNumber": { "dark": "darkBg3", "light": "lightBg3" }, - "diffAddedLineNumberBg": { "dark": "#2a2827", "light": "#d4d2a9" }, - "diffRemovedLineNumberBg": { "dark": "#2a2222", "light": "#d8cbc8" }, - "markdownText": { "dark": "darkFg1", "light": "lightFg1" }, - "markdownHeading": { "dark": "darkBlueBright", "light": "lightBlue" }, - "markdownLink": { "dark": "darkAquaBright", "light": "lightAqua" }, - "markdownLinkText": { "dark": "darkGreenBright", "light": "lightGreen" }, - "markdownCode": { "dark": "darkYellowBright", "light": "lightYellow" }, - "markdownBlockQuote": { "dark": "darkGray", "light": "lightGray" }, - "markdownEmph": { "dark": "darkPurpleBright", "light": "lightPurple" }, - "markdownStrong": { "dark": "darkOrangeBright", "light": "lightOrange" }, - "markdownHorizontalRule": { "dark": "darkGray", "light": "lightGray" }, - "markdownListItem": { "dark": "darkBlueBright", "light": "lightBlue" }, + "primary": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "secondary": { + "dark": "darkPurpleBright", + "light": "lightPurple" + }, + "accent": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "error": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "warning": { + "dark": "darkOrangeBright", + "light": "lightOrange" + }, + "success": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "info": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "text": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "textMuted": { + "dark": "darkGray", + "light": "lightGray" + }, + "background": { + "dark": "darkBg0", + "light": "lightBg0" + }, + "backgroundPanel": { + "dark": "darkBg1", + "light": "lightBg1" + }, + "backgroundElement": { + "dark": "darkBg2", + "light": "lightBg2" + }, + "border": { + "dark": "darkBg3", + "light": "lightBg3" + }, + "borderActive": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "borderSubtle": { + "dark": "darkBg2", + "light": "lightBg2" + }, + "diffAdded": { + "dark": "darkGreen", + "light": "lightGreen" + }, + "diffRemoved": { + "dark": "darkRed", + "light": "lightRed" + }, + "diffContext": { + "dark": "darkGray", + "light": "lightGray" + }, + "diffHunkHeader": { + "dark": "darkAqua", + "light": "lightAqua" + }, + "diffHighlightAdded": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "diffHighlightRemoved": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "diffAddedBg": { + "dark": "#32302f", + "light": "#dcd8a4" + }, + "diffRemovedBg": { + "dark": "#322929", + "light": "#e2c7c3" + }, + "diffContextBg": { + "dark": "darkBg1", + "light": "lightBg1" + }, + "diffLineNumber": { + "dark": "darkBg3", + "light": "lightBg3" + }, + "diffAddedLineNumberBg": { + "dark": "#2a2827", + "light": "#cec99e" + }, + "diffRemovedLineNumberBg": { + "dark": "#2a2222", + "light": "#d3bdb9" + }, + "markdownText": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "markdownHeading": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "markdownLink": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "markdownLinkText": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "markdownCode": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "markdownBlockQuote": { + "dark": "darkGray", + "light": "lightGray" + }, + "markdownEmph": { + "dark": "darkPurpleBright", + "light": "lightPurple" + }, + "markdownStrong": { + "dark": "darkOrangeBright", + "light": "lightOrange" + }, + "markdownHorizontalRule": { + "dark": "darkGray", + "light": "lightGray" + }, + "markdownListItem": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, "markdownListEnumeration": { "dark": "darkAquaBright", "light": "lightAqua" }, - "markdownImage": { "dark": "darkAquaBright", "light": "lightAqua" }, - "markdownImageText": { "dark": "darkGreenBright", "light": "lightGreen" }, - "markdownCodeBlock": { "dark": "darkFg1", "light": "lightFg1" }, - "syntaxComment": { "dark": "darkGray", "light": "lightGray" }, - "syntaxKeyword": { "dark": "darkRedBright", "light": "lightRed" }, - "syntaxFunction": { "dark": "darkGreenBright", "light": "lightGreen" }, - "syntaxVariable": { "dark": "darkBlueBright", "light": "lightBlue" }, - "syntaxString": { "dark": "darkYellowBright", "light": "lightYellow" }, - "syntaxNumber": { "dark": "darkPurpleBright", "light": "lightPurple" }, - "syntaxType": { "dark": "darkAquaBright", "light": "lightAqua" }, - "syntaxOperator": { "dark": "darkOrangeBright", "light": "lightOrange" }, - "syntaxPunctuation": { "dark": "darkFg1", "light": "lightFg1" } + "markdownImage": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "markdownImageText": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "markdownCodeBlock": { + "dark": "darkFg1", + "light": "lightFg1" + }, + "syntaxComment": { + "dark": "darkGray", + "light": "lightGray" + }, + "syntaxKeyword": { + "dark": "darkRedBright", + "light": "lightRed" + }, + "syntaxFunction": { + "dark": "darkGreenBright", + "light": "lightGreen" + }, + "syntaxVariable": { + "dark": "darkBlueBright", + "light": "lightBlue" + }, + "syntaxString": { + "dark": "darkYellowBright", + "light": "lightYellow" + }, + "syntaxNumber": { + "dark": "darkPurpleBright", + "light": "lightPurple" + }, + "syntaxType": { + "dark": "darkAquaBright", + "light": "lightAqua" + }, + "syntaxOperator": { + "dark": "darkOrangeBright", + "light": "lightOrange" + }, + "syntaxPunctuation": { + "dark": "darkFg1", + "light": "lightFg1" + } } } diff --git a/packages/ui/src/theme/default-themes.ts b/packages/ui/src/theme/default-themes.ts index e90892a8e7e..d2c40c28dd2 100644 --- a/packages/ui/src/theme/default-themes.ts +++ b/packages/ui/src/theme/default-themes.ts @@ -12,6 +12,7 @@ import shadesOfPurpleThemeJson from "./themes/shadesofpurple.json" import nightowlThemeJson from "./themes/nightowl.json" import vesperThemeJson from "./themes/vesper.json" import carbonfoxThemeJson from "./themes/carbonfox.json" +import gruvboxThemeJson from "./themes/gruvbox.json" export const oc1Theme = oc1ThemeJson as DesktopTheme export const tokyonightTheme = tokyoThemeJson as DesktopTheme @@ -26,6 +27,7 @@ export const shadesOfPurpleTheme = shadesOfPurpleThemeJson as DesktopTheme export const nightowlTheme = nightowlThemeJson as DesktopTheme export const vesperTheme = vesperThemeJson as DesktopTheme export const carbonfoxTheme = carbonfoxThemeJson as DesktopTheme +export const gruvboxTheme = gruvboxThemeJson as DesktopTheme export const DEFAULT_THEMES: Record = { "oc-1": oc1Theme, @@ -41,4 +43,5 @@ export const DEFAULT_THEMES: Record = { nightowl: nightowlTheme, vesper: vesperTheme, carbonfox: carbonfoxTheme, + gruvbox: gruvboxTheme, } diff --git a/packages/ui/src/theme/themes/gruvbox.json b/packages/ui/src/theme/themes/gruvbox.json new file mode 100644 index 00000000000..cf87ccd5532 --- /dev/null +++ b/packages/ui/src/theme/themes/gruvbox.json @@ -0,0 +1,132 @@ +{ + "$schema": "https://opencode.ai/desktop-theme.json", + "name": "Gruvbox", + "id": "gruvbox", + "light": { + "seeds": { + "neutral": "#fbf1c7", + "primary": "#076678", + "success": "#79740e", + "warning": "#b57614", + "error": "#9d0006", + "info": "#8f3f71", + "interactive": "#076678", + "diffAdd": "#79740e", + "diffDelete": "#9d0006" + }, + "overrides": { + "background-base": "#fbf1c7", + "background-weak": "#f2e5bc", + "background-strong": "#f9f5d7", + "background-stronger": "#fdf9e8", + "surface-raised-stronger-non-alpha": "#fbfaf5", + "border-weak-base": "#d5c4a1", + "border-weak-hover": "#c9b897", + "border-weak-active": "#bdae93", + "border-weak-selected": "#b0a285", + "border-weak-disabled": "#f0e4b8", + "border-weak-focus": "#c4b590", + "border-base": "#bdae93", + "border-hover": "#b0a285", + "border-active": "#a89984", + "border-selected": "#928374", + "border-disabled": "#e5d9ad", + "border-focus": "#a89984", + "border-strong-base": "#7c6f64", + "border-strong-hover": "#6e6259", + "border-strong-active": "#665c54", + "border-strong-selected": "#5a524b", + "border-strong-disabled": "#c9bda1", + "border-strong-focus": "#665c54", + "surface-diff-add-base": "#dde3b1", + "surface-diff-delete-base": "#e8c7c3", + "surface-diff-hidden-base": "#ebdfb5", + "text-base": "#3c3836", + "text-weak": "#7c6f64", + "text-strong": "#282828", + "syntax-string": "#79740e", + "syntax-primitive": "#9d0006", + "syntax-property": "#076678", + "syntax-type": "#b57614", + "syntax-constant": "#8f3f71", + "syntax-info": "#427b58", + "markdown-heading": "#076678", + "markdown-text": "#3c3836", + "markdown-link": "#076678", + "markdown-link-text": "#427b58", + "markdown-code": "#79740e", + "markdown-block-quote": "#928374", + "markdown-emph": "#8f3f71", + "markdown-strong": "#af3a03", + "markdown-horizontal-rule": "#d5c4a1", + "markdown-list-item": "#076678", + "markdown-list-enumeration": "#427b58", + "markdown-image": "#076678", + "markdown-image-text": "#427b58", + "markdown-code-block": "#3c3836" + } + }, + "dark": { + "seeds": { + "neutral": "#282828", + "primary": "#83a598", + "success": "#b8bb26", + "warning": "#fabd2f", + "error": "#fb4934", + "info": "#d3869b", + "interactive": "#83a598", + "diffAdd": "#b8bb26", + "diffDelete": "#fb4934" + }, + "overrides": { + "background-base": "#282828", + "background-weak": "#32302f", + "background-strong": "#1d2021", + "background-stronger": "#141617", + "border-weak-base": "#504945", + "border-weak-hover": "#5a524b", + "border-weak-active": "#665c54", + "border-weak-selected": "#70665d", + "border-weak-disabled": "#1e1d1c", + "border-weak-focus": "#5e5650", + "border-base": "#665c54", + "border-hover": "#70665d", + "border-active": "#7c6f64", + "border-selected": "#928374", + "border-disabled": "#2a2827", + "border-focus": "#7c6f64", + "border-strong-base": "#928374", + "border-strong-hover": "#9d8e7f", + "border-strong-active": "#a89984", + "border-strong-selected": "#b3a48f", + "border-strong-disabled": "#3c3836", + "border-strong-focus": "#a89984", + "surface-diff-add-base": "#2a3325", + "surface-diff-delete-base": "#3c2222", + "surface-diff-hidden-base": "#32302f", + "text-base": "#ebdbb2", + "text-weak": "#a89984", + "text-strong": "#fbf1c7", + "syntax-string": "#b8bb26", + "syntax-primitive": "#fb4934", + "syntax-property": "#83a598", + "syntax-type": "#fabd2f", + "syntax-constant": "#d3869b", + "syntax-info": "#8ec07c", + "markdown-heading": "#83a598", + "markdown-text": "#ebdbb2", + "markdown-link": "#83a598", + "markdown-link-text": "#8ec07c", + "markdown-code": "#b8bb26", + "markdown-block-quote": "#928374", + "markdown-emph": "#d3869b", + "markdown-strong": "#fe8019", + "markdown-horizontal-rule": "#504945", + "markdown-list-item": "#83a598", + "markdown-list-enumeration": "#8ec07c", + "markdown-image": "#83a598", + "markdown-image-text": "#8ec07c", + "markdown-code-block": "#ebdbb2" + } + } +} From a132b2a138a7f7c5d6bc851d63be09227d2c794b Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 21 Jan 2026 16:17:35 -0500 Subject: [PATCH 309/426] Zen: disable autoreload by default --- packages/console/app/src/routes/stripe/webhook.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts index 4c3430193e4..c7f752327b4 100644 --- a/packages/console/app/src/routes/stripe/webhook.ts +++ b/packages/console/app/src/routes/stripe/webhook.ts @@ -87,7 +87,6 @@ export async function POST(input: APIEvent) { ...(customer?.customerID ? {} : { - reload: true, reloadError: null, timeReloadError: null, }), From 80c808d1866ab2fdcbc7f14c516754f287931780 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 21 Jan 2026 16:48:38 -0500 Subject: [PATCH 310/426] zen: show subscription usage in usage history --- .../app/src/routes/workspace/[id]/usage-section.module.css | 5 ++--- .../app/src/routes/workspace/[id]/usage-section.tsx | 7 ++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/console/app/src/routes/workspace/[id]/usage-section.module.css b/packages/console/app/src/routes/workspace/[id]/usage-section.module.css index 83c783a2f6f..00232de88f7 100644 --- a/packages/console/app/src/routes/workspace/[id]/usage-section.module.css +++ b/packages/console/app/src/routes/workspace/[id]/usage-section.module.css @@ -42,7 +42,7 @@ font-family: var(--font-mono); &[data-slot="usage-date"] { - color: var(--color-text); + color: var(--color-text-muted); } &[data-slot="usage-model"] { @@ -53,8 +53,7 @@ } &[data-slot="usage-cost"] { - color: var(--color-text); - font-weight: 500; + color: var(--color-text-muted); } [data-slot="tokens-with-breakdown"] { diff --git a/packages/console/app/src/routes/workspace/[id]/usage-section.tsx b/packages/console/app/src/routes/workspace/[id]/usage-section.tsx index 662b2227b43..3b02b1e7dfa 100644 --- a/packages/console/app/src/routes/workspace/[id]/usage-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/usage-section.tsx @@ -170,7 +170,12 @@ export function UsageSection() {
    - ${usage.enrichment?.plan === "sub" ? "0.0000" : ((usage.cost ?? 0) / 100000000).toFixed(4)} + ${((usage.cost ?? 0) / 100000000).toFixed(4)}} + > + subscription (${((usage.cost ?? 0) / 100000000).toFixed(4)}) + ) From 20b6cc279f5a0d89d2e1fbeb6c66f7837190ab16 Mon Sep 17 00:00:00 2001 From: Frank Date: Wed, 21 Jan 2026 17:21:31 -0500 Subject: [PATCH 311/426] zen: show subscription usage in graph --- .../routes/workspace/[id]/graph-section.tsx | 86 +++++++++++++------ 1 file changed, 60 insertions(+), 26 deletions(-) diff --git a/packages/console/app/src/routes/workspace/[id]/graph-section.tsx b/packages/console/app/src/routes/workspace/[id]/graph-section.tsx index 5df96c8fd79..93cba204207 100644 --- a/packages/console/app/src/routes/workspace/[id]/graph-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/graph-section.tsx @@ -28,8 +28,6 @@ async function getCosts(workspaceID: string, year: number, month: number) { return withActor(async () => { const startDate = new Date(year, month, 1) const endDate = new Date(year, month + 1, 0) - - // First query: get usage data without joining keys const usageData = await Database.use((tx) => tx .select({ @@ -37,6 +35,7 @@ async function getCosts(workspaceID: string, year: number, month: number) { model: UsageTable.model, totalCost: sum(UsageTable.cost), keyId: UsageTable.keyID, + subscription: sql`COALESCE(JSON_EXTRACT(${UsageTable.enrichment}, '$.plan') = 'sub', false)`, }) .from(UsageTable) .where( @@ -44,14 +43,19 @@ async function getCosts(workspaceID: string, year: number, month: number) { eq(UsageTable.workspaceID, workspaceID), gte(UsageTable.timeCreated, startDate), lte(UsageTable.timeCreated, endDate), - or(isNull(UsageTable.enrichment), sql`JSON_EXTRACT(${UsageTable.enrichment}, '$.plan') != 'sub'`), ), ) - .groupBy(sql`DATE(${UsageTable.timeCreated})`, UsageTable.model, UsageTable.keyID) + .groupBy( + sql`DATE(${UsageTable.timeCreated})`, + UsageTable.model, + UsageTable.keyID, + sql`COALESCE(JSON_EXTRACT(${UsageTable.enrichment}, '$.plan') = 'sub', false)`, + ) .then((x) => x.map((r) => ({ ...r, totalCost: r.totalCost ? parseInt(r.totalCost) : 0, + subscription: Boolean(r.subscription), })), ), ) @@ -213,29 +217,54 @@ export function GraphSection() { const colorTextSecondary = styles.getPropertyValue("--color-text-secondary").trim() const colorBorder = styles.getPropertyValue("--color-border").trim() - const dailyData = new Map>() - for (const dateKey of dates) dailyData.set(dateKey, new Map()) + const dailyDataSub = new Map>() + const dailyDataNonSub = new Map>() + for (const dateKey of dates) { + dailyDataSub.set(dateKey, new Map()) + dailyDataNonSub.set(dateKey, new Map()) + } data.usage .filter((row) => (store.key ? row.keyId === store.key : true)) .forEach((row) => { - const dayMap = dailyData.get(row.date) + const targetMap = row.subscription ? dailyDataSub : dailyDataNonSub + const dayMap = targetMap.get(row.date) if (!dayMap) return dayMap.set(row.model, (dayMap.get(row.model) ?? 0) + row.totalCost) }) const filteredModels = store.model === null ? getModels() : [store.model] - const datasets = filteredModels.map((model) => { - const color = getModelColor(model) - return { - label: model, - data: dates.map((date) => (dailyData.get(date)?.get(model) || 0) / 100_000_000), - backgroundColor: color, - hoverBackgroundColor: color, - borderWidth: 0, - } - }) + // Create datasets: non-subscription first, then subscription (with hatched pattern effect via opacity) + const datasets = [ + ...filteredModels + .filter((model) => dates.some((date) => (dailyDataNonSub.get(date)?.get(model) || 0) > 0)) + .map((model) => { + const color = getModelColor(model) + return { + label: model, + data: dates.map((date) => (dailyDataNonSub.get(date)?.get(model) || 0) / 100_000_000), + backgroundColor: color, + hoverBackgroundColor: color, + borderWidth: 0, + stack: "usage", + } + }), + ...filteredModels + .filter((model) => dates.some((date) => (dailyDataSub.get(date)?.get(model) || 0) > 0)) + .map((model) => { + const color = getModelColor(model) + return { + label: `${model} (sub)`, + data: dates.map((date) => (dailyDataSub.get(date)?.get(model) || 0) / 100_000_000), + backgroundColor: addOpacityToColor(color, 0.5), + hoverBackgroundColor: addOpacityToColor(color, 0.7), + borderWidth: 1, + borderColor: color, + stack: "subscription", + } + }), + ] return { type: "bar", @@ -292,12 +321,9 @@ export function GraphSection() { borderWidth: 1, padding: 12, displayColors: true, + filter: (item) => (item.parsed.y ?? 0) > 0, callbacks: { - label: (context) => { - const value = context.parsed.y - if (!value || value === 0) return - return `${context.dataset.label}: $${value.toFixed(2)}` - }, + label: (context) => `${context.dataset.label}: $${(context.parsed.y ?? 0).toFixed(2)}`, }, }, legend: { @@ -317,8 +343,12 @@ export function GraphSection() { const chart = legend.chart chart.data.datasets?.forEach((dataset, i) => { const meta = chart.getDatasetMeta(i) - const baseColor = getModelColor(dataset.label || "") - const color = i === legendItem.datasetIndex ? baseColor : addOpacityToColor(baseColor, 0.3) + const label = dataset.label || "" + const isSub = label.endsWith(" (sub)") + const model = isSub ? label.slice(0, -6) : label + const baseColor = getModelColor(model) + const originalColor = isSub ? addOpacityToColor(baseColor, 0.5) : baseColor + const color = i === legendItem.datasetIndex ? originalColor : addOpacityToColor(baseColor, 0.15) meta.data.forEach((bar: any) => { bar.options.backgroundColor = color }) @@ -329,9 +359,13 @@ export function GraphSection() { const chart = legend.chart chart.data.datasets?.forEach((dataset, i) => { const meta = chart.getDatasetMeta(i) - const baseColor = getModelColor(dataset.label || "") + const label = dataset.label || "" + const isSub = label.endsWith(" (sub)") + const model = isSub ? label.slice(0, -6) : label + const baseColor = getModelColor(model) + const color = isSub ? addOpacityToColor(baseColor, 0.5) : baseColor meta.data.forEach((bar: any) => { - bar.options.backgroundColor = baseColor + bar.options.backgroundColor = color }) }) chart.update("none") From 19fe3e265ad59e7e65df4b3d86b09ec88f454bde Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 21 Jan 2026 16:33:43 -0600 Subject: [PATCH 312/426] mark subagent sessions as agent initiated to ensure they dont count against quota (got the ok from copilot team) --- packages/opencode/src/plugin/copilot.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/opencode/src/plugin/copilot.ts b/packages/opencode/src/plugin/copilot.ts index bf0f91dcdcc..369acf800f3 100644 --- a/packages/opencode/src/plugin/copilot.ts +++ b/packages/opencode/src/plugin/copilot.ts @@ -276,8 +276,8 @@ export async function CopilotAuthPlugin(input: PluginInput): Promise { }) .catch(() => undefined) if (!session || !session.data.parentID) return - // TODO: mark subagent sessions as agent initiated once copilot gives ok - // output.headers["x-initiator"] = "agent" + // mark subagent sessions as agent initiated matching standard that other copilot tools have + output.headers["x-initiator"] = "agent" }, } } From a0d71bf8ef6df0d58ccb9aa458e028ce8204c26a Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Wed, 21 Jan 2026 18:35:22 -0500 Subject: [PATCH 313/426] feat: add daily Discord recaps for issues and PRs (#9904) --- .github/workflows/daily-issues-recap.yml | 166 +++++++++++++++++++++ .github/workflows/daily-pr-recap.yml | 174 +++++++++++++++++++++++ 2 files changed, 340 insertions(+) create mode 100644 .github/workflows/daily-issues-recap.yml create mode 100644 .github/workflows/daily-pr-recap.yml diff --git a/.github/workflows/daily-issues-recap.yml b/.github/workflows/daily-issues-recap.yml new file mode 100644 index 00000000000..a333e5365f9 --- /dev/null +++ b/.github/workflows/daily-issues-recap.yml @@ -0,0 +1,166 @@ +name: Daily Issues Recap + +on: + schedule: + # Run at 6 PM EST (23:00 UTC, or 22:00 UTC during daylight saving) + - cron: "0 23 * * *" + workflow_dispatch: # Allow manual trigger for testing + +jobs: + daily-recap: + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + issues: read + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - uses: ./.github/actions/setup-bun + + - name: Install opencode + run: curl -fsSL https://opencode.ai/install | bash + + - name: Generate daily issues recap + id: recap + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENCODE_PERMISSION: | + { + "bash": { + "*": "deny", + "gh issue*": "allow", + "gh search*": "allow" + }, + "webfetch": "deny", + "edit": "deny", + "write": "deny" + } + run: | + # Get today's date range + TODAY=$(date -u +%Y-%m-%d) + + opencode run -m opencode/claude-sonnet-4-5 "Generate a daily issues recap for the OpenCode repository. + + TODAY'S DATE: ${TODAY} + + STEP 1: Gather today's issues + Search for all issues created today (${TODAY}) using: + gh issue list --repo ${{ github.repository }} --state all --search \"created:${TODAY}\" --json number,title,body,labels,state,comments,createdAt,author --limit 500 + + STEP 2: Analyze and categorize + For each issue created today, categorize it: + + **Severity Assessment:** + - CRITICAL: Crashes, data loss, security issues, blocks major functionality + - HIGH: Significant bugs affecting many users, important features broken + - MEDIUM: Bugs with workarounds, minor features broken + - LOW: Minor issues, cosmetic, nice-to-haves + + **Activity Assessment:** + - Note issues with high comment counts or engagement + - Note issues from repeat reporters (check if author has filed before) + + STEP 3: Cross-reference with existing issues + For issues that seem like feature requests or recurring bugs: + - Search for similar older issues to identify patterns + - Note if this is a frequently requested feature + - Identify any issues that are duplicates of long-standing requests + + STEP 4: Generate the recap + Create a structured recap with these sections: + + ===DISCORD_START=== + **Daily Issues Recap - ${TODAY}** + + **Summary Stats** + - Total issues opened today: [count] + - By category: [bugs/features/questions] + + **Critical/High Priority Issues** + [List any CRITICAL or HIGH severity issues with brief descriptions and issue numbers] + + **Most Active/Discussed** + [Issues with significant engagement or from active community members] + + **Trending Topics** + [Patterns noticed - e.g., 'Multiple reports about X', 'Continued interest in Y feature'] + + **Duplicates & Related** + [Issues that relate to existing open issues] + ===DISCORD_END=== + + STEP 5: Format for Discord + Format the recap as a Discord-compatible message: + - Use Discord markdown (**, __, etc.) + - BE EXTREMELY CONCISE - this is an EOD summary, not a detailed report + - Use hyperlinked issue numbers with suppressed embeds: [#1234]() + - Group related issues on single lines where possible + - Add emoji sparingly for critical items only + - HARD LIMIT: Keep under 1800 characters total + - Skip sections that have nothing notable (e.g., if no critical issues, omit that section) + - Prioritize signal over completeness - only surface what matters + + OUTPUT: Output ONLY the content between ===DISCORD_START=== and ===DISCORD_END=== markers. Include the markers so I can extract it." > /tmp/recap_raw.txt + + # Extract only the Discord message between markers + sed -n '/===DISCORD_START===/,/===DISCORD_END===/p' /tmp/recap_raw.txt | grep -v '===DISCORD' > /tmp/recap.txt + + echo "recap_file=/tmp/recap.txt" >> $GITHUB_OUTPUT + + - name: Post to Discord + env: + DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_ISSUES_WEBHOOK_URL }} + run: | + if [ -z "$DISCORD_WEBHOOK_URL" ]; then + echo "Warning: DISCORD_ISSUES_WEBHOOK_URL secret not set, skipping Discord post" + cat /tmp/recap.txt + exit 0 + fi + + # Read the recap + RECAP_RAW=$(cat /tmp/recap.txt) + RECAP_LENGTH=${#RECAP_RAW} + + echo "Recap length: ${RECAP_LENGTH} chars" + + # Function to post a message to Discord + post_to_discord() { + local msg="$1" + local content=$(echo "$msg" | jq -Rs '.') + curl -s -H "Content-Type: application/json" \ + -X POST \ + -d "{\"content\": ${content}}" \ + "$DISCORD_WEBHOOK_URL" + sleep 1 + } + + # If under limit, send as single message + if [ "$RECAP_LENGTH" -le 1950 ]; then + post_to_discord "$RECAP_RAW" + else + echo "Splitting into multiple messages..." + remaining="$RECAP_RAW" + while [ ${#remaining} -gt 0 ]; do + if [ ${#remaining} -le 1950 ]; then + post_to_discord "$remaining" + break + else + chunk="${remaining:0:1900}" + last_newline=$(echo "$chunk" | grep -bo $'\n' | tail -1 | cut -d: -f1) + if [ -n "$last_newline" ] && [ "$last_newline" -gt 500 ]; then + chunk="${remaining:0:$last_newline}" + remaining="${remaining:$((last_newline+1))}" + else + chunk="${remaining:0:1900}" + remaining="${remaining:1900}" + fi + post_to_discord "$chunk" + fi + done + fi + + echo "Posted daily recap to Discord" diff --git a/.github/workflows/daily-pr-recap.yml b/.github/workflows/daily-pr-recap.yml new file mode 100644 index 00000000000..5d9597f77b4 --- /dev/null +++ b/.github/workflows/daily-pr-recap.yml @@ -0,0 +1,174 @@ +name: Daily PR Recap + +on: + schedule: + # Run at 5pm EST (22:00 UTC, or 21:00 UTC during daylight saving) + - cron: "0 22 * * *" + workflow_dispatch: # Allow manual trigger for testing + +jobs: + pr-recap: + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: read + pull-requests: read + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - uses: ./.github/actions/setup-bun + + - name: Install opencode + run: curl -fsSL https://opencode.ai/install | bash + + - name: Generate daily PR recap + id: recap + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OPENCODE_PERMISSION: | + { + "bash": { + "*": "deny", + "gh pr*": "allow", + "gh search*": "allow" + }, + "webfetch": "deny", + "edit": "deny", + "write": "deny" + } + run: | + TODAY=$(date -u +%Y-%m-%d) + + opencode run -m opencode/claude-sonnet-4-5 "Generate a daily PR activity recap for the OpenCode repository. + + TODAY'S DATE: ${TODAY} + + STEP 1: Gather PR data + Run these commands to gather PR information: + + # Open PRs with bug fix labels or 'fix' in title + gh pr list --repo ${{ github.repository }} --state open --search \"fix in:title\" --json number,title,author,labels,createdAt,updatedAt,reviewDecision,isDraft,additions,deletions --limit 100 + + # PRs with high activity (get comments separately to filter bots) + gh pr list --repo ${{ github.repository }} --state open --json number,title,author,labels,createdAt,updatedAt,reviewDecision,isDraft --limit 100 + + # Recently merged bug fixes + gh pr list --repo ${{ github.repository }} --state merged --search \"merged:${TODAY} fix in:title\" --json number,title,author,mergedAt --limit 50 + + STEP 2: For high-activity PRs, check comment counts + For promising PRs, run: + gh pr view [NUMBER] --repo ${{ github.repository }} --json comments --jq '[.comments[] | select(.author.login != \"copilot-pull-request-reviewer\" and .author.login != \"github-actions\")] | length' + + IMPORTANT: When counting comments/activity, EXCLUDE these bot accounts: + - copilot-pull-request-reviewer + - github-actions + + STEP 3: Identify what matters + + **Bug Fixes We Might Miss:** + - PRs with 'fix' or 'bug' in title that have been open 2+ days + - Small bug fixes (< 100 lines changed) that are easy to review + - Bug fixes from community contributors (not core team) + + **High Activity PRs:** + - PRs with 5+ human comments (excluding bots listed above) + - PRs with back-and-forth discussion + - Controversial or complex changes getting attention + + **Quick Wins:** + - Small PRs (< 50 lines) that are approved or nearly approved + - Bug fixes that just need a final review + + STEP 4: Generate the recap + Create a structured recap: + + ===DISCORD_START=== + **Daily PR Recap - ${TODAY}** + + **Bug Fixes Needing Attention** + [PRs fixing bugs that might be overlooked - prioritize by age and size] + + **High Activity** (5+ human comments) + [PRs with significant discussion - exclude bot comments] + + **Quick Wins** (small, ready to merge) + [Easy PRs that just need a review/merge] + + **Merged Bug Fixes Today** + [What bug fixes shipped] + ===DISCORD_END=== + + STEP 5: Format for Discord + - Use Discord markdown (**, __, etc.) + - BE EXTREMELY CONCISE - surface what we might miss + - Use hyperlinked PR numbers with suppressed embeds: [#1234]() + - Include PR author: [#1234]() (@author) + - For bug fixes, add brief description of what it fixes + - Show line count for quick wins: \"(+15/-3 lines)\" + - HARD LIMIT: Keep under 1800 characters total + - Skip empty sections + - Focus on PRs that need human eyes + + OUTPUT: Output ONLY the content between ===DISCORD_START=== and ===DISCORD_END=== markers. Include the markers so I can extract it." > /tmp/pr_recap_raw.txt + + # Extract only the Discord message between markers + sed -n '/===DISCORD_START===/,/===DISCORD_END===/p' /tmp/pr_recap_raw.txt | grep -v '===DISCORD' > /tmp/pr_recap.txt + + echo "recap_file=/tmp/pr_recap.txt" >> $GITHUB_OUTPUT + + - name: Post to Discord + env: + DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_ISSUES_WEBHOOK_URL }} + run: | + if [ -z "$DISCORD_WEBHOOK_URL" ]; then + echo "Warning: DISCORD_ISSUES_WEBHOOK_URL secret not set, skipping Discord post" + cat /tmp/pr_recap.txt + exit 0 + fi + + # Read the recap + RECAP_RAW=$(cat /tmp/pr_recap.txt) + RECAP_LENGTH=${#RECAP_RAW} + + echo "Recap length: ${RECAP_LENGTH} chars" + + # Function to post a message to Discord + post_to_discord() { + local msg="$1" + local content=$(echo "$msg" | jq -Rs '.') + curl -s -H "Content-Type: application/json" \ + -X POST \ + -d "{\"content\": ${content}}" \ + "$DISCORD_WEBHOOK_URL" + sleep 1 + } + + # If under limit, send as single message + if [ "$RECAP_LENGTH" -le 1950 ]; then + post_to_discord "$RECAP_RAW" + else + echo "Splitting into multiple messages..." + remaining="$RECAP_RAW" + while [ ${#remaining} -gt 0 ]; do + if [ ${#remaining} -le 1950 ]; then + post_to_discord "$remaining" + break + else + chunk="${remaining:0:1900}" + last_newline=$(echo "$chunk" | grep -bo $'\n' | tail -1 | cut -d: -f1) + if [ -n "$last_newline" ] && [ "$last_newline" -gt 500 ]; then + chunk="${remaining:0:$last_newline}" + remaining="${remaining:$((last_newline+1))}" + else + chunk="${remaining:0:1900}" + remaining="${remaining:1900}" + fi + post_to_discord "$chunk" + fi + done + fi + + echo "Posted daily PR recap to Discord" From 877b0412c91b92f66f7bb3ee229304e583bc3d91 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:18:20 -0600 Subject: [PATCH 314/426] fix(app): use message diffs, not session diffs --- packages/ui/src/components/session-turn.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/ui/src/components/session-turn.tsx b/packages/ui/src/components/session-turn.tsx index 7bca641aef1..06e4218828e 100644 --- a/packages/ui/src/components/session-turn.tsx +++ b/packages/ui/src/components/session-turn.tsx @@ -7,6 +7,7 @@ import { TextPart, ToolPart, } from "@opencode-ai/sdk/v2/client" +import { type FileDiff } from "@opencode-ai/sdk/v2" import { useData } from "../context" import { useDiffComponent } from "../context/diff" import { type UiI18nKey, type UiI18nParams, useI18n } from "../context/i18n" @@ -146,6 +147,7 @@ export function SessionTurn( const emptyAssistant: AssistantMessage[] = [] const emptyPermissions: PermissionRequest[] = [] const emptyPermissionParts: { part: ToolPart; message: AssistantMessage }[] = [] + const emptyDiffs: FileDiff[] = [] const idle = { type: "idle" as const } const allMessages = createMemo(() => data.store.message[props.sessionID] ?? emptyMessages) @@ -350,7 +352,8 @@ export function SessionTurn( const response = createMemo(() => lastTextPart()?.text) const responsePartId = createMemo(() => lastTextPart()?.id) - const hasDiffs = createMemo(() => (data.store.session_diff?.[props.sessionID]?.length ?? 0) > 0) + const messageDiffs = createMemo(() => message()?.summary?.diffs ?? emptyDiffs) + const hasDiffs = createMemo(() => messageDiffs().length > 0) const hideResponsePart = createMemo(() => !working() && !!responsePartId()) const [rootRef, setRootRef] = createSignal() @@ -606,7 +609,7 @@ export function SessionTurn( setStore("diffsOpen", value) }} > - + {(diff) => ( @@ -652,13 +655,13 @@ export function SessionTurn( )} - store.diffLimit}> + store.diffLimit}> From 59ceca3e51c57c21970f088b9d16966a4cf4a77e Mon Sep 17 00:00:00 2001 From: opencode Date: Thu, 22 Jan 2026 00:22:10 +0000 Subject: [PATCH 315/426] release: v1.1.31 --- bun.lock | 30 +++++++++++++------------- packages/app/package.json | 2 +- packages/console/app/package.json | 2 +- packages/console/core/package.json | 2 +- packages/console/function/package.json | 2 +- packages/console/mail/package.json | 2 +- packages/desktop/package.json | 2 +- packages/enterprise/package.json | 2 +- packages/extensions/zed/extension.toml | 12 +++++------ packages/function/package.json | 2 +- packages/opencode/package.json | 2 +- packages/plugin/package.json | 4 ++-- packages/sdk/js/package.json | 4 ++-- packages/slack/package.json | 2 +- packages/ui/package.json | 2 +- packages/util/package.json | 2 +- packages/web/package.json | 2 +- sdks/vscode/package.json | 2 +- 18 files changed, 39 insertions(+), 39 deletions(-) diff --git a/bun.lock b/bun.lock index ea41ee49e68..9d7d15a1d15 100644 --- a/bun.lock +++ b/bun.lock @@ -23,7 +23,7 @@ }, "packages/app": { "name": "@opencode-ai/app", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -73,7 +73,7 @@ }, "packages/console/app": { "name": "@opencode-ai/console-app", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@cloudflare/vite-plugin": "1.15.2", "@ibm/plex": "6.4.1", @@ -107,7 +107,7 @@ }, "packages/console/core": { "name": "@opencode-ai/console-core", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@aws-sdk/client-sts": "3.782.0", "@jsx-email/render": "1.1.1", @@ -134,7 +134,7 @@ }, "packages/console/function": { "name": "@opencode-ai/console-function", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@ai-sdk/anthropic": "2.0.0", "@ai-sdk/openai": "2.0.2", @@ -158,7 +158,7 @@ }, "packages/console/mail": { "name": "@opencode-ai/console-mail", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", @@ -182,7 +182,7 @@ }, "packages/desktop": { "name": "@opencode-ai/desktop", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@opencode-ai/app": "workspace:*", "@opencode-ai/ui": "workspace:*", @@ -211,7 +211,7 @@ }, "packages/enterprise": { "name": "@opencode-ai/enterprise", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", @@ -240,7 +240,7 @@ }, "packages/function": { "name": "@opencode-ai/function", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@octokit/auth-app": "8.0.1", "@octokit/rest": "catalog:", @@ -256,7 +256,7 @@ }, "packages/opencode": { "name": "opencode", - "version": "1.1.30", + "version": "1.1.31", "bin": { "opencode": "./bin/opencode", }, @@ -360,7 +360,7 @@ }, "packages/plugin": { "name": "@opencode-ai/plugin", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@opencode-ai/sdk": "workspace:*", "zod": "catalog:", @@ -380,7 +380,7 @@ }, "packages/sdk/js": { "name": "@opencode-ai/sdk", - "version": "1.1.30", + "version": "1.1.31", "devDependencies": { "@hey-api/openapi-ts": "0.90.4", "@tsconfig/node22": "catalog:", @@ -391,7 +391,7 @@ }, "packages/slack": { "name": "@opencode-ai/slack", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@opencode-ai/sdk": "workspace:*", "@slack/bolt": "^3.17.1", @@ -404,7 +404,7 @@ }, "packages/ui": { "name": "@opencode-ai/ui", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@kobalte/core": "catalog:", "@opencode-ai/sdk": "workspace:*", @@ -445,7 +445,7 @@ }, "packages/util": { "name": "@opencode-ai/util", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "zod": "catalog:", }, @@ -456,7 +456,7 @@ }, "packages/web": { "name": "@opencode-ai/web", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@astrojs/cloudflare": "12.6.3", "@astrojs/markdown-remark": "6.3.1", diff --git a/packages/app/package.json b/packages/app/package.json index 155dfebd9f4..3c4ae86759d 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/app", - "version": "1.1.30", + "version": "1.1.31", "description": "", "type": "module", "exports": { diff --git a/packages/console/app/package.json b/packages/console/app/package.json index 237b6630f2f..c4a9e61a965 100644 --- a/packages/console/app/package.json +++ b/packages/console/app/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-app", - "version": "1.1.30", + "version": "1.1.31", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/console/core/package.json b/packages/console/core/package.json index 3aa1f9e8acd..756b718ac3e 100644 --- a/packages/console/core/package.json +++ b/packages/console/core/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/console-core", - "version": "1.1.30", + "version": "1.1.31", "private": true, "type": "module", "license": "MIT", diff --git a/packages/console/function/package.json b/packages/console/function/package.json index 37a09255c1d..686ab51ad4d 100644 --- a/packages/console/function/package.json +++ b/packages/console/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-function", - "version": "1.1.30", + "version": "1.1.31", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/console/mail/package.json b/packages/console/mail/package.json index 882e1f21a5c..cde91c698b6 100644 --- a/packages/console/mail/package.json +++ b/packages/console/mail/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/console-mail", - "version": "1.1.30", + "version": "1.1.31", "dependencies": { "@jsx-email/all": "2.2.3", "@jsx-email/cli": "1.4.3", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 5d93e3295cc..c4a76f6a4ef 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@opencode-ai/desktop", "private": true, - "version": "1.1.30", + "version": "1.1.31", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/enterprise/package.json b/packages/enterprise/package.json index 2cfcc6c2d70..75f42f6cf9f 100644 --- a/packages/enterprise/package.json +++ b/packages/enterprise/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/enterprise", - "version": "1.1.30", + "version": "1.1.31", "private": true, "type": "module", "license": "MIT", diff --git a/packages/extensions/zed/extension.toml b/packages/extensions/zed/extension.toml index 779641e56c5..07e68e14608 100644 --- a/packages/extensions/zed/extension.toml +++ b/packages/extensions/zed/extension.toml @@ -1,7 +1,7 @@ id = "opencode" name = "OpenCode" description = "The open source coding agent." -version = "1.1.30" +version = "1.1.31" schema_version = 1 authors = ["Anomaly"] repository = "https://github.com/anomalyco/opencode" @@ -11,26 +11,26 @@ name = "OpenCode" icon = "./icons/opencode.svg" [agent_servers.opencode.targets.darwin-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-darwin-arm64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.31/opencode-darwin-arm64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.darwin-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-darwin-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.31/opencode-darwin-x64.zip" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-aarch64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-linux-arm64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.31/opencode-linux-arm64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.linux-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-linux-x64.tar.gz" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.31/opencode-linux-x64.tar.gz" cmd = "./opencode" args = ["acp"] [agent_servers.opencode.targets.windows-x86_64] -archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.30/opencode-windows-x64.zip" +archive = "https://github.com/anomalyco/opencode/releases/download/v1.1.31/opencode-windows-x64.zip" cmd = "./opencode.exe" args = ["acp"] diff --git a/packages/function/package.json b/packages/function/package.json index a776dfb97ea..abbdf878b81 100644 --- a/packages/function/package.json +++ b/packages/function/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/function", - "version": "1.1.30", + "version": "1.1.31", "$schema": "https://json.schemastore.org/package.json", "private": true, "type": "module", diff --git a/packages/opencode/package.json b/packages/opencode/package.json index 023f1c2d111..063fa9a6d76 100644 --- a/packages/opencode/package.json +++ b/packages/opencode/package.json @@ -1,6 +1,6 @@ { "$schema": "https://json.schemastore.org/package.json", - "version": "1.1.30", + "version": "1.1.31", "name": "opencode", "type": "module", "license": "MIT", diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 653a6361a39..28896d5768a 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/plugin", - "version": "1.1.30", + "version": "1.1.31", "type": "module", "license": "MIT", "scripts": { @@ -25,4 +25,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 ef4f0e485e2..4ac9997485e 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package.json", "name": "@opencode-ai/sdk", - "version": "1.1.30", + "version": "1.1.31", "type": "module", "license": "MIT", "scripts": { @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} +} \ No newline at end of file diff --git a/packages/slack/package.json b/packages/slack/package.json index d173904eea1..d076b0bd2e7 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/slack", - "version": "1.1.30", + "version": "1.1.31", "type": "module", "license": "MIT", "scripts": { diff --git a/packages/ui/package.json b/packages/ui/package.json index 04d92b18e56..280e288c640 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/ui", - "version": "1.1.30", + "version": "1.1.31", "type": "module", "license": "MIT", "exports": { diff --git a/packages/util/package.json b/packages/util/package.json index 989db6128ee..f46e750a169 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@opencode-ai/util", - "version": "1.1.30", + "version": "1.1.31", "private": true, "type": "module", "license": "MIT", diff --git a/packages/web/package.json b/packages/web/package.json index e216f2456c9..45a2cec1853 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -2,7 +2,7 @@ "name": "@opencode-ai/web", "type": "module", "license": "MIT", - "version": "1.1.30", + "version": "1.1.31", "scripts": { "dev": "astro dev", "dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev", diff --git a/sdks/vscode/package.json b/sdks/vscode/package.json index 67ebdecb1f1..cd5694c3f0a 100644 --- a/sdks/vscode/package.json +++ b/sdks/vscode/package.json @@ -2,7 +2,7 @@ "name": "opencode", "displayName": "opencode", "description": "opencode for VS Code", - "version": "1.1.30", + "version": "1.1.31", "publisher": "sst-dev", "repository": { "type": "git", From 8c230fee629e74281f7fca91f1968f2ff4d04220 Mon Sep 17 00:00:00 2001 From: Ryan Vogel Date: Wed, 21 Jan 2026 19:21:57 -0500 Subject: [PATCH 316/426] fix: scope PR recap to only PRs from today (#9905) --- .github/workflows/daily-pr-recap.yml | 45 +++++++++++++--------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/.github/workflows/daily-pr-recap.yml b/.github/workflows/daily-pr-recap.yml index 5d9597f77b4..7c8bab395f6 100644 --- a/.github/workflows/daily-pr-recap.yml +++ b/.github/workflows/daily-pr-recap.yml @@ -47,16 +47,15 @@ jobs: TODAY'S DATE: ${TODAY} STEP 1: Gather PR data - Run these commands to gather PR information: + Run these commands to gather PR information. ONLY include PRs created or updated TODAY (${TODAY}): - # Open PRs with bug fix labels or 'fix' in title - gh pr list --repo ${{ github.repository }} --state open --search \"fix in:title\" --json number,title,author,labels,createdAt,updatedAt,reviewDecision,isDraft,additions,deletions --limit 100 + # PRs created today + gh pr list --repo ${{ github.repository }} --state all --search \"created:${TODAY}\" --json number,title,author,labels,createdAt,updatedAt,reviewDecision,isDraft,additions,deletions --limit 100 + + # PRs with activity today (updated today) + gh pr list --repo ${{ github.repository }} --state open --search \"updated:${TODAY}\" --json number,title,author,labels,createdAt,updatedAt,reviewDecision,isDraft,additions,deletions --limit 100 - # PRs with high activity (get comments separately to filter bots) - gh pr list --repo ${{ github.repository }} --state open --json number,title,author,labels,createdAt,updatedAt,reviewDecision,isDraft --limit 100 - # Recently merged bug fixes - gh pr list --repo ${{ github.repository }} --state merged --search \"merged:${TODAY} fix in:title\" --json number,title,author,mergedAt --limit 50 STEP 2: For high-activity PRs, check comment counts For promising PRs, run: @@ -66,21 +65,20 @@ jobs: - copilot-pull-request-reviewer - github-actions - STEP 3: Identify what matters + STEP 3: Identify what matters (ONLY from today's PRs) - **Bug Fixes We Might Miss:** - - PRs with 'fix' or 'bug' in title that have been open 2+ days + **Bug Fixes From Today:** + - PRs with 'fix' or 'bug' in title created/updated today - Small bug fixes (< 100 lines changed) that are easy to review - - Bug fixes from community contributors (not core team) + - Bug fixes from community contributors - **High Activity PRs:** - - PRs with 5+ human comments (excluding bots listed above) - - PRs with back-and-forth discussion - - Controversial or complex changes getting attention + **High Activity Today:** + - PRs with significant human comments today (excluding bots listed above) + - PRs with back-and-forth discussion today **Quick Wins:** - Small PRs (< 50 lines) that are approved or nearly approved - - Bug fixes that just need a final review + - PRs that just need a final review STEP 4: Generate the recap Create a structured recap: @@ -88,17 +86,14 @@ jobs: ===DISCORD_START=== **Daily PR Recap - ${TODAY}** - **Bug Fixes Needing Attention** - [PRs fixing bugs that might be overlooked - prioritize by age and size] - - **High Activity** (5+ human comments) - [PRs with significant discussion - exclude bot comments] + **New PRs Today** + [PRs opened today - group by type: bug fixes, features, etc.] - **Quick Wins** (small, ready to merge) - [Easy PRs that just need a review/merge] + **Active PRs Today** + [PRs with activity/updates today - significant discussion] - **Merged Bug Fixes Today** - [What bug fixes shipped] + **Quick Wins** + [Small PRs ready to merge] ===DISCORD_END=== STEP 5: Format for Discord From f7c5b62ba38a9f41cd0afc861c79e28703c12517 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 22 Jan 2026 00:22:40 +0000 Subject: [PATCH 317/426] chore: generate --- packages/plugin/package.json | 2 +- packages/sdk/js/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/plugin/package.json b/packages/plugin/package.json index 28896d5768a..8b6cc94b846 100644 --- a/packages/plugin/package.json +++ b/packages/plugin/package.json @@ -25,4 +25,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 4ac9997485e..6e62f632f8a 100644 --- a/packages/sdk/js/package.json +++ b/packages/sdk/js/package.json @@ -30,4 +30,4 @@ "publishConfig": { "directory": "dist" } -} \ No newline at end of file +} From 6d574549bcd6f0b210ba4e7a0c08d3f03f30795c Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Wed, 21 Jan 2026 18:46:41 -0600 Subject: [PATCH 318/426] fix: include _noop tool in activeTools for LiteLLM proxy compatibility (#9912) --- packages/opencode/src/session/llm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/session/llm.ts b/packages/opencode/src/session/llm.ts index e73f20403f3..55c9c452473 100644 --- a/packages/opencode/src/session/llm.ts +++ b/packages/opencode/src/session/llm.ts @@ -208,7 +208,7 @@ export namespace LLM { topP: params.topP, topK: params.topK, providerOptions: ProviderTransform.providerOptions(input.model, params.options), - activeTools: Object.keys(tools).filter((x) => x !== "invalid" && x !== "_noop"), + activeTools: Object.keys(tools).filter((x) => x !== "invalid"), tools, maxOutputTokens, abortSignal: input.abort, From 65e267ed3a83168848da5c040b56e28400430c6e Mon Sep 17 00:00:00 2001 From: dpuyosa Date: Thu, 22 Jan 2026 03:28:04 +0100 Subject: [PATCH 319/426] feat: Add promptCacheKey for Venice provider (#9915) --- packages/opencode/src/provider/transform.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts index 6148b66b5c9..8b6bba903aa 100644 --- a/packages/opencode/src/provider/transform.ts +++ b/packages/opencode/src/provider/transform.ts @@ -598,6 +598,11 @@ export namespace ProviderTransform { result["reasoningSummary"] = "auto" } } + + if (input.model.providerID === "venice") { + result["promptCacheKey"] = input.sessionID + } + return result } From af1e2887bddc0a0379bb6e580dc4a7dce84f022d Mon Sep 17 00:00:00 2001 From: Ronan Kearns <90280289+kearns-cu@users.noreply.github.com> Date: Wed, 21 Jan 2026 22:09:08 -0500 Subject: [PATCH 320/426] fix(app): open terminal pane when creating new terminal (#9926) --- packages/app/src/pages/session.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 560c133308f..953634ca84f 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -509,7 +509,10 @@ export default function Page() { description: language.t("command.terminal.new.description"), category: language.t("command.category.terminal"), keybind: "ctrl+alt+t", - onSelect: () => terminal.new(), + onSelect: () => { + if (terminal.all().length > 0) terminal.new() + view().terminal.open() + }, }, { id: "steps.toggle", From c3415b79fe6d1fca15edcd6eb40466c2c3802da4 Mon Sep 17 00:00:00 2001 From: luo jiyin Date: Thu, 22 Jan 2026 12:10:40 +0800 Subject: [PATCH 321/426] fix: correct spelling 'supercedes' to 'supersedes' (#9935) Signed-off-by: luojiyin --- packages/opencode/src/session/prompt.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 587f9498008..185c97a75ca 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -1263,7 +1263,7 @@ export namespace SessionPrompt { sessionID: userMessage.info.sessionID, type: "text", text: ` -Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supercedes any other instructions you have received. +Plan mode is active. The user indicated that they do not want you to execute yet -- you MUST NOT make any edits (with the exception of the plan file mentioned below), run any non-readonly tools (including changing configs or making commits), or otherwise make any changes to the system. This supersedes any other instructions you have received. ## Plan File Info: ${exists ? `A plan file already exists at ${plan}. You can read it and make incremental edits using the edit tool.` : `No plan file exists yet. You should create your plan at ${plan} using the write tool.`} From f1df6f2d18f1c19a67b1232f7e4c01fa91a9cb62 Mon Sep 17 00:00:00 2001 From: Caleb Norton Date: Wed, 21 Jan 2026 22:10:55 -0600 Subject: [PATCH 322/426] chore: update flake.lock (#9938) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 5ef276f0a08..16fb71c0a5a 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1768302833, - "narHash": "sha256-h5bRFy9bco+8QcK7rGoOiqMxMbmn21moTACofNLRMP4=", + "lastModified": 1768393167, + "narHash": "sha256-n2063BRjHde6DqAz2zavhOOiLUwA3qXt7jQYHyETjX8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "61db79b0c6b838d9894923920b612048e1201926", + "rev": "2f594d5af95d4fdac67fba60376ec11e482041cb", "type": "github" }, "original": { From fc0210c2fdd3194754dbe1eeff094e3038ffecbc Mon Sep 17 00:00:00 2001 From: Alex Sadleir Date: Thu, 22 Jan 2026 15:11:09 +1100 Subject: [PATCH 323/426] fix(acp): rename setSessionModel to unstable_setSessionModel (#9940) --- packages/opencode/src/acp/agent.ts | 2 +- .../opencode/test/acp/agent-interface.test.ts | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 packages/opencode/test/acp/agent-interface.test.ts diff --git a/packages/opencode/src/acp/agent.ts b/packages/opencode/src/acp/agent.ts index e165509b9dc..d4d556485da 100644 --- a/packages/opencode/src/acp/agent.ts +++ b/packages/opencode/src/acp/agent.ts @@ -1084,7 +1084,7 @@ export namespace ACP { } } - async setSessionModel(params: SetSessionModelRequest) { + async unstable_setSessionModel(params: SetSessionModelRequest) { const session = this.sessionManager.get(params.sessionId) const model = Provider.parseModel(params.modelId) diff --git a/packages/opencode/test/acp/agent-interface.test.ts b/packages/opencode/test/acp/agent-interface.test.ts new file mode 100644 index 00000000000..a915d30ebe6 --- /dev/null +++ b/packages/opencode/test/acp/agent-interface.test.ts @@ -0,0 +1,51 @@ +import { describe, expect, test } from "bun:test" +import { ACP } from "../../src/acp/agent" +import type { Agent as ACPAgent } from "@agentclientprotocol/sdk" + +/** + * Type-level test: This line will fail to compile if ACP.Agent + * doesn't properly implement the ACPAgent interface. + * + * The SDK checks for methods like `agent.unstable_setSessionModel` at runtime + * and throws "Method not found" if they're missing. TypeScript allows optional + * interface methods to be omitted, but the SDK still expects them. + * + * @see https://github.com/agentclientprotocol/typescript-sdk/commit/7072d3f + */ +type _AssertAgentImplementsACPAgent = ACP.Agent extends ACPAgent ? true : never +const _typeCheck: _AssertAgentImplementsACPAgent = true + +/** + * Runtime verification that optional methods the SDK expects are actually implemented. + * The SDK's router checks `if (!agent.methodName)` and throws MethodNotFound if missing. + */ +describe("acp.agent interface compliance", () => { + // Extract method names from the ACPAgent interface type + type ACPAgentMethods = keyof ACPAgent + + // Methods that the SDK's router explicitly checks for at runtime + const sdkCheckedMethods: ACPAgentMethods[] = [ + // Required + "initialize", + "newSession", + "prompt", + "cancel", + // Optional but checked by SDK router + "loadSession", + "setSessionMode", + "authenticate", + // Unstable - SDK checks these with unstable_ prefix + "unstable_listSessions", + "unstable_forkSession", + "unstable_resumeSession", + "unstable_setSessionModel", + ] + + test("Agent implements all SDK-checked methods", () => { + for (const method of sdkCheckedMethods) { + expect(typeof ACP.Agent.prototype[method as keyof typeof ACP.Agent.prototype], `Missing method: ${method}`).toBe( + "function", + ) + } + }) +}) From c2844697f38807d928368fdcd1e195e84a079077 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Wed, 21 Jan 2026 23:54:39 -0600 Subject: [PATCH 324/426] fix: ensure images are properly returned as tool results --- packages/opencode/src/session/message-v2.ts | 75 ++++++++++++++----- packages/opencode/src/session/prompt.ts | 12 --- .../opencode/test/session/message-v2.test.ts | 24 +++--- 3 files changed, 64 insertions(+), 47 deletions(-) diff --git a/packages/opencode/src/session/message-v2.ts b/packages/opencode/src/session/message-v2.ts index d0f2beb74ab..83ca72addb1 100644 --- a/packages/opencode/src/session/message-v2.ts +++ b/packages/opencode/src/session/message-v2.ts @@ -435,6 +435,40 @@ export namespace MessageV2 { export function toModelMessages(input: WithParts[], model: Provider.Model): ModelMessage[] { const result: UIMessage[] = [] + const toolNames = new Set() + + const toModelOutput = (output: unknown) => { + if (typeof output === "string") { + return { type: "text", value: output } + } + + if (typeof output === "object") { + const outputObject = output as { + text: string + attachments?: Array<{ mime: string; url: string }> + } + const attachments = (outputObject.attachments ?? []).filter((attachment) => { + return attachment.url.startsWith("data:") && attachment.url.includes(",") + }) + + return { + type: "content", + value: [ + { type: "text", text: outputObject.text }, + ...attachments.map((attachment) => ({ + type: "media", + mediaType: attachment.mime, + data: iife(() => { + const commaIndex = attachment.url.indexOf(",") + return commaIndex === -1 ? attachment.url : attachment.url.slice(commaIndex + 1) + }), + })), + ], + } + } + + return { type: "json", value: output as never } + } for (const msg of input) { if (msg.parts.length === 0) continue @@ -505,31 +539,24 @@ export namespace MessageV2 { type: "step-start", }) if (part.type === "tool") { + toolNames.add(part.tool) if (part.state.status === "completed") { - if (part.state.attachments?.length) { - result.push({ - id: Identifier.ascending("message"), - role: "user", - parts: [ - { - type: "text", - text: `The tool ${part.tool} returned the following attachments:`, - }, - ...part.state.attachments.map((attachment) => ({ - type: "file" as const, - url: attachment.url, - mediaType: attachment.mime, - filename: attachment.filename, - })), - ], - }) - } + const outputText = part.state.time.compacted ? "[Old tool result content cleared]" : part.state.output + const attachments = part.state.time.compacted ? [] : (part.state.attachments ?? []) + const output = + attachments.length > 0 + ? { + text: outputText, + attachments, + } + : outputText + assistantMessage.parts.push({ type: ("tool-" + part.tool) as `tool-${string}`, state: "output-available", toolCallId: part.callID, input: part.state.input, - output: part.state.time.compacted ? "[Old tool result content cleared]" : part.state.output, + output, ...(differentModel ? {} : { callProviderMetadata: part.metadata }), }) } @@ -568,7 +595,15 @@ export namespace MessageV2 { } } - return convertToModelMessages(result.filter((msg) => msg.parts.some((part) => part.type !== "step-start"))) + const tools = Object.fromEntries(Array.from(toolNames).map((toolName) => [toolName, { toModelOutput }])) + + return convertToModelMessages( + result.filter((msg) => msg.parts.some((part) => part.type !== "step-start")), + { + //@ts-expect-error (convertToModelMessages expects a ToolSet but only actually needs tools[name]?.toModelOutput) + tools, + }, + ) } export const stream = fn(Identifier.schema("session"), async function* (sessionID) { diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 185c97a75ca..de62788200b 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -722,12 +722,6 @@ export namespace SessionPrompt { ) return result }, - toModelOutput(result) { - return { - type: "text", - value: result.output, - } - }, }) } @@ -819,12 +813,6 @@ export namespace SessionPrompt { content: result.content, // directly return content to preserve ordering when outputting to model } } - item.toModelOutput = (result) => { - return { - type: "text", - value: result.output, - } - } tools[key] = item } diff --git a/packages/opencode/test/session/message-v2.test.ts b/packages/opencode/test/session/message-v2.test.ts index b8d05643380..2f632ad1cf2 100644 --- a/packages/opencode/test/session/message-v2.test.ts +++ b/packages/opencode/test/session/message-v2.test.ts @@ -262,7 +262,7 @@ describe("session.message-v2.toModelMessage", () => { ]) }) - test("converts assistant tool completion into tool-call + tool-result messages and emits attachment message", () => { + test("converts assistant tool completion into tool-call + tool-result messages with attachments", () => { const userID = "m-user" const assistantID = "m-assistant" @@ -304,7 +304,7 @@ describe("session.message-v2.toModelMessage", () => { type: "file", mime: "image/png", filename: "attachment.png", - url: "https://example.com/attachment.png", + url: "data:image/png;base64,Zm9v", }, ], }, @@ -319,18 +319,6 @@ describe("session.message-v2.toModelMessage", () => { role: "user", content: [{ type: "text", text: "run tool" }], }, - { - role: "user", - content: [ - { type: "text", text: "The tool bash returned the following attachments:" }, - { - type: "file", - mediaType: "image/png", - filename: "attachment.png", - data: "https://example.com/attachment.png", - }, - ], - }, { role: "assistant", content: [ @@ -352,7 +340,13 @@ describe("session.message-v2.toModelMessage", () => { type: "tool-result", toolCallId: "call-1", toolName: "bash", - output: { type: "text", value: "ok" }, + output: { + type: "content", + value: [ + { type: "text", text: "ok" }, + { type: "media", mediaType: "image/png", data: "Zm9v" }, + ], + }, providerOptions: { openai: { tool: "meta" } }, }, ], From 9fc182baf23536619601dcf43be7d5539b8ad92e Mon Sep 17 00:00:00 2001 From: Idris Gadi <85882535+IdrisGit@users.noreply.github.com> Date: Thu, 22 Jan 2026 12:06:57 +0530 Subject: [PATCH 325/426] docs: add API server section in CONTRIBUTING.md (#9888) --- CONTRIBUTING.md | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0385f042a10..a32504b22f8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,15 +71,50 @@ Replace `` with your platform (e.g., `darwin-arm64`, `linux-x64`). - `packages/desktop`: The native desktop app, built with Tauri (wraps `packages/app`) - `packages/plugin`: Source for `@opencode-ai/plugin` +### Understanding bun dev vs opencode + +During development, `bun dev` is the local equivalent of the built `opencode` command. Both run the same CLI interface: + +```bash +# Development (from project root) +bun dev --help # Show all available commands +bun dev serve # Start headless API server +bun dev web # Start server + open web interface +bun dev # Start TUI in specific directory + +# Production +opencode --help # Show all available commands +opencode serve # Start headless API server +opencode web # Start server + open web interface +opencode # Start TUI in specific directory +``` + +### Running the API Server + +To start the OpenCode headless API server: + +```bash +bun dev serve +``` + +This starts the headless server on port 4096 by default. You can specify a different port: + +```bash +bun dev serve --port 8080 +``` + ### Running the Web App -To test UI changes during development, run the web app: +To test UI changes during development: + +1. **First, start the OpenCode server** (see [Running the API Server](#running-the-api-server) section above) +2. **Then run the web app:** ```bash bun run --cwd packages/app dev ``` -This starts a local dev server at http://localhost:5173 (or similar port shown in output). Most UI changes can be tested here. +This starts a local dev server at http://localhost:5173 (or similar port shown in output). Most UI changes can be tested here, but the server must be running for full functionality. ### Running the Desktop App @@ -127,9 +162,9 @@ Caveats: - If you want to run the OpenCode TUI and have breakpoints triggered in the server code, you might need to run `bun dev spawn` instead of the usual `bun dev`. This is because `bun dev` runs the server in a worker thread and breakpoints might not work there. - If `spawn` does not work for you, you can debug the server separately: - - Debug server: `bun run --inspect=ws://localhost:6499/ ./src/index.ts serve --port 4096`, + - Debug server: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode ./src/index.ts serve --port 4096`, then attach TUI with `opencode attach http://localhost:4096` - - Debug TUI: `bun run --inspect=ws://localhost:6499/ --conditions=browser ./src/index.ts` + - Debug TUI: `bun run --inspect=ws://localhost:6499/ --cwd packages/opencode --conditions=browser ./src/index.ts` Other tips and tricks: From 9afc067152c0e7010a5e22d3c34e53adaf3218d3 Mon Sep 17 00:00:00 2001 From: DNGriffin <31415269+DNGriffin@users.noreply.github.com> Date: Thu, 22 Jan 2026 02:09:55 -0600 Subject: [PATCH 326/426] feat(app): always show Toggle-Review button (#9944) --- packages/app/src/components/session/session-header.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index 0fc8828fd2f..4f8e1e4402a 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -47,7 +47,6 @@ export function SessionHeader() { const currentSession = createMemo(() => sync.data.session.find((s) => s.id === params.id)) const shareEnabled = createMemo(() => sync.data.config.share !== "disabled") - const showReview = createMemo(() => !!currentSession()?.summary?.files) const showShare = createMemo(() => shareEnabled() && !!currentSession()) const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`) const view = createMemo(() => layout.view(sessionKey())) @@ -176,13 +175,7 @@ export function SessionHeader() { {/* */} {/*
    */}
    -