@google/gemini-cli 0.1.13 → 0.1.14

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 (176) hide show
  1. package/README.md +22 -1
  2. package/dist/google-gemini-cli-0.1.13.tgz +0 -0
  3. package/dist/package.json +6 -3
  4. package/dist/src/config/config.d.ts +3 -2
  5. package/dist/src/config/config.js +19 -29
  6. package/dist/src/config/config.js.map +1 -1
  7. package/dist/src/config/settings.d.ts +6 -2
  8. package/dist/src/config/settings.js +25 -10
  9. package/dist/src/config/settings.js.map +1 -1
  10. package/dist/src/gemini.js +7 -21
  11. package/dist/src/gemini.js.map +1 -1
  12. package/dist/src/generated/git-commit.d.ts +1 -1
  13. package/dist/src/generated/git-commit.js +1 -1
  14. package/dist/src/patches/is-in-ci.d.ts +7 -0
  15. package/dist/src/patches/is-in-ci.js +15 -0
  16. package/dist/src/patches/is-in-ci.js.map +1 -0
  17. package/dist/src/services/BuiltinCommandLoader.d.ts +24 -0
  18. package/dist/src/services/BuiltinCommandLoader.js +70 -0
  19. package/dist/src/services/BuiltinCommandLoader.js.map +1 -0
  20. package/dist/src/services/CommandService.d.ts +43 -7
  21. package/dist/src/services/CommandService.js +61 -56
  22. package/dist/src/services/CommandService.js.map +1 -1
  23. package/dist/src/services/FileCommandLoader.d.ts +37 -0
  24. package/dist/src/services/FileCommandLoader.js +156 -0
  25. package/dist/src/services/FileCommandLoader.js.map +1 -0
  26. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +21 -0
  27. package/dist/src/services/prompt-processors/argumentProcessor.js +28 -0
  28. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  29. package/dist/src/services/prompt-processors/types.d.ts +34 -0
  30. package/dist/src/services/prompt-processors/types.js +10 -0
  31. package/dist/src/services/prompt-processors/types.js.map +1 -0
  32. package/dist/src/services/types.d.ts +22 -0
  33. package/dist/src/services/types.js +7 -0
  34. package/dist/src/services/types.js.map +1 -0
  35. package/dist/src/ui/App.js +15 -25
  36. package/dist/src/ui/App.js.map +1 -1
  37. package/dist/src/ui/colors.js +6 -0
  38. package/dist/src/ui/colors.js.map +1 -1
  39. package/dist/src/ui/commands/aboutCommand.js +2 -0
  40. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  41. package/dist/src/ui/commands/authCommand.js +2 -0
  42. package/dist/src/ui/commands/authCommand.js.map +1 -1
  43. package/dist/src/ui/commands/bugCommand.js +2 -0
  44. package/dist/src/ui/commands/bugCommand.js.map +1 -1
  45. package/dist/src/ui/commands/chatCommand.js +12 -2
  46. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  47. package/dist/src/ui/commands/clearCommand.js +2 -0
  48. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  49. package/dist/src/ui/commands/compressCommand.js +3 -1
  50. package/dist/src/ui/commands/compressCommand.js.map +1 -1
  51. package/dist/src/ui/commands/copyCommand.d.ts +7 -0
  52. package/dist/src/ui/commands/copyCommand.js +59 -0
  53. package/dist/src/ui/commands/copyCommand.js.map +1 -0
  54. package/dist/src/ui/commands/corgiCommand.js +2 -0
  55. package/dist/src/ui/commands/corgiCommand.js.map +1 -1
  56. package/dist/src/ui/commands/docsCommand.js +2 -0
  57. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  58. package/dist/src/ui/commands/editorCommand.js +2 -0
  59. package/dist/src/ui/commands/editorCommand.js.map +1 -1
  60. package/dist/src/ui/commands/extensionsCommand.js +2 -0
  61. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  62. package/dist/src/ui/commands/helpCommand.js +3 -1
  63. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  64. package/dist/src/ui/commands/ideCommand.js +20 -22
  65. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  66. package/dist/src/ui/commands/mcpCommand.js +181 -5
  67. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  68. package/dist/src/ui/commands/memoryCommand.js +11 -4
  69. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  70. package/dist/src/ui/commands/privacyCommand.js +2 -0
  71. package/dist/src/ui/commands/privacyCommand.js.map +1 -1
  72. package/dist/src/ui/commands/quitCommand.js +3 -1
  73. package/dist/src/ui/commands/quitCommand.js.map +1 -1
  74. package/dist/src/ui/commands/restoreCommand.js +2 -0
  75. package/dist/src/ui/commands/restoreCommand.js.map +1 -1
  76. package/dist/src/ui/commands/statsCommand.js +5 -1
  77. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  78. package/dist/src/ui/commands/themeCommand.js +2 -0
  79. package/dist/src/ui/commands/themeCommand.js.map +1 -1
  80. package/dist/src/ui/commands/toolsCommand.js +2 -0
  81. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  82. package/dist/src/ui/commands/types.d.ts +24 -3
  83. package/dist/src/ui/commands/types.js +5 -1
  84. package/dist/src/ui/commands/types.js.map +1 -1
  85. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +2 -2
  86. package/dist/src/ui/components/ContextSummaryDisplay.js +12 -12
  87. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
  88. package/dist/src/ui/components/Footer.js +1 -1
  89. package/dist/src/ui/components/Help.d.ts +1 -1
  90. package/dist/src/ui/components/IDEContextDetailDisplay.d.ts +11 -0
  91. package/dist/src/ui/components/IDEContextDetailDisplay.js +19 -0
  92. package/dist/src/ui/components/IDEContextDetailDisplay.js.map +1 -0
  93. package/dist/src/ui/components/InputPrompt.d.ts +1 -1
  94. package/dist/src/ui/components/InputPrompt.js +9 -99
  95. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  96. package/dist/src/ui/components/ThemeDialog.js +42 -17
  97. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  98. package/dist/src/ui/components/messages/DiffRenderer.d.ts +1 -0
  99. package/dist/src/ui/components/messages/DiffRenderer.js +12 -11
  100. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  101. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +5 -4
  102. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  103. package/dist/src/ui/components/shared/text-buffer.d.ts +3 -1
  104. package/dist/src/ui/components/shared/text-buffer.js +10 -9
  105. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  106. package/dist/src/ui/hooks/atCommandProcessor.js +54 -15
  107. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  108. package/dist/src/ui/hooks/shellCommandProcessor.js +22 -8
  109. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  110. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -1
  111. package/dist/src/ui/hooks/slashCommandProcessor.js +40 -10
  112. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  113. package/dist/src/ui/hooks/useAuthCommand.js +2 -2
  114. package/dist/src/ui/hooks/useAuthCommand.js.map +1 -1
  115. package/dist/src/ui/hooks/useCompletion.d.ts +3 -1
  116. package/dist/src/ui/hooks/useCompletion.js +113 -24
  117. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  118. package/dist/src/ui/hooks/useGeminiStream.js +57 -11
  119. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  120. package/dist/src/ui/hooks/useInputHistory.d.ts +1 -1
  121. package/dist/src/ui/hooks/useShellHistory.d.ts +3 -2
  122. package/dist/src/ui/hooks/useShellHistory.js.map +1 -1
  123. package/dist/src/ui/hooks/useThemeCommand.js +24 -23
  124. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  125. package/dist/src/ui/themes/ansi-light.js +2 -0
  126. package/dist/src/ui/themes/ansi-light.js.map +1 -1
  127. package/dist/src/ui/themes/ansi.js +2 -0
  128. package/dist/src/ui/themes/ansi.js.map +1 -1
  129. package/dist/src/ui/themes/atom-one-dark.js +2 -0
  130. package/dist/src/ui/themes/atom-one-dark.js.map +1 -1
  131. package/dist/src/ui/themes/ayu-light.js +3 -1
  132. package/dist/src/ui/themes/ayu-light.js.map +1 -1
  133. package/dist/src/ui/themes/ayu.js +3 -1
  134. package/dist/src/ui/themes/ayu.js.map +1 -1
  135. package/dist/src/ui/themes/color-utils.d.ts +21 -0
  136. package/dist/src/ui/themes/color-utils.js +221 -0
  137. package/dist/src/ui/themes/color-utils.js.map +1 -0
  138. package/dist/src/ui/themes/dracula.js +2 -0
  139. package/dist/src/ui/themes/dracula.js.map +1 -1
  140. package/dist/src/ui/themes/github-dark.js +2 -0
  141. package/dist/src/ui/themes/github-dark.js.map +1 -1
  142. package/dist/src/ui/themes/github-light.js +2 -0
  143. package/dist/src/ui/themes/github-light.js.map +1 -1
  144. package/dist/src/ui/themes/googlecode.js +2 -0
  145. package/dist/src/ui/themes/googlecode.js.map +1 -1
  146. package/dist/src/ui/themes/no-color.js +3 -1
  147. package/dist/src/ui/themes/no-color.js.map +1 -1
  148. package/dist/src/ui/themes/shades-of-purple.d.ts +1 -1
  149. package/dist/src/ui/themes/shades-of-purple.js +3 -1
  150. package/dist/src/ui/themes/shades-of-purple.js.map +1 -1
  151. package/dist/src/ui/themes/theme-manager.d.ts +31 -6
  152. package/dist/src/ui/themes/theme-manager.js +104 -34
  153. package/dist/src/ui/themes/theme-manager.js.map +1 -1
  154. package/dist/src/ui/themes/theme.d.ts +22 -3
  155. package/dist/src/ui/themes/theme.js +229 -182
  156. package/dist/src/ui/themes/theme.js.map +1 -1
  157. package/dist/src/ui/themes/xcode.js +2 -0
  158. package/dist/src/ui/themes/xcode.js.map +1 -1
  159. package/dist/src/ui/types.d.ts +9 -1
  160. package/dist/src/ui/utils/CodeColorizer.d.ts +3 -1
  161. package/dist/src/ui/utils/CodeColorizer.js +23 -11
  162. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  163. package/dist/src/ui/utils/commandUtils.d.ts +1 -0
  164. package/dist/src/ui/utils/commandUtils.js +47 -0
  165. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  166. package/dist/src/ui/utils/markdownUtilities.js +1 -1
  167. package/dist/src/utils/sandbox.js +7 -3
  168. package/dist/src/utils/sandbox.js.map +1 -1
  169. package/dist/src/utils/userStartupWarnings.js +22 -1
  170. package/dist/src/utils/userStartupWarnings.js.map +1 -1
  171. package/dist/src/validateNonInterActiveAuth.d.ts +7 -0
  172. package/dist/src/validateNonInterActiveAuth.js +35 -0
  173. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  174. package/dist/tsconfig.tsbuildinfo +1 -1
  175. package/package.json +7 -4
  176. package/dist/google-gemini-cli-0.1.12.tgz +0 -0
