@@ -6,7 +6,9 @@ use codex_protocol::config_types::ModeKind;
66use codex_protocol:: config_types:: Settings ;
77use codex_protocol:: items:: AgentMessageContent ;
88use codex_protocol:: items:: TurnItem ;
9+ use codex_protocol:: models:: PermissionProfile ;
910use codex_protocol:: models:: WebSearchAction ;
11+ use codex_protocol:: protocol:: AskForApproval ;
1012use codex_protocol:: protocol:: EventMsg ;
1113use codex_protocol:: protocol:: ItemCompletedEvent ;
1214use codex_protocol:: protocol:: ItemStartedEvent ;
@@ -33,12 +35,42 @@ use core_test_support::responses::start_mock_server;
3335use core_test_support:: skip_if_no_network;
3436use core_test_support:: test_codex:: TestCodex ;
3537use core_test_support:: test_codex:: test_codex;
38+ use core_test_support:: test_codex:: turn_permission_fields;
3639use core_test_support:: wait_for_event;
3740use core_test_support:: wait_for_event_match;
3841use pretty_assertions:: assert_eq;
3942use std:: path:: Path ;
4043use std:: path:: PathBuf ;
4144
45+ fn disabled_plan_turn (
46+ text : & str ,
47+ model : String ,
48+ collaboration_mode : CollaborationMode ,
49+ ) -> anyhow:: Result < Op > {
50+ let cwd = std:: env:: current_dir ( ) ?;
51+ let ( sandbox_policy, permission_profile) =
52+ turn_permission_fields ( PermissionProfile :: Disabled , cwd. as_path ( ) ) ;
53+ Ok ( Op :: UserTurn {
54+ environments : None ,
55+ items : vec ! [ UserInput :: Text {
56+ text: text. into( ) ,
57+ text_elements: Vec :: new( ) ,
58+ } ] ,
59+ final_output_json_schema : None ,
60+ cwd,
61+ approval_policy : AskForApproval :: Never ,
62+ approvals_reviewer : None ,
63+ sandbox_policy,
64+ permission_profile,
65+ model,
66+ effort : None ,
67+ summary : None ,
68+ service_tier : None ,
69+ collaboration_mode : Some ( collaboration_mode) ,
70+ personality : None ,
71+ } )
72+ }
73+
4274fn image_generation_artifact_path ( codex_home : & Path , session_id : & str , call_id : & str ) -> PathBuf {
4375 fn sanitize ( value : & str ) -> String {
4476 let mut sanitized: String = value
@@ -529,25 +561,11 @@ async fn plan_mode_emits_plan_item_from_proposed_plan_block() -> anyhow::Result<
529561 } ;
530562
531563 codex
532- . submit ( Op :: UserTurn {
533- environments : None ,
534- items : vec ! [ UserInput :: Text {
535- text: "please plan" . into( ) ,
536- text_elements: Vec :: new( ) ,
537- } ] ,
538- final_output_json_schema : None ,
539- cwd : std:: env:: current_dir ( ) ?,
540- approval_policy : codex_protocol:: protocol:: AskForApproval :: Never ,
541- approvals_reviewer : None ,
542- sandbox_policy : codex_protocol:: protocol:: SandboxPolicy :: DangerFullAccess ,
543- permission_profile : None ,
544- model : session_configured. model . clone ( ) ,
545- effort : None ,
546- summary : None ,
547- service_tier : None ,
548- collaboration_mode : Some ( collaboration_mode) ,
549- personality : None ,
550- } )
564+ . submit ( disabled_plan_turn (
565+ "please plan" ,
566+ session_configured. model . clone ( ) ,
567+ collaboration_mode,
568+ ) ?)
551569 . await ?;
552570
553571 let plan_delta = wait_for_event_match ( & codex, |ev| match ev {
@@ -608,25 +626,11 @@ async fn plan_mode_strips_plan_from_agent_messages() -> anyhow::Result<()> {
608626 } ;
609627
610628 codex
611- . submit ( Op :: UserTurn {
612- environments : None ,
613- items : vec ! [ UserInput :: Text {
614- text: "please plan" . into( ) ,
615- text_elements: Vec :: new( ) ,
616- } ] ,
617- final_output_json_schema : None ,
618- cwd : std:: env:: current_dir ( ) ?,
619- approval_policy : codex_protocol:: protocol:: AskForApproval :: Never ,
620- approvals_reviewer : None ,
621- sandbox_policy : codex_protocol:: protocol:: SandboxPolicy :: DangerFullAccess ,
622- permission_profile : None ,
623- model : session_configured. model . clone ( ) ,
624- effort : None ,
625- summary : None ,
626- service_tier : None ,
627- collaboration_mode : Some ( collaboration_mode) ,
628- personality : None ,
629- } )
629+ . submit ( disabled_plan_turn (
630+ "please plan" ,
631+ session_configured. model . clone ( ) ,
632+ collaboration_mode,
633+ ) ?)
630634 . await ?;
631635
632636 let mut agent_deltas = Vec :: new ( ) ;
@@ -719,25 +723,11 @@ async fn plan_mode_streaming_citations_are_stripped_across_added_deltas_and_done
719723 } ;
720724
721725 codex
722- . submit ( Op :: UserTurn {
723- environments : None ,
724- items : vec ! [ UserInput :: Text {
725- text: "please plan with citations" . into( ) ,
726- text_elements: Vec :: new( ) ,
727- } ] ,
728- final_output_json_schema : None ,
729- cwd : std:: env:: current_dir ( ) ?,
730- approval_policy : codex_protocol:: protocol:: AskForApproval :: Never ,
731- approvals_reviewer : None ,
732- sandbox_policy : codex_protocol:: protocol:: SandboxPolicy :: DangerFullAccess ,
733- permission_profile : None ,
734- model : session_configured. model . clone ( ) ,
735- effort : None ,
736- summary : None ,
737- service_tier : None ,
738- collaboration_mode : Some ( collaboration_mode) ,
739- personality : None ,
740- } )
726+ . submit ( disabled_plan_turn (
727+ "please plan with citations" ,
728+ session_configured. model . clone ( ) ,
729+ collaboration_mode,
730+ ) ?)
741731 . await ?;
742732
743733 let mut agent_started = None ;
@@ -908,25 +898,11 @@ async fn plan_mode_streaming_proposed_plan_tag_split_across_added_and_delta_is_p
908898 } ;
909899
910900 codex
911- . submit ( Op :: UserTurn {
912- environments : None ,
913- items : vec ! [ UserInput :: Text {
914- text: "please plan" . into( ) ,
915- text_elements: Vec :: new( ) ,
916- } ] ,
917- final_output_json_schema : None ,
918- cwd : std:: env:: current_dir ( ) ?,
919- approval_policy : codex_protocol:: protocol:: AskForApproval :: Never ,
920- approvals_reviewer : None ,
921- sandbox_policy : codex_protocol:: protocol:: SandboxPolicy :: DangerFullAccess ,
922- permission_profile : None ,
923- model : session_configured. model . clone ( ) ,
924- effort : None ,
925- summary : None ,
926- service_tier : None ,
927- collaboration_mode : Some ( collaboration_mode) ,
928- personality : None ,
929- } )
901+ . submit ( disabled_plan_turn (
902+ "please plan" ,
903+ session_configured. model . clone ( ) ,
904+ collaboration_mode,
905+ ) ?)
930906 . await ?;
931907
932908 let mut agent_started = None ;
@@ -1024,25 +1000,11 @@ async fn plan_mode_handles_missing_plan_close_tag() -> anyhow::Result<()> {
10241000 } ;
10251001
10261002 codex
1027- . submit ( Op :: UserTurn {
1028- environments : None ,
1029- items : vec ! [ UserInput :: Text {
1030- text: "please plan" . into( ) ,
1031- text_elements: Vec :: new( ) ,
1032- } ] ,
1033- final_output_json_schema : None ,
1034- cwd : std:: env:: current_dir ( ) ?,
1035- approval_policy : codex_protocol:: protocol:: AskForApproval :: Never ,
1036- approvals_reviewer : None ,
1037- sandbox_policy : codex_protocol:: protocol:: SandboxPolicy :: DangerFullAccess ,
1038- permission_profile : None ,
1039- model : session_configured. model . clone ( ) ,
1040- effort : None ,
1041- summary : None ,
1042- service_tier : None ,
1043- collaboration_mode : Some ( collaboration_mode) ,
1044- personality : None ,
1045- } )
1003+ . submit ( disabled_plan_turn (
1004+ "please plan" ,
1005+ session_configured. model . clone ( ) ,
1006+ collaboration_mode,
1007+ ) ?)
10461008 . await ?;
10471009
10481010 let mut plan_delta = None ;
0 commit comments