/** * PermissionRequest hook event. * * Fires when Claude Code is about to show a permission dialog for a tool. * A handler can `allow` or `deny` the tool call directly, optionally * rewriting the tool input and persisting new permission rules. Supports * a matcher on `tool_name`. * See https://code.claude.com/docs/en/hooks#permissionrequest. * * @since 0.1.0 */ import * as Effect from 'effect/Effect'; import * as Schema from 'effect/Schema'; import type { HookContext } from '../Context.js'; import type { HookDefinition } from '../Runner.js'; declare const PermissionRule_base: Schema.Class; }>, {}>; /** * A pending permission-rule change Claude Code suggests alongside the * prompt. The hook handler can accept these in its `updatedPermissions`. * * @category Schemas * @since 0.1.0 */ export declare class PermissionRule extends PermissionRule_base { } declare const PermissionSuggestion_base: Schema.Class>; readonly behavior: Schema.optional>; readonly destination: Schema.optional>; }>, {}>; export declare class PermissionSuggestion extends PermissionSuggestion_base { } declare const Input_base: Schema.Class; readonly tool_name: Schema.String; readonly tool_input: Schema.$Record; readonly permission_suggestions: Schema.optional>; readonly session_id: Schema.String; readonly transcript_path: Schema.String; readonly cwd: Schema.String; readonly permission_mode: Schema.optionalKey; readonly effort: Schema.optionalKey; readonly agent_id: Schema.optionalKey; readonly agent_type: Schema.optionalKey; }>, {}>; export declare class Input extends Input_base { } declare const RulePermissionUpdate_base: Schema.Class; readonly rules: Schema.$Array; readonly behavior: Schema.Literals; readonly destination: Schema.Literals; }>, {}>; /** * A permission rule update the hook may persist. Mirrors the shape of * `permission_suggestions` on the input side. * * @category Schemas * @since 0.1.0 */ export declare class RulePermissionUpdate extends RulePermissionUpdate_base { } declare const ModePermissionUpdate_base: Schema.Class; readonly mode: Schema.Literals; readonly destination: Schema.Literals; }>, {}>; export declare class ModePermissionUpdate extends ModePermissionUpdate_base { } declare const DirectoryPermissionUpdate_base: Schema.Class; readonly directories: Schema.$Array; readonly destination: Schema.Literals; }>, {}>; export declare class DirectoryPermissionUpdate extends DirectoryPermissionUpdate_base { } export declare const PermissionUpdate: Schema.Union; export type PermissionUpdate = typeof PermissionUpdate.Type; declare const PermissionDecision_base: Schema.Class; readonly updatedInput: Schema.optional>; readonly updatedPermissions: Schema.optional>>; readonly message: Schema.optional; readonly interrupt: Schema.optional; }>, {}>; export declare class PermissionDecision extends PermissionDecision_base { } declare const HookSpecificOutput_base: Schema.Class; readonly decision: typeof PermissionDecision; }>, {}>; export declare class HookSpecificOutput extends HookSpecificOutput_base { } declare const Output_base: Schema.Class; readonly stopReason: Schema.optional; readonly suppressOutput: Schema.optional; readonly systemMessage: Schema.optional; readonly terminalSequence: Schema.optional; readonly hookSpecificOutput: Schema.optional; }>, {}>; export declare class Output extends Output_base { } export declare const allow: (options?: { readonly updatedInput?: Readonly>; readonly updatedPermissions?: ReadonlyArray; }) => Output; /** * No-op output — Claude Code proceeds with its normal permission request flow. * * @category Decisions * @since 0.1.0 */ export declare const passthrough: () => Output; export declare const deny: (message: string, options?: { readonly interrupt?: boolean; }) => Output; export declare const define: (config: { readonly handler: (input: Input) => Effect.Effect; }) => HookDefinition; /** * Build a PermissionRequest hook that only handles matching `tool_name` * values. * * @category Constructors * @since 0.1.0 */ export declare const onMatcher: (config: { readonly matcher: string | RegExp; readonly handler: (input: Input) => Effect.Effect; readonly onMismatch?: (input: Input) => Effect.Effect; }) => HookDefinition; export {}; //# sourceMappingURL=PermissionRequest.d.ts.map