Unified · Split
| @@ -566,9 +566,32 @@ const runDaemonSession = (input: { · 565 unmodified lines | |||
| 566 | // Stdio MCP session | 566 | // Stdio MCP session |
| 567 | // --------------------------------------------------------------------------- | 567 | // --------------------------------------------------------------------------- |
| 568 | 568 | ||
| 569 | const withStdoutReroutedToStderr = async <A>(body: () => Promise<A>): Promise<A> => { | ||
| 570 | const originalWrite = process.stdout.write; | ||
| 571 | const originalLog = console.log; | ||
| 572 | const originalInfo = console.info; | ||
| 573 | const originalDebug = console.debug; | ||
| 574 | const stderrWrite = process.stderr.write.bind(process.stderr); | ||
| 575 | |||
| 576 | process.stdout.write = ((...args: Parameters<typeof process.stdout.write>) => | ||
| 577 | stderrWrite(...args)) as typeof process.stdout.write; | ||
| 578 | console.log = console.error.bind(console); | ||
| 579 | console.info = console.error.bind(console); | ||
| 580 | console.debug = console.error.bind(console); | ||
| 581 | |||
| 582 | try { | ||
| 583 | return await body(); | ||
| 584 | } finally { | ||
| 585 | process.stdout.write = originalWrite; | ||
| 586 | console.log = originalLog; | ||
| 587 | console.info = originalInfo; | ||
| 588 | console.debug = originalDebug; | ||
| 589 | } | ||
| 590 | }; | ||
| 591 | |||
| 569 | const runStdioMcpSession = () => | 592 | const runStdioMcpSession = () => |
| 570 | Effect.gen(function* () { | 593 | Effect.gen(function* () { |
| 571 | const executor = yield* Effect.promise(() => getExecutor()); | 594 | const executor = yield* Effect.promise(() => withStdoutReroutedToStderr(() => getExecutor())); |
| 572 | yield* Effect.promise(() => | 595 | yield* Effect.promise(() => |
| 573 | runMcpStdioServer({ executor, codeExecutor: makeQuickJsExecutor() }), | 596 | runMcpStdioServer({ executor, codeExecutor: makeQuickJsExecutor() }), |
| 574 | ); | 597 | ); |