mirror of
https://github.com/openai/codex.git
synced 2026-04-28 18:32:04 +03:00
Add an exec-server env policy contract and send only the env overlay needed for runtime/sandbox transforms when Core starts remote unified-exec processes. Keep local process startup on the existing exact-env path, and share the shell-environment-policy builder from codex-config so the executor can apply the same inherit/filter/set/include rules against its own process environment. Co-authored-by: Codex <noreply@openai.com>
56 lines
1.8 KiB
Rust
56 lines
1.8 KiB
Rust
#[cfg(test)]
|
|
use codex_config::types::EnvironmentVariablePattern;
|
|
use codex_config::types::ShellEnvironmentPolicy;
|
|
use codex_protocol::ThreadId;
|
|
use std::collections::HashMap;
|
|
|
|
pub use codex_config::shell_environment::CODEX_THREAD_ID_ENV_VAR;
|
|
|
|
/// Construct an environment map based on the rules in the specified policy. The
|
|
/// resulting map can be passed directly to `Command::envs()` after calling
|
|
/// `env_clear()` to ensure no unintended variables are leaked to the spawned
|
|
/// process.
|
|
///
|
|
/// The derivation follows the algorithm documented in the struct-level comment
|
|
/// for [`ShellEnvironmentPolicy`].
|
|
///
|
|
/// `CODEX_THREAD_ID` is injected when a thread id is provided, even when
|
|
/// `include_only` is set.
|
|
pub fn create_env(
|
|
policy: &ShellEnvironmentPolicy,
|
|
thread_id: Option<ThreadId>,
|
|
) -> HashMap<String, String> {
|
|
let thread_id = thread_id.map(|thread_id| thread_id.to_string());
|
|
codex_config::shell_environment::create_env(policy, thread_id.as_deref())
|
|
}
|
|
|
|
#[cfg(all(test, target_os = "windows"))]
|
|
fn create_env_from_vars<I>(
|
|
vars: I,
|
|
policy: &ShellEnvironmentPolicy,
|
|
thread_id: Option<ThreadId>,
|
|
) -> HashMap<String, String>
|
|
where
|
|
I: IntoIterator<Item = (String, String)>,
|
|
{
|
|
let thread_id = thread_id.map(|thread_id| thread_id.to_string());
|
|
codex_config::shell_environment::create_env_from_vars(vars, policy, thread_id.as_deref())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
fn populate_env<I>(
|
|
vars: I,
|
|
policy: &ShellEnvironmentPolicy,
|
|
thread_id: Option<ThreadId>,
|
|
) -> HashMap<String, String>
|
|
where
|
|
I: IntoIterator<Item = (String, String)>,
|
|
{
|
|
let thread_id = thread_id.map(|thread_id| thread_id.to_string());
|
|
codex_config::shell_environment::populate_env(vars, policy, thread_id.as_deref())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
#[path = "exec_env_tests.rs"]
|
|
mod tests;
|