@machina.ai/cell-cli 1.8.2-rc1 → 1.10.0-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +4 -3
- package/dist/src/commands/extensions/examples/context/GEMINI.md +9 -3
- package/dist/src/commands/extensions/install.d.ts +1 -0
- package/dist/src/commands/extensions/install.js +9 -3
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +9 -9
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/commands/extensions/link.js +2 -2
- package/dist/src/commands/extensions/link.js.map +1 -1
- package/dist/src/commands/extensions/uninstall.js +1 -1
- package/dist/src/commands/extensions/uninstall.js.map +1 -1
- package/dist/src/commands/extensions/update.js +2 -6
- package/dist/src/commands/extensions/update.js.map +1 -1
- package/dist/src/commands/mcp/list.js +2 -2
- package/dist/src/commands/mcp/list.js.map +1 -1
- package/dist/src/config/config.d.ts +3 -3
- package/dist/src/config/config.js +49 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.d.ts +20 -18
- package/dist/src/config/extension.js +75 -52
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/extensions/extensionEnablement.d.ts +2 -2
- package/dist/src/config/extensions/extensionEnablement.js +1 -2
- package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
- package/dist/src/config/extensions/extensionEnablement.test.js +6 -5
- package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -1
- package/dist/src/config/extensions/github.d.ts +8 -1
- package/dist/src/config/extensions/github.js +40 -66
- package/dist/src/config/extensions/github.js.map +1 -1
- package/dist/src/config/extensions/github.test.js +56 -12
- package/dist/src/config/extensions/github.test.js.map +1 -1
- package/dist/src/config/extensions/github_fetch.d.ts +7 -0
- package/dist/src/config/extensions/github_fetch.js +34 -0
- package/dist/src/config/extensions/github_fetch.js.map +1 -0
- package/dist/src/config/extensions/update.d.ts +1 -1
- package/dist/src/config/extensions/update.js +15 -12
- package/dist/src/config/extensions/update.js.map +1 -1
- package/dist/src/config/extensions/update.test.js +5 -5
- package/dist/src/config/extensions/update.test.js.map +1 -1
- package/dist/src/config/keyBindings.js +1 -1
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/policy.js +2 -2
- package/dist/src/config/policy.js.map +1 -1
- package/dist/src/config/settings.d.ts +10 -1
- package/dist/src/config/settings.js +17 -6
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +124 -3
- package/dist/src/config/settingsSchema.js +125 -4
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/trustedFolders.d.ts +0 -1
- package/dist/src/config/trustedFolders.js +2 -3
- package/dist/src/config/trustedFolders.js.map +1 -1
- package/dist/src/gemini.js +24 -17
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +20 -8
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/nonInteractiveCli.js +14 -1
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/nonInteractiveCliCommands.js +1 -2
- package/dist/src/nonInteractiveCliCommands.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +3 -0
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.test.js +37 -0
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
- package/dist/src/services/FileCommandLoader.d.ts +1 -1
- package/dist/src/services/FileCommandLoader.js +4 -4
- package/dist/src/services/FileCommandLoader.js.map +1 -1
- package/dist/src/services/prompt-processors/shellProcessor.js +1 -1
- package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -1
- package/dist/src/test-utils/render.d.ts +11 -4
- package/dist/src/test-utils/render.js +53 -2
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/ui/App.js +1 -17
- package/dist/src/ui/App.js.map +1 -1
- package/dist/src/ui/AppContainer.js +22 -7
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/auth/AuthInProgress.js +2 -2
- package/dist/src/ui/auth/AuthInProgress.js.map +1 -1
- package/dist/src/ui/commands/chatCommand.js +7 -24
- package/dist/src/ui/commands/chatCommand.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.js +30 -32
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
- package/dist/src/ui/commands/memoryCommand.js +23 -5
- package/dist/src/ui/commands/memoryCommand.js.map +1 -1
- package/dist/src/ui/commands/profileCommand.d.ts +7 -0
- package/dist/src/ui/commands/profileCommand.js +23 -0
- package/dist/src/ui/commands/profileCommand.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.test.js +2 -1
- package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +1 -0
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/AnsiOutput.d.ts +1 -0
- package/dist/src/ui/components/AnsiOutput.js +5 -5
- package/dist/src/ui/components/AnsiOutput.js.map +1 -1
- package/dist/src/ui/components/AnsiOutput.test.js +6 -6
- package/dist/src/ui/components/AnsiOutput.test.js.map +1 -1
- package/dist/src/ui/components/AsciiArt.d.ts +3 -3
- package/dist/src/ui/components/AsciiArt.js +3 -3
- package/dist/src/ui/components/CliSpinner.d.ts +10 -0
- package/dist/src/ui/components/CliSpinner.js +20 -0
- package/dist/src/ui/components/CliSpinner.js.map +1 -0
- package/dist/src/ui/components/Composer.js +4 -7
- package/dist/src/ui/components/Composer.js.map +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.js +2 -2
- package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.d.ts +18 -0
- package/dist/src/ui/components/DebugProfiler.js +158 -12
- package/dist/src/ui/components/DebugProfiler.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.test.d.ts +6 -0
- package/dist/src/ui/components/DebugProfiler.test.js +140 -0
- package/dist/src/ui/components/DebugProfiler.test.js.map +1 -0
- package/dist/src/ui/components/FolderTrustDialog.js +9 -5
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.test.js +7 -11
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/Footer.js +7 -6
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.js +2 -2
- package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
- package/dist/src/ui/components/Help.js +1 -1
- package/dist/src/ui/components/Help.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js +2 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.d.ts +7 -1
- package/dist/src/ui/components/InputPrompt.js +50 -25
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/MainContent.js +1 -1
- package/dist/src/ui/components/MainContent.js.map +1 -1
- package/dist/src/ui/components/Notifications.js +12 -4
- package/dist/src/ui/components/Notifications.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/WorkspaceMigrationDialog.d.ts +2 -2
- package/dist/src/ui/components/WorkspaceMigrationDialog.js +2 -2
- package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
- package/dist/src/ui/components/messages/CompressionMessage.js +3 -3
- package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +2 -2
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/views/ChatList.d.ts +12 -0
- package/dist/src/ui/components/views/ChatList.js +17 -0
- package/dist/src/ui/components/views/ChatList.js.map +1 -0
- package/dist/src/ui/components/views/ChatList.test.d.ts +6 -0
- package/dist/src/ui/components/views/ChatList.test.js +42 -0
- package/dist/src/ui/components/views/ChatList.test.js.map +1 -0
- package/dist/src/ui/contexts/KeypressContext.js +43 -3
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +127 -0
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +3 -1
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.js +5 -6
- package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/shellCommandProcessor.test.js +19 -32
- package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +9 -7
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useExtensionUpdates.js +68 -18
- package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -1
- package/dist/src/ui/hooks/useExtensionUpdates.test.js +7 -4
- package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -1
- package/dist/src/ui/hooks/useFlickerDetector.d.ts +14 -0
- package/dist/src/ui/hooks/useFlickerDetector.js +37 -0
- package/dist/src/ui/hooks/useFlickerDetector.js.map +1 -0
- package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +6 -0
- package/dist/src/ui/hooks/useFlickerDetector.test.js +102 -0
- package/dist/src/ui/hooks/useFlickerDetector.test.js.map +1 -0
- package/dist/src/ui/hooks/useFolderTrust.d.ts +2 -1
- package/dist/src/ui/hooks/useFolderTrust.js +12 -3
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +33 -2
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useHistoryManager.js +3 -3
- package/dist/src/ui/hooks/useHistoryManager.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.js +1 -0
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/ui/hooks/useSelectionList.js +50 -23
- package/dist/src/ui/hooks/useSelectionList.js.map +1 -1
- package/dist/src/ui/hooks/useSelectionList.test.js +24 -0
- package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
- package/dist/src/ui/hooks/useShellHistory.test.js +16 -10
- package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -1
- package/dist/src/ui/hooks/useTerminalSize.js +2 -3
- package/dist/src/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/src/ui/hooks/useWorkspaceMigration.d.ts +2 -2
- package/dist/src/ui/hooks/useWorkspaceMigration.js +13 -8
- package/dist/src/ui/hooks/useWorkspaceMigration.js.map +1 -1
- package/dist/src/ui/layouts/DefaultAppLayout.d.ts +1 -3
- package/dist/src/ui/layouts/DefaultAppLayout.js +5 -2
- package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -1
- package/dist/src/ui/layouts/ScreenReaderAppLayout.js +4 -1
- package/dist/src/ui/layouts/ScreenReaderAppLayout.js.map +1 -1
- package/dist/src/ui/noninteractive/nonInteractiveUi.js +1 -0
- package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
- package/dist/src/ui/state/extensions.d.ts +22 -3
- package/dist/src/ui/state/extensions.js +26 -4
- package/dist/src/ui/state/extensions.js.map +1 -1
- package/dist/src/ui/types.d.ts +11 -2
- package/dist/src/ui/types.js +1 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/ui-sizing.d.ts +7 -0
- package/dist/src/ui/utils/ui-sizing.js +23 -0
- package/dist/src/ui/utils/ui-sizing.js.map +1 -0
- package/dist/src/utils/commentJson.js +95 -13
- package/dist/src/utils/commentJson.js.map +1 -1
- package/dist/src/utils/commentJson.test.js +161 -0
- package/dist/src/utils/commentJson.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +8 -3
- package/dist/src/utils/errors.js +23 -13
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/errors.test.js +40 -46
- package/dist/src/utils/errors.test.js.map +1 -1
- package/dist/src/utils/events.d.ts +2 -1
- package/dist/src/utils/events.js +1 -0
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/handleAutoUpdate.js +4 -1
- package/dist/src/utils/handleAutoUpdate.js.map +1 -1
- package/dist/src/utils/installationInfo.d.ts +1 -0
- package/dist/src/utils/installationInfo.js +2 -0
- package/dist/src/utils/installationInfo.js.map +1 -1
- package/dist/src/utils/sandbox.js +8 -8
- package/dist/src/utils/sandbox.js.map +1 -1
- package/dist/src/utils/sessionCleanup.d.ts +22 -0
- package/dist/src/utils/sessionCleanup.integration.test.d.ts +6 -0
- package/dist/src/utils/sessionCleanup.integration.test.js +182 -0
- package/dist/src/utils/sessionCleanup.integration.test.js.map +1 -0
- package/dist/src/utils/sessionCleanup.js +214 -0
- package/dist/src/utils/sessionCleanup.js.map +1 -0
- package/dist/src/utils/sessionCleanup.test.d.ts +6 -0
- package/dist/src/utils/sessionCleanup.test.js +1232 -0
- package/dist/src/utils/sessionCleanup.test.js.map +1 -0
- package/dist/src/utils/sessionUtils.d.ts +37 -0
- package/dist/src/utils/sessionUtils.js +71 -0
- package/dist/src/utils/sessionUtils.js.map +1 -0
- package/dist/src/validateNonInterActiveAuth.js +6 -7
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/src/zed-integration/acp.js +1 -2
- package/dist/src/zed-integration/acp.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +176 -176
- package/dist/src/zed-integration/zedIntegration.d.ts +2 -3
- package/dist/src/zed-integration/zedIntegration.js +7 -26
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@machina.ai/cell-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0-rc1",
|
|
4
4
|
"description": "Cell CLI",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
""
|
|
16
16
|
],
|
|
17
17
|
"config": {
|
|
18
|
-
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.
|
|
18
|
+
"sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.10.0"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@google/gemini-cli-core": "npm:@machina.ai/cell-cli-core@1.
|
|
21
|
+
"@google/gemini-cli-core": "npm:@machina.ai/cell-cli-core@1.10.0-rc1",
|
|
22
22
|
"@google/genai": "1.16.0",
|
|
23
23
|
"@iarna/toml": "^2.2.5",
|
|
24
24
|
"@machina.ai/api-proxy": "1.0.21-rc2",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"ink-spinner": "^5.0.0",
|
|
40
40
|
"ink-text-input": "^6.0.0",
|
|
41
41
|
"lowlight": "^3.3.0",
|
|
42
|
+
"mnemonist": "^0.40.3",
|
|
42
43
|
"open": "^10.1.2",
|
|
43
44
|
"react": "^19.1.0",
|
|
44
45
|
"read-package-up": "^11.0.0",
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
# Ink Library Screen Reader Guidance
|
|
2
2
|
|
|
3
|
-
When building custom components, it's important to keep accessibility in mind.
|
|
3
|
+
When building custom components, it's important to keep accessibility in mind.
|
|
4
|
+
While Ink provides the building blocks, ensuring your components are accessible
|
|
5
|
+
will make your CLIs usable by a wider audience.
|
|
4
6
|
|
|
5
7
|
## General Principles
|
|
6
8
|
|
|
7
|
-
Provide screen reader-friendly output: Use the useIsScreenReaderEnabled hook to
|
|
8
|
-
|
|
9
|
+
Provide screen reader-friendly output: Use the useIsScreenReaderEnabled hook to
|
|
10
|
+
detect if a screen reader is active. You can then render a more descriptive
|
|
11
|
+
output for screen reader users. Leverage ARIA props: For components that have a
|
|
12
|
+
specific role (e.g., a checkbox or a button), use the aria-role, aria-state, and
|
|
13
|
+
aria-label props on <Box> and <Text> to provide semantic meaning to screen
|
|
14
|
+
readers.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { installOrUpdateExtension, requestConsentNonInteractive, } from '../../config/extension.js';
|
|
7
7
|
import { getErrorMessage } from '../../utils/errors.js';
|
|
8
8
|
import { stat } from 'node:fs/promises';
|
|
9
9
|
export async function handleInstall(args) {
|
|
@@ -19,6 +19,7 @@ export async function handleInstall(args) {
|
|
|
19
19
|
type: 'git',
|
|
20
20
|
ref: args.ref,
|
|
21
21
|
autoUpdate: args.autoUpdate,
|
|
22
|
+
allowPreRelease: args.allowPreRelease,
|
|
22
23
|
};
|
|
23
24
|
}
|
|
24
25
|
else {
|
|
@@ -36,7 +37,7 @@ export async function handleInstall(args) {
|
|
|
36
37
|
throw new Error('Install source not found.');
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
|
-
const name = await
|
|
40
|
+
const name = await installOrUpdateExtension(installMetadata, requestConsentNonInteractive);
|
|
40
41
|
console.log(`Extension "${name}" installed successfully and enabled.`);
|
|
41
42
|
}
|
|
42
43
|
catch (error) {
|
|
@@ -45,7 +46,7 @@ export async function handleInstall(args) {
|
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
export const installCommand = {
|
|
48
|
-
command: 'install <source>',
|
|
49
|
+
command: 'install <source> [--auto-update] [--pre-release]',
|
|
49
50
|
describe: 'Installs an extension from a git repository URL or a local path.',
|
|
50
51
|
builder: (yargs) => yargs
|
|
51
52
|
.positional('source', {
|
|
@@ -60,6 +61,10 @@ export const installCommand = {
|
|
|
60
61
|
.option('auto-update', {
|
|
61
62
|
describe: 'Enable auto-update for this extension.',
|
|
62
63
|
type: 'boolean',
|
|
64
|
+
})
|
|
65
|
+
.option('pre-release', {
|
|
66
|
+
describe: 'Enable pre-release versions for this extension.',
|
|
67
|
+
type: 'boolean',
|
|
63
68
|
})
|
|
64
69
|
.check((argv) => {
|
|
65
70
|
if (!argv.source) {
|
|
@@ -72,6 +77,7 @@ export const installCommand = {
|
|
|
72
77
|
source: argv['source'],
|
|
73
78
|
ref: argv['ref'],
|
|
74
79
|
autoUpdate: argv['auto-update'],
|
|
80
|
+
allowPreRelease: argv['pre-release'],
|
|
75
81
|
});
|
|
76
82
|
},
|
|
77
83
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
import { describe, it, expect, vi } from 'vitest';
|
|
7
7
|
import { handleInstall, installCommand } from './install.js';
|
|
8
8
|
import yargs from 'yargs';
|
|
9
|
-
const
|
|
9
|
+
const mockInstallOrUpdateExtension = vi.hoisted(() => vi.fn());
|
|
10
10
|
const mockRequestConsentNonInteractive = vi.hoisted(() => vi.fn());
|
|
11
11
|
const mockStat = vi.hoisted(() => vi.fn());
|
|
12
12
|
vi.mock('../../config/extension.js', () => ({
|
|
13
|
-
|
|
13
|
+
installOrUpdateExtension: mockInstallOrUpdateExtension,
|
|
14
14
|
requestConsentNonInteractive: mockRequestConsentNonInteractive,
|
|
15
15
|
}));
|
|
16
16
|
vi.mock('../../utils/errors.js', () => ({
|
|
@@ -40,27 +40,27 @@ describe('handleInstall', () => {
|
|
|
40
40
|
.mockImplementation(() => undefined);
|
|
41
41
|
});
|
|
42
42
|
afterEach(() => {
|
|
43
|
-
|
|
43
|
+
mockInstallOrUpdateExtension.mockClear();
|
|
44
44
|
mockRequestConsentNonInteractive.mockClear();
|
|
45
45
|
mockStat.mockClear();
|
|
46
46
|
vi.resetAllMocks();
|
|
47
47
|
});
|
|
48
48
|
it('should install an extension from a http source', async () => {
|
|
49
|
-
|
|
49
|
+
mockInstallOrUpdateExtension.mockResolvedValue('http-extension');
|
|
50
50
|
await handleInstall({
|
|
51
51
|
source: 'http://google.com',
|
|
52
52
|
});
|
|
53
53
|
expect(consoleLogSpy).toHaveBeenCalledWith('Extension "http-extension" installed successfully and enabled.');
|
|
54
54
|
});
|
|
55
55
|
it('should install an extension from a https source', async () => {
|
|
56
|
-
|
|
56
|
+
mockInstallOrUpdateExtension.mockResolvedValue('https-extension');
|
|
57
57
|
await handleInstall({
|
|
58
58
|
source: 'https://google.com',
|
|
59
59
|
});
|
|
60
60
|
expect(consoleLogSpy).toHaveBeenCalledWith('Extension "https-extension" installed successfully and enabled.');
|
|
61
61
|
});
|
|
62
62
|
it('should install an extension from a git source', async () => {
|
|
63
|
-
|
|
63
|
+
mockInstallOrUpdateExtension.mockResolvedValue('git-extension');
|
|
64
64
|
await handleInstall({
|
|
65
65
|
source: 'git@some-url',
|
|
66
66
|
});
|
|
@@ -75,14 +75,14 @@ describe('handleInstall', () => {
|
|
|
75
75
|
expect(processSpy).toHaveBeenCalledWith(1);
|
|
76
76
|
});
|
|
77
77
|
it('should install an extension from a sso source', async () => {
|
|
78
|
-
|
|
78
|
+
mockInstallOrUpdateExtension.mockResolvedValue('sso-extension');
|
|
79
79
|
await handleInstall({
|
|
80
80
|
source: 'sso://google.com',
|
|
81
81
|
});
|
|
82
82
|
expect(consoleLogSpy).toHaveBeenCalledWith('Extension "sso-extension" installed successfully and enabled.');
|
|
83
83
|
});
|
|
84
84
|
it('should install an extension from a local path', async () => {
|
|
85
|
-
|
|
85
|
+
mockInstallOrUpdateExtension.mockResolvedValue('local-extension');
|
|
86
86
|
mockStat.mockResolvedValue({});
|
|
87
87
|
await handleInstall({
|
|
88
88
|
source: '/some/path',
|
|
@@ -90,7 +90,7 @@ describe('handleInstall', () => {
|
|
|
90
90
|
expect(consoleLogSpy).toHaveBeenCalledWith('Extension "local-extension" installed successfully and enabled.');
|
|
91
91
|
});
|
|
92
92
|
it('should throw an error if install extension fails', async () => {
|
|
93
|
-
|
|
93
|
+
mockInstallOrUpdateExtension.mockRejectedValue(new Error('Install extension failed'));
|
|
94
94
|
await handleInstall({ source: 'git@some-url' });
|
|
95
95
|
expect(consoleErrorSpy).toHaveBeenCalledWith('Install extension failed');
|
|
96
96
|
expect(processSpy).toHaveBeenCalledWith(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAqB,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,
|
|
1
|
+
{"version":3,"file":"install.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/install.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { installOrUpdateExtension, requestConsentNonInteractive, } from '../../config/extension.js';
|
|
7
7
|
import { getErrorMessage } from '../../utils/errors.js';
|
|
8
8
|
export async function handleLink(args) {
|
|
9
9
|
try {
|
|
@@ -11,7 +11,7 @@ export async function handleLink(args) {
|
|
|
11
11
|
source: args.path,
|
|
12
12
|
type: 'link',
|
|
13
13
|
};
|
|
14
|
-
const extensionName = await
|
|
14
|
+
const extensionName = await installOrUpdateExtension(installMetadata, requestConsentNonInteractive);
|
|
15
15
|
console.log(`Extension "${extensionName}" linked successfully and enabled.`);
|
|
16
16
|
}
|
|
17
17
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/extensions/link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/extensions/link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAiB;IAChD,IAAI,CAAC;QACH,MAAM,eAAe,GAA6B;YAChD,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM;SACb,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,wBAAwB,CAClD,eAAe,EACf,4BAA4B,CAC7B,CAAC;QACF,OAAO,CAAC,GAAG,CACT,cAAc,aAAa,oCAAoC,CAChE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,OAAO,EAAE,aAAa;IACtB,QAAQ,EACN,gGAAgG;IAClG,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,oCAAoC;QAC9C,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC;IACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,UAAU,CAAC;YACf,IAAI,EAAE,IAAI,CAAC,MAAM,CAAW;SAC7B,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { uninstallExtension } from '../../config/extension.js';
|
|
|
7
7
|
import { getErrorMessage } from '../../utils/errors.js';
|
|
8
8
|
export async function handleUninstall(args) {
|
|
9
9
|
try {
|
|
10
|
-
await uninstallExtension(args.name);
|
|
10
|
+
await uninstallExtension(args.name, false);
|
|
11
11
|
console.log(`Extension "${args.name}" successfully uninstalled.`);
|
|
12
12
|
}
|
|
13
13
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../../src/commands/extensions/uninstall.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAmB;IACvD,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../../src/commands/extensions/uninstall.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAMxD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAmB;IACvD,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAkB;IAC7C,OAAO,EAAE,kBAAkB;IAC3B,QAAQ,EAAE,0BAA0B;IACpC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,wDAAwD;QAClE,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,eAAe,CAAC;YACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAW;SAC7B,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -25,14 +25,11 @@ export async function handleUpdate(args) {
|
|
|
25
25
|
console.log(`Extension "${args.name}" not found.`);
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
|
-
let updateState;
|
|
29
28
|
if (!extension.installMetadata) {
|
|
30
29
|
console.log(`Unable to install extension "${args.name}" due to missing install metadata`);
|
|
31
30
|
return;
|
|
32
31
|
}
|
|
33
|
-
await checkForExtensionUpdate(extension
|
|
34
|
-
updateState = newState;
|
|
35
|
-
});
|
|
32
|
+
const updateState = await checkForExtensionUpdate(extension);
|
|
36
33
|
if (updateState !== ExtensionUpdateState.UPDATE_AVAILABLE) {
|
|
37
34
|
console.log(`Extension "${args.name}" is already up to date.`);
|
|
38
35
|
return;
|
|
@@ -58,10 +55,9 @@ export async function handleUpdate(args) {
|
|
|
58
55
|
if (action.type === 'SET_STATE') {
|
|
59
56
|
extensionState.set(action.payload.name, {
|
|
60
57
|
status: action.payload.state,
|
|
61
|
-
processed: true, // No need to process as we will force the update.
|
|
62
58
|
});
|
|
63
59
|
}
|
|
64
|
-
});
|
|
60
|
+
}, workingDir);
|
|
65
61
|
let updateInfos = await updateAllUpdatableExtensions(workingDir, requestConsentNonInteractive, extensions, extensionState, () => { });
|
|
66
62
|
updateInfos = updateInfos.filter((info) => info.originalVersion !== info.updatedVersion);
|
|
67
63
|
if (updateInfos.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/extensions/update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,4BAA4B,EAE5B,2BAA2B,EAC3B,eAAe,GAChB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAO5F,MAAM,YAAY,GAAG,CAAC,IAAyB,EAAE,EAAE,CACjD,cAAc,IAAI,CAAC,IAAI,2BAA2B,IAAI,CAAC,eAAe,MAAM,IAAI,CAAC,cAAc,GAAG,CAAC;AAErG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAgB;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,0BAA0B,GAAG,IAAI,0BAA0B,CAC/D,gBAAgB,CAAC,oBAAoB,EAAE;IACvC,2EAA2E;IAC3E,QAAQ;IACR,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAC7B,CAAC;IACF,MAAM,aAAa,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,wBAAwB,CACzC,aAAa,EACb,UAAU,EACV,0BAA0B,CAC3B,CAAC;IACF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAC/B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAC5C,CAAC;YACF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,cAAc,CAAC,CAAC;gBACnD,OAAO;YACT,CAAC;YACD,IAAI,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/extensions/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,13 +17,13 @@ async function getMcpServersFromConfig() {
|
|
|
17
17
|
const extensions = loadExtensions(new ExtensionEnablementManager(ExtensionStorage.getUserExtensionsDir()));
|
|
18
18
|
const mcpServers = { ...(settings.merged.mcpServers || {}) };
|
|
19
19
|
for (const extension of extensions) {
|
|
20
|
-
Object.entries(extension.
|
|
20
|
+
Object.entries(extension.mcpServers || {}).forEach(([key, server]) => {
|
|
21
21
|
if (mcpServers[key]) {
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
24
|
mcpServers[key] = {
|
|
25
25
|
...server,
|
|
26
|
-
extensionName: extension.
|
|
26
|
+
extensionName: extension.name,
|
|
27
27
|
};
|
|
28
28
|
});
|
|
29
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/mcp/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAE5F,MAAM,WAAW,GAAG,YAAY,CAAC;AACjC,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,KAAK,UAAU,uBAAuB;IAGpC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,cAAc,CAC/B,IAAI,0BAA0B,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CACxE,CAAC;IACF,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/mcp/list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAE5F,MAAM,WAAW,GAAG,YAAY,CAAC;AACjC,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,SAAS,GAAG,YAAY,CAAC;AAC/B,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,KAAK,UAAU,uBAAuB;IAGpC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,UAAU,GAAG,cAAc,CAC/B,IAAI,0BAA0B,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC,CACxE,CAAC;IACF,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;YACnE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,GAAG;gBAChB,GAAG,MAAM;gBACT,aAAa,EAAE,SAAS,CAAC,IAAI;aAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,UAAkB,EAClB,MAAuB;IAEvB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC;IACd,IAAI,CAAC;QACH,gDAAgD;QAChD,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC,YAAY,CAAC;IACtC,CAAC;IAED,IAAI,CAAC;QACH,mDAAmD;QACnD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa;QAEjE,gDAAgD;QAChD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,eAAe,CAAC,SAAS,CAAC;IACnC,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,eAAe,CAAC,YAAY,CAAC;IACtC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,UAAkB,EAClB,MAAuB;IAEvB,wDAAwD;IACxD,OAAO,MAAM,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,UAAU,GAAG,MAAM,uBAAuB,EAAE,CAAC;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEzD,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,eAAe,CAAC,SAAS;gBAC5B,eAAe,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,CAAC;gBAClD,UAAU,GAAG,WAAW,CAAC;gBACzB,MAAM;YACR,KAAK,eAAe,CAAC,UAAU;gBAC7B,eAAe,GAAG,YAAY,GAAG,GAAG,GAAG,WAAW,CAAC;gBACnD,UAAU,GAAG,YAAY,CAAC;gBAC1B,MAAM;YACR,KAAK,eAAe,CAAC,YAAY,CAAC;YAClC;gBACE,eAAe,GAAG,SAAS,GAAG,GAAG,GAAG,WAAW,CAAC;gBAChD,UAAU,GAAG,cAAc,CAAC;gBAC5B,MAAM;QACV,CAAC;QAED,IAAI,UAAU,GAAG,GAAG,UAAU,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,UAAU,IAAI,GAAG,MAAM,CAAC,OAAO,SAAS,CAAC;QAC3C,CAAC;aAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACtB,UAAU,IAAI,GAAG,MAAM,CAAC,GAAG,QAAQ,CAAC;QACtC,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,UAAU,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;QAC5E,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,IAAI,UAAU,MAAM,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,iCAAiC;IAC3C,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;CACF,CAAC"}
|
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import type { FileFilteringOptions } from '@google/gemini-cli-core';
|
|
6
|
+
import type { FileFilteringOptions, GeminiCLIExtension } from '@google/gemini-cli-core';
|
|
7
7
|
import { Config, FileDiscoveryService } from '@google/gemini-cli-core';
|
|
8
8
|
import type { Settings } from './settings.js';
|
|
9
|
-
import type { Extension } from './extension.js';
|
|
10
9
|
import type { ExtensionEnablementManager } from './extensions/extensionEnablement.js';
|
|
11
10
|
export interface CliArgs {
|
|
12
11
|
query: string | undefined;
|
|
@@ -45,6 +44,7 @@ export declare function parseArguments(settings: Settings): Promise<CliArgs>;
|
|
|
45
44
|
export declare function loadHierarchicalGeminiMemory(currentWorkingDirectory: string, includeDirectoriesToReadGemini: readonly string[] | undefined, debugMode: boolean, fileService: FileDiscoveryService, settings: Settings, extensionContextFilePaths: string[] | undefined, folderTrust: boolean, memoryImportFormat?: 'flat' | 'tree', fileFilteringOptions?: FileFilteringOptions): Promise<{
|
|
46
45
|
memoryContent: string;
|
|
47
46
|
fileCount: number;
|
|
47
|
+
filePaths: string[];
|
|
48
48
|
}>;
|
|
49
49
|
export declare function isDebugMode(argv: CliArgs): boolean;
|
|
50
|
-
export declare function loadCliConfig(settings: Settings, extensions:
|
|
50
|
+
export declare function loadCliConfig(settings: Settings, extensions: GeminiCLIExtension[], extensionEnablementManager: ExtensionEnablementManager, sessionId: string, argv: CliArgs, cwd?: string): Promise<Config>;
|
|
@@ -11,7 +11,7 @@ import { hideBin } from 'yargs/helpers';
|
|
|
11
11
|
import process from 'node:process';
|
|
12
12
|
import { mcpCommand } from '../commands/mcp.js';
|
|
13
13
|
import { extensionsCommand } from '../commands/extensions.js';
|
|
14
|
-
import { Config, loadServerHierarchicalMemory, setGeminiMdFilename as setServerGeminiMdFilename, getCurrentGeminiMdFilename, ApprovalMode, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, FileDiscoveryService, ShellTool, EditTool,
|
|
14
|
+
import { Config, loadServerHierarchicalMemory, setGeminiMdFilename as setServerGeminiMdFilename, getCurrentGeminiMdFilename, ApprovalMode, DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, DEFAULT_GEMINI_EMBEDDING_MODEL, DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, FileDiscoveryService, ShellTool, EditTool, WRITE_FILE_TOOL_NAME, SHELL_TOOL_NAMES, resolveTelemetrySettings, FatalConfigError, getPty, } from '@google/gemini-cli-core';
|
|
15
15
|
import { AuthProviderKeycloak } from '@machina.ai/auth-keycloak';
|
|
16
16
|
import { annotateActiveExtensions } from './extension.js';
|
|
17
17
|
import { getCliVersion } from '../utils/version.js';
|
|
@@ -158,6 +158,7 @@ export async function parseArguments(settings) {
|
|
|
158
158
|
alias: 'e',
|
|
159
159
|
type: 'array',
|
|
160
160
|
string: true,
|
|
161
|
+
nargs: 1,
|
|
161
162
|
description: 'A list of extensions to use. If not provided, all extensions are used.',
|
|
162
163
|
coerce: (extensions) =>
|
|
163
164
|
// Handle comma-separated values
|
|
@@ -279,6 +280,30 @@ export async function loadHierarchicalGeminiMemory(currentWorkingDirectory, incl
|
|
|
279
280
|
// Directly call the server function with the corrected path.
|
|
280
281
|
return loadServerHierarchicalMemory(effectiveCwd, includeDirectoriesToReadGemini, debugMode, fileService, extensionContextFilePaths, folderTrust, memoryImportFormat, fileFilteringOptions, settings.context?.discoveryMaxDirs);
|
|
281
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Creates a filter function to determine if a tool should be excluded.
|
|
285
|
+
*
|
|
286
|
+
* In non-interactive mode, we want to disable tools that require user
|
|
287
|
+
* interaction to prevent the CLI from hanging. This function creates a predicate
|
|
288
|
+
* that returns `true` if a tool should be excluded.
|
|
289
|
+
*
|
|
290
|
+
* A tool is excluded if it's not in the `allowedToolsSet`. The shell tool
|
|
291
|
+
* has a special case: it's not excluded if any of its subcommands
|
|
292
|
+
* are in the `allowedTools` list.
|
|
293
|
+
*
|
|
294
|
+
* @param allowedTools A list of explicitly allowed tool names.
|
|
295
|
+
* @param allowedToolsSet A set of explicitly allowed tool names for quick lookups.
|
|
296
|
+
* @returns A function that takes a tool name and returns `true` if it should be excluded.
|
|
297
|
+
*/
|
|
298
|
+
function createToolExclusionFilter(allowedTools, allowedToolsSet) {
|
|
299
|
+
return (tool) => {
|
|
300
|
+
if (tool === ShellTool.Name) {
|
|
301
|
+
// If any of the allowed tools is ShellTool (even with subcommands), don't exclude it.
|
|
302
|
+
return !allowedTools.some((allowed) => SHELL_TOOL_NAMES.some((shellName) => allowed.startsWith(shellName)));
|
|
303
|
+
}
|
|
304
|
+
return !allowedToolsSet.has(tool);
|
|
305
|
+
};
|
|
306
|
+
}
|
|
282
307
|
export function isDebugMode(argv) {
|
|
283
308
|
return (argv.debug ||
|
|
284
309
|
[process.env['DEBUG'], process.env['DEBUG_MODE']].some((v) => v === 'true' || v === '1'));
|
|
@@ -324,7 +349,7 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
324
349
|
.map(resolvePath)
|
|
325
350
|
.concat((argv.includeDirectories || []).map(resolvePath));
|
|
326
351
|
// Call the (now wrapper) loadHierarchicalGeminiMemory which calls the server's version
|
|
327
|
-
const { memoryContent, fileCount } = await loadHierarchicalGeminiMemory(cwd, settings.context?.loadMemoryFromIncludeDirectories
|
|
352
|
+
const { memoryContent, fileCount, filePaths } = await loadHierarchicalGeminiMemory(cwd, settings.context?.loadMemoryFromIncludeDirectories
|
|
328
353
|
? includeDirectories
|
|
329
354
|
: [], debugMode, fileService, settings, extensionContextFilePaths, trustedFolder, memoryImportFormat, fileFiltering);
|
|
330
355
|
let mcpServers = mergeMcpServers(settings, activeExtensions);
|
|
@@ -372,6 +397,8 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
372
397
|
throw err;
|
|
373
398
|
}
|
|
374
399
|
const policyEngineConfig = createPolicyEngineConfig(settings, approvalMode);
|
|
400
|
+
const allowedTools = argv.allowedTools || settings.tools?.allowed || [];
|
|
401
|
+
const allowedToolsSet = new Set(allowedTools);
|
|
375
402
|
// Interactive mode: explicit -i flag or (TTY + no args + no -p flag)
|
|
376
403
|
const hasQuery = !!argv.query;
|
|
377
404
|
const interactive = !!argv.promptInteractive ||
|
|
@@ -379,14 +406,21 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
379
406
|
// In non-interactive mode, exclude tools that require a prompt.
|
|
380
407
|
const extraExcludes = [];
|
|
381
408
|
if (!interactive && !argv.experimentalAcp) {
|
|
409
|
+
const defaultExcludes = [
|
|
410
|
+
ShellTool.Name,
|
|
411
|
+
EditTool.Name,
|
|
412
|
+
WRITE_FILE_TOOL_NAME,
|
|
413
|
+
];
|
|
414
|
+
const autoEditExcludes = [ShellTool.Name];
|
|
415
|
+
const toolExclusionFilter = createToolExclusionFilter(allowedTools, allowedToolsSet);
|
|
382
416
|
switch (approvalMode) {
|
|
383
417
|
case ApprovalMode.DEFAULT:
|
|
384
418
|
// In default non-interactive mode, all tools that require approval are excluded.
|
|
385
|
-
extraExcludes.push(
|
|
419
|
+
extraExcludes.push(...defaultExcludes.filter(toolExclusionFilter));
|
|
386
420
|
break;
|
|
387
421
|
case ApprovalMode.AUTO_EDIT:
|
|
388
422
|
// In auto-edit non-interactive mode, only tools that still require a prompt are excluded.
|
|
389
|
-
extraExcludes.push(
|
|
423
|
+
extraExcludes.push(...autoEditExcludes.filter(toolExclusionFilter));
|
|
390
424
|
break;
|
|
391
425
|
case ApprovalMode.YOLO:
|
|
392
426
|
// No extra excludes for YOLO mode.
|
|
@@ -424,6 +458,7 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
424
458
|
const screenReader = argv.screenReader !== undefined
|
|
425
459
|
? argv.screenReader
|
|
426
460
|
: (settings.ui?.accessibility?.screenReader ?? false);
|
|
461
|
+
const ptyInfo = await getPty();
|
|
427
462
|
return new Config({
|
|
428
463
|
sessionId,
|
|
429
464
|
embeddingModel: DEFAULT_GEMINI_EMBEDDING_MODEL,
|
|
@@ -435,7 +470,7 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
435
470
|
question,
|
|
436
471
|
fullContext: argv.allFiles || false,
|
|
437
472
|
coreTools: settings.tools?.core || undefined,
|
|
438
|
-
allowedTools:
|
|
473
|
+
allowedTools: allowedTools.length > 0 ? allowedTools : undefined,
|
|
439
474
|
policyEngineConfig,
|
|
440
475
|
excludeTools,
|
|
441
476
|
toolDiscoveryCommand: settings.tools?.discoveryCommand,
|
|
@@ -444,6 +479,7 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
444
479
|
mcpServers,
|
|
445
480
|
userMemory: memoryContent,
|
|
446
481
|
geminiMdFileCount: fileCount,
|
|
482
|
+
geminiMdFilePaths: filePaths,
|
|
447
483
|
approvalMode,
|
|
448
484
|
showMemoryUsage: argv.showMemoryUsage || settings.ui?.showMemoryUsage || false,
|
|
449
485
|
accessibility: {
|
|
@@ -452,7 +488,7 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
452
488
|
},
|
|
453
489
|
telemetry: telemetrySettings,
|
|
454
490
|
usageStatisticsEnabled: settings.privacy?.usageStatisticsEnabled ?? true,
|
|
455
|
-
fileFiltering
|
|
491
|
+
fileFiltering,
|
|
456
492
|
checkpointing: argv.checkpointing || settings.general?.checkpointing?.enabled,
|
|
457
493
|
proxy: argv.proxy ||
|
|
458
494
|
process.env['HTTPS_PROXY'] ||
|
|
@@ -481,7 +517,7 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
481
517
|
interactive,
|
|
482
518
|
trustedFolder,
|
|
483
519
|
useRipgrep: settings.tools?.useRipgrep,
|
|
484
|
-
|
|
520
|
+
enableInteractiveShell: settings.tools?.shell?.enableInteractiveShell ?? true,
|
|
485
521
|
skipNextSpeakerCheck: settings.model?.skipNextSpeakerCheck,
|
|
486
522
|
enablePromptCompletion: settings.general?.enablePromptCompletion ?? false,
|
|
487
523
|
truncateToolOutputThreshold: settings.tools?.truncateToolOutputThreshold,
|
|
@@ -495,6 +531,9 @@ export async function loadCliConfig(settings, extensions, extensionEnablementMan
|
|
|
495
531
|
},
|
|
496
532
|
useModelRouter,
|
|
497
533
|
enableMessageBusIntegration: settings.tools?.enableMessageBusIntegration ?? false,
|
|
534
|
+
codebaseInvestigatorSettings: settings.experimental?.codebaseInvestigatorSettings,
|
|
535
|
+
retryFetchErrors: settings.general?.retryFetchErrors ?? false,
|
|
536
|
+
ptyInfo: ptyInfo?.name,
|
|
498
537
|
});
|
|
499
538
|
}
|
|
500
539
|
function allowedMcpServers(mcpServers, allowMCPServers, blockedMcpServers) {
|
|
@@ -523,14 +562,14 @@ function allowedMcpServers(mcpServers, allowMCPServers, blockedMcpServers) {
|
|
|
523
562
|
function mergeMcpServers(settings, extensions) {
|
|
524
563
|
const mcpServers = { ...(settings.mcpServers || {}) };
|
|
525
564
|
for (const extension of extensions) {
|
|
526
|
-
Object.entries(extension.
|
|
565
|
+
Object.entries(extension.mcpServers || {}).forEach(([key, server]) => {
|
|
527
566
|
if (mcpServers[key]) {
|
|
528
567
|
logger.warn(`Skipping extension MCP config for server with key "${key}" as it already exists.`);
|
|
529
568
|
return;
|
|
530
569
|
}
|
|
531
570
|
mcpServers[key] = {
|
|
532
571
|
...server,
|
|
533
|
-
extensionName: extension.
|
|
572
|
+
extensionName: extension.name,
|
|
534
573
|
};
|
|
535
574
|
});
|
|
536
575
|
}
|
|
@@ -542,7 +581,7 @@ function mergeExcludeTools(settings, extensions, extraExcludes) {
|
|
|
542
581
|
...(extraExcludes || []),
|
|
543
582
|
]);
|
|
544
583
|
for (const extension of extensions) {
|
|
545
|
-
for (const tool of extension.
|
|
584
|
+
for (const tool of extension.excludeTools || []) {
|
|
546
585
|
allExcludeTools.add(tool);
|
|
547
586
|
}
|
|
548
587
|
}
|