Propagate approval rejection reasons (#34400)

## What changed

- Change `ReviewDecision::Denied` to carry a rejection string and update the generated protocol schemas.
- Preserve specific rejection reasons through command, patch, network, MCP, delegated, and automatic approval flows so tool results can return them to the model.
- Distinguish invalid approval responses from user declines and truncate oversized rejection messages before adding them to model context.

## Testing

- Add coverage for denial serialization, invalid app-server approval responses, dropped automatic reviews, network rejection propagation, and rejection-message truncation.

GitOrigin-RevId: d48a55643aa03c7ecfa08a8e4b669913eec5464a
This commit is contained in:
Dylan Hurd authored and copyberry committed 2026-07-20 19:23:21 +00:00
1 parent 8c41ed33ce
commit e52c35b000
36 files changed
+499 -452

No files matched your search

@@ -88,11 +88,26 @@
"type": "object"
},
{
"additionalProperties": false,
"description": "User has denied this command and the agent should not execute it, but it should continue the session and try something else.",
"enum": [
"properties": {
"denied": {
"properties": {
"rejection": {
"type": "string"
}
},
"required": [
"rejection"
],
"type": "object"
}
},
"required": [
"denied"
],
"type": "string"
"title": "DeniedReviewDecision",
"type": "object"
},
{
"description": "Automatic approval review timed out before reaching a decision.",