@machina.ai/cell-cli-core 1.10.0-rc1 → 1.13.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 +5 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/package.json +13 -5
- package/dist/src/agents/codebase-investigator.js +2 -5
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/executor.d.ts +19 -0
- package/dist/src/agents/executor.js +234 -46
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js +371 -40
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/agents/registry.js +4 -3
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +2 -4
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -1
- package/dist/src/agents/types.d.ts +2 -1
- package/dist/src/agents/types.js +1 -0
- package/dist/src/agents/types.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +1 -0
- package/dist/src/code_assist/converter.js +1 -0
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +19 -0
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
- package/dist/src/code_assist/experiments/client_metadata.js +49 -0
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
- package/dist/src/code_assist/experiments/experiments.js +36 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -0
- package/dist/src/code_assist/experiments/types.d.ts +35 -0
- package/dist/src/code_assist/experiments/types.js +7 -0
- package/dist/src/code_assist/experiments/types.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.js +5 -4
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +15 -3
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.d.ts +2 -2
- package/dist/src/code_assist/oauth2.js +64 -51
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +65 -33
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +6 -4
- package/dist/src/code_assist/server.js +11 -0
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +17 -0
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +2 -2
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +1 -1
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/commands/extensions.d.ts +7 -0
- package/dist/src/commands/extensions.js +9 -0
- package/dist/src/commands/extensions.js.map +1 -0
- package/dist/src/commands/extensions.test.js +19 -0
- package/dist/src/commands/extensions.test.js.map +1 -0
- package/dist/src/config/config.d.ts +81 -32
- package/dist/src/config/config.js +193 -66
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +115 -36
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/models.d.ts +1 -1
- package/dist/src/config/models.js +2 -2
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/storage.d.ts +3 -0
- package/dist/src/config/storage.js +20 -0
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +2 -1
- package/dist/src/confirmation-bus/message-bus.js +7 -1
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +12 -2
- package/dist/src/confirmation-bus/types.js +1 -0
- package/dist/src/confirmation-bus/types.js.map +1 -1
- package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
- package/dist/src/core/apiKeyCredentialStorage.js +64 -0
- package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
- package/dist/src/core/apiKeyCredentialStorage.test.d.ts +6 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js +71 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -0
- package/dist/src/core/client.d.ts +2 -11
- package/dist/src/core/client.js +31 -170
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +107 -429
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +64 -59
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +38 -4
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +8 -2
- package/dist/src/core/coreToolScheduler.js +337 -172
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +363 -12
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +33 -0
- package/dist/src/core/fakeContentGenerator.js +58 -0
- package/dist/src/core/fakeContentGenerator.js.map +1 -0
- package/dist/src/core/fakeContentGenerator.test.d.ts +6 -0
- package/dist/src/core/fakeContentGenerator.test.js +127 -0
- package/dist/src/core/fakeContentGenerator.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +2 -0
- package/dist/src/core/geminiChat.js +7 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +15 -3
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/logger.js +21 -19
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +1 -0
- package/dist/src/core/loggingContentGenerator.js +113 -33
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +5 -4
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +3 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +115 -72
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +30 -108
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/recordingContentGenerator.d.ts +18 -0
- package/dist/src/core/recordingContentGenerator.js +77 -0
- package/dist/src/core/recordingContentGenerator.js.map +1 -0
- package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/recordingContentGenerator.test.js +101 -0
- package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
- package/dist/src/core/turn.d.ts +2 -0
- package/dist/src/core/turn.js +3 -1
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +48 -0
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.js +2 -0
- package/dist/src/fallback/handler.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/hooks/hookPlanner.d.ts +46 -0
- package/dist/src/hooks/hookPlanner.js +108 -0
- package/dist/src/hooks/hookPlanner.js.map +1 -0
- package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
- package/dist/src/hooks/hookPlanner.test.js +255 -0
- package/dist/src/hooks/hookPlanner.test.js.map +1 -0
- package/dist/src/hooks/hookRegistry.d.ts +87 -0
- package/dist/src/hooks/hookRegistry.js +198 -0
- package/dist/src/hooks/hookRegistry.js.map +1 -0
- package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
- package/dist/src/hooks/hookRegistry.test.js +341 -0
- package/dist/src/hooks/hookRegistry.test.js.map +1 -0
- package/dist/src/hooks/hookTranslator.d.ts +113 -0
- package/dist/src/hooks/hookTranslator.js +232 -0
- package/dist/src/hooks/hookTranslator.js.map +1 -0
- package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
- package/dist/src/hooks/hookTranslator.test.js +192 -0
- package/dist/src/hooks/hookTranslator.test.js.map +1 -0
- package/dist/src/hooks/types.d.ts +384 -0
- package/dist/src/hooks/types.js +284 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/hooks/types.test.d.ts +6 -0
- package/dist/src/hooks/types.test.js +35 -0
- package/dist/src/hooks/types.test.js.map +1 -0
- package/dist/src/ide/ide-client.js +2 -1
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.js +18 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +2 -0
- package/dist/src/mcp/google-auth-provider.js +21 -3
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +42 -9
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/mcpLauncher.d.ts +26 -0
- package/dist/src/mcp/mcpLauncher.js +238 -0
- package/dist/src/mcp/mcpLauncher.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +8 -5
- package/dist/src/mcp/oauth-provider.js +140 -55
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +191 -2
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.js +5 -4
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +17 -11
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +7 -0
- package/dist/src/mcp/oauth-utils.js +28 -8
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +45 -2
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +0 -6
- package/dist/src/mcp/sa-impersonation-provider.js +6 -23
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.js +75 -84
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.js +1 -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 +7 -5
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +2 -2
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +6 -2
- package/dist/src/mcp/token-storage/keychain-token-storage.js +63 -7
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +54 -3
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
- package/dist/src/mcp/token-storage/types.d.ts +6 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -1
- package/dist/src/output/stream-json-formatter.d.ts +32 -0
- package/dist/src/output/stream-json-formatter.js +52 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -0
- package/dist/src/output/stream-json-formatter.test.d.ts +6 -0
- package/dist/src/output/stream-json-formatter.test.js +479 -0
- package/dist/src/output/stream-json-formatter.test.js.map +1 -0
- package/dist/src/output/types.d.ts +63 -1
- package/dist/src/output/types.js +11 -0
- package/dist/src/output/types.js.map +1 -1
- package/dist/src/policy/config.d.ts +31 -0
- package/dist/src/policy/config.js +197 -0
- package/dist/src/policy/config.js.map +1 -0
- package/dist/src/policy/config.test.d.ts +6 -0
- package/dist/src/policy/config.test.js +404 -0
- package/dist/src/policy/config.test.js.map +1 -0
- package/dist/src/policy/index.d.ts +2 -0
- package/dist/src/policy/index.js +2 -0
- package/dist/src/policy/index.js.map +1 -1
- package/dist/src/policy/policies/read-only.toml +56 -0
- package/dist/src/policy/policies/write.toml +63 -0
- package/dist/src/policy/policies/yolo.toml +31 -0
- package/dist/src/policy/policy-engine.js +4 -0
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +46 -0
- package/dist/src/policy/toml-loader.js +314 -0
- package/dist/src/policy/toml-loader.js.map +1 -0
- package/dist/src/policy/toml-loader.test.d.ts +6 -0
- package/dist/src/policy/toml-loader.test.js +522 -0
- package/dist/src/policy/toml-loader.test.js.map +1 -0
- package/dist/src/policy/types.d.ts +18 -0
- package/dist/src/policy/types.js +6 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/prompts/prompt-registry.js +2 -1
- package/dist/src/prompts/prompt-registry.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +3 -2
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/services/chatCompressionService.d.ts +32 -0
- package/dist/src/services/chatCompressionService.js +162 -0
- package/dist/src/services/chatCompressionService.js.map +1 -0
- package/dist/src/services/chatCompressionService.test.d.ts +6 -0
- package/dist/src/services/chatCompressionService.test.js +209 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -0
- package/dist/src/services/chatRecordingService.js +9 -8
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +2 -14
- package/dist/src/services/fileDiscoveryService.js +19 -55
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.test.js +91 -11
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +1 -1
- package/dist/src/services/loopDetectionService.js +27 -13
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +119 -11
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +50 -23
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +82 -15
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/activity-monitor.d.ts +116 -0
- package/dist/src/telemetry/activity-monitor.js +209 -0
- package/dist/src/telemetry/activity-monitor.js.map +1 -0
- package/dist/src/telemetry/activity-monitor.test.d.ts +6 -0
- package/dist/src/telemetry/activity-monitor.test.js +248 -0
- package/dist/src/telemetry/activity-monitor.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +5 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +135 -57
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +43 -75
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +7 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +13 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.js +0 -1
- package/dist/src/telemetry/gcp-exporters.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.test.js +1 -1
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +4 -2
- package/dist/src/telemetry/index.js +5 -3
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -1
- package/dist/src/telemetry/loggers.js +37 -26
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +215 -56
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +55 -6
- package/dist/src/telemetry/metrics.js +89 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +172 -213
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/sdk.js +3 -2
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/semantic.d.ts +82 -0
- package/dist/src/telemetry/semantic.js +269 -0
- package/dist/src/telemetry/semantic.js.map +1 -0
- package/dist/src/telemetry/semantic.test.d.ts +6 -0
- package/dist/src/telemetry/semantic.test.js +387 -0
- package/dist/src/telemetry/semantic.test.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.test.js +29 -28
- package/dist/src/telemetry/telemetry-utils.test.js.map +1 -1
- package/dist/src/telemetry/trace.d.ts +46 -0
- package/dist/src/telemetry/trace.js +121 -0
- package/dist/src/telemetry/trace.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +79 -34
- package/dist/src/telemetry/types.js +191 -61
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.js +6 -6
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +88 -66
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +3 -2
- package/dist/src/tools/edit.js +24 -19
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +78 -2
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +3 -2
- package/dist/src/tools/glob.js +15 -19
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +203 -199
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +3 -2
- package/dist/src/tools/grep.js +22 -16
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/ls.d.ts +3 -2
- package/dist/src/tools/ls.js +15 -20
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +2 -9
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +49 -11
- package/dist/src/tools/mcp-client-manager.js +209 -31
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +132 -25
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +5 -1
- package/dist/src/tools/mcp-client.js +85 -104
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +65 -6
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +5 -2
- package/dist/src/tools/mcp-tool.js +16 -8
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +6 -4
- package/dist/src/tools/memoryTool.js +13 -10
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.js +14 -1
- package/dist/src/tools/message-bus-integration.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.js +3 -2
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +4 -3
- package/dist/src/tools/read-file.js +16 -11
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +25 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +4 -3
- package/dist/src/tools/read-many-files.js +19 -37
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +0 -1
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +3 -2
- package/dist/src/tools/ripGrep.js +47 -17
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +106 -60
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +7 -5
- package/dist/src/tools/shell.js +39 -68
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +69 -9
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +3 -2
- package/dist/src/tools/smart-edit.js +30 -18
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +62 -2
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +8 -0
- package/dist/src/tools/tool-names.js +8 -5
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +6 -19
- package/dist/src/tools/tool-registry.js +14 -49
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +2 -24
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +22 -8
- package/dist/src/tools/tools.js +65 -36
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +4 -3
- package/dist/src/tools/web-fetch.js +37 -25
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +262 -1
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +4 -3
- package/dist/src/tools/web-search.js +8 -6
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +3 -2
- package/dist/src/tools/write-file.js +8 -8
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +1 -2
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +4 -8
- package/dist/src/tools/write-todos.js +15 -6
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/tools/write-todos.test.js +2 -2
- package/dist/src/tools/write-todos.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.js +3 -2
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/channel.d.ts +19 -0
- package/dist/src/utils/channel.js +49 -0
- package/dist/src/utils/channel.js.map +1 -0
- package/dist/src/utils/channel.test.d.ts +6 -0
- package/dist/src/utils/channel.test.js +170 -0
- package/dist/src/utils/channel.test.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +25 -0
- package/dist/src/utils/debugLogger.js +33 -0
- package/dist/src/utils/debugLogger.js.map +1 -0
- package/dist/src/utils/debugLogger.test.d.ts +6 -0
- package/dist/src/utils/debugLogger.test.js +67 -0
- package/dist/src/utils/debugLogger.test.js.map +1 -0
- package/dist/src/utils/delay.d.ts +16 -0
- package/dist/src/utils/delay.js +43 -0
- package/dist/src/utils/delay.js.map +1 -0
- package/dist/src/utils/delay.test.d.ts +6 -0
- package/dist/src/utils/delay.test.js +88 -0
- package/dist/src/utils/delay.test.js.map +1 -0
- package/dist/src/utils/editCorrector.js +5 -9
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +3 -5
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.js +33 -38
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +2 -1
- package/dist/src/utils/environmentContext.js +18 -33
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +0 -34
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/errorParsing.d.ts +1 -1
- package/dist/src/utils/errorParsing.js +5 -33
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/errorParsing.test.js +0 -88
- package/dist/src/utils/errorParsing.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +6 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/events.d.ts +88 -0
- package/dist/src/utils/events.js +77 -0
- package/dist/src/utils/events.js.map +1 -0
- package/dist/src/utils/events.test.d.ts +6 -0
- package/dist/src/utils/events.test.js +131 -0
- package/dist/src/utils/events.test.js.map +1 -0
- package/dist/src/utils/extensionLoader.d.ts +78 -0
- package/dist/src/utils/extensionLoader.js +162 -0
- package/dist/src/utils/extensionLoader.js.map +1 -0
- package/dist/src/utils/extensionLoader.test.d.ts +6 -0
- package/dist/src/utils/extensionLoader.test.js +90 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +1 -0
- package/dist/src/utils/fetch.js +4 -0
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +4 -0
- package/dist/src/utils/fileUtils.js +34 -2
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +12 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.js +26 -45
- package/dist/src/utils/flashFallback.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.js +9 -17
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.d.ts +4 -1
- package/dist/src/utils/gitIgnoreParser.js +28 -10
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +58 -0
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/googleErrors.d.ts +104 -0
- package/dist/src/utils/googleErrors.js +152 -0
- package/dist/src/utils/googleErrors.js.map +1 -0
- package/dist/src/utils/googleErrors.test.d.ts +6 -0
- package/dist/src/utils/googleErrors.test.js +301 -0
- package/dist/src/utils/googleErrors.test.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.d.ts +36 -0
- package/dist/src/utils/googleQuotaErrors.js +149 -0
- package/dist/src/utils/googleQuotaErrors.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
- package/dist/src/utils/googleQuotaErrors.test.js +311 -0
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
- package/dist/src/utils/ignorePatterns.test.js +26 -30
- package/dist/src/utils/ignorePatterns.test.js.map +1 -1
- package/dist/src/utils/installationManager.js +2 -1
- package/dist/src/utils/installationManager.js.map +1 -1
- package/dist/src/utils/installationManager.test.js +3 -3
- package/dist/src/utils/installationManager.test.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.d.ts +1 -1
- package/dist/src/utils/llm-edit-fixer.js +29 -4
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +21 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +11 -1
- package/dist/src/utils/memoryDiscovery.js +150 -11
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +157 -19
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +3 -2
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +2 -1
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/package.d.ts +12 -0
- package/dist/src/utils/package.js +15 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/paths.js +126 -26
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +200 -68
- package/dist/src/utils/paths.test.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.d.ts +0 -2
- package/dist/src/utils/quotaErrorDetection.js +0 -46
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.d.ts +1 -0
- package/dist/src/utils/retry.js +57 -158
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +48 -109
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/safeJsonStringify.d.ts +4 -4
- package/dist/src/utils/safeJsonStringify.js +31 -7
- package/dist/src/utils/safeJsonStringify.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +14 -2
- package/dist/src/utils/shell-utils.js +381 -136
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +242 -60
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/summarizer.js +2 -1
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +0 -1
- package/dist/src/utils/summarizer.test.js.map +1 -1
- package/dist/src/utils/systemEncoding.js +5 -4
- package/dist/src/utils/systemEncoding.js.map +1 -1
- package/dist/src/utils/tool-utils.d.ts +2 -2
- package/dist/src/utils/tool-utils.js +14 -5
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/userAccountManager.js +5 -4
- package/dist/src/utils/userAccountManager.js.map +1 -1
- package/dist/src/utils/workspaceContext.js +3 -2
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +2 -2
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -5
- package/dist/src/core/subagent.d.ts +0 -236
- package/dist/src/core/subagent.js +0 -482
- package/dist/src/core/subagent.js.map +0 -1
- package/dist/src/core/subagent.test.js +0 -556
- package/dist/src/core/subagent.test.js.map +0 -1
- /package/dist/src/{core/subagent.test.d.ts → commands/extensions.test.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorParsing.test.js","sourceRoot":"","sources":["../../../src/utils/errorParsing.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"errorParsing.test.js","sourceRoot":"","sources":["../../../src/utils/errorParsing.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,9 @@ export declare class FatalToolExecutionError extends FatalError {
|
|
|
30
30
|
export declare class FatalCancellationError extends FatalError {
|
|
31
31
|
constructor(message: string);
|
|
32
32
|
}
|
|
33
|
+
export declare class CanceledError extends Error {
|
|
34
|
+
constructor(message?: string);
|
|
35
|
+
}
|
|
33
36
|
export declare class ForbiddenError extends Error {
|
|
34
37
|
}
|
|
35
38
|
export declare class UnauthorizedError extends Error {
|
package/dist/src/utils/errors.js
CHANGED
|
@@ -59,6 +59,12 @@ export class FatalCancellationError extends FatalError {
|
|
|
59
59
|
super(message, 130); // Standard exit code for SIGINT
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
+
export class CanceledError extends Error {
|
|
63
|
+
constructor(message = 'The operation was canceled.') {
|
|
64
|
+
super(message);
|
|
65
|
+
this.name = 'CanceledError';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
62
68
|
export class ForbiddenError extends Error {
|
|
63
69
|
}
|
|
64
70
|
export class UnauthorizedError extends Error {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { EventEmitter } from 'node:events';
|
|
7
|
+
/**
|
|
8
|
+
* Defines the severity level for user-facing feedback.
|
|
9
|
+
* This maps loosely to UI `MessageType`
|
|
10
|
+
*/
|
|
11
|
+
export type FeedbackSeverity = 'info' | 'warning' | 'error';
|
|
12
|
+
/**
|
|
13
|
+
* Payload for the 'user-feedback' event.
|
|
14
|
+
*/
|
|
15
|
+
export interface UserFeedbackPayload {
|
|
16
|
+
/**
|
|
17
|
+
* The severity level determines how the message is rendered in the UI
|
|
18
|
+
* (e.g. colored text, specific icon).
|
|
19
|
+
*/
|
|
20
|
+
severity: FeedbackSeverity;
|
|
21
|
+
/**
|
|
22
|
+
* The main message to display to the user in the chat history or stdout.
|
|
23
|
+
*/
|
|
24
|
+
message: string;
|
|
25
|
+
/**
|
|
26
|
+
* The original error object, if applicable.
|
|
27
|
+
* Listeners can use this to extract stack traces for debug logging
|
|
28
|
+
* or verbose output, while keeping the 'message' field clean for end users.
|
|
29
|
+
*/
|
|
30
|
+
error?: unknown;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Payload for the 'fallback-mode-changed' event.
|
|
34
|
+
*/
|
|
35
|
+
export interface FallbackModeChangedPayload {
|
|
36
|
+
/**
|
|
37
|
+
* Whether fallback mode is now active.
|
|
38
|
+
*/
|
|
39
|
+
isInFallbackMode: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Payload for the 'model-changed' event.
|
|
43
|
+
*/
|
|
44
|
+
export interface ModelChangedPayload {
|
|
45
|
+
/**
|
|
46
|
+
* The new model that was set.
|
|
47
|
+
*/
|
|
48
|
+
model: string;
|
|
49
|
+
}
|
|
50
|
+
export declare enum CoreEvent {
|
|
51
|
+
UserFeedback = "user-feedback",
|
|
52
|
+
FallbackModeChanged = "fallback-mode-changed",
|
|
53
|
+
ModelChanged = "model-changed"
|
|
54
|
+
}
|
|
55
|
+
export declare class CoreEventEmitter extends EventEmitter {
|
|
56
|
+
private _feedbackBacklog;
|
|
57
|
+
private static readonly MAX_BACKLOG_SIZE;
|
|
58
|
+
constructor();
|
|
59
|
+
/**
|
|
60
|
+
* Sends actionable feedback to the user.
|
|
61
|
+
* Buffers automatically if the UI hasn't subscribed yet.
|
|
62
|
+
*/
|
|
63
|
+
emitFeedback(severity: FeedbackSeverity, message: string, error?: unknown): void;
|
|
64
|
+
/**
|
|
65
|
+
* Notifies subscribers that fallback mode has changed.
|
|
66
|
+
* This is synchronous and doesn't use backlog (UI should already be initialized).
|
|
67
|
+
*/
|
|
68
|
+
emitFallbackModeChanged(isInFallbackMode: boolean): void;
|
|
69
|
+
/**
|
|
70
|
+
* Notifies subscribers that the model has changed.
|
|
71
|
+
*/
|
|
72
|
+
emitModelChanged(model: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Flushes buffered messages. Call this immediately after primary UI listener
|
|
75
|
+
* subscribes.
|
|
76
|
+
*/
|
|
77
|
+
drainFeedbackBacklog(): void;
|
|
78
|
+
on(event: CoreEvent.UserFeedback, listener: (payload: UserFeedbackPayload) => void): this;
|
|
79
|
+
on(event: CoreEvent.FallbackModeChanged, listener: (payload: FallbackModeChangedPayload) => void): this;
|
|
80
|
+
on(event: CoreEvent.ModelChanged, listener: (payload: ModelChangedPayload) => void): this;
|
|
81
|
+
off(event: CoreEvent.UserFeedback, listener: (payload: UserFeedbackPayload) => void): this;
|
|
82
|
+
off(event: CoreEvent.FallbackModeChanged, listener: (payload: FallbackModeChangedPayload) => void): this;
|
|
83
|
+
off(event: CoreEvent.ModelChanged, listener: (payload: ModelChangedPayload) => void): this;
|
|
84
|
+
emit(event: CoreEvent.UserFeedback, payload: UserFeedbackPayload): boolean;
|
|
85
|
+
emit(event: CoreEvent.FallbackModeChanged, payload: FallbackModeChangedPayload): boolean;
|
|
86
|
+
emit(event: CoreEvent.ModelChanged, payload: ModelChangedPayload): boolean;
|
|
87
|
+
}
|
|
88
|
+
export declare const coreEvents: CoreEventEmitter;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { EventEmitter } from 'node:events';
|
|
7
|
+
export var CoreEvent;
|
|
8
|
+
(function (CoreEvent) {
|
|
9
|
+
CoreEvent["UserFeedback"] = "user-feedback";
|
|
10
|
+
CoreEvent["FallbackModeChanged"] = "fallback-mode-changed";
|
|
11
|
+
CoreEvent["ModelChanged"] = "model-changed";
|
|
12
|
+
})(CoreEvent || (CoreEvent = {}));
|
|
13
|
+
export class CoreEventEmitter extends EventEmitter {
|
|
14
|
+
_feedbackBacklog = [];
|
|
15
|
+
static MAX_BACKLOG_SIZE = 10000;
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Sends actionable feedback to the user.
|
|
21
|
+
* Buffers automatically if the UI hasn't subscribed yet.
|
|
22
|
+
*/
|
|
23
|
+
emitFeedback(severity, message, error) {
|
|
24
|
+
const payload = { severity, message, error };
|
|
25
|
+
if (this.listenerCount(CoreEvent.UserFeedback) === 0) {
|
|
26
|
+
if (this._feedbackBacklog.length >= CoreEventEmitter.MAX_BACKLOG_SIZE) {
|
|
27
|
+
this._feedbackBacklog.shift();
|
|
28
|
+
}
|
|
29
|
+
this._feedbackBacklog.push(payload);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.emit(CoreEvent.UserFeedback, payload);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Notifies subscribers that fallback mode has changed.
|
|
37
|
+
* This is synchronous and doesn't use backlog (UI should already be initialized).
|
|
38
|
+
*/
|
|
39
|
+
emitFallbackModeChanged(isInFallbackMode) {
|
|
40
|
+
const payload = { isInFallbackMode };
|
|
41
|
+
this.emit(CoreEvent.FallbackModeChanged, payload);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Notifies subscribers that the model has changed.
|
|
45
|
+
*/
|
|
46
|
+
emitModelChanged(model) {
|
|
47
|
+
const payload = { model };
|
|
48
|
+
this.emit(CoreEvent.ModelChanged, payload);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Flushes buffered messages. Call this immediately after primary UI listener
|
|
52
|
+
* subscribes.
|
|
53
|
+
*/
|
|
54
|
+
drainFeedbackBacklog() {
|
|
55
|
+
const backlog = [...this._feedbackBacklog];
|
|
56
|
+
this._feedbackBacklog.length = 0; // Clear in-place
|
|
57
|
+
for (const payload of backlog) {
|
|
58
|
+
this.emit(CoreEvent.UserFeedback, payload);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
on(event,
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
63
|
+
listener) {
|
|
64
|
+
return super.on(event, listener);
|
|
65
|
+
}
|
|
66
|
+
off(event,
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
68
|
+
listener) {
|
|
69
|
+
return super.off(event, listener);
|
|
70
|
+
}
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
+
emit(event, ...args) {
|
|
73
|
+
return super.emit(event, ...args);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export const coreEvents = new CoreEventEmitter();
|
|
77
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/utils/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAiD3C,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,2CAA8B,CAAA;IAC9B,0DAA6C,CAAA;IAC7C,2CAA8B,CAAA;AAChC,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACxC,gBAAgB,GAA0B,EAAE,CAAC;IAC7C,MAAM,CAAU,gBAAgB,GAAG,KAAK,CAAC;IAEjD;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED;;;OAGG;IACH,YAAY,CACV,QAA0B,EAC1B,OAAe,EACf,KAAe;QAEf,MAAM,OAAO,GAAwB,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAElE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;gBACtE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,uBAAuB,CAAC,gBAAyB;QAC/C,MAAM,OAAO,GAA+B,EAAE,gBAAgB,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,KAAa;QAC5B,MAAM,OAAO,GAAwB,EAAE,KAAK,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,oBAAoB;QAClB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;QACnD,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAcQ,EAAE,CACT,KAAsB;IACtB,8DAA8D;IAC9D,QAAkC;QAElC,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAcQ,GAAG,CACV,KAAsB;IACtB,8DAA8D;IAC9D,QAAkC;QAElC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAcD,8DAA8D;IACrD,IAAI,CAAC,KAAsB,EAAE,GAAG,IAAW;QAClD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;;AAGH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
7
|
+
import { CoreEventEmitter, CoreEvent, } from './events.js';
|
|
8
|
+
describe('CoreEventEmitter', () => {
|
|
9
|
+
let events;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
events = new CoreEventEmitter();
|
|
12
|
+
});
|
|
13
|
+
it('should emit feedback immediately when a listener is present', () => {
|
|
14
|
+
const listener = vi.fn();
|
|
15
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
16
|
+
const payload = {
|
|
17
|
+
severity: 'info',
|
|
18
|
+
message: 'Test message',
|
|
19
|
+
};
|
|
20
|
+
events.emitFeedback(payload.severity, payload.message);
|
|
21
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
22
|
+
expect(listener).toHaveBeenCalledWith(expect.objectContaining(payload));
|
|
23
|
+
});
|
|
24
|
+
it('should buffer feedback when no listener is present', () => {
|
|
25
|
+
const listener = vi.fn();
|
|
26
|
+
const payload = {
|
|
27
|
+
severity: 'warning',
|
|
28
|
+
message: 'Buffered message',
|
|
29
|
+
};
|
|
30
|
+
// Emit while no listeners attached
|
|
31
|
+
events.emitFeedback(payload.severity, payload.message);
|
|
32
|
+
expect(listener).not.toHaveBeenCalled();
|
|
33
|
+
// Attach listener and drain
|
|
34
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
35
|
+
events.drainFeedbackBacklog();
|
|
36
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
37
|
+
expect(listener).toHaveBeenCalledWith(expect.objectContaining(payload));
|
|
38
|
+
});
|
|
39
|
+
it('should respect the backlog size limit and maintain FIFO order', () => {
|
|
40
|
+
const listener = vi.fn();
|
|
41
|
+
const MAX_BACKLOG_SIZE = 10000;
|
|
42
|
+
for (let i = 0; i < MAX_BACKLOG_SIZE + 10; i++) {
|
|
43
|
+
events.emitFeedback('info', `Message ${i}`);
|
|
44
|
+
}
|
|
45
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
46
|
+
events.drainFeedbackBacklog();
|
|
47
|
+
expect(listener).toHaveBeenCalledTimes(MAX_BACKLOG_SIZE);
|
|
48
|
+
// Verify strictly that the FIRST call was Message 10 (0-9 dropped)
|
|
49
|
+
expect(listener.mock.calls[0][0]).toMatchObject({ message: 'Message 10' });
|
|
50
|
+
// Verify strictly that the LAST call was Message 109
|
|
51
|
+
expect(listener.mock.lastCall?.[0]).toMatchObject({
|
|
52
|
+
message: `Message ${MAX_BACKLOG_SIZE + 9}`,
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
it('should clear the backlog after draining', () => {
|
|
56
|
+
const listener = vi.fn();
|
|
57
|
+
events.emitFeedback('error', 'Test error');
|
|
58
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
59
|
+
events.drainFeedbackBacklog();
|
|
60
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
61
|
+
listener.mockClear();
|
|
62
|
+
events.drainFeedbackBacklog();
|
|
63
|
+
expect(listener).not.toHaveBeenCalled();
|
|
64
|
+
});
|
|
65
|
+
it('should include optional error object in payload', () => {
|
|
66
|
+
const listener = vi.fn();
|
|
67
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
68
|
+
const error = new Error('Original error');
|
|
69
|
+
events.emitFeedback('error', 'Something went wrong', error);
|
|
70
|
+
expect(listener).toHaveBeenCalledWith(expect.objectContaining({
|
|
71
|
+
severity: 'error',
|
|
72
|
+
message: 'Something went wrong',
|
|
73
|
+
error,
|
|
74
|
+
}));
|
|
75
|
+
});
|
|
76
|
+
it('should handle multiple listeners correctly', () => {
|
|
77
|
+
const listenerA = vi.fn();
|
|
78
|
+
const listenerB = vi.fn();
|
|
79
|
+
events.on(CoreEvent.UserFeedback, listenerA);
|
|
80
|
+
events.on(CoreEvent.UserFeedback, listenerB);
|
|
81
|
+
events.emitFeedback('info', 'Broadcast message');
|
|
82
|
+
expect(listenerA).toHaveBeenCalledTimes(1);
|
|
83
|
+
expect(listenerB).toHaveBeenCalledTimes(1);
|
|
84
|
+
});
|
|
85
|
+
it('should stop receiving events after off() is called', () => {
|
|
86
|
+
const listener = vi.fn();
|
|
87
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
88
|
+
events.emitFeedback('info', 'First message');
|
|
89
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
90
|
+
events.off(CoreEvent.UserFeedback, listener);
|
|
91
|
+
events.emitFeedback('info', 'Second message');
|
|
92
|
+
expect(listener).toHaveBeenCalledTimes(1); // Still 1
|
|
93
|
+
});
|
|
94
|
+
it('should handle re-entrant feedback emission during draining safely', () => {
|
|
95
|
+
events.emitFeedback('info', 'Buffered 1');
|
|
96
|
+
events.emitFeedback('info', 'Buffered 2');
|
|
97
|
+
const listener = vi.fn((payload) => {
|
|
98
|
+
// When 'Buffered 1' is received, immediately emit another event.
|
|
99
|
+
if (payload.message === 'Buffered 1') {
|
|
100
|
+
events.emitFeedback('warning', 'Re-entrant message');
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
events.on(CoreEvent.UserFeedback, listener);
|
|
104
|
+
events.drainFeedbackBacklog();
|
|
105
|
+
// Expectation with atomic snapshot:
|
|
106
|
+
// 1. loop starts with ['Buffered 1', 'Buffered 2']
|
|
107
|
+
// 2. emits 'Buffered 1'
|
|
108
|
+
// 3. listener fires for 'Buffered 1', calls emitFeedback('Re-entrant')
|
|
109
|
+
// 4. emitFeedback sees listener attached, emits 'Re-entrant' synchronously
|
|
110
|
+
// 5. listener fires for 'Re-entrant'
|
|
111
|
+
// 6. loop continues, emits 'Buffered 2'
|
|
112
|
+
// 7. listener fires for 'Buffered 2'
|
|
113
|
+
expect(listener).toHaveBeenCalledTimes(3);
|
|
114
|
+
expect(listener.mock.calls[0][0]).toMatchObject({ message: 'Buffered 1' });
|
|
115
|
+
expect(listener.mock.calls[1][0]).toMatchObject({
|
|
116
|
+
message: 'Re-entrant message',
|
|
117
|
+
});
|
|
118
|
+
expect(listener.mock.calls[2][0]).toMatchObject({ message: 'Buffered 2' });
|
|
119
|
+
});
|
|
120
|
+
describe('ModelChanged Event', () => {
|
|
121
|
+
it('should emit ModelChanged event with correct payload', () => {
|
|
122
|
+
const listener = vi.fn();
|
|
123
|
+
events.on(CoreEvent.ModelChanged, listener);
|
|
124
|
+
const newModel = 'gemini-2.5-pro';
|
|
125
|
+
events.emitModelChanged(newModel);
|
|
126
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
127
|
+
expect(listener).toHaveBeenCalledWith({ model: newModel });
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=events.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../src/utils/events.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { EventEmitter } from 'node:events';
|
|
7
|
+
import type { Config, GeminiCLIExtension } from '../config/config.js';
|
|
8
|
+
export declare abstract class ExtensionLoader {
|
|
9
|
+
private readonly eventEmitter?;
|
|
10
|
+
protected config: Config | undefined;
|
|
11
|
+
protected startingCount: number;
|
|
12
|
+
protected startCompletedCount: number;
|
|
13
|
+
protected stoppingCount: number;
|
|
14
|
+
protected stopCompletedCount: number;
|
|
15
|
+
constructor(eventEmitter?: EventEmitter<ExtensionEvents> | undefined);
|
|
16
|
+
/**
|
|
17
|
+
* All currently known extensions, both active and inactive.
|
|
18
|
+
*/
|
|
19
|
+
abstract getExtensions(): GeminiCLIExtension[];
|
|
20
|
+
/**
|
|
21
|
+
* Fully initializes all active extensions.
|
|
22
|
+
*
|
|
23
|
+
* Called within `Config.initialize`, which must already have an
|
|
24
|
+
* McpClientManager, PromptRegistry, and GeminiChat set up.
|
|
25
|
+
*/
|
|
26
|
+
start(config: Config): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Unconditionally starts an `extension` and loads all its MCP servers,
|
|
29
|
+
* context, custom commands, etc. Assumes that `start` has already been called
|
|
30
|
+
* and we have a Config object.
|
|
31
|
+
*
|
|
32
|
+
* This should typically only be called from `start`, most other calls should
|
|
33
|
+
* go through `maybeStartExtension` which will only start the extension if
|
|
34
|
+
* extension reloading is enabled and the `config` object is initialized.
|
|
35
|
+
*/
|
|
36
|
+
protected startExtension(extension: GeminiCLIExtension): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* If extension reloading is enabled and `start` has already been called,
|
|
39
|
+
* then calls `startExtension` to include all extension features into the
|
|
40
|
+
* program.
|
|
41
|
+
*/
|
|
42
|
+
protected maybeStartExtension(extension: GeminiCLIExtension): Promise<void> | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Unconditionally stops an `extension` and unloads all its MCP servers,
|
|
45
|
+
* context, custom commands, etc. Assumes that `start` has already been called
|
|
46
|
+
* and we have a Config object.
|
|
47
|
+
*
|
|
48
|
+
* Most calls should go through `maybeStopExtension` which will only stop the
|
|
49
|
+
* extension if extension reloading is enabled and the `config` object is
|
|
50
|
+
* initialized.
|
|
51
|
+
*/
|
|
52
|
+
protected stopExtension(extension: GeminiCLIExtension): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* If extension reloading is enabled and `start` has already been called,
|
|
55
|
+
* then this also performs all necessary steps to remove all extension
|
|
56
|
+
* features from the rest of the system.
|
|
57
|
+
*/
|
|
58
|
+
protected maybeStopExtension(extension: GeminiCLIExtension): Promise<void> | undefined;
|
|
59
|
+
}
|
|
60
|
+
export interface ExtensionEvents {
|
|
61
|
+
extensionsStarting: ExtensionsStartingEvent[];
|
|
62
|
+
extensionsStopping: ExtensionsStoppingEvent[];
|
|
63
|
+
}
|
|
64
|
+
export interface ExtensionsStartingEvent {
|
|
65
|
+
total: number;
|
|
66
|
+
completed: number;
|
|
67
|
+
}
|
|
68
|
+
export interface ExtensionsStoppingEvent {
|
|
69
|
+
total: number;
|
|
70
|
+
completed: number;
|
|
71
|
+
}
|
|
72
|
+
export declare class SimpleExtensionLoader extends ExtensionLoader {
|
|
73
|
+
protected readonly extensions: GeminiCLIExtension[];
|
|
74
|
+
constructor(extensions: GeminiCLIExtension[], eventEmitter?: EventEmitter<ExtensionEvents>);
|
|
75
|
+
getExtensions(): GeminiCLIExtension[];
|
|
76
|
+
loadExtension(extension: GeminiCLIExtension): Promise<void>;
|
|
77
|
+
unloadExtension(extension: GeminiCLIExtension): Promise<void>;
|
|
78
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export class ExtensionLoader {
|
|
7
|
+
eventEmitter;
|
|
8
|
+
// Assigned in `start`.
|
|
9
|
+
config;
|
|
10
|
+
// Used to track the count of currently starting and stopping extensions and
|
|
11
|
+
// fire appropriate events.
|
|
12
|
+
startingCount = 0;
|
|
13
|
+
startCompletedCount = 0;
|
|
14
|
+
stoppingCount = 0;
|
|
15
|
+
stopCompletedCount = 0;
|
|
16
|
+
constructor(eventEmitter) {
|
|
17
|
+
this.eventEmitter = eventEmitter;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Fully initializes all active extensions.
|
|
21
|
+
*
|
|
22
|
+
* Called within `Config.initialize`, which must already have an
|
|
23
|
+
* McpClientManager, PromptRegistry, and GeminiChat set up.
|
|
24
|
+
*/
|
|
25
|
+
async start(config) {
|
|
26
|
+
if (!this.config) {
|
|
27
|
+
this.config = config;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Error('Already started, you may only call `start` once.');
|
|
31
|
+
}
|
|
32
|
+
await Promise.all(this.getExtensions()
|
|
33
|
+
.filter((e) => e.isActive)
|
|
34
|
+
.map(this.startExtension.bind(this)));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Unconditionally starts an `extension` and loads all its MCP servers,
|
|
38
|
+
* context, custom commands, etc. Assumes that `start` has already been called
|
|
39
|
+
* and we have a Config object.
|
|
40
|
+
*
|
|
41
|
+
* This should typically only be called from `start`, most other calls should
|
|
42
|
+
* go through `maybeStartExtension` which will only start the extension if
|
|
43
|
+
* extension reloading is enabled and the `config` object is initialized.
|
|
44
|
+
*/
|
|
45
|
+
async startExtension(extension) {
|
|
46
|
+
if (!this.config) {
|
|
47
|
+
throw new Error('Cannot call `startExtension` prior to calling `start`.');
|
|
48
|
+
}
|
|
49
|
+
this.startingCount++;
|
|
50
|
+
this.eventEmitter?.emit('extensionsStarting', {
|
|
51
|
+
total: this.startingCount,
|
|
52
|
+
completed: this.startCompletedCount,
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
await this.config.getMcpClientManager().startExtension(extension);
|
|
56
|
+
// TODO: Move all extension features here, including at least:
|
|
57
|
+
// - context file loading
|
|
58
|
+
// - custom command loading
|
|
59
|
+
// - excluded tool configuration
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
this.startCompletedCount++;
|
|
63
|
+
this.eventEmitter?.emit('extensionsStarting', {
|
|
64
|
+
total: this.startingCount,
|
|
65
|
+
completed: this.startCompletedCount,
|
|
66
|
+
});
|
|
67
|
+
if (this.startingCount === this.startCompletedCount) {
|
|
68
|
+
this.startingCount = 0;
|
|
69
|
+
this.startCompletedCount = 0;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* If extension reloading is enabled and `start` has already been called,
|
|
75
|
+
* then calls `startExtension` to include all extension features into the
|
|
76
|
+
* program.
|
|
77
|
+
*/
|
|
78
|
+
maybeStartExtension(extension) {
|
|
79
|
+
if (this.config && this.config.getEnableExtensionReloading()) {
|
|
80
|
+
return this.startExtension(extension);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Unconditionally stops an `extension` and unloads all its MCP servers,
|
|
86
|
+
* context, custom commands, etc. Assumes that `start` has already been called
|
|
87
|
+
* and we have a Config object.
|
|
88
|
+
*
|
|
89
|
+
* Most calls should go through `maybeStopExtension` which will only stop the
|
|
90
|
+
* extension if extension reloading is enabled and the `config` object is
|
|
91
|
+
* initialized.
|
|
92
|
+
*/
|
|
93
|
+
async stopExtension(extension) {
|
|
94
|
+
if (!this.config) {
|
|
95
|
+
throw new Error('Cannot call `stopExtension` prior to calling `start`.');
|
|
96
|
+
}
|
|
97
|
+
this.stoppingCount++;
|
|
98
|
+
this.eventEmitter?.emit('extensionsStopping', {
|
|
99
|
+
total: this.stoppingCount,
|
|
100
|
+
completed: this.stopCompletedCount,
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
await this.config.getMcpClientManager().stopExtension(extension);
|
|
104
|
+
// TODO: Remove all extension features here, including at least:
|
|
105
|
+
// - context files
|
|
106
|
+
// - custom commands
|
|
107
|
+
// - excluded tools
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
this.stopCompletedCount++;
|
|
111
|
+
this.eventEmitter?.emit('extensionsStopping', {
|
|
112
|
+
total: this.stoppingCount,
|
|
113
|
+
completed: this.stopCompletedCount,
|
|
114
|
+
});
|
|
115
|
+
if (this.stoppingCount === this.stopCompletedCount) {
|
|
116
|
+
this.stoppingCount = 0;
|
|
117
|
+
this.stopCompletedCount = 0;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* If extension reloading is enabled and `start` has already been called,
|
|
123
|
+
* then this also performs all necessary steps to remove all extension
|
|
124
|
+
* features from the rest of the system.
|
|
125
|
+
*/
|
|
126
|
+
maybeStopExtension(extension) {
|
|
127
|
+
if (this.config && this.config.getEnableExtensionReloading()) {
|
|
128
|
+
return this.stopExtension(extension);
|
|
129
|
+
}
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export class SimpleExtensionLoader extends ExtensionLoader {
|
|
134
|
+
extensions;
|
|
135
|
+
constructor(extensions, eventEmitter) {
|
|
136
|
+
super(eventEmitter);
|
|
137
|
+
this.extensions = extensions;
|
|
138
|
+
}
|
|
139
|
+
getExtensions() {
|
|
140
|
+
return this.extensions;
|
|
141
|
+
}
|
|
142
|
+
/// Adds `extension` to the list of extensions and calls
|
|
143
|
+
/// `maybeStartExtension`.
|
|
144
|
+
///
|
|
145
|
+
/// This is intended for dynamic loading of extensions after calling `start`.
|
|
146
|
+
async loadExtension(extension) {
|
|
147
|
+
this.extensions.push(extension);
|
|
148
|
+
await this.maybeStartExtension(extension);
|
|
149
|
+
}
|
|
150
|
+
/// Removes `extension` from the list of extensions and calls
|
|
151
|
+
// `maybeStopExtension` if it was found.
|
|
152
|
+
///
|
|
153
|
+
/// This is intended for dynamic unloading of extensions after calling `start`.
|
|
154
|
+
async unloadExtension(extension) {
|
|
155
|
+
const index = this.extensions.indexOf(extension);
|
|
156
|
+
if (index === -1)
|
|
157
|
+
return;
|
|
158
|
+
this.extensions.splice(index, 1);
|
|
159
|
+
await this.maybeStopExtension(extension);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=extensionLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensionLoader.js","sourceRoot":"","sources":["../../../src/utils/extensionLoader.ts"],"names":[],"mappings":"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"}
|