fix(types): restore CI compatibility for plugin hooks and tool context

This commit is contained in:
Maxim Harizanov
2026-02-19 13:40:38 +02:00
parent 850fb0378e
commit 6e82ef2384
2 changed files with 20 additions and 3 deletions

View File

@@ -2,7 +2,17 @@ import type { Plugin, ToolDefinition } from "@opencode-ai/plugin"
export type PluginContext = Parameters<Plugin>[0]
export type PluginInstance = Awaited<ReturnType<Plugin>>
export type PluginInterface = Omit<PluginInstance, "experimental.session.compacting">
type ChatHeadersHook = PluginInstance extends { "chat.headers"?: infer T }
? T
: (input: unknown, output: unknown) => Promise<void>
export type PluginInterface = Omit<
PluginInstance,
"experimental.session.compacting" | "chat.headers"
> & {
"chat.headers"?: ChatHeadersHook
}
export type ToolsRecord = Record<string, ToolDefinition>

View File

@@ -16,6 +16,10 @@ type ToolContextWithCallID = ToolContext & {
call_id?: string
}
type ToolContextWithMetadata = ToolContextWithCallID & {
metadata?: (value: unknown) => void
}
function resolveToolCallID(ctx: ToolContextWithCallID): string | undefined {
if (typeof ctx.callID === "string" && ctx.callID.trim() !== "") return ctx.callID
if (typeof ctx.callId === "string" && ctx.callId.trim() !== "") return ctx.callId
@@ -135,6 +139,7 @@ Use \\n in text to represent literal newlines.`,
},
execute: async (args: HashlineEditArgs, context: ToolContext) => {
try {
const metadataContext = context as ToolContextWithMetadata
const filePath = args.filePath
const { edits } = args
@@ -179,9 +184,11 @@ Use \\n in text to represent literal newlines.`,
},
}
context.metadata(meta)
if (typeof metadataContext.metadata === "function") {
metadataContext.metadata(meta)
}
const callID = resolveToolCallID(context)
const callID = resolveToolCallID(metadataContext)
if (callID) {
storeToolMetadata(context.sessionID, callID, meta)
}