Skip to content

Commit d012bf5

Browse files
committed
refactor: adding allow_prefix into ApprovedAllowPrefix
1 parent 7fca572 commit d012bf5

File tree

12 files changed

+33
-76
lines changed

12 files changed

+33
-76
lines changed

codex-rs/app-server/src/bespoke_event_handling.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,6 @@ async fn on_exec_approval_response(
611611
.submit(Op::ExecApproval {
612612
id: event_id,
613613
decision: response.decision,
614-
allow_prefix: None,
615614
})
616615
.await
617616
{
@@ -785,7 +784,6 @@ async fn on_command_execution_request_approval_response(
785784
.submit(Op::ExecApproval {
786785
id: event_id,
787786
decision,
788-
allow_prefix: None,
789787
})
790788
.await
791789
{

codex-rs/core/src/apply_patch.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ pub(crate) async fn apply_patch(
7171
.await;
7272
match rx_approve.await.unwrap_or_default() {
7373
ReviewDecision::Approved
74-
| ReviewDecision::ApprovedAllowPrefix
74+
| ReviewDecision::ApprovedAllowPrefix { .. }
7575
| ReviewDecision::ApprovedForSession => {
7676
InternalApplyPatchInvocation::DelegateToExec(ApplyPatchExec {
7777
action,

codex-rs/core/src/codex.rs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,12 +1424,8 @@ async fn submission_loop(sess: Arc<Session>, config: Arc<Config>, rx_sub: Receiv
14241424
handlers::user_input_or_turn(&sess, sub.id.clone(), sub.op, &mut previous_context)
14251425
.await;
14261426
}
1427-
Op::ExecApproval {
1428-
id,
1429-
decision,
1430-
allow_prefix,
1431-
} => {
1432-
handlers::exec_approval(&sess, id, decision, allow_prefix).await;
1427+
Op::ExecApproval { id, decision } => {
1428+
handlers::exec_approval(&sess, id, decision).await;
14331429
}
14341430
Op::PatchApproval { id, decision } => {
14351431
handlers::patch_approval(&sess, id, decision).await;
@@ -1584,15 +1580,9 @@ mod handlers {
15841580
*previous_context = Some(turn_context);
15851581
}
15861582

1587-
pub async fn exec_approval(
1588-
sess: &Arc<Session>,
1589-
id: String,
1590-
decision: ReviewDecision,
1591-
allow_prefix: Option<Vec<String>>,
1592-
) {
1593-
if let Some(prefix) = allow_prefix
1594-
&& matches!(decision, ReviewDecision::ApprovedAllowPrefix)
1595-
&& let Err(err) = sess.persist_command_allow_prefix(&prefix).await
1583+
pub async fn exec_approval(sess: &Arc<Session>, id: String, decision: ReviewDecision) {
1584+
if let ReviewDecision::ApprovedAllowPrefix { allow_prefix } = &decision
1585+
&& let Err(err) = sess.persist_command_allow_prefix(allow_prefix).await
15961586
{
15971587
let message = format!("Failed to update execpolicy allow list: {err}");
15981588
tracing::warn!("{message}");

codex-rs/core/src/codex_delegate.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -245,13 +245,7 @@ async fn handle_exec_approval(
245245
)
246246
.await;
247247

248-
let _ = codex
249-
.submit(Op::ExecApproval {
250-
id,
251-
decision,
252-
allow_prefix: None,
253-
})
254-
.await;
248+
let _ = codex.submit(Op::ExecApproval { id, decision }).await;
255249
}
256250

257251
/// Handle an ApplyPatchApprovalRequest by consulting the parent session and replying.

codex-rs/core/src/tools/orchestrator.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,14 @@ impl ToolOrchestrator {
8787
};
8888
let decision = tool.start_approval_async(req, approval_ctx).await;
8989

90-
otel.tool_decision(otel_tn, otel_ci, decision, otel_user.clone());
90+
otel.tool_decision(otel_tn, otel_ci, decision.clone(), otel_user.clone());
9191

9292
match decision {
9393
ReviewDecision::Denied | ReviewDecision::Abort => {
9494
return Err(ToolError::Rejected("rejected by user".to_string()));
9595
}
9696
ReviewDecision::Approved
97-
| ReviewDecision::ApprovedAllowPrefix
97+
| ReviewDecision::ApprovedAllowPrefix { .. }
9898
| ReviewDecision::ApprovedForSession => {}
9999
}
100100
already_approved = true;
@@ -169,14 +169,14 @@ impl ToolOrchestrator {
169169
};
170170

171171
let decision = tool.start_approval_async(req, approval_ctx).await;
172-
otel.tool_decision(otel_tn, otel_ci, decision, otel_user);
172+
otel.tool_decision(otel_tn, otel_ci, decision.clone(), otel_user);
173173

174174
match decision {
175175
ReviewDecision::Denied | ReviewDecision::Abort => {
176176
return Err(ToolError::Rejected("rejected by user".to_string()));
177177
}
178178
ReviewDecision::Approved
179-
| ReviewDecision::ApprovedAllowPrefix
179+
| ReviewDecision::ApprovedAllowPrefix { .. }
180180
| ReviewDecision::ApprovedForSession => {}
181181
}
182182
}

codex-rs/core/tests/suite/approvals.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,8 +1523,7 @@ async fn run_scenario(scenario: &ScenarioSpec) -> Result<()> {
15231523
test.codex
15241524
.submit(Op::ExecApproval {
15251525
id: "0".into(),
1526-
decision: *decision,
1527-
allow_prefix: None,
1526+
decision: decision.clone(),
15281527
})
15291528
.await?;
15301529
wait_for_completion(&test).await;
@@ -1545,7 +1544,7 @@ async fn run_scenario(scenario: &ScenarioSpec) -> Result<()> {
15451544
test.codex
15461545
.submit(Op::PatchApproval {
15471546
id: "0".into(),
1548-
decision: *decision,
1547+
decision: decision.clone(),
15491548
})
15501549
.await?;
15511550
wait_for_completion(&test).await;

codex-rs/core/tests/suite/codex_delegate.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@ async fn codex_delegate_forwards_exec_approval_and_proceeds_on_approval() {
9393
.submit(Op::ExecApproval {
9494
id: "0".into(),
9595
decision: ReviewDecision::Approved,
96-
allow_prefix: None,
9796
})
9897
.await
9998
.expect("submit exec approval");

codex-rs/core/tests/suite/otel.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,6 @@ async fn handle_container_exec_user_approved_records_tool_decision() {
843843
.submit(Op::ExecApproval {
844844
id: "0".into(),
845845
decision: ReviewDecision::Approved,
846-
allow_prefix: None,
847846
})
848847
.await
849848
.unwrap();
@@ -902,7 +901,6 @@ async fn handle_container_exec_user_approved_for_session_records_tool_decision()
902901
.submit(Op::ExecApproval {
903902
id: "0".into(),
904903
decision: ReviewDecision::ApprovedForSession,
905-
allow_prefix: None,
906904
})
907905
.await
908906
.unwrap();
@@ -961,7 +959,6 @@ async fn handle_sandbox_error_user_approves_retry_records_tool_decision() {
961959
.submit(Op::ExecApproval {
962960
id: "0".into(),
963961
decision: ReviewDecision::Approved,
964-
allow_prefix: None,
965962
})
966963
.await
967964
.unwrap();
@@ -1020,7 +1017,6 @@ async fn handle_container_exec_user_denies_records_tool_decision() {
10201017
.submit(Op::ExecApproval {
10211018
id: "0".into(),
10221019
decision: ReviewDecision::Denied,
1023-
allow_prefix: None,
10241020
})
10251021
.await
10261022
.unwrap();
@@ -1079,7 +1075,6 @@ async fn handle_sandbox_error_user_approves_for_session_records_tool_decision()
10791075
.submit(Op::ExecApproval {
10801076
id: "0".into(),
10811077
decision: ReviewDecision::ApprovedForSession,
1082-
allow_prefix: None,
10831078
})
10841079
.await
10851080
.unwrap();
@@ -1139,7 +1134,6 @@ async fn handle_sandbox_error_user_denies_records_tool_decision() {
11391134
.submit(Op::ExecApproval {
11401135
id: "0".into(),
11411136
decision: ReviewDecision::Denied,
1142-
allow_prefix: None,
11431137
})
11441138
.await
11451139
.unwrap();

codex-rs/mcp-server/src/exec_approval.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ async fn on_exec_approval_response(
150150
.submit(Op::ExecApproval {
151151
id: event_id,
152152
decision: response.decision,
153-
allow_prefix: None,
154153
})
155154
.await
156155
{

codex-rs/protocol/src/protocol.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,6 @@ pub enum Op {
143143
id: String,
144144
/// The user's decision in response to the request.
145145
decision: ReviewDecision,
146-
/// When set, persist this prefix to the execpolicy allow list.
147-
#[serde(default, skip_serializing_if = "Option::is_none")]
148-
allow_prefix: Option<Vec<String>>,
149146
},
150147

151148
/// Approve a code patch
@@ -1530,17 +1527,15 @@ pub struct SessionConfiguredEvent {
15301527
}
15311528

15321529
/// User's decision in response to an ExecApprovalRequest.
1533-
#[derive(
1534-
Debug, Default, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Display, JsonSchema, TS,
1535-
)]
1530+
#[derive(Debug, Default, Clone, Deserialize, Serialize, PartialEq, Eq, Display, JsonSchema, TS)]
15361531
#[serde(rename_all = "snake_case")]
15371532
pub enum ReviewDecision {
15381533
/// User has approved this command and the agent should execute it.
15391534
Approved,
15401535

15411536
/// User has approved this command and wants to add the command prefix to
15421537
/// the execpolicy allow list so future matching commands are permitted.
1543-
ApprovedAllowPrefix,
1538+
ApprovedAllowPrefix { allow_prefix: Vec<String> },
15441539

15451540
/// User has approved this command and wants to automatically approve any
15461541
/// future identical instances (`command` and `cwd` match exactly) for the

0 commit comments

Comments
 (0)