import type { AgentTool } from "@prestyj/agent";
import { ProcessManager } from "../core/process-manager.js";
import { type ToolOperations } from "./operations.js";
import type { AgentDefinition } from "../core/agents.js";
import type { Skill } from "../core/skills.js";
import type { GoalMode } from "../core/runtime-mode.js";
export interface CreateToolsOptions {
    agents?: AgentDefinition[];
    skills?: Skill[];
    provider?: string;
    model?: string;
    /** Custom I/O operations for remote execution (SSH, Docker, etc.). Defaults to local filesystem. */
    operations?: ToolOperations;
    /** Ref for checking plan mode inside tool execute functions. */
    planModeRef?: {
        current: boolean;
    };
    /** Ref for checking Goal orchestration mode inside tool execute functions. */
    goalModeRef?: {
        current: GoalMode;
    };
    /** Callback when the LLM enters plan mode. */
    onEnterPlan?: (reason?: string) => void | Promise<void>;
    /** Callback when the LLM submits a plan for review. */
    onExitPlan?: (planPath: string) => Promise<string>;
    /** Callback after read tool successfully reads a text file. */
    onFileRead?: (filePath: string) => void | Promise<void>;
    /** Callback after write/edit tools successfully mutate a file. */
    onFileMutated?: (filePath: string) => void | Promise<void>;
    /**
     * Callback fired by write/edit BEFORE the on-disk write, so a checkpoint store
     * can snapshot the file's prior content for /rewind. Receives the resolved
     * absolute path.
     */
    onPreFileMutation?: (filePath: string) => void | Promise<void>;
    /**
     * Getter for parent's prompt-cache routing key, evaluated lazily at
     * sub-agent spawn time. Returning a stable key from this getter lets every
     * sub-agent spawned by one parent share the same prompt_cache_key prefix —
     * without it, each child generates a fresh sessionId-derived key and pays a
     * cold-cache cost on every turn. Lazy because the parent's sessionId is
     * only assigned after `createTools()` runs during session init.
     */
    getCacheKey?: () => string | undefined;
}
export interface CreateToolsResult {
    tools: AgentTool[];
    processManager: ProcessManager;
    /**
     * Rebuild the `read` tool for a different model, reusing the SAME read
     * tracker so read-before-edit history survives. The read tool's video
     * capability (description + native-video execute path) is baked in at
     * creation from the model's `maxVideoBytes`, so switching to/from a
     * video-capable model mid-session requires a fresh tool object. Returns the
     * new tool; the caller swaps it into the live tool set and rebuilds the
     * system prompt.
     */
    rebuildReadTool: (model: string) => AgentTool;
}
export declare function createTools(cwd: string, opts?: CreateToolsOptions): CreateToolsResult;
export { createReadTool } from "./read.js";
export { createWriteTool } from "./write.js";
export { createEditTool } from "./edit.js";
export { createBashTool } from "./bash.js";
export { createFindTool } from "./find.js";
export { createGrepTool } from "./grep.js";
export { createLsTool } from "./ls.js";
export { createWebFetchTool } from "./web-fetch.js";
export { createWebSearchTool } from "./web-search.js";
export { createSourcePathTool } from "./source-path.js";
export { createTaskOutputTool } from "./task-output.js";
export { createTaskStopTool } from "./task-stop.js";
export { createTasksTool } from "./tasks.js";
export { createSkillTool } from "./skill.js";
export { createScreenshotTool } from "./screenshot.js";
export { createEnterPlanTool } from "./enter-plan.js";
export { createExitPlanTool } from "./exit-plan.js";
export { createGoalsTool } from "./goals.js";
export { ProcessManager } from "../core/process-manager.js";
export { localOperations, type ToolOperations } from "./operations.js";
//# sourceMappingURL=index.d.ts.map