import { z } from "zod" export type ToolContext = { sessionID: string messageID: string agent: string /** * Current project directory for this session. * Prefer this over process.cwd() when resolving relative paths. */ directory: string /** * Project worktree root for this session. * Useful for generating stable relative paths (e.g. path.relative(worktree, absPath)). */ worktree: string abort: AbortSignal metadata(input: { title?: string; metadata?: { [key: string]: any } }): void ask(input: AskInput): Promise } type AskInput = { permission: string patterns: string[] always: string[] metadata: { [key: string]: any } } export function tool(input: { description: string args: Args execute(args: z.infer>, context: ToolContext): Promise }) { return input } tool.schema = z export type ToolDefinition = ReturnType