Buckets:
| import type { Event, createOpencodeClient, Project, Model, Provider, Permission, UserMessage, Message, Part, Auth, Config } from "@opencode-ai/sdk"; | |
| import type { BunShell } from "./shell"; | |
| import { type ToolDefinition } from "./tool"; | |
| export * from "./tool"; | |
| export type ProviderContext = { | |
| source: "env" | "config" | "custom" | "api"; | |
| info: Provider; | |
| options: Record<string, any>; | |
| }; | |
| export type PluginInput = { | |
| client: ReturnType<typeof createOpencodeClient>; | |
| project: Project; | |
| directory: string; | |
| worktree: string; | |
| serverUrl: URL; | |
| $: BunShell; | |
| }; | |
| export type Plugin = (input: PluginInput) => Promise<Hooks>; | |
| export type AuthHook = { | |
| provider: string; | |
| loader?: (auth: () => Promise<Auth>, provider: Provider) => Promise<Record<string, any>>; | |
| methods: ({ | |
| type: "oauth"; | |
| label: string; | |
| prompts?: Array<{ | |
| type: "text"; | |
| key: string; | |
| message: string; | |
| placeholder?: string; | |
| validate?: (value: string) => string | undefined; | |
| condition?: (inputs: Record<string, string>) => boolean; | |
| } | { | |
| type: "select"; | |
| key: string; | |
| message: string; | |
| options: Array<{ | |
| label: string; | |
| value: string; | |
| hint?: string; | |
| }>; | |
| condition?: (inputs: Record<string, string>) => boolean; | |
| }>; | |
| authorize(inputs?: Record<string, string>): Promise<AuthOuathResult>; | |
| } | { | |
| type: "api"; | |
| label: string; | |
| prompts?: Array<{ | |
| type: "text"; | |
| key: string; | |
| message: string; | |
| placeholder?: string; | |
| validate?: (value: string) => string | undefined; | |
| condition?: (inputs: Record<string, string>) => boolean; | |
| } | { | |
| type: "select"; | |
| key: string; | |
| message: string; | |
| options: Array<{ | |
| label: string; | |
| value: string; | |
| hint?: string; | |
| }>; | |
| condition?: (inputs: Record<string, string>) => boolean; | |
| }>; | |
| authorize?(inputs?: Record<string, string>): Promise<{ | |
| type: "success"; | |
| key: string; | |
| provider?: string; | |
| } | { | |
| type: "failed"; | |
| }>; | |
| })[]; | |
| }; | |
| export type AuthOuathResult = { | |
| url: string; | |
| instructions: string; | |
| } & ({ | |
| method: "auto"; | |
| callback(): Promise<({ | |
| type: "success"; | |
| provider?: string; | |
| } & ({ | |
| refresh: string; | |
| access: string; | |
| expires: number; | |
| accountId?: string; | |
| } | { | |
| key: string; | |
| })) | { | |
| type: "failed"; | |
| }>; | |
| } | { | |
| method: "code"; | |
| callback(code: string): Promise<({ | |
| type: "success"; | |
| provider?: string; | |
| } & ({ | |
| refresh: string; | |
| access: string; | |
| expires: number; | |
| accountId?: string; | |
| } | { | |
| key: string; | |
| })) | { | |
| type: "failed"; | |
| }>; | |
| }); | |
| export interface Hooks { | |
| event?: (input: { | |
| event: Event; | |
| }) => Promise<void>; | |
| config?: (input: Config) => Promise<void>; | |
| tool?: { | |
| [key: string]: ToolDefinition; | |
| }; | |
| auth?: AuthHook; | |
| /** | |
| * Called when a new message is received | |
| */ | |
| "chat.message"?: (input: { | |
| sessionID: string; | |
| agent?: string; | |
| model?: { | |
| providerID: string; | |
| modelID: string; | |
| }; | |
| messageID?: string; | |
| variant?: string; | |
| }, output: { | |
| message: UserMessage; | |
| parts: Part[]; | |
| }) => Promise<void>; | |
| /** | |
| * Modify parameters sent to LLM | |
| */ | |
| "chat.params"?: (input: { | |
| sessionID: string; | |
| agent: string; | |
| model: Model; | |
| provider: ProviderContext; | |
| message: UserMessage; | |
| }, output: { | |
| temperature: number; | |
| topP: number; | |
| topK: number; | |
| options: Record<string, any>; | |
| }) => Promise<void>; | |
| "chat.headers"?: (input: { | |
| sessionID: string; | |
| agent: string; | |
| model: Model; | |
| provider: ProviderContext; | |
| message: UserMessage; | |
| }, output: { | |
| headers: Record<string, string>; | |
| }) => Promise<void>; | |
| "permission.ask"?: (input: Permission, output: { | |
| status: "ask" | "deny" | "allow"; | |
| }) => Promise<void>; | |
| "command.execute.before"?: (input: { | |
| command: string; | |
| sessionID: string; | |
| arguments: string; | |
| }, output: { | |
| parts: Part[]; | |
| }) => Promise<void>; | |
| "tool.execute.before"?: (input: { | |
| tool: string; | |
| sessionID: string; | |
| callID: string; | |
| }, output: { | |
| args: any; | |
| }) => Promise<void>; | |
| "tool.execute.after"?: (input: { | |
| tool: string; | |
| sessionID: string; | |
| callID: string; | |
| }, output: { | |
| title: string; | |
| output: string; | |
| metadata: any; | |
| }) => Promise<void>; | |
| "experimental.chat.messages.transform"?: (input: {}, output: { | |
| messages: { | |
| info: Message; | |
| parts: Part[]; | |
| }[]; | |
| }) => Promise<void>; | |
| "experimental.chat.system.transform"?: (input: { | |
| sessionID?: string; | |
| model: Model; | |
| }, output: { | |
| system: string[]; | |
| }) => Promise<void>; | |
| /** | |
| * Called before session compaction starts. Allows plugins to customize | |
| * the compaction prompt. | |
| * | |
| * - `context`: Additional context strings appended to the default prompt | |
| * - `prompt`: If set, replaces the default compaction prompt entirely | |
| */ | |
| "experimental.session.compacting"?: (input: { | |
| sessionID: string; | |
| }, output: { | |
| context: string[]; | |
| prompt?: string; | |
| }) => Promise<void>; | |
| "experimental.text.complete"?: (input: { | |
| sessionID: string; | |
| messageID: string; | |
| partID: string; | |
| }, output: { | |
| text: string; | |
| }) => Promise<void>; | |
| } | |
Xet Storage Details
- Size:
- 5.97 kB
- Xet hash:
- 377ab4c2b2d811e496113d5e235224e5a08c97e869617d805c6573f29134d00e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.