import type { Event, createOpencodeClient, App, Model, Provider, Permission, UserMessage, Part } from "@opencode-ai/sdk" import type { BunShell } from "./shell" export type PluginInput = { client: ReturnType app: App $: BunShell } export type Plugin = (input: PluginInput) => Promise export interface Hooks { event?: (input: { event: Event }) => Promise /** * Called when a new message is received */ "chat.message"?: (input: {}, output: { message: UserMessage; parts: Part[] }) => Promise /** * Modify parameters sent to LLM */ "chat.params"?: ( input: { model: Model; provider: Provider; message: UserMessage }, output: { temperature: number; topP: number; options: Record }, ) => Promise "permission.ask"?: (input: Permission, output: { status: "ask" | "deny" | "allow" }) => Promise "tool.execute.before"?: ( input: { tool: string; sessionID: string; callID: string }, output: { args: any }, ) => Promise "tool.execute.after"?: ( input: { tool: string; sessionID: string; callID: string }, output: { title: string output: string metadata: any }, ) => Promise }