summaryrefslogtreecommitdiffhomepage
path: root/packages/plugin/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/plugin/src/index.ts')
-rw-r--r--packages/plugin/src/index.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/plugin/src/index.ts b/packages/plugin/src/index.ts
new file mode 100644
index 000000000..9040fb517
--- /dev/null
+++ b/packages/plugin/src/index.ts
@@ -0,0 +1,56 @@
+import type { Event, createOpencodeClient, App, Model, Provider, Permission, UserMessage, Part } from "@opencode-ai/sdk"
+import { $ } from "bun"
+
+export type PluginInput = {
+ client: ReturnType<typeof createOpencodeClient>
+ app: App
+ $: $
+}
+export type Plugin = (input: PluginInput) => Promise<Hooks>
+
+export interface Hooks {
+ event?: (input: { event: Event }) => Promise<void>
+ chat?: {
+ /**
+ * Called when a new message is received
+ */
+ message?: (input: {}, output: { message: UserMessage; parts: Part[] }) => Promise<void>
+ /**
+ * Modify parameters sent to LLM
+ */
+ params?: (
+ input: { model: Model; provider: Provider; message: UserMessage },
+ output: { temperature: number; topP: number },
+ ) => Promise<void>
+ }
+ permission?: {
+ /**
+ * Called when a permission is asked
+ */
+ ask?: (input: Permission, output: { status: "ask" | "deny" | "allow" }) => Promise<void>
+ }
+ tool?: {
+ execute?: {
+ /**
+ * Called before a tool is executed
+ */
+ before?: (
+ input: { tool: string; sessionID: string; callID: string },
+ output: {
+ args: any
+ },
+ ) => Promise<void>
+ /**
+ * Called after a tool is executed
+ */
+ after?: (
+ input: { tool: string; sessionID: string; callID: string },
+ output: {
+ title: string
+ output: string
+ metadata: any
+ },
+ ) => Promise<void>
+ }
+ }
+}