mirror of
https://github.com/openai/codex.git
synced 2026-11-09 20:50:33 +00:00
windows-sandbox: pass workspace roots to runner
This commit is contained in:
@@ -1045,11 +1045,13 @@ See the Codex keymap documentation for supported actions and examples."
|
||||
.unwrap_or(false);
|
||||
if should_check {
|
||||
let cwd = app.config.cwd.clone();
|
||||
let workspace_roots = app.config.effective_workspace_roots();
|
||||
let env_map: std::collections::HashMap<String, String> = std::env::vars().collect();
|
||||
let tx = app.app_event_tx.clone();
|
||||
let logs_base_dir = app.config.codex_home.clone();
|
||||
Self::spawn_world_writable_scan(
|
||||
cwd,
|
||||
workspace_roots,
|
||||
env_map,
|
||||
logs_base_dir,
|
||||
startup_permission_profile,
|
||||
|
||||
@@ -8,6 +8,12 @@ use super::*;
|
||||
#[cfg(target_os = "windows")]
|
||||
use codex_utils_approval_presets::ApprovalPreset;
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
pub(super) struct WindowsSetupPermissions {
|
||||
pub(super) permission_profile: PermissionProfile,
|
||||
pub(super) workspace_roots: Vec<AbsolutePathBuf>,
|
||||
}
|
||||
|
||||
impl App {
|
||||
pub(super) async fn rebuild_config_for_cwd(&self, cwd: PathBuf) -> Result<Config> {
|
||||
let mut overrides = self.harness_overrides.clone();
|
||||
@@ -45,19 +51,25 @@ impl App {
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
pub(super) async fn permission_profile_for_windows_setup(
|
||||
pub(super) async fn windows_setup_permissions(
|
||||
&self,
|
||||
preset: &ApprovalPreset,
|
||||
profile_selection: Option<&PermissionProfileSelection>,
|
||||
) -> Result<PermissionProfile> {
|
||||
) -> Result<WindowsSetupPermissions> {
|
||||
match profile_selection {
|
||||
Some(selection) => Ok(self
|
||||
.rebuild_config_for_permission_profile(selection.profile_id.as_str())
|
||||
.await?
|
||||
.permissions
|
||||
.permission_profile()
|
||||
.clone()),
|
||||
None => Ok(preset.permission_profile.clone()),
|
||||
Some(selection) => {
|
||||
let selected_config = self
|
||||
.rebuild_config_for_permission_profile(selection.profile_id.as_str())
|
||||
.await?;
|
||||
Ok(WindowsSetupPermissions {
|
||||
permission_profile: selected_config.permissions.permission_profile().clone(),
|
||||
workspace_roots: selected_config.effective_workspace_roots(),
|
||||
})
|
||||
}
|
||||
None => Ok(WindowsSetupPermissions {
|
||||
permission_profile: preset.permission_profile.clone(),
|
||||
workspace_roots: self.config.effective_workspace_roots(),
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -866,11 +866,11 @@ impl App {
|
||||
} => {
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
let permission_profile = match self
|
||||
.permission_profile_for_windows_setup(&preset, profile_selection.as_ref())
|
||||
let setup_permissions = match self
|
||||
.windows_setup_permissions(&preset, profile_selection.as_ref())
|
||||
.await
|
||||
{
|
||||
Ok(permission_profile) => permission_profile,
|
||||
Ok(setup_permissions) => setup_permissions,
|
||||
Err(err) => {
|
||||
tracing::warn!(
|
||||
error = %err,
|
||||
@@ -882,8 +882,9 @@ impl App {
|
||||
return Ok(AppRunControl::Continue);
|
||||
}
|
||||
};
|
||||
let permission_profile_cwd = self.config.cwd.clone();
|
||||
let command_cwd = permission_profile_cwd.clone();
|
||||
let permission_profile = setup_permissions.permission_profile;
|
||||
let workspace_roots = setup_permissions.workspace_roots;
|
||||
let command_cwd = self.config.cwd.clone();
|
||||
let env_map: std::collections::HashMap<String, String> =
|
||||
std::env::vars().collect();
|
||||
let codex_home = self.config.codex_home.clone();
|
||||
@@ -908,7 +909,7 @@ impl App {
|
||||
tokio::task::spawn_blocking(move || {
|
||||
let result = crate::legacy_core::windows_sandbox::run_elevated_setup(
|
||||
&permission_profile,
|
||||
permission_profile_cwd.as_path(),
|
||||
workspace_roots.as_slice(),
|
||||
command_cwd.as_path(),
|
||||
&env_map,
|
||||
codex_home.as_path(),
|
||||
@@ -975,11 +976,11 @@ impl App {
|
||||
} => {
|
||||
#[cfg(target_os = "windows")]
|
||||
{
|
||||
let permission_profile = match self
|
||||
.permission_profile_for_windows_setup(&preset, profile_selection.as_ref())
|
||||
let setup_permissions = match self
|
||||
.windows_setup_permissions(&preset, profile_selection.as_ref())
|
||||
.await
|
||||
{
|
||||
Ok(permission_profile) => permission_profile,
|
||||
Ok(setup_permissions) => setup_permissions,
|
||||
Err(err) => {
|
||||
tracing::warn!(
|
||||
error = %err,
|
||||
@@ -991,8 +992,9 @@ impl App {
|
||||
return Ok(AppRunControl::Continue);
|
||||
}
|
||||
};
|
||||
let permission_profile_cwd = self.config.cwd.clone();
|
||||
let command_cwd = permission_profile_cwd.clone();
|
||||
let permission_profile = setup_permissions.permission_profile;
|
||||
let workspace_roots = setup_permissions.workspace_roots;
|
||||
let command_cwd = self.config.cwd.clone();
|
||||
let env_map: std::collections::HashMap<String, String> =
|
||||
std::env::vars().collect();
|
||||
let codex_home = self.config.codex_home.clone();
|
||||
@@ -1004,7 +1006,7 @@ impl App {
|
||||
if let Err(err) =
|
||||
crate::legacy_core::windows_sandbox::run_legacy_setup_preflight(
|
||||
&permission_profile,
|
||||
permission_profile_cwd.as_path(),
|
||||
workspace_roots.as_slice(),
|
||||
command_cwd.as_path(),
|
||||
&env_map,
|
||||
codex_home.as_path(),
|
||||
@@ -1042,7 +1044,7 @@ impl App {
|
||||
));
|
||||
|
||||
let permission_profile = self.config.permissions.effective_permission_profile();
|
||||
let permission_profile_cwd = self.config.cwd.clone();
|
||||
let workspace_roots = self.config.effective_workspace_roots();
|
||||
let command_cwd = self.config.cwd.clone();
|
||||
let env_map: std::collections::HashMap<String, String> =
|
||||
std::env::vars().collect();
|
||||
@@ -1053,7 +1055,7 @@ impl App {
|
||||
let requested_path = PathBuf::from(path);
|
||||
let event = match crate::legacy_core::grant_read_root_non_elevated(
|
||||
&permission_profile,
|
||||
permission_profile_cwd.as_path(),
|
||||
workspace_roots.as_slice(),
|
||||
command_cwd.as_path(),
|
||||
&env_map,
|
||||
codex_home.as_path(),
|
||||
@@ -1474,6 +1476,7 @@ impl App {
|
||||
&& !self.chat_widget.world_writable_warning_hidden();
|
||||
if should_check {
|
||||
let cwd = self.config.cwd.clone();
|
||||
let workspace_roots = self.config.effective_workspace_roots();
|
||||
let env_map: std::collections::HashMap<String, String> =
|
||||
std::env::vars().collect();
|
||||
let tx = self.app_event_tx.clone();
|
||||
@@ -1482,6 +1485,7 @@ impl App {
|
||||
self.config.permissions.effective_permission_profile();
|
||||
Self::spawn_world_writable_scan(
|
||||
cwd,
|
||||
workspace_roots,
|
||||
env_map,
|
||||
logs_base_dir,
|
||||
permission_profile,
|
||||
|
||||
@@ -16,15 +16,16 @@ impl App {
|
||||
#[cfg(target_os = "windows")]
|
||||
pub(super) fn spawn_world_writable_scan(
|
||||
cwd: AbsolutePathBuf,
|
||||
workspace_roots: Vec<AbsolutePathBuf>,
|
||||
env_map: std::collections::HashMap<String, String>,
|
||||
logs_base_dir: AbsolutePathBuf,
|
||||
permission_profile: PermissionProfile,
|
||||
tx: AppEventSender,
|
||||
) {
|
||||
let Ok(permissions) =
|
||||
codex_windows_sandbox::ResolvedWindowsSandboxPermissions::try_from_permission_profile_for_cwd(
|
||||
codex_windows_sandbox::ResolvedWindowsSandboxPermissions::try_from_permission_profile_for_workspace_roots(
|
||||
&permission_profile,
|
||||
cwd.as_path(),
|
||||
workspace_roots.as_slice(),
|
||||
)
|
||||
else {
|
||||
return;
|
||||
|
||||
@@ -14,12 +14,13 @@ impl ChatWidget {
|
||||
return None;
|
||||
}
|
||||
let cwd = self.config.cwd.clone();
|
||||
let workspace_roots = self.config.effective_workspace_roots();
|
||||
let env_map: std::collections::HashMap<String, String> = std::env::vars().collect();
|
||||
let permission_profile = self.config.permissions.effective_permission_profile();
|
||||
let Ok(permissions) =
|
||||
codex_windows_sandbox::ResolvedWindowsSandboxPermissions::try_from_permission_profile_for_cwd(
|
||||
codex_windows_sandbox::ResolvedWindowsSandboxPermissions::try_from_permission_profile_for_workspace_roots(
|
||||
&permission_profile,
|
||||
cwd.as_path(),
|
||||
workspace_roots.as_slice(),
|
||||
)
|
||||
else {
|
||||
return None;
|
||||
|
||||
Reference in New Issue
Block a user