fix(agents): disable Claude Code server-side auto mode checks for CPA gateways
This commit is contained in:
1 parent
9c67b9d40c
commit
ecf0ad58fd
5 files changed
+45
-4
No files matched your search
@@ -590,6 +590,7 @@ pub(crate) fn build_claude_agent_config(
|
||||
env.remove("ANTHROPIC_API_KEY");
|
||||
env.remove("CLAUDE_CODE_EFFORT_LEVEL");
|
||||
env.remove(CLAUDE_CODE_MAX_CONTEXT_TOKENS_ENV);
|
||||
env.remove(CLAUDE_CODE_AUTO_MODE_SERVER_ENV);
|
||||
env.remove(CLAUDE_AUTOCOMPACT_PCT_OVERRIDE_ENV);
|
||||
env.remove(DISABLE_AUTO_COMPACT_ENV);
|
||||
for (key, value) in [
|
||||
@@ -625,6 +626,10 @@ pub(crate) fn build_claude_agent_config(
|
||||
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV.to_string(),
|
||||
serde_json::Value::String("1".to_string()),
|
||||
);
|
||||
env.insert(
|
||||
CLAUDE_CODE_AUTO_MODE_SERVER_ENV.to_string(),
|
||||
serde_json::Value::String("0".to_string()),
|
||||
);
|
||||
env.insert(
|
||||
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE_ENV.to_string(),
|
||||
serde_json::Value::String(mappings.auto_compact_pct.to_string()),
|
||||
@@ -1159,6 +1164,7 @@ pub(crate) fn prepare_claude_code_managed_removal(
|
||||
"ANTHROPIC_DEFAULT_FABLE_MODEL",
|
||||
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV,
|
||||
CLAUDE_CODE_MAX_CONTEXT_TOKENS_ENV,
|
||||
CLAUDE_CODE_AUTO_MODE_SERVER_ENV,
|
||||
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE_ENV,
|
||||
DISABLE_AUTO_COMPACT_ENV,
|
||||
"CLAUDE_CODE_SUBAGENT_MODEL",
|
||||
@@ -1800,6 +1806,7 @@ pub(crate) fn build_restored_claude_code_config(
|
||||
"ANTHROPIC_DEFAULT_FABLE_MODEL",
|
||||
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV,
|
||||
CLAUDE_CODE_MAX_CONTEXT_TOKENS_ENV,
|
||||
CLAUDE_CODE_AUTO_MODE_SERVER_ENV,
|
||||
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE_ENV,
|
||||
DISABLE_AUTO_COMPACT_ENV,
|
||||
"CLAUDE_CODE_SUBAGENT_MODEL",
|
||||
|
||||
@@ -2790,7 +2790,11 @@ pub(crate) fn inspect_claude_agent_config(
|
||||
&& env
|
||||
.and_then(|env| env.get(CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV))
|
||||
.and_then(serde_json::Value::as_str)
|
||||
== Some("1");
|
||||
== Some("1")
|
||||
&& env
|
||||
.and_then(|env| env.get(CLAUDE_CODE_AUTO_MODE_SERVER_ENV))
|
||||
.and_then(serde_json::Value::as_str)
|
||||
== Some("0");
|
||||
let model = env
|
||||
.and_then(|env| env.get("ANTHROPIC_MODEL"))
|
||||
.and_then(serde_json::Value::as_str)
|
||||
|
||||
@@ -181,6 +181,7 @@ const CLAUDE_DESKTOP_EXTENDED_CONTEXT_WINDOW: u64 = 1_000_000;
|
||||
const CLAUDE_CODE_MAX_CONTEXT_TOKENS_ENV: &str = "CLAUDE_CODE_MAX_CONTEXT_TOKENS";
|
||||
const CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV: &str =
|
||||
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY";
|
||||
const CLAUDE_CODE_AUTO_MODE_SERVER_ENV: &str = "CLAUDE_CODE_AUTO_MODE_SERVER";
|
||||
const CLAUDE_AUTOCOMPACT_PCT_OVERRIDE_ENV: &str = "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE";
|
||||
const DISABLE_AUTO_COMPACT_ENV: &str = "DISABLE_AUTO_COMPACT";
|
||||
const DEFAULT_CLAUDE_AUTO_COMPACT_PCT: u8 = 90;
|
||||
|
||||
@@ -5,7 +5,7 @@ use super::*;
|
||||
fn claude_agent_config_preserves_existing_fields() {
|
||||
let rendered = build_claude_agent_config(
|
||||
Some(
|
||||
r#"{"theme":"dark","env":{"KEEP":"yes","ANTHROPIC_API_KEY":"legacy-key","CLAUDE_CODE_EFFORT_LEVEL":"max"}}"#,
|
||||
r#"{"theme":"dark","env":{"KEEP":"yes","ANTHROPIC_API_KEY":"legacy-key","CLAUDE_CODE_EFFORT_LEVEL":"max","CLAUDE_CODE_AUTO_MODE_SERVER":"1"}}"#,
|
||||
),
|
||||
"http://127.0.0.1:8317",
|
||||
DEFAULT_API_KEY,
|
||||
@@ -26,6 +26,7 @@ fn claude_agent_config_preserves_existing_fields() {
|
||||
value["env"][CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV],
|
||||
"1"
|
||||
);
|
||||
assert_eq!(value["env"][CLAUDE_CODE_AUTO_MODE_SERVER_ENV], "0");
|
||||
assert_eq!(value["env"][CLAUDE_CODE_MAX_CONTEXT_TOKENS_ENV], "200000");
|
||||
assert_eq!(value["env"][CLAUDE_AUTOCOMPACT_PCT_OVERRIDE_ENV], "90");
|
||||
assert!(value["env"].get(DISABLE_AUTO_COMPACT_ENV).is_none());
|
||||
@@ -49,6 +50,7 @@ fn claude_code_inspection_normalizes_legacy_1m_suffix() {
|
||||
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8317",
|
||||
"ANTHROPIC_AUTH_TOKEN": "test-key",
|
||||
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1",
|
||||
"CLAUDE_CODE_AUTO_MODE_SERVER": "0",
|
||||
"ANTHROPIC_MODEL": "deepseek-v4-pro[1m]",
|
||||
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]",
|
||||
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1m]",
|
||||
@@ -87,7 +89,33 @@ fn claude_code_requires_gateway_model_discovery_to_be_enabled() {
|
||||
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8317",
|
||||
"ANTHROPIC_AUTH_TOKEN": "test-key",
|
||||
"ANTHROPIC_MODEL": "gpt-test",
|
||||
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "0"
|
||||
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "0",
|
||||
"CLAUDE_CODE_AUTO_MODE_SERVER": "0"
|
||||
}
|
||||
}"#,
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
let (configured, model) = inspect_claude_agent_config(&path, 8317, "test-key").unwrap();
|
||||
|
||||
assert!(!configured);
|
||||
assert_eq!(model.as_deref(), Some("gpt-test"));
|
||||
fs::remove_dir_all(directory).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn claude_code_requires_server_classifier_to_be_disabled_for_gateway() {
|
||||
let directory = agent_test_home("claude-code-auto-mode-server");
|
||||
let path = directory.join("settings.json");
|
||||
fs::write(
|
||||
&path,
|
||||
r#"{
|
||||
"env": {
|
||||
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8317",
|
||||
"ANTHROPIC_AUTH_TOKEN": "test-key",
|
||||
"ANTHROPIC_MODEL": "gpt-test",
|
||||
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1",
|
||||
"CLAUDE_CODE_AUTO_MODE_SERVER": "1"
|
||||
}
|
||||
}"#,
|
||||
)
|
||||
|
||||
@@ -201,7 +201,7 @@ fn kimi_and_grok_status_does_not_depend_on_legacy_state() {
|
||||
|
||||
#[test]
|
||||
fn session_merge_preserves_runtime_fields_for_other_agent_formats() {
|
||||
let claude_original = r#"{"env":{"KEEP_ENV":"original","CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY":"0"},"keep":"claude"}"#;
|
||||
let claude_original = r#"{"env":{"KEEP_ENV":"original","CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY":"0","CLAUDE_CODE_AUTO_MODE_SERVER":"1"},"keep":"claude"}"#;
|
||||
let claude_managed = build_claude_agent_config(
|
||||
Some(claude_original),
|
||||
"http://127.0.0.1:8317",
|
||||
@@ -230,6 +230,7 @@ fn session_merge_preserves_runtime_fields_for_other_agent_formats() {
|
||||
claude["env"][CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY_ENV],
|
||||
"0"
|
||||
);
|
||||
assert_eq!(claude["env"][CLAUDE_CODE_AUTO_MODE_SERVER_ENV], "1");
|
||||
assert!(claude["env"].get("ANTHROPIC_BASE_URL").is_none());
|
||||
assert!(claude.get("model").is_none());
|
||||
|
||||
|
||||
Reference in new issue
Block a user