@google/gemini-cli 0.33.0-preview.10 → 0.33.0-preview.12

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.
@@ -1,4 +1,4 @@
1
- # Plan Mode (experimental)
1
+ # Plan Mode
2
2
 
3
3
  Plan Mode is a read-only environment for architecting robust solutions before
4
4
  implementation. It allows you to:
@@ -8,65 +8,8 @@ implementation. It allows you to:
8
8
  - **Design:** Understand problems, evaluate trade-offs, and choose a solution.
9
9
  - **Plan:** Align on an execution strategy before any code is modified.
10
10
 
11
- > **Note:** This is a preview feature currently under active development. Your
12
- > feedback is invaluable as we refine this feature. If you have ideas,
13
- > suggestions, or encounter issues:
14
- >
15
- > - [Open an issue](https://github.com/google-gemini/gemini-cli/issues) on
16
- > GitHub.
17
- > - Use the **/bug** command within Gemini CLI to file an issue.
18
-
19
- - [Enabling Plan Mode](#enabling-plan-mode)
20
- - [How to use Plan Mode](#how-to-use-plan-mode)
21
- - [Entering Plan Mode](#entering-plan-mode)
22
- - [Planning Workflow](#planning-workflow)
23
- - [Exiting Plan Mode](#exiting-plan-mode)
24
- - [Commands](#commands)
25
- - [Tool Restrictions](#tool-restrictions)
26
- - [Customizing Planning with Skills](#customizing-planning-with-skills)
27
- - [Customizing Policies](#customizing-policies)
28
- - [Example: Allow git commands in Plan Mode](#example-allow-git-commands-in-plan-mode)
29
- - [Example: Enable custom subagents in Plan Mode](#example-enable-custom-subagents-in-plan-mode)
30
- - [Custom Plan Directory and Policies](#custom-plan-directory-and-policies)
31
- - [Automatic Model Routing](#automatic-model-routing)
32
- - [Cleanup](#cleanup)
33
-
34
- ## Enabling Plan Mode
35
-
36
- To use Plan Mode, enable it via **/settings** (search for **Plan**) or add the
37
- following to your `settings.json`:
38
-
39
- ```json
40
- {
41
- "experimental": {
42
- "plan": true
43
- }
44
- }
45
- ```
46
-
47
- ## How to use Plan Mode
48
-
49
- ### Entering Plan Mode
50
-
51
- You can configure Gemini CLI to start in Plan Mode by default or enter it
52
- manually during a session.
53
-
54
- - **Configuration:** Configure Gemini CLI to start directly in Plan Mode by
55
- default:
56
- 1. Type `/settings` in the CLI.
57
- 2. Search for **Default Approval Mode**.
58
- 3. Set the value to **Plan**.
59
-
60
- Alternatively, use the `gemini --approval-mode=plan` CLI flag or manually
61
- update:
62
-
63
- ```json
64
- {
65
- "general": {
66
- "defaultApprovalMode": "plan"
67
- }
68
- }
69
- ```
11
+ Plan Mode is enabled by default. You can manage this setting using the
12
+ `/settings` command.
70
13
 
71
14
  - **Keyboard Shortcut:** Press `Shift+Tab` to cycle through approval modes
72
15
  (`Default` -> `Auto-Edit` -> `Plan`).
@@ -144,7 +144,7 @@ they appear in the UI.
144
144
  | Enable Tool Output Masking | `experimental.toolOutputMasking.enabled` | Enables tool output masking to save tokens. | `true` |
145
145
  | Use OSC 52 Paste | `experimental.useOSC52Paste` | Use OSC 52 for pasting. This may be more robust than the default system when using remote terminal sessions (if your terminal is configured to allow it). | `false` |
146
146
  | Use OSC 52 Copy | `experimental.useOSC52Copy` | Use OSC 52 for copying. This may be more robust than the default system when using remote terminal sessions (if your terminal is configured to allow it). | `false` |
147
- | Plan | `experimental.plan` | Enable planning features (Plan Mode and tools). | `false` |
147
+ | Plan | `experimental.plan` | Enable Plan Mode. | `true` |
148
148
  | Model Steering | `experimental.modelSteering` | Enable model steering (user hints) to guide the model during tool execution. | `false` |
149
149
  | Direct Web Fetch | `experimental.directWebFetch` | Enable web fetch behavior that bypasses LLM summarization. | `false` |
150
150
  | Enable Gemma Model Router | `experimental.gemmaModelRouter.enabled` | Enable the Gemma Model Router. Requires a local endpoint serving Gemma via the Gemini API using LiteRT-LM shim. | `false` |
@@ -268,8 +268,8 @@ Slash commands provide meta-level control over the CLI itself.
268
268
 
269
269
  - **Description:** Switch to Plan Mode (read-only) and view the current plan if
270
270
  one has been generated.
271
- - **Note:** This feature requires the `experimental.plan` setting to be
272
- enabled in your configuration.
271
+ - **Note:** This feature is enabled by default. It can be disabled via the
272
+ `experimental.plan` setting in your configuration.
273
273
  - **Sub-commands:**
274
274
  - **`copy`**:
275
275
  - **Description:** Copy the currently approved plan to your clipboard.
@@ -1010,8 +1010,8 @@ their corresponding top-level category object in your `settings.json` file.
1010
1010
  - **Default:** `false`
1011
1011
 
1012
1012
  - **`experimental.plan`** (boolean):
1013
- - **Description:** Enable planning features (Plan Mode and tools).
1014
- - **Default:** `false`
1013
+ - **Description:** Enable Plan Mode.
1014
+ - **Default:** `true`
1015
1015
  - **Requires restart:** Yes
1016
1016
 
1017
1017
  - **`experimental.modelSteering`** (boolean):
package/bundle/gemini.js CHANGED
@@ -117944,7 +117944,7 @@ function getDisplayString(model) {
117944
117944
  }
117945
117945
  }
117946
117946
  function isPreviewModel(model) {
117947
- return model === PREVIEW_GEMINI_MODEL || model === PREVIEW_GEMINI_3_1_MODEL || model === PREVIEW_GEMINI_3_1_CUSTOM_TOOLS_MODEL || model === PREVIEW_GEMINI_FLASH_MODEL || model === PREVIEW_GEMINI_MODEL_AUTO;
117947
+ return model === PREVIEW_GEMINI_MODEL || model === PREVIEW_GEMINI_3_1_MODEL || model === PREVIEW_GEMINI_3_1_CUSTOM_TOOLS_MODEL || model === PREVIEW_GEMINI_FLASH_MODEL || model === PREVIEW_GEMINI_MODEL_AUTO || model === GEMINI_MODEL_ALIAS_AUTO;
117948
117948
  }
117949
117949
  function isProModel(model) {
117950
117950
  return model.toLowerCase().includes("pro");
@@ -196358,8 +196358,8 @@ var GIT_COMMIT_INFO, CLI_VERSION;
196358
196358
  var init_git_commit = __esm({
196359
196359
  "packages/core/dist/src/generated/git-commit.js"() {
196360
196360
  "use strict";
196361
- GIT_COMMIT_INFO = "c18aae398";
196362
- CLI_VERSION = "0.33.0-preview.10";
196361
+ GIT_COMMIT_INFO = "6431ea872";
196362
+ CLI_VERSION = "0.33.0-preview.12";
196363
196363
  }
196364
196364
  });
196365
196365
 
@@ -292827,7 +292827,7 @@ function getVersion() {
292827
292827
  }
292828
292828
  versionPromise = (async () => {
292829
292829
  const pkgJson = await getPackageJson(__dirname3);
292830
- return "0.33.0-preview.10";
292830
+ return "0.33.0-preview.12";
292831
292831
  })();
292832
292832
  return versionPromise;
292833
292833
  }
@@ -378609,7 +378609,7 @@ function resolvePolicyChain(config2, preferredModel, wrapsAround = false) {
378609
378609
  const configuredModel = config2.getModel();
378610
378610
  let chain2;
378611
378611
  const useGemini31 = config2.getGemini31LaunchedSync?.() ?? false;
378612
- const useCustomToolModel = useGemini31 && config2.getContentGeneratorConfig?.()?.authType === AuthType2.USE_GEMINI;
378612
+ const useCustomToolModel = config2.getUseCustomToolModelSync?.() ?? false;
378613
378613
  const resolvedModel = resolveModel(modelFromConfig, useGemini31, useCustomToolModel);
378614
378614
  const isAutoPreferred = preferredModel ? isAutoModel(preferredModel) : false;
378615
378615
  const isAutoConfigured = isAutoModel(configuredModel);
@@ -378717,7 +378717,6 @@ function applyAvailabilityTransition(getContext, failureKind) {
378717
378717
  var init_policyHelpers = __esm({
378718
378718
  "packages/core/dist/src/availability/policyHelpers.js"() {
378719
378719
  "use strict";
378720
- init_contentGenerator();
378721
378720
  init_policyCatalog();
378722
378721
  init_models();
378723
378722
  }
@@ -409887,7 +409886,6 @@ var init_classifierStrategy = __esm({
409887
409886
  init_messageInspectors();
409888
409887
  init_debugLogger();
409889
409888
  init_types6();
409890
- init_contentGenerator();
409891
409889
  HISTORY_TURNS_FOR_CONTEXT2 = 4;
409892
409890
  HISTORY_SEARCH_WINDOW2 = 20;
409893
409891
  FLASH_MODEL2 = "flash";
@@ -410008,8 +410006,10 @@ Respond *only* in JSON format according to the following schema. Do not include
410008
410006
  const routerResponse = ClassifierResponseSchema2.parse(jsonResponse);
410009
410007
  const reasoning = routerResponse.reasoning;
410010
410008
  const latencyMs = Date.now() - startTime;
410011
- const useGemini3_1 = await config2.getGemini31Launched?.() ?? false;
410012
- const useCustomToolModel = useGemini3_1 && config2.getContentGeneratorConfig().authType === AuthType2.USE_GEMINI;
410009
+ const [useGemini3_1, useCustomToolModel] = await Promise.all([
410010
+ config2.getGemini31Launched(),
410011
+ config2.getUseCustomToolModel()
410012
+ ]);
410013
410013
  const selectedModel = resolveClassifierModel(model, routerResponse.model_choice, useGemini3_1, useCustomToolModel);
410014
410014
  return {
410015
410015
  model: selectedModel,
@@ -410051,7 +410051,6 @@ var init_numericalClassifierStrategy = __esm({
410051
410051
  init_node();
410052
410052
  init_debugLogger();
410053
410053
  init_types6();
410054
- init_contentGenerator();
410055
410054
  HISTORY_TURNS_FOR_CONTEXT3 = 8;
410056
410055
  FLASH_MODEL3 = "flash";
410057
410056
  PRO_MODEL3 = "pro";
@@ -410156,8 +410155,10 @@ Model: {"complexity_reasoning": "High-level architecture and strategic planning.
410156
410155
  const routerResponse = ClassifierResponseSchema3.parse(jsonResponse);
410157
410156
  const score = routerResponse.complexity_score;
410158
410157
  const { threshold, groupLabel, modelAlias } = await this.getRoutingDecision(score, config2, config2.getSessionId() || "unknown-session");
410159
- const useGemini3_1 = await config2.getGemini31Launched?.() ?? false;
410160
- const useCustomToolModel = useGemini3_1 && config2.getContentGeneratorConfig().authType === AuthType2.USE_GEMINI;
410158
+ const [useGemini3_1, useCustomToolModel] = await Promise.all([
410159
+ config2.getGemini31Launched(),
410160
+ config2.getUseCustomToolModel()
410161
+ ]);
410161
410162
  const selectedModel = resolveClassifierModel(model, modelAlias, useGemini3_1, useCustomToolModel);
410162
410163
  const latencyMs = Date.now() - startTime;
410163
410164
  return {
@@ -410333,9 +410334,12 @@ var init_approvalModeStrategy = __esm({
410333
410334
  const startTime = Date.now();
410334
410335
  const approvalMode = config2.getApprovalMode();
410335
410336
  const approvedPlanPath = config2.getApprovedPlanPath();
410336
- const isPreview2 = isPreviewModel(model);
410337
+ const [useGemini3_1, useCustomToolModel] = await Promise.all([
410338
+ config2.getGemini31Launched(),
410339
+ config2.getUseCustomToolModel()
410340
+ ]);
410337
410341
  if (approvalMode === ApprovalMode.PLAN) {
410338
- const proModel = isPreview2 ? PREVIEW_GEMINI_MODEL : DEFAULT_GEMINI_MODEL;
410342
+ const proModel = resolveClassifierModel(model, GEMINI_MODEL_ALIAS_PRO, useGemini3_1, useCustomToolModel);
410339
410343
  return {
410340
410344
  model: proModel,
410341
410345
  metadata: {
@@ -410345,7 +410349,7 @@ var init_approvalModeStrategy = __esm({
410345
410349
  }
410346
410350
  };
410347
410351
  } else if (approvedPlanPath) {
410348
- const flashModel = isPreview2 ? PREVIEW_GEMINI_FLASH_MODEL : DEFAULT_GEMINI_FLASH_MODEL;
410352
+ const flashModel = resolveClassifierModel(model, GEMINI_MODEL_ALIAS_FLASH, useGemini3_1, useCustomToolModel);
410349
410353
  return {
410350
410354
  model: flashModel,
410351
410355
  metadata: {
@@ -433551,7 +433555,7 @@ var init_config4 = __esm({
433551
433555
  this.enableAgents = params.enableAgents ?? false;
433552
433556
  this.agents = params.agents ?? {};
433553
433557
  this.disableLLMCorrection = params.disableLLMCorrection ?? true;
433554
- this.planEnabled = params.plan ?? false;
433558
+ this.planEnabled = params.plan ?? true;
433555
433559
  this.planModeRoutingEnabled = params.planSettings?.modelRouting ?? true;
433556
433560
  this.enableEventDrivenScheduler = params.enableEventDrivenScheduler ?? true;
433557
433561
  this.skillsSupport = params.skillsSupport ?? true;
@@ -434660,6 +434664,24 @@ var init_config4 = __esm({
434660
434664
  await this.ensureExperimentsLoaded();
434661
434665
  return this.getGemini31LaunchedSync();
434662
434666
  }
434667
+ /**
434668
+ * Returns whether the custom tool model should be used.
434669
+ */
434670
+ async getUseCustomToolModel() {
434671
+ const useGemini3_1 = await this.getGemini31Launched();
434672
+ const authType = this.contentGeneratorConfig?.authType;
434673
+ return useGemini3_1 && authType === AuthType2.USE_GEMINI;
434674
+ }
434675
+ /**
434676
+ * Returns whether the custom tool model should be used.
434677
+ *
434678
+ * Note: This method should only be called after startup, once experiments have been loaded.
434679
+ */
434680
+ getUseCustomToolModelSync() {
434681
+ const useGemini3_1 = this.getGemini31LaunchedSync();
434682
+ const authType = this.contentGeneratorConfig?.authType;
434683
+ return useGemini3_1 && authType === AuthType2.USE_GEMINI;
434684
+ }
434663
434685
  /**
434664
434686
  * Returns whether Gemini 3.1 has been launched.
434665
434687
  *
@@ -483982,8 +484004,8 @@ var SETTINGS_SCHEMA = {
483982
484004
  label: "Plan",
483983
484005
  category: "Experimental",
483984
484006
  requiresRestart: true,
483985
- default: false,
483986
- description: "Enable planning features (Plan Mode and tools).",
484007
+ default: true,
484008
+ description: "Enable Plan Mode.",
483987
484009
  showInDialog: true
483988
484010
  },
483989
484011
  modelSteering: {
@@ -515099,7 +515121,7 @@ var WarningMessage = ({ text }) => {
515099
515121
  };
515100
515122
 
515101
515123
  // packages/cli/src/generated/git-commit.ts
515102
- var GIT_COMMIT_INFO2 = "78b0b3dd4";
515124
+ var GIT_COMMIT_INFO2 = "524a84bfe";
515103
515125
 
515104
515126
  // packages/cli/src/ui/components/AboutBox.tsx
515105
515127
  init_dist8();
@@ -563510,7 +563532,7 @@ async function loadSandboxConfig(settings, argv) {
563510
563532
  const sandboxOption = argv.sandbox ?? settings.tools?.sandbox;
563511
563533
  const command2 = getSandboxCommand(sandboxOption);
563512
563534
  const packageJson2 = await getPackageJson(__dirname13);
563513
- const image2 = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.33.0-preview.10" ?? packageJson2?.config?.sandboxImageUri;
563535
+ const image2 = process.env["GEMINI_SANDBOX_IMAGE"] ?? "us-docker.pkg.dev/gemini-code-dev/gemini-cli/sandbox:0.33.0-preview.12" ?? packageJson2?.config?.sandboxImageUri;
563514
563536
  return command2 && image2 ? { command: command2, image: image2 } : void 0;
563515
563537
  }
563516
563538
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google/gemini-cli-devtools",
3
- "version": "0.33.0-preview.10",
3
+ "version": "0.33.0-preview.12",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google/gemini-cli",
3
- "version": "0.33.0-preview.10",
3
+ "version": "0.33.0-preview.12",
4
4
  "description": "Gemini CLI",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {