@google/gemini-cli 0.28.0-preview.5 → 0.29.0-nightly.20260206.4ffc349c1

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.
Files changed (169) hide show
  1. package/dist/google-gemini-cli-0.29.0-nightly.20260203.71f46f116.tgz +0 -0
  2. package/dist/package.json +2 -2
  3. package/dist/src/commands/extensions/configure.js +6 -79
  4. package/dist/src/commands/extensions/configure.js.map +1 -1
  5. package/dist/src/commands/extensions/configure.test.js +14 -24
  6. package/dist/src/commands/extensions/configure.test.js.map +1 -1
  7. package/dist/src/commands/extensions/link.js +2 -1
  8. package/dist/src/commands/extensions/link.js.map +1 -1
  9. package/dist/src/commands/extensions/utils.d.ts +14 -4
  10. package/dist/src/commands/extensions/utils.js +88 -7
  11. package/dist/src/commands/extensions/utils.js.map +1 -1
  12. package/dist/src/commands/skills/link.d.ts +14 -0
  13. package/dist/src/commands/skills/link.js +65 -0
  14. package/dist/src/commands/skills/link.js.map +1 -0
  15. package/dist/src/commands/skills/link.test.d.ts +6 -0
  16. package/dist/src/commands/skills/link.test.js +49 -0
  17. package/dist/src/commands/skills/link.test.js.map +1 -0
  18. package/dist/src/commands/skills.js +2 -0
  19. package/dist/src/commands/skills.js.map +1 -1
  20. package/dist/src/config/config.d.ts +2 -1
  21. package/dist/src/config/config.js +38 -3
  22. package/dist/src/config/config.js.map +1 -1
  23. package/dist/src/config/config.test.js +206 -5
  24. package/dist/src/config/config.test.js.map +1 -1
  25. package/dist/src/config/extensions/consent.d.ts +1 -1
  26. package/dist/src/config/extensions/consent.js +6 -4
  27. package/dist/src/config/extensions/consent.js.map +1 -1
  28. package/dist/src/config/extensions/extensionSettings.js +9 -1
  29. package/dist/src/config/extensions/extensionSettings.js.map +1 -1
  30. package/dist/src/config/extensions/extensionSettings.test.js +27 -0
  31. package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
  32. package/dist/src/config/keyBindings.d.ts +0 -1
  33. package/dist/src/config/keyBindings.js +11 -15
  34. package/dist/src/config/keyBindings.js.map +1 -1
  35. package/dist/src/config/policy-engine.integration.test.js +29 -34
  36. package/dist/src/config/policy-engine.integration.test.js.map +1 -1
  37. package/dist/src/config/settings.js +4 -1
  38. package/dist/src/config/settings.js.map +1 -1
  39. package/dist/src/config/settings.test.js +20 -1
  40. package/dist/src/config/settings.test.js.map +1 -1
  41. package/dist/src/config/settingsSchema.d.ts +15 -1
  42. package/dist/src/config/settingsSchema.js +15 -1
  43. package/dist/src/config/settingsSchema.js.map +1 -1
  44. package/dist/src/generated/git-commit.d.ts +2 -2
  45. package/dist/src/generated/git-commit.js +2 -2
  46. package/dist/src/generated/git-commit.js.map +1 -1
  47. package/dist/src/services/BuiltinCommandLoader.js +4 -2
  48. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  49. package/dist/src/services/BuiltinCommandLoader.test.js +26 -0
  50. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  51. package/dist/src/ui/AppContainer.js +70 -50
  52. package/dist/src/ui/AppContainer.js.map +1 -1
  53. package/dist/src/ui/AppContainer.test.js +0 -123
  54. package/dist/src/ui/AppContainer.test.js.map +1 -1
  55. package/dist/src/ui/commands/extensionsCommand.js +75 -0
  56. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  57. package/dist/src/ui/commands/extensionsCommand.test.js +103 -11
  58. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
  59. package/dist/src/ui/commands/mcpCommand.test.js +1 -0
  60. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  61. package/dist/src/ui/commands/planCommand.d.ts +7 -0
  62. package/dist/src/ui/commands/planCommand.js +44 -0
  63. package/dist/src/ui/commands/planCommand.js.map +1 -0
  64. package/dist/src/ui/commands/planCommand.test.js +87 -0
  65. package/dist/src/ui/commands/planCommand.test.js.map +1 -0
  66. package/dist/src/ui/commands/skillsCommand.js +50 -1
  67. package/dist/src/ui/commands/skillsCommand.js.map +1 -1
  68. package/dist/src/ui/commands/skillsCommand.test.js +55 -0
  69. package/dist/src/ui/commands/skillsCommand.test.js.map +1 -1
  70. package/dist/src/ui/commands/types.d.ts +6 -0
  71. package/dist/src/ui/commands/types.js.map +1 -1
  72. package/dist/src/ui/components/BackgroundShellDisplay.js +21 -16
  73. package/dist/src/ui/components/BackgroundShellDisplay.js.map +1 -1
  74. package/dist/src/ui/components/BackgroundShellDisplay.test.js +21 -0
  75. package/dist/src/ui/components/BackgroundShellDisplay.test.js.map +1 -1
  76. package/dist/src/ui/components/ConfigExtensionDialog.d.ts +19 -0
  77. package/dist/src/ui/components/ConfigExtensionDialog.js +155 -0
  78. package/dist/src/ui/components/ConfigExtensionDialog.js.map +1 -0
  79. package/dist/src/ui/components/InputPrompt.js +83 -34
  80. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  81. package/dist/src/ui/components/InputPrompt.test.js +283 -9
  82. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  83. package/dist/src/ui/components/ShellInputPrompt.js +0 -4
  84. package/dist/src/ui/components/ShellInputPrompt.js.map +1 -1
  85. package/dist/src/ui/components/ShellInputPrompt.test.js +0 -22
  86. package/dist/src/ui/components/ShellInputPrompt.test.js.map +1 -1
  87. package/dist/src/ui/components/messages/ShellToolMessage.js +12 -0
  88. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  89. package/dist/src/ui/components/messages/ShellToolMessage.test.js +27 -1
  90. package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +1 -1
  91. package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +3 -3
  92. package/dist/src/ui/components/messages/ToolShared.js +1 -5
  93. package/dist/src/ui/components/messages/ToolShared.js.map +1 -1
  94. package/dist/src/ui/components/shared/TextInput.test.js +20 -4
  95. package/dist/src/ui/components/shared/TextInput.test.js.map +1 -1
  96. package/dist/src/ui/components/shared/text-buffer.d.ts +98 -5
  97. package/dist/src/ui/components/shared/text-buffer.js +228 -29
  98. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  99. package/dist/src/ui/components/shared/text-buffer.test.js +33 -1
  100. package/dist/src/ui/components/shared/text-buffer.test.js.map +1 -1
  101. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +18 -0
  102. package/dist/src/ui/components/shared/vim-buffer-actions.js +156 -42
  103. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -1
  104. package/dist/src/ui/components/shared/vim-buffer-actions.test.js +54 -0
  105. package/dist/src/ui/components/shared/vim-buffer-actions.test.js.map +1 -1
  106. package/dist/src/ui/constants/tips.js +2 -2
  107. package/dist/src/ui/contexts/KeypressContext.js +15 -2
  108. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  109. package/dist/src/ui/contexts/KeypressContext.test.js +67 -17
  110. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  111. package/dist/src/ui/editors/editorSettingsManager.js +2 -2
  112. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -1
  113. package/dist/src/ui/hooks/shellReducer.js +2 -6
  114. package/dist/src/ui/hooks/shellReducer.js.map +1 -1
  115. package/dist/src/ui/hooks/slashCommandProcessor.js +2 -0
  116. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  117. package/dist/src/ui/hooks/useCommandCompletion.d.ts +11 -2
  118. package/dist/src/ui/hooks/useCommandCompletion.js +30 -18
  119. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  120. package/dist/src/ui/hooks/useCommandCompletion.test.js +50 -9
  121. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  122. package/dist/src/ui/hooks/useCompletion.d.ts +0 -2
  123. package/dist/src/ui/hooks/useCompletion.js +0 -4
  124. package/dist/src/ui/hooks/useCompletion.js.map +1 -1
  125. package/dist/src/ui/hooks/useEditorSettings.js +4 -2
  126. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
  127. package/dist/src/ui/hooks/useEditorSettings.test.js +5 -5
  128. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
  129. package/dist/src/ui/hooks/useFolderTrust.js +1 -1
  130. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
  131. package/dist/src/ui/hooks/useFolderTrust.test.js +1 -1
  132. package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
  133. package/dist/src/ui/hooks/useGeminiStream.js +5 -0
  134. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  135. package/dist/src/ui/hooks/useInputHistory.d.ts +3 -2
  136. package/dist/src/ui/hooks/useInputHistory.js +54 -47
  137. package/dist/src/ui/hooks/useInputHistory.js.map +1 -1
  138. package/dist/src/ui/hooks/useInputHistory.test.js +194 -13
  139. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -1
  140. package/dist/src/ui/hooks/useReverseSearchCompletion.js +2 -3
  141. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -1
  142. package/dist/src/ui/hooks/vim.js +78 -0
  143. package/dist/src/ui/hooks/vim.js.map +1 -1
  144. package/dist/src/ui/hooks/vim.test.js +87 -0
  145. package/dist/src/ui/hooks/vim.test.js.map +1 -1
  146. package/dist/src/ui/noninteractive/nonInteractiveUi.js +1 -0
  147. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
  148. package/dist/src/ui/utils/terminalSetup.js +72 -56
  149. package/dist/src/ui/utils/terminalSetup.js.map +1 -1
  150. package/dist/src/ui/utils/terminalSetup.test.js +21 -1
  151. package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
  152. package/dist/src/ui/utils/terminalUtils.js +1 -3
  153. package/dist/src/ui/utils/terminalUtils.js.map +1 -1
  154. package/dist/src/ui/utils/terminalUtils.test.js +0 -5
  155. package/dist/src/ui/utils/terminalUtils.test.js.map +1 -1
  156. package/dist/src/utils/skillUtils.d.ts +7 -0
  157. package/dist/src/utils/skillUtils.js +42 -0
  158. package/dist/src/utils/skillUtils.js.map +1 -1
  159. package/dist/src/utils/skillUtils.test.js +55 -1
  160. package/dist/src/utils/skillUtils.test.js.map +1 -1
  161. package/dist/tsconfig.tsbuildinfo +1 -1
  162. package/package.json +3 -3
  163. package/dist/google-gemini-cli-0.28.0-preview.4.tgz +0 -0
  164. package/dist/src/ui/utils/keybindingUtils.d.ts +0 -14
  165. package/dist/src/ui/utils/keybindingUtils.js +0 -54
  166. package/dist/src/ui/utils/keybindingUtils.js.map +0 -1
  167. package/dist/src/ui/utils/keybindingUtils.test.js +0 -44
  168. package/dist/src/ui/utils/keybindingUtils.test.js.map +0 -1
  169. /package/dist/src/ui/{utils/keybindingUtils.test.d.ts → commands/planCommand.test.d.ts} +0 -0
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google/gemini-cli",
3
- "version": "0.28.0-preview.5",
3
+ "version": "0.29.0-nightly.20260206.4ffc349c1",
4
4
  "description": "Gemini CLI",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -26,7 +26,7 @@
