mirror of
https://github.com/openai/codex.git
synced 2026-11-13 22:47:20 +00:00
[2 of 7] Remove UserInputWithTurnContext (#23081)
**Stack position:** [2 of 7] ## Summary This PR removes the overlapping `Op::UserInputWithTurnContext` variant now that `Op::UserInput` can carry thread settings overrides directly. ## Stack 1. [1 of 7] [Add thread settings to UserInput](https://github.com/openai/codex/pull/23080) 2. [2 of 7] [Remove UserInputWithTurnContext](https://github.com/openai/codex/pull/23081) (this PR) 3. [3 of 7] [Remove UserTurn](https://github.com/openai/codex/pull/23075) 4. [4 of 7] [Placeholder for OverrideTurnContext cleanup](https://github.com/openai/codex/pull/23087) 5. [5 of 7] [Replace OverrideTurnContext with ThreadSettings](https://github.com/openai/codex/pull/22508) 6. [6 of 7] [Add app-server thread settings API](https://github.com/openai/codex/pull/22509) 7. [7 of 7] [Sync TUI thread settings](https://github.com/openai/codex/pull/22510)
This commit is contained in:
1 parent
84d941d07f
commit
e811234484
4 files changed
+25
-194
No files matched your search
@@ -502,37 +502,31 @@ impl TurnRequestProcessor {
|
|||||||
})?;
|
})?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let thread_settings = codex_protocol::protocol::ThreadSettingsOverrides {
|
||||||
|
cwd,
|
||||||
|
workspace_roots: runtime_workspace_roots,
|
||||||
|
profile_workspace_roots,
|
||||||
|
approval_policy,
|
||||||
|
approvals_reviewer,
|
||||||
|
sandbox_policy,
|
||||||
|
permission_profile,
|
||||||
|
active_permission_profile,
|
||||||
|
windows_sandbox_level: None,
|
||||||
|
model,
|
||||||
|
effort,
|
||||||
|
summary,
|
||||||
|
service_tier,
|
||||||
|
collaboration_mode,
|
||||||
|
personality,
|
||||||
|
};
|
||||||
|
|
||||||
// Start the turn by submitting the user input. Return its submission id as turn_id.
|
// Start the turn by submitting the user input. Return its submission id as turn_id.
|
||||||
let turn_op = if has_any_overrides {
|
let turn_op = Op::UserInput {
|
||||||
Op::UserInputWithTurnContext {
|
items: mapped_items,
|
||||||
items: mapped_items,
|
environments: environment_selections,
|
||||||
environments: environment_selections,
|
final_output_json_schema: params.output_schema,
|
||||||
final_output_json_schema: params.output_schema,
|
responsesapi_client_metadata: params.responsesapi_client_metadata,
|
||||||
responsesapi_client_metadata: params.responsesapi_client_metadata,
|
thread_settings,
|
||||||
cwd,
|
|
||||||
workspace_roots: runtime_workspace_roots,
|
|
||||||
profile_workspace_roots,
|
|
||||||
approval_policy,
|
|
||||||
approvals_reviewer,
|
|
||||||
sandbox_policy,
|
|
||||||
permission_profile,
|
|
||||||
active_permission_profile,
|
|
||||||
windows_sandbox_level: None,
|
|
||||||
model,
|
|
||||||
effort,
|
|
||||||
summary,
|
|
||||||
service_tier,
|
|
||||||
collaboration_mode,
|
|
||||||
personality,
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Op::UserInput {
|
|
||||||
items: mapped_items,
|
|
||||||
environments: environment_selections,
|
|
||||||
final_output_json_schema: params.output_schema,
|
|
||||||
responsesapi_client_metadata: params.responsesapi_client_metadata,
|
|
||||||
thread_settings: Default::default(),
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
let turn_id = self
|
let turn_id = self
|
||||||
.submit_core_op(&request_id, thread.as_ref(), turn_op)
|
.submit_core_op(&request_id, thread.as_ref(), turn_op)
|
||||||
|
|||||||
@@ -164,52 +164,6 @@ pub(super) async fn user_input_or_turn_inner(
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Op::UserInputWithTurnContext {
|
|
||||||
cwd,
|
|
||||||
workspace_roots,
|
|
||||||
profile_workspace_roots,
|
|
||||||
approval_policy,
|
|
||||||
approvals_reviewer,
|
|
||||||
sandbox_policy,
|
|
||||||
permission_profile,
|
|
||||||
active_permission_profile,
|
|
||||||
windows_sandbox_level,
|
|
||||||
model,
|
|
||||||
effort,
|
|
||||||
summary,
|
|
||||||
service_tier,
|
|
||||||
final_output_json_schema,
|
|
||||||
items,
|
|
||||||
responsesapi_client_metadata,
|
|
||||||
collaboration_mode,
|
|
||||||
personality,
|
|
||||||
environments,
|
|
||||||
} => {
|
|
||||||
let mut updates = thread_settings_update(
|
|
||||||
sess,
|
|
||||||
ThreadSettingsOverrides {
|
|
||||||
cwd,
|
|
||||||
workspace_roots,
|
|
||||||
profile_workspace_roots,
|
|
||||||
approval_policy,
|
|
||||||
approvals_reviewer,
|
|
||||||
sandbox_policy,
|
|
||||||
permission_profile,
|
|
||||||
active_permission_profile,
|
|
||||||
windows_sandbox_level,
|
|
||||||
model,
|
|
||||||
effort,
|
|
||||||
summary,
|
|
||||||
service_tier,
|
|
||||||
collaboration_mode,
|
|
||||||
personality,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
updates.final_output_json_schema = Some(final_output_json_schema);
|
|
||||||
updates.environments = environments;
|
|
||||||
(items, updates, responsesapi_client_metadata)
|
|
||||||
}
|
|
||||||
Op::UserInput {
|
Op::UserInput {
|
||||||
items,
|
items,
|
||||||
environments,
|
environments,
|
||||||
@@ -872,9 +826,7 @@ pub(super) async fn submission_loop(
|
|||||||
.await;
|
.await;
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
Op::UserInput { .. }
|
Op::UserInput { .. } | Op::UserTurn { .. } => {
|
||||||
| Op::UserInputWithTurnContext { .. }
|
|
||||||
| Op::UserTurn { .. } => {
|
|
||||||
user_input_or_turn(&sess, sub.id.clone(), sub.op).await;
|
user_input_or_turn(&sess, sub.id.clone(), sub.op).await;
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5227,31 +5227,6 @@ fn op_kind_distinguishes_turn_ops() {
|
|||||||
.kind(),
|
.kind(),
|
||||||
"user_input"
|
"user_input"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
|
||||||
Op::UserInputWithTurnContext {
|
|
||||||
environments: None,
|
|
||||||
items: vec![],
|
|
||||||
final_output_json_schema: None,
|
|
||||||
responsesapi_client_metadata: None,
|
|
||||||
cwd: None,
|
|
||||||
workspace_roots: None,
|
|
||||||
profile_workspace_roots: None,
|
|
||||||
approval_policy: None,
|
|
||||||
approvals_reviewer: None,
|
|
||||||
sandbox_policy: None,
|
|
||||||
permission_profile: None,
|
|
||||||
active_permission_profile: None,
|
|
||||||
windows_sandbox_level: None,
|
|
||||||
model: None,
|
|
||||||
effort: None,
|
|
||||||
summary: None,
|
|
||||||
service_tier: None,
|
|
||||||
collaboration_mode: None,
|
|
||||||
personality: None,
|
|
||||||
}
|
|
||||||
.kind(),
|
|
||||||
"user_input_with_turn_context"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
|||||||
@@ -518,95 +518,6 @@ pub enum Op {
|
|||||||
thread_settings: ThreadSettingsOverrides,
|
thread_settings: ThreadSettingsOverrides,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// Similar to [`Op::UserInput`], but first applies persistent thread-settings
|
|
||||||
/// overrides in the same queued operation. This preserves submission order
|
|
||||||
/// and prevents the input from starting if the overrides are rejected.
|
|
||||||
UserInputWithTurnContext {
|
|
||||||
/// User input items, see `InputItem`
|
|
||||||
items: Vec<UserInput>,
|
|
||||||
/// Optional turn-scoped environment selections.
|
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
||||||
environments: Option<Vec<TurnEnvironmentSelection>>,
|
|
||||||
/// Optional JSON Schema used to constrain the final assistant message for this turn.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
final_output_json_schema: Option<Value>,
|
|
||||||
/// Optional turn-scoped Responses API `client_metadata`.
|
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
|
||||||
responsesapi_client_metadata: Option<HashMap<String, String>>,
|
|
||||||
|
|
||||||
/// Updated `cwd` for sandbox/tool calls.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
cwd: Option<PathBuf>,
|
|
||||||
|
|
||||||
/// Updated runtime workspace roots used to materialize symbolic
|
|
||||||
/// `:workspace_roots` filesystem permissions.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
workspace_roots: Option<Vec<AbsolutePathBuf>>,
|
|
||||||
|
|
||||||
/// Updated profile-defined workspace roots for status summaries and
|
|
||||||
/// per-turn config reconstruction.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
profile_workspace_roots: Option<Vec<AbsolutePathBuf>>,
|
|
||||||
|
|
||||||
/// Updated command approval policy.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
approval_policy: Option<AskForApproval>,
|
|
||||||
|
|
||||||
/// Updated approval reviewer for future approval prompts.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
approvals_reviewer: Option<ApprovalsReviewer>,
|
|
||||||
|
|
||||||
/// Updated sandbox policy for tool calls.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
sandbox_policy: Option<SandboxPolicy>,
|
|
||||||
|
|
||||||
/// Updated permissions profile for tool calls.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
permission_profile: Option<PermissionProfile>,
|
|
||||||
|
|
||||||
/// Named or built-in profile that produced `permission_profile`, if
|
|
||||||
/// the update selected a profile rather than supplying raw
|
|
||||||
/// permissions.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
active_permission_profile: Option<ActivePermissionProfile>,
|
|
||||||
|
|
||||||
/// Updated Windows sandbox mode for tool execution.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
windows_sandbox_level: Option<WindowsSandboxLevel>,
|
|
||||||
|
|
||||||
/// Updated model slug. When set, the model info is derived
|
|
||||||
/// automatically.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
model: Option<String>,
|
|
||||||
|
|
||||||
/// Updated reasoning effort (honored only for reasoning-capable models).
|
|
||||||
///
|
|
||||||
/// Use `Some(Some(_))` to set a specific effort, `Some(None)` to clear
|
|
||||||
/// the effort, or `None` to leave the existing value unchanged.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
effort: Option<Option<ReasoningEffortConfig>>,
|
|
||||||
|
|
||||||
/// Updated reasoning summary preference (honored only for reasoning-capable models).
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
summary: Option<ReasoningSummaryConfig>,
|
|
||||||
|
|
||||||
/// Updated service tier preference for future turns.
|
|
||||||
///
|
|
||||||
/// Use `Some(Some(_))` to set a specific tier, `Some(None)` to clear the
|
|
||||||
/// preference, or `None` to leave the existing value unchanged.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
service_tier: Option<Option<String>>,
|
|
||||||
|
|
||||||
/// EXPERIMENTAL - set a pre-set collaboration mode.
|
|
||||||
/// Takes precedence over model, effort, and developer instructions if set.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
collaboration_mode: Option<CollaborationMode>,
|
|
||||||
|
|
||||||
/// Updated personality preference.
|
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
|
||||||
personality: Option<Personality>,
|
|
||||||
},
|
|
||||||
|
|
||||||
/// Similar to [`Op::UserInput`], but contains additional context required
|
/// Similar to [`Op::UserInput`], but contains additional context required
|
||||||
/// for a turn of a [`crate::codex_thread::CodexThread`].
|
/// for a turn of a [`crate::codex_thread::CodexThread`].
|
||||||
UserTurn {
|
UserTurn {
|
||||||
@@ -932,7 +843,6 @@ impl Op {
|
|||||||
Self::RealtimeConversationClose => "realtime_conversation_close",
|
Self::RealtimeConversationClose => "realtime_conversation_close",
|
||||||
Self::RealtimeConversationListVoices => "realtime_conversation_list_voices",
|
Self::RealtimeConversationListVoices => "realtime_conversation_list_voices",
|
||||||
Self::UserInput { .. } => "user_input",
|
Self::UserInput { .. } => "user_input",
|
||||||
Self::UserInputWithTurnContext { .. } => "user_input_with_turn_context",
|
|
||||||
Self::UserTurn { .. } => "user_turn",
|
Self::UserTurn { .. } => "user_turn",
|
||||||
Self::InterAgentCommunication { .. } => "inter_agent_communication",
|
Self::InterAgentCommunication { .. } => "inter_agent_communication",
|
||||||
Self::OverrideTurnContext { .. } => "override_turn_context",
|
Self::OverrideTurnContext { .. } => "override_turn_context",
|
||||||
|
|||||||
Reference in new issue
Block a user