| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import type {
- Event,
- createOpencodeClient,
- Project,
- Model,
- Provider,
- Permission,
- UserMessage,
- Part,
- Auth,
- Config,
- } from "@opencode-ai/sdk"
- import type { BunShell } from "./shell"
- import { type ToolDefinition } from "./tool"
- export * from "./tool"
- export type PluginInput = {
- client: ReturnType<typeof createOpencodeClient>
- project: Project
- directory: string
- worktree: string
- $: BunShell
- }
- export type Plugin = (input: PluginInput) => Promise<Hooks>
- export interface Hooks {
- event?: (input: { event: Event }) => Promise<void>
- config?: (input: Config) => Promise<void>
- tool?: {
- [key: string]: ToolDefinition
- }
- auth?: {
- provider: string
- loader?: (auth: () => Promise<Auth>, provider: Provider) => Promise<Record<string, any>>
- methods: (
- | {
- type: "oauth"
- label: string
- authorize(): Promise<
- { url: string; instructions: string } & (
- | {
- method: "auto"
- callback(): Promise<
- | ({
- type: "success"
- } & (
- | {
- refresh: string
- access: string
- expires: number
- }
- | { key: string }
- ))
- | {
- type: "failed"
- }
- >
- }
- | {
- method: "code"
- callback(code: string): Promise<
- | ({
- type: "success"
- } & (
- | {
- refresh: string
- access: string
- expires: number
- }
- | { key: string }
- ))
- | {
- type: "failed"
- }
- >
- }
- )
- >
- }
- | { type: "api"; label: string }
- )[]
- }
- /**
- * Called when a new message is received
- */
- "chat.message"?: (input: {}, output: { message: UserMessage; parts: Part[] }) => Promise<void>
- /**
- * Modify parameters sent to LLM
- */
- "chat.params"?: (
- input: { model: Model; provider: Provider; message: UserMessage },
- output: { temperature: number; topP: number; options: Record<string, any> },
- ) => Promise<void>
- "permission.ask"?: (input: Permission, output: { status: "ask" | "deny" | "allow" }) => 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>
- }
|