Unified · Split
| @@ -566,9 +566,32 @@ const runDaemonSession = (input: { · 565 unmodified lines | ||
| 566 | 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 | 592 | const runStdioMcpSession = () => |
| 570 | 593 | Effect.gen(function* () { |
| 571 | − const executor = yield* Effect.promise(() => getExecutor()); | |
| 594 | + const executor = yield* Effect.promise(() => withStdoutReroutedToStderr(() => getExecutor())); | |
| 572 | 595 | yield* Effect.promise(() => |
| 573 | 596 | runMcpStdioServer({ executor, codeExecutor: makeQuickJsExecutor() }), |
| 574 | 597 | ); |