@machina.ai/cell-cli-core 1.13.0-rc5 → 1.16.0-rc2
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 +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/agents/codebase-investigator.test.d.ts +6 -0
- package/dist/src/agents/codebase-investigator.test.js +35 -0
- package/dist/src/agents/codebase-investigator.test.js.map +1 -0
- package/dist/src/agents/executor.d.ts +3 -0
- package/dist/src/agents/executor.js +21 -0
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js +358 -3
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/code_assist/codeAssist.test.d.ts +6 -0
- package/dist/src/code_assist/codeAssist.test.js +99 -0
- package/dist/src/code_assist/codeAssist.test.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.js +2 -1
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js +99 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.js +2 -2
- package/dist/src/code_assist/experiments/experiments.js.map +1 -1
- package/dist/src/code_assist/experiments/experiments.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/experiments.test.js +92 -0
- package/dist/src/code_assist/experiments/experiments.test.js.map +1 -0
- package/dist/src/code_assist/experiments/flagNames.d.ts +13 -0
- package/dist/src/code_assist/experiments/flagNames.js +13 -0
- package/dist/src/code_assist/experiments/flagNames.js.map +1 -0
- package/dist/src/code_assist/experiments/types.d.ts +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +49 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/server.js +5 -8
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +109 -28
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/config/config.d.ts +34 -2
- package/dist/src/config/config.js +147 -26
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +436 -19
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.d.ts +7 -0
- package/dist/src/config/defaultModelConfigs.js +158 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -0
- package/dist/src/config/models.d.ts +22 -1
- package/dist/src/config/models.js +49 -6
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +71 -10
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +1 -1
- package/dist/src/confirmation-bus/message-bus.js +2 -2
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.test.js +30 -24
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +1 -0
- package/dist/src/core/baseLlmClient.d.ts +4 -8
- package/dist/src/core/baseLlmClient.js +3 -8
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +22 -27
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +6 -5
- package/dist/src/core/client.js +33 -33
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +40 -22
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +7 -1
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +151 -357
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +6 -4
- package/dist/src/core/geminiChat.js +106 -29
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +317 -16
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/logger.d.ts +7 -2
- package/dist/src/core/logger.js +15 -9
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +31 -16
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/loggingContentGenerator.test.js +180 -0
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts.js +8 -11
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/tokenLimits.test.d.ts +6 -0
- package/dist/src/core/tokenLimits.test.js +26 -0
- package/dist/src/core/tokenLimits.test.js.map +1 -0
- package/dist/src/fallback/handler.js +52 -7
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +69 -16
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/fallback/types.d.ts +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/hookAggregator.d.ts +68 -0
- package/dist/src/hooks/hookAggregator.js +262 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -0
- package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
- package/dist/src/hooks/hookAggregator.test.js +387 -0
- package/dist/src/hooks/hookAggregator.test.js.map +1 -0
- package/dist/src/hooks/hookRunner.d.ts +42 -0
- package/dist/src/hooks/hookRunner.js +272 -0
- package/dist/src/hooks/hookRunner.js.map +1 -0
- package/dist/src/hooks/hookRunner.test.d.ts +6 -0
- package/dist/src/hooks/hookRunner.test.js +468 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -0
- package/dist/src/hooks/hookTranslator.d.ts +3 -3
- package/dist/src/hooks/types.js +1 -1
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/hooks/types.test.js +280 -2
- package/dist/src/hooks/types.test.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +4 -0
- package/dist/src/ide/detect-ide.js +6 -1
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +5 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +3 -1
- package/dist/src/ide/ide-client.js +66 -59
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +159 -0
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.js +71 -21
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +42 -1
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/process-utils.js +16 -0
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.js +3 -3
- package/dist/src/ide/process-utils.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +1 -1
- package/dist/src/ide/types.js +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.js +1 -1
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +2 -2
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +177 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.js +1 -1
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -1
- package/dist/src/policy/config.js +3 -1
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +135 -1
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/policies/discovered.toml +8 -0
- package/dist/src/policy/policies/write.toml +10 -0
- package/dist/src/policy/policy-engine.d.ts +12 -3
- package/dist/src/policy/policy-engine.js +71 -9
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +460 -76
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.d.ts +2 -1
- package/dist/src/policy/toml-loader.js +103 -6
- package/dist/src/policy/toml-loader.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +222 -368
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +65 -0
- package/dist/src/policy/types.js +4 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
- package/dist/src/prompts/mcp-prompts.test.js +40 -0
- package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
- package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
- package/dist/src/prompts/prompt-registry.test.js +111 -0
- package/dist/src/prompts/prompt-registry.test.js.map +1 -0
- package/dist/src/routing/modelRouterService.js +15 -0
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/routing/modelRouterService.test.js +62 -0
- package/dist/src/routing/modelRouterService.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.d.ts +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +6 -14
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +13 -10
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.js +4 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +2 -2
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.test.js +3 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -1
- package/dist/src/safety/built-in.d.ts +21 -0
- package/dist/src/safety/built-in.js +106 -0
- package/dist/src/safety/built-in.js.map +1 -0
- package/dist/src/safety/built-in.test.d.ts +6 -0
- package/dist/src/safety/built-in.test.js +199 -0
- package/dist/src/safety/built-in.test.js.map +1 -0
- package/dist/src/safety/checker-runner.d.ts +48 -0
- package/dist/src/safety/checker-runner.js +208 -0
- package/dist/src/safety/checker-runner.js.map +1 -0
- package/dist/src/safety/checker-runner.test.d.ts +6 -0
- package/dist/src/safety/checker-runner.test.js +238 -0
- package/dist/src/safety/checker-runner.test.js.map +1 -0
- package/dist/src/safety/context-builder.d.ts +23 -0
- package/dist/src/safety/context-builder.js +47 -0
- package/dist/src/safety/context-builder.js.map +1 -0
- package/dist/src/safety/context-builder.test.d.ts +6 -0
- package/dist/src/safety/context-builder.test.js +49 -0
- package/dist/src/safety/context-builder.test.js.map +1 -0
- package/dist/src/safety/protocol.d.ts +88 -0
- package/dist/src/safety/protocol.js +15 -0
- package/dist/src/safety/protocol.js.map +1 -0
- package/dist/src/safety/registry.d.ts +26 -0
- package/dist/src/safety/registry.js +65 -0
- package/dist/src/safety/registry.js.map +1 -0
- package/dist/src/safety/registry.test.d.ts +6 -0
- package/dist/src/safety/registry.test.js +31 -0
- package/dist/src/safety/registry.test.js.map +1 -0
- package/dist/src/services/chatCompressionService.test.js +1 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -1
- package/dist/src/services/gitService.js +1 -1
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +1 -1
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +3 -0
- package/dist/src/services/loopDetectionService.js +81 -42
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +101 -1
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
- package/dist/src/services/modelConfig.golden.test.js +42 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -0
- package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
- package/dist/src/services/modelConfig.integration.test.js +213 -0
- package/dist/src/services/modelConfig.integration.test.js.map +1 -0
- package/dist/src/services/modelConfigService.d.ts +46 -0
- package/dist/src/services/modelConfigService.js +146 -0
- package/dist/src/services/modelConfigService.js.map +1 -0
- package/dist/src/services/modelConfigService.test.d.ts +6 -0
- package/dist/src/services/modelConfigService.test.js +509 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +169 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +11 -9
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +174 -150
- 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 +76 -20
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +6 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +18 -5
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/index.d.ts +2 -2
- package/dist/src/telemetry/index.js +2 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +7 -7
- package/dist/src/telemetry/loggers.js +23 -23
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +0 -1
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +72 -18
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +8 -4
- package/dist/src/telemetry/metrics.js +10 -4
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +42 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/telemetryAttributes.js +1 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +17 -11
- package/dist/src/telemetry/types.js +53 -28
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
- package/dist/src/tools/base-tool-invocation.test.js +85 -0
- package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +1 -1
- package/dist/src/tools/edit.js +31 -33
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +31 -20
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -1
- package/dist/src/tools/glob.js +7 -7
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +20 -17
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +9 -9
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +15 -12
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +1 -1
- package/dist/src/tools/ls.js +14 -15
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +32 -33
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +24 -52
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +18 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +1 -0
- package/dist/src/tools/mcp-tool.js +5 -2
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.js +1 -1
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +1 -1
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.d.ts +5 -1
- package/dist/src/tools/modifiable-tool.js +34 -13
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +56 -22
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -2
- package/dist/src/tools/read-file.js +20 -24
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +63 -51
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +2 -9
- package/dist/src/tools/read-many-files.js +10 -21
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +37 -35
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +25 -8
- package/dist/src/tools/ripGrep.js +148 -176
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +383 -58
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +1 -1
- package/dist/src/tools/shell.js +17 -15
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +66 -36
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +6 -1
- package/dist/src/tools/smart-edit.js +18 -17
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/smart-edit.test.js +49 -24
- package/dist/src/tools/smart-edit.test.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +29 -4
- package/dist/src/tools/tool-registry.js +108 -29
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +134 -4
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +2 -1
- package/dist/src/tools/tools.js +5 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +2 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +11 -4
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.js +1 -2
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +11 -5
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.js +31 -31
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +24 -5
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +29 -0
- package/dist/src/tools/write-todos.js +34 -1
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/utils/editCorrector.js +4 -15
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +16 -0
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +3 -1
- package/dist/src/utils/editor.js +18 -1
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +11 -0
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/environmentContext.js +3 -1
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +6 -0
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +14 -11
- package/dist/src/utils/events.js +1 -14
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/extensionLoader.d.ts +8 -0
- package/dist/src/utils/extensionLoader.js +61 -15
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +83 -19
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +75 -60
- package/dist/src/utils/fileUtils.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/googleQuotaErrors.d.ts +2 -1
- package/dist/src/utils/googleQuotaErrors.js +20 -12
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/httpErrors.d.ts +18 -0
- package/dist/src/utils/httpErrors.js +36 -0
- package/dist/src/utils/httpErrors.js.map +1 -0
- package/dist/src/utils/llm-edit-fixer.js +1 -2
- package/dist/src/utils/llm-edit-fixer.js.map +1 -1
- package/dist/src/utils/llm-edit-fixer.test.js +16 -1
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +8 -0
- package/dist/src/utils/memoryDiscovery.js +24 -0
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +43 -1
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +1 -2
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +10 -4
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/pathReader.js +4 -4
- package/dist/src/utils/pathReader.js.map +1 -1
- package/dist/src/utils/pathReader.test.js +44 -1
- package/dist/src/utils/pathReader.test.js.map +1 -1
- package/dist/src/utils/paths.d.ts +1 -1
- package/dist/src/utils/paths.js +5 -3
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/retry.d.ts +0 -9
- package/dist/src/utils/retry.js +24 -28
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +51 -0
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/shell-utils.js +5 -3
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +9 -9
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/summarizer.d.ts +4 -2
- package/dist/src/utils/summarizer.js +6 -8
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +32 -11
- package/dist/src/utils/summarizer.test.js.map +1 -1
- package/dist/src/utils/workspaceContext.d.ts +4 -3
- package/dist/src/utils/workspaceContext.js +10 -11
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +1 -1
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -3,8 +3,19 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect } from 'vitest';
|
|
7
|
-
import { HookEventName, HookType } from './types.js';
|
|
6
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
7
|
+
import { createHookOutput, DefaultHookOutput, BeforeToolHookOutput, BeforeModelHookOutput, BeforeToolSelectionHookOutput, AfterModelHookOutput, HookEventName, HookType, } from './types.js';
|
|
8
|
+
import { defaultHookTranslator } from './hookTranslator.js';
|
|
9
|
+
vi.mock('./hookTranslator.js', () => ({
|
|
10
|
+
defaultHookTranslator: {
|
|
11
|
+
fromHookLLMResponse: vi.fn((response) => response),
|
|
12
|
+
fromHookLLMRequest: vi.fn((request, target) => ({
|
|
13
|
+
...target,
|
|
14
|
+
...request,
|
|
15
|
+
})),
|
|
16
|
+
fromHookToolConfig: vi.fn((config) => config),
|
|
17
|
+
},
|
|
18
|
+
}));
|
|
8
19
|
describe('Hook Types', () => {
|
|
9
20
|
describe('HookEventName', () => {
|
|
10
21
|
it('should contain all required event names', () => {
|
|
@@ -32,4 +43,271 @@ describe('Hook Types', () => {
|
|
|
32
43
|
});
|
|
33
44
|
});
|
|
34
45
|
});
|
|
46
|
+
describe('Hook Output Classes', () => {
|
|
47
|
+
describe('createHookOutput', () => {
|
|
48
|
+
it('should return DefaultHookOutput for unknown event names', () => {
|
|
49
|
+
const output = createHookOutput('UnknownEvent', {});
|
|
50
|
+
expect(output).toBeInstanceOf(DefaultHookOutput);
|
|
51
|
+
expect(output).not.toBeInstanceOf(BeforeModelHookOutput);
|
|
52
|
+
expect(output).not.toBeInstanceOf(AfterModelHookOutput);
|
|
53
|
+
expect(output).not.toBeInstanceOf(BeforeToolSelectionHookOutput);
|
|
54
|
+
});
|
|
55
|
+
it('should return BeforeModelHookOutput for BeforeModel event', () => {
|
|
56
|
+
const output = createHookOutput(HookEventName.BeforeModel, {});
|
|
57
|
+
expect(output).toBeInstanceOf(BeforeModelHookOutput);
|
|
58
|
+
});
|
|
59
|
+
it('should return AfterModelHookOutput for AfterModel event', () => {
|
|
60
|
+
const output = createHookOutput(HookEventName.AfterModel, {});
|
|
61
|
+
expect(output).toBeInstanceOf(AfterModelHookOutput);
|
|
62
|
+
});
|
|
63
|
+
it('should return BeforeToolSelectionHookOutput for BeforeToolSelection event', () => {
|
|
64
|
+
const output = createHookOutput(HookEventName.BeforeToolSelection, {});
|
|
65
|
+
expect(output).toBeInstanceOf(BeforeToolSelectionHookOutput);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
describe('DefaultHookOutput', () => {
|
|
69
|
+
it('should construct with provided data', () => {
|
|
70
|
+
const data = {
|
|
71
|
+
continue: false,
|
|
72
|
+
stopReason: 'test stop',
|
|
73
|
+
suppressOutput: true,
|
|
74
|
+
systemMessage: 'test system message',
|
|
75
|
+
decision: 'block',
|
|
76
|
+
reason: 'test reason',
|
|
77
|
+
hookSpecificOutput: { key: 'value' },
|
|
78
|
+
};
|
|
79
|
+
const output = new DefaultHookOutput(data);
|
|
80
|
+
expect(output.continue).toBe(data.continue);
|
|
81
|
+
expect(output.stopReason).toBe(data.stopReason);
|
|
82
|
+
expect(output.suppressOutput).toBe(data.suppressOutput);
|
|
83
|
+
expect(output.systemMessage).toBe(data.systemMessage);
|
|
84
|
+
expect(output.decision).toBe(data.decision);
|
|
85
|
+
expect(output.reason).toBe(data.reason);
|
|
86
|
+
expect(output.hookSpecificOutput).toEqual(data.hookSpecificOutput);
|
|
87
|
+
});
|
|
88
|
+
it('should return false for isBlockingDecision if decision is not block or deny', () => {
|
|
89
|
+
const output1 = new DefaultHookOutput({ decision: 'approve' });
|
|
90
|
+
expect(output1.isBlockingDecision()).toBe(false);
|
|
91
|
+
const output2 = new DefaultHookOutput({ decision: undefined });
|
|
92
|
+
expect(output2.isBlockingDecision()).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('should return true for isBlockingDecision if decision is block or deny', () => {
|
|
95
|
+
const output1 = new DefaultHookOutput({ decision: 'block' });
|
|
96
|
+
expect(output1.isBlockingDecision()).toBe(true);
|
|
97
|
+
const output2 = new DefaultHookOutput({ decision: 'deny' });
|
|
98
|
+
expect(output2.isBlockingDecision()).toBe(true);
|
|
99
|
+
});
|
|
100
|
+
it('should return true for shouldStopExecution if continue is false', () => {
|
|
101
|
+
const output = new DefaultHookOutput({ continue: false });
|
|
102
|
+
expect(output.shouldStopExecution()).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
it('should return false for shouldStopExecution if continue is true or undefined', () => {
|
|
105
|
+
const output1 = new DefaultHookOutput({ continue: true });
|
|
106
|
+
expect(output1.shouldStopExecution()).toBe(false);
|
|
107
|
+
const output2 = new DefaultHookOutput({});
|
|
108
|
+
expect(output2.shouldStopExecution()).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
it('should return reason if available', () => {
|
|
111
|
+
const output = new DefaultHookOutput({ reason: 'specific reason' });
|
|
112
|
+
expect(output.getEffectiveReason()).toBe('specific reason');
|
|
113
|
+
});
|
|
114
|
+
it('should return stopReason if reason is not available', () => {
|
|
115
|
+
const output = new DefaultHookOutput({ stopReason: 'stop reason' });
|
|
116
|
+
expect(output.getEffectiveReason()).toBe('stop reason');
|
|
117
|
+
});
|
|
118
|
+
it('should return "No reason provided" if neither reason nor stopReason are available', () => {
|
|
119
|
+
const output = new DefaultHookOutput({});
|
|
120
|
+
expect(output.getEffectiveReason()).toBe('No reason provided');
|
|
121
|
+
});
|
|
122
|
+
it('applyLLMRequestModifications should return target unchanged', () => {
|
|
123
|
+
const target = {
|
|
124
|
+
model: 'gemini-pro',
|
|
125
|
+
contents: [],
|
|
126
|
+
};
|
|
127
|
+
const output = new DefaultHookOutput({});
|
|
128
|
+
expect(output.applyLLMRequestModifications(target)).toBe(target);
|
|
129
|
+
});
|
|
130
|
+
it('applyToolConfigModifications should return target unchanged', () => {
|
|
131
|
+
const target = { toolConfig: {}, tools: [] };
|
|
132
|
+
const output = new DefaultHookOutput({});
|
|
133
|
+
expect(output.applyToolConfigModifications(target)).toBe(target);
|
|
134
|
+
});
|
|
135
|
+
it('getAdditionalContext should return additionalContext if present', () => {
|
|
136
|
+
const output = new DefaultHookOutput({
|
|
137
|
+
hookSpecificOutput: { additionalContext: 'some context' },
|
|
138
|
+
});
|
|
139
|
+
expect(output.getAdditionalContext()).toBe('some context');
|
|
140
|
+
});
|
|
141
|
+
it('getAdditionalContext should return undefined if additionalContext is not present', () => {
|
|
142
|
+
const output = new DefaultHookOutput({
|
|
143
|
+
hookSpecificOutput: { other: 'value' },
|
|
144
|
+
});
|
|
145
|
+
expect(output.getAdditionalContext()).toBeUndefined();
|
|
146
|
+
});
|
|
147
|
+
it('getAdditionalContext should return undefined if hookSpecificOutput is undefined', () => {
|
|
148
|
+
const output = new DefaultHookOutput({});
|
|
149
|
+
expect(output.getAdditionalContext()).toBeUndefined();
|
|
150
|
+
});
|
|
151
|
+
it('getBlockingError should return blocked: true and reason if blocking decision', () => {
|
|
152
|
+
const output = new DefaultHookOutput({
|
|
153
|
+
decision: 'block',
|
|
154
|
+
reason: 'blocked by hook',
|
|
155
|
+
});
|
|
156
|
+
expect(output.getBlockingError()).toEqual({
|
|
157
|
+
blocked: true,
|
|
158
|
+
reason: 'blocked by hook',
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
it('getBlockingError should return blocked: false if not blocking decision', () => {
|
|
162
|
+
const output = new DefaultHookOutput({ decision: 'approve' });
|
|
163
|
+
expect(output.getBlockingError()).toEqual({ blocked: false, reason: '' });
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
describe('BeforeToolHookOutput', () => {
|
|
167
|
+
it('isBlockingDecision should use permissionDecision from hookSpecificOutput', () => {
|
|
168
|
+
const output1 = new BeforeToolHookOutput({
|
|
169
|
+
hookSpecificOutput: { permissionDecision: 'block' },
|
|
170
|
+
});
|
|
171
|
+
expect(output1.isBlockingDecision()).toBe(true);
|
|
172
|
+
const output2 = new BeforeToolHookOutput({
|
|
173
|
+
hookSpecificOutput: { permissionDecision: 'approve' },
|
|
174
|
+
});
|
|
175
|
+
expect(output2.isBlockingDecision()).toBe(false);
|
|
176
|
+
});
|
|
177
|
+
it('getEffectiveReason should use permissionDecisionReason from hookSpecificOutput', () => {
|
|
178
|
+
const output1 = new BeforeToolHookOutput({
|
|
179
|
+
hookSpecificOutput: { permissionDecisionReason: 'compat reason' },
|
|
180
|
+
});
|
|
181
|
+
expect(output1.getEffectiveReason()).toBe('compat reason');
|
|
182
|
+
const output2 = new BeforeToolHookOutput({
|
|
183
|
+
reason: 'default reason',
|
|
184
|
+
hookSpecificOutput: { other: 'value' },
|
|
185
|
+
});
|
|
186
|
+
expect(output2.getEffectiveReason()).toBe('default reason');
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe('BeforeModelHookOutput', () => {
|
|
190
|
+
it('getSyntheticResponse should return synthetic response if llm_response is present', () => {
|
|
191
|
+
const mockResponse = { candidates: [] };
|
|
192
|
+
const output = new BeforeModelHookOutput({
|
|
193
|
+
hookSpecificOutput: { llm_response: mockResponse },
|
|
194
|
+
});
|
|
195
|
+
expect(output.getSyntheticResponse()).toEqual(mockResponse);
|
|
196
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(mockResponse);
|
|
197
|
+
});
|
|
198
|
+
it('getSyntheticResponse should return undefined if llm_response is not present', () => {
|
|
199
|
+
const output = new BeforeModelHookOutput({});
|
|
200
|
+
expect(output.getSyntheticResponse()).toBeUndefined();
|
|
201
|
+
});
|
|
202
|
+
it('applyLLMRequestModifications should apply modifications if llm_request is present', () => {
|
|
203
|
+
const target = {
|
|
204
|
+
model: 'gemini-pro',
|
|
205
|
+
contents: [{ parts: [{ text: 'original' }] }],
|
|
206
|
+
};
|
|
207
|
+
const mockRequest = {
|
|
208
|
+
messages: [{ role: 'user', content: 'modified' }],
|
|
209
|
+
};
|
|
210
|
+
const output = new BeforeModelHookOutput({
|
|
211
|
+
hookSpecificOutput: { llm_request: mockRequest },
|
|
212
|
+
});
|
|
213
|
+
const result = output.applyLLMRequestModifications(target);
|
|
214
|
+
expect(result).toEqual({ ...target, ...mockRequest });
|
|
215
|
+
expect(defaultHookTranslator.fromHookLLMRequest).toHaveBeenCalledWith(mockRequest, target);
|
|
216
|
+
});
|
|
217
|
+
it('applyLLMRequestModifications should return target unchanged if llm_request is not present', () => {
|
|
218
|
+
const target = {
|
|
219
|
+
model: 'gemini-pro',
|
|
220
|
+
contents: [],
|
|
221
|
+
};
|
|
222
|
+
const output = new BeforeModelHookOutput({});
|
|
223
|
+
expect(output.applyLLMRequestModifications(target)).toBe(target);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
describe('BeforeToolSelectionHookOutput', () => {
|
|
227
|
+
it('applyToolConfigModifications should apply modifications if toolConfig is present', () => {
|
|
228
|
+
const target = { tools: [{ functionDeclarations: [] }] };
|
|
229
|
+
const mockToolConfig = { functionCallingConfig: { mode: 'ANY' } };
|
|
230
|
+
const output = new BeforeToolSelectionHookOutput({
|
|
231
|
+
hookSpecificOutput: { toolConfig: mockToolConfig },
|
|
232
|
+
});
|
|
233
|
+
const result = output.applyToolConfigModifications(target);
|
|
234
|
+
expect(result).toEqual({ ...target, toolConfig: mockToolConfig });
|
|
235
|
+
expect(defaultHookTranslator.fromHookToolConfig).toHaveBeenCalledWith(mockToolConfig);
|
|
236
|
+
});
|
|
237
|
+
it('applyToolConfigModifications should return target unchanged if toolConfig is not present', () => {
|
|
238
|
+
const target = { toolConfig: {}, tools: [] };
|
|
239
|
+
const output = new BeforeToolSelectionHookOutput({});
|
|
240
|
+
expect(output.applyToolConfigModifications(target)).toBe(target);
|
|
241
|
+
});
|
|
242
|
+
it('applyToolConfigModifications should initialize tools array if not present', () => {
|
|
243
|
+
const target = {};
|
|
244
|
+
const mockToolConfig = { functionCallingConfig: { mode: 'ANY' } };
|
|
245
|
+
const output = new BeforeToolSelectionHookOutput({
|
|
246
|
+
hookSpecificOutput: { toolConfig: mockToolConfig },
|
|
247
|
+
});
|
|
248
|
+
const result = output.applyToolConfigModifications(target);
|
|
249
|
+
expect(result).toEqual({ tools: [], toolConfig: mockToolConfig });
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe('AfterModelHookOutput', () => {
|
|
253
|
+
it('getModifiedResponse should return modified response if llm_response is present and has content', () => {
|
|
254
|
+
const mockResponse = {
|
|
255
|
+
candidates: [{ content: { role: 'model', parts: ['modified'] } }],
|
|
256
|
+
};
|
|
257
|
+
const output = new AfterModelHookOutput({
|
|
258
|
+
hookSpecificOutput: { llm_response: mockResponse },
|
|
259
|
+
});
|
|
260
|
+
expect(output.getModifiedResponse()).toEqual(mockResponse);
|
|
261
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(mockResponse);
|
|
262
|
+
});
|
|
263
|
+
it('getModifiedResponse should return undefined if llm_response is present but no content', () => {
|
|
264
|
+
const mockResponse = {
|
|
265
|
+
candidates: [{ content: { role: 'model', parts: [] } }],
|
|
266
|
+
};
|
|
267
|
+
const output = new AfterModelHookOutput({
|
|
268
|
+
hookSpecificOutput: { llm_response: mockResponse },
|
|
269
|
+
});
|
|
270
|
+
expect(output.getModifiedResponse()).toBeUndefined();
|
|
271
|
+
});
|
|
272
|
+
it('getModifiedResponse should return undefined if llm_response is not present', () => {
|
|
273
|
+
const output = new AfterModelHookOutput({});
|
|
274
|
+
expect(output.getModifiedResponse()).toBeUndefined();
|
|
275
|
+
});
|
|
276
|
+
it('getModifiedResponse should return a synthetic stop response if shouldStopExecution is true', () => {
|
|
277
|
+
const output = new AfterModelHookOutput({
|
|
278
|
+
continue: false,
|
|
279
|
+
stopReason: 'stopped by hook',
|
|
280
|
+
});
|
|
281
|
+
const expectedResponse = {
|
|
282
|
+
candidates: [
|
|
283
|
+
{
|
|
284
|
+
content: {
|
|
285
|
+
role: 'model',
|
|
286
|
+
parts: ['stopped by hook'],
|
|
287
|
+
},
|
|
288
|
+
finishReason: 'STOP',
|
|
289
|
+
},
|
|
290
|
+
],
|
|
291
|
+
};
|
|
292
|
+
expect(output.getModifiedResponse()).toEqual(expectedResponse);
|
|
293
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(expectedResponse);
|
|
294
|
+
});
|
|
295
|
+
it('getModifiedResponse should return a synthetic stop response with default reason if shouldStopExecution is true and no stopReason', () => {
|
|
296
|
+
const output = new AfterModelHookOutput({ continue: false });
|
|
297
|
+
const expectedResponse = {
|
|
298
|
+
candidates: [
|
|
299
|
+
{
|
|
300
|
+
content: {
|
|
301
|
+
role: 'model',
|
|
302
|
+
parts: ['No reason provided'],
|
|
303
|
+
},
|
|
304
|
+
finishReason: 'STOP',
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
};
|
|
308
|
+
expect(output.getModifiedResponse()).toEqual(expectedResponse);
|
|
309
|
+
expect(defaultHookTranslator.fromHookLLMResponse).toHaveBeenCalledWith(expectedResponse);
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
});
|
|
35
313
|
//# sourceMappingURL=types.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/hooks/types.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAErD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,cAAc,GAAG;gBACrB,YAAY;gBACZ,WAAW;gBACX,aAAa;gBACb,cAAc;gBACd,YAAY;gBACZ,cAAc;gBACd,YAAY;gBACZ,aAAa;gBACb,aAAa;gBACb,YAAY;gBACZ,qBAAqB;aACtB,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.test.js","sourceRoot":"","sources":["../../../src/hooks/types.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,10 @@ export declare const IDE_DEFINITIONS: {
|
|
|
40
40
|
readonly name: "vscodefork";
|
|
41
41
|
readonly displayName: "IDE";
|
|
42
42
|
};
|
|
43
|
+
readonly antigravity: {
|
|
44
|
+
readonly name: "antigravity";
|
|
45
|
+
readonly displayName: "Antigravity";
|
|
46
|
+
};
|
|
43
47
|
};
|
|
44
48
|
export interface IdeInfo {
|
|
45
49
|
name: string;
|
|
@@ -13,11 +13,15 @@ export const IDE_DEFINITIONS = {
|
|
|
13
13
|
trae: { name: 'trae', displayName: 'Trae' },
|
|
14
14
|
vscode: { name: 'vscode', displayName: 'VS Code' },
|
|
15
15
|
vscodefork: { name: 'vscodefork', displayName: 'IDE' },
|
|
16
|
+
antigravity: { name: 'antigravity', displayName: 'Antigravity' },
|
|
16
17
|
};
|
|
17
18
|
export function isCloudShell() {
|
|
18
19
|
return !!(process.env['EDITOR_IN_CLOUD_SHELL'] || process.env['CLOUD_SHELL']);
|
|
19
20
|
}
|
|
20
21
|
export function detectIdeFromEnv() {
|
|
22
|
+
if (process.env['ANTIGRAVITY_CLI_ALIAS']) {
|
|
23
|
+
return IDE_DEFINITIONS.antigravity;
|
|
24
|
+
}
|
|
21
25
|
if (process.env['__COG_BASHRC_SOURCED']) {
|
|
22
26
|
return IDE_DEFINITIONS.devin;
|
|
23
27
|
}
|
|
@@ -45,7 +49,8 @@ function verifyVSCode(ide, ideProcessInfo) {
|
|
|
45
49
|
if (ide.name !== IDE_DEFINITIONS.vscode.name) {
|
|
46
50
|
return ide;
|
|
47
51
|
}
|
|
48
|
-
if (ideProcessInfo.command
|
|
52
|
+
if (!ideProcessInfo.command ||
|
|
53
|
+
ideProcessInfo.command.toLowerCase().includes('code')) {
|
|
49
54
|
return IDE_DEFINITIONS.vscode;
|
|
50
55
|
}
|
|
51
56
|
return IDE_DEFINITIONS.vscodefork;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-ide.js","sourceRoot":"","sources":["../../../src/ide/detect-ide.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE;IAC9C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;IACjD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE;IACjD,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE;IAC9D,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE;IACpE,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE;IAC1E,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;IAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;IAClD,UAAU,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"detect-ide.js","sourceRoot":"","sources":["../../../src/ide/detect-ide.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,6 +74,11 @@ describe('detectIde', () => {
|
|
|
74
74
|
vi.stubEnv('CURSOR_TRACE_ID', '');
|
|
75
75
|
expect(detectIde(ideProcessInfoNoCode)).toBe(IDE_DEFINITIONS.vscodefork);
|
|
76
76
|
});
|
|
77
|
+
it('should detect AntiGravity', () => {
|
|
78
|
+
vi.stubEnv('TERM_PROGRAM', 'vscode');
|
|
79
|
+
vi.stubEnv('ANTIGRAVITY_CLI_ALIAS', 'agy');
|
|
80
|
+
expect(detectIde(ideProcessInfo)).toBe(IDE_DEFINITIONS.antigravity);
|
|
81
|
+
});
|
|
77
82
|
});
|
|
78
83
|
describe('detectIde with ideInfoFromFile', () => {
|
|
79
84
|
const ideProcessInfo = { pid: 123, command: 'some/path/to/code' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect-ide.test.js","sourceRoot":"","sources":["../../../src/ide/detect-ide.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"detect-ide.test.js","sourceRoot":"","sources":["../../../src/ide/detect-ide.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,7 +47,9 @@ export declare class IdeClient {
|
|
|
47
47
|
removeStatusChangeListener(listener: (state: IDEConnectionState) => void): void;
|
|
48
48
|
addTrustChangeListener(listener: (isTrusted: boolean) => void): void;
|
|
49
49
|
removeTrustChangeListener(listener: (isTrusted: boolean) => void): void;
|
|
50
|
-
connect(
|
|
50
|
+
connect(options?: {
|
|
51
|
+
logToConsole?: boolean;
|
|
52
|
+
}): Promise<void>;
|
|
51
53
|
/**
|
|
52
54
|
* Opens a diff view in the IDE, allowing the user to review and accept or
|
|
53
55
|
* reject changes.
|
|
@@ -90,9 +90,10 @@ export class IdeClient {
|
|
|
90
90
|
removeTrustChangeListener(listener) {
|
|
91
91
|
this.trustChangeListeners.delete(listener);
|
|
92
92
|
}
|
|
93
|
-
async connect() {
|
|
93
|
+
async connect(options = {}) {
|
|
94
|
+
const logError = options.logToConsole ?? true;
|
|
94
95
|
if (!this.currentIde) {
|
|
95
|
-
this.setState(IDEConnectionStatus.Disconnected, `IDE integration is not supported in your current environment. To use this feature, run
|
|
96
|
+
this.setState(IDEConnectionStatus.Disconnected, `IDE integration is not supported in your current environment. To use this feature, run Cell CLI in one of these supported IDEs: Antigravity, VS Code, or VS Code forks.`, false);
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
99
|
this.setState(IDEConnectionStatus.Connecting);
|
|
@@ -104,7 +105,7 @@ export class IdeClient {
|
|
|
104
105
|
process.env['CELL_CLI_IDE_WORKSPACE_PATH'];
|
|
105
106
|
const { isValid, error } = IdeClient.validateWorkspacePath(workspacePath, process.cwd());
|
|
106
107
|
if (!isValid) {
|
|
107
|
-
this.setState(IDEConnectionStatus.Disconnected, error,
|
|
108
|
+
this.setState(IDEConnectionStatus.Disconnected, error, logError);
|
|
108
109
|
return;
|
|
109
110
|
}
|
|
110
111
|
if (this.connectionConfig) {
|
|
@@ -135,7 +136,7 @@ export class IdeClient {
|
|
|
135
136
|
return;
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
|
-
this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE companion extension in ${this.currentIde.displayName}. Please ensure the extension is running. To install the extension, run /ide install.`,
|
|
139
|
+
this.setState(IDEConnectionStatus.Disconnected, `Failed to connect to IDE companion extension in ${this.currentIde.displayName}. Please ensure the extension is running. To install the extension, run /ide install.`, logError);
|
|
139
140
|
}
|
|
140
141
|
/**
|
|
141
142
|
* Opens a diff view in the IDE, allowing the user to review and accept or
|
|
@@ -385,7 +386,7 @@ export class IdeClient {
|
|
|
385
386
|
if (!isWithinWorkspace) {
|
|
386
387
|
return {
|
|
387
388
|
isValid: false,
|
|
388
|
-
error: `Directory mismatch.
|
|
389
|
+
error: `Directory mismatch. Cell CLI is running in a different location than the open workspace in the IDE. Please run the CLI from one of the following directories: ${ideWorkspacePaths.join(', ')}`,
|
|
389
390
|
};
|
|
390
391
|
}
|
|
391
392
|
return { isValid: true };
|
|
@@ -424,78 +425,84 @@ export class IdeClient {
|
|
|
424
425
|
if (!this.ideProcessInfo) {
|
|
425
426
|
return undefined;
|
|
426
427
|
}
|
|
427
|
-
//
|
|
428
|
+
// 1. Try exact PID match (Backwards compatibility & Unix common case)
|
|
428
429
|
try {
|
|
429
430
|
const portFile = path.join(os.tmpdir(), `cell-ide-server-${this.ideProcessInfo.pid}.json`);
|
|
430
431
|
const portFileContents = await fs.promises.readFile(portFile, 'utf8');
|
|
431
432
|
return JSON.parse(portFileContents);
|
|
432
433
|
}
|
|
433
434
|
catch (_) {
|
|
434
|
-
//
|
|
435
|
-
// /^cell-ide-server-${pid}-\d+\.json$/. If multiple IDE
|
|
436
|
-
// windows are open, multiple files matching the pattern are expected to
|
|
437
|
-
// exist.
|
|
435
|
+
// Continue to next strategy
|
|
438
436
|
}
|
|
437
|
+
// 2. Try new directory structure gemini/ide (Future proofing)
|
|
439
438
|
const portFileDir = path.join(os.tmpdir(), 'gemini', 'ide');
|
|
440
|
-
let portFiles;
|
|
439
|
+
let portFiles = [];
|
|
441
440
|
try {
|
|
442
441
|
portFiles = await fs.promises.readdir(portFileDir);
|
|
442
|
+
const fileRegex = new RegExp(`^cell-ide-server-${this.ideProcessInfo.pid}-\\d+\\.json$`);
|
|
443
|
+
const matchingFiles = portFiles
|
|
444
|
+
.filter((file) => fileRegex.test(file))
|
|
445
|
+
.sort();
|
|
446
|
+
if (matchingFiles.length > 0) {
|
|
447
|
+
const fileContents = await Promise.all(matchingFiles.map((file) => fs.promises.readFile(path.join(portFileDir, file), 'utf8')));
|
|
448
|
+
const parsedContents = fileContents.map((content) => {
|
|
449
|
+
try {
|
|
450
|
+
return JSON.parse(content);
|
|
451
|
+
}
|
|
452
|
+
catch (e) {
|
|
453
|
+
logger.debug('Failed to parse JSON from config file: ', e);
|
|
454
|
+
return undefined;
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
const validWorkspaces = parsedContents.filter((content) => {
|
|
458
|
+
if (!content)
|
|
459
|
+
return false;
|
|
460
|
+
const { isValid } = IdeClient.validateWorkspacePath(content.workspacePath, process.cwd());
|
|
461
|
+
return isValid;
|
|
462
|
+
});
|
|
463
|
+
if (validWorkspaces.length > 0) {
|
|
464
|
+
const portFromEnv = this.getPortFromEnv();
|
|
465
|
+
if (portFromEnv) {
|
|
466
|
+
const matchingPort = validWorkspaces.find((content) => String(content.port) === portFromEnv);
|
|
467
|
+
if (matchingPort)
|
|
468
|
+
return matchingPort;
|
|
469
|
+
}
|
|
470
|
+
return validWorkspaces[0];
|
|
471
|
+
}
|
|
472
|
+
}
|
|
443
473
|
}
|
|
444
474
|
catch (e) {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
}
|
|
448
|
-
if (!portFiles) {
|
|
449
|
-
return undefined;
|
|
475
|
+
// Ignore errors reading the specific directory
|
|
476
|
+
logger.debug('Failed to read specific IDE connection directory:', e);
|
|
450
477
|
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
.filter((file) => fileRegex.test(file))
|
|
454
|
-
.sort();
|
|
455
|
-
if (matchingFiles.length === 0) {
|
|
456
|
-
return undefined;
|
|
457
|
-
}
|
|
458
|
-
let fileContents;
|
|
478
|
+
// 3. Fallback: Scan os.tmpdir() for ANY valid workspace match (Windows support)
|
|
479
|
+
// This handles cases where the CLI process ancestry doesn't match the Extension Host PID.
|
|
459
480
|
try {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
if (!content) {
|
|
477
|
-
return false;
|
|
481
|
+
const tmpDir = os.tmpdir();
|
|
482
|
+
const allTmpFiles = await fs.promises.readdir(tmpDir);
|
|
483
|
+
const ideServerFiles = allTmpFiles.filter((f) => /^cell-ide-server-\d+\.json$/.test(f));
|
|
484
|
+
for (const file of ideServerFiles) {
|
|
485
|
+
try {
|
|
486
|
+
const content = await fs.promises.readFile(path.join(tmpDir, file), 'utf8');
|
|
487
|
+
const config = JSON.parse(content);
|
|
488
|
+
const { isValid } = IdeClient.validateWorkspacePath(config.workspacePath, process.cwd());
|
|
489
|
+
if (isValid) {
|
|
490
|
+
logger.debug(`Found matching IDE server config by workspace path: ${file}`);
|
|
491
|
+
return config;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
catch {
|
|
495
|
+
// Ignore unreadable/invalid files
|
|
496
|
+
}
|
|
478
497
|
}
|
|
479
|
-
const { isValid } = IdeClient.validateWorkspacePath(content.workspacePath, process.cwd());
|
|
480
|
-
return isValid;
|
|
481
|
-
});
|
|
482
|
-
if (validWorkspaces.length === 0) {
|
|
483
|
-
return undefined;
|
|
484
498
|
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
}
|
|
488
|
-
const portFromEnv = this.getPortFromEnv();
|
|
489
|
-
if (portFromEnv) {
|
|
490
|
-
const matchingPort = validWorkspaces.find((content) => String(content.port) === portFromEnv);
|
|
491
|
-
if (matchingPort) {
|
|
492
|
-
return matchingPort;
|
|
493
|
-
}
|
|
499
|
+
catch (e) {
|
|
500
|
+
logger.debug('Failed to scan tmpdir for IDE config files:', e);
|
|
494
501
|
}
|
|
495
|
-
return
|
|
502
|
+
return undefined;
|
|
496
503
|
}
|
|
497
504
|
createProxyAwareFetch() {
|
|
498
|
-
// ignore proxy for '127.0.0.1' by
|
|
505
|
+
// ignore proxy for '127.0.0.1' by default to allow connecting to the ide mcp server
|
|
499
506
|
const existingNoProxy = process.env['NO_PROXY'] || '';
|
|
500
507
|
const agent = new EnvHttpProxyAgent({
|
|
501
508
|
noProxy: [existingNoProxy, '127.0.0.1'].filter(Boolean).join(','),
|
|
@@ -558,7 +565,7 @@ export class IdeClient {
|
|
|
558
565
|
logger.debug(`No resolver found for ${filePath}`);
|
|
559
566
|
}
|
|
560
567
|
});
|
|
561
|
-
// For backwards
|
|
568
|
+
// For backwards compatibility. Newer extension versions will only send
|
|
562
569
|
// IdeDiffRejectedNotificationSchema.
|
|
563
570
|
this.client.setNotificationHandler(IdeDiffClosedNotificationSchema, (notification) => {
|
|
564
571
|
const { filePath } = notification.params;
|