| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import type { GlobalEvent } from "@kirincode-ai/sdk/v2"
- import type { EventSource } from "@kirincode-ai/tui/context/sdk"
- export const worktree = "/tmp/opencode"
- export const directory = `${worktree}/packages/opencode`
- export function json(data: unknown, init?: ResponseInit) {
- return new Response(JSON.stringify(data), {
- ...init,
- headers: { "content-type": "application/json", ...(init?.headers ?? {}) },
- })
- }
- export function eventSource(): EventSource {
- return { subscribe: async () => () => {} }
- }
- export function createEventSource() {
- let fn: ((event: GlobalEvent) => void) | undefined
- return {
- source: {
- subscribe: async (handler: (event: GlobalEvent) => void) => {
- fn = handler
- return () => {
- if (fn === handler) fn = undefined
- }
- },
- } satisfies EventSource,
- emit(event: GlobalEvent) {
- if (!fn) throw new Error("event source not ready")
- fn(event)
- },
- }
- }
- export type FetchHandler = (url: URL) => Response | Promise<Response> | undefined
- export function createFetch(override?: FetchHandler) {
- const session = [] as URL[]
- const fetch = (async (input: RequestInfo | URL) => {
- const url = new URL(input instanceof Request ? input.url : String(input))
- if (url.pathname === "/session") session.push(url)
- const overridden = await override?.(url)
- if (overridden) return overridden
- switch (url.pathname) {
- case "/agent":
- case "/command":
- case "/experimental/workspace":
- case "/experimental/workspace/status":
- case "/formatter":
- case "/lsp":
- return json([])
- case "/config":
- case "/experimental/resource":
- case "/mcp":
- case "/provider/auth":
- case "/session/status":
- return json({})
- case "/config/providers":
- return json({ providers: {}, default: {} })
- case "/experimental/console":
- return json({ consoleManagedProviders: [], switchableOrgCount: 0 })
- case "/path":
- return json({ home: "", state: "", config: "", worktree, directory })
- case "/project/current":
- return json({ id: "proj_test" })
- case "/provider":
- return json({ all: [], default: {}, connected: [] })
- case "/session":
- return json([])
- case "/vcs":
- return json({ branch: "main" })
- }
- throw new Error(`unexpected request: ${url.pathname}`)
- }) as typeof globalThis.fetch
- return { fetch, session }
- }
|