@google/gemini-cli-core 0.1.14 → 0.1.15

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 (68) hide show
  1. package/dist/google-gemini-cli-core-0.1.13.tgz +0 -0
  2. package/dist/src/code_assist/oauth2.test.js +14 -14
  3. package/dist/src/code_assist/oauth2.test.js.map +1 -1
  4. package/dist/src/config/config.d.ts +3 -0
  5. package/dist/src/config/config.js +6 -0
  6. package/dist/src/config/config.js.map +1 -1
  7. package/dist/src/ide/ide-client.js +11 -2
  8. package/dist/src/ide/ide-client.js.map +1 -1
  9. package/dist/src/index.d.ts +5 -0
  10. package/dist/src/index.js +7 -0
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/mcp/oauth-provider.d.ts +5 -1
  13. package/dist/src/mcp/oauth-provider.js +36 -11
  14. package/dist/src/mcp/oauth-provider.js.map +1 -1
  15. package/dist/src/mcp/oauth-provider.test.js +2 -2
  16. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  17. package/dist/src/mcp/oauth-token-storage.d.ts +3 -1
  18. package/dist/src/mcp/oauth-token-storage.js +3 -1
  19. package/dist/src/mcp/oauth-token-storage.js.map +1 -1
  20. package/dist/src/prompts/mcp-prompts.d.ts +8 -0
  21. package/dist/src/prompts/mcp-prompts.js +13 -0
  22. package/dist/src/prompts/mcp-prompts.js.map +1 -0
  23. package/dist/src/prompts/prompt-registry.d.ts +26 -0
  24. package/dist/src/prompts/prompt-registry.js +47 -0
  25. package/dist/src/prompts/prompt-registry.js.map +1 -0
  26. package/dist/src/services/fileDiscoveryService.test.js +101 -60
  27. package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
  28. package/dist/src/services/gitService.test.js +67 -86
  29. package/dist/src/services/gitService.test.js.map +1 -1
  30. package/dist/src/services/shellExecutionService.d.ts +70 -0
  31. package/dist/src/services/shellExecutionService.js +152 -0
  32. package/dist/src/services/shellExecutionService.js.map +1 -0
  33. package/dist/src/services/shellExecutionService.test.d.ts +6 -0
  34. package/dist/src/services/shellExecutionService.test.js +258 -0
  35. package/dist/src/services/shellExecutionService.test.js.map +1 -0
  36. package/dist/src/tools/glob.test.js +7 -4
  37. package/dist/src/tools/glob.test.js.map +1 -1
  38. package/dist/src/tools/grep.test.js +4 -4
  39. package/dist/src/tools/grep.test.js.map +1 -1
  40. package/dist/src/tools/mcp-client.d.ts +26 -2
  41. package/dist/src/tools/mcp-client.js +64 -10
  42. package/dist/src/tools/mcp-client.js.map +1 -1
  43. package/dist/src/tools/mcp-client.test.js +53 -1
  44. package/dist/src/tools/mcp-client.test.js.map +1 -1
  45. package/dist/src/tools/modifiable-tool.test.js +51 -62
  46. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  47. package/dist/src/tools/shell.d.ts +1 -0
  48. package/dist/src/tools/shell.js +137 -181
  49. package/dist/src/tools/shell.js.map +1 -1
  50. package/dist/src/tools/shell.test.js +249 -101
  51. package/dist/src/tools/shell.test.js.map +1 -1
  52. package/dist/src/tools/tool-registry.js +3 -3
  53. package/dist/src/tools/tool-registry.js.map +1 -1
  54. package/dist/src/tools/tool-registry.test.js +2 -2
  55. package/dist/src/tools/tool-registry.test.js.map +1 -1
  56. package/dist/src/utils/formatters.d.ts +6 -0
  57. package/dist/src/utils/formatters.js +16 -0
  58. package/dist/src/utils/formatters.js.map +1 -0
  59. package/dist/src/utils/shell-utils.d.ts +37 -3
  60. package/dist/src/utils/shell-utils.js +110 -47
  61. package/dist/src/utils/shell-utils.js.map +1 -1
  62. package/dist/src/utils/shell-utils.test.js +146 -396
  63. package/dist/src/utils/shell-utils.test.js.map +1 -1
  64. package/dist/src/utils/textUtils.d.ts +13 -0
  65. package/dist/src/utils/textUtils.js +28 -0
  66. package/dist/src/utils/textUtils.js.map +1 -0
  67. package/dist/tsconfig.tsbuildinfo +1 -1
  68. package/package.json +1 -1
