Add structured asynchronous user input requests (#42178)

## What changed

- Replace `send_user_message_async` with `request_user_input_async`, accepting one or more questions with optional suggested answers while allowing the turn to continue.
- Attach structured question metadata to asynchronous agent messages while retaining readable fallback text, and preserve it through app-server events, thread history, and generated schemas.
- Continue enabling the new tool for model catalogs that advertise either the old or new tool name.

## Testing

- Cover tool registration, question validation, emitted items, continued turn execution, history preservation, and backwards-compatible deserialization.

GitOrigin-RevId: ffc49aebde2e854c3c50a122aa52805fec3fc6b3
This commit is contained in:
rka-oai authored and copyberry committed 2026-09-02 02:09:35 +00:00
1 parent b21f2e3081
commit 2c79ee6dac
80 files changed
+1110 -146

No files matched your search

@@ -136,6 +136,7 @@ pub(super) fn rollout_items_from_messages(messages: Vec<ConversationMessage>) ->
phase: None,
memory_citation: None,
delivery: None,
questions: None,
},
)));
items.push(RolloutItem::ResponseItem(response_item(message).into()));
@@ -158,6 +159,7 @@ fn external_session_imported_marker_item() -> RolloutItem {
phase: None,
memory_citation: None,
delivery: None,
questions: None,
}))
}
@@ -254,6 +256,7 @@ mod tests {
phase: None,
memory_citation: None,
delivery: None,
questions: None,
}
);
}
@@ -287,6 +290,7 @@ mod tests {
phase: None,
memory_citation: None,
delivery: None,
questions: None,
})
);
let last_turn_complete = imported