@google/gemini-cli-core 0.18.3 → 0.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { coreEvents } from './events.js';
7
+ // Capture the original stdout and stderr write methods before any monkey patching occurs.
8
+ const originalStdoutWrite = process.stdout.write.bind(process.stdout);
9
+ const originalStderrWrite = process.stderr.write.bind(process.stderr);
10
+ /**
11
+ * Writes to the real stdout, bypassing any monkey patching on process.stdout.write.
12
+ */
13
+ export function writeToStdout(...args) {
14
+ return originalStdoutWrite(...args);
15
+ }
16
+ /**
17
+ * Writes to the real stderr, bypassing any monkey patching on process.stderr.write.
18
+ */
19
+ export function writeToStderr(...args) {
20
+ return originalStderrWrite(...args);
21
+ }
22
+ /**
23
+ * Monkey patches process.stdout.write and process.stderr.write to redirect output to the provided logger.
24
+ * This prevents stray output from libraries (or the app itself) from corrupting the UI.
25
+ * Returns a cleanup function that restores the original write methods.
26
+ */
27
+ export function patchStdio() {
28
+ const previousStdoutWrite = process.stdout.write;
29
+ const previousStderrWrite = process.stderr.write;
30
+ process.stdout.write = (chunk, encodingOrCb, cb) => {
31
+ const encoding = typeof encodingOrCb === 'string' ? encodingOrCb : undefined;
32
+ coreEvents.emitOutput(false, chunk, encoding);
33
+ const callback = typeof encodingOrCb === 'function' ? encodingOrCb : cb;
34
+ if (callback) {
35
+ callback();
36
+ }
37
+ return true;
38
+ };
39
+ process.stderr.write = (chunk, encodingOrCb, cb) => {
40
+ const encoding = typeof encodingOrCb === 'string' ? encodingOrCb : undefined;
41
+ coreEvents.emitOutput(true, chunk, encoding);
42
+ const callback = typeof encodingOrCb === 'function' ? encodingOrCb : cb;
43
+ if (callback) {
44
+ callback();
45
+ }
46
+ return true;
47
+ };
48
+ return () => {
49
+ process.stdout.write = previousStdoutWrite;
50
+ process.stderr.write = previousStderrWrite;
51
+ };
52
+ }
53
+ /**
54
+ * Creates proxies for process.stdout and process.stderr that use the real write methods
55
+ * (writeToStdout and writeToStderr) bypassing any monkey patching.
56
+ * This is used by Ink to render to the real output.
57
+ */
58
+ export function createInkStdio() {
59
+ const inkStdout = new Proxy(process.stdout, {
60
+ get(target, prop, receiver) {
61
+ if (prop === 'write') {
62
+ return writeToStdout;
63
+ }
64
+ const value = Reflect.get(target, prop, receiver);
65
+ if (typeof value === 'function') {
66
+ return value.bind(target);
67
+ }
68
+ return value;
69
+ },
70
+ });
71
+ const inkStderr = new Proxy(process.stderr, {
72
+ get(target, prop, receiver) {
73
+ if (prop === 'write') {
74
+ return writeToStderr;
75
+ }
76
+ const value = Reflect.get(target, prop, receiver);
77
+ if (typeof value === 'function') {
78
+ return value.bind(target);
79
+ }
80
+ return value;
81
+ },
82
+ });
83
+ return { stdout: inkStdout, stderr: inkStderr };
84
+ }
85
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../../src/utils/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
7
+ import { patchStdio, createInkStdio } from './stdio.js';
8
+ import { coreEvents } from './events.js';
9
+ vi.mock('./events.js', () => ({
10
+ coreEvents: {
11
+ emitOutput: vi.fn(),
12
+ },
13
+ }));
14
+ describe('stdio utils', () => {
15
+ let originalStdoutWrite;
16
+ let originalStderrWrite;
17
+ beforeEach(() => {
18
+ originalStdoutWrite = process.stdout.write;
19
+ originalStderrWrite = process.stderr.write;
20
+ });
21
+ afterEach(() => {
22
+ process.stdout.write = originalStdoutWrite;
23
+ process.stderr.write = originalStderrWrite;
24
+ vi.restoreAllMocks();
25
+ });
26
+ it('patchStdio redirects stdout and stderr to coreEvents', () => {
27
+ const cleanup = patchStdio();
28
+ process.stdout.write('test stdout');
29
+ expect(coreEvents.emitOutput).toHaveBeenCalledWith(false, 'test stdout', undefined);
30
+ process.stderr.write('test stderr');
31
+ expect(coreEvents.emitOutput).toHaveBeenCalledWith(true, 'test stderr', undefined);
32
+ cleanup();
33
+ // Verify cleanup
34
+ expect(process.stdout.write).toBe(originalStdoutWrite);
35
+ expect(process.stderr.write).toBe(originalStderrWrite);
36
+ });
37
+ it('createInkStdio writes to real stdout/stderr bypassing patch', () => {
38
+ const cleanup = patchStdio();
39
+ const { stdout: inkStdout, stderr: inkStderr } = createInkStdio();
40
+ inkStdout.write('ink stdout');
41
+ expect(coreEvents.emitOutput).not.toHaveBeenCalled();
42
+ inkStderr.write('ink stderr');
43
+ expect(coreEvents.emitOutput).not.toHaveBeenCalled();
44
+ cleanup();
45
+ });
46
+ });
47
+ //# sourceMappingURL=stdio.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.test.js","sourceRoot":"","sources":["../../../src/utils/stdio.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,UAAU,EAAE;QACV,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;KACpB;CACF,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,mBAAgD,CAAC;IACrD,IAAI,mBAAgD,CAAC;IAErD,UAAU,CAAC,GAAG,EAAE;QACd,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3C,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAAC;QAC3C,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAE7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAChD,KAAK,EACL,aAAa,EACb,SAAS,CACV,CAAC;QAEF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAChD,IAAI,EACJ,aAAa,EACb,SAAS,CACV,CAAC;QAEF,OAAO,EAAE,CAAC;QAEV,iBAAiB;QACjB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;QAElE,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9B,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAErD,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9B,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAErD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function enableMouseEvents(): void;
7
+ export declare function disableMouseEvents(): void;
8
+ export declare function enableKittyKeyboardProtocol(): void;
9
+ export declare function disableKittyKeyboardProtocol(): void;
10
+ export declare function enableLineWrapping(): void;
11
+ export declare function disableLineWrapping(): void;
12
+ export declare function enterAlternateScreen(): void;
13
+ export declare function exitAlternateScreen(): void;
14
+ export declare function shouldEnterAlternateScreen(useAlternateBuffer: boolean, isScreenReader: boolean): boolean;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { writeToStdout } from './stdio.js';
7
+ export function enableMouseEvents() {
8
+ // Enable mouse tracking with SGR format
9
+ // ?1002h = button event tracking (clicks + drags + scroll wheel)
10
+ // ?1006h = SGR extended mouse mode (better coordinate handling)
11
+ writeToStdout('\u001b[?1002h\u001b[?1006h');
12
+ }
13
+ export function disableMouseEvents() {
14
+ // Disable mouse tracking with SGR format
15
+ writeToStdout('\u001b[?1006l\u001b[?1002l');
16
+ }
17
+ export function enableKittyKeyboardProtocol() {
18
+ writeToStdout('\x1b[>1u');
19
+ }
20
+ export function disableKittyKeyboardProtocol() {
21
+ writeToStdout('\x1b[<u');
22
+ }
23
+ export function enableLineWrapping() {
24
+ writeToStdout('\x1b[?7h');
25
+ }
26
+ export function disableLineWrapping() {
27
+ writeToStdout('\x1b[?7l');
28
+ }
29
+ export function enterAlternateScreen() {
30
+ writeToStdout('\x1b[?1049h');
31
+ }
32
+ export function exitAlternateScreen() {
33
+ writeToStdout('\x1b[?1049l');
34
+ }
35
+ export function shouldEnterAlternateScreen(useAlternateBuffer, isScreenReader) {
36
+ return useAlternateBuffer && !isScreenReader;
37
+ }
38
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../../src/utils/terminal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,UAAU,iBAAiB;IAC/B,wCAAwC;IACxC,iEAAiE;IACjE,gEAAgE;IAChE,aAAa,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,yCAAyC;IACzC,aAAa,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,aAAa,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,aAAa,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,aAAa,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,aAAa,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,aAAa,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,aAAa,CAAC,aAAa,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,kBAA2B,EAC3B,cAAuB;IAEvB,OAAO,kBAAkB,IAAI,CAAC,cAAc,CAAC;AAC/C,CAAC"}