@@ -31,12 +31,46 @@ export declare function stripShellWrapper(command: string): string;
31
31
  * @returns true if command substitution would be executed by bash
32
32
  */
33
33
  export declare function detectCommandSubstitution(command: string): boolean;
34
+ /**
35
+ * Checks a shell command against security policies and allowlists.
36
+ *
37
+ * This function operates in one of two modes depending on the presence of
38
+ * the `sessionAllowlist` parameter:
39
+ *
40
+ * 1. **"Default Deny" Mode (sessionAllowlist is provided):** This is the
41
+ * strictest mode, used for user-defined scripts like custom commands.
42
+ * A command is only permitted if it is found on the global `coreTools`
43
+ * allowlist OR the provided `sessionAllowlist`. It must not be on the
44
+ * global `excludeTools` blocklist.
45
+ *
46
+ * 2. **"Default Allow" Mode (sessionAllowlist is NOT provided):** This mode
47
+ * is used for direct tool invocations (e.g., by the model). If a strict
48
+ * global `coreTools` allowlist exists, commands must be on it. Otherwise,
49
+ * any command is permitted as long as it is not on the `excludeTools`
50
+ * blocklist.
51
+ *
52
+ * @param command The shell command string to validate.
53
+ * @param config The application configuration.
54
+ * @param sessionAllowlist A session-level list of approved commands. Its
55
+ * presence activates "Default Deny" mode.
56
+ * @returns An object detailing which commands are not allowed.
57
+ */
58
+ export declare function checkCommandPermissions(command: string, config: Config, sessionAllowlist?: Set<string>): {
59
+ allAllowed: boolean;
60
+ disallowedCommands: string[];
61
+ blockReason?: string;
62
+ isHardDenial?: boolean;
63
+ };
34
64
  /**
35
65
  * Determines whether a given shell command is allowed to execute based on
36
66
  * the tool's configuration including allowlists and blocklists.
37
- * @param command The shell command string to validate
38
- * @param config The application configuration
39
- * @returns An object with 'allowed' boolean and optional 'reason' string if not allowed
67
+ *
68
+ * This function operates in "default allow" mode. It is a wrapper around
69
+ * `checkCommandPermissions`.
70
+ *
71
+ * @param command The shell command string to validate.
72
+ * @param config The application configuration.
73
+ * @returns An object with 'allowed' boolean and optional 'reason' string if not allowed.
40
74
  */
