import { Flag } from "@opencode-ai/core/flag/flag" import { InstallationChannel, InstallationVersion } from "@opencode-ai/core/installation/version" export type Backend = "effect-httpapi" | "hono" export type Selection = { backend: Backend reason: "env" | "stable" | "explicit" } export type Attributes = ReturnType export function select(): Selection { if (Flag.OPENCODE_EXPERIMENTAL_HTTPAPI) return { backend: "effect-httpapi", reason: "env" } return { backend: "hono", reason: "stable" } } export function attributes(selection: Selection): Record { return { "opencode.server.backend": selection.backend, "opencode.server.backend.reason": selection.reason, "opencode.installation.channel": InstallationChannel, "opencode.installation.version": InstallationVersion, } } export function force(selection: Selection, backend: Backend): Selection { return { backend, reason: selection.backend === backend ? selection.reason : "explicit", } }