@google/gemini-cli 0.16.0-preview.5 → 0.16.0

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 (79) hide show
  1. package/dist/package.json +2 -2
  2. package/dist/src/config/config.js +1 -0
  3. package/dist/src/config/config.js.map +1 -1
  4. package/dist/src/config/settingsSchema.d.ts +10 -0
  5. package/dist/src/config/settingsSchema.js +10 -0
  6. package/dist/src/config/settingsSchema.js.map +1 -1
  7. package/dist/src/config/settingsSchema.test.js +9 -0
  8. package/dist/src/config/settingsSchema.test.js.map +1 -1
  9. package/dist/src/generated/git-commit.d.ts +2 -2
  10. package/dist/src/generated/git-commit.js +2 -2
  11. package/dist/src/generated/git-commit.js.map +1 -1
  12. package/dist/src/ui/App.test.js +4 -0
  13. package/dist/src/ui/App.test.js.map +1 -1
  14. package/dist/src/ui/AppContainer.js +38 -1
  15. package/dist/src/ui/AppContainer.js.map +1 -1
  16. package/dist/src/ui/AppContainer.test.js +18 -1
  17. package/dist/src/ui/AppContainer.test.js.map +1 -1
  18. package/dist/src/ui/commands/ideCommand.js +6 -4
  19. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  20. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +12 -0
  21. package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +1 -1
  22. package/dist/src/ui/components/AppHeader.js +25 -3
  23. package/dist/src/ui/components/AppHeader.js.map +1 -1
  24. package/dist/src/ui/components/AppHeader.test.d.ts +6 -0
  25. package/dist/src/ui/components/AppHeader.test.js +138 -0
  26. package/dist/src/ui/components/AppHeader.test.js.map +1 -0
  27. package/dist/src/ui/components/Banner.d.ts +12 -0
  28. package/dist/src/ui/components/Banner.js +14 -0
  29. package/dist/src/ui/components/Banner.js.map +1 -0
  30. package/dist/src/ui/components/Composer.js +1 -1
  31. package/dist/src/ui/components/Composer.js.map +1 -1
  32. package/dist/src/ui/components/DialogManager.js +1 -1
  33. package/dist/src/ui/components/DialogManager.js.map +1 -1
  34. package/dist/src/ui/components/EditorSettingsDialog.d.ts +1 -1
  35. package/dist/src/ui/components/EditorSettingsDialog.js +2 -2
  36. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  37. package/dist/src/ui/components/InputPrompt.d.ts +1 -0
  38. package/dist/src/ui/components/InputPrompt.js +3 -1
  39. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  40. package/dist/src/ui/components/InputPrompt.test.js +11 -0
  41. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  42. package/dist/src/ui/components/ModelDialog.js +38 -29
  43. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  44. package/dist/src/ui/components/ModelDialog.test.js +19 -11
  45. package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
  46. package/dist/src/ui/components/ProQuotaDialog.d.ts +8 -2
  47. package/dist/src/ui/components/ProQuotaDialog.js +79 -14
  48. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  49. package/dist/src/ui/components/ProQuotaDialog.test.js +146 -40
  50. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  51. package/dist/src/ui/components/SettingsDialog.test.js +7 -7
  52. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  53. package/dist/src/ui/contexts/UIActionsContext.d.ts +2 -1
  54. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  55. package/dist/src/ui/contexts/UIStateContext.d.ts +8 -0
  56. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  57. package/dist/src/ui/editors/editorSettingsManager.d.ts +0 -1
  58. package/dist/src/ui/editors/editorSettingsManager.js +1 -11
  59. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  60. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +1 -1
  61. package/dist/src/ui/hooks/slashCommandProcessor.js +3 -1
  62. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  63. package/dist/src/ui/hooks/slashCommandProcessor.test.js +2 -1
  64. package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
  65. package/dist/src/ui/hooks/useEditorSettings.js +2 -2
  66. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
  67. package/dist/src/ui/hooks/useEditorSettings.test.js +8 -3
  68. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
  69. package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +1 -1
  70. package/dist/src/ui/hooks/useQuotaAndFallback.js +44 -31
  71. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  72. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +106 -101
  73. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  74. package/dist/src/utils/persistentState.d.ts +19 -0
  75. package/dist/src/utils/persistentState.js +65 -0
  76. package/dist/src/utils/persistentState.js.map +1 -0
  77. package/dist/tsconfig.tsbuildinfo +1 -1
  78. package/package.json +3 -3
  79. package/dist/google-gemini-cli-0.16.0-preview.4.tgz +0 -0
