tui.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { run } from "@opencode-ai/tui"
  2. import { TuiConfig } from "@opencode-ai/tui/config"
  3. import { Effect } from "effect"
  4. import { Global } from "@opencode-ai/core/global"
  5. export function runTui(transport: { url: string; headers: RequestInit["headers"] }) {
  6. const config = TuiConfig.resolve({}, { terminalSuspend: false })
  7. return run({
  8. ...transport,
  9. args: {},
  10. config,
  11. fetch: gracefulFetch,
  12. pluginHost: {
  13. async start() {},
  14. async dispose() {},
  15. },
  16. }).pipe(Effect.provide(Global.defaultLayer))
  17. }
  18. const legacyDefaults: Record<string, unknown> = {
  19. "/config/providers": { providers: [], default: {} },
  20. "/provider": { all: [], default: {}, connected: [] },
  21. "/agent": [],
  22. "/config": {},
  23. }
  24. const gracefulFetch = Object.assign(
  25. async (input: RequestInfo | URL, init?: RequestInit) => {
  26. const response = await fetch(input, init)
  27. if (response.status !== 404) return response
  28. const fallback = legacyDefaults[new URL(input instanceof Request ? input.url : input).pathname]
  29. if (fallback === undefined) return response
  30. return Response.json(fallback)
  31. },
  32. { preconnect: fetch.preconnect },
  33. )