5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/nitro_intelligence/tool_call_review_validator.rb', line 5
def validate!(thread_state:, tool_calls:, pending_tool_calls:)
tool_calls = normalize_tool_calls(tool_calls)
pending_tool_calls_by_id = Array(pending_tool_calls).index_by { |tool_call| tool_call["id"] }
review_actions = Array(thread_state.dig("interrupts", 0, "value", "review_actions"))
tool_calls.each do |tool_call_id, review|
pending_tool_call = pending_tool_calls_by_id[tool_call_id]&.with_indifferent_access
raise_error!("Unknown tool call ids: #{tool_call_id}") unless pending_tool_call
review = normalize_review(tool_call_id, review)
review_action = review[:action].to_s
unless review_actions.include?(review_action)
raise_error!("Invalid review action `#{review_action}` for tool call #{tool_call_id}")
end
validate_edited_args!(tool_call_id:, review:, pending_tool_call:) if review_action == "edit"
end
validate_completeness!(
submitted_tool_call_ids: tool_calls.keys,
pending_tool_calls:
)
end
|