@machina.ai/cell-cli-core 1.0.13-rc3
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.
- package/dist/.last_build +0 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__mocks__/fs/promises.d.ts +11 -0
- package/dist/src/__mocks__/fs/promises.js +17 -0
- package/dist/src/__mocks__/fs/promises.js.map +1 -0
- package/dist/src/code_assist/codeAssist.d.ts +9 -0
- package/dist/src/code_assist/codeAssist.js +19 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +68 -0
- package/dist/src/code_assist/converter.js +125 -0
- package/dist/src/code_assist/converter.js.map +1 -0
- package/dist/src/code_assist/converter.test.d.ts +6 -0
- package/dist/src/code_assist/converter.test.js +229 -0
- package/dist/src/code_assist/converter.test.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +20 -0
- package/dist/src/code_assist/oauth2.js +329 -0
- package/dist/src/code_assist/oauth2.js.map +1 -0
- package/dist/src/code_assist/oauth2.test.d.ts +6 -0
- package/dist/src/code_assist/oauth2.test.js +244 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -0
- package/dist/src/code_assist/server.d.ts +37 -0
- package/dist/src/code_assist/server.js +125 -0
- package/dist/src/code_assist/server.js.map +1 -0
- package/dist/src/code_assist/server.test.d.ts +6 -0
- package/dist/src/code_assist/server.test.js +131 -0
- package/dist/src/code_assist/server.test.js.map +1 -0
- package/dist/src/code_assist/setup.d.ts +20 -0
- package/dist/src/code_assist/setup.js +70 -0
- package/dist/src/code_assist/setup.js.map +1 -0
- package/dist/src/code_assist/setup.test.d.ts +6 -0
- package/dist/src/code_assist/setup.test.js +65 -0
- package/dist/src/code_assist/setup.test.js.map +1 -0
- package/dist/src/code_assist/types.d.ts +148 -0
- package/dist/src/code_assist/types.js +46 -0
- package/dist/src/code_assist/types.js.map +1 -0
- package/dist/src/config/config.d.ts +239 -0
- package/dist/src/config/config.js +484 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/config.test.d.ts +6 -0
- package/dist/src/config/config.test.js +304 -0
- package/dist/src/config/config.test.js.map +1 -0
- package/dist/src/config/flashFallback.test.d.ts +6 -0
- package/dist/src/config/flashFallback.test.js +115 -0
- package/dist/src/config/flashFallback.test.js.map +1 -0
- package/dist/src/config/models.d.ts +8 -0
- package/dist/src/config/models.js +9 -0
- package/dist/src/config/models.js.map +1 -0
- package/dist/src/core/client.d.ts +60 -0
- package/dist/src/core/client.js +502 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/client.test.d.ts +6 -0
- package/dist/src/core/client.test.js +853 -0
- package/dist/src/core/client.test.js.map +1 -0
- package/dist/src/core/contentGenerator.d.ts +36 -0
- package/dist/src/core/contentGenerator.js +110 -0
- package/dist/src/core/contentGenerator.js.map +1 -0
- package/dist/src/core/contentGenerator.test.d.ts +6 -0
- package/dist/src/core/contentGenerator.test.js +225 -0
- package/dist/src/core/contentGenerator.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +104 -0
- package/dist/src/core/coreToolScheduler.js +410 -0
- package/dist/src/core/coreToolScheduler.js.map +1 -0
- package/dist/src/core/coreToolScheduler.test.d.ts +6 -0
- package/dist/src/core/coreToolScheduler.test.js +402 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +116 -0
- package/dist/src/core/geminiChat.js +511 -0
- package/dist/src/core/geminiChat.js.map +1 -0
- package/dist/src/core/geminiChat.test.d.ts +6 -0
- package/dist/src/core/geminiChat.test.js +424 -0
- package/dist/src/core/geminiChat.test.js.map +1 -0
- package/dist/src/core/geminiRequest.d.ts +13 -0
- package/dist/src/core/geminiRequest.js +45 -0
- package/dist/src/core/geminiRequest.js.map +1 -0
- package/dist/src/core/geminiRequest.test.d.ts +6 -0
- package/dist/src/core/geminiRequest.test.js +72 -0
- package/dist/src/core/geminiRequest.test.js.map +1 -0
- package/dist/src/core/logger.d.ts +35 -0
- package/dist/src/core/logger.js +235 -0
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/logger.test.d.ts +6 -0
- package/dist/src/core/logger.test.js +387 -0
- package/dist/src/core/logger.test.js.map +1 -0
- package/dist/src/core/modelCheck.d.ts +14 -0
- package/dist/src/core/modelCheck.js +62 -0
- package/dist/src/core/modelCheck.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +12 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +97 -0
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +6 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js +189 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
- package/dist/src/core/prompts.d.ts +12 -0
- package/dist/src/core/prompts.js +335 -0
- package/dist/src/core/prompts.js.map +1 -0
- package/dist/src/core/prompts.test.d.ts +6 -0
- package/dist/src/core/prompts.test.js +97 -0
- package/dist/src/core/prompts.test.js.map +1 -0
- package/dist/src/core/tokenLimits.d.ts +10 -0
- package/dist/src/core/tokenLimits.js +27 -0
- package/dist/src/core/tokenLimits.js.map +1 -0
- package/dist/src/core/turn.d.ts +111 -0
- package/dist/src/core/turn.js +139 -0
- package/dist/src/core/turn.js.map +1 -0
- package/dist/src/core/turn.test.d.ts +6 -0
- package/dist/src/core/turn.test.js +365 -0
- package/dist/src/core/turn.test.js.map +1 -0
- package/dist/src/index.d.ts +57 -0
- package/dist/src/index.js +64 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +6 -0
- package/dist/src/index.test.js +12 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +142 -0
- package/dist/src/mcp/oauth-provider.js +446 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
- package/dist/src/mcp/oauth-provider.test.js +520 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +81 -0
- package/dist/src/mcp/oauth-token-storage.js +149 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/oauth-token-storage.test.js +205 -0
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
- package/dist/src/mcp/oauth-utils.d.ts +109 -0
- package/dist/src/mcp/oauth-utils.js +183 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -0
- package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
- package/dist/src/mcp/oauth-utils.test.js +144 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.d.ts +35 -0
- package/dist/src/services/fileDiscoveryService.js +91 -0
- package/dist/src/services/fileDiscoveryService.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.test.d.ts +6 -0
- package/dist/src/services/fileDiscoveryService.test.js +102 -0
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -0
- package/dist/src/services/gitService.d.ts +21 -0
- package/dist/src/services/gitService.js +101 -0
- package/dist/src/services/gitService.js.map +1 -0
- package/dist/src/services/gitService.test.d.ts +6 -0
- package/dist/src/services/gitService.test.js +228 -0
- package/dist/src/services/gitService.test.js.map +1 -0
- package/dist/src/services/ideContext.d.ts +178 -0
- package/dist/src/services/ideContext.js +105 -0
- package/dist/src/services/ideContext.js.map +1 -0
- package/dist/src/services/ideContext.test.d.ts +6 -0
- package/dist/src/services/ideContext.test.js +111 -0
- package/dist/src/services/ideContext.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +51 -0
- package/dist/src/services/loopDetectionService.js +232 -0
- package/dist/src/services/loopDetectionService.js.map +1 -0
- package/dist/src/services/loopDetectionService.test.d.ts +6 -0
- package/dist/src/services/loopDetectionService.test.js +339 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +37 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +456 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +49 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +127 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +20 -0
- package/dist/src/telemetry/constants.js +21 -0
- package/dist/src/telemetry/constants.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +18 -0
- package/dist/src/telemetry/index.js +20 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
- package/dist/src/telemetry/integration.test.circular.js +53 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +15 -0
- package/dist/src/telemetry/loggers.js +220 -0
- package/dist/src/telemetry/loggers.js.map +1 -0
- package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.circular.js +100 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.test.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.js +558 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +19 -0
- package/dist/src/telemetry/metrics.js +144 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/metrics.test.d.ts +6 -0
- package/dist/src/telemetry/metrics.test.js +162 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +9 -0
- package/dist/src/telemetry/sdk.js +116 -0
- package/dist/src/telemetry/sdk.js.map +1 -0
- package/dist/src/telemetry/telemetry.test.d.ts +6 -0
- package/dist/src/telemetry/telemetry.test.js +50 -0
- package/dist/src/telemetry/telemetry.test.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +116 -0
- package/dist/src/telemetry/types.js +218 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.d.ts +68 -0
- package/dist/src/telemetry/uiTelemetry.js +138 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.test.d.ts +6 -0
- package/dist/src/telemetry/uiTelemetry.test.js +504 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -0
- package/dist/src/tools/diffOptions.d.ts +7 -0
- package/dist/src/tools/diffOptions.js +10 -0
- package/dist/src/tools/diffOptions.js.map +1 -0
- package/dist/src/tools/edit.d.ts +79 -0
- package/dist/src/tools/edit.js +362 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/edit.test.d.ts +6 -0
- package/dist/src/tools/edit.test.js +512 -0
- package/dist/src/tools/edit.test.js.map +1 -0
- package/dist/src/tools/glob.d.ts +58 -0
- package/dist/src/tools/glob.js +193 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/glob.test.d.ts +6 -0
- package/dist/src/tools/glob.test.js +294 -0
- package/dist/src/tools/glob.test.js.map +1 -0
- package/dist/src/tools/grep.d.ts +78 -0
- package/dist/src/tools/grep.js +422 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/grep.test.d.ts +6 -0
- package/dist/src/tools/grep.test.js +188 -0
- package/dist/src/tools/grep.test.js.map +1 -0
- package/dist/src/tools/ls.d.ts +86 -0
- package/dist/src/tools/ls.js +223 -0
- package/dist/src/tools/ls.js.map +1 -0
- package/dist/src/tools/mcp-client.d.ts +110 -0
- package/dist/src/tools/mcp-client.js +319 -0
- package/dist/src/tools/mcp-client.js.map +1 -0
- package/dist/src/tools/mcp-client.test.d.ts +6 -0
- package/dist/src/tools/mcp-client.test.js +156 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +29 -0
- package/dist/src/tools/mcp-tool.js +143 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/mcp-tool.test.d.ts +6 -0
- package/dist/src/tools/mcp-tool.test.js +189 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +28 -0
- package/dist/src/tools/memoryTool.js +172 -0
- package/dist/src/tools/memoryTool.js.map +1 -0
- package/dist/src/tools/memoryTool.test.d.ts +6 -0
- package/dist/src/tools/memoryTool.test.js +181 -0
- package/dist/src/tools/memoryTool.test.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +29 -0
- package/dist/src/tools/modifiable-tool.js +85 -0
- package/dist/src/tools/modifiable-tool.js.map +1 -0
- package/dist/src/tools/modifiable-tool.test.d.ts +6 -0
- package/dist/src/tools/modifiable-tool.test.js +204 -0
- package/dist/src/tools/modifiable-tool.test.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +36 -0
- package/dist/src/tools/read-file.js +102 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/read-file.test.d.ts +6 -0
- package/dist/src/tools/read-file.test.js +181 -0
- package/dist/src/tools/read-file.test.js.map +1 -0
- package/dist/src/tools/read-many-files.d.ts +62 -0
- package/dist/src/tools/read-many-files.js +362 -0
- package/dist/src/tools/read-many-files.js.map +1 -0
- package/dist/src/tools/read-many-files.test.d.ts +6 -0
- package/dist/src/tools/read-many-files.test.js +315 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -0
- package/dist/src/tools/shell.d.ts +43 -0
- package/dist/src/tools/shell.js +435 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/shell.test.d.ts +6 -0
- package/dist/src/tools/shell.test.js +406 -0
- package/dist/src/tools/shell.test.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +66 -0
- package/dist/src/tools/tool-registry.js +329 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/tools/tool-registry.test.d.ts +6 -0
- package/dist/src/tools/tool-registry.test.js +424 -0
- package/dist/src/tools/tool-registry.test.js.map +1 -0
- package/dist/src/tools/tools.d.ts +219 -0
- package/dist/src/tools/tools.js +111 -0
- package/dist/src/tools/tools.js.map +1 -0
- package/dist/src/tools/web-fetch.d.ts +29 -0
- package/dist/src/tools/web-fetch.js +246 -0
- package/dist/src/tools/web-fetch.js.map +1 -0
- package/dist/src/tools/web-fetch.test.d.ts +6 -0
- package/dist/src/tools/web-fetch.test.js +71 -0
- package/dist/src/tools/web-fetch.test.js.map +1 -0
- package/dist/src/tools/web-search.d.ts +49 -0
- package/dist/src/tools/web-search.js +120 -0
- package/dist/src/tools/web-search.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +42 -0
- package/dist/src/tools/write-file.js +253 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/tools/write-file.test.d.ts +6 -0
- package/dist/src/tools/write-file.test.js +413 -0
- package/dist/src/tools/write-file.test.js.map +1 -0
- package/dist/src/utils/LruCache.d.ts +13 -0
- package/dist/src/utils/LruCache.js +38 -0
- package/dist/src/utils/LruCache.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +24 -0
- package/dist/src/utils/bfsFileSearch.js +65 -0
- package/dist/src/utils/bfsFileSearch.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.test.d.ts +6 -0
- package/dist/src/utils/bfsFileSearch.test.js +162 -0
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -0
- package/dist/src/utils/browser.d.ts +13 -0
- package/dist/src/utils/browser.js +49 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/editCorrector.d.ts +53 -0
- package/dist/src/utils/editCorrector.js +546 -0
- package/dist/src/utils/editCorrector.js.map +1 -0
- package/dist/src/utils/editCorrector.test.d.ts +6 -0
- package/dist/src/utils/editCorrector.test.js +564 -0
- package/dist/src/utils/editCorrector.test.js.map +1 -0
- package/dist/src/utils/editor.d.ts +28 -0
- package/dist/src/utils/editor.js +169 -0
- package/dist/src/utils/editor.js.map +1 -0
- package/dist/src/utils/editor.test.d.ts +6 -0
- package/dist/src/utils/editor.test.js +393 -0
- package/dist/src/utils/editor.test.js.map +1 -0
- package/dist/src/utils/errorReporting.d.ts +14 -0
- package/dist/src/utils/errorReporting.js +88 -0
- package/dist/src/utils/errorReporting.js.map +1 -0
- package/dist/src/utils/errorReporting.test.d.ts +6 -0
- package/dist/src/utils/errorReporting.test.js +124 -0
- package/dist/src/utils/errorReporting.test.js.map +1 -0
- package/dist/src/utils/errors.d.ts +14 -0
- package/dist/src/utils/errors.js +54 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +11 -0
- package/dist/src/utils/fetch.js +51 -0
- package/dist/src/utils/fetch.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +49 -0
- package/dist/src/utils/fileUtils.js +300 -0
- package/dist/src/utils/fileUtils.js.map +1 -0
- package/dist/src/utils/fileUtils.test.d.ts +6 -0
- package/dist/src/utils/fileUtils.test.js +321 -0
- package/dist/src/utils/fileUtils.test.js.map +1 -0
- package/dist/src/utils/flashFallback.integration.test.d.ts +6 -0
- package/dist/src/utils/flashFallback.integration.test.js +112 -0
- package/dist/src/utils/flashFallback.integration.test.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.d.ts +14 -0
- package/dist/src/utils/generateContentResponseUtilities.js +92 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.test.d.ts +6 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js +273 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -0
- package/dist/src/utils/getFolderStructure.d.ts +31 -0
- package/dist/src/utils/getFolderStructure.js +246 -0
- package/dist/src/utils/getFolderStructure.js.map +1 -0
- package/dist/src/utils/getFolderStructure.test.d.ts +6 -0
- package/dist/src/utils/getFolderStructure.test.js +284 -0
- package/dist/src/utils/getFolderStructure.test.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.d.ts +20 -0
- package/dist/src/utils/gitIgnoreParser.js +67 -0
- package/dist/src/utils/gitIgnoreParser.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/gitIgnoreParser.test.js +157 -0
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +17 -0
- package/dist/src/utils/gitUtils.js +61 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +15 -0
- package/dist/src/utils/memoryDiscovery.js +226 -0
- package/dist/src/utils/memoryDiscovery.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.test.d.ts +6 -0
- package/dist/src/utils/memoryDiscovery.test.js +432 -0
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.d.ts +35 -0
- package/dist/src/utils/memoryImportProcessor.js +141 -0
- package/dist/src/utils/memoryImportProcessor.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.test.d.ts +6 -0
- package/dist/src/utils/memoryImportProcessor.test.js +170 -0
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -0
- package/dist/src/utils/messageInspectors.d.ts +8 -0
- package/dist/src/utils/messageInspectors.js +16 -0
- package/dist/src/utils/messageInspectors.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
- package/dist/src/utils/nextSpeakerChecker.js +112 -0
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.test.d.ts +6 -0
- package/dist/src/utils/nextSpeakerChecker.test.js +168 -0
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +59 -0
- package/dist/src/utils/paths.js +153 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/quotaErrorDetection.d.ts +22 -0
- package/dist/src/utils/quotaErrorDetection.js +65 -0
- package/dist/src/utils/quotaErrorDetection.js.map +1 -0
- package/dist/src/utils/retry.d.ts +27 -0
- package/dist/src/utils/retry.js +276 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/retry.test.d.ts +6 -0
- package/dist/src/utils/retry.test.js +322 -0
- package/dist/src/utils/retry.test.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +25 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
- package/dist/src/utils/safeJsonStringify.test.js +61 -0
- package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +22 -0
- package/dist/src/utils/schemaValidator.js +65 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/session.d.ts +6 -0
- package/dist/src/utils/session.js +8 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/stripJsonCodeBlock.d.ts +13 -0
- package/dist/src/utils/stripJsonCodeBlock.js +21 -0
- package/dist/src/utils/stripJsonCodeBlock.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +25 -0
- package/dist/src/utils/summarizer.js +80 -0
- package/dist/src/utils/summarizer.js.map +1 -0
- package/dist/src/utils/summarizer.test.d.ts +6 -0
- package/dist/src/utils/summarizer.test.js +131 -0
- package/dist/src/utils/summarizer.test.js.map +1 -0
- package/dist/src/utils/systemEncoding.d.ts +40 -0
- package/dist/src/utils/systemEncoding.js +149 -0
- package/dist/src/utils/systemEncoding.js.map +1 -0
- package/dist/src/utils/systemEncoding.test.d.ts +6 -0
- package/dist/src/utils/systemEncoding.test.js +368 -0
- package/dist/src/utils/systemEncoding.test.js.map +1 -0
- package/dist/src/utils/testUtils.d.ts +29 -0
- package/dist/src/utils/testUtils.js +70 -0
- package/dist/src/utils/testUtils.js.map +1 -0
- package/dist/src/utils/user_account.d.ts +9 -0
- package/dist/src/utils/user_account.js +99 -0
- package/dist/src/utils/user_account.js.map +1 -0
- package/dist/src/utils/user_account.test.d.ts +6 -0
- package/dist/src/utils/user_account.test.js +153 -0
- package/dist/src/utils/user_account.test.js.map +1 -0
- package/dist/src/utils/user_id.d.ts +11 -0
- package/dist/src/utils/user_id.js +49 -0
- package/dist/src/utils/user_id.js.map +1 -0
- package/dist/src/utils/user_id.test.d.ts +6 -0
- package/dist/src/utils/user_id.test.js +21 -0
- package/dist/src/utils/user_id.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import { detect as chardetDetect } from 'chardet';
|
|
10
|
+
// Mock dependencies
|
|
11
|
+
vi.mock('child_process');
|
|
12
|
+
vi.mock('os');
|
|
13
|
+
vi.mock('chardet');
|
|
14
|
+
// Import the functions we want to test after refactoring
|
|
15
|
+
import { getCachedEncodingForBuffer, getSystemEncoding, windowsCodePageToEncoding, detectEncodingFromBuffer, resetEncodingCache, } from './systemEncoding.js';
|
|
16
|
+
describe('Shell Command Processor - Encoding Functions', () => {
|
|
17
|
+
let consoleWarnSpy;
|
|
18
|
+
let mockedExecSync;
|
|
19
|
+
let mockedOsPlatform;
|
|
20
|
+
let mockedChardetDetect;
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
23
|
+
mockedExecSync = vi.mocked(execSync);
|
|
24
|
+
mockedOsPlatform = vi.mocked(os.platform);
|
|
25
|
+
mockedChardetDetect = vi.mocked(chardetDetect);
|
|
26
|
+
// Reset the encoding cache before each test
|
|
27
|
+
resetEncodingCache();
|
|
28
|
+
// Clear environment variables that might affect tests
|
|
29
|
+
delete process.env.LC_ALL;
|
|
30
|
+
delete process.env.LC_CTYPE;
|
|
31
|
+
delete process.env.LANG;
|
|
32
|
+
});
|
|
33
|
+
afterEach(() => {
|
|
34
|
+
vi.restoreAllMocks();
|
|
35
|
+
resetEncodingCache();
|
|
36
|
+
});
|
|
37
|
+
describe('windowsCodePageToEncoding', () => {
|
|
38
|
+
it('should map common Windows code pages correctly', () => {
|
|
39
|
+
expect(windowsCodePageToEncoding(437)).toBe('cp437');
|
|
40
|
+
expect(windowsCodePageToEncoding(850)).toBe('cp850');
|
|
41
|
+
expect(windowsCodePageToEncoding(65001)).toBe('utf-8');
|
|
42
|
+
expect(windowsCodePageToEncoding(1252)).toBe('windows-1252');
|
|
43
|
+
expect(windowsCodePageToEncoding(932)).toBe('shift_jis');
|
|
44
|
+
expect(windowsCodePageToEncoding(936)).toBe('gb2312');
|
|
45
|
+
expect(windowsCodePageToEncoding(949)).toBe('euc-kr');
|
|
46
|
+
expect(windowsCodePageToEncoding(950)).toBe('big5');
|
|
47
|
+
expect(windowsCodePageToEncoding(1200)).toBe('utf-16le');
|
|
48
|
+
expect(windowsCodePageToEncoding(1201)).toBe('utf-16be');
|
|
49
|
+
});
|
|
50
|
+
it('should return null for unmapped code pages and warn', () => {
|
|
51
|
+
expect(windowsCodePageToEncoding(99999)).toBe(null);
|
|
52
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith('Unable to determine encoding for windows code page 99999.');
|
|
53
|
+
});
|
|
54
|
+
it('should handle all Windows-specific code pages', () => {
|
|
55
|
+
expect(windowsCodePageToEncoding(874)).toBe('windows-874');
|
|
56
|
+
expect(windowsCodePageToEncoding(1250)).toBe('windows-1250');
|
|
57
|
+
expect(windowsCodePageToEncoding(1251)).toBe('windows-1251');
|
|
58
|
+
expect(windowsCodePageToEncoding(1253)).toBe('windows-1253');
|
|
59
|
+
expect(windowsCodePageToEncoding(1254)).toBe('windows-1254');
|
|
60
|
+
expect(windowsCodePageToEncoding(1255)).toBe('windows-1255');
|
|
61
|
+
expect(windowsCodePageToEncoding(1256)).toBe('windows-1256');
|
|
62
|
+
expect(windowsCodePageToEncoding(1257)).toBe('windows-1257');
|
|
63
|
+
expect(windowsCodePageToEncoding(1258)).toBe('windows-1258');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('detectEncodingFromBuffer', () => {
|
|
67
|
+
it('should detect encoding using chardet successfully', () => {
|
|
68
|
+
const buffer = Buffer.from('test content', 'utf8');
|
|
69
|
+
mockedChardetDetect.mockReturnValue('UTF-8');
|
|
70
|
+
const result = detectEncodingFromBuffer(buffer);
|
|
71
|
+
expect(result).toBe('utf-8');
|
|
72
|
+
expect(mockedChardetDetect).toHaveBeenCalledWith(buffer);
|
|
73
|
+
});
|
|
74
|
+
it('should handle chardet returning mixed case encoding', () => {
|
|
75
|
+
const buffer = Buffer.from('test content', 'utf8');
|
|
76
|
+
mockedChardetDetect.mockReturnValue('ISO-8859-1');
|
|
77
|
+
const result = detectEncodingFromBuffer(buffer);
|
|
78
|
+
expect(result).toBe('iso-8859-1');
|
|
79
|
+
});
|
|
80
|
+
it('should return null when chardet fails', () => {
|
|
81
|
+
const buffer = Buffer.from('test content', 'utf8');
|
|
82
|
+
mockedChardetDetect.mockImplementation(() => {
|
|
83
|
+
throw new Error('Detection failed');
|
|
84
|
+
});
|
|
85
|
+
const result = detectEncodingFromBuffer(buffer);
|
|
86
|
+
expect(result).toBe(null);
|
|
87
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith('Failed to detect encoding with chardet:', expect.any(Error));
|
|
88
|
+
});
|
|
89
|
+
it('should return null when chardet returns null', () => {
|
|
90
|
+
const buffer = Buffer.from('test content', 'utf8');
|
|
91
|
+
mockedChardetDetect.mockReturnValue(null);
|
|
92
|
+
const result = detectEncodingFromBuffer(buffer);
|
|
93
|
+
expect(result).toBe(null);
|
|
94
|
+
});
|
|
95
|
+
it('should return null when chardet returns non-string', () => {
|
|
96
|
+
const buffer = Buffer.from('test content', 'utf8');
|
|
97
|
+
mockedChardetDetect.mockReturnValue([
|
|
98
|
+
'utf-8',
|
|
99
|
+
'iso-8859-1',
|
|
100
|
+
]);
|
|
101
|
+
const result = detectEncodingFromBuffer(buffer);
|
|
102
|
+
expect(result).toBe(null);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe('getSystemEncoding - Windows', () => {
|
|
106
|
+
beforeEach(() => {
|
|
107
|
+
mockedOsPlatform.mockReturnValue('win32');
|
|
108
|
+
});
|
|
109
|
+
it('should parse Windows chcp output correctly', () => {
|
|
110
|
+
mockedExecSync.mockReturnValue('Active code page: 65001');
|
|
111
|
+
const result = getSystemEncoding();
|
|
112
|
+
expect(result).toBe('utf-8');
|
|
113
|
+
expect(mockedExecSync).toHaveBeenCalledWith('chcp', { encoding: 'utf8' });
|
|
114
|
+
});
|
|
115
|
+
it('should handle different chcp output formats', () => {
|
|
116
|
+
mockedExecSync.mockReturnValue('Current code page: 1252');
|
|
117
|
+
const result = getSystemEncoding();
|
|
118
|
+
expect(result).toBe('windows-1252');
|
|
119
|
+
});
|
|
120
|
+
it('should handle chcp output with extra whitespace', () => {
|
|
121
|
+
mockedExecSync.mockReturnValue('Active code page: 437 ');
|
|
122
|
+
const result = getSystemEncoding();
|
|
123
|
+
expect(result).toBe('cp437');
|
|
124
|
+
});
|
|
125
|
+
it('should return null when chcp command fails', () => {
|
|
126
|
+
mockedExecSync.mockImplementation(() => {
|
|
127
|
+
throw new Error('Command failed');
|
|
128
|
+
});
|
|
129
|
+
const result = getSystemEncoding();
|
|
130
|
+
expect(result).toBe(null);
|
|
131
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining("Failed to get Windows code page using 'chcp' command"));
|
|
132
|
+
});
|
|
133
|
+
it('should return null when chcp output cannot be parsed', () => {
|
|
134
|
+
mockedExecSync.mockReturnValue('Unexpected output format');
|
|
135
|
+
const result = getSystemEncoding();
|
|
136
|
+
expect(result).toBe(null);
|
|
137
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining("Failed to get Windows code page using 'chcp' command"));
|
|
138
|
+
});
|
|
139
|
+
it('should return null when code page is not a number', () => {
|
|
140
|
+
mockedExecSync.mockReturnValue('Active code page: abc');
|
|
141
|
+
const result = getSystemEncoding();
|
|
142
|
+
expect(result).toBe(null);
|
|
143
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining("Failed to get Windows code page using 'chcp' command"));
|
|
144
|
+
});
|
|
145
|
+
it('should return null when code page maps to null', () => {
|
|
146
|
+
mockedExecSync.mockReturnValue('Active code page: 99999');
|
|
147
|
+
const result = getSystemEncoding();
|
|
148
|
+
expect(result).toBe(null);
|
|
149
|
+
// Should warn about unknown code page from windowsCodePageToEncoding
|
|
150
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith('Unable to determine encoding for windows code page 99999.');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
describe('getSystemEncoding - Unix-like', () => {
|
|
154
|
+
beforeEach(() => {
|
|
155
|
+
mockedOsPlatform.mockReturnValue('linux');
|
|
156
|
+
});
|
|
157
|
+
it('should parse locale from LC_ALL environment variable', () => {
|
|
158
|
+
process.env.LC_ALL = 'en_US.UTF-8';
|
|
159
|
+
const result = getSystemEncoding();
|
|
160
|
+
expect(result).toBe('utf-8');
|
|
161
|
+
});
|
|
162
|
+
it('should parse locale from LC_CTYPE when LC_ALL is not set', () => {
|
|
163
|
+
process.env.LC_CTYPE = 'fr_FR.ISO-8859-1';
|
|
164
|
+
const result = getSystemEncoding();
|
|
165
|
+
expect(result).toBe('iso-8859-1');
|
|
166
|
+
});
|
|
167
|
+
it('should parse locale from LANG when LC_ALL and LC_CTYPE are not set', () => {
|
|
168
|
+
process.env.LANG = 'de_DE.UTF-8';
|
|
169
|
+
const result = getSystemEncoding();
|
|
170
|
+
expect(result).toBe('utf-8');
|
|
171
|
+
});
|
|
172
|
+
it('should handle locale charmap command when environment variables are empty', () => {
|
|
173
|
+
mockedExecSync.mockReturnValue('UTF-8\n');
|
|
174
|
+
const result = getSystemEncoding();
|
|
175
|
+
expect(result).toBe('utf-8');
|
|
176
|
+
expect(mockedExecSync).toHaveBeenCalledWith('locale charmap', {
|
|
177
|
+
encoding: 'utf8',
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
it('should handle locale charmap with mixed case', () => {
|
|
181
|
+
mockedExecSync.mockReturnValue('ISO-8859-1\n');
|
|
182
|
+
const result = getSystemEncoding();
|
|
183
|
+
expect(result).toBe('iso-8859-1');
|
|
184
|
+
});
|
|
185
|
+
it('should return null when locale charmap fails', () => {
|
|
186
|
+
mockedExecSync.mockImplementation(() => {
|
|
187
|
+
throw new Error('Command failed');
|
|
188
|
+
});
|
|
189
|
+
const result = getSystemEncoding();
|
|
190
|
+
expect(result).toBe(null);
|
|
191
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith('Failed to get locale charmap.');
|
|
192
|
+
});
|
|
193
|
+
it('should handle locale without encoding (no dot)', () => {
|
|
194
|
+
process.env.LANG = 'C';
|
|
195
|
+
const result = getSystemEncoding();
|
|
196
|
+
expect(result).toBe('c');
|
|
197
|
+
});
|
|
198
|
+
it('should handle empty locale environment variables', () => {
|
|
199
|
+
process.env.LC_ALL = '';
|
|
200
|
+
process.env.LC_CTYPE = '';
|
|
201
|
+
process.env.LANG = '';
|
|
202
|
+
mockedExecSync.mockReturnValue('UTF-8');
|
|
203
|
+
const result = getSystemEncoding();
|
|
204
|
+
expect(result).toBe('utf-8');
|
|
205
|
+
});
|
|
206
|
+
it('should return locale as-is when locale format has no dot', () => {
|
|
207
|
+
process.env.LANG = 'invalid_format';
|
|
208
|
+
const result = getSystemEncoding();
|
|
209
|
+
expect(result).toBe('invalid_format');
|
|
210
|
+
});
|
|
211
|
+
it('should prioritize LC_ALL over other environment variables', () => {
|
|
212
|
+
process.env.LC_ALL = 'en_US.UTF-8';
|
|
213
|
+
process.env.LC_CTYPE = 'fr_FR.ISO-8859-1';
|
|
214
|
+
process.env.LANG = 'de_DE.CP1252';
|
|
215
|
+
const result = getSystemEncoding();
|
|
216
|
+
expect(result).toBe('utf-8');
|
|
217
|
+
});
|
|
218
|
+
it('should prioritize LC_CTYPE over LANG', () => {
|
|
219
|
+
process.env.LC_CTYPE = 'fr_FR.ISO-8859-1';
|
|
220
|
+
process.env.LANG = 'de_DE.CP1252';
|
|
221
|
+
const result = getSystemEncoding();
|
|
222
|
+
expect(result).toBe('iso-8859-1');
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
describe('getEncodingForBuffer', () => {
|
|
226
|
+
beforeEach(() => {
|
|
227
|
+
mockedOsPlatform.mockReturnValue('linux');
|
|
228
|
+
});
|
|
229
|
+
it('should use cached system encoding on subsequent calls', () => {
|
|
230
|
+
process.env.LANG = 'en_US.UTF-8';
|
|
231
|
+
const buffer = Buffer.from('test');
|
|
232
|
+
// First call
|
|
233
|
+
const result1 = getCachedEncodingForBuffer(buffer);
|
|
234
|
+
expect(result1).toBe('utf-8');
|
|
235
|
+
// Change environment (should not affect cached result)
|
|
236
|
+
process.env.LANG = 'fr_FR.ISO-8859-1';
|
|
237
|
+
// Second call should use cached value
|
|
238
|
+
const result2 = getCachedEncodingForBuffer(buffer);
|
|
239
|
+
expect(result2).toBe('utf-8');
|
|
240
|
+
});
|
|
241
|
+
it('should fall back to buffer detection when system encoding fails', () => {
|
|
242
|
+
// No environment variables set
|
|
243
|
+
mockedExecSync.mockImplementation(() => {
|
|
244
|
+
throw new Error('locale command failed');
|
|
245
|
+
});
|
|
246
|
+
const buffer = Buffer.from('test');
|
|
247
|
+
mockedChardetDetect.mockReturnValue('ISO-8859-1');
|
|
248
|
+
const result = getCachedEncodingForBuffer(buffer);
|
|
249
|
+
expect(result).toBe('iso-8859-1');
|
|
250
|
+
expect(mockedChardetDetect).toHaveBeenCalledWith(buffer);
|
|
251
|
+
});
|
|
252
|
+
it('should fall back to utf-8 when both system and buffer detection fail', () => {
|
|
253
|
+
// System encoding fails
|
|
254
|
+
mockedExecSync.mockImplementation(() => {
|
|
255
|
+
throw new Error('locale command failed');
|
|
256
|
+
});
|
|
257
|
+
// Buffer detection fails
|
|
258
|
+
mockedChardetDetect.mockImplementation(() => {
|
|
259
|
+
throw new Error('chardet failed');
|
|
260
|
+
});
|
|
261
|
+
const buffer = Buffer.from('test');
|
|
262
|
+
const result = getCachedEncodingForBuffer(buffer);
|
|
263
|
+
expect(result).toBe('utf-8');
|
|
264
|
+
});
|
|
265
|
+
it('should not cache buffer detection results', () => {
|
|
266
|
+
// System encoding fails initially
|
|
267
|
+
mockedExecSync.mockImplementation(() => {
|
|
268
|
+
throw new Error('locale command failed');
|
|
269
|
+
});
|
|
270
|
+
const buffer1 = Buffer.from('test1');
|
|
271
|
+
const buffer2 = Buffer.from('test2');
|
|
272
|
+
mockedChardetDetect
|
|
273
|
+
.mockReturnValueOnce('ISO-8859-1')
|
|
274
|
+
.mockReturnValueOnce('UTF-16');
|
|
275
|
+
const result1 = getCachedEncodingForBuffer(buffer1);
|
|
276
|
+
const result2 = getCachedEncodingForBuffer(buffer2);
|
|
277
|
+
expect(result1).toBe('iso-8859-1');
|
|
278
|
+
expect(result2).toBe('utf-16');
|
|
279
|
+
expect(mockedChardetDetect).toHaveBeenCalledTimes(2);
|
|
280
|
+
});
|
|
281
|
+
it('should handle Windows system encoding', () => {
|
|
282
|
+
mockedOsPlatform.mockReturnValue('win32');
|
|
283
|
+
mockedExecSync.mockReturnValue('Active code page: 1252');
|
|
284
|
+
const buffer = Buffer.from('test');
|
|
285
|
+
const result = getCachedEncodingForBuffer(buffer);
|
|
286
|
+
expect(result).toBe('windows-1252');
|
|
287
|
+
});
|
|
288
|
+
it('should cache null system encoding result', () => {
|
|
289
|
+
// Reset the cache specifically for this test
|
|
290
|
+
resetEncodingCache();
|
|
291
|
+
// Ensure we're on Unix-like for this test
|
|
292
|
+
mockedOsPlatform.mockReturnValue('linux');
|
|
293
|
+
// System encoding detection returns null
|
|
294
|
+
mockedExecSync.mockImplementation(() => {
|
|
295
|
+
throw new Error('locale command failed');
|
|
296
|
+
});
|
|
297
|
+
const buffer1 = Buffer.from('test1');
|
|
298
|
+
const buffer2 = Buffer.from('test2');
|
|
299
|
+
mockedChardetDetect
|
|
300
|
+
.mockReturnValueOnce('ISO-8859-1')
|
|
301
|
+
.mockReturnValueOnce('UTF-16');
|
|
302
|
+
// Clear any previous calls from beforeEach setup or previous tests
|
|
303
|
+
mockedExecSync.mockClear();
|
|
304
|
+
const result1 = getCachedEncodingForBuffer(buffer1);
|
|
305
|
+
const result2 = getCachedEncodingForBuffer(buffer2);
|
|
306
|
+
// Should call execSync only once due to caching (null result is cached)
|
|
307
|
+
expect(mockedExecSync).toHaveBeenCalledTimes(1);
|
|
308
|
+
expect(result1).toBe('iso-8859-1');
|
|
309
|
+
expect(result2).toBe('utf-16');
|
|
310
|
+
// Call a third time to verify cache is still used
|
|
311
|
+
const buffer3 = Buffer.from('test3');
|
|
312
|
+
mockedChardetDetect.mockReturnValueOnce('UTF-32');
|
|
313
|
+
const result3 = getCachedEncodingForBuffer(buffer3);
|
|
314
|
+
// Still should be only one call to execSync
|
|
315
|
+
expect(mockedExecSync).toHaveBeenCalledTimes(1);
|
|
316
|
+
expect(result3).toBe('utf-32');
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
describe('Cross-platform behavior', () => {
|
|
320
|
+
it('should work correctly on macOS', () => {
|
|
321
|
+
mockedOsPlatform.mockReturnValue('darwin');
|
|
322
|
+
process.env.LANG = 'en_US.UTF-8';
|
|
323
|
+
const result = getSystemEncoding();
|
|
324
|
+
expect(result).toBe('utf-8');
|
|
325
|
+
});
|
|
326
|
+
it('should work correctly on other Unix-like systems', () => {
|
|
327
|
+
mockedOsPlatform.mockReturnValue('freebsd');
|
|
328
|
+
process.env.LANG = 'en_US.UTF-8';
|
|
329
|
+
const result = getSystemEncoding();
|
|
330
|
+
expect(result).toBe('utf-8');
|
|
331
|
+
});
|
|
332
|
+
it('should handle unknown platforms as Unix-like', () => {
|
|
333
|
+
mockedOsPlatform.mockReturnValue('unknown');
|
|
334
|
+
process.env.LANG = 'en_US.UTF-8';
|
|
335
|
+
const result = getSystemEncoding();
|
|
336
|
+
expect(result).toBe('utf-8');
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
describe('Edge cases and error handling', () => {
|
|
340
|
+
it('should handle empty buffer gracefully', () => {
|
|
341
|
+
mockedOsPlatform.mockReturnValue('linux');
|
|
342
|
+
process.env.LANG = 'en_US.UTF-8';
|
|
343
|
+
const buffer = Buffer.alloc(0);
|
|
344
|
+
const result = getCachedEncodingForBuffer(buffer);
|
|
345
|
+
expect(result).toBe('utf-8');
|
|
346
|
+
});
|
|
347
|
+
it('should handle very large buffers', () => {
|
|
348
|
+
mockedOsPlatform.mockReturnValue('linux');
|
|
349
|
+
process.env.LANG = 'en_US.UTF-8';
|
|
350
|
+
const buffer = Buffer.alloc(1024 * 1024, 'a');
|
|
351
|
+
const result = getCachedEncodingForBuffer(buffer);
|
|
352
|
+
expect(result).toBe('utf-8');
|
|
353
|
+
});
|
|
354
|
+
it('should handle Unicode content', () => {
|
|
355
|
+
mockedOsPlatform.mockReturnValue('linux');
|
|
356
|
+
const unicodeText = '你好世界 🌍 ñoño';
|
|
357
|
+
// System encoding fails
|
|
358
|
+
mockedExecSync.mockImplementation(() => {
|
|
359
|
+
throw new Error('locale command failed');
|
|
360
|
+
});
|
|
361
|
+
mockedChardetDetect.mockReturnValue('UTF-8');
|
|
362
|
+
const buffer = Buffer.from(unicodeText, 'utf8');
|
|
363
|
+
const result = getCachedEncodingForBuffer(buffer);
|
|
364
|
+
expect(result).toBe('utf-8');
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
//# sourceMappingURL=systemEncoding.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemEncoding.test.js","sourceRoot":"","sources":["../../../src/utils/systemEncoding.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Check if we should simulate a 429 error for the current request
|
|
8
|
+
*/
|
|
9
|
+
export declare function shouldSimulate429(authType?: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Reset the request counter (useful for tests)
|
|
12
|
+
*/
|
|
13
|
+
export declare function resetRequestCounter(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Disable 429 simulation after successful fallback
|
|
16
|
+
*/
|
|
17
|
+
export declare function disableSimulationAfterFallback(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Create a simulated 429 error response
|
|
20
|
+
*/
|
|
21
|
+
export declare function createSimulated429Error(): Error;
|
|
22
|
+
/**
|
|
23
|
+
* Reset simulation state when switching auth methods
|
|
24
|
+
*/
|
|
25
|
+
export declare function resetSimulationState(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Enable/disable 429 simulation programmatically (for tests)
|
|
28
|
+
*/
|
|
29
|
+
export declare function setSimulate429(enabled: boolean, afterRequests?: number, forAuthType?: string): void;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Testing utilities for simulating 429 errors in unit tests
|
|
8
|
+
*/
|
|
9
|
+
let requestCounter = 0;
|
|
10
|
+
let simulate429Enabled = false;
|
|
11
|
+
let simulate429AfterRequests = 0;
|
|
12
|
+
let simulate429ForAuthType;
|
|
13
|
+
let fallbackOccurred = false;
|
|
14
|
+
/**
|
|
15
|
+
* Check if we should simulate a 429 error for the current request
|
|
16
|
+
*/
|
|
17
|
+
export function shouldSimulate429(authType) {
|
|
18
|
+
if (!simulate429Enabled || fallbackOccurred) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
// If auth type filter is set, only simulate for that auth type
|
|
22
|
+
if (simulate429ForAuthType && authType !== simulate429ForAuthType) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
requestCounter++;
|
|
26
|
+
// If afterRequests is set, only simulate after that many requests
|
|
27
|
+
if (simulate429AfterRequests > 0) {
|
|
28
|
+
return requestCounter > simulate429AfterRequests;
|
|
29
|
+
}
|
|
30
|
+
// Otherwise, simulate for every request
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Reset the request counter (useful for tests)
|
|
35
|
+
*/
|
|
36
|
+
export function resetRequestCounter() {
|
|
37
|
+
requestCounter = 0;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Disable 429 simulation after successful fallback
|
|
41
|
+
*/
|
|
42
|
+
export function disableSimulationAfterFallback() {
|
|
43
|
+
fallbackOccurred = true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a simulated 429 error response
|
|
47
|
+
*/
|
|
48
|
+
export function createSimulated429Error() {
|
|
49
|
+
const error = new Error('Rate limit exceeded (simulated)');
|
|
50
|
+
error.status = 429;
|
|
51
|
+
return error;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reset simulation state when switching auth methods
|
|
55
|
+
*/
|
|
56
|
+
export function resetSimulationState() {
|
|
57
|
+
fallbackOccurred = false;
|
|
58
|
+
resetRequestCounter();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Enable/disable 429 simulation programmatically (for tests)
|
|
62
|
+
*/
|
|
63
|
+
export function setSimulate429(enabled, afterRequests = 0, forAuthType) {
|
|
64
|
+
simulate429Enabled = enabled;
|
|
65
|
+
simulate429AfterRequests = afterRequests;
|
|
66
|
+
simulate429ForAuthType = forAuthType;
|
|
67
|
+
fallbackOccurred = false; // Reset fallback state when simulation is re-enabled
|
|
68
|
+
resetRequestCounter();
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=testUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testUtils.js","sourceRoot":"","sources":["../../../src/utils/testUtils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AAEH,IAAI,cAAc,GAAG,CAAC,CAAC;AACvB,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,IAAI,wBAAwB,GAAG,CAAC,CAAC;AACjC,IAAI,sBAA0C,CAAC;AAC/C,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IACjD,IAAI,CAAC,kBAAkB,IAAI,gBAAgB,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,IAAI,sBAAsB,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,cAAc,EAAE,CAAC;IAEjB,kEAAkE;IAClE,IAAI,wBAAwB,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,cAAc,GAAG,wBAAwB,CAAC;IACnD,CAAC;IAED,wCAAwC;IACxC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,cAAc,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B;IAC5C,gBAAgB,GAAG,IAAI,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,iCAAiC,CAExD,CAAC;IACF,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,gBAAgB,GAAG,KAAK,CAAC;IACzB,mBAAmB,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,aAAa,GAAG,CAAC,EACjB,WAAoB;IAEpB,kBAAkB,GAAG,OAAO,CAAC;IAC7B,wBAAwB,GAAG,aAAa,CAAC;IACzC,sBAAsB,GAAG,WAAW,CAAC;IACrC,gBAAgB,GAAG,KAAK,CAAC,CAAC,qDAAqD;IAC/E,mBAAmB,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export declare function cacheGoogleAccount(email: string): Promise<void>;
|
|
7
|
+
export declare function getCachedGoogleAccount(): string | null;
|
|
8
|
+
export declare function getLifetimeGoogleAccounts(): number;
|
|
9
|
+
export declare function clearCachedGoogleAccount(): Promise<void>;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { promises as fsp, existsSync, readFileSync } from 'node:fs';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import { GEMINI_DIR, GOOGLE_ACCOUNTS_FILENAME } from './paths.js';
|
|
10
|
+
function getGoogleAccountsCachePath() {
|
|
11
|
+
return path.join(os.homedir(), GEMINI_DIR, GOOGLE_ACCOUNTS_FILENAME);
|
|
12
|
+
}
|
|
13
|
+
async function readAccounts(filePath) {
|
|
14
|
+
try {
|
|
15
|
+
const content = await fsp.readFile(filePath, 'utf-8');
|
|
16
|
+
if (!content.trim()) {
|
|
17
|
+
return { active: null, old: [] };
|
|
18
|
+
}
|
|
19
|
+
return JSON.parse(content);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
23
|
+
// File doesn't exist, which is fine.
|
|
24
|
+
return { active: null, old: [] };
|
|
25
|
+
}
|
|
26
|
+
// File is corrupted or not valid JSON, start with a fresh object.
|
|
27
|
+
console.debug('Could not parse accounts file, starting fresh.', error);
|
|
28
|
+
return { active: null, old: [] };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function cacheGoogleAccount(email) {
|
|
32
|
+
const filePath = getGoogleAccountsCachePath();
|
|
33
|
+
await fsp.mkdir(path.dirname(filePath), { recursive: true });
|
|
34
|
+
const accounts = await readAccounts(filePath);
|
|
35
|
+
if (accounts.active && accounts.active !== email) {
|
|
36
|
+
if (!accounts.old.includes(accounts.active)) {
|
|
37
|
+
accounts.old.push(accounts.active);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// If the new email was in the old list, remove it
|
|
41
|
+
accounts.old = accounts.old.filter((oldEmail) => oldEmail !== email);
|
|
42
|
+
accounts.active = email;
|
|
43
|
+
await fsp.writeFile(filePath, JSON.stringify(accounts, null, 2), 'utf-8');
|
|
44
|
+
}
|
|
45
|
+
export function getCachedGoogleAccount() {
|
|
46
|
+
try {
|
|
47
|
+
const filePath = getGoogleAccountsCachePath();
|
|
48
|
+
if (existsSync(filePath)) {
|
|
49
|
+
const content = readFileSync(filePath, 'utf-8').trim();
|
|
50
|
+
if (!content) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const accounts = JSON.parse(content);
|
|
54
|
+
return accounts.active;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
console.debug('Error reading cached Google Account:', error);
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function getLifetimeGoogleAccounts() {
|
|
64
|
+
try {
|
|
65
|
+
const filePath = getGoogleAccountsCachePath();
|
|
66
|
+
if (!existsSync(filePath)) {
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
const content = readFileSync(filePath, 'utf-8').trim();
|
|
70
|
+
if (!content) {
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
const accounts = JSON.parse(content);
|
|
74
|
+
let count = accounts.old.length;
|
|
75
|
+
if (accounts.active) {
|
|
76
|
+
count++;
|
|
77
|
+
}
|
|
78
|
+
return count;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.debug('Error reading lifetime Google Accounts:', error);
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function clearCachedGoogleAccount() {
|
|
86
|
+
const filePath = getGoogleAccountsCachePath();
|
|
87
|
+
if (!existsSync(filePath)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const accounts = await readAccounts(filePath);
|
|
91
|
+
if (accounts.active) {
|
|
92
|
+
if (!accounts.old.includes(accounts.active)) {
|
|
93
|
+
accounts.old.push(accounts.active);
|
|
94
|
+
}
|
|
95
|
+
accounts.active = null;
|
|
96
|
+
}
|
|
97
|
+
await fsp.writeFile(filePath, JSON.stringify(accounts, null, 2), 'utf-8');
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=user_account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_account.js","sourceRoot":"","sources":["../../../src/utils/user_account.ts"],"names":[],"mappings":"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"}
|