@@ -14,6 +14,7 @@ import { DefaultLight } from './default-light.js';
14
14
  import { DefaultDark } from './default.js';
15
15
  import { ShadesOfPurple } from './shades-of-purple.js';
16
16
  import { XCode } from './xcode.js';
17
+ import { createCustomTheme, validateCustomTheme, } from './theme.js';
17
18
  import { ANSI } from './ansi.js';
18
19
  import { ANSILight } from './ansi-light.js';
19
20
  import { NoColorTheme } from './no-color.js';
@@ -22,6 +23,7 @@ export const DEFAULT_THEME = DefaultDark;
22
23
  class ThemeManager {
23
24
  availableThemes;
24
25
  activeTheme;
26
+ customThemes = new Map();
25
27
  constructor() {
26
28
  this.availableThemes = [
27
29
  AyuDark,
@@ -40,19 +42,107 @@ class ThemeManager {
40
42
  ];
41
43
  this.activeTheme = DEFAULT_THEME;
42
44
  }
45
+ /**
46
+ * Loads custom themes from settings.
47
+ * @param customThemesSettings Custom themes from settings.
48
+ */
49
+ loadCustomThemes(customThemesSettings) {
50
+ this.customThemes.clear();
51
+ if (!customThemesSettings) {
52
+ return;
53
+ }
54
+ for (const [name, customThemeConfig] of Object.entries(customThemesSettings)) {
55
+ const validation = validateCustomTheme(customThemeConfig);
56
+ if (validation.isValid) {
57
+ try {
58
+ const theme = createCustomTheme(customThemeConfig);
59
+ this.customThemes.set(name, theme);
60
+ }
61
+ catch (error) {
62
+ console.warn(`Failed to load custom theme "${name}":`, error);
63
+ }
64
+ }
65
+ else {
66
+ console.warn(`Invalid custom theme "${name}": ${validation.error}`);
67
+ }
68
+ }
69
+ // If the current active theme is a custom theme, keep it if still valid
70
+ if (this.activeTheme &&
71
+ this.activeTheme.type === 'custom' &&
72
+ this.customThemes.has(this.activeTheme.name)) {
73
+ this.activeTheme = this.customThemes.get(this.activeTheme.name);
74
+ }
75
+ }
76
+ /**
77
+ * Sets the active theme.
78
+ * @param themeName The name of the theme to set as active.
79
+ * @returns True if the theme was successfully set, false otherwise.
80
+ */
81
+ setActiveTheme(themeName) {
82
+ const theme = this.findThemeByName(themeName);
83
+ if (!theme) {
84
+ return false;
85
+ }
86
+ this.activeTheme = theme;
87
+ return true;
88
+ }
89
+ /**
90
+ * Gets the currently active theme.
91
+ * @returns The active theme.
92
+ */
93
+ getActiveTheme() {
94
+ if (process.env.NO_COLOR) {
95
+ return NoColorTheme;
96
+ }
97
+ // Ensure the active theme is always valid (fall back to default if not)
98
+ if (!this.activeTheme || !this.findThemeByName(this.activeTheme.name)) {
99
+ this.activeTheme = DEFAULT_THEME;
100
+ }
101
+ return this.activeTheme;
102
+ }
103
+ /**
104
+ * Gets a list of custom theme names.
105
+ * @returns Array of custom theme names.
106
+ */
107
+ getCustomThemeNames() {
108
+ return Array.from(this.customThemes.keys());
109
+ }
110
+ /**
111
+ * Checks if a theme name is a custom theme.
112
+ * @param themeName The theme name to check.
113
+ * @returns True if the theme is custom.
114
+ */
115
+ isCustomTheme(themeName) {
116
+ return this.customThemes.has(themeName);
117
+ }
43
118
  /**
44
119
  * Returns a list of available theme names.
45
120
  */
46
121
  getAvailableThemes() {
47
- const sortedThemes = [...this.availableThemes].sort((a, b) => {
122
+ const builtInThemes = this.availableThemes.map((theme) => ({
123
+ name: theme.name,
124
+ type: theme.type,
125
+ isCustom: false,
126
+ }));
127
+ const customThemes = Array.from(this.customThemes.values()).map((theme) => ({
128
+ name: theme.name,
129
+ type: theme.type,
130
+ isCustom: true,
131
+ }));
132
+ const allThemes = [...builtInThemes, ...customThemes];
133
+ const sortedThemes = allThemes.sort((a, b) => {
48
134
  const typeOrder = (type) => {
49
135
  switch (type) {
50
136
  case 'dark':
51
137
  return 1;
52
138
  case 'light':
53
139
  return 2;
54
- default:
140
+ case 'ansi':
55
141
  return 3;
142
+ case 'custom':
143
+ return 4; // Custom themes at the end
144
+ default:
145
+ return 5;
56
146
  }
57
147
  };
58
148
  const typeComparison = typeOrder(a.type) - typeOrder(b.type);
@@ -61,47 +151,27 @@ class ThemeManager {
61
151
  }
62
152
  return a.name.localeCompare(b.name);
63
153
  });
64
- return sortedThemes.map((theme) => ({
65
- name: theme.name,
66
- type: theme.type,
67
- }));
154
+ return sortedThemes;
68
155
  }
69
156
  /**
70
- * Sets the active theme.
71
- * @param themeName The name of the theme to activate.
72
- * @returns True if the theme was successfully set, false otherwise.
157
+ * Gets a theme by name.
158
+ * @param themeName The name of the theme to get.
159
+ * @returns The theme if found, undefined otherwise.
73
160
  */
74
- setActiveTheme(themeName) {
75
- const foundTheme = this.findThemeByName(themeName);
76
- if (foundTheme) {
77
- this.activeTheme = foundTheme;
78
- return true;
79
- }
80
- else {
81
- // If themeName is undefined, it means we want to set the default theme.
82
- // If findThemeByName returns undefined (e.g. default theme is also not found for some reason)
83
- // then this will return false.
84
- if (themeName === undefined) {
85
- this.activeTheme = DEFAULT_THEME;
86
- return true;
87
- }
88
- return false;
89
- }
161
+ getTheme(themeName) {
162
+ return this.findThemeByName(themeName);
90
163
  }
91
164
  findThemeByName(themeName) {
92
165
  if (!themeName) {
93
166
  return DEFAULT_THEME;
94
167
  }
95
- return this.availableThemes.find((theme) => theme.name === themeName);
96
- }
97
- /**
98
- * Returns the currently active theme object.
99
- */
100
- getActiveTheme() {
101
- if (process.env.NO_COLOR) {
102
- return NoColorTheme;
168
+ // First check built-in themes
169
+ const builtInTheme = this.availableThemes.find((theme) => theme.name === themeName);
170
+ if (builtInTheme) {
171
+ return builtInTheme;
103
172
  }
104
- return this.activeTheme;
173
+ // Then check custom themes
174
+ return this.customThemes.get(themeName);
105
175
  }
106
176
  }
107
177
  // Export an instance of the ThemeManager
@@ -1 +1 @@
1
- {"version":3,"file":"theme-manager.js","sourceRoot":"","sources":["../../../../src/ui/themes/theme-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-manager.js","sourceRoot":"","sources":["../../../../src/ui/themes/theme-manager.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import type { CSSProperties } from 'react';
7
- export type ThemeType = 'light' | 'dark' | 'ansi';
7
+ export type ThemeType = 'light' | 'dark' | 'ansi' | 'custom';
8
8
  export interface ColorsTheme {
9
9
  type: ThemeType;
10
10
  Background: string;
@@ -16,10 +16,16 @@ export interface ColorsTheme {
16
16
  AccentGreen: string;
17
17
  AccentYellow: string;
18
18
  AccentRed: string;
19
+ DiffAdded: string;
20
+ DiffRemoved: string;
19
21
  Comment: string;
20
22
  Gray: string;
21
23
  GradientColors?: string[];
22
24
  }
25
+ export interface CustomTheme extends ColorsTheme {
26
+ type: 'custom';
27
+ name: string;
28
+ }
23
29
  export declare const lightTheme: ColorsTheme;
24
30
  export declare const darkTheme: ColorsTheme;
25
31
  export declare const ansiTheme: ColorsTheme;
@@ -37,8 +43,6 @@ export declare class Theme {
37
43
  * to Ink-compatible color strings (hex or name).
38
44
  */
39
45
  protected readonly _colorMap: Readonly<Record<string, string>>;
40
- private static readonly cssNameToHexMap;
41
- private static readonly inkSupportedNames;
42
46
  /**
43
47
  * Creates a new Theme instance.
44
48
  * @param name The name of the theme.
@@ -65,3 +69,18 @@ export declare class Theme {
65
69
  */
66
70
  protected _buildColorMap(hljsTheme: Record<string, CSSProperties>): Record<string, string>;
67
71
  }
72
+ /**
73
+ * Creates a Theme instance from a custom theme configuration.
74
+ * @param customTheme The custom theme configuration.
75
+ * @returns A new Theme instance.
76
+ */
77
+ export declare function createCustomTheme(customTheme: CustomTheme): Theme;
78
+ /**
79
+ * Validates a custom theme configuration.
80
+ * @param customTheme The custom theme to validate.
81
+ * @returns An object with isValid boolean and error message if invalid.
82
+ */
83
+ export declare function validateCustomTheme(customTheme: Partial<CustomTheme>): {
84
+ isValid: boolean;
85
+ error?: string;
86
+ };