11use std:: path:: PathBuf ;
22use std:: sync:: Arc ;
33
4+ use codex_protocol:: models:: ActivePermissionProfile ;
45use codex_protocol:: models:: ShellCommandToolCallParams ;
56use pretty_assertions:: assert_eq;
67
8+ use crate :: config:: PermissionProfileSnapshot ;
9+ use crate :: exec_env:: CODEX_PERMISSION_PROFILE_ENV_VAR ;
710use crate :: exec_env:: create_env;
11+ use crate :: exec_env:: inject_permission_profile_env;
812use crate :: sandboxing:: SandboxPermissions ;
913use crate :: session:: step_context:: StepContext ;
1014use crate :: session:: tests:: make_session_and_context;
@@ -71,7 +75,15 @@ fn assert_safe(shell: &Shell, command: &str) {
7175
7276#[ tokio:: test]
7377async fn shell_command_handler_to_exec_params_uses_selected_environment ( ) {
74- let ( session, turn_context) = make_session_and_context ( ) . await ;
78+ let ( session, mut turn_context) = make_session_and_context ( ) . await ;
79+ let permission_profile = turn_context. config . permissions . permission_profile ( ) . clone ( ) ;
80+ Arc :: make_mut ( & mut turn_context. config )
81+ . permissions
82+ . set_permission_profile_from_session_snapshot ( PermissionProfileSnapshot :: active (
83+ permission_profile,
84+ ActivePermissionProfile :: new ( "test-profile" ) ,
85+ ) )
86+ . expect ( "set active permission profile" ) ;
7587
7688 let command = "echo hello" . to_string ( ) ;
7789 let workdir = Some ( "subdir" . to_string ( ) ) ;
@@ -99,10 +111,12 @@ async fn shell_command_handler_to_exec_params_uses_selected_environment() {
99111 PathUri :: from_abs_path ( & selected_cwd) ,
100112 Some ( selected_shell) ,
101113 ) ;
102- let expected_env = create_env (
114+ let mut expected_env = create_env (
103115 & turn_context. config . permissions . shell_environment_policy ,
104116 Some ( session. thread_id ) ,
105117 ) ;
118+ let active_permission_profile = turn_context. config . permissions . active_permission_profile ( ) ;
119+ inject_permission_profile_env ( & mut expected_env, active_permission_profile. as_ref ( ) ) ;
106120
107121 let params = ShellCommandToolCallParams {
108122 command,
@@ -129,6 +143,12 @@ async fn shell_command_handler_to_exec_params_uses_selected_environment() {
129143 assert_eq ! ( exec_params. command, expected_command) ;
130144 assert_eq ! ( exec_params. cwd, expected_cwd) ;
131145 assert_eq ! ( exec_params. env, expected_env) ;
146+ assert_eq ! (
147+ exec_params. env. get( CODEX_PERMISSION_PROFILE_ENV_VAR ) ,
148+ active_permission_profile
149+ . as_ref( )
150+ . map( |profile| & profile. id)
151+ ) ;
132152 assert_eq ! ( exec_params. network, turn_context. network) ;
133153 assert_eq ! (
134154 exec_params. network_environment_id. as_deref( ) ,
0 commit comments