From db4b938c0ee4bcb9cdf1d68be61036409eebb33b Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Fri, 22 May 2026 15:39:15 -0400 Subject: [PATCH] fix: treat remote-control as a Claude subcommand --- src/utils/claude-subcommand-detector.ts | 1 + tests/unit/utils/claude-subcommand-detector.test.ts | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/utils/claude-subcommand-detector.ts b/src/utils/claude-subcommand-detector.ts index b02c064a..9f425e82 100644 --- a/src/utils/claude-subcommand-detector.ts +++ b/src/utils/claude-subcommand-detector.ts @@ -34,6 +34,7 @@ const CLAUDE_SUBCOMMANDS = new Set([ 'plugin', 'plugins', 'project', + 'remote-control', 'setup-token', 'ultrareview', 'update', diff --git a/tests/unit/utils/claude-subcommand-detector.test.ts b/tests/unit/utils/claude-subcommand-detector.test.ts index 3f4512dd..ae6f0488 100644 --- a/tests/unit/utils/claude-subcommand-detector.test.ts +++ b/tests/unit/utils/claude-subcommand-detector.test.ts @@ -26,6 +26,7 @@ describe('isClaudeSubcommandInvocation', () => { 'plugin', 'plugins', 'project', + 'remote-control', 'setup-token', 'ultrareview', 'update', @@ -117,6 +118,9 @@ describe('stripClaudeSubcommandSessionArgs', () => { expect(stripClaudeSubcommandSessionArgs(['doctor', '--permission-mode=acceptEdits'])).toEqual([ 'doctor', ]); + expect( + stripClaudeSubcommandSessionArgs(['remote-control', '--permission-mode', 'bypassPermissions']) + ).toEqual(['remote-control']); }); it('preserves --permission-mode for the agents subcommand (after)', () => { @@ -152,11 +156,7 @@ describe('stripClaudeSubcommandSessionArgs', () => { '--allow-dangerously-skip-permissions', 'agents', ]) - ).toEqual([ - '--dangerously-skip-permissions', - '--allow-dangerously-skip-permissions', - 'agents', - ]); + ).toEqual(['--dangerously-skip-permissions', '--allow-dangerously-skip-permissions', 'agents']); }); it('still strips --teammate-mode for the agents subcommand (not accepted by upstream)', () => { @@ -188,14 +188,17 @@ describe('subcommand passthrough — injectors short-circuit', () => { expect(appendThirdPartyWebSearchToolArgs(['agents'])).toEqual(['agents']); expect(appendThirdPartyWebSearchToolArgs(['doctor'])).toEqual(['doctor']); expect(appendThirdPartyWebSearchToolArgs(['mcp', 'list'])).toEqual(['mcp', 'list']); + expect(appendThirdPartyWebSearchToolArgs(['remote-control'])).toEqual(['remote-control']); }); it('appendThirdPartyImageAnalysisToolArgs returns args unchanged for subcommand invocations', () => { expect(appendThirdPartyImageAnalysisToolArgs(['agents'])).toEqual(['agents']); + expect(appendThirdPartyImageAnalysisToolArgs(['remote-control'])).toEqual(['remote-control']); }); it('appendBrowserToolArgs returns args unchanged for subcommand invocations', () => { expect(appendBrowserToolArgs(['agents'])).toEqual(['agents']); + expect(appendBrowserToolArgs(['remote-control'])).toEqual(['remote-control']); }); it('injectors still inject for non-subcommand interactive launches', () => {