import type { ToolDefinition, ToolResult } from "@opencode-ai/plugin"; import { tool } from "@opencode-ai/plugin"; import { Effect } from "effect"; export interface V2Location { directory: string; project?: { directory?: string; canonical?: string; }; } export interface V2ExecutionContext { sessionID?: string; messageID?: string; agent?: string; progress(update: Record): Effect.Effect; } export interface V2PermissionRequest { permission: string; patterns: string[]; always: string[]; metadata: Record; } export interface V2DefinitionRuntime extends V2ExecutionContext { directory: string; effectAbort: AbortSignal; worktree: string; abort: AbortSignal; metadata(update: Record): void; ask(request: V2PermissionRequest): Promise; } export interface V2BashExecution { name: "bash" | "aft_bash"; input: Record; context: V2DefinitionRuntime; definition: ToolDefinition; } export interface V2ToolConsumers { /** Maps legacy tool permission requests to the V2 session permission service. */ requestPermission?: (request: V2PermissionRequest, context: V2ExecutionContext) => Promise; /** Runs bash through the dedicated V2 executor while preserving the shared schema. */ executeBash?: (execution: V2BashExecution) => Promise; } export type V2Provider = "openai" | "anthropic" | "gemini"; export interface V2ProviderTool { name: string; description: string; input: ReturnType; options: Readonly> & { codemode: false; }; execute(input: Record, context: V2ExecutionContext): Effect.Effect, unknown>; } /** Project one shared V1 definition into the V2 provider-tool contract. */ export declare function projectV2Tool(name: string, definition: ToolDefinition, location: V2Location, consumers?: V2ToolConsumers): V2ProviderTool; /** Serialize provider-specific JSON envelopes for deterministic fixture comparisons. */ export declare function providerDefinitionBytes(provider: V2Provider, definition: V2ProviderTool): string; //# sourceMappingURL=v2.d.ts.map