Skip to content

Commit fec0eba

Browse files
authored
move stdio (#13528)
1 parent f92e79e commit fec0eba

File tree

9 files changed

+51
-56
lines changed

9 files changed

+51
-56
lines changed

packages/cli/src/gemini.test.tsx

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,28 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
4040
return {
4141
...actual,
4242
recordSlowRender: vi.fn(),
43+
writeToStdout: vi.fn((...args) =>
44+
process.stdout.write(
45+
...(args as Parameters<typeof process.stdout.write>),
46+
),
47+
),
48+
patchStdio: vi.fn(() => () => {}),
49+
createInkStdio: vi.fn(() => ({
50+
stdout: {
51+
write: vi.fn((...args) =>
52+
process.stdout.write(
53+
...(args as Parameters<typeof process.stdout.write>),
54+
),
55+
),
56+
columns: 80,
57+
rows: 24,
58+
on: vi.fn(),
59+
removeListener: vi.fn(),
60+
},
61+
stderr: {
62+
write: vi.fn(),
63+
},
64+
})),
4365
};
4466
});
4567

@@ -149,35 +171,6 @@ vi.mock('./ui/utils/mouse.js', () => ({
149171
isIncompleteMouseSequence: vi.fn(),
150172
}));
151173

152-
vi.mock('./utils/stdio.js', async (importOriginal) => {
153-
const actual = await importOriginal<typeof import('./utils/stdio.js')>();
154-
return {
155-
...actual,
156-
writeToStdout: vi.fn((...args) =>
157-
process.stdout.write(
158-
...(args as Parameters<typeof process.stdout.write>),
159-
),
160-
),
161-
patchStdio: vi.fn(() => () => {}),
162-
createInkStdio: vi.fn(() => ({
163-
stdout: {
164-
write: vi.fn((...args) =>
165-
process.stdout.write(
166-
...(args as Parameters<typeof process.stdout.write>),
167-
),
168-
),
169-
columns: 80,
170-
rows: 24,
171-
on: vi.fn(),
172-
removeListener: vi.fn(),
173-
},
174-
stderr: {
175-
write: vi.fn(),
176-
},
177-
})),
178-
};
179-
});
180-
181174
describe('gemini.tsx main function', () => {
182175
let originalEnvGeminiSandbox: string | undefined;
183176
let originalEnvSandbox: string | undefined;

packages/cli/src/gemini.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ import {
4949
recordSlowRender,
5050
coreEvents,
5151
CoreEvent,
52+
createInkStdio,
53+
patchStdio,
54+
writeToStdout,
55+
writeToStderr,
5256
} from '@google/gemini-cli-core';
5357
import {
5458
initializeApp,
@@ -85,12 +89,6 @@ import { disableMouseEvents, enableMouseEvents } from './ui/utils/mouse.js';
8589
import { ScrollProvider } from './ui/contexts/ScrollProvider.js';
8690
import ansiEscapes from 'ansi-escapes';
8791
import { isAlternateBufferEnabled } from './ui/hooks/useAlternateBuffer.js';
88-
import {
89-
createInkStdio,
90-
patchStdio,
91-
writeToStderr,
92-
writeToStdout,
93-
} from './utils/stdio.js';
9492

9593
import { profiler } from './ui/components/DebugProfiler.js';
9694

packages/cli/src/ui/AppContainer.test.tsx

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ vi.mock('@google/gemini-cli-core', async (importOriginal) => {
5454
...actual,
5555
coreEvents: mockCoreEvents,
5656
IdeClient: mockIdeClient,
57+
writeToStdout: vi.fn((...args) =>
58+
process.stdout.write(
59+
...(args as Parameters<typeof process.stdout.write>),
60+
),
61+
),
62+
writeToStderr: vi.fn((...args) =>
63+
process.stderr.write(
64+
...(args as Parameters<typeof process.stderr.write>),
65+
),
66+
),
67+
patchStdio: vi.fn(() => () => {}),
68+
createInkStdio: vi.fn(() => ({
69+
stdout: process.stdout,
70+
stderr: process.stderr,
71+
})),
5772
};
5873
});
5974
import type { LoadedSettings } from '../config/settings.js';
@@ -126,19 +141,6 @@ vi.mock('./utils/mouse.js', () => ({
126141
enableMouseEvents: vi.fn(),
127142
disableMouseEvents: vi.fn(),
128143
}));
129-
vi.mock('../utils/stdio.js', () => ({
130-
writeToStdout: vi.fn((...args) =>
131-
process.stdout.write(...(args as Parameters<typeof process.stdout.write>)),
132-
),
133-
writeToStderr: vi.fn((...args) =>
134-
process.stderr.write(...(args as Parameters<typeof process.stderr.write>)),
135-
),
136-
patchStdio: vi.fn(() => () => {}),
137-
createInkStdio: vi.fn(() => ({
138-
stdout: process.stdout,
139-
stderr: process.stderr,
140-
})),
141-
}));
142144

143145
import { useHistory } from './hooks/useHistoryManager.js';
144146
import { useThemeCommand } from './hooks/useThemeCommand.js';
@@ -163,10 +165,9 @@ import { useLoadingIndicator } from './hooks/useLoadingIndicator.js';
163165
import { useKeypress, type Key } from './hooks/useKeypress.js';
164166
import { measureElement } from 'ink';
165167
import { useTerminalSize } from './hooks/useTerminalSize.js';
166-
import { ShellExecutionService } from '@google/gemini-cli-core';
168+
import { ShellExecutionService, writeToStdout } from '@google/gemini-cli-core';
167169
import { type ExtensionManager } from '../config/extension-manager.js';
168170
import { enableMouseEvents, disableMouseEvents } from './utils/mouse.js';
169-
import { writeToStdout } from '../utils/stdio.js';
170171

171172
describe('AppContainer State Management', () => {
172173
let mockConfig: Config;

packages/cli/src/ui/AppContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ import { disableMouseEvents, enableMouseEvents } from './utils/mouse.js';
110110
import { useAlternateBuffer } from './hooks/useAlternateBuffer.js';
111111
import { useSettings } from './contexts/SettingsContext.js';
112112
import { enableSupportedProtocol } from './utils/kittyProtocolDetector.js';
113-
import { writeToStdout } from '../utils/stdio.js';
113+
import { writeToStdout } from '@google/gemini-cli-core';
114114

115115
const WARNING_PROMPT_DURATION_MS = 1000;
116116
const QUEUE_ERROR_DISPLAY_DURATION_MS = 3000;

packages/cli/src/ui/hooks/useBracketedPaste.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import { useEffect } from 'react';
8-
import { writeToStdout } from '../../utils/stdio.js';
8+
import { writeToStdout } from '@google/gemini-cli-core';
99

1010
const ENABLE_BRACKETED_PASTE = '\x1b[?2004h';
1111
const DISABLE_BRACKETED_PASTE = '\x1b[?2004l';

packages/cli/src/ui/utils/mouse.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
import { writeToStdout } from '../../utils/stdio.js';
7+
import { writeToStdout } from '@google/gemini-cli-core';
88
import {
99
SGR_MOUSE_REGEX,
1010
X11_MOUSE_REGEX,

packages/core/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,6 @@ export * from './test-utils/index.js';
144144

145145
// Export hook types
146146
export * from './hooks/types.js';
147+
148+
// Export stdio utils
149+
export * from './utils/stdio.js';
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
88
import { patchStdio, createInkStdio } from './stdio.js';
9-
import { coreEvents } from '@google/gemini-cli-core';
9+
import { coreEvents } from './events.js';
1010

11-
vi.mock('@google/gemini-cli-core', () => ({
11+
vi.mock('./events.js', () => ({
1212
coreEvents: {
1313
emitOutput: vi.fn(),
1414
},
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* SPDX-License-Identifier: Apache-2.0
55
*/
66

7-
import { coreEvents } from '@google/gemini-cli-core';
7+
import { coreEvents } from './events.js';
88

99
// Capture the original stdout and stderr write methods before any monkey patching occurs.
1010
const originalStdoutWrite = process.stdout.write.bind(process.stdout);

0 commit comments

Comments
 (0)