Class: ClaudeHooks::PermissionRequest

Inherits:
Base
  • Object
show all
Defined in:
lib/claude_hooks/permission_request.rb

Constant Summary

Constants inherited from Base

Base::COMMON_INPUT_FIELDS

Instance Attribute Summary

Attributes inherited from Base

#config, #input_data, #logger, #output, #output_data

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#agent_id, #agent_type, #allow_continue!, #base_dir, #call, #clear_specifics!, #clear_system_message!, #cwd, #effort, #home_claude_dir, #home_path_for, #hook_event_name, #hook_type, #initialize, #log, #output_and_exit, #path_for, #permission_mode, #prevent_continue!, #project_claude_dir, #project_path_for, #prompt_id, #read_transcript, #session_id, #show_output!, #stringify_output, #suppress_output!, #system_message!, #terminal_sequence, #terminal_sequence!, #transcript_path

Constructor Details

This class inherits a constructor from ClaudeHooks::Base

Class Method Details

.hook_typeObject



7
8
9
# File 'lib/claude_hooks/permission_request.rb', line 7

def self.hook_type
  'PermissionRequest'
end

.input_fieldsObject



11
12
13
# File 'lib/claude_hooks/permission_request.rb', line 11

def self.input_fields
  %w[tool_name tool_input tool_use_id]
end

Instance Method Details

#allow_permission!(reason = '') ⇒ Object

OUTPUT DATA HELPERS ===



35
36
37
38
39
40
41
# File 'lib/claude_hooks/permission_request.rb', line 35

def allow_permission!(reason = '')
  @output_data['hookSpecificOutput'] = {
    'hookEventName' => hook_event_name,
    'decision' => { 'behavior' => 'allow' }
  }
  @output_data['hookSpecificOutput']['decision']['message'] = reason unless reason.empty?
end

#deny_permission!(reason = '', interrupt: nil) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/claude_hooks/permission_request.rb', line 43

def deny_permission!(reason = '', interrupt: nil)
  decision = { 'behavior' => 'deny' }
  decision['message'] = reason unless reason.empty?
  decision['interrupt'] = interrupt unless interrupt.nil?
  @output_data['hookSpecificOutput'] = {
    'hookEventName' => hook_event_name,
    'decision' => decision
  }
end

#permission_suggestionsObject



29
30
31
# File 'lib/claude_hooks/permission_request.rb', line 29

def permission_suggestions
  @input_data['permissionSuggestions'] || @input_data['permission_suggestions'] || []
end

#tool_inputObject



21
22
23
# File 'lib/claude_hooks/permission_request.rb', line 21

def tool_input
  @input_data['tool_input']
end

#tool_nameObject

INPUT DATA ACCESS ===



17
18
19
# File 'lib/claude_hooks/permission_request.rb', line 17

def tool_name
  @input_data['tool_name']
end

#tool_use_idObject



25
26
27
# File 'lib/claude_hooks/permission_request.rb', line 25

def tool_use_id
  @input_data['tool_use_id'] || @input_data['toolUseId']
end

#update_input_and_allow!(updated_input, reason = '', updated_permissions: nil) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/claude_hooks/permission_request.rb', line 53

def update_input_and_allow!(updated_input, reason = '', updated_permissions: nil)
  decision = { 'behavior' => 'allow', 'updatedInput' => updated_input }
  decision['message'] = reason unless reason.empty?
  decision['updatedPermissions'] = updated_permissions unless updated_permissions.nil?
  @output_data['hookSpecificOutput'] = {
    'hookEventName' => hook_event_name,
    'decision' => decision
  }
end