33 lines
1020 B
TypeScript
33 lines
1020 B
TypeScript
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<typeof attributes>
|
|
|
|
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<string, string> {
|
|
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",
|
|
}
|
|
}
|