26
26
  "dist"
27
27
  ],
28
28
  "config": {
29
- "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.28.0-preview.5"
29
+ "sandboxImageUri": "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.29.0-nightly.20260206.4ffc349c1"
30
30
  },
31
31
  "dependencies": {
32
32
  "@agentclientprotocol/sdk": "^0.12.0",
@@ -3,12 +3,10 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { updateSetting, promptForSetting, ExtensionSettingScope, getScopedEnvContents, } from '../../config/extensions/extensionSettings.js';
7
- import { getExtensionAndManager, getExtensionManager } from './utils.js';
6
+ import { configureAllExtensions, configureExtension, configureSpecificSetting, getExtensionManager, } from './utils.js';
8
7
  import { loadSettings } from '../../config/settings.js';
9
- import { debugLogger, coreEvents } from '@google/gemini-cli-core';
8
+ import { coreEvents, debugLogger } from '@google/gemini-cli-core';
10
9
  import { exitCli } from '../utils.js';
11
- import prompts from 'prompts';
12
10
  export const configureCommand = {
13
11
  command: 'config [name] [setting]',
14
12
  describe: 'Configure extension settings.',
@@ -41,91 +39,20 @@ export const configureCommand = {
41
39
  return;
42
40
  }
43
41
  }
42
+ const extensionManager = await getExtensionManager();
44
43
  // Case 1: Configure specific setting for an extension
45
44
  if (name && setting) {
46
- await configureSpecificSetting(name, setting, scope);
45
+ await configureSpecificSetting(extensionManager, name, setting, scope);
47
46
  }
48
47
  // Case 2: Configure all settings for an extension
49
48
  else if (name) {
50
- await configureExtension(name, scope);
49
+ await configureExtension(extensionManager, name, scope);
51
50
  }
52
51
  // Case 3: Configure all extensions
53
52
  else {
54
- await configureAllExtensions(scope);
53
+ await configureAllExtensions(extensionManager, scope);
55
54
  }
56
55
  await exitCli();
57
56
  },
