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 = { "/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 }, )