Use static instructions for the Default collaboration mode (#42904)

## What changed

Write Default and Plan directly into the default mode instructions and use the text without template rendering. Remove the mode-name formatting helpers and the `codex-utils-template` dependency from `codex-models-manager`.

Update the instruction test to retain checks for `request_user_input` availability guidance while removing placeholder assertions.

GitOrigin-RevId: d6afa478c30f991baa9ef4d5459e84354f29ce17
This commit is contained in:
rhan-oai authored and copyberry committed 2026-09-05 01:25:06 +00:00
1 parent be2684ede0
commit 459a79eb85
5 files changed
+3 -37

No files matched your search

-1
View File
@@ -3986,7 +3986,6 @@ dependencies = [
"codex-otel", "codex-otel",
"codex-protocol", "codex-protocol",
"codex-utils-output-truncation", "codex-utils-output-truncation",
"codex-utils-template",
"pretty_assertions", "pretty_assertions",
"serde", "serde",
"serde_json", "serde_json",
@@ -2,7 +2,7 @@
You are now in Default mode. Any previous instructions for other modes (e.g. Plan mode) are no longer active. You are now in Default mode. Any previous instructions for other modes (e.g. Plan mode) are no longer active.
Your active mode changes only when new developer instructions with a different `<collaboration_mode>...</collaboration_mode>` change it; user requests or tool descriptions do not change mode by themselves. Known mode names are {{KNOWN_MODE_NAMES}}. Your active mode changes only when new developer instructions with a different `<collaboration_mode>...</collaboration_mode>` change it; user requests or tool descriptions do not change mode by themselves. Known mode names are Default and Plan.
## request_user_input availability ## request_user_input availability
-1
View File
@@ -20,7 +20,6 @@ codex-login = { workspace = true }
codex-otel = { workspace = true } codex-otel = { workspace = true }
codex-protocol = { workspace = true } codex-protocol = { workspace = true }
codex-utils-output-truncation = { workspace = true } codex-utils-output-truncation = { workspace = true }
codex-utils-template = { workspace = true }
serde = { workspace = true, features = ["derive"] } serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true } serde_json = { workspace = true }
tokio = { workspace = true, features = ["fs", "sync", "time"] } tokio = { workspace = true, features = ["fs", "sync", "time"] }
@@ -2,16 +2,7 @@ use codex_collaboration_mode_templates::DEFAULT as COLLABORATION_MODE_DEFAULT;
use codex_collaboration_mode_templates::PLAN as COLLABORATION_MODE_PLAN; use codex_collaboration_mode_templates::PLAN as COLLABORATION_MODE_PLAN;
use codex_protocol::config_types::CollaborationModeMask; use codex_protocol::config_types::CollaborationModeMask;
use codex_protocol::config_types::ModeKind; use codex_protocol::config_types::ModeKind;
use codex_protocol::config_types::TUI_VISIBLE_COLLABORATION_MODES;
use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::openai_models::ReasoningEffort;
use codex_utils_template::Template;
use std::sync::LazyLock;
const KNOWN_MODE_NAMES_TEMPLATE_KEY: &str = "KNOWN_MODE_NAMES";
static COLLABORATION_MODE_DEFAULT_TEMPLATE: LazyLock<Template> = LazyLock::new(|| {
Template::parse(COLLABORATION_MODE_DEFAULT)
.unwrap_or_else(|err| panic!("collaboration mode default template must parse: {err}"))
});
pub fn builtin_collaboration_mode_presets() -> Vec<CollaborationModeMask> { pub fn builtin_collaboration_mode_presets() -> Vec<CollaborationModeMask> {
vec![plan_preset(), default_preset()] vec![plan_preset(), default_preset()]
@@ -33,24 +24,7 @@ fn default_preset() -> CollaborationModeMask {
mode: Some(ModeKind::Default), mode: Some(ModeKind::Default),
model: None, model: None,
reasoning_effort: None, reasoning_effort: None,
developer_instructions: Some(Some(default_mode_instructions())), developer_instructions: Some(Some(COLLABORATION_MODE_DEFAULT.to_string())),
}
}
fn default_mode_instructions() -> String {
let known_mode_names = format_mode_names(&TUI_VISIBLE_COLLABORATION_MODES);
COLLABORATION_MODE_DEFAULT_TEMPLATE
.render([(KNOWN_MODE_NAMES_TEMPLATE_KEY, known_mode_names.as_str())])
.unwrap_or_else(|err| panic!("collaboration mode default template must render: {err}"))
}
fn format_mode_names(modes: &[ModeKind]) -> String {
let mode_names: Vec<&str> = modes.iter().map(|mode| mode.display_name()).collect();
match mode_names.as_slice() {
[] => "none".to_string(),
[mode_name] => (*mode_name).to_string(),
[first, second] => format!("{first} and {second}"),
[..] => mode_names.join(", "),
} }
} }
@@ -15,18 +15,12 @@ fn preset_names_use_mode_display_names() {
} }
#[test] #[test]
fn default_mode_instructions_replace_mode_names_placeholder() { fn default_mode_instructions_follow_user_input_tool_availability() {
let default_instructions = default_preset() let default_instructions = default_preset()
.developer_instructions .developer_instructions
.expect("default preset should include instructions") .expect("default preset should include instructions")
.expect("default instructions should be set"); .expect("default instructions should be set");
assert!(!default_instructions.contains("{{KNOWN_MODE_NAMES}}"));
let known_mode_names = format_mode_names(&TUI_VISIBLE_COLLABORATION_MODES);
let expected_snippet = format!("Known mode names are {known_mode_names}.");
assert!(default_instructions.contains(&expected_snippet));
assert!(default_instructions.contains( assert!(default_instructions.contains(
"Use the `request_user_input` tool only when it is listed in the available tools" "Use the `request_user_input` tool only when it is listed in the available tools"
)); ));