Skip to content

Commit 01a5c69

Browse files
authored
feat(tui): integrate ServerAuth headers into transport configuration for external served TUI thread (anomalyco#29876)
1 parent d78f91a commit 01a5c69

2 files changed

Lines changed: 28 additions & 12 deletions

File tree

packages/opencode/src/cli/cmd/tui.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import { fileURLToPath } from "url"
66
import { UI } from "@/cli/ui"
77
import { errorMessage } from "@opencode-ai/tui/util/error"
88
import { withTimeout } from "@/util/timeout"
9-
import { withNetworkOptions, resolveNetworkOptionsNoConfig } from "@/cli/network"
9+
import { withNetworkOptions, resolveNetworkOptionsNoConfig, hasArg } from "@/cli/network"
1010
import { Filesystem } from "@/util/filesystem"
1111
import type { GlobalEvent } from "@opencode-ai/sdk/v2"
1212
import type { EventSource } from "@opencode-ai/tui/context/sdk"
1313
import { writeHeapSnapshot } from "v8"
14+
import { ServerAuth } from "@/server/auth"
1415
import { validateSession } from "../tui/validate-session"
1516
import { win32InstallCtrlCGuard } from "@opencode-ai/tui/terminal-win32"
1617

@@ -211,19 +212,16 @@ export const TuiThreadCommand = cmd({
211212
const config = await TuiConfig.get()
212213

213214
const network = resolveNetworkOptionsNoConfig(args)
214-
const external =
215-
process.argv.includes("--port") ||
216-
process.argv.includes("--hostname") ||
217-
process.argv.includes("--mdns") ||
218-
network.mdns ||
219-
network.port !== 0 ||
220-
network.hostname !== "127.0.0.1"
215+
const external = hasArg("--port") || hasArg("--hostname") || network.mdns === true
216+
217+
const headers = external ? ServerAuth.headers() : undefined
221218

222219
const transport = external
223220
? {
224221
url: (await client.call("server", network)).url,
225222
fetch: undefined,
226223
events: undefined,
224+
headers,
227225
}
228226
: {
229227
url: "http://opencode.internal",
@@ -237,6 +235,7 @@ export const TuiThreadCommand = cmd({
237235
sessionID: args.session,
238236
directory: cwd,
239237
fetch: transport.fetch,
238+
headers,
240239
})
241240
} catch (error) {
242241
UI.error(errorMessage(error))
@@ -264,6 +263,7 @@ export const TuiThreadCommand = cmd({
264263
pluginHost: createLegacyTuiPluginHost(),
265264
directory: cwd,
266265
fetch: transport.fetch,
266+
headers: transport.headers,
267267
events: transport.events,
268268
args: {
269269
continue: args.continue,

packages/opencode/src/cli/network.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,33 @@ export type NetworkOptions = InferredOptionTypes<typeof options>
3737
export function withNetworkOptions<T>(yargs: Argv<T>) {
3838
return yargs.options(options)
3939
}
40+
41+
export function hasArg(name: string) {
42+
return networkArgs().some((arg) => arg === name || arg.startsWith(name + "="))
43+
}
44+
45+
function hasBooleanArg(name: string) {
46+
return networkArgs().some(
47+
(arg) => arg === name || arg === name + "=true" || arg === name + "=false" || arg === "--no-" + name.slice(2),
48+
)
49+
}
50+
51+
function networkArgs() {
52+
const separator = process.argv.indexOf("--")
53+
return process.argv.slice(2, separator === -1 ? undefined : separator)
54+
}
55+
4056
export const resolveNetworkOptions = Effect.fn("Cli.resolveNetworkOptions")(function* (args: NetworkOptions) {
4157
const { Config } = yield* Effect.promise(() => import("@/config/config"))
4258
const config = yield* Config.Service.use((cfg) => cfg.getGlobal())
4359
return resolveNetworkOptionsNoConfig(args, config)
4460
})
4561

4662
export function resolveNetworkOptionsNoConfig(args: NetworkOptions, config?: ConfigV1.Info) {
47-
const portExplicitlySet = process.argv.includes("--port")
48-
const hostnameExplicitlySet = process.argv.includes("--hostname")
49-
const mdnsExplicitlySet = process.argv.includes("--mdns")
50-
const mdnsDomainExplicitlySet = process.argv.includes("--mdns-domain")
63+
const portExplicitlySet = hasArg("--port")
64+
const hostnameExplicitlySet = hasArg("--hostname")
65+
const mdnsExplicitlySet = hasBooleanArg("--mdns")
66+
const mdnsDomainExplicitlySet = hasArg("--mdns-domain")
5167
const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns)
5268
const mdnsDomain = mdnsDomainExplicitlySet ? args["mdns-domain"] : (config?.server?.mdnsDomain ?? args["mdns-domain"])
5369
const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port)

0 commit comments

Comments
 (0)