@google/gemini-cli 0.1.9-nightly.250708.a4097ae6 → 0.1.9-nightly.250710.da50a1ee

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.
Files changed (97) hide show
  1. package/dist/google-gemini-cli-0.1.9.tgz +0 -0
  2. package/dist/package.json +6 -6
  3. package/dist/src/config/auth.js +3 -3
  4. package/dist/src/config/auth.js.map +1 -1
  5. package/dist/src/config/config.js +51 -13
  6. package/dist/src/config/config.js.map +1 -1
  7. package/dist/src/config/extension.d.ts +1 -0
  8. package/dist/src/config/extension.js +34 -6
  9. package/dist/src/config/extension.js.map +1 -1
  10. package/dist/src/config/sandboxConfig.d.ts +1 -1
  11. package/dist/src/config/sandboxConfig.js +1 -1
  12. package/dist/src/config/sandboxConfig.js.map +1 -1
  13. package/dist/src/config/settings.d.ts +5 -2
  14. package/dist/src/config/settings.js +38 -2
  15. package/dist/src/config/settings.js.map +1 -1
  16. package/dist/src/gemini.js +18 -8
  17. package/dist/src/gemini.js.map +1 -1
  18. package/dist/src/generated/git-commit.d.ts +1 -1
  19. package/dist/src/generated/git-commit.js +1 -1
  20. package/dist/src/nonInteractiveCli.d.ts +1 -1
  21. package/dist/src/nonInteractiveCli.js +4 -2
  22. package/dist/src/nonInteractiveCli.js.map +1 -1
  23. package/dist/src/ui/App.js +62 -7
  24. package/dist/src/ui/App.js.map +1 -1
  25. package/dist/src/ui/components/AuthDialog.js +15 -6
  26. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  27. package/dist/src/ui/components/LoadingIndicator.js +2 -1
  28. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  29. package/dist/src/ui/components/ThemeDialog.js +10 -9
  30. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  31. package/dist/src/ui/contexts/SessionContext.d.ts +3 -0
  32. package/dist/src/ui/contexts/SessionContext.js +12 -2
  33. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  34. package/dist/src/ui/hooks/slashCommandProcessor.js +28 -1
  35. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  36. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -2
  37. package/dist/src/ui/hooks/useGeminiStream.js +33 -10
  38. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  39. package/dist/src/ui/utils/errorParsing.d.ts +2 -10
  40. package/dist/src/ui/utils/errorParsing.js +34 -23
  41. package/dist/src/ui/utils/errorParsing.js.map +1 -1
  42. package/dist/tsconfig.tsbuildinfo +1 -1
  43. package/package.json +7 -7
  44. package/dist/src/gemini.test.d.ts +0 -6
  45. package/dist/src/gemini.test.js +0 -122
  46. package/dist/src/gemini.test.js.map +0 -1
  47. package/dist/src/test-utils/mockCommandContext.d.ts +0 -18
  48. package/dist/src/test-utils/mockCommandContext.js +0 -75
  49. package/dist/src/test-utils/mockCommandContext.js.map +0 -1
  50. package/dist/src/ui/App.test.d.ts +0 -6
  51. package/dist/src/ui/App.test.js +0 -300
  52. package/dist/src/ui/App.test.js.map +0 -1
  53. package/dist/src/ui/components/AuthDialog.test.d.ts +0 -6
  54. package/dist/src/ui/components/AuthDialog.test.js +0 -86
  55. package/dist/src/ui/components/AuthDialog.test.js.map +0 -1
  56. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +0 -6
  57. package/dist/src/ui/components/HistoryItemDisplay.test.js +0 -81
  58. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +0 -1
  59. package/dist/src/ui/components/InputPrompt.test.d.ts +0 -6
  60. package/dist/src/ui/components/InputPrompt.test.js +0 -334
  61. package/dist/src/ui/components/InputPrompt.test.js.map +0 -1
  62. package/dist/src/ui/components/LoadingIndicator.test.d.ts +0 -6
  63. package/dist/src/ui/components/LoadingIndicator.test.js +0 -141
  64. package/dist/src/ui/components/LoadingIndicator.test.js.map +0 -1
  65. package/dist/src/ui/components/ModelStatsDisplay.test.d.ts +0 -6
  66. package/dist/src/ui/components/ModelStatsDisplay.test.js +0 -217
  67. package/dist/src/ui/components/ModelStatsDisplay.test.js.map +0 -1
  68. package/dist/src/ui/components/SessionSummaryDisplay.test.d.ts +0 -6
  69. package/dist/src/ui/components/SessionSummaryDisplay.test.js +0 -60
  70. package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +0 -1
  71. package/dist/src/ui/components/StatsDisplay.test.d.ts +0 -6
  72. package/dist/src/ui/components/StatsDisplay.test.js +0 -275
  73. package/dist/src/ui/components/StatsDisplay.test.js.map +0 -1
  74. package/dist/src/ui/components/ToolStatsDisplay.test.d.ts +0 -6
  75. package/dist/src/ui/components/ToolStatsDisplay.test.js +0 -160
  76. package/dist/src/ui/components/ToolStatsDisplay.test.js.map +0 -1
  77. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +0 -6
  78. package/dist/src/ui/components/messages/DiffRenderer.test.js +0 -239
  79. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +0 -1
  80. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +0 -6
  81. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +0 -37
  82. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +0 -1
  83. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +0 -6
  84. package/dist/src/ui/components/messages/ToolMessage.test.js +0 -116
  85. package/dist/src/ui/components/messages/ToolMessage.test.js.map +0 -1
  86. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +0 -6
  87. package/dist/src/ui/components/shared/MaxSizedBox.test.js +0 -134
  88. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +0 -1
  89. package/dist/src/ui/contexts/SessionContext.test.d.ts +0 -6
  90. package/dist/src/ui/contexts/SessionContext.test.js +0 -96
  91. package/dist/src/ui/contexts/SessionContext.test.js.map +0 -1
  92. package/dist/src/ui/hooks/useGeminiStream.test.d.ts +0 -6
  93. package/dist/src/ui/hooks/useGeminiStream.test.js +0 -838
  94. package/dist/src/ui/hooks/useGeminiStream.test.js.map +0 -1
  95. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +0 -6
  96. package/dist/src/ui/utils/MarkdownDisplay.test.js +0 -211
  97. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google/gemini-cli",
