@google/gemini-cli 0.40.0-preview.2 → 0.40.0-preview.4

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 (66) hide show
  1. package/bundle/{chunk-3GU3LF3I.js → chunk-4XVBQQNJ.js} +181 -16
  2. package/bundle/{chunk-PLUWJHZZ.js → chunk-547AWTTH.js} +238 -61
  3. package/bundle/{chunk-EFCQXWIF.js → chunk-63PTTRTA.js} +3 -3
  4. package/bundle/{chunk-IMEC72NS.js → chunk-ATGIEBEB.js} +1 -1
  5. package/bundle/{chunk-WL5MCPV2.js → chunk-BV2W6YE6.js} +2 -2
  6. package/bundle/{chunk-QK7UWGBN.js → chunk-CIO3GUGQ.js} +1382 -1083
  7. package/bundle/{chunk-HV36F4CL.js → chunk-CJQVVQSH.js} +134 -354
  8. package/bundle/{chunk-VCGILCZV.js → chunk-F73F75XM.js} +16 -0
  9. package/bundle/{chunk-TDW6FM3A.js → chunk-G356GKHH.js} +1 -1
  10. package/bundle/{chunk-4IJPDKI6.js → chunk-H4NQBTXN.js} +146 -364
  11. package/bundle/{chunk-GXRQOXQF.js → chunk-H7F2VOIJ.js} +178 -14
  12. package/bundle/chunk-HF7X35D3.js +80012 -0
  13. package/bundle/{chunk-WHIWQCI5.js → chunk-HGFADN5A.js} +1 -1
  14. package/bundle/{chunk-NO7STVVM.js → chunk-KG7ZFMJL.js} +1413 -1089
  15. package/bundle/{chunk-33ANPP4S.js → chunk-LMVZLINC.js} +3 -3
  16. package/bundle/chunk-LODNDE3S.js +17505 -0
  17. package/bundle/{chunk-IUVLJUOL.js → chunk-LVHUYMBU.js} +2 -2
  18. package/bundle/{chunk-NIVCRM5L.js → chunk-M76FWZ5L.js} +134 -354
  19. package/bundle/{chunk-RM43GNQQ.js → chunk-NV6UCR4K.js} +7711 -12909
  20. package/bundle/{chunk-MUGUV6RZ.js → chunk-PRZIW6SM.js} +2 -2
  21. package/bundle/chunk-RENFZ63F.js +351149 -0
  22. package/bundle/chunk-SYPUOR3U.js +156 -0
  23. package/bundle/{chunk-2RHFUIH4.js → chunk-UHHRGNIO.js} +16 -0
  24. package/bundle/chunk-VQ7N6NVX.js +1571 -0
  25. package/bundle/{chunk-UBXB5AEJ.js → chunk-WSTHO4WR.js} +3 -3
  26. package/bundle/chunk-ZQNX6OWU.js +118 -0
  27. package/bundle/{cleanup-A7WXWAMI.js → cleanup-4EFDM2N7.js} +3 -3
  28. package/bundle/{cleanup-EWPIME2M.js → cleanup-4RRVO4GO.js} +3 -3
  29. package/bundle/{cleanup-IPLJJT5S.js → cleanup-DNS7PXYC.js} +3 -3
  30. package/bundle/cleanup-DXHNV2J6.js +33 -0
  31. package/bundle/{core-VCDK23ZC.js → core-WQSFCPEO.js} +28 -2
  32. package/bundle/{devtoolsService-6Y6YER6T.js → devtoolsService-JWET4G6G.js} +3 -3
  33. package/bundle/{devtoolsService-B5VVZ752.js → devtoolsService-LPEBYJVD.js} +3 -3
  34. package/bundle/{devtoolsService-2JXSALRU.js → devtoolsService-S2LBUUZU.js} +5 -4
  35. package/bundle/devtoolsService-YCRNWWXE.js +852 -0
  36. package/bundle/{dist-UIXQETMC.js → dist-ANTOB3YW.js} +28 -2
  37. package/bundle/{core-BQT6T3CH.js → dist-RIVCP5ZD.js} +28 -2
  38. package/bundle/dist-UH565MTG.js +2046 -0
  39. package/bundle/docs/cli/cli-reference.md +1 -0
  40. package/bundle/docs/cli/trusted-folders.md +28 -0
  41. package/bundle/docs/reference/configuration.md +14 -0
  42. package/bundle/{gemini-ID44Z5SV.js → gemini-27FQ5BI4.js} +66 -22
  43. package/bundle/{gemini-54LH6RUH.js → gemini-57EC2ZF7.js} +241 -182
  44. package/bundle/{gemini-44W2QEZI.js → gemini-JAZVYRDD.js} +64 -21
  45. package/bundle/gemini-TQZRS37Q.js +16087 -0
  46. package/bundle/gemini.js +3 -3
  47. package/bundle/{interactiveCli-5MTJDFYC.js → interactiveCli-E35R6QQC.js} +17 -167
  48. package/bundle/{interactiveCli-JFBPGMNM.js → interactiveCli-FPHSBRV3.js} +30 -179
  49. package/bundle/{interactiveCli-5B3X6RNB.js → interactiveCli-L3EK4XEX.js} +300 -432
  50. package/bundle/interactiveCli-MVHR4VV7.js +34448 -0
  51. package/bundle/{liteRtServerManager-76V63PRJ.js → liteRtServerManager-LXEAYAUP.js} +4 -4
  52. package/bundle/{liteRtServerManager-WQMDPACQ.js → liteRtServerManager-ORSW3R4F.js} +4 -4
  53. package/bundle/{liteRtServerManager-6GJWEP5W.js → liteRtServerManager-PI4ZNFB5.js} +4 -4
  54. package/bundle/liteRtServerManager-YYXO5Q3I.js +65 -0
  55. package/bundle/{memoryDiscovery-RYHYLAPJ.js → memoryDiscovery-CZURD35O.js} +1 -1
  56. package/bundle/{memoryDiscovery-HWEYBJE7.js → memoryDiscovery-GZLXKRGB.js} +1 -1
  57. package/bundle/node_modules/@google/gemini-cli-devtools/package.json +1 -1
  58. package/bundle/{oauth2-provider-EX6SQEZP.js → oauth2-provider-B3NTBNAM.js} +2 -2
  59. package/bundle/{oauth2-provider-ZF52AWQY.js → oauth2-provider-ENF2D4Q7.js} +39 -73
  60. package/bundle/{oauth2-provider-JCKLNKRV.js → oauth2-provider-I3G773GE.js} +2 -2
  61. package/bundle/oauth2-provider-WTF7AHQ2.js +237 -0
  62. package/bundle/{start-CYDJTOAP.js → start-CRIFZ3SW.js} +6 -6
  63. package/bundle/{start-SHOUHW3Y.js → start-KVFKS3IT.js} +6 -6
  64. package/bundle/{start-B6EMQCH5.js → start-OTLGMCNH.js} +6 -6
  65. package/bundle/start-S3REI3X2.js +18 -0
  66. package/package.json +1 -1
