export * as App from "./app" import { Context, Layer } from "effect" import { makeGlobalNode } from "@opencode-ai/util/effect/app-node" export interface Info { readonly name: string readonly version: string readonly channel: string } export const Metadata = Context.Reference("@opencode/App", { defaultValue: () => make(), }) export function make(input: Partial = {}): Info { return { name: input.name ?? "opencode", version: input.version ?? "unknown", channel: input.channel ?? "unknown", } } export function useragent(app: Info) { return `opencode/${app.channel}/${app.version}/${app.name}` } export const layer = (input?: Partial) => Layer.succeed(Metadata, make(input)) export const configured = (input?: Partial) => makeGlobalNode({ service: Metadata, layer: layer(input), deps: [] }) export const node = configured()