Skip to content

Commit 5143a12

Browse files
committed
fix(tui): avoid placeholder session route on continue
1 parent b0fcba5 commit 5143a12

2 files changed

Lines changed: 30 additions & 9 deletions

File tree

packages/opencode/src/cli/cmd/tui/app.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as Clipboard from "@tui/util/clipboard"
44
import * as Selection from "@tui/util/selection"
55
import * as TuiAudio from "@tui/util/audio"
66
import { createCliRenderer, MouseButton, type CliRendererConfig } from "@opentui/core"
7-
import { RouteProvider, useRoute } from "@tui/context/route"
7+
import { RouteProvider, useRoute, type Route } from "@tui/context/route"
88
import {
99
Switch,
1010
Match,
@@ -146,6 +146,11 @@ function rendererConfig(_config: TuiConfig.Resolved): CliRendererConfig {
146146
}
147147
}
148148

149+
export function initialRouteForArgs(args: Args): Route | undefined {
150+
if (args.sessionID && !args.fork) return { type: "session", sessionID: args.sessionID }
151+
return undefined
152+
}
153+
149154
function errorMessage(error: unknown) {
150155
const formatted = FormatError(error)
151156
if (formatted !== undefined) return formatted
@@ -210,14 +215,7 @@ export function tui(input: {
210215
<KVProvider>
211216
<ToastProvider>
212217
<RouteProvider
213-
initialRoute={
214-
input.args.continue
215-
? {
216-
type: "session",
217-
sessionID: "dummy",
218-
}
219-
: undefined
220-
}
218+
initialRoute={initialRouteForArgs(input.args)}
221219
>
222220
<TuiConfigProvider config={input.config}>
223221
<SDKProvider
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { describe, expect, test } from "bun:test"
2+
import { initialRouteForArgs } from "../../../src/cli/cmd/tui/app"
3+
4+
describe("tui app", () => {
5+
test("does not use a placeholder session route while resolving --continue", () => {
6+
expect(initialRouteForArgs({ continue: true })).toBeUndefined()
7+
})
8+
9+
test("does not use a placeholder session route while resolving --continue --fork", () => {
10+
expect(initialRouteForArgs({ continue: true, fork: true })).toBeUndefined()
11+
})
12+
13+
test("uses explicit session route when not forking", () => {
14+
expect(initialRouteForArgs({ sessionID: "ses_existing" })).toEqual({
15+
type: "session",
16+
sessionID: "ses_existing",
17+
})
18+
})
19+
20+
test("waits for fork result before routing an explicit session fork", () => {
21+
expect(initialRouteForArgs({ sessionID: "ses_existing", fork: true })).toBeUndefined()
22+
})
23+
})

0 commit comments

Comments
 (0)