58
57
  };
59
- async function configureSpecificSetting(extensionName, settingKey, scope) {
60
- const { extension, extensionManager } = await getExtensionAndManager(extensionName);
61
- if (!extension || !extensionManager) {
62
- return;
63
- }
64
- const extensionConfig = await extensionManager.loadExtensionConfig(extension.path);
65
- if (!extensionConfig) {
66
- debugLogger.error(`Could not find configuration for extension "${extensionName}".`);
67
- return;
68
- }
69
- await updateSetting(extensionConfig, extension.id, settingKey, promptForSetting, scope, process.cwd());
70
- }
71
- async function configureExtension(extensionName, scope) {
72
- const { extension, extensionManager } = await getExtensionAndManager(extensionName);
73
- if (!extension || !extensionManager) {
74
- return;
75
- }
76
- const extensionConfig = await extensionManager.loadExtensionConfig(extension.path);
77
- if (!extensionConfig ||
78
- !extensionConfig.settings ||
79
- extensionConfig.settings.length === 0) {
80
- debugLogger.log(`Extension "${extensionName}" has no settings to configure.`);
81
- return;
82
- }
83
- debugLogger.log(`Configuring settings for "${extensionName}"...`);
84
- await configureExtensionSettings(extensionConfig, extension.id, scope);
85
- }
86
- async function configureAllExtensions(scope) {
87
- const extensionManager = await getExtensionManager();
88
- const extensions = extensionManager.getExtensions();
89
- if (extensions.length === 0) {
90
- debugLogger.log('No extensions installed.');
91
- return;
92
- }
93
- for (const extension of extensions) {
94
- const extensionConfig = await extensionManager.loadExtensionConfig(extension.path);
95
- if (extensionConfig &&
96
- extensionConfig.settings &&
97
- extensionConfig.settings.length > 0) {
98
- debugLogger.log(`\nConfiguring settings for "${extension.name}"...`);
99
- await configureExtensionSettings(extensionConfig, extension.id, scope);
100
- }
101
- }
102
- }
103
- async function configureExtensionSettings(extensionConfig, extensionId, scope) {
104
- const currentScopedSettings = await getScopedEnvContents(extensionConfig, extensionId, scope, process.cwd());
105
- let workspaceSettings = {};
106
- if (scope === ExtensionSettingScope.USER) {
107
- workspaceSettings = await getScopedEnvContents(extensionConfig, extensionId, ExtensionSettingScope.WORKSPACE, process.cwd());
108
- }
109
- if (!extensionConfig.settings)
110
- return;
111
- for (const setting of extensionConfig.settings) {
112
- const currentValue = currentScopedSettings[setting.envVar];
113
- const workspaceValue = workspaceSettings[setting.envVar];
114
- if (workspaceValue !== undefined) {
115
- debugLogger.log(`Note: Setting "${setting.name}" is already configured in the workspace scope.`);
116
- }
117
- if (currentValue !== undefined) {
118
- const response = await prompts({
119
- type: 'confirm',
120
- name: 'overwrite',
121
- message: `Setting "${setting.name}" (${setting.envVar}) is already set. Overwrite?`,
122
- initial: false,
123
- });
124
- if (!response.overwrite) {
125
- continue;
126
- }
127
- }
128
- await updateSetting(extensionConfig, extensionId, setting.envVar, promptForSetting, scope, process.cwd());
129
- }
130
- }
131
58
  //# sourceMappingURL=configure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../../src/commands/extensions/configure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../../src/commands/extensions/configure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAQtC,MAAM,CAAC,MAAM,gBAAgB,GAAyC;IACpE,OAAO,EAAE,yBAAyB;IAClC,QAAQ,EAAE,+BAA+B;IACzC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,qCAAqC;QAC/C,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,UAAU,CAAC,SAAS,EAAE;QACrB,QAAQ,EAAE,sDAAsD;QAChE,IAAI,EAAE,QAAQ;KACf,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC9B,OAAO,EAAE,MAAM;KAChB,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QAEpD,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,eAAe,IAAI,IAAI,CAAC,EAAE,CAAC;YACtD,UAAU,CAAC,YAAY,CACrB,OAAO,EACP,6GAA6G,CAC9G,CAAC;YACF,MAAM,OAAO,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,WAAW,CAAC,KAAK,CACf,uEAAuE,CACxE,CAAC;gBACF,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAErD,sDAAsD;QACtD,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACpB,MAAM,wBAAwB,CAC5B,gBAAgB,EAChB,IAAI,EACJ,OAAO,EACP,KAA8B,CAC/B,CAAC;QACJ,CAAC;QACD,kDAAkD;aAC7C,IAAI,IAAI,EAAE,CAAC;YACd,MAAM,kBAAkB,CACtB,gBAAgB,EAChB,IAAI,EACJ,KAA8B,CAC/B,CAAC;QACJ,CAAC;QACD,mCAAmC;aAC9B,CAAC;YACJ,MAAM,sBAAsB,CAC1B,gBAAgB,EAChB,KAA8B,CAC/B,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -7,10 +7,10 @@ import { describe, it, expect, vi, beforeEach, afterEach, } from 'vitest';
