| import { run } from "@opencode-ai/tui" |
| import { TuiConfig } from "@opencode-ai/tui/config" |
| import { Effect } from "effect" |
| import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" |
| import { Global } from "@opencode-ai/core/global" |
|
|
| export function runTui(transport: { url: string; headers: RequestInit["headers"] }) { |
| const config = TuiConfig.resolve({}, { terminalSuspend: false }) |
| return run({ |
| ...transport, |
| args: {}, |
| config, |
| fetch: gracefulFetch, |
| pluginHost: { |
| async start() {}, |
| async dispose() {}, |
| }, |
| }).pipe(Effect.provide(AppNodeBuilder.build(Global.node))) |
| } |
|
|
| const legacyDefaults: Record<string, unknown> = { |
| "/config/providers": { providers: [], default: {} }, |
| "/provider": { all: [], default: {}, connected: [] }, |
| "/agent": [], |
| "/config": {}, |
| } |
|
|
| const gracefulFetch = Object.assign( |
| async (input: RequestInfo | URL, init?: RequestInit) => { |
| const response = await fetch(input, init) |
| if (response.status !== 404) return response |
| const fallback = legacyDefaults[new URL(input instanceof Request ? input.url : input).pathname] |
| if (fallback === undefined) return response |
| return Response.json(fallback) |
| }, |
| { preconnect: fetch.preconnect }, |
| ) |
|
|