diff options
| author | Adam <[email protected]> | 2026-01-20 10:50:46 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-20 17:58:06 -0600 |
| commit | 9b7d9c8173c222c880cf731b859fc78fed5265fc (patch) | |
| tree | 7cfd07bd8dd0c0b869c9d4ca38a5e167962261c8 /packages/app/src/context | |
| parent | 0f2e8ea2b49fcab8c539449b51c40eea8215c2d3 (diff) | |
| download | opencode-9b7d9c8173c222c880cf731b859fc78fed5265fc.tar.gz opencode-9b7d9c8173c222c880cf731b859fc78fed5265fc.zip | |
wip(app): i18n
Diffstat (limited to 'packages/app/src/context')
| -rw-r--r-- | packages/app/src/context/terminal.tsx | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/packages/app/src/context/terminal.tsx b/packages/app/src/context/terminal.tsx index 5732114b4..8bde12da1 100644 --- a/packages/app/src/context/terminal.tsx +++ b/packages/app/src/context/terminal.tsx @@ -1,6 +1,6 @@ import { createStore, produce } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" -import { batch, createMemo, createRoot, onCleanup } from "solid-js" +import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js" import { useParams } from "@solidjs/router" import { useSDK } from "./sdk" import { Persist, persisted } from "@/utils/persist" @@ -28,6 +28,14 @@ type TerminalCacheEntry = { function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, session?: string) { const legacy = session ? [`${dir}/terminal/${session}.v1`, `${dir}/terminal.v1`] : [`${dir}/terminal.v1`] + const numberFromTitle = (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 [store, setStore, _, ready] = persisted( Persist.workspace(dir, "terminal", legacy), createStore<{ @@ -54,24 +62,36 @@ function createTerminalSession(sdk: ReturnType<typeof useSDK>, dir: string, sess }) onCleanup(unsub) + const meta = { migrated: false } + + createEffect(() => { + if (!ready()) return + if (meta.migrated) return + meta.migrated = true + + setStore("all", (all) => { + const next = all.map((pty) => { + const direct = Number.isFinite(pty.titleNumber) && pty.titleNumber > 0 ? pty.titleNumber : undefined + if (direct !== undefined) return pty + const parsed = numberFromTitle(pty.title) + if (parsed === undefined) return pty + return { ...pty, titleNumber: parsed } + }) + if (next.every((pty, index) => pty === all[index])) return all + return next + }) + }) + return { ready, 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.flatMap((pty) => { const direct = Number.isFinite(pty.titleNumber) && pty.titleNumber > 0 ? pty.titleNumber : undefined if (direct !== undefined) return [direct] - const parsed = parse(pty.title) + const parsed = numberFromTitle(pty.title) if (parsed === undefined) return [] return [parsed] }), |
