Skip to content

Commit ec93b6d

Browse files
authored
chore: make create_approval_requirement_for_command an async fn (#7501)
I think this might help with #7033 because `create_approval_requirement_for_command()` will soon need access to `Session.state`, which is a `tokio::sync::Mutex` that needs to be accessed via `async`.
1 parent 4d4778e commit ec93b6d

File tree

3 files changed

+32
-24
lines changed

3 files changed

+32
-24
lines changed

codex-rs/core/src/exec_policy.rs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ fn evaluate_with_policy(
115115
}
116116
}
117117

118-
pub(crate) fn create_approval_requirement_for_command(
118+
pub(crate) async fn create_approval_requirement_for_command(
119119
policy: &Policy,
120120
command: &[String],
121121
approval_policy: AskForApproval,
@@ -296,8 +296,8 @@ prefix_rule(pattern=["rm"], decision="forbidden")
296296
);
297297
}
298298

299-
#[test]
300-
fn approval_requirement_prefers_execpolicy_match() {
299+
#[tokio::test]
300+
async fn approval_requirement_prefers_execpolicy_match() {
301301
let policy_src = r#"prefix_rule(pattern=["rm"], decision="prompt")"#;
302302
let mut parser = PolicyParser::new();
303303
parser
@@ -312,7 +312,8 @@ prefix_rule(pattern=["rm"], decision="forbidden")
312312
AskForApproval::OnRequest,
313313
&SandboxPolicy::DangerFullAccess,
314314
SandboxPermissions::UseDefault,
315-
);
315+
)
316+
.await;
316317

317318
assert_eq!(
318319
requirement,
@@ -322,8 +323,8 @@ prefix_rule(pattern=["rm"], decision="forbidden")
322323
);
323324
}
324325

325-
#[test]
326-
fn approval_requirement_respects_approval_policy() {
326+
#[tokio::test]
327+
async fn approval_requirement_respects_approval_policy() {
327328
let policy_src = r#"prefix_rule(pattern=["rm"], decision="prompt")"#;
328329
let mut parser = PolicyParser::new();
329330
parser
@@ -338,7 +339,8 @@ prefix_rule(pattern=["rm"], decision="forbidden")
338339
AskForApproval::Never,
339340
&SandboxPolicy::DangerFullAccess,
340341
SandboxPermissions::UseDefault,
341-
);
342+
)
343+
.await;
342344

343345
assert_eq!(
344346
requirement,
@@ -348,8 +350,8 @@ prefix_rule(pattern=["rm"], decision="forbidden")
348350
);
349351
}
350352

351-
#[test]
352-
fn approval_requirement_falls_back_to_heuristics() {
353+
#[tokio::test]
354+
async fn approval_requirement_falls_back_to_heuristics() {
353355
let command = vec!["python".to_string()];
354356

355357
let empty_policy = Policy::empty();
@@ -359,7 +361,8 @@ prefix_rule(pattern=["rm"], decision="forbidden")
359361
AskForApproval::UnlessTrusted,
360362
&SandboxPolicy::ReadOnly,
361363
SandboxPermissions::UseDefault,
362-
);
364+
)
365+
.await;
363366

364367
assert_eq!(
365368
requirement,

codex-rs/core/src/tools/handlers/shell.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -231,20 +231,23 @@ impl ShellHandler {
231231
let event_ctx = ToolEventCtx::new(session.as_ref(), turn.as_ref(), &call_id, None);
232232
emitter.begin(event_ctx).await;
233233

234+
let approval_requirement = create_approval_requirement_for_command(
235+
&turn.exec_policy,
236+
&exec_params.command,
237+
turn.approval_policy,
238+
&turn.sandbox_policy,
239+
SandboxPermissions::from(exec_params.with_escalated_permissions.unwrap_or(false)),
240+
)
241+
.await;
242+
234243
let req = ShellRequest {
235244
command: exec_params.command.clone(),
236245
cwd: exec_params.cwd.clone(),
237246
timeout_ms: exec_params.expiration.timeout_ms(),
238247
env: exec_params.env.clone(),
239248
with_escalated_permissions: exec_params.with_escalated_permissions,
240249
justification: exec_params.justification.clone(),
241-
approval_requirement: create_approval_requirement_for_command(
242-
&turn.exec_policy,
243-
&exec_params.command,
244-
turn.approval_policy,
245-
&turn.sandbox_policy,
246-
SandboxPermissions::from(exec_params.with_escalated_permissions.unwrap_or(false)),
247-
),
250+
approval_requirement,
248251
};
249252
let mut orchestrator = ToolOrchestrator::new();
250253
let mut runtime = ShellRuntime::new();

codex-rs/core/src/unified_exec/session_manager.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -554,19 +554,21 @@ impl UnifiedExecSessionManager {
554554
let env = apply_unified_exec_env(create_env(&context.turn.shell_environment_policy));
555555
let mut orchestrator = ToolOrchestrator::new();
556556
let mut runtime = UnifiedExecRuntime::new(self);
557+
let approval_requirement = create_approval_requirement_for_command(
558+
&context.turn.exec_policy,
559+
command,
560+
context.turn.approval_policy,
561+
&context.turn.sandbox_policy,
562+
SandboxPermissions::from(with_escalated_permissions.unwrap_or(false)),
563+
)
564+
.await;
557565
let req = UnifiedExecToolRequest::new(
558566
command.to_vec(),
559567
cwd,
560568
env,
561569
with_escalated_permissions,
562570
justification,
563-
create_approval_requirement_for_command(
564-
&context.turn.exec_policy,
565-
command,
566-
context.turn.approval_policy,
567-
&context.turn.sandbox_policy,
568-
SandboxPermissions::from(with_escalated_permissions.unwrap_or(false)),
569-
),
571+
approval_requirement,
570572
);
571573
let tool_ctx = ToolCtx {
572574
session: context.session.as_ref(),

0 commit comments

Comments
 (0)