summaryrefslogtreecommitdiff
path: root/packages/cli/src/nonInteractiveCli.ts
diff options
context:
space:
mode:
authorAllen Hutchison <[email protected]>2025-08-05 16:11:21 -0700
committerGitHub <[email protected]>2025-08-05 23:11:21 +0000
commit2141b39c3d713a19f2dd8012a76c2ff8b7c30a5e (patch)
treeee04d073a117daefe131e1cccf36d9ff08b7aa87 /packages/cli/src/nonInteractiveCli.ts
parent268627469b384ba3fa8dfe2e05b5186248013070 (diff)
feat(cli): route non-interactive output to stderr (#5624)
Diffstat (limited to 'packages/cli/src/nonInteractiveCli.ts')
-rw-r--r--packages/cli/src/nonInteractiveCli.ts36
1 files changed, 23 insertions, 13 deletions
diff --git a/packages/cli/src/nonInteractiveCli.ts b/packages/cli/src/nonInteractiveCli.ts
index 8e573134..8b056a28 100644
--- a/packages/cli/src/nonInteractiveCli.ts
+++ b/packages/cli/src/nonInteractiveCli.ts
@@ -17,28 +17,37 @@ import {
import { Content, Part, FunctionCall } from '@google/genai';
import { parseAndFormatApiError } from './ui/utils/errorParsing.js';
+import { ConsolePatcher } from './ui/utils/ConsolePatcher.js';
export async function runNonInteractive(
config: Config,
input: string,
prompt_id: string,
): Promise<void> {
- await config.initialize();
- // Handle EPIPE errors when the output is piped to a command that closes early.
- process.stdout.on('error', (err: NodeJS.ErrnoException) => {
- if (err.code === 'EPIPE') {
- // Exit gracefully if the pipe is closed.
- process.exit(0);
- }
+ const consolePatcher = new ConsolePatcher({
+ stderr: true,
+ debugMode: config.getDebugMode(),
});
- const geminiClient = config.getGeminiClient();
- const toolRegistry: ToolRegistry = await config.getToolRegistry();
-
- const abortController = new AbortController();
- let currentMessages: Content[] = [{ role: 'user', parts: [{ text: input }] }];
- let turnCount = 0;
try {
+ await config.initialize();
+ consolePatcher.patch();
+ // Handle EPIPE errors when the output is piped to a command that closes early.
+ process.stdout.on('error', (err: NodeJS.ErrnoException) => {
+ if (err.code === 'EPIPE') {
+ // Exit gracefully if the pipe is closed.
+ process.exit(0);
+ }
+ });
+
+ const geminiClient = config.getGeminiClient();
+ const toolRegistry: ToolRegistry = await config.getToolRegistry();
+
+ const abortController = new AbortController();
+ let currentMessages: Content[] = [
+ { role: 'user', parts: [{ text: input }] },
+ ];
+ let turnCount = 0;
while (true) {
turnCount++;
if (
@@ -133,6 +142,7 @@ export async function runNonInteractive(
);
process.exit(1);
} finally {
+ consolePatcher.cleanup();
if (isTelemetrySdkInitialized()) {
await shutdownTelemetry();
}