/** * [WHO]: createPlanModeCanUseTool() — SDK-level plan mode permission enforcement * [FROM]: Permission logic derived from extensions/builtin/plan/plan-permissions.ts * [TO]: Consumed by core/runtime/sdk.ts when permissionMode === 'plan' * [HERE]: core/runtime/plan-mode-permissions.ts — standalone plan mode tool gating for SDK consumers */ import type { AgentToolPermissionDecision } from "@catui/agent-core"; type CanUseToolEvent = { toolCallId: string; toolName: string; requestedToolName: string; input: unknown; rawInput: unknown; }; type CanUseToolFn = (event: CanUseToolEvent) => Promise | AgentToolPermissionDecision; /** * Create a canUseTool function that enforces plan mode restrictions. * * Rules: * - Read-only tools (Read, Grep, Find, Ls, LSP, AskUserQuestion, etc.): always allowed * - Plan tools (ExitPlanMode, EnterPlanMode): always allowed * - Write/Edit: only allowed for .md files * - Bash: only allowed for read-only commands * - Agent/Task: only allowed for Explore/Plan types * - Everything else: denied */ export declare function createPlanModeCanUseTool(_cwd: string): CanUseToolFn; /** * Compose a plan mode canUseTool with an optional user-provided canUseTool. * Plan mode check runs first; if it allows, the user's check is also consulted. */ export declare function composePlanModeCanUseTool(planModeCheck: CanUseToolFn, userCheck?: CanUseToolFn): CanUseToolFn; export {};