@machina.ai/cell-cli-core 1.6.1-rc2 → 1.10.0-rc1
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/index.d.ts +4 -3
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/agents/codebase-investigator.d.ts +46 -0
- package/dist/src/agents/codebase-investigator.js +135 -0
- package/dist/src/agents/codebase-investigator.js.map +1 -0
- package/dist/src/agents/executor.d.ts +92 -0
- package/dist/src/agents/executor.js +579 -0
- package/dist/src/agents/executor.js.map +1 -0
- package/dist/src/agents/executor.test.d.ts +6 -0
- package/dist/src/agents/executor.test.js +680 -0
- package/dist/src/agents/executor.test.js.map +1 -0
- package/dist/src/agents/invocation.d.ts +46 -0
- package/dist/src/agents/invocation.js +102 -0
- package/dist/src/agents/invocation.js.map +1 -0
- package/dist/src/agents/invocation.test.d.ts +6 -0
- package/dist/src/agents/invocation.test.js +215 -0
- package/dist/src/agents/invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +36 -0
- package/dist/src/agents/registry.js +81 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/agents/registry.test.d.ts +6 -0
- package/dist/src/agents/registry.test.js +146 -0
- package/dist/src/agents/registry.test.js.map +1 -0
- package/dist/src/agents/schema-utils.d.ts +39 -0
- package/dist/src/agents/schema-utils.js +57 -0
- package/dist/src/agents/schema-utils.js.map +1 -0
- package/dist/src/agents/schema-utils.test.d.ts +6 -0
- package/dist/src/agents/schema-utils.test.js +144 -0
- package/dist/src/agents/schema-utils.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +38 -0
- package/dist/src/agents/subagent-tool-wrapper.js +48 -0
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.test.d.ts +6 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js +112 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +145 -0
- package/dist/src/agents/types.js +18 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/agents/utils.d.ts +15 -0
- package/dist/src/agents/utils.js +29 -0
- package/dist/src/agents/utils.js.map +1 -0
- package/dist/src/agents/utils.test.d.ts +6 -0
- package/dist/src/agents/utils.test.js +87 -0
- package/dist/src/agents/utils.test.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.js +1 -1
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +14 -13
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +4 -2
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/config.d.ts +61 -15
- package/dist/src/config/config.js +132 -28
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +67 -3
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/constants.d.ts +11 -0
- package/dist/src/config/constants.js +16 -0
- package/dist/src/config/constants.js.map +1 -0
- package/dist/src/config/storage.d.ts +0 -1
- package/dist/src/config/storage.js +2 -2
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +7 -6
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +4 -0
- package/dist/src/core/baseLlmClient.js +24 -23
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +76 -13
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -3
- package/dist/src/core/client.js +103 -64
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +470 -118
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +3 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +12 -12
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +260 -23
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +11 -14
- package/dist/src/core/geminiChat.js +80 -124
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +316 -239
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/logger.test.js +16 -16
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +3 -2
- package/dist/src/core/nonInteractiveToolExecutor.js +2 -2
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +19 -19
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +2 -1
- package/dist/src/core/prompts.js +53 -111
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +83 -29
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/subagent.js +1 -1
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +38 -12
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +15 -6
- package/dist/src/core/turn.js +14 -13
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +14 -2
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +45 -14
- package/dist/src/ide/detect-ide.js +32 -69
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +40 -46
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +4 -4
- package/dist/src/ide/ide-client.js +33 -32
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +12 -25
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +2 -2
- package/dist/src/ide/ide-installer.js +8 -10
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +33 -14
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/process-utils.js +85 -75
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.js +83 -90
- package/dist/src/ide/process-utils.test.js.map +1 -1
- package/dist/src/index.d.ts +7 -2
- package/dist/src/index.js +7 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +4 -1
- package/dist/src/mcp/oauth-provider.js +31 -25
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +33 -0
- package/dist/src/mcp/sa-impersonation-provider.js +130 -0
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
- package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js.map +1 -0
- package/dist/src/mcp/token-storage/file-token-storage.js +2 -1
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.test.js +4 -3
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
- package/dist/src/policy/policy-engine.js +11 -2
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +45 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/routing/strategies/compositeStrategy.js +4 -3
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +3 -2
- package/dist/src/services/chatRecordingService.js +3 -2
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/fileSystemService.d.ts +9 -0
- package/dist/src/services/fileSystemService.js +11 -0
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +3 -0
- package/dist/src/services/shellExecutionService.js +165 -49
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +74 -5
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/activity-detector.d.ts +41 -0
- package/dist/src/telemetry/activity-detector.js +61 -0
- package/dist/src/telemetry/activity-detector.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
- package/dist/src/telemetry/activity-detector.test.js +136 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -0
- package/dist/src/telemetry/activity-types.d.ts +19 -0
- package/dist/src/telemetry/activity-types.js +21 -0
- package/dist/src/telemetry/activity-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +18 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +257 -108
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +258 -33
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +118 -100
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +146 -103
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +31 -0
- package/dist/src/telemetry/config.js +74 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/config.test.d.ts +6 -0
- package/dist/src/telemetry/config.test.js +124 -0
- package/dist/src/telemetry/config.test.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +0 -34
- package/dist/src/telemetry/constants.js +0 -34
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +9 -3
- package/dist/src/telemetry/index.js +19 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +10 -2
- package/dist/src/telemetry/loggers.js +206 -273
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +3 -3
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +316 -13
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.d.ts +149 -0
- package/dist/src/telemetry/memory-monitor.js +335 -0
- package/dist/src/telemetry/memory-monitor.js.map +1 -0
- package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
- package/dist/src/telemetry/memory-monitor.test.js +472 -0
- package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +436 -11
- package/dist/src/telemetry/metrics.js +600 -110
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +898 -16
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +1 -1
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +13 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
- package/dist/src/telemetry/telemetryAttributes.js +18 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +168 -5
- package/dist/src/telemetry/types.js +696 -34
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +2 -2
- package/dist/src/telemetry/uiTelemetry.js +3 -4
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +14 -14
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mock-tool.d.ts +28 -3
- package/dist/src/test-utils/mock-tool.js +71 -1
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/glob.js +4 -2
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/ls.js +1 -1
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -14
- package/dist/src/tools/mcp-client.js +51 -98
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +175 -157
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +1 -1
- package/dist/src/tools/memoryTool.js +1 -2
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +9 -8
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
- package/dist/src/tools/message-bus-integration.test.js +183 -0
- package/dist/src/tools/message-bus-integration.test.js.map +1 -0
- package/dist/src/tools/shell.js +60 -4
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +2 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +1 -1
- package/dist/src/tools/smart-edit.js +116 -12
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +91 -29
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +22 -0
- package/dist/src/tools/tool-error.js +28 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +9 -0
- package/dist/src/tools/tool-names.js +18 -0
- package/dist/src/tools/tool-names.js.map +1 -0
- package/dist/src/tools/tool-registry.test.js +10 -10
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +11 -3
- package/dist/src/tools/tools.js +94 -3
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +7 -0
- package/dist/src/tools/web-fetch.js +42 -10
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +127 -8
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.js +2 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.js +2 -1
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +25 -0
- package/dist/src/tools/write-todos.js +151 -0
- package/dist/src/tools/write-todos.js.map +1 -0
- package/dist/src/tools/write-todos.test.d.ts +6 -0
- package/dist/src/tools/write-todos.test.js +89 -0
- package/dist/src/tools/write-todos.test.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +1 -1
- package/dist/src/utils/editCorrector.js +2 -2
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editor.js +1 -0
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +1 -0
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +2 -2
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/formatters.d.ts +1 -0
- package/dist/src/utils/formatters.js +2 -1
- package/dist/src/utils/formatters.js.map +1 -1
- package/dist/src/utils/formatters.test.d.ts +6 -0
- package/dist/src/utils/formatters.test.js +26 -0
- package/dist/src/utils/formatters.test.js.map +1 -0
- package/dist/src/utils/getFolderStructure.d.ts +1 -1
- package/dist/src/utils/getFolderStructure.js +1 -1
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +7 -6
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/installationManager.test.js +2 -1
- package/dist/src/utils/installationManager.test.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.js +14 -4
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +81 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +2 -1
- package/dist/src/utils/memoryDiscovery.js +3 -2
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +99 -21
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +13 -20
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +14 -0
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/pathCorrector.d.ts +25 -0
- package/dist/src/utils/pathCorrector.js +33 -0
- package/dist/src/utils/pathCorrector.js.map +1 -0
- package/dist/src/utils/pathCorrector.test.d.ts +6 -0
- package/dist/src/utils/pathCorrector.test.js +83 -0
- package/dist/src/utils/pathCorrector.test.js.map +1 -0
- package/dist/src/utils/retry.d.ts +4 -1
- package/dist/src/utils/retry.js +40 -17
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +104 -31
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +11 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/src/utils/schemaValidator.test.d.ts +6 -0
- package/dist/src/utils/schemaValidator.test.js +113 -0
- package/dist/src/utils/schemaValidator.test.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +1 -0
- package/dist/src/utils/shell-utils.js +6 -2
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +5 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/terminalSerializer.d.ts +1 -4
- package/dist/src/utils/terminalSerializer.js +3 -3
- package/dist/src/utils/terminalSerializer.js.map +1 -1
- package/dist/src/utils/thoughtUtils.d.ts +21 -0
- package/dist/src/utils/thoughtUtils.js +39 -0
- package/dist/src/utils/thoughtUtils.js.map +1 -0
- package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
- package/dist/src/utils/thoughtUtils.test.js +78 -0
- package/dist/src/utils/thoughtUtils.test.js.map +1 -0
- package/dist/src/utils/tool-utils.js +2 -2
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +8 -0
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/userAccountManager.test.js +2 -1
- package/dist/src/utils/userAccountManager.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/src/test-utils/tools.d.ts +0 -45
- package/dist/src/test-utils/tools.js +0 -105
- package/dist/src/test-utils/tools.js.map +0 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @fileoverview Defines the core configuration interfaces and types for the agent architecture.
|
|
8
|
+
*/
|
|
9
|
+
import type { Content, FunctionDeclaration } from '@google/genai';
|
|
10
|
+
import type { AnyDeclarativeTool } from '../tools/tools.js';
|
|
11
|
+
import { type z } from 'zod';
|
|
12
|
+
/**
|
|
13
|
+
* Describes the possible termination modes for an agent.
|
|
14
|
+
*/
|
|
15
|
+
export declare enum AgentTerminateMode {
|
|
16
|
+
ERROR = "ERROR",
|
|
17
|
+
TIMEOUT = "TIMEOUT",
|
|
18
|
+
GOAL = "GOAL",
|
|
19
|
+
MAX_TURNS = "MAX_TURNS",
|
|
20
|
+
ABORTED = "ABORTED"
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Represents the output structure of an agent's execution.
|
|
24
|
+
*/
|
|
25
|
+
export interface OutputObject {
|
|
26
|
+
result: string;
|
|
27
|
+
terminate_reason: AgentTerminateMode;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Represents the validated input parameters passed to an agent upon invocation.
|
|
31
|
+
* Used primarily for templating the system prompt. (Replaces ContextState)
|
|
32
|
+
*/
|
|
33
|
+
export type AgentInputs = Record<string, unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Structured events emitted during subagent execution for user observability.
|
|
36
|
+
*/
|
|
37
|
+
export interface SubagentActivityEvent {
|
|
38
|
+
isSubagentActivityEvent: true;
|
|
39
|
+
agentName: string;
|
|
40
|
+
type: 'TOOL_CALL_START' | 'TOOL_CALL_END' | 'THOUGHT_CHUNK' | 'ERROR';
|
|
41
|
+
data: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The definition for an agent.
|
|
45
|
+
* @template TOutput The specific Zod schema for the agent's final output object.
|
|
46
|
+
*/
|
|
47
|
+
export interface AgentDefinition<TOutput extends z.ZodTypeAny = z.ZodUnknown> {
|
|
48
|
+
/** Unique identifier for the agent. */
|
|
49
|
+
name: string;
|
|
50
|
+
displayName?: string;
|
|
51
|
+
description: string;
|
|
52
|
+
promptConfig: PromptConfig;
|
|
53
|
+
modelConfig: ModelConfig;
|
|
54
|
+
runConfig: RunConfig;
|
|
55
|
+
toolConfig?: ToolConfig;
|
|
56
|
+
outputConfig?: OutputConfig<TOutput>;
|
|
57
|
+
inputConfig: InputConfig;
|
|
58
|
+
/**
|
|
59
|
+
* An optional function to process the raw output from the agent's final tool
|
|
60
|
+
* call into a string format.
|
|
61
|
+
*
|
|
62
|
+
* @param output The raw output value from the `complete_task` tool, now strongly typed with TOutput.
|
|
63
|
+
* @returns A string representation of the final output.
|
|
64
|
+
*/
|
|
65
|
+
processOutput?: (output: z.infer<TOutput>) => string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Configures the initial prompt for the agent.
|
|
69
|
+
*/
|
|
70
|
+
export interface PromptConfig {
|
|
71
|
+
/**
|
|
72
|
+
* A single system prompt string. Supports templating using `${input_name}` syntax.
|
|
73
|
+
*/
|
|
74
|
+
systemPrompt?: string;
|
|
75
|
+
/**
|
|
76
|
+
* An array of user/model content pairs for few-shot prompting.
|
|
77
|
+
*/
|
|
78
|
+
initialMessages?: Content[];
|
|
79
|
+
/**
|
|
80
|
+
* The specific task or question to trigger the agent's execution loop.
|
|
81
|
+
* This is sent as the first user message, distinct from the systemPrompt (identity/rules)
|
|
82
|
+
* and initialMessages (history/few-shots). Supports templating.
|
|
83
|
+
* If not provided, a generic "Get Started!" message is used.
|
|
84
|
+
*/
|
|
85
|
+
query?: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Configures the tools available to the agent during its execution.
|
|
89
|
+
*/
|
|
90
|
+
export interface ToolConfig {
|
|
91
|
+
tools: Array<string | FunctionDeclaration | AnyDeclarativeTool>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Configures the expected inputs (parameters) for the agent.
|
|
95
|
+
*/
|
|
96
|
+
export interface InputConfig {
|
|
97
|
+
/**
|
|
98
|
+
* Defines the parameters the agent accepts.
|
|
99
|
+
* This is vital for generating the tool wrapper schema.
|
|
100
|
+
*/
|
|
101
|
+
inputs: Record<string, {
|
|
102
|
+
description: string;
|
|
103
|
+
type: 'string' | 'number' | 'boolean' | 'integer' | 'string[]' | 'number[]';
|
|
104
|
+
required: boolean;
|
|
105
|
+
}>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Configures the expected outputs for the agent.
|
|
109
|
+
*/
|
|
110
|
+
export interface OutputConfig<T extends z.ZodTypeAny> {
|
|
111
|
+
/**
|
|
112
|
+
* The name of the final result parameter. This will be the name of the
|
|
113
|
+
* argument in the `submit_final_output` tool (e.g., "report", "answer").
|
|
114
|
+
*/
|
|
115
|
+
outputName: string;
|
|
116
|
+
/**
|
|
117
|
+
* A description of the expected output. This will be used as the description
|
|
118
|
+
* for the tool argument.
|
|
119
|
+
*/
|
|
120
|
+
description: string;
|
|
121
|
+
/**
|
|
122
|
+
* Optional JSON schema for the output. If provided, it will be used as the
|
|
123
|
+
* schema for the tool's argument, allowing for structured output enforcement.
|
|
124
|
+
* Defaults to { type: 'string' }.
|
|
125
|
+
*/
|
|
126
|
+
schema: T;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Configures the generative model parameters for the agent.
|
|
130
|
+
*/
|
|
131
|
+
export interface ModelConfig {
|
|
132
|
+
model: string;
|
|
133
|
+
temp: number;
|
|
134
|
+
top_p: number;
|
|
135
|
+
thinkingBudget?: number;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Configures the execution environment and constraints for the agent.
|
|
139
|
+
*/
|
|
140
|
+
export interface RunConfig {
|
|
141
|
+
/** The maximum execution time for the agent in minutes. */
|
|
142
|
+
max_time_minutes: number;
|
|
143
|
+
/** The maximum number of conversational turns. */
|
|
144
|
+
max_turns?: number;
|
|
145
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import {} from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Describes the possible termination modes for an agent.
|
|
9
|
+
*/
|
|
10
|
+
export var AgentTerminateMode;
|
|
11
|
+
(function (AgentTerminateMode) {
|
|
12
|
+
AgentTerminateMode["ERROR"] = "ERROR";
|
|
13
|
+
AgentTerminateMode["TIMEOUT"] = "TIMEOUT";
|
|
14
|
+
AgentTerminateMode["GOAL"] = "GOAL";
|
|
15
|
+
AgentTerminateMode["MAX_TURNS"] = "MAX_TURNS";
|
|
16
|
+
AgentTerminateMode["ABORTED"] = "ABORTED";
|
|
17
|
+
})(AgentTerminateMode || (AgentTerminateMode = {}));
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EAAU,MAAM,KAAK,CAAC;AAE7B;;GAEG;AACH,MAAM,CAAN,IAAY,kBAMX;AAND,WAAY,kBAAkB;IAC5B,qCAAe,CAAA;IACf,yCAAmB,CAAA;IACnB,mCAAa,CAAA;IACb,6CAAuB,CAAA;IACvB,yCAAmB,CAAA;AACrB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,QAM7B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentInputs } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Replaces `${...}` placeholders in a template string with values from AgentInputs.
|
|
9
|
+
*
|
|
10
|
+
* @param template The template string containing placeholders.
|
|
11
|
+
* @param inputs The AgentInputs object providing placeholder values.
|
|
12
|
+
* @returns The populated string with all placeholders replaced.
|
|
13
|
+
* @throws {Error} if any placeholder key is not found in the inputs.
|
|
14
|
+
*/
|
|
15
|
+
export declare function templateString(template: string, inputs: AgentInputs): string;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Replaces `${...}` placeholders in a template string with values from AgentInputs.
|
|
8
|
+
*
|
|
9
|
+
* @param template The template string containing placeholders.
|
|
10
|
+
* @param inputs The AgentInputs object providing placeholder values.
|
|
11
|
+
* @returns The populated string with all placeholders replaced.
|
|
12
|
+
* @throws {Error} if any placeholder key is not found in the inputs.
|
|
13
|
+
*/
|
|
14
|
+
export function templateString(template, inputs) {
|
|
15
|
+
const placeholderRegex = /\$\{(\w+)\}/g;
|
|
16
|
+
// First, find all unique keys required by the template.
|
|
17
|
+
const requiredKeys = new Set(Array.from(template.matchAll(placeholderRegex), (match) => match[1]));
|
|
18
|
+
// Check if all required keys exist in the inputs.
|
|
19
|
+
const inputKeys = new Set(Object.keys(inputs));
|
|
20
|
+
const missingKeys = Array.from(requiredKeys).filter((key) => !inputKeys.has(key));
|
|
21
|
+
if (missingKeys.length > 0) {
|
|
22
|
+
// Enhanced error message showing both missing and available keys
|
|
23
|
+
throw new Error(`Template validation failed: Missing required input parameters: ${missingKeys.join(', ')}. ` +
|
|
24
|
+
`Available inputs: ${Object.keys(inputs).join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
// Perform the replacement using a replacer function.
|
|
27
|
+
return template.replace(placeholderRegex, (_match, key) => String(inputs[key]));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/agents/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,MAAmB;IAClE,MAAM,gBAAgB,GAAG,cAAc,CAAC;IAExC,wDAAwD;IACxD,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACrE,CAAC;IAEF,kDAAkD;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAC7B,CAAC;IAEF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,iEAAiE;QACjE,MAAM,IAAI,KAAK,CACb,kEAAkE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC1F,qBAAqB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxD,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,OAAO,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CACxD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { templateString } from './utils.js';
|
|
8
|
+
describe('templateString', () => {
|
|
9
|
+
it('should replace a single placeholder with a string value', () => {
|
|
10
|
+
const template = 'Hello, ${name}!';
|
|
11
|
+
const inputs = { name: 'World' };
|
|
12
|
+
const result = templateString(template, inputs);
|
|
13
|
+
expect(result).toBe('Hello, World!');
|
|
14
|
+
});
|
|
15
|
+
it('should replace multiple unique placeholders', () => {
|
|
16
|
+
const template = 'User: ${user}, Role: ${role}';
|
|
17
|
+
const inputs = { user: 'Alex', role: 'Admin' };
|
|
18
|
+
const result = templateString(template, inputs);
|
|
19
|
+
expect(result).toBe('User: Alex, Role: Admin');
|
|
20
|
+
});
|
|
21
|
+
it('should replace multiple instances of the same placeholder', () => {
|
|
22
|
+
const template = '${greeting}, ${user}. Welcome, ${user}!';
|
|
23
|
+
const inputs = { greeting: 'Hi', user: 'Sam' };
|
|
24
|
+
const result = templateString(template, inputs);
|
|
25
|
+
expect(result).toBe('Hi, Sam. Welcome, Sam!');
|
|
26
|
+
});
|
|
27
|
+
it('should handle various data types for input values', () => {
|
|
28
|
+
const template = 'Name: ${name}, Age: ${age}, Active: ${isActive}, Plan: ${plan}, Score: ${score}';
|
|
29
|
+
const inputs = {
|
|
30
|
+
name: 'Jo',
|
|
31
|
+
age: 30,
|
|
32
|
+
isActive: true,
|
|
33
|
+
plan: null,
|
|
34
|
+
score: undefined,
|
|
35
|
+
};
|
|
36
|
+
const result = templateString(template, inputs);
|
|
37
|
+
// All values are converted to their string representations
|
|
38
|
+
expect(result).toBe('Name: Jo, Age: 30, Active: true, Plan: null, Score: undefined');
|
|
39
|
+
});
|
|
40
|
+
it('should return the original string if no placeholders are present', () => {
|
|
41
|
+
const template = 'This is a plain string with no placeholders.';
|
|
42
|
+
const inputs = { key: 'value' };
|
|
43
|
+
const result = templateString(template, inputs);
|
|
44
|
+
expect(result).toBe('This is a plain string with no placeholders.');
|
|
45
|
+
});
|
|
46
|
+
it('should correctly handle an empty template string', () => {
|
|
47
|
+
const template = '';
|
|
48
|
+
const inputs = { key: 'value' };
|
|
49
|
+
const result = templateString(template, inputs);
|
|
50
|
+
expect(result).toBe('');
|
|
51
|
+
});
|
|
52
|
+
it('should ignore extra keys in the inputs object that are not in the template', () => {
|
|
53
|
+
const template = 'Hello, ${name}.';
|
|
54
|
+
const inputs = { name: 'Alice', extra: 'ignored' };
|
|
55
|
+
const result = templateString(template, inputs);
|
|
56
|
+
expect(result).toBe('Hello, Alice.');
|
|
57
|
+
});
|
|
58
|
+
it('should throw an error if a required key is missing from the inputs', () => {
|
|
59
|
+
const template = 'The goal is ${goal}.';
|
|
60
|
+
const inputs = { other_input: 'some value' };
|
|
61
|
+
expect(() => templateString(template, inputs)).toThrow('Template validation failed: Missing required input parameters: goal. Available inputs: other_input');
|
|
62
|
+
});
|
|
63
|
+
it('should throw an error listing all missing keys if multiple are missing', () => {
|
|
64
|
+
const template = 'Analyze ${file} with ${tool}.';
|
|
65
|
+
const inputs = { an_available_key: 'foo' };
|
|
66
|
+
// Using a regex to allow for any order of missing keys in the error message
|
|
67
|
+
expect(() => templateString(template, inputs)).toThrow(/Missing required input parameters: (file, tool|tool, file)/);
|
|
68
|
+
});
|
|
69
|
+
it('should be case-sensitive with placeholder keys', () => {
|
|
70
|
+
const template = 'Value: ${Key}';
|
|
71
|
+
const inputs = { key: 'some value' }; // 'key' is lowercase
|
|
72
|
+
expect(() => templateString(template, inputs)).toThrow('Template validation failed: Missing required input parameters: Key. Available inputs: key');
|
|
73
|
+
});
|
|
74
|
+
it('should not replace malformed or incomplete placeholders', () => {
|
|
75
|
+
const template = 'This is {not_a_placeholder} and this is $$escaped. Test: ${valid}';
|
|
76
|
+
const inputs = { valid: 'works' };
|
|
77
|
+
const result = templateString(template, inputs);
|
|
78
|
+
expect(result).toBe('This is {not_a_placeholder} and this is $$escaped. Test: works');
|
|
79
|
+
});
|
|
80
|
+
it('should work correctly with an empty inputs object if the template has no placeholders', () => {
|
|
81
|
+
const template = 'Static text.';
|
|
82
|
+
const inputs = {};
|
|
83
|
+
const result = templateString(template, inputs);
|
|
84
|
+
expect(result).toBe('Static text.');
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../../src/agents/utils.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,MAAM,MAAM,GAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,8BAA8B,CAAC;QAChD,MAAM,MAAM,GAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,QAAQ,GAAG,yCAAyC,CAAC;QAC3D,MAAM,MAAM,GAAgB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,QAAQ,GACZ,iFAAiF,CAAC;QACpF,MAAM,MAAM,GAAgB;YAC1B,IAAI,EAAE,IAAI;YACV,GAAG,EAAE,EAAE;YACP,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,SAAS;SACjB,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,2DAA2D;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACjB,+DAA+D,CAChE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,QAAQ,GAAG,8CAA8C,CAAC;QAChE,MAAM,MAAM,GAAgB,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,MAAM,GAAgB,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,MAAM,MAAM,GAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,QAAQ,GAAG,sBAAsB,CAAC;QACxC,MAAM,MAAM,GAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;QAE1D,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CACpD,oGAAoG,CACrG,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,QAAQ,GAAG,+BAA+B,CAAC;QACjD,MAAM,MAAM,GAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;QAExD,4EAA4E;QAC5E,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CACpD,4DAA4D,CAC7D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,QAAQ,GAAG,eAAe,CAAC;QACjC,MAAM,MAAM,GAAgB,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,qBAAqB;QAExE,MAAM,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CACpD,2FAA2F,CAC5F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,QAAQ,GACZ,mEAAmE,CAAC;QACtE,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACjB,gEAAgE,CACjE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAC/F,MAAM,QAAQ,GAAG,cAAc,CAAC;QAChC,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { OAUTH_FILE } from '../config/storage.js';
|
|
|
9
9
|
import * as path from 'node:path';
|
|
10
10
|
import * as os from 'node:os';
|
|
11
11
|
import { promises as fs } from 'node:fs';
|
|
12
|
-
|
|
12
|
+
import { CELL_DIR } from '../utils/paths.js';
|
|
13
13
|
const KEYCHAIN_SERVICE_NAME = 'gemini-cli-oauth';
|
|
14
14
|
const MAIN_ACCOUNT_KEY = 'main-account';
|
|
15
15
|
export class OAuthCredentialStorage {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-credential-storage.js","sourceRoot":"","sources":["../../../src/code_assist/oauth-credential-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth-credential-storage.js","sourceRoot":"","sources":["../../../src/code_assist/oauth-credential-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACjD,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAExC,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAC,OAAO,GAAuB,IAAI,kBAAkB,CACjE,qBAAqB,CACtB,CAAC;IAEF;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAExE,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC;gBACvB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,GAC9D,WAAW,CAAC,KAAK,CAAC;gBACpB,oEAAoE;gBACpE,MAAM,WAAW,GAAgB;oBAC/B,YAAY,EAAE,WAAW;oBACzB,aAAa,EAAE,YAAY,IAAI,SAAS;oBACxC,UAAU,EAAE,SAAS,IAAI,SAAS;oBAClC,KAAK,EAAE,KAAK,IAAI,SAAS;iBAC1B,CAAC;gBAEF,IAAI,SAAS,EAAE,CAAC;oBACd,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC;gBACtC,CAAC;gBAED,OAAO,WAAW,CAAC;YACrB,CAAC;YAED,uDAAuD;YACvD,OAAO,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAwB;QACnD,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,wDAAwD;QACxD,MAAM,cAAc,GAAqB;YACvC,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE;gBACL,WAAW,EAAE,WAAW,CAAC,YAAY;gBACrC,YAAY,EAAE,WAAW,CAAC,aAAa,IAAI,SAAS;gBACpD,SAAS,EAAE,WAAW,CAAC,UAAU,IAAI,QAAQ;gBAC7C,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,SAAS;gBACrC,SAAS,EAAE,WAAW,CAAC,WAAW,IAAI,SAAS;aAChD;YACD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,gBAAgB;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YAEvD,+CAA+C;YAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAClE,MAAM,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,KAAK,CAAC,sBAAsB;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAElE,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,KAAK,KAAK,IAAI;gBACd,MAAM,IAAI,KAAK;gBACf,KAAK,CAAC,IAAI,KAAK,QAAQ,EACvB,CAAC;gBACD,uCAAuC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,sCAAsC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAgB,CAAC;QAEzD,sBAAsB;QACtB,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAExC,6CAA6C;QAC7C,MAAM,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE1D,OAAO,WAAW,CAAC;IACrB,CAAC"}
|
|
@@ -45,7 +45,7 @@ describe('OAuthCredentialStorage', () => {
|
|
|
45
45
|
},
|
|
46
46
|
updatedAt: expect.any(Number),
|
|
47
47
|
};
|
|
48
|
-
const oldFilePath = '/mock/home/.
|
|
48
|
+
const oldFilePath = '/mock/home/.cell-cli/oauth.json';
|
|
49
49
|
beforeEach(() => {
|
|
50
50
|
vi.spyOn(mockHybridTokenStorage, 'getCredentials').mockResolvedValue(null);
|
|
51
51
|
vi.spyOn(mockHybridTokenStorage, 'setCredentials').mockResolvedValue(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-credential-storage.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth-credential-storage.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAoB,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AAEzC,6BAA6B;AAC7B,MAAM,sBAAsB,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/C,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;IACvB,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC3B,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC;CACxD,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;QACjB,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;KACZ;CACF,CAAC,CAAC,CAAC;AACJ,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAErB,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,MAAM,eAAe,GAAgB;QACnC,YAAY,EAAE,mBAAmB;QACjC,aAAa,EAAE,oBAAoB;QACnC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;QACrC,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,eAAe;KACvB,CAAC;IAEF,MAAM,kBAAkB,GAAqB;QAC3C,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE;YACL,WAAW,EAAE,mBAAmB;YAChC,YAAY,EAAE,oBAAoB;YAClC,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,eAAe,CAAC,WAAY;SACxC;QACD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;KAC9B,CAAC;IAEF,MAAM,WAAW,GAAG
|
|
1
|
+
{"version":3,"file":"oauth-credential-storage.test.js","sourceRoot":"","sources":["../../../src/code_assist/oauth-credential-storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ import * as os from 'node:os';
|
|
|
16
16
|
import { AuthType } from '../core/contentGenerator.js';
|
|
17
17
|
import readline from 'node:readline';
|
|
18
18
|
import { FORCE_ENCRYPTED_FILE_ENV_VAR } from '../mcp/token-storage/index.js';
|
|
19
|
+
import { CELL_DIR } from '../utils/paths.js';
|
|
19
20
|
vi.mock('os', async (importOriginal) => {
|
|
20
21
|
const os = await importOriginal();
|
|
21
22
|
return {
|
|
@@ -135,7 +136,7 @@ describe('oauth2', () => {
|
|
|
135
136
|
});
|
|
136
137
|
expect(mockSetCredentials).toHaveBeenCalledWith(mockTokens);
|
|
137
138
|
// Verify Google Account was cached
|
|
138
|
-
const googleAccountPath = path.join(tempHomeDir,
|
|
139
|
+
const googleAccountPath = path.join(tempHomeDir, CELL_DIR, 'google_accounts.json');
|
|
139
140
|
expect(fs.existsSync(googleAccountPath)).toBe(true);
|
|
140
141
|
const cachedGoogleAccount = fs.readFileSync(googleAccountPath, 'utf-8');
|
|
141
142
|
expect(JSON.parse(cachedGoogleAccount)).toEqual({
|
|
@@ -212,7 +213,7 @@ describe('oauth2', () => {
|
|
|
212
213
|
});
|
|
213
214
|
it('should attempt to load cached credentials first', async () => {
|
|
214
215
|
const cachedCreds = { refresh_token: 'cached-token' };
|
|
215
|
-
const credsPath = path.join(tempHomeDir,
|
|
216
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
216
217
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
217
218
|
await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
|
|
218
219
|
const mockClient = {
|
|
@@ -239,7 +240,7 @@ describe('oauth2', () => {
|
|
|
239
240
|
mockComputeClient.credentials = newCredentials;
|
|
240
241
|
mockGetAccessToken.mockResolvedValue({ token: 'new-adc-token' });
|
|
241
242
|
await getOauthClient(AuthType.CLOUD_SHELL, mockConfig);
|
|
242
|
-
const credsPath = path.join(tempHomeDir,
|
|
243
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
243
244
|
expect(fs.existsSync(credsPath)).toBe(false);
|
|
244
245
|
});
|
|
245
246
|
it('should return the Compute client on successful ADC authentication', async () => {
|
|
@@ -256,7 +257,7 @@ describe('oauth2', () => {
|
|
|
256
257
|
it('should prioritize default cached credentials over GOOGLE_APPLICATION_CREDENTIALS', async () => {
|
|
257
258
|
// Setup default cached credentials
|
|
258
259
|
const defaultCreds = { refresh_token: 'default-cached-token' };
|
|
259
|
-
const defaultCredsPath = path.join(tempHomeDir,
|
|
260
|
+
const defaultCredsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
260
261
|
await fs.promises.mkdir(path.dirname(defaultCredsPath), {
|
|
261
262
|
recursive: true,
|
|
262
263
|
});
|
|
@@ -330,7 +331,7 @@ describe('oauth2', () => {
|
|
|
330
331
|
},
|
|
331
332
|
});
|
|
332
333
|
// Verify Google Account was cached
|
|
333
|
-
const googleAccountPath = path.join(tempHomeDir,
|
|
334
|
+
const googleAccountPath = path.join(tempHomeDir, CELL_DIR, 'google_accounts.json');
|
|
334
335
|
const cachedContent = fs.readFileSync(googleAccountPath, 'utf-8');
|
|
335
336
|
expect(JSON.parse(cachedContent)).toEqual({
|
|
336
337
|
active: 'test-gcp-account@gmail.com',
|
|
@@ -353,7 +354,7 @@ describe('oauth2', () => {
|
|
|
353
354
|
OAuth2Client.mockImplementation(() => mockOAuth2Client);
|
|
354
355
|
// Make it fall through to cached credentials path
|
|
355
356
|
const cachedCreds = { refresh_token: 'cached-token' };
|
|
356
|
-
const credsPath = path.join(tempHomeDir,
|
|
357
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
357
358
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
358
359
|
await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
|
|
359
360
|
await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
|
|
@@ -377,7 +378,7 @@ describe('oauth2', () => {
|
|
|
377
378
|
OAuth2Client.mockImplementation(() => mockOAuth2Client);
|
|
378
379
|
// Make it fall through to cached credentials path
|
|
379
380
|
const cachedCreds = { refresh_token: 'cached-token' };
|
|
380
|
-
const credsPath = path.join(tempHomeDir,
|
|
381
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
381
382
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
382
383
|
await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
|
|
383
384
|
await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, mockConfig);
|
|
@@ -643,10 +644,10 @@ describe('oauth2', () => {
|
|
|
643
644
|
describe('clearCachedCredentialFile', () => {
|
|
644
645
|
it('should clear cached credentials and Google account', async () => {
|
|
645
646
|
const cachedCreds = { refresh_token: 'test-token' };
|
|
646
|
-
const credsPath = path.join(tempHomeDir,
|
|
647
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
647
648
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
648
649
|
await fs.promises.writeFile(credsPath, JSON.stringify(cachedCreds));
|
|
649
|
-
const googleAccountPath = path.join(tempHomeDir,
|
|
650
|
+
const googleAccountPath = path.join(tempHomeDir, CELL_DIR, 'google_accounts.json');
|
|
650
651
|
const accountData = { active: 'test@example.com', old: [] };
|
|
651
652
|
await fs.promises.writeFile(googleAccountPath, JSON.stringify(accountData));
|
|
652
653
|
const userAccountManager = new UserAccountManager();
|
|
@@ -674,7 +675,7 @@ describe('oauth2', () => {
|
|
|
674
675
|
};
|
|
675
676
|
OAuth2Client.mockImplementation(() => mockOAuth2Client);
|
|
676
677
|
// Pre-populate credentials to make getOauthClient resolve quickly
|
|
677
|
-
const credsPath = path.join(tempHomeDir,
|
|
678
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
678
679
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
679
680
|
await fs.promises.writeFile(credsPath, JSON.stringify({ refresh_token: 'token' }));
|
|
680
681
|
// First call, should create a client
|
|
@@ -777,7 +778,7 @@ describe('oauth2', () => {
|
|
|
777
778
|
requestCallback(mockReq, mockRes);
|
|
778
779
|
await clientPromise;
|
|
779
780
|
expect(OAuthCredentialStorage.saveCredentials).toHaveBeenCalledWith(mockTokens);
|
|
780
|
-
const credsPath = path.join(tempHomeDir,
|
|
781
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
781
782
|
expect(fs.existsSync(credsPath)).toBe(false);
|
|
782
783
|
});
|
|
783
784
|
it('should load credentials using OAuthCredentialStorage and not from file', async () => {
|
|
@@ -787,7 +788,7 @@ describe('oauth2', () => {
|
|
|
787
788
|
// Create a dummy unencrypted credential file.
|
|
788
789
|
// If the logic is correct, this file should be ignored.
|
|
789
790
|
const unencryptedCreds = { refresh_token: 'unencrypted-token' };
|
|
790
|
-
const credsPath = path.join(tempHomeDir,
|
|
791
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
791
792
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
792
793
|
await fs.promises.writeFile(credsPath, JSON.stringify(unencryptedCreds));
|
|
793
794
|
const mockClient = {
|
|
@@ -805,7 +806,7 @@ describe('oauth2', () => {
|
|
|
805
806
|
it('should clear credentials using OAuthCredentialStorage', async () => {
|
|
806
807
|
const { OAuthCredentialStorage } = await import('./oauth-credential-storage.js');
|
|
807
808
|
// Create a dummy unencrypted credential file. It should not be deleted.
|
|
808
|
-
const credsPath = path.join(tempHomeDir,
|
|
809
|
+
const credsPath = path.join(tempHomeDir, CELL_DIR, 'oauth_creds.json');
|
|
809
810
|
await fs.promises.mkdir(path.dirname(credsPath), { recursive: true });
|
|
810
811
|
await fs.promises.writeFile(credsPath, '{}');
|
|
811
812
|
await clearCachedCredentialFile();
|