Unify turn input submission and routing (#38275)

## What changed

- Add `TurnInputRequest` and typed submission results for atomically starting a turn, steering the active turn, or declining input with a specific reason.
- Expose `start_or_steer_turn`, `start_turn_if_idle`, and `steer_turn` on `CodexThread`, and migrate Core consumers to these APIs.
- Make app-server `turn/start` steer an active regular turn and return that turn's ID. Reject incompatible output schemas and non-steerable turns without applying settings or enqueueing input.

## Testing

- Cover concurrent start-or-steer submissions, accepted and rejected settings updates, output-schema compatibility, idle-start rejection, and app-server steering.

GitOrigin-RevId: dd9b5528d76ec650c019e97af420bc13190ea86a
This commit is contained in:
Owen Lin authored and copyberry committed 2026-08-13 00:00:16 +00:00
1 parent 4b07886d59
commit cbb7e82a8b
137 files changed
+5217 -6812

No files matched your search

@@ -564,7 +564,11 @@ async fn codex_tool_forwards_skills_extension_warnings() -> anyhow::Result<()> {
warning_json["params"]["_meta"]["requestId"],
codex_request_id
);
assert_eq!(warning_json["params"]["id"], codex_request_id.to_string());
assert!(
warning_json["params"]["id"]
.as_str()
.is_some_and(|turn_id| !turn_id.is_empty())
);
assert!(
warning_json["params"]["_meta"]["threadId"]
.as_str()