import { buildLocationServiceMap } from "../location-services.js" import { LocationServiceMap } from "../location-service-map.js" import { LayerNode } from "@opencode/util/effect/layer-node" import { makeGlobalNode } from "@opencode/util/effect/app-node" import { Effect, Layer } from "effect" import { Instance } from "../instance/service.js" const instances = makeGlobalNode({ service: Instance.Service, layer: Layer.effect( Instance.Service, Effect.gen(function* () { const locations = yield* LocationServiceMap.Service return Instance.Service.of({ provide: (session) => Effect.provide(locations.get(session.location)), }) }), ), deps: [LocationServiceMap.node], }) export function build(root: LayerNode.Graph, replacements: LayerNode.Replacements = []) { const bindings = [Instance.node.replace(instances), ...replacements] return LayerNode.compile(root, { replacements: [LocationServiceMap.node.replace(buildLocationServiceMap(bindings)), ...bindings], }) } export * as AppNodeBuilder from "./app-node-builder.js"