@@ -6,7 +6,7 @@
6
6
  import { vi, describe, it, expect, beforeEach, afterEach, } from 'vitest';
7
7
  import { act } from 'react';
8
8
  import { renderHook } from '../../test-utils/render.js';
9
- import { UserTierId, AuthType, TerminalQuotaError, makeFakeConfig, RetryableQuotaError, } from '@google/gemini-cli-core';
9
+ import { UserTierId, AuthType, TerminalQuotaError, makeFakeConfig, RetryableQuotaError, PREVIEW_GEMINI_MODEL, ModelNotFoundError, } from '@google/gemini-cli-core';
10
10
  import { useQuotaAndFallback } from './useQuotaAndFallback.js';
11
11
  import { MessageType } from '../types.js';
12
12
  describe('useQuotaAndFallback', () => {
@@ -53,13 +53,13 @@ describe('useQuotaAndFallback', () => {
53
53
  });
54
54
  describe('Fallback Handler Logic', () => {
55
55
  // Helper function to render the hook and extract the registered handler
56
- const getRegisteredHandler = (userTier = UserTierId.FREE) => {
57
- renderHook((props) => useQuotaAndFallback({
56
+ const getRegisteredHandler = () => {
57
+ renderHook(() => useQuotaAndFallback({
58
58
  config: mockConfig,
59
59
  historyManager: mockHistoryManager,
60
- userTier: props.userTier,
60
+ userTier: UserTierId.FREE,
61
61
  setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
62
- }), { initialProps: { userTier } });
62
+ }));
63
63
  return setFallbackHandlerSpy.mock.calls[0][0];
64
64
  };
65
65
  it('should return null and take no action if authType is not LOGIN_WITH_GOOGLE', async () => {
@@ -72,41 +72,8 @@ describe('useQuotaAndFallback', () => {
72
72
  expect(result).toBeNull();
73
73
  expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
74
74
  });
75
- describe('Flash Model Fallback', () => {
76
- it('should show a terminal quota message and stop, without offering a fallback', async () => {
77
- const handler = getRegisteredHandler();
78
- const result = await handler('gemini-2.5-flash', 'gemini-2.5-flash', new TerminalQuotaError('flash quota', mockGoogleApiError));
79
- expect(result).toBe('stop');
80
- expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
81
- const message = mockHistoryManager.addItem.mock.calls[0][0]
82
- .text;
83
- expect(message).toContain('You have reached your daily gemini-2.5-flash');
84
- expect(message).not.toContain('continue with the fallback model');
85
- });
86
- it('should show a capacity message and stop', async () => {
87
- const handler = getRegisteredHandler();
88
- // let result: FallbackIntent | null = null;
89
- const result = await handler('gemini-2.5-flash', 'gemini-2.5-flash', new Error('capacity'));
90
- expect(result).toBe('stop');
91
- expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
92
- const message = mockHistoryManager.addItem.mock.calls[0][0]
93
- .text;
94
- expect(message).toContain('Pardon Our Congestion! It looks like gemini-2.5-flash is very popular');
95
- });
96
- it('should show a capacity message and stop, even when already in fallback mode', async () => {
97
- vi.spyOn(mockConfig, 'isInFallbackMode').mockReturnValue(true);
98
- const handler = getRegisteredHandler();
99
- const result = await handler('gemini-2.5-flash', 'gemini-2.5-flash', new Error('capacity'));
100
- expect(result).toBe('stop');
101
- expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
102
- const message = mockHistoryManager.addItem.mock.calls[0][0]
103
- .text;
104
- expect(message).toContain('Pardon Our Congestion! It looks like gemini-2.5-flash is very popular');
105
- });
106
- });
107
75
  describe('Interactive Fallback', () => {
108
- // Pro Quota Errors
109
- it('should set an interactive request and wait for user choice', async () => {
76
+ it('should set an interactive request for a terminal quota error', async () => {
110
77
  const { result } = renderHook(() => useQuotaAndFallback({
111
78
  config: mockConfig,
112
79
  historyManager: mockHistoryManager,
@@ -115,23 +82,32 @@ describe('useQuotaAndFallback', () => {
115
82
  }));
116
83
  const handler = setFallbackHandlerSpy.mock
117
84
  .calls[0][0];
118
- // Call the handler but do not await it, to check the intermediate state
119
85
  let promise;
86
+ const error = new TerminalQuotaError('pro quota', mockGoogleApiError, 1000 * 60 * 5); // 5 minutes
120
87
  await act(() => {
121
- promise = handler('gemini-pro', 'gemini-flash', new TerminalQuotaError('pro quota', mockGoogleApiError));
88
+ promise = handler('gemini-pro', 'gemini-flash', error);
122
89
  });
123
90
  // The hook should now have a pending request for the UI to handle
124
- expect(result.current.proQuotaRequest).not.toBeNull();
125
- expect(result.current.proQuotaRequest?.failedModel).toBe('gemini-pro');
91
+ const request = result.current.proQuotaRequest;
92
+ expect(request).not.toBeNull();
93
+ expect(request?.failedModel).toBe('gemini-pro');
94
+ expect(request?.isTerminalQuotaError).toBe(true);
95
+ const message = request.message;
96
+ expect(message).toContain('Usage limit reached for gemini-pro.');
97
+ expect(message).toContain('Access resets at'); // From getResetTimeMessage
98
+ expect(message).toContain('/stats for usage details');
99
+ expect(message).toContain('/auth to switch to API key.');
100
+ expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
126
101
  // Simulate the user choosing to continue with the fallback model
127
102
  await act(() => {
128
- result.current.handleProQuotaChoice('retry');
103
+ result.current.handleProQuotaChoice('retry_always');
129
104
  });
130
105
  // The original promise from the handler should now resolve
131
106
  const intent = await promise;
132
- expect(intent).toBe('retry');
107
+ expect(intent).toBe('retry_always');
133
108
  // The pending request should be cleared from the state
134
109
  expect(result.current.proQuotaRequest).toBeNull();
110
+ expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
135
111
  });
136
112
  it('should handle race conditions by stopping subsequent requests', async () => {
137
113
  const { result } = renderHook(() => useQuotaAndFallback({
@@ -156,89 +132,97 @@ describe('useQuotaAndFallback', () => {
156
132
  expect(result2).toBe('stop');
157
133
  expect(result.current.proQuotaRequest).toBe(firstRequest);
158
134
  await act(() => {
159
- result.current.handleProQuotaChoice('retry');
135
+ result.current.handleProQuotaChoice('retry_always');
160
136
  });
161
137
  const intent1 = await promise1;
162
- expect(intent1).toBe('retry');
138
+ expect(intent1).toBe('retry_always');
163
139
  expect(result.current.proQuotaRequest).toBeNull();
164
140
  });
165
- // Non-Quota error test cases
141
+ // Non-TerminalQuotaError test cases
166
142
  const testCases = [
167
143
  {
168
- description: 'other error for FREE tier',
169
- tier: UserTierId.FREE,
170
- error: new Error('some error'),
171
- expectedMessageSnippets: [
172
- '🚦Pardon Our Congestion! It looks like model-A is very popular at the moment.',
173
- 'Please retry again later.',
174
- ],
175
- },
176
- {
177
- description: 'other error for LEGACY tier',
178
- tier: UserTierId.LEGACY, // Paid tier
144
+ description: 'generic error',
179
145
  error: new Error('some error'),
180
- expectedMessageSnippets: [
181
- '🚦Pardon Our Congestion! It looks like model-A is very popular at the moment.',
182
- 'Please retry again later.',
183
- ],
184
146
  },
185
147
  {
186
- description: 'retryable quota error for FREE tier',
187
- tier: UserTierId.FREE,
148
+ description: 'retryable quota error',
188
149
  error: new RetryableQuotaError('retryable quota', mockGoogleApiError, 5),
189
- expectedMessageSnippets: [
190
- '🚦Pardon Our Congestion! It looks like model-A is very popular at the moment.',
191
- 'Please retry again later.',
192
- ],
193
- },
194
- {
195
- description: 'retryable quota error for LEGACY tier',
196
- tier: UserTierId.LEGACY, // Paid tier
197
- error: new RetryableQuotaError('retryable quota', mockGoogleApiError, 5),
198
- expectedMessageSnippets: [
199
- '🚦Pardon Our Congestion! It looks like model-A is very popular at the moment.',
200
- 'Please retry again later.',
201
- ],
202
150
  },
203
151
  ];
204
- for (const { description, tier, error, expectedMessageSnippets, } of testCases) {
152
+ for (const { description, error } of testCases) {
205
153
  it(`should handle ${description} correctly`, async () => {
206
- const { result } = renderHook((props) => useQuotaAndFallback({
154
+ const { result } = renderHook(() => useQuotaAndFallback({
207
155
  config: mockConfig,
208
156
  historyManager: mockHistoryManager,
209
- userTier: props.tier,
157
+ userTier: UserTierId.FREE,
210
158
  setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
211
- }), { initialProps: { tier } });
159
+ }));
212
160
  const handler = setFallbackHandlerSpy.mock
213
161
  .calls[0][0];
214
- // Call the handler but do not await it, to check the intermediate state
215
162
  let promise;
216
163
  await act(() => {
217
164
  promise = handler('model-A', 'model-B', error);
218
165
  });
219
166
  // The hook should now have a pending request for the UI to handle
220
- expect(result.current.proQuotaRequest).not.toBeNull();
221
- expect(result.current.proQuotaRequest?.failedModel).toBe('model-A');
222
- // Check that the correct initial message was added
223
- expect(mockHistoryManager.addItem).toHaveBeenCalledWith(expect.objectContaining({ type: MessageType.INFO }), expect.any(Number));
224
- const message = mockHistoryManager.addItem.mock.calls[0][0]
225
- .text;
226
- for (const snippet of expectedMessageSnippets) {
227
- expect(message).toContain(snippet);
228
- }
167
+ const request = result.current.proQuotaRequest;
168
+ expect(request).not.toBeNull();
169
+ expect(request?.failedModel).toBe('model-A');
170
+ expect(request?.isTerminalQuotaError).toBe(false);
171
+ // Check that the correct initial message was generated
172
+ expect(mockHistoryManager.addItem).not.toHaveBeenCalled();
173
+ const message = request.message;
174
+ expect(message).toContain('model-A is currently experiencing high demand. We apologize and appreciate your patience.');
229
175
  // Simulate the user choosing to continue with the fallback model
230
176
  await act(() => {
231
- result.current.handleProQuotaChoice('retry');
177
+ result.current.handleProQuotaChoice('retry_always');
232
178
  });
233
179
  expect(mockSetModelSwitchedFromQuotaError).toHaveBeenCalledWith(true);
234
180
  // The original promise from the handler should now resolve
235
181
  const intent = await promise;
236
- expect(intent).toBe('retry');
182
+ expect(intent).toBe('retry_always');
237
183
  // The pending request should be cleared from the state
238
184
  expect(result.current.proQuotaRequest).toBeNull();
239
185
  expect(mockConfig.setQuotaErrorOccurred).toHaveBeenCalledWith(true);
186
+ // Check for the "Switched to fallback model" message
187
+ expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
188
+ const lastCall = mockHistoryManager.addItem.mock
189
+ .calls[0][0];
190
+ expect(lastCall.type).toBe(MessageType.INFO);
191
+ expect(lastCall.text).toContain('Switched to fallback model.');
240
192
  });
241
193
  }
194
+ it('should handle ModelNotFoundError correctly', async () => {
195
+ const { result } = renderHook(() => useQuotaAndFallback({
196
+ config: mockConfig,
197
+ historyManager: mockHistoryManager,
198
+ userTier: UserTierId.FREE,
199
+ setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
200
+ }));
201
+ const handler = setFallbackHandlerSpy.mock
202
+ .calls[0][0];
203
+ let promise;
204
+ const error = new ModelNotFoundError('model not found', 404);
205
+ await act(() => {
206
+ promise = handler('gemini-3-pro-preview', 'gemini-2.5-pro', error);
207
+ });
208
+ // The hook should now have a pending request for the UI to handle
209
+ const request = result.current.proQuotaRequest;
210
+ expect(request).not.toBeNull();
211
+ expect(request?.failedModel).toBe('gemini-3-pro-preview');
212
+ expect(request?.isTerminalQuotaError).toBe(false);
213
+ expect(request?.isModelNotFoundError).toBe(true);
214
+ const message = request.message;
215
+ expect(message).toBe(`It seems like you don't have access to Gemini 3.
216
+ Learn more at https://goo.gle/enable-preview-features
217
+ To disable Gemini 3, disable "Preview features" in /settings.`);
218
+ // Simulate the user choosing to switch
219
+ await act(() => {
220
+ result.current.handleProQuotaChoice('retry_always');
221
+ });
222
+ const intent = await promise;
223
+ expect(intent).toBe('retry_always');
224
+ expect(result.current.proQuotaRequest).toBeNull();
225
+ });
242
226
  });
243
227
  });
244
228
  describe('handleProQuotaChoice', () => {
@@ -274,7 +258,7 @@ describe('useQuotaAndFallback', () => {
274
258
  expect(intent).toBe('retry_later');
275
259
  expect(result.current.proQuotaRequest).toBeNull();
276
260
  });
277
- it('should resolve intent to "retry" and add info message on continue', async () => {
261
+ it('should resolve intent to "retry_always" and add info message on continue', async () => {
278
262
  const { result } = renderHook(() => useQuotaAndFallback({
279
263
  config: mockConfig,
280
264
  historyManager: mockHistoryManager,
@@ -283,23 +267,44 @@ describe('useQuotaAndFallback', () => {
283
267
  }));
284
268
  const handler = setFallbackHandlerSpy.mock
285
269
  .calls[0][0];
286
- // The first `addItem` call is for the initial quota error message
287
270
  let promise;
288
271
  await act(() => {
289
272
  promise = handler('gemini-pro', 'gemini-flash', new TerminalQuotaError('pro quota', mockGoogleApiError));
290
273
  });
291
274
  await act(() => {
292
- result.current.handleProQuotaChoice('retry');
275
+ result.current.handleProQuotaChoice('retry_always');
293
276
  });
294
277
  const intent = await promise;
295
- expect(intent).toBe('retry');
278
+ expect(intent).toBe('retry_always');
296
279
  expect(result.current.proQuotaRequest).toBeNull();
297
- // Check for the second "Switched to fallback model" message
298
- expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(2);
299
- const lastCall = mockHistoryManager.addItem.mock.calls[1][0];
280
+ // Check for the "Switched to fallback model" message
281
+ expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
282
+ const lastCall = mockHistoryManager.addItem.mock.calls[0][0];
300
283
  expect(lastCall.type).toBe(MessageType.INFO);
301
284
  expect(lastCall.text).toContain('Switched to fallback model.');
302
285
  });
286
+ it('should show a special message when falling back from the preview model', async () => {
287
+ const { result } = renderHook(() => useQuotaAndFallback({
288
+ config: mockConfig,
289
+ historyManager: mockHistoryManager,
290
+ userTier: UserTierId.FREE,
291
+ setModelSwitchedFromQuotaError: mockSetModelSwitchedFromQuotaError,
292
+ }));
293
+ const handler = setFallbackHandlerSpy.mock
294
+ .calls[0][0];
295
+ let promise;
296
+ await act(() => {
297
+ promise = handler(PREVIEW_GEMINI_MODEL, 'gemini-flash', new Error('preview model failed'));
298
+ });
299
+ await act(() => {
300
+ result.current.handleProQuotaChoice('retry_always');
301
+ });
302
+ await promise;
303
+ expect(mockHistoryManager.addItem).toHaveBeenCalledTimes(1);
304
+ const lastCall = mockHistoryManager.addItem.mock.calls[0][0];
305
+ expect(lastCall.type).toBe(MessageType.INFO);
306
+ expect(lastCall.text).toContain(`Switched to fallback model gemini-flash. We will periodically check if ${PREVIEW_GEMINI_MODEL} is available again.`);
307
+ });
303
308
  });
304
309
  });
305
310
  //# sourceMappingURL=useQuotaAndFallback.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuotaAndFallback.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useQuotaAndFallback.test.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useQuotaAndFallback.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ interface PersistentStateData {
7
+ defaultBannerShownCount?: number;
8
+ }
9
+ export declare class PersistentState {
10
+ private cache;
11
+ private filePath;
12
+ private getPath;
13
+ private load;
14
+ private save;
15
+ get<K extends keyof PersistentStateData>(key: K): PersistentStateData[K] | undefined;
16
+ set<K extends keyof PersistentStateData>(key: K, value: PersistentStateData[K]): void;
17
+ }
18
+ export declare const persistentState: PersistentState;
19
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Storage, debugLogger } from '@google/gemini-cli-core';
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ const STATE_FILENAME = 'state.json';
10
+ export class PersistentState {
11
+ cache = null;
12
+ filePath = null;
13
+ getPath() {
14
+ if (!this.filePath) {
15
+ this.filePath = path.join(Storage.getGlobalGeminiDir(), STATE_FILENAME);
16
+ }
17
+ return this.filePath;
18
+ }
19
+ load() {
20
+ if (this.cache) {
21
+ return this.cache;
22
+ }
23
+ try {
24
+ const filePath = this.getPath();
25
+ if (fs.existsSync(filePath)) {
26
+ const content = fs.readFileSync(filePath, 'utf-8');
27
+ this.cache = JSON.parse(content);
28
+ }
29
+ else {
30
+ this.cache = {};
31
+ }
32
+ }
33
+ catch (error) {
34
+ debugLogger.warn('Failed to load persistent state:', error);
35
+ // If error reading (e.g. corrupt JSON), start fresh
36
+ this.cache = {};
37
+ }
38
+ return this.cache;
39
+ }
40
+ save() {
41
+ if (!this.cache)
42
+ return;
43
+ try {
44
+ const filePath = this.getPath();
45
+ const dir = path.dirname(filePath);
46
+ if (!fs.existsSync(dir)) {
47
+ fs.mkdirSync(dir, { recursive: true });
48
+ }
49
+ fs.writeFileSync(filePath, JSON.stringify(this.cache, null, 2));
50
+ }
51
+ catch (error) {
52
+ debugLogger.warn('Failed to save persistent state:', error);
53
+ }
54
+ }
55
+ get(key) {
56
+ return this.load()[key];
57
+ }
58
+ set(key, value) {
59
+ this.load(); // ensure loaded
60
+ this.cache[key] = value;
61
+ this.save();
62
+ }
63
+ }
64
+ export const persistentState = new PersistentState();
65
+ //# sourceMappingURL=persistentState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistentState.js","sourceRoot":"","sources":["../../../src/utils/persistentState.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,cAAc,GAAG,YAAY,CAAC;AAOpC,MAAM,OAAO,eAAe;IAClB,KAAK,GAA+B,IAAI,CAAC;IACzC,QAAQ,GAAkB,IAAI,CAAC;IAE/B,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,cAAc,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YAC5D,oDAAoD;YACpD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,KAAM,CAAC;IACrB,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,GAAG,CACD,GAAM;QAEN,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG,CACD,GAAM,EACN,KAA6B;QAE7B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,gBAAgB;QAC7B,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}