@@ -52,6 +52,7 @@ These commands are available within the interactive REPL.
52
52
  | `--prompt-interactive` | `-i` | string | - | Execute prompt and continue in interactive mode |
53
53
  | `--worktree` | `-w` | string | - | Start Gemini in a new git worktree. If no name is provided, one is generated automatically. Requires `experimental.worktrees: true` in settings. |
54
54
  | `--sandbox` | `-s` | boolean | `false` | Run in a sandboxed environment for safer execution |
55
+ | `--skip-trust` | - | boolean | `false` | Trust the current workspace for this session, skipping the folder trust check. |
55
56
  | `--approval-mode` | - | string | `default` | Approval mode for tool execution. Choices: `default`, `auto_edit`, `yolo`, `plan` |
56
57
  | `--yolo` | `-y` | boolean | `false` | **Deprecated.** Auto-approve all actions. Use `--approval-mode=yolo` instead. |
57
58
  | `--experimental-acp` | - | boolean | - | Start in ACP (Agent Code Pilot) mode. **Experimental feature.** |
@@ -100,6 +100,34 @@ protect you. In this mode, the following features are disabled:
100
100
  Granting trust to a folder unlocks the full functionality of Gemini CLI for that
101
101
  workspace.
102
102
 
103
+ ## Headless and automated environments
104
+
105
+ When running Gemini CLI in a headless environment (for example, a CI/CD
106
+ pipeline) where interactive prompts are not possible, the trust dialog cannot be
107
+ displayed. If the folder is untrusted and the Folder Trust feature is enabled,
108
+ the CLI will throw a `FatalUntrustedWorkspaceError` and exit.
109
+
110
+ To proceed in these environments, you can bypass the trust check using one of
111
+ the following methods:
112
+
113
+ - **Command-line flag:** Run the CLI with the `--skip-trust` flag.
114
+ - **Environment variable:** Set the `GEMINI_CLI_TRUST_WORKSPACE=true`
115
+ environment variable.
116
+
117
+ These methods will trust the current workspace for the duration of the session
118
+ without prompting.
119
+
120
+ For detailed instructions on managing folder trust within CI/CD workflows,
121
+ review the
122
+ [Gemini CLI trust guidance for GitHub Actions](https://github.com/google-github-actions/run-gemini-cli/blob/main/docs/trust-guidance.md).
123
+
124
+ ## Overriding the trust file location
125
+
126
+ By default, trust settings are saved to `~/.gemini/trustedFolders.json`. If you
127
+ need to store this file in a different location, you can set the
128
+ `GEMINI_CLI_TRUSTED_FOLDERS_PATH` environment variable to the desired absolute
129
+ file path.
130
+
103
131
  ## Managing your trust settings
104
132
 
105
133
  If you need to change a decision or see all your settings, you have a couple of
@@ -1467,6 +1467,12 @@ their corresponding top-level category object in your `settings.json` file.
1467
1467
  - **Default:** `undefined`
1468
1468
  - **Requires restart:** Yes
1469
1469
 
1470
+ - **`tools.confirmationRequired`** (array):
1471
+ - **Description:** Tool names that always require user confirmation. Takes
1472
+ precedence over allowed tools and core tool allowlists.
1473
+ - **Default:** `undefined`
1474
+ - **Requires restart:** Yes
1475
+
1470
1476
  - **`tools.exclude`** (array):
1471
1477
  - **Description:** Tool names to exclude from discovery.
1472
1478
  - **Default:** `undefined`
@@ -2156,6 +2162,14 @@ the `advanced.excludedEnvVars` setting in your `settings.json` file.
2156
2162
  - Overrides the hardcoded default
2157
2163
  - Example: `export GEMINI_MODEL="gemini-3-flash-preview"` (Windows PowerShell:
2158
2164
  `$env:GEMINI_MODEL="gemini-3-flash-preview"`)
2165
+ - **`GEMINI_CLI_TRUST_WORKSPACE`**:
2166
+ - If set to `"true"`, trusts the current workspace for the duration of the
2167
+ session, bypassing the folder trust check.
2168
+ - Useful for headless environments (for example, CI/CD pipelines).
2169
+ - **`GEMINI_CLI_TRUSTED_FOLDERS_PATH`**:
2170
+ - Overrides the default location for the `trustedFolders.json` file.
2171
+ - Useful if you want to store this configuration in a custom location instead
2172
+ of the default `~/.gemini/`.
2159
2173
  - **`GEMINI_CLI_IDE_PID`**:
2160
2174
  - Manually specifies the PID of the IDE process to use for integration. This
2161
2175
  is useful when running Gemini CLI in a standalone terminal while still
@@ -24,6 +24,7 @@ import {
24
24
  initializeApp,
25
25
  installSkill,
26
26
  isAlternateBufferEnabled,
27
+ isRecord,
27
28
  isSlashCommand,
28
29
  linkSkill,
29
30
  normalizeServerId,
@@ -42,18 +43,18 @@ import {
42
43
  updateAllUpdatableExtensions,
43
44
  updateExtension,
44
45
  validateAuthMethod
45
- } from "./chunk-3GU3LF3I.js";
46
+ } from "./chunk-HF7X35D3.js";
46
47
  import {
47
48
  appEvents
48
49
  } from "./chunk-5PS3AYFU.js";
49
50
  import {
50
51
  startCommand,
51
52
  startServer
52
- } from "./chunk-EFCQXWIF.js";
53
+ } from "./chunk-LMVZLINC.js";
53
54
  import {
54
55
  exitCli,
55
56
  require_source
56
- } from "./chunk-IMEC72NS.js";
57
+ } from "./chunk-G356GKHH.js";
57
58
  import {
58
59
  DEFAULT_PORT,
59
60
  GEMMA_MODEL_NAME,
@@ -87,7 +88,7 @@ import {
87
88
  readServerProcessInfo,
88
89
  resolveGemmaConfig,
89
90
  saveModelChange
90
- } from "./chunk-HV36F4CL.js";
91
+ } from "./chunk-CJQVVQSH.js";
91
92
  import {
92
93
  cleanupCheckpoints,
93
94
  registerCleanup,
@@ -96,7 +97,7 @@ import {
96
97
  runExitCleanup,
97
98
  runSyncCleanup,
98
99
  setupSignalHandlers
99
- } from "./chunk-WL5MCPV2.js";
100
+ } from "./chunk-BV2W6YE6.js";
100
101
  import {
101
102
  AuthType,
102
103
  ChatRecordingService,
@@ -128,6 +129,7 @@ import {
128
129
  StreamEventType,
129
130
  StreamJsonFormatter,
130
131
  ToolCallEvent,
132
+ TrustLevel,
131
133
  UserAccountManager,
132
134
  UserPromptEvent,
133
135
  ValidationCancelledError,
@@ -194,7 +196,7 @@ import {
194
196
  updatePolicy,
195
197
  writeToStderr,
196
198
  writeToStdout
197
- } from "./chunk-QK7UWGBN.js";
199
+ } from "./chunk-NV6UCR4K.js";
198
200
  import {
199
201
  ASK_USER_TOOL_NAME,
200
202
  ApprovalMode,
@@ -215,6 +217,7 @@ import {
215
217
  FatalSandboxError,
216
218
  FatalToolExecutionError,
217
219
  FatalTurnLimitedError,
220
+ FatalUntrustedWorkspaceError,
218
221
  GEMINI_DIR,
219
222
  GEMINI_MODEL_ALIAS_AUTO,
220
223
  Kind,
@@ -241,7 +244,7 @@ import {
241
244
  loadServerHierarchicalMemory,
242
245
  resolveToRealPath,
243
246
  setGeminiMdFilename
244
- } from "./chunk-VCGILCZV.js";
247
+ } from "./chunk-F73F75XM.js";
245
248
  import "./chunk-664ZODQF.js";
246
249
  import "./chunk-RJTRUG2J.js";
247
250
  import "./chunk-IUUIT4SU.js";
@@ -5922,7 +5925,7 @@ async function handleInstall(args) {
5922
5925
  );
5923
5926
  if (confirmed) {
5924
5927
  const trustedFolders = loadTrustedFolders();
5925
- await trustedFolders.setValue(realPath, "TRUST_FOLDER" /* TRUST_FOLDER */);
5928
+ await trustedFolders.setValue(realPath, TrustLevel.TRUST_FOLDER);
5926
5929
  } else {
5927
5930
  throw new Error(
5928
5931
  `Installation aborted: Folder "${absolutePath}" is not trusted.`
@@ -7967,7 +7970,7 @@ async function loadSandboxConfig(settings, argv) {
7967
7970
  }
7968
7971
  const command2 = getSandboxCommand(sandboxValue);
7969
7972
  const packageJson = await getPackageJson(__dirname3);
7970
- const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.40.0-preview.2" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7973
+ const image = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.40.0-preview.4" ?? customImage ?? packageJson?.config?.sandboxImageUri;
7971
7974
  const isNative = command2 === "windows-native" || command2 === "sandbox-exec" || command2 === "lxc";
7972
7975
  return command2 && (image || isNative) ? { enabled: true, allowedPaths, networkAccess, command: command2, image } : void 0;
7973
7976
  }
@@ -8179,6 +8182,10 @@ async function parseArguments(settings) {
8179
8182
  type: "string",
8180
8183
  nargs: 1,
8181
8184
  description: "Execute the provided prompt and continue in interactive mode"
8185
+ }).option("skip-trust", {
8186
+ type: "boolean",
8187
+ description: "Trust the current workspace for this session.",
8188
+ default: false
8182
8189
  }).option("worktree", {
8183
8190
  alias: "w",
8184
8191
  type: "string",
@@ -8300,9 +8307,16 @@ async function parseArguments(settings) {
8300
8307
  yargsInstance.wrap(yargsInstance.terminalWidth());
8301
8308
  let result;
8302
8309
  try {
8303
- result = await yargsInstance.parse();
8310
+ const parsed = await yargsInstance.parse();
8311
+ if (!isRecord(parsed)) {
8312
+ throw new Error("Failed to parse arguments");
8313
+ }
8314
+ result = parsed;
8315
+ if (result["skip-trust"]) {
8316
+ process3.env["GEMINI_CLI_TRUST_WORKSPACE"] = "true";
8317
+ }
8304
8318
  } catch (e) {
8305
- const msg = e instanceof Error ? e.message : String(e);
8319
+ const msg = getErrorMessage(e);
8306
8320
  debugLogger.error(msg);
8307
8321
  yargsInstance.showHelp();
8308
8322
  await runExitCleanup();
@@ -8312,8 +8326,13 @@ async function parseArguments(settings) {
8312
8326
  await runExitCleanup();
8313
8327
  process3.exit(0);
8314
8328
  }
8315
- const queryArg = result.query;
8316
- const q = Array.isArray(queryArg) ? queryArg.join(" ") : queryArg;
8329
+ const queryArg = result["query"];
8330
+ let q;
8331
+ if (Array.isArray(queryArg)) {
8332
+ q = queryArg.join(" ");
8333
+ } else if (typeof queryArg === "string") {
8334
+ q = queryArg;
8335
+ }
8317
8336
  if (q && !result["prompt"]) {
8318
8337
  if (!isHeadlessMode()) {
8319
8338
  startupMessages.push(
@@ -8344,7 +8363,7 @@ async function loadCliConfig(settings, sessionId, argv, options = {}) {
8344
8363
  const includeDirectoryTree = settings.context?.includeDirectoryTree ?? true;
8345
8364
  const ideMode = settings.ide?.enabled ?? false;
8346
8365
  const folderTrust = process3.env["GEMINI_CLI_INTEGRATION_TEST"] === "true" || process3.env["VITEST"] === "true" ? false : settings.security?.folderTrust?.enabled ?? false;
8347
- const trustedFolder = isWorkspaceTrusted(settings, cwd, void 0, {
8366
+ const trustedFolder = isWorkspaceTrusted(settings, cwd, {
8348
8367
  prompt: argv.prompt,
8349
8368
  query: argv.query
8350
8369
  })?.isTrusted ?? false;
@@ -8373,7 +8392,7 @@ async function loadCliConfig(settings, sessionId, argv, options = {}) {
8373
8392
  return resolveToRealPath(trimmedPath) !== realCwd;
8374
8393
  } catch (e) {
8375
8394
  debugLogger.debug(
8376
- `[IDE] Skipping inaccessible workspace folder: ${trimmedPath} (${e instanceof Error ? e.message : String(e)})`
8395
+ `[IDE] Skipping inaccessible workspace folder: ${trimmedPath} (${getErrorMessage(e)})`
8377
8396
  );
8378
8397
  return false;
8379
8398
  }
@@ -8766,7 +8785,7 @@ async function resolveWorktreeSettings(cwd) {
8766
8785
  worktreeBaseSha = stdout.trim();
8767
8786
  } catch (e) {
8768
8787
  debugLogger.debug(
8769
- `Failed to resolve worktree base SHA at ${worktreePath}: ${e instanceof Error ? e.message : String(e)}`
8788
+ `Failed to resolve worktree base SHA at ${worktreePath}: ${getErrorMessage(e)}`
8770
8789
  );
8771
8790
  }
8772
8791
  if (!worktreeBaseSha) {
@@ -9905,9 +9924,29 @@ var rootDirectoryCheck = {
9905
9924
  }
9906
9925
  }
9907
9926
  };
9927
+ var folderTrustCheck = {
9928
+ id: "folder-trust",
9929
+ priority: WarningPriority.High,
9930
+ check: async (workspaceRoot, settings) => {
9931
+ if (!isFolderTrustEnabled(settings)) {
9932
+ return null;
9933
+ }
9934
+ const { isTrusted } = isWorkspaceTrusted(settings, workspaceRoot);
9935
+ if (isTrusted === true) {
9936
+ return null;
9937
+ }
9938
+ if (isHeadlessMode()) {
9939
+ throw new FatalUntrustedWorkspaceError(
9940
+ "Gemini CLI is not running in a trusted directory. To proceed, either use `--skip-trust`, set the `GEMINI_CLI_TRUST_WORKSPACE=true` environment variable, or trust this directory in interactive mode. For more details, see https://geminicli.com/docs/cli/trusted-folders/#headless-and-automated-environments"
9941
+ );
9942
+ }
9943
+ return null;
9944
+ }
9945
+ };
9908
9946
  var WARNING_CHECKS = [
9909
9947
  homeDirectoryCheck,
9910
- rootDirectoryCheck
9948
+ rootDirectoryCheck,
9949
+ folderTrustCheck
9911
9950
  ];
9912
9951
  async function getUserStartupWarnings(settings, workspaceRoot = process4.cwd(), options) {
9913
9952
  const results = await Promise.all(
@@ -10272,7 +10311,7 @@ async function runNonInteractive({
10272
10311
  }
10273
10312
  });
10274
10313
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
10275
- const { setupInitialActivityLogger } = await import("./devtoolsService-B5VVZ752.js");
10314
+ const { setupInitialActivityLogger } = await import("./devtoolsService-S2LBUUZU.js");
10276
10315
  setupInitialActivityLogger(config);
10277
10316
  }
10278
10317
  const { stdout: workingStdout } = createWorkingStdio();
@@ -10723,7 +10762,7 @@ async function runNonInteractive2(params) {
10723
10762
  }
10724
10763
  });
10725
10764
  if (process.env["GEMINI_CLI_ACTIVITY_LOG_TARGET"]) {
10726
- const { setupInitialActivityLogger } = await import("./devtoolsService-B5VVZ752.js");
10765
+ const { setupInitialActivityLogger } = await import("./devtoolsService-S2LBUUZU.js");
10727
10766
  setupInitialActivityLogger(config);
10728
10767
  }
10729
10768
  const { stdout: workingStdout } = createWorkingStdio();
@@ -15572,7 +15611,7 @@ async function resolveSessionId(resumeArg) {
15572
15611
  }
15573
15612
  }
15574
15613
  async function startInteractiveUI(config, settings, startupWarnings, workspaceRoot = process.cwd(), resumedSessionData, initializationResult) {
15575
- const { startInteractiveUI: doStartUI } = await import("./interactiveCli-JFBPGMNM.js");
15614
+ const { startInteractiveUI: doStartUI } = await import("./interactiveCli-FPHSBRV3.js");
15576
15615
  await doStartUI(
15577
15616
  config,
15578
15617
  settings,
@@ -15774,7 +15813,7 @@ ${finalArgs[promptIndex + 1]}`;
15774
15813
  await config.storage.initialize();
15775
15814
  adminControlsListner.setConfig(config);
15776
15815
  if (config.isInteractive() && settings.merged.general.devtools) {
15777
- const { setupInitialActivityLogger } = await import("./devtoolsService-B5VVZ752.js");
15816
+ const { setupInitialActivityLogger } = await import("./devtoolsService-S2LBUUZU.js");
15778
15817
  setupInitialActivityLogger(config);
15779
15818
  }
15780
15819
  registerTelemetryConfig(config);
@@ -15830,7 +15869,7 @@ ${finalArgs[promptIndex + 1]}`;
15830
15869
  const initAppHandle = startupProfiler.start("initialize_app");
15831
15870
  const initializationResult = await initializeApp(config, settings);
15832
15871
  initAppHandle?.end();
15833
- import("./liteRtServerManager-6GJWEP5W.js").then(({ LiteRtServerManager }) => {
15872
+ import("./liteRtServerManager-ORSW3R4F.js").then(({ LiteRtServerManager }) => {
15834
15873
  const mergedGemma = settings.merged.experimental?.gemmaModelRouter;
15835
15874
  if (!mergedGemma) return;
15836
15875
  const userGemma = settings.forScope("User" /* User */).settings.experimental?.gemmaModelRouter;
@@ -15863,6 +15902,11 @@ ${finalArgs[promptIndex + 1]}`;
15863
15902
  })
15864
15903
  ];
15865
15904
  cliStartupHandle?.end();
15905
+ if (!config.isInteractive()) {
15906
+ for (const warning of startupWarnings) {
15907
+ writeToStderr(warning.message + "\n");
15908
+ }
15909
+ }
15866
15910
  if (config.isInteractive()) {
15867
15911
  if (process.stdin.isTTY) {
15868
15912
  process.stdin.resume();