refactor(server): canonicalize service API (#31049)
This commit is contained in:
@@ -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,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 = {
|
||||
|
||||
@@ -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,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`
|
||||
|
||||
Reference in New Issue
Block a user