tui.ts 1.2 KB

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