import { z } from 'zod' import * as React from 'react' // DEPRECATED: Use domain/tool/Tool.interface.ts for new implementations // This interface will be maintained for compatibility during transition export type SetToolJSXFn = (jsx: { jsx: React.ReactNode | null shouldHidePromptInput: boolean } | null) => void export interface ToolUseContext { messageId: string | undefined agentId?: string safeMode?: boolean abortController: AbortController readFileTimestamps: { [filePath: string]: number } options?: { commands?: any[] tools?: any[] verbose?: boolean slowAndCapableModel?: string safeMode?: boolean forkNumber?: number messageLogName?: string maxThinkingTokens?: any isKodingRequest?: boolean kodingContext?: string isCustomCommand?: boolean } // GPT-5 Responses API state management responseState?: { previousResponseId?: string conversationId?: string } } export interface ExtendedToolUseContext extends ToolUseContext { setToolJSX: SetToolJSXFn } export interface ValidationResult { result: boolean message?: string errorCode?: number meta?: any } export interface Tool< TInput extends z.ZodObject = z.ZodObject, TOutput = any, > { name: string description?: () => Promise inputSchema: TInput inputJSONSchema?: Record prompt: (options?: { safeMode?: boolean }) => Promise userFacingName?: () => string isEnabled: () => Promise isReadOnly: () => boolean isConcurrencySafe: () => boolean needsPermissions: (input?: z.infer) => boolean validateInput?: ( input: z.infer, context?: ToolUseContext, ) => Promise renderResultForAssistant: (output: TOutput) => string renderToolUseMessage: ( input: z.infer, options: { verbose: boolean }, ) => string renderToolUseRejectedMessage: () => React.ReactElement renderToolResultMessage?: (output: TOutput) => React.ReactElement call: ( input: z.infer, context: ToolUseContext, ) => AsyncGenerator< { type: 'result'; data: TOutput; resultForAssistant?: string }, void, unknown > }