mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
[codex] nest sleep config under current time reminder (#29910)
## Summary - move sleep tool enablement from top-level `[features].sleep_tool` to `[features.current_time_reminder].sleep_tool` - remove the standalone `Feature::SleepTool` flag and gate `clock.sleep` from resolved current-time configuration - update config schema, config-lock materialization, and existing sleep coverage Stacked on #29907.
This commit is contained in:
committed by
GitHub
Unverified
parent
800529218a
commit
35f5d02464
@@ -623,10 +623,12 @@ current_time_reminder = true
|
||||
enabled = true
|
||||
reminder_interval_seconds = 4
|
||||
clock_source = "external"
|
||||
sleep_tool = true
|
||||
"#,
|
||||
CurrentTimeReminderConfig {
|
||||
reminder_interval_seconds: 4,
|
||||
clock_source: CurrentTimeSource::External,
|
||||
sleep_tool: true,
|
||||
},
|
||||
),
|
||||
] {
|
||||
|
||||
@@ -1037,7 +1037,7 @@ pub struct Config {
|
||||
pub token_budget: Option<TokenBudgetConfig>,
|
||||
/// Shared token budget for the root thread and its sub-agents.
|
||||
pub rollout_budget: Option<RolloutBudgetConfig>,
|
||||
/// Current-time reminder configuration, when enabled.
|
||||
/// Current-time reminder and clock tool configuration, when enabled.
|
||||
pub current_time_reminder: Option<CurrentTimeReminderConfig>,
|
||||
|
||||
/// Centralized feature flags; source of truth for feature gating.
|
||||
@@ -1117,6 +1117,8 @@ pub struct RolloutBudgetConfig {
|
||||
pub struct CurrentTimeReminderConfig {
|
||||
pub reminder_interval_seconds: u64,
|
||||
pub clock_source: CurrentTimeSource,
|
||||
/// Whether to expose the input-interruptible `clock.sleep` tool.
|
||||
pub sleep_tool: bool,
|
||||
}
|
||||
|
||||
impl Default for CurrentTimeReminderConfig {
|
||||
@@ -1124,6 +1126,7 @@ impl Default for CurrentTimeReminderConfig {
|
||||
Self {
|
||||
reminder_interval_seconds: 1,
|
||||
clock_source: CurrentTimeSource::System,
|
||||
sleep_tool: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2675,6 +2678,9 @@ fn resolve_current_time_reminder_config(
|
||||
clock_source: base
|
||||
.and_then(|config| config.clock_source)
|
||||
.unwrap_or(default.clock_source),
|
||||
sleep_tool: base
|
||||
.and_then(|config| config.sleep_tool)
|
||||
.unwrap_or(default.sleep_tool),
|
||||
}))
|
||||
}
|
||||
|
||||
|
||||
@@ -359,6 +359,7 @@ mod tests {
|
||||
enabled: Some(true),
|
||||
reminder_interval_seconds: Some(1),
|
||||
clock_source: Some(codex_features::CurrentTimeSource::System),
|
||||
sleep_tool: Some(false),
|
||||
}))
|
||||
);
|
||||
|
||||
|
||||
@@ -744,10 +744,14 @@ fn add_core_utility_tools(context: &CoreToolPlanContext<'_>, planned_tools: &mut
|
||||
|
||||
if features.enabled(Feature::CurrentTimeReminder) {
|
||||
planned_tools.add(CurrentTimeHandler);
|
||||
}
|
||||
|
||||
if features.enabled(Feature::SleepTool) {
|
||||
planned_tools.add(SleepHandler);
|
||||
if turn_context
|
||||
.config
|
||||
.current_time_reminder
|
||||
.as_ref()
|
||||
.is_some_and(|config| config.sleep_tool)
|
||||
{
|
||||
planned_tools.add(SleepHandler);
|
||||
}
|
||||
}
|
||||
|
||||
if tool_suggest_enabled(turn_context)
|
||||
|
||||
@@ -31,6 +31,7 @@ use codex_tools::ToolSpec;
|
||||
use pretty_assertions::assert_eq;
|
||||
use serde_json::json;
|
||||
|
||||
use crate::config::CurrentTimeReminderConfig;
|
||||
use crate::session::step_context::StepContext;
|
||||
use crate::session::tests::make_session_and_context;
|
||||
use crate::session::turn_context::TurnContext;
|
||||
@@ -721,19 +722,27 @@ async fn host_context_gates_agent_job_tools() {
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn sleep_tool_follows_feature_gate() {
|
||||
async fn sleep_tool_follows_current_time_config() {
|
||||
let disabled = probe(|turn| {
|
||||
set_feature(turn, Feature::SleepTool, /*enabled*/ false);
|
||||
set_feature(turn, Feature::CurrentTimeReminder, /*enabled*/ true);
|
||||
})
|
||||
.await;
|
||||
disabled.assert_visible_lacks(&["clock"]);
|
||||
assert_eq!(disabled.namespace_function_names("clock"), ["curr_time"]);
|
||||
|
||||
let enabled = probe(|turn| {
|
||||
set_feature(turn, Feature::SleepTool, /*enabled*/ true);
|
||||
set_feature(turn, Feature::CurrentTimeReminder, /*enabled*/ true);
|
||||
let mut config = (*turn.config).clone();
|
||||
config.current_time_reminder = Some(CurrentTimeReminderConfig {
|
||||
sleep_tool: true,
|
||||
..CurrentTimeReminderConfig::default()
|
||||
});
|
||||
turn.config = Arc::new(config);
|
||||
})
|
||||
.await;
|
||||
enabled.assert_visible_contains(&["clock"]);
|
||||
assert_eq!(enabled.namespace_function_names("clock"), ["sleep"]);
|
||||
assert_eq!(
|
||||
enabled.namespace_function_names("clock"),
|
||||
["curr_time", "sleep"]
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
|
||||
Reference in New Issue
Block a user