summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-20 10:50:46 -0600
committerAdam <[email protected]>2026-01-20 17:58:06 -0600
commit9b7d9c8173c222c880cf731b859fc78fed5265fc (patch)
tree7cfd07bd8dd0c0b869c9d4ca38a5e167962261c8 /packages/app/src/context
parent0f2e8ea2b49fcab8c539449b51c40eea8215c2d3 (diff)
downloadopencode-9b7d9c8173c222c880cf731b859fc78fed5265fc.tar.gz
opencode-9b7d9c8173c222c880cf731b859fc78fed5265fc.zip
wip(app): i18n
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/terminal.tsx40
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]
}),