mirror of
https://github.com/openai/codex.git
synced 2026-10-24 23:54:33 +00:00
## Why When `Feature::TokenBudget` is enabled, compaction should behave like `new_context`: start a fresh context window with the standard injected context, without asking the server to summarize old history and without carrying prior user or assistant messages into the next model request. This is still a compaction operation from the client lifecycle perspective. Manual `/compact` and auto-compaction should keep the same observable side effects that clients and hooks expect, including compact hooks and `TurnItem::ContextCompaction`. ## What changed - Added `compact_token_budget` to run token-budget manual and inline auto-compaction through a shared compaction lifecycle. - Split pending `new_context` requests from forced context-window startup: `take_new_context_window_request()` consumes pending requests, and `start_new_context_window()` installs a fresh context window. - Routed token-budget manual `/compact` and inline auto-compaction to install a fresh context window locally instead of calling server/local summarization. - Preserved compact lifecycle side effects for token-budget compaction by running pre/post compact hooks and emitting `ContextCompaction` item start/completion events. - Updated token-budget tests to assert fresh window IDs, absence of server-side compaction calls, dropped prior transcript messages/tool output after reset, and compact hook/item lifecycle behavior. ## Testing - `just test -p codex-core token_budget_context_uses_new_window_after_compaction` - `just test -p codex-core token_budget_compaction_runs_compact_hooks` - `just test -p codex-core token_budget_mid_turn_auto_compaction_resets_before_active_follow_up` --------- Co-authored-by: pakrym-oai <pakrym@openai.com>
202 lines
6.6 KiB
Rust
202 lines
6.6 KiB
Rust
//! Root of the `codex-core` library.
|
|
|
|
// Prevent accidental direct writes to stdout/stderr in library code. All
|
|
// user-visible output must go through the appropriate abstraction (e.g.,
|
|
// the TUI or the tracing stack).
|
|
#![deny(clippy::print_stdout, clippy::print_stderr)]
|
|
|
|
mod apply_patch;
|
|
mod apps;
|
|
mod client;
|
|
mod client_common;
|
|
mod realtime_context;
|
|
mod realtime_conversation;
|
|
mod realtime_prompt;
|
|
mod responses_metadata;
|
|
mod responses_retry;
|
|
pub(crate) mod session;
|
|
pub use responses_metadata::CodexResponsesMetadata;
|
|
pub use session::SteerInputError;
|
|
pub use turn_metadata::detached_memory_responses_metadata;
|
|
mod codex_thread;
|
|
mod compact_remote;
|
|
mod compact_remote_v2;
|
|
mod compact_token_budget;
|
|
mod config_lock;
|
|
pub use codex_thread::BackgroundTerminalInfo;
|
|
pub use codex_thread::CodexThread;
|
|
pub use codex_thread::CodexThreadSettingsOverrides;
|
|
pub use codex_thread::ThreadConfigSnapshot;
|
|
pub use codex_thread::TryStartTurnIfIdleError;
|
|
pub use codex_thread::TryStartTurnIfIdleRejectionReason;
|
|
pub use session::turn_context::TurnContext;
|
|
mod agent;
|
|
mod attestation;
|
|
mod codex_delegate;
|
|
mod command_canonicalization;
|
|
pub mod config;
|
|
pub mod connectors;
|
|
pub mod context;
|
|
mod context_manager;
|
|
mod current_time;
|
|
mod environment_selection;
|
|
pub mod exec;
|
|
pub mod exec_env;
|
|
mod exec_policy;
|
|
#[cfg(test)]
|
|
mod git_info_tests;
|
|
mod guardian;
|
|
mod hook_runtime;
|
|
mod image_preparation;
|
|
mod installation_id;
|
|
pub(crate) mod landlock;
|
|
pub use landlock::spawn_command_under_linux_sandbox;
|
|
pub(crate) mod mcp;
|
|
mod mcp_skill_dependencies;
|
|
mod mcp_tool_approval_templates;
|
|
mod mcp_tool_exposure;
|
|
mod network_policy_decision;
|
|
pub(crate) mod network_proxy_loader;
|
|
pub use mcp::McpManager;
|
|
pub use network_proxy_loader::MtimeConfigReloader;
|
|
pub use network_proxy_loader::build_network_proxy_state;
|
|
pub use network_proxy_loader::build_network_proxy_state_and_reloader;
|
|
mod original_image_detail;
|
|
pub use codex_mcp::SandboxState;
|
|
mod mcp_openai_file;
|
|
mod mcp_tool_call;
|
|
pub(crate) mod mention_syntax;
|
|
pub(crate) mod utils;
|
|
pub use mention_syntax::PLUGIN_TEXT_MENTION_SIGIL;
|
|
pub use mention_syntax::TOOL_MENTION_SIGIL;
|
|
pub use utils::path_utils;
|
|
pub mod personality_migration;
|
|
pub(crate) mod plugins;
|
|
#[doc(hidden)]
|
|
pub(crate) mod prompt_debug;
|
|
#[doc(hidden)]
|
|
pub use prompt_debug::build_prompt_input;
|
|
pub(crate) mod mentions {
|
|
pub(crate) use crate::plugins::build_connector_slug_counts;
|
|
pub(crate) use crate::plugins::build_skill_name_counts;
|
|
pub(crate) use crate::plugins::collect_explicit_app_ids;
|
|
pub(crate) use crate::plugins::collect_explicit_plugin_mentions;
|
|
pub(crate) use crate::plugins::collect_tool_mentions_from_messages;
|
|
}
|
|
mod sandbox_tags;
|
|
pub mod sandboxing;
|
|
mod session_prefix;
|
|
mod session_startup_prewarm;
|
|
pub mod skills;
|
|
pub(crate) use skills::SkillInjections;
|
|
pub(crate) use skills::SkillMetadata;
|
|
pub(crate) use skills::SkillsService;
|
|
pub(crate) use skills::build_available_skills;
|
|
pub(crate) use skills::build_skill_injections;
|
|
pub(crate) use skills::build_skill_name_counts;
|
|
pub(crate) use skills::collect_explicit_skill_mentions;
|
|
pub(crate) use skills::default_skill_metadata_budget;
|
|
pub(crate) use skills::injection;
|
|
pub(crate) use skills::maybe_emit_implicit_skill_invocation;
|
|
pub(crate) use skills::skills_load_input_from_config;
|
|
mod stream_events_utils;
|
|
pub use stream_events_utils::image_generation_artifact_path;
|
|
pub mod test_support;
|
|
mod unified_exec;
|
|
pub mod windows_sandbox;
|
|
pub use client::X_RESPONSESAPI_INCLUDE_TIMING_METRICS_HEADER;
|
|
pub use codex_protocol::config_types::ModelProviderAuthInfo;
|
|
mod event_mapping;
|
|
pub mod review_format;
|
|
pub use codex_prompts as review_prompts;
|
|
mod thread_manager;
|
|
pub(crate) mod web_search;
|
|
pub(crate) mod windows_sandbox_read_grants;
|
|
pub use thread_manager::ForkSnapshot;
|
|
pub use thread_manager::NewThread;
|
|
pub use thread_manager::StartThreadOptions;
|
|
pub use thread_manager::ThreadManager;
|
|
pub use thread_manager::ThreadShutdownReport;
|
|
pub use thread_manager::build_models_manager;
|
|
pub use thread_manager::thread_store_from_config;
|
|
pub use web_search::web_search_action_detail;
|
|
pub use web_search::web_search_detail;
|
|
pub use windows_sandbox_read_grants::grant_read_root_non_elevated;
|
|
#[deprecated(note = "use ThreadManager")]
|
|
pub type ConversationManager = ThreadManager;
|
|
#[deprecated(note = "use NewThread")]
|
|
pub type NewConversation = NewThread;
|
|
#[deprecated(note = "use CodexThread")]
|
|
pub type CodexConversation = CodexThread;
|
|
pub(crate) mod agents_md;
|
|
pub use agents_md::DEFAULT_AGENTS_MD_FILENAME;
|
|
pub use agents_md::LOCAL_AGENTS_MD_FILENAME;
|
|
pub use agents_md::LoadedAgentsMd;
|
|
mod rollout;
|
|
mod rollout_budget;
|
|
pub(crate) mod safety;
|
|
mod session_rollout_init_error;
|
|
pub mod shell;
|
|
pub(crate) mod shell_snapshot;
|
|
pub mod spawn;
|
|
pub(crate) mod state_db_bridge;
|
|
pub use state_db_bridge::StateDbHandle;
|
|
pub use state_db_bridge::init_state_db;
|
|
mod thread_rollout_truncation;
|
|
mod tools;
|
|
pub(crate) mod turn_diff_tracker;
|
|
mod turn_metadata;
|
|
mod turn_timing;
|
|
pub use rollout::ARCHIVED_SESSIONS_SUBDIR;
|
|
pub use rollout::Cursor;
|
|
pub use rollout::INTERACTIVE_SESSION_SOURCES;
|
|
pub use rollout::RolloutRecorder;
|
|
pub use rollout::RolloutRecorderParams;
|
|
pub use rollout::SESSIONS_SUBDIR;
|
|
pub use rollout::SessionMeta;
|
|
pub use rollout::SortDirection;
|
|
pub use rollout::ThreadItem;
|
|
pub use rollout::ThreadSortKey;
|
|
pub use rollout::ThreadsPage;
|
|
pub use rollout::append_thread_name;
|
|
pub use rollout::find_archived_thread_path_by_id_str;
|
|
#[deprecated(note = "use find_thread_path_by_id_str")]
|
|
pub use rollout::find_conversation_path_by_id_str;
|
|
pub use rollout::find_thread_meta_by_name_str;
|
|
pub use rollout::find_thread_name_by_id;
|
|
pub use rollout::find_thread_names_by_ids;
|
|
pub use rollout::find_thread_path_by_id_str;
|
|
pub use rollout::parse_cursor;
|
|
pub use rollout::read_head_for_summary;
|
|
pub use rollout::read_session_meta_line;
|
|
pub use rollout::rollout_date_parts;
|
|
mod function_tool;
|
|
mod state;
|
|
mod tasks;
|
|
mod user_shell_command;
|
|
pub mod util;
|
|
|
|
pub use attestation::AttestationContext;
|
|
pub use attestation::AttestationProvider;
|
|
pub use attestation::GenerateAttestationFuture;
|
|
pub use client::ModelClient;
|
|
pub use client::ModelClientSession;
|
|
pub use client::X_CODEX_INSTALLATION_ID_HEADER;
|
|
pub use client::X_CODEX_TURN_METADATA_HEADER;
|
|
pub use client_common::Prompt;
|
|
pub use client_common::ResponseEvent;
|
|
pub use client_common::ResponseStream;
|
|
pub use codex_prompts::REVIEW_PROMPT;
|
|
pub use compact::content_items_to_text;
|
|
pub use current_time::TimeFuture;
|
|
pub use current_time::TimeProvider;
|
|
pub use event_mapping::parse_turn_item;
|
|
pub use exec_policy::ExecPolicyError;
|
|
pub use exec_policy::check_execpolicy_for_warnings;
|
|
pub use exec_policy::format_exec_policy_error_with_source;
|
|
pub use exec_policy::load_exec_policy;
|
|
pub use installation_id::resolve_installation_id;
|
|
pub mod compact;
|
|
mod memory_usage;
|
|
pub mod otel_init;
|