mirror of
https://github.com/openai/codex.git
synced 2026-04-29 00:55:38 +00:00
Currently, codex on start shows the value for the approval policy as name of [AskForApproval](2437a8d17a/codex-rs/core/src/protocol.rs (L128)) enum, which differs from [approval_policy](2437a8d17a/codex-rs/config.md (approval_policy)) config values. E.g. "untrusted" becomes "UnlessTrusted", "on-failure" -> "OnFailure", "never" -> "Never". This PR changes render names of the approval policy to match with configuration values.
71 lines
2.2 KiB
Rust
71 lines
2.2 KiB
Rust
use std::path::Path;
|
|
|
|
use codex_common::summarize_sandbox_policy;
|
|
use codex_core::WireApi;
|
|
use codex_core::config::Config;
|
|
use codex_core::model_supports_reasoning_summaries;
|
|
use codex_core::protocol::Event;
|
|
|
|
pub(crate) enum CodexStatus {
|
|
Running,
|
|
InitiateShutdown,
|
|
Shutdown,
|
|
}
|
|
|
|
pub(crate) trait EventProcessor {
|
|
/// Print summary of effective configuration and user prompt.
|
|
fn print_config_summary(&mut self, config: &Config, prompt: &str);
|
|
|
|
/// Handle a single event emitted by the agent.
|
|
fn process_event(&mut self, event: Event) -> CodexStatus;
|
|
}
|
|
|
|
pub(crate) fn create_config_summary_entries(config: &Config) -> Vec<(&'static str, String)> {
|
|
let mut entries = vec![
|
|
("workdir", config.cwd.display().to_string()),
|
|
("model", config.model.clone()),
|
|
("provider", config.model_provider_id.clone()),
|
|
("approval", config.approval_policy.to_string()),
|
|
("sandbox", summarize_sandbox_policy(&config.sandbox_policy)),
|
|
];
|
|
if config.model_provider.wire_api == WireApi::Responses
|
|
&& model_supports_reasoning_summaries(config)
|
|
{
|
|
entries.push((
|
|
"reasoning effort",
|
|
config.model_reasoning_effort.to_string(),
|
|
));
|
|
entries.push((
|
|
"reasoning summaries",
|
|
config.model_reasoning_summary.to_string(),
|
|
));
|
|
}
|
|
|
|
entries
|
|
}
|
|
|
|
pub(crate) fn handle_last_message(
|
|
last_agent_message: Option<&str>,
|
|
last_message_path: Option<&Path>,
|
|
) {
|
|
match (last_message_path, last_agent_message) {
|
|
(Some(path), Some(msg)) => write_last_message_file(msg, Some(path)),
|
|
(Some(path), None) => {
|
|
write_last_message_file("", Some(path));
|
|
eprintln!(
|
|
"Warning: no last agent message; wrote empty content to {}",
|
|
path.display()
|
|
);
|
|
}
|
|
(None, _) => eprintln!("Warning: no file to write last message to."),
|
|
}
|
|
}
|
|
|
|
fn write_last_message_file(contents: &str, last_message_path: Option<&Path>) {
|
|
if let Some(path) = last_message_path {
|
|
if let Err(e) = std::fs::write(path, contents) {
|
|
eprintln!("Failed to write last message file {path:?}: {e}");
|
|
}
|
|
}
|
|
}
|