41
75
  export declare function isCommandAllowed(command: string, config: Config): {
42
76
  allowed: boolean;
@@ -157,41 +157,47 @@ export function detectCommandSubstitution(command) {
157
157
  return false;
158
158
  }
159
159
  /**
160
- * Determines whether a given shell command is allowed to execute based on
161
- * the tool's configuration including allowlists and blocklists.
162
- * @param command The shell command string to validate
163
- * @param config The application configuration
164
- * @returns An object with 'allowed' boolean and optional 'reason' string if not allowed
160
+ * Checks a shell command against security policies and allowlists.
161
+ *
162
+ * This function operates in one of two modes depending on the presence of
163
+ * the `sessionAllowlist` parameter:
164
+ *
165
+ * 1. **"Default Deny" Mode (sessionAllowlist is provided):** This is the
166
+ * strictest mode, used for user-defined scripts like custom commands.
167
+ * A command is only permitted if it is found on the global `coreTools`
168
+ * allowlist OR the provided `sessionAllowlist`. It must not be on the
169
+ * global `excludeTools` blocklist.
170
+ *
171
+ * 2. **"Default Allow" Mode (sessionAllowlist is NOT provided):** This mode
172
+ * is used for direct tool invocations (e.g., by the model). If a strict
173
+ * global `coreTools` allowlist exists, commands must be on it. Otherwise,
174
+ * any command is permitted as long as it is not on the `excludeTools`
175
+ * blocklist.
176
+ *
177
+ * @param command The shell command string to validate.
178
+ * @param config The application configuration.
179
+ * @param sessionAllowlist A session-level list of approved commands. Its
180
+ * presence activates "Default Deny" mode.
181
+ * @returns An object detailing which commands are not allowed.
165
182
  */
166
- export function isCommandAllowed(command, config) {
167
- // 0. Disallow command substitution
168
- // Parse the command to check for unquoted/unescaped command substitution
169
- const hasCommandSubstitution = detectCommandSubstitution(command);
170
- if (hasCommandSubstitution) {
183
+ export function checkCommandPermissions(command, config, sessionAllowlist) {
184
+ // Disallow command substitution for security.
185
+ if (detectCommandSubstitution(command)) {
171
186
  return {
172
- allowed: false,
173
- reason: 'Command substitution using $(), <(), or >() is not allowed for security reasons',
187
+ allAllowed: false,
188
+ disallowedCommands: [command],
189
+ blockReason: 'Command substitution using $(), <(), or >() is not allowed for security reasons',
190
+ isHardDenial: true,
174
191
  };
175
192
  }
176
193
  const SHELL_TOOL_NAMES = ['run_shell_command', 'ShellTool'];
177
194
  const normalize = (cmd) => cmd.trim().replace(/\s+/g, ' ');
178
- /**
179
- * Checks if a command string starts with a given prefix, ensuring it's a
180
- * whole word match (i.e., followed by a space or it's an exact match).
181
- * e.g., `isPrefixedBy('npm install', 'npm')` -> true
182
- * e.g., `isPrefixedBy('npm', 'npm')` -> true
183
- * e.g., `isPrefixedBy('npminstall', 'npm')` -> false
184
- */
185
195
  const isPrefixedBy = (cmd, prefix) => {
186
196
  if (!cmd.startsWith(prefix)) {
187
197
  return false;
188
198
  }
189
199
  return cmd.length === prefix.length || cmd[prefix.length] === ' ';
190
200
  };
191
- /**
192
- * Extracts and normalizes shell commands from a list of tool strings.
193
- * e.g., 'ShellTool("ls -l")' becomes 'ls -l'
194
- */
195
201
  const extractCommands = (tools) => tools.flatMap((tool) => {
196
202
  for (const toolName of SHELL_TOOL_NAMES) {
197
203
  if (tool.startsWith(`${toolName}(`) && tool.endsWith(')')) {
@@ -202,42 +208,99 @@ export function isCommandAllowed(command, config) {
202
208
  });
203
209
  const coreTools = config.getCoreTools() || [];
204
210
  const excludeTools = config.getExcludeTools() || [];
205
- // 1. Check if the shell tool is globally disabled.
211
+ const commandsToValidate = splitCommands(command).map(normalize);
212
+ // 1. Blocklist Check (Highest Priority)
206
213
  if (SHELL_TOOL_NAMES.some((name) => excludeTools.includes(name))) {
207
214
  return {
208
- allowed: false,
209
- reason: 'Shell tool is globally disabled in configuration',
215
+ allAllowed: false,
216
+ disallowedCommands: commandsToValidate,
217
+ blockReason: 'Shell tool is globally disabled in configuration',
218
+ isHardDenial: true,
210
219
  };
211
220
  }
212
- const blockedCommands = new Set(extractCommands(excludeTools));
213
- const allowedCommands = new Set(extractCommands(coreTools));
214
- const hasSpecificAllowedCommands = allowedCommands.size > 0;
215
- const isWildcardAllowed = SHELL_TOOL_NAMES.some((name) => coreTools.includes(name));
216
- const commandsToValidate = splitCommands(command).map(normalize);
217
- const blockedCommandsArr = [...blockedCommands];
221
+ const blockedCommands = extractCommands(excludeTools);
218
222
  for (const cmd of commandsToValidate) {
219
- // 2. Check if the command is on the blocklist.
220
- const isBlocked = blockedCommandsArr.some((blocked) => isPrefixedBy(cmd, blocked));
221
- if (isBlocked) {
223
+ if (blockedCommands.some((blocked) => isPrefixedBy(cmd, blocked))) {
224
+ return {
225
+ allAllowed: false,
226
+ disallowedCommands: [cmd],
227
+ blockReason: `Command '${cmd}' is blocked by configuration`,
228
+ isHardDenial: true,
229
+ };
230
+ }
231
+ }
232
+ const globallyAllowedCommands = extractCommands(coreTools);
233
+ const isWildcardAllowed = SHELL_TOOL_NAMES.some((name) => coreTools.includes(name));
234
+ // If there's a global wildcard, all commands are allowed at this point
235
+ // because they have already passed the blocklist check.
236
+ if (isWildcardAllowed) {
237
+ return { allAllowed: true, disallowedCommands: [] };
238
+ }
239
+ if (sessionAllowlist) {
240
+ // "DEFAULT DENY" MODE: A session allowlist is provided.
241
+ // All commands must be in either the session or global allowlist.
242
+ const disallowedCommands = [];
243
+ for (const cmd of commandsToValidate) {
244
+ const isSessionAllowed = [...sessionAllowlist].some((allowed) => isPrefixedBy(cmd, normalize(allowed)));
245
+ if (isSessionAllowed)
246
+ continue;
247
+ const isGloballyAllowed = globallyAllowedCommands.some((allowed) => isPrefixedBy(cmd, allowed));
248
+ if (isGloballyAllowed)
249
+ continue;
250
+ disallowedCommands.push(cmd);
251
+ }
252
+ if (disallowedCommands.length > 0) {
222
253
  return {
223
- allowed: false,
224
- reason: `Command '${cmd}' is blocked by configuration`,
254
+ allAllowed: false,
255
+ disallowedCommands,
256
+ blockReason: `Command(s) not on the global or session allowlist.`,
257
+ isHardDenial: false, // This is a soft denial; confirmation is possible.
225
258
  };
226
259
  }
227
- // 3. If in strict allow-list mode, check if the command is permitted.
228
- const isStrictAllowlist = hasSpecificAllowedCommands && !isWildcardAllowed;
229
- const allowedCommandsArr = [...allowedCommands];
230
- if (isStrictAllowlist) {
231
- const isAllowed = allowedCommandsArr.some((allowed) => isPrefixedBy(cmd, allowed));
232
- if (!isAllowed) {
260
+ }
261
+ else {
262
+ // "DEFAULT ALLOW" MODE: No session allowlist.
263
+ const hasSpecificAllowedCommands = globallyAllowedCommands.length > 0;
264
+ if (hasSpecificAllowedCommands) {
265
+ const disallowedCommands = [];
266
+ for (const cmd of commandsToValidate) {
267
+ const isGloballyAllowed = globallyAllowedCommands.some((allowed) => isPrefixedBy(cmd, allowed));
268
+ if (!isGloballyAllowed) {
269
+ disallowedCommands.push(cmd);
270
+ }
271
+ }
272
+ if (disallowedCommands.length > 0) {
233
273
  return {
234
- allowed: false,
235
- reason: `Command '${cmd}' is not in the allowed commands list`,
274
+ allAllowed: false,
275
+ disallowedCommands,
276
+ blockReason: `Command(s) not in the allowed commands list.`,
277
+ isHardDenial: false, // This is a soft denial.
236
278
  };
237
279
  }
238
280
  }
281
+ // If no specific global allowlist exists, and it passed the blocklist,
282
+ // the command is allowed by default.
283
+ }
284
+ // If all checks for the current mode pass, the command is allowed.
285
+ return { allAllowed: true, disallowedCommands: [] };
286
+ }
287
+ /**
288
+ * Determines whether a given shell command is allowed to execute based on
289
+ * the tool's configuration including allowlists and blocklists.
290
+ *
291
+ * This function operates in "default allow" mode. It is a wrapper around
292
+ * `checkCommandPermissions`.
293
+ *
294
+ * @param command The shell command string to validate.
295
+ * @param config The application configuration.
296
+ * @returns An object with 'allowed' boolean and optional 'reason' string if not allowed.
297
+ */
298
+ export function isCommandAllowed(command, config) {
299
+ // By not providing a sessionAllowlist, we invoke "default allow" behavior.
300
+ const { allAllowed, blockReason } = checkCommandPermissions(command, config);
301
+ if (allAllowed) {
302
+ return { allowed: true };
239
303
  }
240
- // 4. If all checks pass, the command is allowed.
241
- return { allowed: true };
304
+ return { allowed: false, reason: blockReason };
242
305
  }
243
306
  //# sourceMappingURL=shell-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell-utils.js","sourceRoot":"","sources":["../../../src/utils/shell-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-utils.js","sourceRoot":"","sources":["../../../src/utils/shell-utils.ts"],"names":[],"mappings":"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"}