fix: honor default target for Claude passthrough (#1539)

Honors the configured default target in the Claude subcommand passthrough resolver.
This commit is contained in:
Kai (Tam Nhu) Tran authored and GitHub committed 2026-06-15 23:12:52 -04:00
1 parent d2848d3931
commit 473aa082f6
2 files changed
+40 -6

No files matched your search

+19 -6
View File
@@ -99,11 +99,15 @@ function usesImplicitDefaultProfile(cleanArgs: string[]): boolean {
* and only reached on the profile-not-found path, so a real configured profile
* of the same name always wins.
*/
export function isBareClaudeSubcommandPassthrough(profile: string, args: string[]): boolean {
export function isBareClaudeSubcommandPassthrough(
profile: string,
args: string[],
profileConfig?: Parameters<typeof resolveTargetType>[1]
): boolean {
if (profile === 'default') return false;
if (getClaudeSubcommandName([profile]) === null) return false;
try {
return resolveTargetType(args) === 'claude';
return resolveTargetType(args, profileConfig) === 'claude';
} catch {
return false;
}
@@ -158,10 +162,19 @@ export async function resolveProfileAndTarget(
} catch (profileError) {
// Bare Claude subcommand passthrough: forward `ccs agents`, `ccs mcp`, ...
// through the default profile instead of failing as an unknown profile.
if (isBareClaudeSubcommandPassthrough(profile, args)) {
remainingArgs = [profile, ...remainingArgs];
profile = 'default';
profileInfo = detector.detectProfileType(profile);
if (profile !== 'default' && getClaudeSubcommandName([profile]) !== null) {
const defaultProfileInfo = detector.detectProfileType('default');
const defaultProfileConfig = defaultProfileInfo.target
? { target: defaultProfileInfo.target }
: undefined;
if (isBareClaudeSubcommandPassthrough(profile, args, defaultProfileConfig)) {
remainingArgs = [profile, ...remainingArgs];
profile = 'default';
profileInfo = defaultProfileInfo;
} else {
throw profileError;
}
} else {
throw profileError;
}
@@ -42,4 +42,25 @@ describe('isBareClaudeSubcommandPassthrough', () => {
);
expect(isBareClaudeSubcommandPassthrough('mcp', ['mcp', '--target', 'codex'])).toBe(false);
});
it('does not reroute through a default profile configured for a non-claude target', () => {
expect(
isBareClaudeSubcommandPassthrough('setup-token', ['setup-token', 'sk-secret'], {
target: 'droid',
})
).toBe(false);
expect(isBareClaudeSubcommandPassthrough('agents', ['agents'], { target: 'codex' })).toBe(
false
);
});
it('allows explicit claude target selection to override a non-claude default profile target', () => {
expect(
isBareClaudeSubcommandPassthrough(
'setup-token',
['setup-token', 'sk-secret', '--target', 'claude'],
{ target: 'droid' }
)
).toBe(true);
});
});