Files
gh-kylesnowschwartz-simplec…/hooks/entrypoints/user_prompt_submit.rb
2025-11-30 08:36:27 +08:00

59 lines
2.0 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# frozen_string_literal: true
# UserPromptSubmit Entrypoint
#
# This entrypoint orchestrates all UserPromptSubmit handlers when Claude Code receives a user prompt.
# It reads JSON input from STDIN, executes all configured handlers, merges their outputs,
# and returns the final result to Claude Code via STDOUT.
require 'claude_hooks'
require 'json'
# Require all UserPromptSubmit handler classes
# require_relative '../handlers/user_prompt_submit_handler.rb'
require_relative '../handlers/copy_message_handler'
# Add additional handler requires here as needed:
# require_relative '../handlers/user_prompt_submit_handler'
# require_relative '../handlers/user_prompt_submit/append_rules'
# require_relative '../handlers/user_prompt_submit/log_user_prompt'
# require_relative '../handlers/user_prompt_submit/validate_content'
begin
# Read input data from Claude Code
input_data = JSON.parse($stdin.read)
# Initialize and execute all handlers
copy_message_handler = CopyMessageHandler.new(input_data)
# Execute handlers
copy_message_handler.call
# Use the single handler's output directly
merged_output = copy_message_handler.output
# Output result and exit with appropriate code
merged_output.output_and_exit
rescue JSON::ParserError => e
warn "[UserPromptSubmit] JSON parsing error: #{e.message}"
puts JSON.generate({
continue: false,
decision: 'block',
reason: "UserPromptSubmit hook JSON parsing error: #{e.message}",
suppressOutput: false
})
exit 1 # JSON error
rescue StandardError => e
warn "[UserPromptSubmit] Hook execution error: #{e.message}"
warn e.backtrace.join("\n") if ENV['RUBY_CLAUDE_HOOKS_DEBUG']
puts JSON.generate({
continue: false,
decision: 'block',
reason: "UserPromptSubmit hook execution error: #{e.message}",
suppressOutput: false
})
exit 1 # General error
end