( session: Session, prompt: string, outputFormat: PromptOutputFormat, stdout: PromptOutput, stderr: PromptOutput, )
| 422 | } |
| 423 | |
| 424 | function runPromptTurn( |
| 425 | session: Session, |
| 426 | prompt: string, |
| 427 | outputFormat: PromptOutputFormat, |
| 428 | stdout: PromptOutput, |
| 429 | stderr: PromptOutput, |
| 430 | ): Promise<void> { |
| 431 | let activeTurnId: number | undefined; |
| 432 | let activeAgentId: string | undefined; |
| 433 | const outputWriter = |
| 434 | outputFormat === 'stream-json' |
| 435 | ? new PromptJsonWriter(stdout) |
| 436 | : new PromptTranscriptWriter(stdout, stderr); |
| 437 | let settled = false; |
| 438 | let unsubscribe: (() => void) | undefined; |
| 439 | |
| 440 | return new Promise<void>((resolve, reject) => { |
| 441 | const finish = (error?: Error): void => { |
| 442 | if (settled) return; |
| 443 | settled = true; |
| 444 | unsubscribe?.(); |
| 445 | outputWriter.finish(); |
| 446 | if (error !== undefined) { |
| 447 | reject(error); |
| 448 | return; |
| 449 | } |
| 450 | resolve(); |
| 451 | }; |
| 452 | |
| 453 | unsubscribe = session.onEvent((event) => { |
| 454 | if (event.type === 'error') { |
| 455 | if (event.agentId !== PROMPT_MAIN_AGENT_ID) { |
| 456 | return; |
| 457 | } |
| 458 | finish(new Error(`${event.code}: ${event.message}`)); |
| 459 | return; |
| 460 | } |
| 461 | if (event.type === 'turn.started' && activeTurnId === undefined) { |
| 462 | if (event.agentId !== PROMPT_MAIN_AGENT_ID) { |
| 463 | return; |
| 464 | } |
| 465 | activeTurnId = event.turnId; |
| 466 | activeAgentId = event.agentId; |
| 467 | return; |
| 468 | } |
| 469 | if ( |
| 470 | activeTurnId === undefined || |
| 471 | activeAgentId === undefined || |
| 472 | !hasTurnId(event) || |
| 473 | event.turnId !== activeTurnId || |
| 474 | event.agentId !== activeAgentId |
| 475 | ) { |
| 476 | return; |
| 477 | } |
| 478 | switch (event.type) { |
| 479 | case 'turn.step.started': |
| 480 | case 'turn.step.interrupted': |
| 481 | outputWriter.flushAssistant(); |
no test coverage detected