/** * Permission types. * * Wire-level types (PermissionMode, PermissionUpdate, etc) come from * `../protocol/`. This file adds SDK-local types — the `CanUseTool` * callback shape — which never crosses the JSONL boundary. */ export type { PermissionBehavior, PermissionDecisionClassification, PermissionUpdateDestination, PermissionRuleValue, } from '../protocol/index.js'; import type { PermissionBehavior, PermissionDecisionClassification, PermissionUpdateDestination, PermissionRuleValue } from '../protocol/index.js'; /** * Permission mode for controlling how tool executions are handled. */ export type PermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions' | 'yolo' | 'plan' | 'dontAsk' | 'auto'; export type PermissionUpdate = { type: 'addRules'; rules: PermissionRuleValue[]; behavior: PermissionBehavior; destination: PermissionUpdateDestination; } | { type: 'replaceRules'; rules: PermissionRuleValue[]; behavior: PermissionBehavior; destination: PermissionUpdateDestination; } | { type: 'removeRules'; rules: PermissionRuleValue[]; behavior: PermissionBehavior; destination: PermissionUpdateDestination; } | { type: 'setMode'; mode: PermissionMode; destination: PermissionUpdateDestination; } | { type: 'addDirectories'; directories: string[]; destination: PermissionUpdateDestination; } | { type: 'removeDirectories'; directories: string[]; destination: PermissionUpdateDestination; }; export type PermissionResult = { behavior: 'allow'; updatedInput?: Record; updatedPermissions?: PermissionUpdate[]; toolUseID?: string; decisionClassification?: PermissionDecisionClassification; } | { behavior: 'deny'; message: string; interrupt?: boolean; toolUseID?: string; decisionClassification?: PermissionDecisionClassification; }; export type CanUseToolOptions = { signal: AbortSignal; suggestions?: PermissionUpdate[]; blockedPath?: string; decisionReason?: string; title?: string; displayName?: string; description?: string; toolUseID: string; agentID?: string; }; export type CanUseTool = (toolName: string, input: Record, options: CanUseToolOptions) => Promise;