mirror of
https://github.com/tiennm99/ccs.git
synced 2026-08-21 06:26:04 +00:00
fix(runtime): strip reintroduced Anthropic routing env
Prevent settings-profile Claude launches from reintroducing routing/auth env after the final env merge. - re-strip ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, and ANTHROPIC_API_KEY after merging envVars - preserve model-selection env such as ANTHROPIC_MODEL and ANTHROPIC_DEFAULT_SONNET_MODEL - add a regression test covering explicit settings-profile overrides that try to reintroduce routing env Verification: - bun test tests/unit/utils/claudecode-env-stripping.test.ts - bun run validate
This commit is contained in:
@@ -177,10 +177,13 @@ export function execClaude(
|
|||||||
const mergedEnv = envVars
|
const mergedEnv = envVars
|
||||||
? { ...baseEnv, ...claudeLaunchEnv, ...envVars, ...webSearchEnv }
|
? { ...baseEnv, ...claudeLaunchEnv, ...envVars, ...webSearchEnv }
|
||||||
: { ...baseEnv, ...claudeLaunchEnv, ...webSearchEnv };
|
: { ...baseEnv, ...claudeLaunchEnv, ...webSearchEnv };
|
||||||
|
const effectiveMergedEnv = stripInheritedAnthropicRoutingEnv
|
||||||
|
? stripAnthropicRoutingEnv(mergedEnv)
|
||||||
|
: mergedEnv;
|
||||||
|
|
||||||
// Strip Claude Code nested session guard env var to allow CCS delegation
|
// Strip Claude Code nested session guard env var to allow CCS delegation
|
||||||
// (Claude Code v2.1.39+ sets CLAUDECODE to detect nested sessions)
|
// (Claude Code v2.1.39+ sets CLAUDECODE to detect nested sessions)
|
||||||
const env = stripClaudeCodeEnv(mergedEnv);
|
const env = stripClaudeCodeEnv(effectiveMergedEnv);
|
||||||
|
|
||||||
if (profileType !== 'account') {
|
if (profileType !== 'account') {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -367,6 +367,26 @@ describe('CLAUDECODE environment stripping', () => {
|
|||||||
expect(env.ANTHROPIC_SMALL_FAST_MODEL).toBe('gpt-5-codex-mini');
|
expect(env.ANTHROPIC_SMALL_FAST_MODEL).toBe('gpt-5-codex-mini');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('execClaude strips routing env reintroduced by explicit settings-profile overrides', () => {
|
||||||
|
execClaude('claude', ['--help'], {
|
||||||
|
CCS_PROFILE_TYPE: 'settings',
|
||||||
|
CCS_STRIP_INHERITED_ANTHROPIC_ENV: '1',
|
||||||
|
ANTHROPIC_BASE_URL: 'http://127.0.0.1:8317/api/provider/codex',
|
||||||
|
ANTHROPIC_AUTH_TOKEN: 'reintroduced-routing-token',
|
||||||
|
ANTHROPIC_API_KEY: 'reintroduced-api-key',
|
||||||
|
ANTHROPIC_MODEL: 'gpt-5.4',
|
||||||
|
ANTHROPIC_DEFAULT_SONNET_MODEL: 'gpt-5.4',
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(spawnCalls.length).toBeGreaterThan(0);
|
||||||
|
const env = spawnCalls[0].options?.env as NodeJS.ProcessEnv;
|
||||||
|
expect(env.ANTHROPIC_BASE_URL).toBeUndefined();
|
||||||
|
expect(env.ANTHROPIC_AUTH_TOKEN).toBeUndefined();
|
||||||
|
expect(env.ANTHROPIC_API_KEY).toBeUndefined();
|
||||||
|
expect(env.ANTHROPIC_MODEL).toBe('gpt-5.4');
|
||||||
|
expect(env.ANTHROPIC_DEFAULT_SONNET_MODEL).toBe('gpt-5.4');
|
||||||
|
});
|
||||||
|
|
||||||
it('headless executor spawn path strips CLAUDECODE before spawn', async () => {
|
it('headless executor spawn path strips CLAUDECODE before spawn', async () => {
|
||||||
writeConfigWithAutoUpdatePreference(false);
|
writeConfigWithAutoUpdatePreference(false);
|
||||||
process.env.CLAUDECODE = 'nested';
|
process.env.CLAUDECODE = 'nested';
|
||||||
|
|||||||
Reference in New Issue
Block a user