3
- "version": "0.1.9-nightly.250708.a4097ae6",
3
+ "version": "0.1.9-nightly.250710.da50a1ee",
4
4
  "description": "Gemini CLI",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,15 +25,15 @@
25
25
  "dist"
26
26
  ],
27
27
  "config": {
28
- "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.1.9-nightly.250708.a4097ae6"
28
+ "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.1.9-nightly.250710.da50a1ee"
29
29
  },
30
30
  "dependencies": {
31
- "@google/gemini-cli-core": "0.1.9-nightly.250707.d1c0a211",
31
+ "@google/gemini-cli-core": "0.1.9-nightly.250710.da50a1ee",
32
32
  "@types/update-notifier": "^6.0.8",
33
33
  "command-exists": "^1.2.9",
34
34
  "diff": "^7.0.0",
35
- "dotenv": "^16.6.1",
36
- "gaxios": "^6.1.1",
35
+ "dotenv": "^17.1.0",
36
+ "gaxios": "^7.1.1",
37
37
  "glob": "^10.4.1",
38
38
  "highlight.js": "^11.11.1",
39
39
  "ink": "^6.0.1",
@@ -44,11 +44,11 @@
44
44
  "ink-spinner": "^5.0.0",
45
45
  "ink-text-input": "^6.0.0",
46
46
  "lowlight": "^3.3.0",
47
- "mime-types": "^2.1.4",
47
+ "mime-types": "^3.0.1",
48
48
  "open": "^10.1.2",
49
49
  "react": "^19.1.0",
50
50
  "read-package-up": "^11.0.0",
51
- "shell-quote": "^1.8.2",
51
+ "shell-quote": "^1.8.3",
52
52
  "string-width": "^7.1.0",
53
53
  "strip-ansi": "^7.1.0",
54
54
  "strip-json-comments": "^3.1.1",
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,122 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import stripAnsi from 'strip-ansi';
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- import { main } from './gemini.js';
9
- import { LoadedSettings, loadSettings, } from './config/settings.js';
10
- // Custom error to identify mock process.exit calls
11
- class MockProcessExitError extends Error {
12
- code;
13
- constructor(code) {
14
- super('PROCESS_EXIT_MOCKED');
15
- this.code = code;
16
- this.name = 'MockProcessExitError';
17
- }
18
- }
19
- // Mock dependencies
20
- vi.mock('./config/settings.js', async (importOriginal) => {
21
- const actual = await importOriginal();
22
- return {
23
- ...actual,
24
- loadSettings: vi.fn(),
25
- };
26
- });
27
- vi.mock('./config/config.js', () => ({
28
- loadCliConfig: vi.fn().mockResolvedValue({
29
- config: {
30
- getSandbox: vi.fn(() => false),
31
- getQuestion: vi.fn(() => ''),
32
- },
33
- modelWasSwitched: false,
34
- originalModelBeforeSwitch: null,
35
- finalModel: 'test-model',
36
- }),
37
- }));
38
- vi.mock('read-package-up', () => ({
39
- readPackageUp: vi.fn().mockResolvedValue({
40
- packageJson: { name: 'test-pkg', version: 'test-version' },
41
- path: '/fake/path/package.json',
42
- }),
43
- }));
44
- vi.mock('update-notifier', () => ({
45
- default: vi.fn(() => ({
46
- notify: vi.fn(),
47
- })),
48
- }));
49
- vi.mock('./utils/sandbox.js', () => ({
50
- sandbox_command: vi.fn(() => ''), // Default to no sandbox command
51
- start_sandbox: vi.fn(() => Promise.resolve()), // Mock as an async function that resolves
52
- }));
53
- describe('gemini.tsx main function', () => {
54
- let consoleErrorSpy;
55
- let loadSettingsMock;
56
- let originalEnvGeminiSandbox;
57
- let originalEnvSandbox;
58
- const processExitSpy = vi
59
- .spyOn(process, 'exit')
60
- .mockImplementation((code) => {
61
- throw new MockProcessExitError(code);
62
- });
63
- beforeEach(() => {
64
- loadSettingsMock = vi.mocked(loadSettings);
65
- // Store and clear sandbox-related env variables to ensure a consistent test environment
66
- originalEnvGeminiSandbox = process.env.GEMINI_SANDBOX;
67
- originalEnvSandbox = process.env.SANDBOX;
68
- delete process.env.GEMINI_SANDBOX;
69
- delete process.env.SANDBOX;
70
- consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
71
- });
72
- afterEach(() => {
73
- // Restore original env variables
74
- if (originalEnvGeminiSandbox !== undefined) {
75
- process.env.GEMINI_SANDBOX = originalEnvGeminiSandbox;
76
- }
77
- else {
78
- delete process.env.GEMINI_SANDBOX;
79
- }
80
- if (originalEnvSandbox !== undefined) {
81
- process.env.SANDBOX = originalEnvSandbox;
82
- }
83
- else {
84
- delete process.env.SANDBOX;
85
- }
86
- vi.restoreAllMocks();
87
- });
88
- it('should call process.exit(1) if settings have errors', async () => {
89
- const settingsError = {
90
- message: 'Test settings error',
91
- path: '/test/settings.json',
92
- };
93
- const userSettingsFile = {
94
- path: '/user/settings.json',
95
- settings: {},
96
- };
97
- const workspaceSettingsFile = {
98
- path: '/workspace/.gemini/settings.json',
99
- settings: {},
100
- };
101
- const mockLoadedSettings = new LoadedSettings(userSettingsFile, workspaceSettingsFile, [settingsError]);
102
- loadSettingsMock.mockReturnValue(mockLoadedSettings);
103
- try {
104
- await main();
105
- // If main completes without throwing, the test should fail because process.exit was expected
106
- expect.fail('main function did not exit as expected');
107
- }
108
- catch (error) {
109
- expect(error).toBeInstanceOf(MockProcessExitError);
110
- if (error instanceof MockProcessExitError) {
111
- expect(error.code).toBe(1);
112
- }
113
- }
114
- // Verify console.error was called with the error message
115
- expect(consoleErrorSpy).toHaveBeenCalledTimes(2);
116
- expect(stripAnsi(String(consoleErrorSpy.mock.calls[0][0]))).toBe('Error in /test/settings.json: Test settings error');
117
- expect(stripAnsi(String(consoleErrorSpy.mock.calls[1][0]))).toBe('Please fix /test/settings.json and try again.');
118
- // Verify process.exit was called (indirectly, via the thrown error)
119
- expect(processExitSpy).toHaveBeenCalledWith(1);
120
- });
121
- });
122
- //# sourceMappingURL=gemini.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gemini.test.js","sourceRoot":"","sources":["../../src/gemini.test.tsx"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { CommandContext } from '../ui/commands/types.js';
7
- type DeepPartial<T> = T extends object ? {
8
- [P in keyof T]?: DeepPartial<T[P]>;
9
- } : T;
10
- /**
11
- * Creates a deep, fully-typed mock of the CommandContext for use in tests.
12
- * All functions are pre-mocked with `vi.fn()`.
13
- *
14
- * @param overrides - A deep partial object to override any default mock values.
15
- * @returns A complete, mocked CommandContext object.
16
- */
17
- export declare const createMockCommandContext: (overrides?: DeepPartial<CommandContext>) => CommandContext;
18
- export {};
@@ -1,75 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { vi } from 'vitest';
7
- /**
8
- * Creates a deep, fully-typed mock of the CommandContext for use in tests.
9
- * All functions are pre-mocked with `vi.fn()`.
10
- *
11
- * @param overrides - A deep partial object to override any default mock values.
12
- * @returns A complete, mocked CommandContext object.
13
- */
14
- export const createMockCommandContext = (overrides = {}) => {
15
- const defaultMocks = {
16
- services: {
17
- config: null,
18
- settings: { merged: {} },
19
- git: undefined,
20
- logger: {
21
- log: vi.fn(),
22
- logMessage: vi.fn(),
23
- saveCheckpoint: vi.fn(),
24
- loadCheckpoint: vi.fn().mockResolvedValue([]),
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- }, // Cast because Logger is a class.
27
- },
28
- ui: {
29
- addItem: vi.fn(),
30
- clear: vi.fn(),
31
- setDebugMessage: vi.fn(),
32
- },
33
- session: {
34
- stats: {
35
- sessionStartTime: new Date(),
36
- lastPromptTokenCount: 0,
37
- metrics: {
38
- models: {},
39
- tools: {
40
- totalCalls: 0,
41
- totalSuccess: 0,
42
- totalFail: 0,
43
- totalDurationMs: 0,
44
- totalDecisions: { accept: 0, reject: 0, modify: 0 },
45
- byName: {},
46
- },
47
- },
48
- },
49
- },
50
- };
51
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
- const merge = (target, source) => {
53
- const output = { ...target };
54
- for (const key in source) {
55
- if (Object.prototype.hasOwnProperty.call(source, key)) {
56
- const sourceValue = source[key];
57
- const targetValue = output[key];
58
- if (sourceValue &&
59
- typeof sourceValue === 'object' &&
60
- !Array.isArray(sourceValue) &&
61
- targetValue &&
62
- typeof targetValue === 'object' &&
63
- !Array.isArray(targetValue)) {
64
- output[key] = merge(targetValue, sourceValue);
65
- }
66
- else {
67
- output[key] = sourceValue;
68
- }
69
- }
70
- }
71
- return output;
72
- };
73
- return merge(defaultMocks, overrides);
74
- };
75
- //# sourceMappingURL=mockCommandContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mockCommandContext.js","sourceRoot":"","sources":["../../../src/test-utils/mockCommandContext.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAa5B;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,YAAyC,EAAE,EAC3B,EAAE;IAClB,MAAM,YAAY,GAAmB;QACnC,QAAQ,EAAE;YACR,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,EAAoB;YAC1C,GAAG,EAAE,SAAmC;YACxC,MAAM,EAAE;gBACN,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;gBACnB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;gBACvB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7C,8DAA8D;aACxD,EAAE,kCAAkC;SAC7C;QACD,EAAE,EAAE;YACF,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;YAChB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;YACd,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;SACzB;QACD,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,gBAAgB,EAAE,IAAI,IAAI,EAAE;gBAC5B,oBAAoB,EAAE,CAAC;gBACvB,OAAO,EAAE;oBACP,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE;wBACL,UAAU,EAAE,CAAC;wBACb,YAAY,EAAE,CAAC;wBACf,SAAS,EAAE,CAAC;wBACZ,eAAe,EAAE,CAAC;wBAClB,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;wBACnD,MAAM,EAAE,EAAE;qBACX;iBACF;aACmB;SACvB;KACF,CAAC;IAEF,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,MAAW,EAAE,MAAW,EAAO,EAAE;QAC9C,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAE7B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEhC,IACE,WAAW;oBACX,OAAO,WAAW,KAAK,QAAQ;oBAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC3B,WAAW;oBACX,OAAO,WAAW,KAAK,QAAQ;oBAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAC3B,CAAC;oBACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,300 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- /**
3
- * @license
4
- * Copyright 2025 Google LLC
5
- * SPDX-License-Identifier: Apache-2.0
6
- */
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- import { render } from 'ink-testing-library';
9
- import { AppWrapper as App } from './App.js';
10
- import { Config as ServerConfig, ApprovalMode, } from '@google/gemini-cli-core';
11
- import { LoadedSettings } from '../config/settings.js';
12
- import process from 'node:process';
13
- import { Tips } from './components/Tips.js';
14
- // Mock @google/gemini-cli-core and its Config class
15
- vi.mock('@google/gemini-cli-core', async (importOriginal) => {
16
- const actualCore = await importOriginal();
17
- const ConfigClassMock = vi
18
- .fn()
19
- .mockImplementation((optionsPassedToConstructor) => {
20
- const opts = { ...optionsPassedToConstructor }; // Clone
21
- // Basic mock structure, will be extended by the instance in tests
22
- return {
23
- apiKey: opts.apiKey || 'test-key',
24
- model: opts.model || 'test-model-in-mock-factory',
25
- sandbox: opts.sandbox,
26
- targetDir: opts.targetDir || '/test/dir',
27
- debugMode: opts.debugMode || false,
28
- question: opts.question,
29
- fullContext: opts.fullContext ?? false,
30
- coreTools: opts.coreTools,
31
- toolDiscoveryCommand: opts.toolDiscoveryCommand,
32
- toolCallCommand: opts.toolCallCommand,
33
- mcpServerCommand: opts.mcpServerCommand,
34
- mcpServers: opts.mcpServers,
35
- userAgent: opts.userAgent || 'test-agent',
36
- userMemory: opts.userMemory || '',
37
- geminiMdFileCount: opts.geminiMdFileCount || 0,
38
- approvalMode: opts.approvalMode ?? ApprovalMode.DEFAULT,
39
- vertexai: opts.vertexai,
40
- showMemoryUsage: opts.showMemoryUsage ?? false,
41
- accessibility: opts.accessibility ?? {},
42
- embeddingModel: opts.embeddingModel || 'test-embedding-model',
43
- getApiKey: vi.fn(() => opts.apiKey || 'test-key'),
44
- getModel: vi.fn(() => opts.model || 'test-model-in-mock-factory'),
45
- getSandbox: vi.fn(() => opts.sandbox),
46
- getTargetDir: vi.fn(() => opts.targetDir || '/test/dir'),
47
- getToolRegistry: vi.fn(() => ({})), // Simple mock
48
- getDebugMode: vi.fn(() => opts.debugMode || false),
49
- getQuestion: vi.fn(() => opts.question),
50
- getFullContext: vi.fn(() => opts.fullContext ?? false),
51
- getCoreTools: vi.fn(() => opts.coreTools),
52
- getToolDiscoveryCommand: vi.fn(() => opts.toolDiscoveryCommand),
53
- getToolCallCommand: vi.fn(() => opts.toolCallCommand),
54
- getMcpServerCommand: vi.fn(() => opts.mcpServerCommand),
55
- getMcpServers: vi.fn(() => opts.mcpServers),
56
- getUserAgent: vi.fn(() => opts.userAgent || 'test-agent'),
57
- getUserMemory: vi.fn(() => opts.userMemory || ''),
58
- setUserMemory: vi.fn(),
59
- getGeminiMdFileCount: vi.fn(() => opts.geminiMdFileCount || 0),
60
- setGeminiMdFileCount: vi.fn(),
61
- getApprovalMode: vi.fn(() => opts.approvalMode ?? ApprovalMode.DEFAULT),
62
- setApprovalMode: vi.fn(),
63
- getVertexAI: vi.fn(() => opts.vertexai),
64
- getShowMemoryUsage: vi.fn(() => opts.showMemoryUsage ?? false),
65
- getAccessibility: vi.fn(() => opts.accessibility ?? {}),
66
- getProjectRoot: vi.fn(() => opts.projectRoot),
67
- getGeminiClient: vi.fn(() => ({})),
68
- getCheckpointingEnabled: vi.fn(() => opts.checkpointing ?? true),
69
- getAllGeminiMdFilenames: vi.fn(() => ['GEMINI.md']),
70
- setFlashFallbackHandler: vi.fn(),
71
- getSessionId: vi.fn(() => 'test-session-id'),
72
- };
73
- });
74
- return {
75
- ...actualCore,
76
- Config: ConfigClassMock,
77
- MCPServerConfig: actualCore.MCPServerConfig,
78
- getAllGeminiMdFilenames: vi.fn(() => ['GEMINI.md']),
79
- };
80
- });
81
- // Mock heavy dependencies or those with side effects
82
- vi.mock('./hooks/useGeminiStream', () => ({
83
- useGeminiStream: vi.fn(() => ({
84
- streamingState: 'Idle',
85
- submitQuery: vi.fn(),
86
- initError: null,
87
- pendingHistoryItems: [],
88
- })),
89
- }));
90
- vi.mock('./hooks/useAuthCommand', () => ({
91
- useAuthCommand: vi.fn(() => ({
92
- isAuthDialogOpen: false,
93
- openAuthDialog: vi.fn(),
94
- handleAuthSelect: vi.fn(),
95
- handleAuthHighlight: vi.fn(),
96
- })),
97
- }));
98
- vi.mock('./hooks/useLogger', () => ({
99
- useLogger: vi.fn(() => ({
100
- getPreviousUserMessages: vi.fn().mockResolvedValue([]),
101
- })),
102
- }));
103
- vi.mock('../config/config.js', async (importOriginal) => {
104
- const actual = await importOriginal();
105
- return {
106
- // @ts-expect-error - this is fine
107
- ...actual,
108
- loadHierarchicalGeminiMemory: vi
109
- .fn()
110
- .mockResolvedValue({ memoryContent: '', fileCount: 0 }),
111
- };
112
- });
113
- vi.mock('./components/Tips.js', () => ({
114
- Tips: vi.fn(() => null),
115
- }));
116
- describe('App UI', () => {
117
- let mockConfig;
118
- let mockSettings;
119
- let currentUnmount;
120
- const createMockSettings = (settings = {}) => {
121
- const userSettingsFile = {
122
- path: '/user/settings.json',
123
- settings: {},
124
- };
125
- const workspaceSettingsFile = {
126
- path: '/workspace/.gemini/settings.json',
127
- settings: {
128
- ...settings,
129
- },
130
- };
131
- return new LoadedSettings(userSettingsFile, workspaceSettingsFile, []);
132
- };
133
- beforeEach(() => {
134
- const ServerConfigMocked = vi.mocked(ServerConfig, true);
135
- mockConfig = new ServerConfigMocked({
136
- embeddingModel: 'test-embedding-model',
137
- sandbox: undefined,
138
- targetDir: '/test/dir',
139
- debugMode: false,
140
- userMemory: '',
141
- geminiMdFileCount: 0,
142
- showMemoryUsage: false,
143
- sessionId: 'test-session-id',
144
- cwd: '/tmp',
145
- model: 'model',
146
- });
147
- // Ensure the getShowMemoryUsage mock function is specifically set up if not covered by constructor mock
148
- if (!mockConfig.getShowMemoryUsage) {
149
- mockConfig.getShowMemoryUsage = vi.fn(() => false);
150
- }
151
- mockConfig.getShowMemoryUsage.mockReturnValue(false); // Default for most tests
152
- // Ensure a theme is set so the theme dialog does not appear.
153
- mockSettings = createMockSettings({ theme: 'Default' });
154
- });
155
- afterEach(() => {
156
- if (currentUnmount) {
157
- currentUnmount();
158
- currentUnmount = undefined;
159
- }
160
- vi.clearAllMocks(); // Clear mocks after each test
161
- });
162
- it('should display default "GEMINI.md" in footer when contextFileName is not set and count is 1', async () => {
163
- mockConfig.getGeminiMdFileCount.mockReturnValue(1);
164
- // For this test, ensure showMemoryUsage is false or debugMode is false if it relies on that
165
- mockConfig.getDebugMode.mockReturnValue(false);
166
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
167
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
168
- currentUnmount = unmount;
169
- await Promise.resolve(); // Wait for any async updates
170
- expect(lastFrame()).toContain('Using 1 GEMINI.md file');
171
- });
172
- it('should display default "GEMINI.md" with plural when contextFileName is not set and count is > 1', async () => {
173
- mockConfig.getGeminiMdFileCount.mockReturnValue(2);
174
- mockConfig.getDebugMode.mockReturnValue(false);
175
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
176
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
177
- currentUnmount = unmount;
178
- await Promise.resolve();
179
- expect(lastFrame()).toContain('Using 2 GEMINI.md files');
180
- });
181
- it('should display custom contextFileName in footer when set and count is 1', async () => {
182
- mockSettings = createMockSettings({
183
- contextFileName: 'AGENTS.md',
184
- theme: 'Default',
185
- });
186
- mockConfig.getGeminiMdFileCount.mockReturnValue(1);
187
- mockConfig.getDebugMode.mockReturnValue(false);
188
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
189
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
190
- currentUnmount = unmount;
191
- await Promise.resolve();
192
- expect(lastFrame()).toContain('Using 1 AGENTS.md file');
193
- });
194
- it('should display a generic message when multiple context files with different names are provided', async () => {
195
- mockSettings = createMockSettings({
196
- contextFileName: ['AGENTS.md', 'CONTEXT.md'],
197
- theme: 'Default',
198
- });
199
- mockConfig.getGeminiMdFileCount.mockReturnValue(2);
200
- mockConfig.getDebugMode.mockReturnValue(false);
201
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
202
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
203
- currentUnmount = unmount;
204
- await Promise.resolve();
205
- expect(lastFrame()).toContain('Using 2 context files');
206
- });
207
- it('should display custom contextFileName with plural when set and count is > 1', async () => {
208
- mockSettings = createMockSettings({
209
- contextFileName: 'MY_NOTES.TXT',
210
- theme: 'Default',
211
- });
212
- mockConfig.getGeminiMdFileCount.mockReturnValue(3);
213
- mockConfig.getDebugMode.mockReturnValue(false);
214
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
215
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
216
- currentUnmount = unmount;
217
- await Promise.resolve();
218
- expect(lastFrame()).toContain('Using 3 MY_NOTES.TXT files');
219
- });
220
- it('should not display context file message if count is 0, even if contextFileName is set', async () => {
221
- mockSettings = createMockSettings({
222
- contextFileName: 'ANY_FILE.MD',
223
- theme: 'Default',
224
- });
225
- mockConfig.getGeminiMdFileCount.mockReturnValue(0);
226
- mockConfig.getDebugMode.mockReturnValue(false);
227
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
228
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
229
- currentUnmount = unmount;
230
- await Promise.resolve();
231
- expect(lastFrame()).not.toContain('ANY_FILE.MD');
232
- });
233
- it('should display GEMINI.md and MCP server count when both are present', async () => {
234
- mockConfig.getGeminiMdFileCount.mockReturnValue(2);
235
- mockConfig.getMcpServers.mockReturnValue({
236
- server1: {},
237
- });
238
- mockConfig.getDebugMode.mockReturnValue(false);
239
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
240
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
241
- currentUnmount = unmount;
242
- await Promise.resolve();
243
- expect(lastFrame()).toContain('server');
244
- });
245
- it('should display only MCP server count when GEMINI.md count is 0', async () => {
246
- mockConfig.getGeminiMdFileCount.mockReturnValue(0);
247
- mockConfig.getMcpServers.mockReturnValue({
248
- server1: {},
249
- server2: {},
250
- });
251
- mockConfig.getDebugMode.mockReturnValue(false);
252
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
253
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
254
- currentUnmount = unmount;
255
- await Promise.resolve();
256
- expect(lastFrame()).toContain('Using 2 MCP servers');
257
- });
258
- it('should display Tips component by default', async () => {
259
- const { unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
260
- currentUnmount = unmount;
261
- await Promise.resolve();
262
- expect(vi.mocked(Tips)).toHaveBeenCalled();
263
- });
264
- it('should not display Tips component when hideTips is true', async () => {
265
- mockSettings = createMockSettings({
266
- hideTips: true,
267
- });
268
- const { unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
269
- currentUnmount = unmount;
270
- await Promise.resolve();
271
- expect(vi.mocked(Tips)).not.toHaveBeenCalled();
272
- });
273
- describe('when no theme is set', () => {
274
- let originalNoColor;
275
- beforeEach(() => {
276
- originalNoColor = process.env.NO_COLOR;
277
- // Ensure no theme is set for these tests
278
- mockSettings = createMockSettings({});
279
- mockConfig.getDebugMode.mockReturnValue(false);
280
- mockConfig.getShowMemoryUsage.mockReturnValue(false);
281
- });
282
- afterEach(() => {
283
- process.env.NO_COLOR = originalNoColor;
284
- });
285
- it('should display theme dialog if NO_COLOR is not set', async () => {
286
- delete process.env.NO_COLOR;
287
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
288
- currentUnmount = unmount;
289
- expect(lastFrame()).toContain('Select Theme');
290
- });
291
- it('should display a message if NO_COLOR is set', async () => {
292
- process.env.NO_COLOR = 'true';
293
- const { lastFrame, unmount } = render(_jsx(App, { config: mockConfig, settings: mockSettings }));
294
- currentUnmount = unmount;
295
- expect(lastFrame()).toContain('Theme configuration unavailable due to NO_COLOR env variable.');
296
- expect(lastFrame()).not.toContain('Select Theme');
297
- });
298
- });
299
- });
300
- //# sourceMappingURL=App.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"App.test.js","sourceRoot":"","sources":["../../../src/ui/App.test.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};