refactor(server): canonicalize service API (#31049)

This commit is contained in:
Dax
2026-06-06 23:27:28 -04:00
committed by GitHub
parent 53ff1b57c9
commit fe0c4f8c74
388 changed files with 7103 additions and 4092 deletions
@@ -0,0 +1,42 @@
/** @jsxImportSource @opentui/solid */
import { createTuiEnvironment, TuiEnvironmentProvider, type TuiEnvironment } from "@opencode-ai/tui/runtime"
import type { ParentProps } from "solid-js"
export function TestTuiEnvironmentProvider(
props: ParentProps<{
cwd?: string
directory?: string
paths?: Partial<TuiEnvironment["paths"]>
capabilities?: Partial<TuiEnvironment["capabilities"]>
editor?: Partial<TuiEnvironment["editor"]>
}>,
) {
return (
<TuiEnvironmentProvider
value={createTuiEnvironment({
cwd: props.cwd ?? props.directory ?? "/tmp/opencode/packages/opencode",
platform: "linux",
paths: {
home: "/tmp/opencode/home",
state: "/tmp/opencode/state",
worktree: "/tmp/opencode",
...props.paths,
},
capabilities: {
mouse: true,
copyOnSelect: true,
terminalTitle: false,
terminalSuspend: false,
workspaces: false,
showTimeToFirstDraw: false,
...props.capabilities,
},
terminal: {},
editor: { zedTerminal: false, ...props.editor },
skipInitialLoading: false,
})}
>
{props.children}
</TuiEnvironmentProvider>
)
}
+1 -1
View File
@@ -1,6 +1,6 @@
import { createOpencodeClient } from "@opencode-ai/sdk/v2"
import { RGBA, type CliRenderer } from "@opentui/core"
import type { HostPluginApi } from "../../src/cli/cmd/tui/plugin/slots"
import type { HostPluginApi } from "@opencode-ai/tui/plugin/slots"
import { createTuiResolvedConfig } from "./tui-runtime"
type Count = {
+17 -25
View File
@@ -1,39 +1,31 @@
import { spyOn } from "bun:test"
import path from "path"
import { createBindingLookup } from "@opentui/keymap/extras"
import { TuiConfig } from "../../src/cli/cmd/tui/config/tui"
import { TuiKeybind } from "../../src/cli/cmd/tui/config/keybind"
import { resolve, type Info, type Resolved } from "@opencode-ai/tui/config"
import { TuiConfig } from "../../src/config/tui"
import { TuiKeybind } from "@opencode-ai/tui/config/keybind"
type PluginSpec = string | [string, Record<string, unknown>]
type ResolvedInput = Omit<TuiConfig.Resolved, "attention" | "keybinds" | "leader_timeout"> & {
attention?: Partial<TuiConfig.Resolved["attention"]>
type PluginOrigin = {
spec: PluginSpec
scope: "global" | "local"
source: string
}
type HostResolved = Resolved & { plugin_origins?: PluginOrigin[] }
type ResolvedInput = Omit<Info, "attention" | "keybinds" | "leader_timeout"> & {
attention?: Partial<Resolved["attention"]>
keybinds?: Partial<TuiKeybind.Keybinds>
leader_timeout?: number
plugin_origins?: PluginOrigin[]
}
export function createTuiResolvedKeybinds(input: Partial<TuiKeybind.Keybinds> = {}): TuiConfig.Resolved["keybinds"] {
const keybinds = TuiKeybind.Keybinds.parse(input)
return createBindingLookup(TuiKeybind.toBindingConfig(keybinds), {
commandMap: TuiKeybind.CommandMap,
bindingDefaults: TuiKeybind.bindingDefaults(),
})
export function createTuiResolvedKeybinds(input: Partial<TuiKeybind.Keybinds> = {}): Resolved["keybinds"] {
return resolve({ keybinds: input }, { terminalSuspend: process.platform !== "win32" }).keybinds
}
export function createTuiResolvedConfig(input: ResolvedInput = {}): TuiConfig.Resolved {
const keybinds = TuiKeybind.Keybinds.parse(input.keybinds ?? {})
export function createTuiResolvedConfig(input: ResolvedInput = {}): HostResolved {
return {
...input,
attention: {
enabled: false,
notifications: true,
sound: true,
volume: 0.4,
sound_pack: "opencode.default",
sounds: {},
...input.attention,
},
keybinds: createTuiResolvedKeybinds(keybinds),
leader_timeout: input.leader_timeout ?? 2000,
...resolve(input, { terminalSuspend: process.platform !== "win32" }),
plugin_origins: input.plugin_origins,
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
import type { GlobalEvent } from "@opencode-ai/sdk/v2"
import type { EventSource } from "../../src/cli/cmd/tui/context/sdk"
import type { EventSource } from "@opencode-ai/tui/context/sdk"
export const worktree = "/tmp/opencode"
export const directory = `${worktree}/packages/opencode`