| import type { AgentPart, OpencodeClient, Event, FilePart, LspStatus, McpStatus, Todo, Message, Part, Provider, PermissionRequest, QuestionRequest, Session, SessionStatus, TextPart, Config as SdkConfig } from "@opencode-ai/sdk/v2"; | |
| import type { CliRenderer, KeyEvent, RGBA, Renderable, SlotMode } from "@opentui/core"; | |
| import type { Binding, Keymap } from "@opentui/keymap"; | |
| import { type BindingConfig, type CreateBindingLookupOptions, type KeySequenceFormatPart, type SequenceBindingLike } from "@opentui/keymap/extras"; | |
| import type { JSX, SolidPlugin } from "@opentui/solid"; | |
| import type { Config as PluginConfig, PluginOptions } from "./index.js"; | |
| export type { CliRenderer, KeyEvent, Renderable, SlotMode } from "@opentui/core"; | |
| export { stringifyKeySequence, stringifyKeyStroke } from "@opentui/keymap"; | |
| export type { Binding, KeyLike, KeySequencePart, KeyStringifyInput, StringifyOptions } from "@opentui/keymap"; | |
| export { formatCommandBindings, formatKeySequence } from "@opentui/keymap/extras"; | |
| export type { BindingConfig, BindingLookup, BindingValue, CreateBindingLookupOptions, FormatCommandBindingsOptions, FormatKeySequenceOptions, KeySequenceFormatPart, SequenceBindingLike, } from "@opentui/keymap/extras"; | |
| export declare function createBindingLookup(config: BindingConfig<Renderable, KeyEvent> | undefined, options?: CreateBindingLookupOptions<Renderable, KeyEvent>): import("@opentui/keymap/extras").BindingLookup<Renderable, KeyEvent>; | |
| export type TuiRouteCurrent = { | |
| name: "home"; | |
| } | { | |
| name: "session"; | |
| params: { | |
| sessionID: string; | |
| prompt?: unknown; | |
| }; | |
| } | { | |
| name: string; | |
| params?: Record<string, unknown>; | |
| }; | |
| export type TuiRouteDefinition = { | |
| name: string; | |
| render: (input: { | |
| params?: Record<string, unknown>; | |
| }) => JSX.Element; | |
| }; | |
| export type TuiKeys = { | |
| formatSequence: (parts: readonly KeySequenceFormatPart[] | undefined) => string; | |
| formatBindings: (bindings: readonly SequenceBindingLike[] | undefined) => string | undefined; | |
| }; | |
| export type TuiKeymap = Keymap<Renderable, KeyEvent>; | |
| export type TuiModeApi = { | |
| current: () => string; | |
| push: (mode: string) => () => void; | |
| }; | |
| /** | |
| * Legacy `api.command` shape kept so v1 plugins can initialize. Remove in v2. | |
| * | |
| * @deprecated Use `api.keymap.registerLayer({ commands, bindings })` instead. | |
| */ | |
| export type TuiCommand = { | |
| title: string; | |
| value: string; | |
| description?: string; | |
| category?: string; | |
| keybind?: string; | |
| suggested?: boolean; | |
| hidden?: boolean; | |
| enabled?: boolean; | |
| slash?: { | |
| name: string; | |
| aliases?: string[]; | |
| }; | |
| onSelect?: (dialog?: TuiDialogStack) => void | Promise<void>; | |
| }; | |
| /** | |
| * Legacy `api.command` API kept so v1 plugins can initialize. Remove in v2. | |
| * | |
| * @deprecated Use `api.keymap.registerLayer`, `api.keymap.dispatchCommand`, and | |
| * `api.keymap.dispatchCommand("command.palette.show")` instead. | |
| */ | |
| export type TuiCommandApi = { | |
| /** @deprecated Use `api.keymap.registerLayer({ commands, bindings })` instead. */ | |
| register: (cb: () => TuiCommand[]) => () => void; | |
| /** @deprecated Use `api.keymap.dispatchCommand(name)` instead. */ | |
| trigger: (value: string) => void; | |
| /** @deprecated Use `api.keymap.dispatchCommand("command.palette.show")` instead. */ | |
| show: () => void; | |
| }; | |
| export type TuiDialogProps = { | |
| size?: "medium" | "large" | "xlarge"; | |
| onClose: () => void; | |
| children?: JSX.Element; | |
| }; | |
| export type TuiDialogStack = { | |
| replace: (render: () => JSX.Element, onClose?: () => void) => void; | |
| clear: () => void; | |
| setSize: (size: "medium" | "large" | "xlarge") => void; | |
| readonly size: "medium" | "large" | "xlarge"; | |
| readonly depth: number; | |
| readonly open: boolean; | |
| }; | |
| export type TuiDialogAlertProps = { | |
| title: string; | |
| message: string; | |
| onConfirm?: () => void; | |
| }; | |
| export type TuiDialogConfirmProps = { | |
| title: string; | |
| message: string; | |
| onConfirm?: () => void; | |
| onCancel?: () => void; | |
| }; | |
| export type TuiDialogPromptProps = { | |
| title: string; | |
| description?: () => JSX.Element; | |
| placeholder?: string; | |
| value?: string; | |
| busy?: boolean; | |
| busyText?: string; | |
| onConfirm?: (value: string) => void; | |
| onCancel?: () => void; | |
| }; | |
| export type TuiDialogSelectOption<Value = unknown> = { | |
| title: string; | |
| value: Value; | |
| description?: string; | |
| footer?: JSX.Element | string; | |
| category?: string; | |
| disabled?: boolean; | |
| onSelect?: () => void; | |
| }; | |
| export type TuiDialogSelectProps<Value = unknown> = { | |
| title: string; | |
| placeholder?: string; | |
| options: TuiDialogSelectOption<Value>[]; | |
| flat?: boolean; | |
| onMove?: (option: TuiDialogSelectOption<Value>) => void; | |
| onFilter?: (query: string) => void; | |
| onSelect?: (option: TuiDialogSelectOption<Value>) => void; | |
| skipFilter?: boolean; | |
| current?: Value; | |
| }; | |
| export type TuiPromptInfo = { | |
| input: string; | |
| mode?: "normal" | "shell"; | |
| parts: (Omit<FilePart, "id" | "messageID" | "sessionID"> | Omit<AgentPart, "id" | "messageID" | "sessionID"> | (Omit<TextPart, "id" | "messageID" | "sessionID"> & { | |
| source?: { | |
| text: { | |
| start: number; | |
| end: number; | |
| value: string; | |
| }; | |
| }; | |
| }))[]; | |
| }; | |
| export type TuiPromptRef = { | |
| focused: boolean; | |
| current: TuiPromptInfo; | |
| set(prompt: TuiPromptInfo): void; | |
| reset(): void; | |
| blur(): void; | |
| focus(): void; | |
| submit(): void; | |
| }; | |
| export type TuiPromptProps = { | |
| sessionID?: string; | |
| visible?: boolean; | |
| disabled?: boolean; | |
| onSubmit?: () => void; | |
| ref?: (ref: TuiPromptRef | undefined) => void; | |
| hint?: JSX.Element; | |
| right?: JSX.Element; | |
| showPlaceholder?: boolean; | |
| placeholders?: { | |
| normal?: string[]; | |
| shell?: string[]; | |
| }; | |
| }; | |
| export type TuiToast = { | |
| variant?: "info" | "success" | "warning" | "error"; | |
| title?: string; | |
| message: string; | |
| duration?: number; | |
| }; | |
| export type TuiAttentionWhen = "always" | "focused" | "blurred"; | |
| export declare const TuiAttentionSoundNames: readonly ["default", "question", "permission", "error", "done", "subagent_done"]; | |
| export type TuiAttentionSoundName = (typeof TuiAttentionSoundNames)[number]; | |
| export type TuiAttentionSound = boolean | { | |
| name?: TuiAttentionSoundName; | |
| volume?: number; | |
| when?: TuiAttentionWhen; | |
| }; | |
| export type TuiAttentionNotification = boolean | { | |
| when?: TuiAttentionWhen; | |
| }; | |
| export type TuiAttentionSoundPack = { | |
| id: string; | |
| name?: string; | |
| sounds: Partial<Record<TuiAttentionSoundName, string>>; | |
| }; | |
| export type TuiAttentionSoundPackInfo = { | |
| id: string; | |
| name?: string; | |
| active: boolean; | |
| builtin: boolean; | |
| }; | |
| export type TuiAttentionSoundboardActivateOptions = { | |
| persist?: boolean; | |
| }; | |
| export type TuiAttentionSoundboard = { | |
| registerPack(pack: TuiAttentionSoundPack): () => void; | |
| activate(id: string, options?: TuiAttentionSoundboardActivateOptions): boolean; | |
| current(): string; | |
| list(): ReadonlyArray<TuiAttentionSoundPackInfo>; | |
| }; | |
| export type TuiAttentionNotifyInput = { | |
| title?: string; | |
| message: string; | |
| notification?: TuiAttentionNotification; | |
| sound?: TuiAttentionSound; | |
| }; | |
| export type TuiAttentionNotifySkipReason = "attention_disabled" | "empty_message" | "blurred" | "focused" | "focus_unknown" | "renderer_destroyed"; | |
| export type TuiAttentionNotifyResult = { | |
| ok: boolean; | |
| notification: boolean; | |
| sound: boolean; | |
| skipped?: TuiAttentionNotifySkipReason; | |
| }; | |
| export type TuiAttention = { | |
| notify(input: TuiAttentionNotifyInput): Promise<TuiAttentionNotifyResult>; | |
| soundboard: TuiAttentionSoundboard; | |
| }; | |
| export type TuiThemeCurrent = { | |
| readonly primary: RGBA; | |
| readonly secondary: RGBA; | |
| readonly accent: RGBA; | |
| readonly error: RGBA; | |
| readonly warning: RGBA; | |
| readonly success: RGBA; | |
| readonly info: RGBA; | |
| readonly text: RGBA; | |
| readonly textMuted: RGBA; | |
| readonly selectedListItemText: RGBA; | |
| readonly background: RGBA; | |
| readonly backgroundPanel: RGBA; | |
| readonly backgroundElement: RGBA; | |
| readonly backgroundMenu: RGBA; | |
| readonly border: RGBA; | |
| readonly borderActive: RGBA; | |
| readonly borderSubtle: RGBA; | |
| readonly diffAdded: RGBA; | |
| readonly diffRemoved: RGBA; | |
| readonly diffContext: RGBA; | |
| readonly diffHunkHeader: RGBA; | |
| readonly diffHighlightAdded: RGBA; | |
| readonly diffHighlightRemoved: RGBA; | |
| readonly diffAddedBg: RGBA; | |
| readonly diffRemovedBg: RGBA; | |
| readonly diffContextBg: RGBA; | |
| readonly diffLineNumber: RGBA; | |
| readonly diffAddedLineNumberBg: RGBA; | |
| readonly diffRemovedLineNumberBg: RGBA; | |
| readonly markdownText: RGBA; | |
| readonly markdownHeading: RGBA; | |
| readonly markdownLink: RGBA; | |
| readonly markdownLinkText: RGBA; | |
| readonly markdownCode: RGBA; | |
| readonly markdownBlockQuote: RGBA; | |
| readonly markdownEmph: RGBA; | |
| readonly markdownStrong: RGBA; | |
| readonly markdownHorizontalRule: RGBA; | |
| readonly markdownListItem: RGBA; | |
| readonly markdownListEnumeration: RGBA; | |
| readonly markdownImage: RGBA; | |
| readonly markdownImageText: RGBA; | |
| readonly markdownCodeBlock: RGBA; | |
| readonly syntaxComment: RGBA; | |
| readonly syntaxKeyword: RGBA; | |
| readonly syntaxFunction: RGBA; | |
| readonly syntaxVariable: RGBA; | |
| readonly syntaxString: RGBA; | |
| readonly syntaxNumber: RGBA; | |
| readonly syntaxType: RGBA; | |
| readonly syntaxOperator: RGBA; | |
| readonly syntaxPunctuation: RGBA; | |
| readonly thinkingOpacity: number; | |
| }; | |
| export type TuiTheme = { | |
| readonly current: TuiThemeCurrent; | |
| readonly selected: string; | |
| has: (name: string) => boolean; | |
| set: (name: string) => boolean; | |
| install: (jsonPath: string) => Promise<void>; | |
| mode: () => "dark" | "light"; | |
| readonly ready: boolean; | |
| }; | |
| export type TuiKV = { | |
| get: <Value = unknown>(key: string, fallback?: Value) => Value; | |
| set: (key: string, value: unknown) => void; | |
| readonly ready: boolean; | |
| }; | |
| export type TuiState = { | |
| readonly ready: boolean; | |
| readonly config: SdkConfig; | |
| readonly provider: ReadonlyArray<Provider>; | |
| readonly path: { | |
| state: string; | |
| config: string; | |
| worktree: string; | |
| directory: string; | |
| }; | |
| readonly vcs: { | |
| branch?: string; | |
| default_branch?: string; | |
| } | undefined; | |
| session: { | |
| count: () => number; | |
| get: (sessionID: string) => Session | undefined; | |
| diff: (sessionID: string) => ReadonlyArray<TuiSidebarFileItem>; | |
| todo: (sessionID: string) => ReadonlyArray<TuiSidebarTodoItem>; | |
| messages: (sessionID: string) => ReadonlyArray<Message>; | |
| status: (sessionID: string) => SessionStatus | undefined; | |
| permission: (sessionID: string) => ReadonlyArray<PermissionRequest>; | |
| question: (sessionID: string) => ReadonlyArray<QuestionRequest>; | |
| }; | |
| part: (messageID: string) => ReadonlyArray<Part>; | |
| lsp: () => ReadonlyArray<TuiSidebarLspItem>; | |
| mcp: () => ReadonlyArray<TuiSidebarMcpItem>; | |
| }; | |
| type TuiBindingLookupView = { | |
| readonly bindings: ReadonlyArray<Binding<Renderable, KeyEvent>>; | |
| get: (command: string) => ReadonlyArray<Binding<Renderable, KeyEvent>>; | |
| has: (command: string) => boolean; | |
| gather: (name: string, commands: readonly string[]) => ReadonlyArray<Binding<Renderable, KeyEvent>>; | |
| pick: (name: string, commands: readonly string[]) => Binding<Renderable, KeyEvent>[]; | |
| omit: (name: string, commands: readonly string[]) => Binding<Renderable, KeyEvent>[]; | |
| }; | |
| type TuiAttentionConfigView = { | |
| enabled: boolean; | |
| notifications: boolean; | |
| sound: boolean; | |
| volume: number; | |
| sound_pack: string; | |
| sounds: Partial<Record<TuiAttentionSoundName, string>>; | |
| }; | |
| type TuiConfigView = Pick<PluginConfig, "$schema" | "theme" | "plugin"> & NonNullable<PluginConfig["tui"]> & { | |
| leader_timeout: number; | |
| attention: TuiAttentionConfigView; | |
| plugin_enabled?: Record<string, boolean>; | |
| keybinds: TuiBindingLookupView; | |
| }; | |
| export type TuiApp = { | |
| readonly version: string; | |
| }; | |
| type Frozen<Value> = Value extends (...args: never[]) => unknown ? Value : Value extends ReadonlyArray<infer Item> ? ReadonlyArray<Frozen<Item>> : Value extends object ? { | |
| readonly [Key in keyof Value]: Frozen<Value[Key]>; | |
| } : Value; | |
| export type TuiSidebarMcpItem = { | |
| name: string; | |
| status: McpStatus["status"]; | |
| error?: string; | |
| }; | |
| export type TuiSidebarLspItem = Pick<LspStatus, "id" | "root" | "status">; | |
| export type TuiSidebarTodoItem = Pick<Todo, "content" | "status">; | |
| export type TuiSidebarFileItem = { | |
| file: string; | |
| additions: number; | |
| deletions: number; | |
| }; | |
| export type TuiHostSlotMap = { | |
| app: {}; | |
| app_bottom: {}; | |
| home_logo: {}; | |
| home_prompt: { | |
| ref?: (ref: TuiPromptRef | undefined) => void; | |
| }; | |
| home_prompt_right: {}; | |
| session_prompt: { | |
| session_id: string; | |
| visible?: boolean; | |
| disabled?: boolean; | |
| on_submit?: () => void; | |
| ref?: (ref: TuiPromptRef | undefined) => void; | |
| }; | |
| session_prompt_right: { | |
| session_id: string; | |
| }; | |
| home_bottom: {}; | |
| home_footer: {}; | |
| sidebar_title: { | |
| session_id: string; | |
| title: string; | |
| share_url?: string; | |
| }; | |
| sidebar_content: { | |
| session_id: string; | |
| }; | |
| sidebar_footer: { | |
| session_id: string; | |
| }; | |
| }; | |
| export type TuiSlotMap<Slots extends Record<string, object> = {}> = TuiHostSlotMap & Slots; | |
| type TuiSlotShape<Name extends string, Slots extends Record<string, object>> = Name extends keyof TuiHostSlotMap ? TuiHostSlotMap[Name] : Name extends keyof Slots ? Slots[Name] : Record<string, unknown>; | |
| export type TuiSlotProps<Name extends string = string, Slots extends Record<string, object> = {}> = { | |
| name: Name; | |
| mode?: SlotMode; | |
| children?: JSX.Element; | |
| } & TuiSlotShape<Name, Slots>; | |
| export type TuiSlotContext = { | |
| theme: TuiTheme; | |
| }; | |
| type SlotCore<Slots extends Record<string, object> = {}> = SolidPlugin<TuiSlotMap<Slots>, TuiSlotContext>; | |
| export type TuiSlotPlugin<Slots extends Record<string, object> = {}> = Omit<SlotCore<Slots>, "id"> & { | |
| id?: never; | |
| }; | |
| export type TuiSlots = { | |
| register: { | |
| (plugin: TuiSlotPlugin): string; | |
| <Slots extends Record<string, object>>(plugin: TuiSlotPlugin<Slots>): string; | |
| }; | |
| }; | |
| export type TuiEventBus = { | |
| on: <Type extends Event["type"]>(type: Type, handler: (event: Extract<Event, { | |
| type: Type; | |
| }>) => void) => () => void; | |
| }; | |
| export type TuiDispose = () => void | Promise<void>; | |
| export type TuiLifecycle = { | |
| readonly signal: AbortSignal; | |
| onDispose: (fn: TuiDispose) => () => void; | |
| }; | |
| export type TuiPluginState = "first" | "updated" | "same"; | |
| export type TuiPluginEntry = { | |
| id: string; | |
| source: "file" | "npm" | "internal"; | |
| spec: string; | |
| target: string; | |
| requested?: string; | |
| version?: string; | |
| modified?: number; | |
| first_time: number; | |
| last_time: number; | |
| time_changed: number; | |
| load_count: number; | |
| fingerprint: string; | |
| }; | |
| export type TuiPluginMeta = TuiPluginEntry & { | |
| state: TuiPluginState; | |
| }; | |
| export type TuiPluginStatus = { | |
| id: string; | |
| source: TuiPluginEntry["source"]; | |
| spec: string; | |
| target: string; | |
| enabled: boolean; | |
| active: boolean; | |
| }; | |
| export type TuiPluginInstallOptions = { | |
| global?: boolean; | |
| }; | |
| export type TuiPluginInstallResult = { | |
| ok: true; | |
| dir: string; | |
| tui: boolean; | |
| } | { | |
| ok: false; | |
| message: string; | |
| missing?: boolean; | |
| }; | |
| export type TuiWorkspace = { | |
| current: () => string | undefined; | |
| set: (workspaceID?: string) => void; | |
| }; | |
| export type TuiPluginApi = { | |
| app: TuiApp; | |
| attention: TuiAttention; | |
| /** | |
| * Legacy `api.command` API kept so v1 plugins can initialize. Remove in v2. | |
| * | |
| * @deprecated Use `api.keymap.registerLayer`, `api.keymap.dispatchCommand`, and | |
| * `api.keymap.dispatchCommand("command.palette.show")` instead. | |
| */ | |
| command?: TuiCommandApi; | |
| keys: TuiKeys; | |
| keymap: TuiKeymap; | |
| mode: TuiModeApi; | |
| route: { | |
| register: (routes: TuiRouteDefinition[]) => () => void; | |
| navigate: (name: string, params?: Record<string, unknown>) => void; | |
| readonly current: TuiRouteCurrent; | |
| }; | |
| ui: { | |
| Dialog: (props: TuiDialogProps) => JSX.Element; | |
| DialogAlert: (props: TuiDialogAlertProps) => JSX.Element; | |
| DialogConfirm: (props: TuiDialogConfirmProps) => JSX.Element; | |
| DialogPrompt: (props: TuiDialogPromptProps) => JSX.Element; | |
| DialogSelect: <Value = unknown>(props: TuiDialogSelectProps<Value>) => JSX.Element; | |
| Slot: <Name extends string>(props: TuiSlotProps<Name>) => JSX.Element | null; | |
| Prompt: (props: TuiPromptProps) => JSX.Element; | |
| toast: (input: TuiToast) => void; | |
| dialog: TuiDialogStack; | |
| }; | |
| readonly tuiConfig: Frozen<TuiConfigView>; | |
| kv: TuiKV; | |
| state: TuiState; | |
| theme: TuiTheme; | |
| client: OpencodeClient; | |
| event: TuiEventBus; | |
| renderer: CliRenderer; | |
| slots: TuiSlots; | |
| plugins: { | |
| list: () => ReadonlyArray<TuiPluginStatus>; | |
| activate: (id: string) => Promise<boolean>; | |
| deactivate: (id: string) => Promise<boolean>; | |
| add: (spec: string) => Promise<boolean>; | |
| install: (spec: string, options?: TuiPluginInstallOptions) => Promise<TuiPluginInstallResult>; | |
| }; | |
| lifecycle: TuiLifecycle; | |
| }; | |
| export type TuiPlugin = (api: TuiPluginApi, options: PluginOptions | undefined, meta: TuiPluginMeta) => Promise<void>; | |
| export type TuiPluginModule = { | |
| id?: string; | |
| tui: TuiPlugin; | |
| server?: never; | |
| }; | |
Xet Storage Details
- Size:
- 17.6 kB
- Xet hash:
- 3950f4f506c39912bdcd709adc3c608c04625360e1480123fe9a8bb508fc9644
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.