/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/sdk-next/src/opencode.ts
49 строк
2 KB
James Long
refactor(core): remove tool layer exports (#34622)
30 июн 2026, 18:18
Не верифицирован
30 июн 2026, 18:18
5691f36
Код
Авторство
О чём код?
import { OpenCode } from "@opencode-ai/client/effect" import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" import { LayerNode } from "@opencode-ai/core/effect/layer-node" import { PermissionSaved } from "@opencode-ai/core/permission/saved" import { ApplicationTools } from "@opencode-ai/core/tool/application-tools" import { createEmbeddedRoutes } from "@opencode-ai/server/routes" import { Context, Effect, Layer, Scope } from "effect" import { FetchHttpClient, HttpRouter, HttpServer } from "effect/unstable/http" export const create = Effect.fn("OpenCode.create")(function* () { const scope = yield* Scope.Scope const memoMap = yield* Layer.makeMemoMap const context = yield* Layer.buildWithMemoMap( AppNodeBuilder.build(LayerNode.group([ApplicationTools.node, PermissionSaved.node])), memoMap, scope, ) const tools = Context.get(context, ApplicationTools.Service) const permissions = Context.get(context, PermissionSaved.Service) const web = yield* Effect.acquireRelease( Effect.sync(() => HttpRouter.toWebHandler( createEmbeddedRoutes().pipe( HttpRouter.provideRequest(Layer.succeed(PermissionSaved.Service, permissions)), Layer.provide(HttpServer.layerServices), ), { disableLogger: true, memoMap }, ), ), (web) => Effect.promise(web.dispose), ) const fetch = Object.assign((input: RequestInfo | URL, init?: RequestInit) => web.handler(new Request(input, init)), { preconnect: () => undefined, }) satisfies typeof globalThis.fetch const client = yield* OpenCode.make({ baseUrl: "http://opencode.local" }).pipe( Effect.provide(FetchHttpClient.layer), Effect.provideService(FetchHttpClient.Fetch, fetch), ) return { ...client, tools: { register: tools.register }, } }) export type Interface = Effect.Success<ReturnType<typeof create>> export class Service extends Context.Service<Service, Interface>()("@opencode-ai/sdk-next/OpenCode") {} export const layer = Layer.effect(Service, create())