mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
correctly recognize WorkspaceWrite policy on /approvals (#7301)
the `/approvals` popup fails to recognize that the CLI is in WorkspaceWrite mode if that policy has extra bits, like `writable_roots` etc. This change matches the policy, ignoring additional config aspects.
This commit is contained in:
committed by
GitHub
Unverified
parent
401f94ca31
commit
981e2f742d
@@ -2332,7 +2332,7 @@ impl ChatWidget {
|
||||
let presets: Vec<ApprovalPreset> = builtin_approval_presets();
|
||||
for preset in presets.into_iter() {
|
||||
let is_current =
|
||||
current_approval == preset.approval && current_sandbox == preset.sandbox;
|
||||
Self::preset_matches_current(current_approval, ¤t_sandbox, &preset);
|
||||
let name = preset.label.to_string();
|
||||
let description_text = preset.description;
|
||||
let description = Some(description_text.to_string());
|
||||
@@ -2420,6 +2420,28 @@ impl ChatWidget {
|
||||
})]
|
||||
}
|
||||
|
||||
fn preset_matches_current(
|
||||
current_approval: AskForApproval,
|
||||
current_sandbox: &SandboxPolicy,
|
||||
preset: &ApprovalPreset,
|
||||
) -> bool {
|
||||
if current_approval != preset.approval {
|
||||
return false;
|
||||
}
|
||||
matches!(
|
||||
(&preset.sandbox, current_sandbox),
|
||||
(SandboxPolicy::ReadOnly, SandboxPolicy::ReadOnly)
|
||||
| (
|
||||
SandboxPolicy::DangerFullAccess,
|
||||
SandboxPolicy::DangerFullAccess
|
||||
)
|
||||
| (
|
||||
SandboxPolicy::WorkspaceWrite { .. },
|
||||
SandboxPolicy::WorkspaceWrite { .. }
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
pub(crate) fn world_writable_warning_details(&self) -> Option<(Vec<String>, usize, bool)> {
|
||||
if self
|
||||
|
||||
@@ -1567,6 +1567,29 @@ fn approvals_selection_popup_snapshot() {
|
||||
assert_snapshot!("approvals_selection_popup", popup);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn preset_matching_ignores_extra_writable_roots() {
|
||||
let preset = builtin_approval_presets()
|
||||
.into_iter()
|
||||
.find(|p| p.id == "auto")
|
||||
.expect("auto preset exists");
|
||||
let current_sandbox = SandboxPolicy::WorkspaceWrite {
|
||||
writable_roots: vec![PathBuf::from("C:\\extra")],
|
||||
network_access: false,
|
||||
exclude_tmpdir_env_var: false,
|
||||
exclude_slash_tmp: false,
|
||||
};
|
||||
|
||||
assert!(
|
||||
ChatWidget::preset_matches_current(AskForApproval::OnRequest, ¤t_sandbox, &preset),
|
||||
"WorkspaceWrite with extra roots should still match the Agent preset"
|
||||
);
|
||||
assert!(
|
||||
!ChatWidget::preset_matches_current(AskForApproval::Never, ¤t_sandbox, &preset),
|
||||
"approval mismatch should prevent matching the preset"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn full_access_confirmation_popup_snapshot() {
|
||||
let (mut chat, _rx, _op_rx) = make_chatwidget_manual();
|
||||
|
||||
Reference in New Issue
Block a user