[
EventDefinition.new(name: "turn_start", failure_policy: "warn", modifiable_fields: %w[input display_input]),
EventDefinition.new(name: "turn_context_build_before", failure_policy: "warn"),
EventDefinition.new(name: "turn_context_build_after", failure_policy: "warn"),
EventDefinition.new(name: "model_request_before", failure_policy: "warn", modifiable_fields: %w[messages tools provider model reasoning]),
EventDefinition.new(name: "turn_model_request_before", failure_policy: "warn"),
EventDefinition.new(name: "model_response_after_parse", failure_policy: "warn"),
EventDefinition.new(name: "turn_model_response_complete", failure_policy: "warn"),
EventDefinition.new(name: "turn_end", failure_policy: "warn"),
EventDefinition.new(name: "session_create", failure_policy: "warn"),
EventDefinition.new(name: "session_resume", failure_policy: "warn"),
EventDefinition.new(name: "session_clone", failure_policy: "warn"),
EventDefinition.new(name: "session_fork", failure_policy: "warn"),
EventDefinition.new(name: "session_rename", failure_policy: "warn"),
EventDefinition.new(name: "session_export_before", failure_policy: "deny"),
EventDefinition.new(name: "session_export_after", failure_policy: "warn"),
EventDefinition.new(name: "session_compact_before", failure_policy: "deny"),
EventDefinition.new(name: "session_compact_after", failure_policy: "warn"),
EventDefinition.new(name: "tool_output_compact_before", failure_policy: "warn"),
EventDefinition.new(name: "tool_output_compact_after", failure_policy: "warn"),
EventDefinition.new(name: "tool_call_before", failure_policy: "deny", modifiable_fields: %w[arguments]),
EventDefinition.new(name: "tool_call_after", failure_policy: "warn"),
EventDefinition.new(name: "tool_call_error", failure_policy: "warn"),
EventDefinition.new(name: "mcp_tool_before", failure_policy: "deny"),
EventDefinition.new(name: "mcp_tool_after", failure_policy: "warn"),
EventDefinition.new(name: "mcp_tool_error", failure_policy: "warn"),
EventDefinition.new(name: "shell_command_before", failure_policy: "deny", modifiable_fields: %w[command timeout_seconds]),
EventDefinition.new(name: "shell_command_after", failure_policy: "warn"),
EventDefinition.new(name: "file_change_before", failure_policy: "deny"),
EventDefinition.new(name: "file_change_after", failure_policy: "warn"),
EventDefinition.new(name: "git_status_after", failure_policy: "warn"),
EventDefinition.new(name: "git_diff_before", failure_policy: "deny"),
EventDefinition.new(name: "git_diff_after", failure_policy: "warn"),
EventDefinition.new(name: "git_stage_before", failure_policy: "deny"),
EventDefinition.new(name: "git_stage_after", failure_policy: "warn"),
EventDefinition.new(name: "git_commit_before", failure_policy: "deny"),
EventDefinition.new(name: "git_commit_after", failure_policy: "warn"),
EventDefinition.new(name: "worker_job_create", failure_policy: "warn"),
EventDefinition.new(name: "worker_job_start_before", failure_policy: "warn"),
EventDefinition.new(name: "worker_job_start_after", failure_policy: "warn"),
EventDefinition.new(name: "worker_job_ready_for_review", failure_policy: "warn"),
EventDefinition.new(name: "worker_job_failed", failure_policy: "warn")
].each_with_object({}) { |definition, result| result[definition.name] = definition }.freeze