fix(resume): allow passing a prompt via stdin while resuming using --resume (#13520)

This commit is contained in:
bl-ue
2025-11-25 10:53:17 -07:00
committed by GitHub
parent f2c52f777c
commit 098e5c281c
2 changed files with 3 additions and 30 deletions
+3 -25
View File
@@ -435,37 +435,15 @@ describe('parseArguments', () => {
debugErrorSpy.mockRestore(); debugErrorSpy.mockRestore();
}); });
it('should throw an error when resuming a session without prompt in non-interactive mode', async () => { it('should allow resuming a session without prompt argument in non-interactive mode (expecting stdin)', async () => {
const originalIsTTY = process.stdin.isTTY; const originalIsTTY = process.stdin.isTTY;
process.stdin.isTTY = false; process.stdin.isTTY = false;
process.argv = ['node', 'script.js', '--resume', 'session-id']; process.argv = ['node', 'script.js', '--resume', 'session-id'];
const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => {
throw new Error('process.exit called');
});
const mockConsoleError = vi
.spyOn(console, 'error')
.mockImplementation(() => {});
const debugErrorSpy = vi
.spyOn(debugLogger, 'error')
.mockImplementation(() => {});
try { try {
await expect(parseArguments({} as Settings)).rejects.toThrow( const argv = await parseArguments({} as Settings);
'process.exit called', expect(argv.resume).toBe('session-id');
);
expect(debugErrorSpy).toHaveBeenCalledWith(
expect.stringContaining(
'When resuming a session, you must provide a message via --prompt (-p) or stdin',
),
);
expect(mockConsoleError).toHaveBeenCalled();
} finally { } finally {
mockExit.mockRestore();
mockConsoleError.mockRestore();
debugErrorSpy.mockRestore();
process.stdin.isTTY = originalIsTTY; process.stdin.isTTY = originalIsTTY;
} }
}); });
-5
View File
@@ -262,11 +262,6 @@ export async function parseArguments(settings: Settings): Promise<CliArgs> {
if (argv['prompt'] && argv['promptInteractive']) { if (argv['prompt'] && argv['promptInteractive']) {
return 'Cannot use both --prompt (-p) and --prompt-interactive (-i) together'; return 'Cannot use both --prompt (-p) and --prompt-interactive (-i) together';
} }
if (argv['resume'] && !argv['prompt'] && !process.stdin.isTTY) {
throw new Error(
'When resuming a session, you must provide a message via --prompt (-p) or stdin',
);
}
if (argv['yolo'] && argv['approvalMode']) { if (argv['yolo'] && argv['approvalMode']) {
return 'Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.'; return 'Cannot use both --yolo (-y) and --approval-mode together. Use --approval-mode=yolo instead.';
} }