7
7
  import { configureCommand } from './configure.js';
8
8
  import yargs from 'yargs';
9
9
  import { debugLogger } from '@google/gemini-cli-core';
10
- import { updateSetting, promptForSetting, getScopedEnvContents, } from '../../config/extensions/extensionSettings.js';
10
+ import { updateSetting, getScopedEnvContents, } from '../../config/extensions/extensionSettings.js';
11
11
  import prompts from 'prompts';
12
12
  import * as fs from 'node:fs';
13
- const { mockExtensionManager, mockGetExtensionAndManager, mockGetExtensionManager, mockLoadSettings, } = vi.hoisted(() => {
13
+ const { mockExtensionManager, mockGetExtensionManager, mockLoadSettings } = vi.hoisted(() => {
14
14
  const extensionManager = {
15
15
  loadExtensionConfig: vi.fn(),
16
16
  getExtensions: vi.fn(),
@@ -19,7 +19,6 @@ const { mockExtensionManager, mockGetExtensionAndManager, mockGetExtensionManage
19
19
  };
20
20
  return {
21
21
  mockExtensionManager: extensionManager,
22
- mockGetExtensionAndManager: vi.fn(),
23
22
  mockGetExtensionManager: vi.fn(),
24
23
  mockLoadSettings: vi.fn().mockReturnValue({ merged: {} }),
25
24
  };
@@ -39,10 +38,13 @@ vi.mock('../../config/extensions/extensionSettings.js', () => ({
39
38
  vi.mock('../utils.js', () => ({
40
39
  exitCli: vi.fn(),
41
40
  }));
42
- vi.mock('./utils.js', () => ({
43
- getExtensionAndManager: mockGetExtensionAndManager,
44
- getExtensionManager: mockGetExtensionManager,
45
- }));
41
+ vi.mock('./utils.js', async (importOriginal) => {
42
+ const actual = await importOriginal();
43
+ return {
44
+ ...actual,
45
+ getExtensionManager: mockGetExtensionManager,
46
+ };
47
+ });
46
48
  vi.mock('prompts');
47
49
  vi.mock('../../config/extensions/consent.js', () => ({
48
50
  requestConsentNonInteractive: vi.fn(),
@@ -61,10 +63,6 @@ describe('extensions configure command', () => {
61
63
  vi.spyOn(process, 'cwd').mockReturnValue(tempWorkspaceDir);
62
64
  // Default behaviors
63
65
  mockLoadSettings.mockReturnValue({ merged: {} });
64
- mockGetExtensionAndManager.mockResolvedValue({
65
- extension: null,
66
- extensionManager: null,
67
- });
68
66
  mockGetExtensionManager.mockResolvedValue(mockExtensionManager);
69
67
  ExtensionManager.mockImplementation(() => mockExtensionManager);
70
68
  });
@@ -77,11 +75,6 @@ describe('extensions configure command', () => {
77
75
  };
78
76
  const setupExtension = (name, settings = [], id = 'test-id', path = '/test/path') => {
79
77
  const extension = { name, path, id };
80
- mockGetExtensionAndManager.mockImplementation(async (n) => {
81
- if (n === name)
82
- return { extension, extensionManager: mockExtensionManager };
83
- return { extension: null, extensionManager: null };
84
- });
85
78
  mockExtensionManager.getExtensions.mockReturnValue([extension]);
86
79
  mockExtensionManager.loadExtensionConfig.mockResolvedValue({
87
80
  name,
@@ -96,13 +89,10 @@ describe('extensions configure command', () => {
96
89
  ]);
97
90
  updateSetting.mockResolvedValue(undefined);
98
91
  await runCommand('config test-ext TEST_VAR');
99
- expect(updateSetting).toHaveBeenCalledWith(expect.objectContaining({ name: 'test-ext' }), 'test-id', 'TEST_VAR', promptForSetting, 'user', tempWorkspaceDir);
92
+ expect(updateSetting).toHaveBeenCalledWith(expect.objectContaining({ name: 'test-ext' }), 'test-id', 'TEST_VAR', expect.any(Function), 'user', tempWorkspaceDir);
100
93
  });
101
94
  it('should handle missing extension', async () => {
102
- mockGetExtensionAndManager.mockResolvedValue({
103
- extension: null,
104
- extensionManager: null,
105
- });
95
+ mockExtensionManager.getExtensions.mockReturnValue([]);
106
96
  await runCommand('config missing-ext TEST_VAR');
107
97
  expect(updateSetting).not.toHaveBeenCalled();
108
98
  });
@@ -121,7 +111,7 @@ describe('extensions configure command', () => {
121
111
  updateSetting.mockResolvedValue(undefined);
122
112
  await runCommand('config test-ext');
123
113
  expect(debugLogger.log).toHaveBeenCalledWith('Configuring settings for "test-ext"...');
124
- expect(updateSetting).toHaveBeenCalledWith(expect.objectContaining({ name: 'test-ext' }), 'test-id', 'VAR_1', promptForSetting, 'user', tempWorkspaceDir);
114
+ expect(updateSetting).toHaveBeenCalledWith(expect.objectContaining({ name: 'test-ext' }), 'test-id', 'VAR_1', expect.any(Function), 'user', tempWorkspaceDir);
125
115
  });
126
116
  it('should verify overwrite if setting is already set', async () => {
127
117
  const settings = [{ name: 'Setting 1', envVar: 'VAR_1' }];
@@ -131,7 +121,7 @@ describe('extensions configure command', () => {
131
121
  return { VAR_1: 'existing' };
132
122
  return {};
133
123
  });
134
- prompts.mockResolvedValue({ overwrite: true });
124
+ prompts.mockResolvedValue({ confirm: true });
135
125
  updateSetting.mockResolvedValue(undefined);
136
126
  await runCommand('config test-ext');
137
127
  expect(prompts).toHaveBeenCalledWith(expect.objectContaining({
@@ -156,7 +146,7 @@ describe('extensions configure command', () => {
156
146
  const settings = [{ name: 'Setting 1', envVar: 'VAR_1' }];
157
147
  setupExtension('test-ext', settings);
158
148
  getScopedEnvContents.mockResolvedValue({ VAR_1: 'existing' });
159
- prompts.mockResolvedValue({ overwrite: false });
149
+ prompts.mockResolvedValue({ confirm: false });
160
150
  await runCommand('config test-ext');
161
151
  expect(prompts).toHaveBeenCalled();
162
152
  expect(updateSetting).not.toHaveBeenCalled();
@@ -1 +1 @@
1
- {"version":3,"file":"configure.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/configure.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configure.test.js","sourceRoot":"","sources":["../../../../src/commands/extensions/configure.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import chalk from 'chalk';
6
7
  import { debugLogger, } from '@google/gemini-cli-core';
7
8
  import { getErrorMessage } from '../../utils/errors.js';
8
9
  import { INSTALL_WARNING_MESSAGE, requestConsentNonInteractive, } from '../../config/extensions/consent.js';
@@ -32,7 +33,7 @@ export async function handleLink(args) {
32
33
  });
33
34
  await extensionManager.loadExtensions();
34
35
  const extension = await extensionManager.installOrUpdateExtension(installMetadata);
35
- debugLogger.log(`Extension "${extension.name}" linked successfully and enabled.`);
36
+ debugLogger.log(chalk.green(`Extension "${extension.name}" linked successfully and enabled.`));
36
37
  }
37
38
  catch (error) {
38
39
  debugLogger.error(getErrorMessage(error));
@@ -1 +1 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/extensions/link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,WAAW,GAEZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,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,cAAc,GAAG,IAAI,CAAC,OAAO;YACjC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,CAAC,CAAC,4BAA4B,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,WAAW,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACxD,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,YAAY;YACZ,cAAc;YACd,cAAc,EAAE,gBAAgB;YAChC,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM;SAC5C,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,SAAS,GACb,MAAM,gBAAgB,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;QACnE,WAAW,CAAC,GAAG,CACb,cAAc,SAAS,CAAC,IAAI,oCAAoC,CACjE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,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,MAAM,CAAC,SAAS,EAAE;QACjB,QAAQ,EACN,6FAA6F;QAC/F,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;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;YAC5B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAwB;SAChD,CAAC,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/extensions/link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,WAAW,GAEZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,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,cAAc,GAAG,IAAI,CAAC,OAAO;YACjC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,CAAC,CAAC,4BAA4B,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,WAAW,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACxD,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;YAC5C,YAAY;YACZ,cAAc;YACd,cAAc,EAAE,gBAAgB;YAChC,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM;SAC5C,CAAC,CAAC;QACH,MAAM,gBAAgB,CAAC,cAAc,EAAE,CAAC;QACxC,MAAM,SAAS,GACb,MAAM,gBAAgB,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC;QACnE,WAAW,CAAC,GAAG,CACb,KAAK,CAAC,KAAK,CACT,cAAc,SAAS,CAAC,IAAI,oCAAoC,CACjE,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,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,MAAM,CAAC,SAAS,EAAE;QACjB,QAAQ,EACN,6FAA6F;QAC/F,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;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;YAC5B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAwB;SAChD,CAAC,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -1,16 +1,26 @@
1
1
  /**
2
2
  * @license
3
- * Copyright 2025 Google LLC
3
+ * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { ExtensionManager } from '../../config/extension-manager.js';
7
7
  import { type ResolvedExtensionSetting } from '@google/gemini-cli-core';
8
+ import type { ExtensionConfig } from '../../config/extension.js';
9
+ import { type ExtensionSetting, ExtensionSettingScope } from '../../config/extensions/extensionSettings.js';
10
+ export interface ConfigLogger {
11
+ log(message: string): void;
12
+ error(message: string): void;
13
+ }
14
+ export type RequestSettingCallback = (setting: ExtensionSetting) => Promise<string>;
15
+ export type RequestConfirmationCallback = (message: string) => Promise<boolean>;
8
16
  export declare function getExtensionManager(): Promise<ExtensionManager>;
9
- export declare function getExtensionAndManager(name: string): Promise<{
17
+ export declare function getExtensionAndManager(extensionManager: ExtensionManager, name: string, logger?: ConfigLogger): Promise<{
10
18
  extension: null;
11
- extensionManager: null;
12
19
  } | {
13
20
  extension: import("@google/gemini-cli-core").GeminiCLIExtension;
14
- extensionManager: ExtensionManager;
15
21
  }>;
22
+ export declare function configureSpecificSetting(extensionManager: ExtensionManager, extensionName: string, settingKey: string, scope: ExtensionSettingScope, logger?: ConfigLogger, requestSetting?: RequestSettingCallback): Promise<void>;
23
+ export declare function configureExtension(extensionManager: ExtensionManager, extensionName: string, scope: ExtensionSettingScope, logger?: ConfigLogger, requestSetting?: RequestSettingCallback, requestConfirmation?: RequestConfirmationCallback): Promise<void>;
24
+ export declare function configureAllExtensions(extensionManager: ExtensionManager, scope: ExtensionSettingScope, logger?: ConfigLogger, requestSetting?: RequestSettingCallback, requestConfirmation?: RequestConfirmationCallback): Promise<void>;
25
+ export declare function configureExtensionSettings(extensionConfig: ExtensionConfig, extensionId: string, scope: ExtensionSettingScope, logger?: ConfigLogger, requestSetting?: RequestSettingCallback, requestConfirmation?: RequestConfirmationCallback): Promise<void>;
16
26
  export declare function getFormattedSettingValue(setting: ResolvedExtensionSetting): string;
@@ -1,13 +1,28 @@
1
1
  /**
2
2
  * @license
3
- * Copyright 2025 Google LLC
3
+ * Copyright 2026 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { ExtensionManager } from '../../config/extension-manager.js';
7
- import { promptForSetting } from '../../config/extensions/extensionSettings.js';
8
7
  import { loadSettings } from '../../config/settings.js';
9
8
  import { requestConsentNonInteractive } from '../../config/extensions/consent.js';
10
9
  import { debugLogger, } from '@google/gemini-cli-core';
10
+ import prompts from 'prompts';
11
+ import { promptForSetting, updateSetting, getScopedEnvContents, ExtensionSettingScope, } from '../../config/extensions/extensionSettings.js';
12
+ const defaultLogger = {
13
+ log: (message) => debugLogger.log(message),
14
+ error: (message) => debugLogger.error(message),
15
+ };
16
+ const defaultRequestSetting = async (setting) => promptForSetting(setting);
17
+ const defaultRequestConfirmation = async (message) => {
18
+ const response = await prompts({
19
+ type: 'confirm',
20
+ name: 'confirm',
21
+ message,
22
+ initial: false,
23
+ });
24
+ return response.confirm;
25
+ };
11
26
  export async function getExtensionManager() {
12
27
  const workspaceDir = process.cwd();
13
28
  const extensionManager = new ExtensionManager({
@@ -19,16 +34,82 @@ export async function getExtensionManager() {
19
34
  await extensionManager.loadExtensions();
20
35
  return extensionManager;
21
36
  }
22
- export async function getExtensionAndManager(name) {
23
- const extensionManager = await getExtensionManager();
37
+ export async function getExtensionAndManager(extensionManager, name, logger = defaultLogger) {
24
38
  const extension = extensionManager
25
39
  .getExtensions()
26
40
  .find((ext) => ext.name === name);
27
41
  if (!extension) {
28
- debugLogger.error(`Extension "${name}" is not installed.`);
29
- return { extension: null, extensionManager: null };
42
+ logger.error(`Extension "${name}" is not installed.`);
43
+ return { extension: null };
44
+ }
45
+ return { extension };
46
+ }
47
+ export async function configureSpecificSetting(extensionManager, extensionName, settingKey, scope, logger = defaultLogger, requestSetting = defaultRequestSetting) {
48
+ const { extension } = await getExtensionAndManager(extensionManager, extensionName, logger);
49
+ if (!extension) {
50
+ return;
51
+ }
52
+ const extensionConfig = await extensionManager.loadExtensionConfig(extension.path);
53
+ if (!extensionConfig) {
54
+ logger.error(`Could not find configuration for extension "${extensionName}".`);
55
+ return;
56
+ }
57
+ await updateSetting(extensionConfig, extension.id, settingKey, requestSetting, scope, process.cwd());
58
+ logger.log(`Setting "${settingKey}" updated.`);
59
+ }
60
+ export async function configureExtension(extensionManager, extensionName, scope, logger = defaultLogger, requestSetting = defaultRequestSetting, requestConfirmation = defaultRequestConfirmation) {
61
+ const { extension } = await getExtensionAndManager(extensionManager, extensionName, logger);
62
+ if (!extension) {
63
+ return;
64
+ }
65
+ const extensionConfig = await extensionManager.loadExtensionConfig(extension.path);
66
+ if (!extensionConfig ||
67
+ !extensionConfig.settings ||
68
+ extensionConfig.settings.length === 0) {
69
+ logger.log(`Extension "${extensionName}" has no settings to configure.`);
70
+ return;
71
+ }
72
+ logger.log(`Configuring settings for "${extensionName}"...`);
73
+ await configureExtensionSettings(extensionConfig, extension.id, scope, logger, requestSetting, requestConfirmation);
74
+ }
75
+ export async function configureAllExtensions(extensionManager, scope, logger = defaultLogger, requestSetting = defaultRequestSetting, requestConfirmation = defaultRequestConfirmation) {
76
+ const extensions = extensionManager.getExtensions();
77
+ if (extensions.length === 0) {
78
+ logger.log('No extensions installed.');
79
+ return;
80
+ }
81
+ for (const extension of extensions) {
82
+ const extensionConfig = await extensionManager.loadExtensionConfig(extension.path);
83
+ if (extensionConfig &&
84
+ extensionConfig.settings &&
85
+ extensionConfig.settings.length > 0) {
86
+ logger.log(`\nConfiguring settings for "${extension.name}"...`);
87
+ await configureExtensionSettings(extensionConfig, extension.id, scope, logger, requestSetting, requestConfirmation);
88
+ }
89
+ }
90
+ }
91
+ export async function configureExtensionSettings(extensionConfig, extensionId, scope, logger = defaultLogger, requestSetting = defaultRequestSetting, requestConfirmation = defaultRequestConfirmation) {
92
+ const currentScopedSettings = await getScopedEnvContents(extensionConfig, extensionId, scope, process.cwd());
93
+ let workspaceSettings = {};
94
+ if (scope === ExtensionSettingScope.USER) {
95
+ workspaceSettings = await getScopedEnvContents(extensionConfig, extensionId, ExtensionSettingScope.WORKSPACE, process.cwd());
96
+ }
97
+ if (!extensionConfig.settings)
98
+ return;
99
+ for (const setting of extensionConfig.settings) {
100
+ const currentValue = currentScopedSettings[setting.envVar];
101
+ const workspaceValue = workspaceSettings[setting.envVar];
102
+ if (workspaceValue !== undefined) {
103
+ logger.log(`Note: Setting "${setting.name}" is already configured in the workspace scope.`);
104
+ }
105
+ if (currentValue !== undefined) {
106
+ const confirmed = await requestConfirmation(`Setting "${setting.name}" (${setting.envVar}) is already set. Overwrite?`);
107
+ if (!confirmed) {
108
+ continue;
109
+ }
110
+ }
111
+ await updateSetting(extensionConfig, extensionId, setting.envVar, requestSetting, scope, process.cwd());
30
112
  }
31
- return { extension, extensionManager };
32
113
  }
33
114
  export function getFormattedSettingValue(setting) {
34
115
  if (!setting.value) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/commands/extensions/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EACL,WAAW,GAEZ,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC;QAC5C,YAAY;QACZ,cAAc,EAAE,4BAA4B;QAC5C,cAAc,EAAE,gBAAgB;QAChC,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,MAAM;KAC5C,CAAC,CAAC;IACH,MAAM,gBAAgB,CAAC,cAAc,EAAE,CAAC;IACxC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAAY;IACvD,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,EAAE,CAAC;IACrD,MAAM,SAAS,GAAG,gBAAgB;SAC/B,aAAa,EAAE;SACf,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAEpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,cAAc,IAAI,qBAAqB,CAAC,CAAC;QAC3D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAAiC;IAEjC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/commands/extensions/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { CommandModule } from 'yargs';
7
+ interface LinkArgs {
8
+ path: string;
9
+ scope?: 'user' | 'workspace';
10
+ consent?: boolean;
11
+ }
12
+ export declare function handleLink(args: LinkArgs): Promise<void>;
13
+ export declare const linkCommand: CommandModule;
14
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { debugLogger } from '@google/gemini-cli-core';
7
+ import chalk from 'chalk';
8
+ import { getErrorMessage } from '../../utils/errors.js';
9
+ import { exitCli } from '../utils.js';
10
+ import { requestConsentNonInteractive, skillsConsentString, } from '../../config/extensions/consent.js';
11
+ import { linkSkill } from '../../utils/skillUtils.js';
12
+ export async function handleLink(args) {
13
+ try {
14
+ const { scope = 'user', consent } = args;
15
+ await linkSkill(args.path, scope, (msg) => debugLogger.log(msg), async (skills, targetDir) => {
16
+ const consentString = await skillsConsentString(skills, args.path, targetDir, true);
17
+ if (consent) {
18
+ debugLogger.log('You have consented to the following:');
19
+ debugLogger.log(consentString);
20
+ return true;
21
+ }
22
+ return requestConsentNonInteractive(consentString);
23
+ });
24
+ debugLogger.log(chalk.green('\nSuccessfully linked skills.'));
25
+ }
26
+ catch (error) {
27
+ debugLogger.error(getErrorMessage(error));
28
+ await exitCli(1);
29
+ }
30
+ }
31
+ export const linkCommand = {
32
+ command: 'link <path>',
33
+ describe: 'Links an agent skill from a local path. Updates to the source will be reflected immediately.',
34
+ builder: (yargs) => yargs
35
+ .positional('path', {
36
+ describe: 'The local path of the skill to link.',
37
+ type: 'string',
38
+ demandOption: true,
39
+ })
40
+ .option('scope', {
41
+ describe: 'The scope to link the skill into. Defaults to "user" (global).',
42
+ choices: ['user', 'workspace'],
43
+ default: 'user',
44
+ })
45
+ .option('consent', {
46
+ describe: 'Acknowledge the security risks of linking a skill and skip the confirmation prompt.',
47
+ type: 'boolean',
48
+ default: false,
49
+ })
50
+ .check((argv) => {
51
+ if (!argv.path) {
52
+ throw new Error('The path argument must be provided.');
53
+ }
54
+ return true;
55
+ }),
56
+ handler: async (argv) => {
57
+ await handleLink({
58
+ path: argv['path'],
59
+ scope: argv['scope'],
60
+ consent: argv['consent'],
61
+ });
62
+ await exitCli();
63
+ },
64
+ };
65
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/commands/skills/link.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,4BAA4B,EAC5B,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAQtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAEzC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,EACT,KAAK,EACL,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAC7B,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;YAC1B,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAC7C,MAAM,EACN,IAAI,CAAC,IAAI,EACT,SAAS,EACT,IAAI,CACL,CAAC;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;gBACxD,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,4BAA4B,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC,CACF,CAAC;QAEF,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAkB;IACxC,OAAO,EAAE,aAAa;IACtB,QAAQ,EACN,8FAA8F;IAChG,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,UAAU,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,sCAAsC;QAChD,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI;KACnB,CAAC;SACD,MAAM,CAAC,OAAO,EAAE;QACf,QAAQ,EACN,gEAAgE;QAClE,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC9B,OAAO,EAAE,MAAM;KAChB,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,QAAQ,EACN,qFAAqF;QACvF,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;SACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,UAAU,CAAC;YACf,IAAI,EAAE,IAAI,CAAC,MAAM,CAAW;YAC5B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAyB;YAC5C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAwB;SAChD,CAAC,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { handleLink, linkCommand } from './link.js';
8
+ const mockLinkSkill = vi.hoisted(() => vi.fn());
9
+ const mockRequestConsentNonInteractive = vi.hoisted(() => vi.fn());
10
+ const mockSkillsConsentString = vi.hoisted(() => vi.fn());
11
+ vi.mock('../../utils/skillUtils.js', () => ({
12
+ linkSkill: mockLinkSkill,
13
+ }));
14
+ vi.mock('@google/gemini-cli-core', () => ({
15
+ debugLogger: { log: vi.fn(), error: vi.fn() },
16
+ }));
17
+ vi.mock('../../config/extensions/consent.js', () => ({
18
+ requestConsentNonInteractive: mockRequestConsentNonInteractive,
19
+ skillsConsentString: mockSkillsConsentString,
20
+ }));
21
+ import { debugLogger } from '@google/gemini-cli-core';
22
+ describe('skills link command', () => {
23
+ beforeEach(() => {
24
+ vi.clearAllMocks();
25
+ vi.spyOn(process, 'exit').mockImplementation(() => undefined);
26
+ });
27
+ describe('linkCommand', () => {
28
+ it('should have correct command and describe', () => {
29
+ expect(linkCommand.command).toBe('link <path>');
30
+ expect(linkCommand.describe).toContain('Links an agent skill');
31
+ });
32
+ });
33
+ it('should call linkSkill with correct arguments', async () => {
34
+ const sourcePath = '/source/path';
35
+ mockLinkSkill.mockResolvedValue([
36
+ { name: 'test-skill', location: '/dest/path' },
37
+ ]);
38
+ await handleLink({ path: sourcePath, scope: 'user' });
39
+ expect(mockLinkSkill).toHaveBeenCalledWith(sourcePath, 'user', expect.any(Function), expect.any(Function));
40
+ expect(debugLogger.log).toHaveBeenCalledWith(expect.stringContaining('Successfully linked skills'));
41
+ });
42
+ it('should handle linkSkill failure', async () => {
43
+ mockLinkSkill.mockRejectedValue(new Error('Link failed'));
44
+ await handleLink({ path: '/some/path' });
45
+ expect(debugLogger.error).toHaveBeenCalledWith('Link failed');
46
+ expect(process.exit).toHaveBeenCalledWith(1);
47
+ });
48
+ });
49
+ //# sourceMappingURL=link.test.js.map