@google/gemini-cli 0.36.0-preview.8 → 0.37.0-preview.0

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 (74) hide show
  1. package/bundle/{chunk-N22U7LIR.js → chunk-3TN4SOLW.js} +6651 -4180
  2. package/bundle/{chunk-S2IQOR7T.js → chunk-7UZ4Y32N.js} +214 -66
  3. package/bundle/{chunk-QBLIM2T2.js → chunk-A62NZYIK.js} +711 -240
  4. package/bundle/{chunk-5JDHTAA3.js → chunk-LEK5YYAR.js} +6295 -4094
  5. package/bundle/{chunk-MYI75E6G.js → chunk-R5X4CMUM.js} +233 -70
  6. package/bundle/{chunk-5Y6Y7SEB.js → chunk-TJ76C6AA.js} +16847 -9496
  7. package/bundle/chunk-U4FACSVX.js +30 -0
  8. package/bundle/{chunk-UUJ4JLTB.js → chunk-ULC3DHVX.js} +711 -240
  9. package/bundle/{chunk-642LNT3F.js → chunk-XX7JYMTE.js} +765 -306
  10. package/bundle/{core-N4UNRLQA.js → core-5OME6LT4.js} +58 -4
  11. package/bundle/{dist-HD2ZHBHJ.js → core-CUCGSGCA.js} +58 -4
  12. package/bundle/{devtoolsService-7D3WUF33.js → devtoolsService-4FIYD6OW.js} +20 -3
  13. package/bundle/{devtoolsService-NA7MR5UO.js → devtoolsService-IDLWLZFQ.js} +21 -5
  14. package/bundle/{devtoolsService-Y53ZUB56.js → devtoolsService-TVWW3DBW.js} +20 -3
  15. package/bundle/{dist-JYY2GAAR.js → dist-YWCADMDD.js} +58 -4
  16. package/bundle/docs/CONTRIBUTING.md +10 -7
  17. package/bundle/docs/assets/theme-tokyonight-dark.png +0 -0
  18. package/bundle/docs/changelogs/index.md +24 -0
  19. package/bundle/docs/changelogs/latest.md +366 -459
  20. package/bundle/docs/changelogs/preview.md +362 -356
  21. package/bundle/docs/cli/acp-mode.md +126 -0
  22. package/bundle/docs/cli/cli-reference.md +1 -1
  23. package/bundle/docs/cli/notifications.md +5 -5
  24. package/bundle/docs/cli/plan-mode.md +12 -8
  25. package/bundle/docs/cli/sandbox.md +1 -1
  26. package/bundle/docs/cli/settings.md +14 -13
  27. package/bundle/docs/cli/themes.md +5 -0
  28. package/bundle/docs/core/index.md +2 -2
  29. package/bundle/docs/core/subagents.md +134 -23
  30. package/bundle/docs/get-started/gemini-3.md +1 -1
  31. package/bundle/docs/get-started/index.md +127 -1
  32. package/bundle/docs/ide-integration/index.md +99 -24
  33. package/bundle/docs/index.md +0 -2
  34. package/bundle/docs/redirects.json +1 -0
  35. package/bundle/docs/reference/commands.md +1 -3
  36. package/bundle/docs/reference/configuration.md +182 -91
  37. package/bundle/docs/reference/keyboard-shortcuts.md +14 -6
  38. package/bundle/docs/reference/policy-engine.md +16 -30
  39. package/bundle/docs/reference/tools.md +56 -23
  40. package/bundle/docs/resources/quota-and-pricing.md +23 -9
  41. package/bundle/docs/sidebar.json +11 -4
  42. package/bundle/docs/tools/planning.md +6 -4
  43. package/bundle/events-CLX3JQHP.js +12 -0
  44. package/bundle/gemini.js +342 -52
  45. package/bundle/{interactiveCli-R5N55BDV.js → interactiveCli-4WFWOVAQ.js} +5066 -4010
  46. package/bundle/{interactiveCli-LFO7EWZS.js → interactiveCli-4ZZ72DR3.js} +5066 -4010
  47. package/bundle/{interactiveCli-2JRQPNZP.js → interactiveCli-6SIGBRWS.js} +5279 -4240
  48. package/bundle/{memoryDiscovery-BQGYT4OD.js → memoryDiscovery-NS2EGHYH.js} +3 -1
  49. package/bundle/{memoryDiscovery-FCEPFZ3M.js → memoryDiscovery-VL3OH25S.js} +3 -1
  50. package/bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js +26 -19
  51. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.d.ts +1 -1
  52. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js +1 -1
  53. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js.map +1 -1
  54. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js +35 -1
  55. package/bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js.map +1 -1
  56. package/bundle/node_modules/@google/gemini-cli-devtools/package.json +1 -1
  57. package/bundle/{oauth2-provider-2WD22PTI.js → oauth2-provider-HGHECKPY.js} +2 -2
  58. package/bundle/{oauth2-provider-QOWLZC44.js → oauth2-provider-TYBJKXSJ.js} +2 -2
  59. package/bundle/{oauth2-provider-34BPLPQX.js → oauth2-provider-YYRJ44X5.js} +73 -39
  60. package/bundle/policies/discovered.toml +7 -0
  61. package/bundle/policies/non-interactive.toml +7 -0
  62. package/bundle/policies/plan.toml +25 -0
  63. package/bundle/policies/read-only.toml +6 -0
  64. package/bundle/policies/sandbox-default.toml +3 -2
  65. package/bundle/policies/write.toml +21 -0
  66. package/bundle/policies/yolo.toml +1 -1
  67. package/package.json +1 -1
  68. package/bundle/chunk-FWCJAF6L.js +0 -97905
  69. package/bundle/chunk-X6CSYCBW.js +0 -354180
  70. package/bundle/devtoolsService-VU7N6PSG.js +0 -854
  71. package/bundle/dist-QEB25IFU.js +0 -1886
  72. package/bundle/docs/get-started/examples.md +0 -141
  73. package/bundle/interactiveCli-A6H7VTMC.js +0 -49299
  74. package/bundle/oauth2-provider-MZAUZWUS.js +0 -237
@@ -2,9 +2,7 @@ const require = (await import('node:module')).createRequire(import.meta.url); co
2
2
  import {
3
3
  AsyncFzf,
4
4
  AuthProviderType,
5
- AuthType,
6
5
  Config,
7
- CoreToolCallStatus,
8
6
  DEFAULT_MODEL_CONFIGS,
9
7
  DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
10
8
  ExitCodes,
@@ -16,26 +14,17 @@ import {
16
14
  ExtensionUninstallEvent,
17
15
  ExtensionUpdateEvent,
18
16
  GEMINI_CLI_COMPANION_EXTENSION_NAME,
19
- HookType,
20
- IDEConnectionStatus,
21
17
  INITIAL_HISTORY_LENGTH,
22
18
  IdeClient,
23
19
  IdeConnectionEvent,
24
- IdeConnectionType,
25
- IntegrityDataStatus,
26
20
  KeychainTokenStorage,
27
- LlmRole,
28
- MCPDiscoveryState,
29
21
  MCPOAuthTokenStorage,
30
- MCPServerStatus,
31
22
  MaxBufferError,
32
23
  ModelSlashCommandEvent,
33
24
  ProjectIdRequiredError,
34
25
  ReadManyFilesTool,
35
26
  RewindEvent,
36
27
  SESSION_FILE_PREFIX,
37
- SessionEndReason,
38
- SessionStartSource,
39
28
  ShellExecutionService,
40
29
  StartSessionEvent,
41
30
  TOOL_OUTPUTS_DIR,
@@ -55,6 +44,8 @@ import {
55
44
  convertToRestPayload,
56
45
  createCache,
57
46
  decodeTagName,
47
+ deleteSessionArtifactsAsync,
48
+ deleteSubagentSessionDirAndArtifactsAsync,
58
49
  disableBracketedPasteMode,
59
50
  disableKittyKeyboardProtocol,
60
51
  disableModifyOtherKeys,
@@ -150,6 +141,7 @@ import {
150
141
  require_toml,
151
142
  require_undici,
152
143
  require_valid,
144
+ resetBrowserSession,
153
145
  sanitizeFilenamePart,
154
146
  sessionId,
155
147
  shouldLaunchBrowser,
@@ -164,14 +156,13 @@ import {
164
156
  tokenLimit,
165
157
  uiTelemetryService,
166
158
  yellowBright
167
- } from "./chunk-5Y6Y7SEB.js";
159
+ } from "./chunk-TJ76C6AA.js";
168
160
  import {
169
161
  ApprovalMode,
170
162
  CoreEvent,
171
163
  DiscoveredMCPTool,
172
164
  FatalConfigError,
173
165
  GEMINI_DIR,
174
- PolicyDecision,
175
166
  REFERENCE_CONTENT_END,
176
167
  REFERENCE_CONTENT_START,
177
168
  Storage,
@@ -193,7 +184,11 @@ import {
193
184
  shortenPath,
194
185
  tildeifyPath,
195
186
  unescapePath
196
- } from "./chunk-S2IQOR7T.js";
187
+ } from "./chunk-R5X4CMUM.js";
188
+ import {
189
+ AppEvent,
190
+ appEvents
191
+ } from "./chunk-U4FACSVX.js";
197
192
  import {
198
193
  __commonJS,
199
194
  __export,
@@ -34576,12 +34571,12 @@ var require_prompt = __commonJS({
34576
34571
  var readline = __require("readline");
34577
34572
  var _require = require_util3();
34578
34573
  var action = _require.action;
34579
- var EventEmitter6 = __require("events");
34574
+ var EventEmitter5 = __require("events");
34580
34575
  var _require2 = require_src3();
34581
34576
  var beep2 = _require2.beep;
34582
34577
  var cursor = _require2.cursor;
34583
34578
  var color = require_kleur();
34584
- var Prompt = class extends EventEmitter6 {
34579
+ var Prompt = class extends EventEmitter5 {
34585
34580
  constructor(opts = {}) {
34586
34581
  super();
34587
34582
  this.firstRender = true;
@@ -36581,9 +36576,9 @@ var require_prompts = __commonJS({
36581
36576
  $4.date = (args) => toPrompt("DatePrompt", args);
36582
36577
  $4.confirm = (args) => toPrompt("ConfirmPrompt", args);
36583
36578
  $4.list = (args) => {
36584
- const sep5 = args.separator || ",";
36579
+ const sep4 = args.separator || ",";
36585
36580
  return toPrompt("TextPrompt", args, {
36586
- onSubmit: (str) => str.split(sep5).map((s3) => s3.trim())
36581
+ onSubmit: (str) => str.split(sep4).map((s3) => s3.trim())
36587
36582
  });
36588
36583
  };
36589
36584
  $4.toggle = (args) => toPrompt("TogglePrompt", args);
@@ -37041,10 +37036,10 @@ var require_prompt2 = __commonJS({
37041
37036
  "use strict";
37042
37037
  var readline = __require("readline");
37043
37038
  var { action } = require_util4();
37044
- var EventEmitter6 = __require("events");
37039
+ var EventEmitter5 = __require("events");
37045
37040
  var { beep: beep2, cursor } = require_src3();
37046
37041
  var color = require_kleur();
37047
- var Prompt = class extends EventEmitter6 {
37042
+ var Prompt = class extends EventEmitter5 {
37048
37043
  constructor(opts = {}) {
37049
37044
  super();
37050
37045
  this.firstRender = true;
@@ -38871,9 +38866,9 @@ var require_prompts2 = __commonJS({
38871
38866
  $4.date = (args) => toPrompt("DatePrompt", args);
38872
38867
  $4.confirm = (args) => toPrompt("ConfirmPrompt", args);
38873
38868
  $4.list = (args) => {
38874
- const sep5 = args.separator || ",";
38869
+ const sep4 = args.separator || ",";
38875
38870
  return toPrompt("TextPrompt", args, {
38876
- onSubmit: (str) => str.split(sep5).map((s3) => s3.trim())
38871
+ onSubmit: (str) => str.split(sep4).map((s3) => s3.trim())
38877
38872
  });
38878
38873
  };
38879
38874
  $4.toggle = (args) => toPrompt("TogglePrompt", args);
@@ -43466,24 +43461,25 @@ var require_cli_spinners = __commonJS({
43466
43461
  var import_react = __toESM(require_react(), 1);
43467
43462
  function mapCoreStatusToDisplayStatus(coreStatus) {
43468
43463
  switch (coreStatus) {
43469
- case CoreToolCallStatus.Validating:
43464
+ case "validating" /* Validating */:
43470
43465
  return "Pending" /* Pending */;
43471
- case CoreToolCallStatus.AwaitingApproval:
43466
+ case "awaiting_approval" /* AwaitingApproval */:
43472
43467
  return "Confirming" /* Confirming */;
43473
- case CoreToolCallStatus.Executing:
43468
+ case "executing" /* Executing */:
43474
43469
  return "Executing" /* Executing */;
43475
- case CoreToolCallStatus.Success:
43470
+ case "success" /* Success */:
43476
43471
  return "Success" /* Success */;
43477
- case CoreToolCallStatus.Cancelled:
43472
+ case "cancelled" /* Cancelled */:
43478
43473
  return "Canceled" /* Canceled */;
43479
- case CoreToolCallStatus.Error:
43474
+ case "error" /* Error */:
43480
43475
  return "Error" /* Error */;
43481
- case CoreToolCallStatus.Scheduled:
43476
+ case "scheduled" /* Scheduled */:
43482
43477
  return "Pending" /* Pending */;
43483
43478
  default:
43484
43479
  return checkExhaustive(coreStatus);
43485
43480
  }
43486
43481
  }
43482
+ var isTodoList = (res) => typeof res === "object" && res !== null && "todos" in res;
43487
43483
  var emptyIcon = " ";
43488
43484
 
43489
43485
  // packages/cli/src/utils/cleanup.ts
@@ -43521,6 +43517,10 @@ async function runExitCleanup() {
43521
43517
  }
43522
43518
  }
43523
43519
  cleanupFunctions.length = 0;
43520
+ try {
43521
+ await resetBrowserSession();
43522
+ } catch (_2) {
43523
+ }
43524
43524
  if (configForTelemetry) {
43525
43525
  try {
43526
43526
  await configForTelemetry.dispose();
@@ -43619,12 +43619,15 @@ var ConsolePatcher = class {
43619
43619
  };
43620
43620
  formatArgs = (args) => util.format(...args);
43621
43621
  patchConsoleMethod = (type) => (...args) => {
43622
- if (this.params.stderr) {
43623
- if (type !== "debug" || this.params.debugMode) {
43624
- this.originalConsoleError(this.formatArgs(args));
43622
+ if (this.params.interactive === false) {
43623
+ if ((type === "info" || type === "log") && !this.params.debugMode) {
43624
+ return;
43625
43625
  }
43626
- } else {
43627
- if (type !== "debug" || this.params.debugMode) {
43626
+ }
43627
+ if (type !== "debug" || this.params.debugMode) {
43628
+ if (this.params.stderr) {
43629
+ this.originalConsoleError(this.formatArgs(args));
43630
+ } else {
43628
43631
  this.params.onNewMessage?.({
43629
43632
  type,
43630
43633
  content: this.formatArgs(args),
@@ -56122,6 +56125,10 @@ var COMPLETED_SHELL_MAX_LINES = 15;
56122
56125
  var SUBAGENT_MAX_LINES = 15;
56123
56126
  var MIN_TERMINAL_WIDTH_FOR_FULL_LABEL = 100;
56124
56127
  var DEFAULT_COMPRESSION_THRESHOLD = 0.5;
56128
+ var SKILLS_DOCS_URL = "https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/skills.md";
56129
+ var COMPACT_TOOL_SUBVIEW_MAX_LINES = 15;
56130
+ var MAX_SHELL_OUTPUT_SIZE = 1e7;
56131
+ var SHELL_OUTPUT_TRUNCATION_BUFFER = 1e6;
56125
56132
 
56126
56133
  // packages/cli/src/ui/themes/theme.ts
56127
56134
  var import_tinygradient = __toESM(require_tinygradient(), 1);
@@ -58606,7 +58613,7 @@ function convertSessionToHistoryFormats(messages) {
58606
58613
  name: tool.displayName || tool.name,
58607
58614
  description: tool.description || "",
58608
58615
  renderOutputAsMarkdown: tool.renderOutputAsMarkdown ?? true,
58609
- status: tool.status === "success" ? CoreToolCallStatus.Success : CoreToolCallStatus.Error,
58616
+ status: tool.status === "success" ? "success" /* Success */ : "error" /* Error */,
58610
58617
  resultDisplay: tool.resultDisplay,
58611
58618
  confirmationDetails: void 0
58612
58619
  }))
@@ -58639,33 +58646,11 @@ function deriveShortIdFromFileName(fileName) {
58639
58646
  }
58640
58647
  return null;
58641
58648
  }
58642
- function getSessionLogPath(tempDir, safeSessionId) {
58643
- return path4.join(tempDir, "logs", `session-${safeSessionId}.jsonl`);
58644
- }
58645
- async function deleteSessionArtifactsAsync(sessionId2, config) {
58649
+ async function cleanupSessionAndSubagentsAsync(sessionId2, config) {
58646
58650
  const tempDir = config.storage.getProjectTempDir();
58647
- const logsDir = path4.join(tempDir, "logs");
58648
- const safeSessionId = sanitizeFilenamePart(sessionId2);
58649
- const logPath = getSessionLogPath(tempDir, safeSessionId);
58650
- if (logPath.startsWith(logsDir)) {
58651
- await fs8.unlink(logPath).catch(() => {
58652
- });
58653
- }
58654
- const toolOutputDir = path4.join(
58655
- tempDir,
58656
- TOOL_OUTPUTS_DIR,
58657
- `session-${safeSessionId}`
58658
- );
58659
- const toolOutputsBase = path4.join(tempDir, TOOL_OUTPUTS_DIR);
58660
- if (toolOutputDir.startsWith(toolOutputsBase)) {
58661
- await fs8.rm(toolOutputDir, { recursive: true, force: true }).catch(() => {
58662
- });
58663
- }
58664
- const sessionDir = path4.join(tempDir, safeSessionId);
58665
- if (safeSessionId && sessionDir.startsWith(tempDir + path4.sep)) {
58666
- await fs8.rm(sessionDir, { recursive: true, force: true }).catch(() => {
58667
- });
58668
- }
58651
+ const chatsDir = path4.join(tempDir, "chats");
58652
+ await deleteSessionArtifactsAsync(sessionId2, tempDir);
58653
+ await deleteSubagentSessionDirAndArtifactsAsync(sessionId2, chatsDir, tempDir);
58669
58654
  }
58670
58655
  async function cleanupExpiredSessions(config, settings) {
58671
58656
  const result = {
@@ -58729,7 +58714,7 @@ async function cleanupExpiredSessions(config, settings) {
58729
58714
  if (!fullSessionId || fullSessionId !== config.getSessionId()) {
58730
58715
  await fs8.unlink(filePath);
58731
58716
  if (fullSessionId) {
58732
- await deleteSessionArtifactsAsync(fullSessionId, config);
58717
+ await cleanupSessionAndSubagentsAsync(fullSessionId, config);
58733
58718
  }
58734
58719
  result.deleted++;
58735
58720
  } else {
@@ -58750,7 +58735,7 @@ async function cleanupExpiredSessions(config, settings) {
58750
58735
  await fs8.unlink(sessionPath);
58751
58736
  const sessionId2 = sessionToDelete.sessionInfo?.id;
58752
58737
  if (sessionId2) {
58753
- await deleteSessionArtifactsAsync(sessionId2, config);
58738
+ await cleanupSessionAndSubagentsAsync(sessionId2, config);
58754
58739
  }
58755
58740
  if (config.getDebugMode()) {
58756
58741
  debugLogger.debug(
@@ -59144,7 +59129,7 @@ var SETTINGS_SCHEMA = {
59144
59129
  category: "General",
59145
59130
  requiresRestart: false,
59146
59131
  default: false,
59147
- description: "Enable run-event notifications for action-required prompts and session completion. Currently macOS only.",
59132
+ description: "Enable run-event notifications for action-required prompts and session completion.",
59148
59133
  showInDialog: true
59149
59134
  },
59150
59135
  checkpointing: {
@@ -59176,13 +59161,22 @@ var SETTINGS_SCHEMA = {
59176
59161
  description: "Planning features configuration.",
59177
59162
  showInDialog: false,
59178
59163
  properties: {
59164
+ enabled: {
59165
+ type: "boolean",
59166
+ label: "Enable Plan Mode",
59167
+ category: "General",
59168
+ requiresRestart: true,
59169
+ default: true,
59170
+ description: "Enable Plan Mode for read-only safety during planning.",
59171
+ showInDialog: true
59172
+ },
59179
59173
  directory: {
59180
59174
  type: "string",
59181
59175
  label: "Plan Directory",
59182
59176
  category: "General",
59183
59177
  requiresRestart: true,
59184
59178
  default: void 0,
59185
- description: "The directory where planning artifacts are stored. If not specified, defaults to the system temporary directory.",
59179
+ description: "The directory where planning artifacts are stored. If not specified, defaults to the system temporary directory. A custom directory requires a policy to allow write access in Plan Mode.",
59186
59180
  showInDialog: true
59187
59181
  },
59188
59182
  modelRouting: {
@@ -59430,6 +59424,15 @@ var SETTINGS_SCHEMA = {
59430
59424
  description: 'Show the "? for shortcuts" hint above the input.',
59431
59425
  showInDialog: true
59432
59426
  },
59427
+ compactToolOutput: {
59428
+ type: "boolean",
59429
+ label: "Compact Tool Output",
59430
+ category: "UI",
59431
+ requiresRestart: false,
59432
+ default: false,
59433
+ description: "Display tool outputs (like directory listings and file reads) in a compact, structured format.",
59434
+ showInDialog: true
59435
+ },
59433
59436
  hideBanner: {
59434
59437
  type: "boolean",
59435
59438
  label: "Hide Banner",
@@ -60041,6 +60044,15 @@ var SETTINGS_SCHEMA = {
60041
60044
  description: "Disable user input on browser window during automation.",
60042
60045
  showInDialog: false
60043
60046
  },
60047
+ maxActionsPerTask: {
60048
+ type: "number",
60049
+ label: "Max Actions Per Task",
60050
+ category: "Advanced",
60051
+ requiresRestart: false,
60052
+ default: 100,
60053
+ description: "The maximum number of tool calls allowed per browser task. Enforcement is hard: the agent will be terminated when the limit is reached.",
60054
+ showInDialog: false
60055
+ },
60044
60056
  confirmSensitiveActions: {
60045
60057
  type: "boolean",
60046
60058
  label: "Confirm Sensitive Actions",
@@ -60109,6 +60121,16 @@ var SETTINGS_SCHEMA = {
60109
60121
  description: "Maximum number of directories to search for memory.",
60110
60122
  showInDialog: true
60111
60123
  },
60124
+ memoryBoundaryMarkers: {
60125
+ type: "array",
60126
+ label: "Memory Boundary Markers",
60127
+ category: "Context",
60128
+ requiresRestart: true,
60129
+ default: [".git"],
60130
+ description: "File or directory names that mark the boundary for GEMINI.md discovery. The upward traversal stops at the first directory containing any of these markers. An empty array disables parent traversal.",
60131
+ showInDialog: false,
60132
+ items: { type: "string" }
60133
+ },
60112
60134
  includeDirectories: {
60113
60135
  type: "array",
60114
60136
  label: "Include Directories",
@@ -60260,6 +60282,20 @@ var SETTINGS_SCHEMA = {
60260
60282
  `,
60261
60283
  showInDialog: true
60262
60284
  },
60285
+ backgroundCompletionBehavior: {
60286
+ type: "enum",
60287
+ label: "Background Completion Behavior",
60288
+ category: "Tools",
60289
+ requiresRestart: false,
60290
+ default: "silent",
60291
+ description: "Controls what happens when a background shell command finishes. 'silent' (default): quietly exits in background. 'inject': automatically returns output to agent. 'notify': shows brief message in chat.",
60292
+ showInDialog: false,
60293
+ options: [
60294
+ { label: "Silent", value: "silent" },
60295
+ { label: "Inject", value: "inject" },
60296
+ { label: "Notify", value: "notify" }
60297
+ ]
60298
+ },
60263
60299
  pager: {
60264
60300
  type: "string",
60265
60301
  label: "Pager",
@@ -60682,54 +60718,6 @@ var SETTINGS_SCHEMA = {
60682
60718
  description: "Setting to enable experimental features",
60683
60719
  showInDialog: false,
60684
60720
  properties: {
60685
- toolOutputMasking: {
60686
- type: "object",
60687
- label: "Tool Output Masking",
60688
- category: "Experimental",
60689
- requiresRestart: true,
60690
- ignoreInDocs: false,
60691
- default: {},
60692
- description: "Advanced settings for tool output masking to manage context window efficiency.",
60693
- showInDialog: false,
60694
- properties: {
60695
- enabled: {
60696
- type: "boolean",
60697
- label: "Enable Tool Output Masking",
60698
- category: "Experimental",
60699
- requiresRestart: true,
60700
- default: true,
60701
- description: "Enables tool output masking to save tokens.",
60702
- showInDialog: true
60703
- },
60704
- toolProtectionThreshold: {
60705
- type: "number",
60706
- label: "Tool Protection Threshold",
60707
- category: "Experimental",
60708
- requiresRestart: true,
60709
- default: 5e4,
60710
- description: "Minimum number of tokens to protect from masking (most recent tool outputs).",
60711
- showInDialog: false
60712
- },
60713
- minPrunableTokensThreshold: {
60714
- type: "number",
60715
- label: "Min Prunable Tokens Threshold",
60716
- category: "Experimental",
60717
- requiresRestart: true,
60718
- default: 3e4,
60719
- description: "Minimum prunable tokens required to trigger a masking pass.",
60720
- showInDialog: false
60721
- },
60722
- protectLatestTurn: {
60723
- type: "boolean",
60724
- label: "Protect Latest Turn",
60725
- category: "Experimental",
60726
- requiresRestart: true,
60727
- default: true,
60728
- description: "Ensures the absolute latest turn is never masked, regardless of token count.",
60729
- showInDialog: false
60730
- }
60731
- }
60732
- },
60733
60721
  enableAgents: {
60734
60722
  type: "boolean",
60735
60723
  label: "Enable Agents",
@@ -60820,15 +60808,6 @@ var SETTINGS_SCHEMA = {
60820
60808
  description: "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).",
60821
60809
  showInDialog: true
60822
60810
  },
60823
- plan: {
60824
- type: "boolean",
60825
- label: "Plan",
60826
- category: "Experimental",
60827
- requiresRestart: true,
60828
- default: true,
60829
- description: "Enable Plan Mode.",
60830
- showInDialog: true
60831
- },
60832
60811
  taskTracker: {
60833
60812
  type: "boolean",
60834
60813
  label: "Task Tracker",
@@ -60923,6 +60902,15 @@ var SETTINGS_SCHEMA = {
60923
60902
  description: "Replace the built-in save_memory tool with a memory manager subagent that supports adding, removing, de-duplicating, and organizing memories.",
60924
60903
  showInDialog: true
60925
60904
  },
60905
+ contextManagement: {
60906
+ type: "boolean",
60907
+ label: "Enable Context Management",
60908
+ category: "Experimental",
60909
+ requiresRestart: true,
60910
+ default: false,
60911
+ description: "Enable logic for context management.",
60912
+ showInDialog: true
60913
+ },
60926
60914
  topicUpdateNarration: {
60927
60915
  type: "boolean",
60928
60916
  label: "Topic & Update Narration",
@@ -61178,6 +61166,159 @@ var SETTINGS_SCHEMA = {
61178
61166
  mergeStrategy: "concat" /* CONCAT */
61179
61167
  }
61180
61168
  },
61169
+ contextManagement: {
61170
+ type: "object",
61171
+ label: "Context Management",
61172
+ category: "Experimental",
61173
+ requiresRestart: true,
61174
+ default: {},
61175
+ description: "Settings for agent history and tool distillation context management.",
61176
+ showInDialog: false,
61177
+ properties: {
61178
+ historyWindow: {
61179
+ type: "object",
61180
+ label: "History Window Settings",
61181
+ category: "Context Management",
61182
+ requiresRestart: true,
61183
+ default: {},
61184
+ showInDialog: false,
61185
+ properties: {
61186
+ maxTokens: {
61187
+ type: "number",
61188
+ label: "Max Tokens",
61189
+ category: "Context Management",
61190
+ requiresRestart: true,
61191
+ default: 15e4,
61192
+ description: "The number of tokens to allow before triggering compression.",
61193
+ showInDialog: false
61194
+ },
61195
+ retainedTokens: {
61196
+ type: "number",
61197
+ label: "Retained Tokens",
61198
+ category: "Context Management",
61199
+ requiresRestart: true,
61200
+ default: 4e4,
61201
+ description: "The number of tokens to always retain.",
61202
+ showInDialog: false
61203
+ }
61204
+ }
61205
+ },
61206
+ messageLimits: {
61207
+ type: "object",
61208
+ label: "Message Limits",
61209
+ category: "Context Management",
61210
+ requiresRestart: true,
61211
+ default: {},
61212
+ showInDialog: false,
61213
+ properties: {
61214
+ normalMaxTokens: {
61215
+ type: "number",
61216
+ label: "Normal Maximum Tokens",
61217
+ category: "Context Management",
61218
+ requiresRestart: true,
61219
+ default: 2500,
61220
+ description: "The target number of tokens to budget for a normal conversation turn.",
61221
+ showInDialog: false
61222
+ },
61223
+ retainedMaxTokens: {
61224
+ type: "number",
61225
+ label: "Retained Maximum Tokens",
61226
+ category: "Context Management",
61227
+ requiresRestart: true,
61228
+ default: 12e3,
61229
+ description: "The maximum number of tokens a single conversation turn can consume before truncation.",
61230
+ showInDialog: false
61231
+ },
61232
+ normalizationHeadRatio: {
61233
+ type: "number",
61234
+ label: "Normalization Head Ratio",
61235
+ category: "Context Management",
61236
+ requiresRestart: true,
61237
+ default: 0.25,
61238
+ description: "The ratio of tokens to retain from the beginning of a truncated message (0.0 to 1.0).",
61239
+ showInDialog: false
61240
+ }
61241
+ }
61242
+ },
61243
+ tools: {
61244
+ type: "object",
61245
+ label: "Context Management Tools",
61246
+ category: "Context Management",
61247
+ requiresRestart: true,
61248
+ default: {},
61249
+ showInDialog: false,
61250
+ properties: {
61251
+ distillation: {
61252
+ type: "object",
61253
+ label: "Tool Distillation",
61254
+ category: "Context Management",
61255
+ requiresRestart: true,
61256
+ default: {},
61257
+ showInDialog: false,
61258
+ properties: {
61259
+ maxOutputTokens: {
61260
+ type: "number",
61261
+ label: "Max Output Tokens",
61262
+ category: "Context Management",
61263
+ requiresRestart: true,
61264
+ default: 1e4,
61265
+ description: "Maximum tokens to show to the model when truncating large tool outputs.",
61266
+ showInDialog: false
61267
+ },
61268
+ summarizationThresholdTokens: {
61269
+ type: "number",
61270
+ label: "Tool Summarization Threshold",
61271
+ category: "Context Management",
61272
+ requiresRestart: true,
61273
+ default: 2e4,
61274
+ description: "Threshold above which truncated tool outputs will be summarized by an LLM.",
61275
+ showInDialog: false
61276
+ }
61277
+ }
61278
+ },
61279
+ outputMasking: {
61280
+ type: "object",
61281
+ label: "Tool Output Masking",
61282
+ category: "Context Management",
61283
+ requiresRestart: true,
61284
+ ignoreInDocs: false,
61285
+ default: {},
61286
+ description: "Advanced settings for tool output masking to manage context window efficiency.",
61287
+ showInDialog: false,
61288
+ properties: {
61289
+ protectionThresholdTokens: {
61290
+ type: "number",
61291
+ label: "Tool Protection Threshold (Tokens)",
61292
+ category: "Context Management",
61293
+ requiresRestart: true,
61294
+ default: 5e4,
61295
+ description: "Minimum number of tokens to protect from masking (most recent tool outputs).",
61296
+ showInDialog: false
61297
+ },
61298
+ minPrunableThresholdTokens: {
61299
+ type: "number",
61300
+ label: "Min Prunable Tokens Threshold",
61301
+ category: "Context Management",
61302
+ requiresRestart: true,
61303
+ default: 3e4,
61304
+ description: "Minimum prunable tokens required to trigger a masking pass.",
61305
+ showInDialog: false
61306
+ },
61307
+ protectLatestTurn: {
61308
+ type: "boolean",
61309
+ label: "Protect Latest Turn",
61310
+ category: "Context Management",
61311
+ requiresRestart: true,
61312
+ default: true,
61313
+ description: "Ensures the absolute latest turn is never masked, regardless of token count.",
61314
+ showInDialog: false
61315
+ }
61316
+ }
61317
+ }
61318
+ }
61319
+ }
61320
+ }
61321
+ },
61181
61322
  admin: {
61182
61323
  type: "object",
61183
61324
  label: "Admin",
@@ -62429,8 +62570,8 @@ var LoadedSettings = class {
62429
62570
  // React will pass a listener fn into this subscribe fn
62430
62571
  // that listener fn will perform an object identity check on the snapshot and trigger a React re render if the snapshot has changed
62431
62572
  subscribe(listener) {
62432
- coreEvents.on(CoreEvent.SettingsChanged, listener);
62433
- return () => coreEvents.off(CoreEvent.SettingsChanged, listener);
62573
+ coreEvents.on("settings-changed" /* SettingsChanged */, listener);
62574
+ return () => coreEvents.off("settings-changed" /* SettingsChanged */, listener);
62434
62575
  }
62435
62576
  getSnapshot() {
62436
62577
  return this._snapshot;
@@ -62931,7 +63072,7 @@ function migrateExperimentalSettings(settings, loadedSettings, scope, removeDepr
62931
63072
  let modified = false;
62932
63073
  const migrateExperimental = (oldKey, migrateFn) => {
62933
63074
  const old = experimentalSettings[oldKey];
62934
- if (old) {
63075
+ if (old !== void 0) {
62935
63076
  foundDeprecated?.push(`experimental.${oldKey}`);
62936
63077
  migrateFn(old);
62937
63078
  modified = true;
@@ -62983,6 +63124,21 @@ function migrateExperimentalSettings(settings, loadedSettings, scope, removeDepr
62983
63124
  if (old["enabled"] !== void 0) override["enabled"] = old["enabled"];
62984
63125
  agentsOverrides["cli_help"] = override;
62985
63126
  });
63127
+ migrateExperimental("plan", (planValue) => {
63128
+ const generalSettings = settings.general || {};
63129
+ const newGeneral = { ...generalSettings };
63130
+ const planSettings = (
63131
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
63132
+ newGeneral["plan"] || {}
63133
+ );
63134
+ const newPlan = { ...planSettings };
63135
+ if (newPlan["enabled"] === void 0) {
63136
+ newPlan["enabled"] = planValue;
63137
+ newGeneral["plan"] = newPlan;
63138
+ loadedSettings.setValue(scope, "general", newGeneral);
63139
+ modified = true;
63140
+ }
63141
+ });
62986
63142
  if (modified) {
62987
63143
  agentsSettings["overrides"] = agentsOverrides;
62988
63144
  loadedSettings.setValue(scope, "agents", agentsSettings);
@@ -62990,6 +63146,7 @@ function migrateExperimentalSettings(settings, loadedSettings, scope, removeDepr
62990
63146
  const newExperimental = { ...experimentalSettings };
62991
63147
  delete newExperimental["codebaseInvestigatorSettings"];
62992
63148
  delete newExperimental["cliHelpAgentSettings"];
63149
+ delete newExperimental["plan"];
62993
63150
  loadedSettings.setValue(scope, "experimental", newExperimental);
62994
63151
  }
62995
63152
  return true;
@@ -63286,19 +63443,6 @@ var useFocus = () => {
63286
63443
  };
63287
63444
  };
63288
63445
 
63289
- // packages/cli/src/utils/events.ts
63290
- import { EventEmitter as EventEmitter3 } from "node:events";
63291
- var AppEvent = /* @__PURE__ */ ((AppEvent2) => {
63292
- AppEvent2["OpenDebugConsole"] = "open-debug-console";
63293
- AppEvent2["Flicker"] = "flicker";
63294
- AppEvent2["SelectionWarning"] = "selection-warning";
63295
- AppEvent2["PasteTimeout"] = "paste-timeout";
63296
- AppEvent2["TerminalBackground"] = "terminal-background";
63297
- AppEvent2["TransientMessage"] = "transient-message";
63298
- return AppEvent2;
63299
- })(AppEvent || {});
63300
- var appEvents = new EventEmitter3();
63301
-
63302
63446
  // packages/cli/src/ui/utils/terminalCapabilityManager.ts
63303
63447
  import * as fs11 from "node:fs";
63304
63448
 
@@ -63543,6 +63687,12 @@ var TerminalCapabilityManager = class _TerminalCapabilityManager {
63543
63687
  isKittyProtocolEnabled() {
63544
63688
  return this.kittyEnabled;
63545
63689
  }
63690
+ isGhosttyTerminal(env3 = process.env) {
63691
+ const termProgram = env3["TERM_PROGRAM"]?.toLowerCase();
63692
+ const term = env3["TERM"]?.toLowerCase();
63693
+ const name = this.getTerminalName()?.toLowerCase();
63694
+ return !!(name?.includes("ghostty") || termProgram?.includes("ghostty") || term?.includes("ghostty"));
63695
+ }
63546
63696
  supportsOsc9Notifications(env3 = process.env) {
63547
63697
  if (env3["WT_SESSION"]) {
63548
63698
  return false;
@@ -64256,6 +64406,7 @@ var Command = /* @__PURE__ */ ((Command2) => {
64256
64406
  Command2["EXPAND_SUGGESTION"] = "suggest.expand";
64257
64407
  Command2["COLLAPSE_SUGGESTION"] = "suggest.collapse";
64258
64408
  Command2["SUBMIT"] = "input.submit";
64409
+ Command2["QUEUE_MESSAGE"] = "input.queueMessage";
64259
64410
  Command2["NEWLINE"] = "input.newline";
64260
64411
  Command2["OPEN_EXTERNAL_EDITOR"] = "input.openExternalEditor";
64261
64412
  Command2["PASTE_CLIPBOARD"] = "input.paste";
@@ -64282,6 +64433,8 @@ var Command = /* @__PURE__ */ ((Command2) => {
64282
64433
  Command2["UNFOCUS_BACKGROUND_SHELL"] = "background.unfocus";
64283
64434
  Command2["UNFOCUS_BACKGROUND_SHELL_LIST"] = "background.unfocusList";
64284
64435
  Command2["SHOW_BACKGROUND_SHELL_UNFOCUS_WARNING"] = "background.unfocusWarning";
64436
+ Command2["UPDATE_EXTENSION"] = "extension.update";
64437
+ Command2["LINK_EXTENSION"] = "extension.link";
64285
64438
  return Command2;
64286
64439
  })(Command || {});
64287
64440
  var KeyBinding = class _KeyBinding {
@@ -64491,6 +64644,7 @@ var defaultKeyBindingConfig = /* @__PURE__ */ new Map([
64491
64644
  // Text Input
64492
64645
  // Must also exclude shift to allow shift+enter for newline
64493
64646
  ["input.submit" /* SUBMIT */, [new KeyBinding("enter")]],
64647
+ ["input.queueMessage" /* QUEUE_MESSAGE */, [new KeyBinding("tab")]],
64494
64648
  [
64495
64649
  "input.newline" /* NEWLINE */,
64496
64650
  [
@@ -64534,7 +64688,10 @@ var defaultKeyBindingConfig = /* @__PURE__ */ new Map([
64534
64688
  ["background.kill" /* KILL_BACKGROUND_SHELL */, [new KeyBinding("ctrl+k")]],
64535
64689
  ["background.unfocus" /* UNFOCUS_BACKGROUND_SHELL */, [new KeyBinding("shift+tab")]],
64536
64690
  ["background.unfocusList" /* UNFOCUS_BACKGROUND_SHELL_LIST */, [new KeyBinding("tab")]],
64537
- ["background.unfocusWarning" /* SHOW_BACKGROUND_SHELL_UNFOCUS_WARNING */, [new KeyBinding("tab")]]
64691
+ ["background.unfocusWarning" /* SHOW_BACKGROUND_SHELL_UNFOCUS_WARNING */, [new KeyBinding("tab")]],
64692
+ // Extension Controls
64693
+ ["extension.update" /* UPDATE_EXTENSION */, [new KeyBinding("i")]],
64694
+ ["extension.link" /* LINK_EXTENSION */, [new KeyBinding("l")]]
64538
64695
  ]);
64539
64696
  var keybindingsSchema = external_exports.array(
64540
64697
  external_exports.object({
@@ -66656,6 +66813,152 @@ var XCode = new Theme(
66656
66813
  xcodeColors
66657
66814
  );
66658
66815
 
66816
+ // packages/cli/src/ui/themes/builtin/dark/tokyonight-dark.ts
66817
+ var palette = {
66818
+ bg: "#1a1b26",
66819
+ bg_dark: "#16161e",
66820
+ bg_dark1: "#0C0E14",
66821
+ bg_highlight: "#292e42",
66822
+ blue: "#7aa2f7",
66823
+ blue0: "#3d59a1",
66824
+ blue1: "#2ac3de",
66825
+ blue2: "#0db9d7",
66826
+ blue5: "#89ddff",
66827
+ blue6: "#b4f9f8",
66828
+ blue7: "#394b70",
66829
+ comment: "#565f89",
66830
+ cyan: "#7dcfff",
66831
+ fg: "#c0caf5",
66832
+ fg_dark: "#a9b1d6",
66833
+ fg_gutter: "#3b4261",
66834
+ green: "#9ece6a",
66835
+ green1: "#73daca",
66836
+ green2: "#41a6b5",
66837
+ magenta: "#bb9af7",
66838
+ magenta2: "#ff007c",
66839
+ orange: "#ff9e64",
66840
+ purple: "#9d7cd8",
66841
+ red: "#f7768e",
66842
+ red1: "#db4b4b",
66843
+ teal: "#1abc9c",
66844
+ yellow: "#e0af68",
66845
+ diff: {
66846
+ add: "#243e4a",
66847
+ change: "#1f2231",
66848
+ delete: "#4a272f"
66849
+ }
66850
+ };
66851
+ var tokyoNightColors = {
66852
+ type: "dark",
66853
+ Background: palette.bg,
66854
+ Foreground: palette.fg,
66855
+ LightBlue: palette.purple,
66856
+ AccentBlue: palette.magenta,
66857
+ AccentPurple: palette.blue,
66858
+ AccentCyan: palette.cyan,
66859
+ AccentGreen: palette.teal,
66860
+ AccentYellow: palette.yellow,
66861
+ AccentRed: palette.red1,
66862
+ DiffAdded: palette.diff.add,
66863
+ DiffRemoved: palette.diff.delete,
66864
+ Comment: palette.comment,
66865
+ Gray: palette.fg_dark,
66866
+ DarkGray: palette.fg_gutter,
66867
+ FocusColor: palette.blue,
66868
+ GradientColors: [palette.blue, palette.magenta, palette.cyan]
66869
+ };
66870
+ var TokyoNight = new Theme(
66871
+ "Tokyo Night",
66872
+ "dark",
66873
+ {
66874
+ hljs: {
66875
+ display: "block",
66876
+ overflowX: "auto",
66877
+ padding: "0.5em",
66878
+ background: palette.bg,
66879
+ color: palette.fg
66880
+ },
66881
+ "hljs-addition": { background: palette.diff.add },
66882
+ "hljs-attr": { color: palette.green1 },
66883
+ "hljs-attribute": { color: palette.green1 },
66884
+ "hljs-brace": { color: palette.fg_dark },
66885
+ "hljs-built_in": { color: palette.blue1 },
66886
+ "hljs-builtin-symbol": { color: palette.blue1 },
66887
+ "hljs-bullet": {
66888
+ color: palette.orange,
66889
+ fontWeight: "bold"
66890
+ },
66891
+ "hljs-char": { color: palette.green },
66892
+ "hljs-char-escape": { color: palette.magenta },
66893
+ "hljs-character": { color: palette.green },
66894
+ "hljs-class": { color: palette.blue1 },
66895
+ "hljs-class-title": { color: palette.blue1 },
66896
+ "hljs-code": { color: palette.green },
66897
+ "hljs-comment": {
66898
+ color: palette.comment,
66899
+ fontStyle: "italic"
66900
+ },
66901
+ "hljs-computation-expression": { color: palette.cyan },
66902
+ "hljs-deletion": { background: palette.diff.delete },
66903
+ "hljs-doctag": { color: palette.yellow },
66904
+ "hljs-emphasis": { fontStyle: "italic" },
66905
+ "hljs-function": { color: palette.blue },
66906
+ "hljs-function-dispatch": { color: palette.blue },
66907
+ "hljs-keyword": {
66908
+ color: palette.magenta,
66909
+ fontStyle: "italic"
66910
+ },
66911
+ "hljs-label": { color: palette.blue },
66912
+ "hljs-link": { color: palette.teal },
66913
+ "hljs-literal": { color: palette.orange },
66914
+ "hljs-message-name": { color: palette.blue },
66915
+ "hljs-meta": { color: palette.cyan },
66916
+ "hljs-meta-prompt": { color: palette.fg_dark },
66917
+ "hljs-name": { color: palette.magenta },
66918
+ "hljs-named-character": { color: palette.blue1 },
66919
+ "hljs-number": { color: palette.orange },
66920
+ "hljs-operator": { color: palette.blue5 },
66921
+ "hljs-params": { color: palette.yellow },
66922
+ "hljs-property": { color: palette.green1 },
66923
+ "hljs-punctuation": { color: palette.fg_dark },
66924
+ "hljs-quote": {
66925
+ color: palette.comment,
66926
+ fontStyle: "italic"
66927
+ },
66928
+ "hljs-regex": { color: palette.blue6 },
66929
+ "hljs-regexp": { color: palette.blue6 },
66930
+ "hljs-rest_arg": {
66931
+ color: interpolateColor(palette.yellow, palette.fg, 0.8)
66932
+ },
66933
+ "hljs-section": {
66934
+ color: palette.blue,
66935
+ fontWeight: "bold"
66936
+ },
66937
+ "hljs-selector-attr": { color: palette.cyan },
66938
+ "hljs-selector-class": { color: palette.green1 },
66939
+ "hljs-selector-id": { color: palette.green1 },
66940
+ "hljs-selector-pseudo": { color: palette.cyan },
66941
+ "hljs-selector-tag": { color: palette.magenta },
66942
+ "hljs-string": { color: palette.green },
66943
+ "hljs-strong": { fontWeight: "bold" },
66944
+ "hljs-subst": { color: palette.blue5 },
66945
+ "hljs-symbol": { color: palette.magenta },
66946
+ "hljs-tag": { color: palette.blue1 },
66947
+ "hljs-template-tag": { color: palette.blue5 },
66948
+ "hljs-template-variable": { color: palette.fg },
66949
+ "hljs-title": { color: palette.blue },
66950
+ "hljs-title-class": { color: palette.blue1 },
66951
+ "hljs-title-class-inherited": { color: palette.blue1 },
66952
+ "hljs-title-function": { color: palette.blue },
66953
+ "hljs-title-function-invoke": { color: palette.blue },
66954
+ "hljs-type": { color: palette.blue1 },
66955
+ "hljs-variable": { color: palette.fg },
66956
+ "hljs-variable-constant": { color: palette.orange },
66957
+ "hljs-variable-language": { color: palette.red }
66958
+ },
66959
+ tokyoNightColors
66960
+ );
66961
+
66659
66962
  // packages/cli/src/ui/themes/theme-manager.ts
66660
66963
  import * as fs13 from "node:fs";
66661
66964
  import * as path6 from "node:path";
@@ -67155,6 +67458,7 @@ var ThemeManager = class {
67155
67458
  SolarizedDark,
67156
67459
  SolarizedLight,
67157
67460
  XCode,
67461
+ TokyoNight,
67158
67462
  ANSI,
67159
67463
  ANSILight
67160
67464
  ];
@@ -67730,7 +68034,7 @@ var import_react34 = __toESM(require_react(), 1);
67730
68034
  function useIdeTrustListener() {
67731
68035
  const settings = useSettings();
67732
68036
  const [connectionStatus, setConnectionStatus] = (0, import_react34.useState)(
67733
- IDEConnectionStatus.Disconnected
68037
+ "disconnected" /* Disconnected */
67734
68038
  );
67735
68039
  const previousTrust = (0, import_react34.useRef)(void 0);
67736
68040
  const [restartReason, setRestartReason] = (0, import_react34.useState)("NONE");
@@ -67760,7 +68064,7 @@ function useIdeTrustListener() {
67760
68064
  };
67761
68065
  }, []);
67762
68066
  const getSnapshot = () => {
67763
- if (connectionStatus !== IDEConnectionStatus.Connected) {
68067
+ if (connectionStatus !== "connected" /* Connected */) {
67764
68068
  return void 0;
67765
68069
  }
67766
68070
  return ideContextStore.get()?.workspaceState?.isTrusted;
@@ -68128,8 +68432,8 @@ function getInstallationInfo(projectRoot, isAutoUpdateEnabled) {
68128
68432
  }
68129
68433
 
68130
68434
  // packages/cli/src/utils/updateEventEmitter.ts
68131
- import { EventEmitter as EventEmitter4 } from "node:events";
68132
- var updateEventEmitter = new EventEmitter4();
68435
+ import { EventEmitter as EventEmitter3 } from "node:events";
68436
+ var updateEventEmitter = new EventEmitter3();
68133
68437
 
68134
68438
  // packages/cli/src/utils/spawnWrapper.ts
68135
68439
  import { spawn } from "node:child_process";
@@ -68191,12 +68495,19 @@ Automatic update is not available in sandbox mode.`
68191
68495
  combinedMessage += `
68192
68496
  ${installationInfo.updateMessage}`;
68193
68497
  }
68194
- updateEventEmitter.emit("update-received", {
68195
- message: combinedMessage
68196
- });
68197
68498
  if (!installationInfo.updateCommand || !settings.merged.general.enableAutoUpdate) {
68499
+ updateEventEmitter.emit("update-received", {
68500
+ ...info,
68501
+ message: combinedMessage,
68502
+ isUpdating: false
68503
+ });
68198
68504
  return;
68199
68505
  }
68506
+ updateEventEmitter.emit("update-received", {
68507
+ ...info,
68508
+ message: combinedMessage,
68509
+ isUpdating: true
68510
+ });
68200
68511
  if (_updateInProgress) {
68201
68512
  return;
68202
68513
  }
@@ -72899,7 +73210,7 @@ Would you like to attempt to install via "git clone" instead?`
72899
73210
  newExtensionConfig.version,
72900
73211
  previousExtensionConfig.version,
72901
73212
  installMetadata.type,
72902
- CoreToolCallStatus.Success
73213
+ "success" /* Success */
72903
73214
  )
72904
73215
  );
72905
73216
  if (newExtensionName !== previousName) {
@@ -72922,7 +73233,7 @@ Would you like to attempt to install via "git clone" instead?`
72922
73233
  getExtensionId(newExtensionConfig, installMetadata),
72923
73234
  newExtensionConfig.version,
72924
73235
  installMetadata.type,
72925
- CoreToolCallStatus.Success
73236
+ "success" /* Success */
72926
73237
  )
72927
73238
  );
72928
73239
  await this.enableExtension(
@@ -72955,7 +73266,7 @@ Would you like to attempt to install via "git clone" instead?`
72955
73266
  newExtensionConfig?.version ?? "",
72956
73267
  previousExtensionConfig.version,
72957
73268
  installMetadata.type,
72958
- CoreToolCallStatus.Error
73269
+ "error" /* Error */
72959
73270
  )
72960
73271
  );
72961
73272
  } else {
@@ -72967,7 +73278,7 @@ Would you like to attempt to install via "git clone" instead?`
72967
73278
  extensionId ?? "",
72968
73279
  newExtensionConfig?.version ?? "",
72969
73280
  installMetadata.type,
72970
- CoreToolCallStatus.Error
73281
+ "error" /* Error */
72971
73282
  )
72972
73283
  );
72973
73284
  }
@@ -72998,7 +73309,7 @@ Would you like to attempt to install via "git clone" instead?`
72998
73309
  extension.name,
72999
73310
  hashValue(extension.name),
73000
73311
  extension.id,
73001
- CoreToolCallStatus.Success
73312
+ "success" /* Success */
73002
73313
  )
73003
73314
  );
73004
73315
  }
@@ -73268,7 +73579,7 @@ Would you like to attempt to install via "git clone" instead?`
73268
73579
  if (eventHooks) {
73269
73580
  for (const definition of eventHooks) {
73270
73581
  for (const hook of definition.hooks) {
73271
- if (hook.type === HookType.Command) {
73582
+ if (hook.type === "command" /* Command */) {
73272
73583
  hook.env = { ...hook.env, ...hookEnv };
73273
73584
  }
73274
73585
  }
@@ -73895,7 +74206,7 @@ async function readMcpResources(resourceParts, config, signal) {
73895
74206
  callId: `mcp-resource-${resource.serverName}-${resource.uri}`,
73896
74207
  name: `resources/read (${resource.serverName})`,
73897
74208
  description: resource.uri,
73898
- status: CoreToolCallStatus.Success,
74209
+ status: "success" /* Success */,
73899
74210
  isClientInitiated: true,
73900
74211
  resultDisplay: `Successfully read resource ${resource.uri}`,
73901
74212
  confirmationDetails: void 0
@@ -73910,7 +74221,7 @@ async function readMcpResources(resourceParts, config, signal) {
73910
74221
  callId: `mcp-resource-${resource.serverName}-${resource.uri}`,
73911
74222
  name: `resources/read (${resource.serverName})`,
73912
74223
  description: resource.uri,
73913
- status: CoreToolCallStatus.Error,
74224
+ status: "error" /* Error */,
73914
74225
  isClientInitiated: true,
73915
74226
  resultDisplay: `Error reading resource ${resource.uri}: ${getErrorMessage(error)}`,
73916
74227
  confirmationDetails: void 0
@@ -73935,7 +74246,7 @@ Content from @${result.uri}:
73935
74246
  }
73936
74247
  if (hasError) {
73937
74248
  const firstError = displays.find(
73938
- (d) => d.status === CoreToolCallStatus.Error
74249
+ (d) => d.status === "error" /* Error */
73939
74250
  );
73940
74251
  return {
73941
74252
  parts: [],
@@ -73971,7 +74282,7 @@ async function readLocalFiles(resolvedFiles, config, signal, userMessageTimestam
73971
74282
  callId: `client-read-${userMessageTimestamp}`,
73972
74283
  name: readManyFilesTool.displayName,
73973
74284
  description: invocation.getDescription(),
73974
- status: CoreToolCallStatus.Success,
74285
+ status: "success" /* Success */,
73975
74286
  isClientInitiated: true,
73976
74287
  resultDisplay: result.returnDisplay || `Successfully read: ${fileLabelsForDisplay.join(", ")}`,
73977
74288
  confirmationDetails: void 0
@@ -74018,7 +74329,7 @@ Content from @${displayPath}:
74018
74329
  callId: `client-read-${userMessageTimestamp}`,
74019
74330
  name: readManyFilesTool.displayName,
74020
74331
  description: invocation?.getDescription() ?? "Error attempting to execute tool to read files",
74021
- status: CoreToolCallStatus.Error,
74332
+ status: "error" /* Error */,
74022
74333
  isClientInitiated: true,
74023
74334
  resultDisplay: `Error reading files (${fileLabelsForDisplay.join(", ")}): ${getErrorMessage(error)}`,
74024
74335
  confirmationDetails: void 0
@@ -75480,7 +75791,7 @@ var incrementMaxListeners = (eventEmitter, maxListenersIncrement, signal) => {
75480
75791
  };
75481
75792
 
75482
75793
  // packages/cli/node_modules/execa/lib/ipc/forward.js
75483
- import { EventEmitter as EventEmitter5 } from "node:events";
75794
+ import { EventEmitter as EventEmitter4 } from "node:events";
75484
75795
 
75485
75796
  // packages/cli/node_modules/execa/lib/ipc/incoming.js
75486
75797
  import { once as once2 } from "node:events";
@@ -75562,7 +75873,7 @@ var getIpcEmitter = (anyProcess, channel, isSubprocess) => {
75562
75873
  if (IPC_EMITTERS.has(anyProcess)) {
75563
75874
  return IPC_EMITTERS.get(anyProcess);
75564
75875
  }
75565
- const ipcEmitter = new EventEmitter5();
75876
+ const ipcEmitter = new EventEmitter4();
75566
75877
  ipcEmitter.connected = true;
75567
75878
  IPC_EMITTERS.set(anyProcess, ipcEmitter);
75568
75879
  forwardEvents({
@@ -80257,6 +80568,7 @@ var parseSlashCommand = (query, commands) => {
80257
80568
  let commandToExecute;
80258
80569
  let pathIndex = 0;
80259
80570
  const canonicalPath = [];
80571
+ let parentCommand;
80260
80572
  for (const part of commandPath) {
80261
80573
  let foundCommand = currentCommands.find((cmd) => cmd.name === part);
80262
80574
  if (!foundCommand) {
@@ -80265,6 +80577,7 @@ var parseSlashCommand = (query, commands) => {
80265
80577
  );
80266
80578
  }
80267
80579
  if (foundCommand) {
80580
+ parentCommand = commandToExecute;
80268
80581
  commandToExecute = foundCommand;
80269
80582
  canonicalPath.push(foundCommand.name);
80270
80583
  pathIndex++;
@@ -80278,6 +80591,13 @@ var parseSlashCommand = (query, commands) => {
80278
80591
  }
80279
80592
  }
80280
80593
  const args = parts.slice(pathIndex).join(" ");
80594
+ if (commandToExecute && commandToExecute.takesArgs === false && args.length > 0 && parentCommand && parentCommand.action) {
80595
+ return {
80596
+ commandToExecute: parentCommand,
80597
+ args: parts.slice(pathIndex - 1).join(" "),
80598
+ canonicalPath: canonicalPath.slice(0, -1)
80599
+ };
80600
+ }
80281
80601
  return { commandToExecute, args, canonicalPath };
80282
80602
  };
80283
80603
 
@@ -82221,7 +82541,7 @@ async function openFileInEditor(filePath, stdin, setRawMode, preferredEditorType
82221
82541
  if (wasRaw) {
82222
82542
  setRawMode?.(true);
82223
82543
  }
82224
- coreEvents.emit(CoreEvent.ExternalEditorClosed);
82544
+ coreEvents.emit("external-editor-closed" /* ExternalEditorClosed */);
82225
82545
  }
82226
82546
  }
82227
82547
 
@@ -84900,7 +85220,7 @@ async function updateExtension(extension, extensionManager, currentState, dispat
84900
85220
  extension.name,
84901
85221
  installMetadata
84902
85222
  );
84903
- if (status === IntegrityDataStatus.INVALID) {
85223
+ if (status === "invalid" /* INVALID */) {
84904
85224
  throw new Error("Extension integrity cannot be verified");
84905
85225
  }
84906
85226
  } catch (e) {
@@ -85274,11 +85594,11 @@ var useSessionBrowser = (config, onLoadHistory) => {
85274
85594
  * Deletes a session by ID using the ChatRecordingService.
85275
85595
  */
85276
85596
  handleDeleteSession: (0, import_react41.useCallback)(
85277
- (session) => {
85597
+ async (session) => {
85278
85598
  try {
85279
85599
  const chatRecordingService = config.getGeminiClient()?.getChatRecordingService();
85280
85600
  if (chatRecordingService) {
85281
- chatRecordingService.deleteSession(session.file);
85601
+ await chatRecordingService.deleteSession(session.file);
85282
85602
  }
85283
85603
  } catch (error) {
85284
85604
  coreEvents.emitFeedback("error", "Error deleting session:", error);
@@ -85737,7 +86057,7 @@ async function initializeApp(config, settings) {
85737
86057
  await ideClient.connect();
85738
86058
  logIdeConnection(
85739
86059
  config,
85740
- new IdeConnectionEvent(IdeConnectionType.START)
86060
+ new IdeConnectionEvent("start" /* START */)
85741
86061
  );
85742
86062
  }).catch((e) => {
85743
86063
  debugLogger.error("Failed to initialize IDE client:", e);
@@ -85755,16 +86075,16 @@ async function initializeApp(config, settings) {
85755
86075
  // packages/cli/src/config/auth.ts
85756
86076
  function validateAuthMethod(authMethod) {
85757
86077
  loadEnvironment(loadSettings().merged, process.cwd());
85758
- if (authMethod === AuthType.LOGIN_WITH_GOOGLE || authMethod === AuthType.COMPUTE_ADC) {
86078
+ if (authMethod === "oauth-personal" /* LOGIN_WITH_GOOGLE */ || authMethod === "compute-default-credentials" /* COMPUTE_ADC */) {
85759
86079
  return null;
85760
86080
  }
85761
- if (authMethod === AuthType.USE_GEMINI) {
86081
+ if (authMethod === "gemini-api-key" /* USE_GEMINI */) {
85762
86082
  if (!process.env["GEMINI_API_KEY"]) {
85763
86083
  return "When using Gemini API, you must specify the GEMINI_API_KEY environment variable.\nUpdate your environment and try again (no reload needed if using .env)!";
85764
86084
  }
85765
86085
  return null;
85766
86086
  }
85767
- if (authMethod === AuthType.USE_VERTEX_AI) {
86087
+ if (authMethod === "vertex-ai" /* USE_VERTEX_AI */) {
85768
86088
  const hasVertexProjectLocationConfig = !!process.env["GOOGLE_CLOUD_PROJECT"] && !!process.env["GOOGLE_CLOUD_LOCATION"];
85769
86089
  const hasGoogleApiKey = !!process.env["GOOGLE_API_KEY"];
85770
86090
  if (!hasVertexProjectLocationConfig && !hasGoogleApiKey) {
@@ -87735,7 +88055,7 @@ var authCommand = {
87735
88055
  import process34 from "node:process";
87736
88056
 
87737
88057
  // packages/cli/src/generated/git-commit.ts
87738
- var GIT_COMMIT_INFO = "201c74c03";
88058
+ var GIT_COMMIT_INFO = "d9d51ba15";
87739
88059
 
87740
88060
  // packages/cli/src/ui/utils/historyExportUtils.ts
87741
88061
  import * as fsPromises2 from "node:fs/promises";
@@ -87934,6 +88254,7 @@ var listCommand = {
87934
88254
  description: "List saved manual conversation checkpoints",
87935
88255
  kind: "built-in" /* BUILT_IN */,
87936
88256
  autoExecute: true,
88257
+ takesArgs: false,
87937
88258
  action: async (context) => {
87938
88259
  const chatDetails = await getSavedChatTags(context, false);
87939
88260
  const item = {
@@ -88220,10 +88541,18 @@ var chatCommand = {
88220
88541
  description: "Browse auto-saved conversations and manage chat checkpoints",
88221
88542
  kind: "built-in" /* BUILT_IN */,
88222
88543
  autoExecute: true,
88223
- action: async () => ({
88224
- type: "dialog",
88225
- dialog: "sessionBrowser"
88226
- }),
88544
+ action: async (context, args) => {
88545
+ if (args) {
88546
+ const parsed = parseSlashCommand(`/${args}`, chatResumeSubCommands);
88547
+ if (parsed.commandToExecute?.action) {
88548
+ return parsed.commandToExecute.action(context, parsed.args);
88549
+ }
88550
+ }
88551
+ return {
88552
+ type: "dialog",
88553
+ dialog: "sessionBrowser"
88554
+ };
88555
+ },
88227
88556
  subCommands: chatResumeSubCommands
88228
88557
  };
88229
88558
 
@@ -88239,7 +88568,7 @@ var clearCommand = {
88239
88568
  const config = context.services.agentContext?.config;
88240
88569
  const hookSystem = config?.getHookSystem();
88241
88570
  if (hookSystem) {
88242
- await hookSystem.fireSessionEndEvent(SessionEndReason.Clear);
88571
+ await hookSystem.fireSessionEndEvent("clear" /* Clear */);
88243
88572
  }
88244
88573
  config?.injectionService.clear();
88245
88574
  let newSessionId;
@@ -88249,13 +88578,14 @@ var clearCommand = {
88249
88578
  }
88250
88579
  if (geminiClient) {
88251
88580
  context.ui.setDebugMessage("Clearing terminal and resetting chat.");
88581
+ await resetBrowserSession();
88252
88582
  await geminiClient.resetChat();
88253
88583
  } else {
88254
88584
  context.ui.setDebugMessage("Clearing terminal.");
88255
88585
  }
88256
88586
  let result;
88257
88587
  if (hookSystem) {
88258
- result = await hookSystem.fireSessionStartEvent(SessionStartSource.Clear);
88588
+ result = await hookSystem.fireSessionStartEvent("clear" /* Clear */);
88259
88589
  }
88260
88590
  await new Promise((resolve9) => setImmediate(resolve9));
88261
88591
  if (config) {
@@ -89426,7 +89756,9 @@ function ExtensionDetails({
89426
89756
  onBack,
89427
89757
  onInstall,
89428
89758
  onLink,
89429
- isInstalled
89759
+ isInstalled,
89760
+ updateState,
89761
+ onUpdate
89430
89762
  }) {
89431
89763
  const keyMatchers = useKeyMatchers();
89432
89764
  const [consentRequest, setConsentRequest] = (0, import_react55.useState)(null);
@@ -89461,7 +89793,7 @@ function ExtensionDetails({
89461
89793
  );
89462
89794
  return true;
89463
89795
  }
89464
- if (key.name === "l" && isLinkable && !isInstalled && !isInstalling) {
89796
+ if (keyMatchers["extension.link" /* LINK_EXTENSION */](key) && isLinkable && !isInstalled && !isInstalling) {
89465
89797
  setIsInstalling(true);
89466
89798
  void onLink(
89467
89799
  (prompt) => new Promise((resolve9) => {
@@ -89470,6 +89802,10 @@ function ExtensionDetails({
89470
89802
  );
89471
89803
  return true;
89472
89804
  }
89805
+ if (keyMatchers["extension.update" /* UPDATE_EXTENSION */](key) && updateState === "update available" /* UPDATE_AVAILABLE */ && !isInstalling) {
89806
+ void onUpdate?.();
89807
+ return true;
89808
+ }
89473
89809
  return false;
89474
89810
  },
89475
89811
  { isActive: true, priority: true }
@@ -89533,7 +89869,9 @@ function ExtensionDetails({
89533
89869
  ">",
89534
89870
  " "
89535
89871
  ] }),
89536
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text, { color: theme.text.primary, bold: true, children: extension.extensionName })
89872
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text, { color: theme.text.primary, bold: true, children: extension.extensionName }),
89873
+ updateState === "update available" /* UPDATE_AVAILABLE */ && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Box_default, { marginLeft: 1, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text, { color: theme.status.warning, children: "[I] Update" }) }),
89874
+ updateState === "updating" /* UPDATING */ && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Box_default, { marginLeft: 1, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text, { color: theme.text.secondary, children: "[Updating...]" }) })
89537
89875
  ] }),
89538
89876
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Box_default, { flexDirection: "row", children: [
89539
89877
  /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Text, { color: theme.text.secondary, children: [
@@ -89614,7 +89952,7 @@ function ExtensionDetails({
89614
89952
  ]
89615
89953
  }
89616
89954
  ),
89617
- isInstalled && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Box_default, { flexDirection: "row", marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text, { color: theme.status.success, children: "Already Installed" }) })
89955
+ isInstalled && updateState !== "updating" /* UPDATING */ && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Box_default, { flexDirection: "row", marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Text, { color: theme.status.success, children: "Already Installed" }) })
89618
89956
  ]
89619
89957
  }
89620
89958
  );
@@ -89633,11 +89971,11 @@ function ExtensionRegistryView({
89633
89971
  "",
89634
89972
  config.getExtensionRegistryURI()
89635
89973
  );
89636
- const { terminalHeight, staticExtraHeight } = useUIState();
89974
+ const { terminalHeight, staticExtraHeight, historyManager } = useUIState();
89637
89975
  const [selectedExtension, setSelectedExtension] = (0, import_react56.useState)(null);
89638
- const { extensionsUpdateState } = useExtensionUpdates(
89976
+ const { extensionsUpdateState, dispatchExtensionStateUpdate } = useExtensionUpdates(
89639
89977
  extensionManager,
89640
- () => 0,
89978
+ historyManager.addItem,
89641
89979
  config.getEnableExtensionReloading()
89642
89980
  );
89643
89981
  const [installedExtensions, setInstalledExtensions] = (0, import_react56.useState)(
@@ -89674,6 +90012,21 @@ function ExtensionRegistryView({
89674
90012
  },
89675
90013
  [onLink, extensionManager]
89676
90014
  );
90015
+ const handleUpdate = (0, import_react56.useCallback)(
90016
+ async (extension) => {
90017
+ dispatchExtensionStateUpdate({
90018
+ type: "SCHEDULE_UPDATE",
90019
+ payload: {
90020
+ all: false,
90021
+ names: [extension.extensionName],
90022
+ onComplete: () => {
90023
+ setInstalledExtensions(extensionManager.getExtensions());
90024
+ }
90025
+ }
90026
+ });
90027
+ },
90028
+ [dispatchExtensionStateUpdate, extensionManager]
90029
+ );
89677
90030
  const renderItem = (0, import_react56.useCallback)(
89678
90031
  (item, isActive, _labelWidth) => {
89679
90032
  const isInstalled = installedExtensions.some(
@@ -89682,7 +90035,6 @@ function ExtensionRegistryView({
89682
90035
  const updateState = extensionsUpdateState.get(
89683
90036
  item.extension.extensionName
89684
90037
  );
89685
- const hasUpdate = updateState === "update available" /* UPDATE_AVAILABLE */;
89686
90038
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Box_default, { flexDirection: "row", width: "100%", justifyContent: "space-between", children: [
89687
90039
  /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Box_default, { flexDirection: "row", flexShrink: 1, minWidth: 0, children: [
89688
90040
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { width: 2, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
@@ -89701,8 +90053,7 @@ function ExtensionRegistryView({
89701
90053
  }
89702
90054
  ) }),
89703
90055
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { flexShrink: 0, marginX: 1, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.text.secondary, children: "|" }) }),
89704
- isInstalled && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { marginRight: 1, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.status.success, children: "[Installed]" }) }),
89705
- hasUpdate && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { marginRight: 1, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.status.warning, children: "[Update available]" }) }),
90056
+ updateState === "update available" /* UPDATE_AVAILABLE */ ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { marginRight: 1, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.status.warning, children: "[Update available]" }) }) : updateState === "updating" /* UPDATING */ ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { marginRight: 1, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.text.secondary, children: "[Updating...]" }) }) : isInstalled && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { marginRight: 1, flexShrink: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.status.success, children: "[Installed]" }) }),
89706
90057
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Box_default, { flexShrink: 1, minWidth: 0, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Text, { color: theme.text.secondary, wrap: "truncate-end", children: item.description }) })
89707
90058
  ] }),
89708
90059
  /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Box_default, { flexShrink: 0, marginLeft: 2, width: 8, flexDirection: "row", children: [
@@ -89802,7 +90153,13 @@ function ExtensionRegistryView({
89802
90153
  },
89803
90154
  isInstalled: installedExtensions.some(
89804
90155
  (e) => e.name === selectedExtension.extensionName
89805
- )
90156
+ ),
90157
+ updateState: extensionsUpdateState.get(
90158
+ selectedExtension.extensionName
90159
+ ),
90160
+ onUpdate: async () => {
90161
+ await handleUpdate(selectedExtension);
90162
+ }
89806
90163
  }
89807
90164
  )
89808
90165
  ] });
@@ -90417,6 +90774,7 @@ var listExtensionsCommand = {
90417
90774
  description: "List active extensions",
90418
90775
  kind: "built-in" /* BUILT_IN */,
90419
90776
  autoExecute: true,
90777
+ takesArgs: false,
90420
90778
  action: listAction2
90421
90779
  };
90422
90780
  var updateExtensionsCommand = {
@@ -90470,6 +90828,7 @@ var exploreExtensionsCommand = {
90470
90828
  description: "Open extensions page in your browser",
90471
90829
  kind: "built-in" /* BUILT_IN */,
90472
90830
  autoExecute: true,
90831
+ takesArgs: false,
90473
90832
  action: exploreAction
90474
90833
  };
90475
90834
  var reloadCommand = {
@@ -90497,26 +90856,35 @@ function extensionsCommand(enableExtensionReloading) {
90497
90856
  linkCommand,
90498
90857
  configCommand2
90499
90858
  ] : [];
90859
+ const subCommands = [
90860
+ listExtensionsCommand,
90861
+ updateExtensionsCommand,
90862
+ exploreExtensionsCommand,
90863
+ reloadCommand,
90864
+ ...conditionalCommands
90865
+ ];
90500
90866
  return {
90501
90867
  name: "extensions",
90502
90868
  description: "Manage extensions",
90503
90869
  kind: "built-in" /* BUILT_IN */,
90504
90870
  autoExecute: false,
90505
- subCommands: [
90506
- listExtensionsCommand,
90507
- updateExtensionsCommand,
90508
- exploreExtensionsCommand,
90509
- reloadCommand,
90510
- ...conditionalCommands
90511
- ],
90512
- action: (context, args) => (
90513
- // Default to list if no subcommand is provided
90514
- listExtensionsCommand.action(context, args)
90515
- )
90871
+ subCommands,
90872
+ action: async (context, args) => {
90873
+ if (args) {
90874
+ const parsed = parseSlashCommand(`/${args}`, subCommands);
90875
+ if (parsed.commandToExecute?.action) {
90876
+ return parsed.commandToExecute.action(context, parsed.args);
90877
+ }
90878
+ }
90879
+ return listExtensionsCommand.action(context, args);
90880
+ }
90516
90881
  };
90517
90882
  }
90518
90883
 
90519
90884
  // packages/cli/src/ui/components/FooterConfigDialog.tsx
90885
+ var import_react60 = __toESM(require_react(), 1);
90886
+
90887
+ // packages/cli/src/ui/components/Footer.tsx
90520
90888
  var import_react59 = __toESM(require_react(), 1);
90521
90889
 
90522
90890
  // packages/cli/src/ui/components/ConsoleSummaryDisplay.tsx
@@ -90546,12 +90914,13 @@ import process38 from "node:process";
90546
90914
  var import_react58 = __toESM(require_react(), 1);
90547
90915
  import process37 from "node:process";
90548
90916
  var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
90549
- var MemoryUsageDisplay = ({
90550
- color = theme.text.primary
90551
- }) => {
90917
+ var MemoryUsageDisplay = ({ color = theme.text.primary, isActive = true }) => {
90552
90918
  const [memoryUsage, setMemoryUsage] = (0, import_react58.useState)("");
90553
90919
  const [memoryUsageColor, setMemoryUsageColor] = (0, import_react58.useState)(color);
90554
90920
  (0, import_react58.useEffect)(() => {
90921
+ if (!isActive) {
90922
+ return;
90923
+ }
90555
90924
  const updateMemory = () => {
90556
90925
  const usage = process37.memoryUsage().rss;
90557
90926
  setMemoryUsage(formatBytes(usage));
@@ -90562,7 +90931,7 @@ var MemoryUsageDisplay = ({
90562
90931
  const intervalId = setInterval(updateMemory, 2e3);
90563
90932
  updateMemory();
90564
90933
  return () => clearInterval(intervalId);
90565
- }, [color]);
90934
+ }, [color, isActive]);
90566
90935
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Box_default, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Text, { color: memoryUsageColor, children: memoryUsage }) });
90567
90936
  };
90568
90937
 
@@ -90712,6 +91081,11 @@ var ALL_ITEMS = [
90712
91081
  header: "session",
90713
91082
  description: "Unique identifier for the current session"
90714
91083
  },
91084
+ {
91085
+ id: "auth",
91086
+ header: "/auth",
91087
+ description: "Current authentication info"
91088
+ },
90715
91089
  {
90716
91090
  id: "code-changes",
90717
91091
  header: "diff",
@@ -90732,6 +91106,7 @@ var DEFAULT_ORDER = [
90732
91106
  "quota",
90733
91107
  "memory-usage",
90734
91108
  "session-id",
91109
+ "auth",
90735
91110
  "code-changes",
90736
91111
  "token-count"
90737
91112
  ];
@@ -90765,8 +91140,12 @@ function deriveItemsFromLegacySettings(settings) {
90765
91140
  }
90766
91141
  var VALID_IDS = new Set(ALL_ITEMS.map((i) => i.id));
90767
91142
  function resolveFooterState(settings) {
90768
- const source = (settings.ui?.footer?.items ?? deriveItemsFromLegacySettings(settings)).filter((id) => VALID_IDS.has(id));
90769
- const others = DEFAULT_ORDER.filter((id) => !source.includes(id));
91143
+ const showUserIdentity = settings.ui?.showUserIdentity !== false;
91144
+ const filteredValidIds = showUserIdentity ? VALID_IDS : new Set([...VALID_IDS].filter((id) => id !== "auth"));
91145
+ const source = (settings.ui?.footer?.items ?? deriveItemsFromLegacySettings(settings)).filter((id) => filteredValidIds.has(id));
91146
+ const others = DEFAULT_ORDER.filter(
91147
+ (id) => !source.includes(id) && filteredValidIds.has(id)
91148
+ );
90770
91149
  return {
90771
91150
  orderedIds: [...source, ...others],
90772
91151
  selectedIds: new Set(source)
@@ -90869,11 +91248,26 @@ var FooterRow = ({ items, showLabels }) => {
90869
91248
  function isFooterItemId(id) {
90870
91249
  return ALL_ITEMS.some((i) => i.id === id);
90871
91250
  }
90872
- var Footer = () => {
91251
+ var Footer = ({
91252
+ copyModeEnabled = false
91253
+ }) => {
90873
91254
  const uiState = useUIState();
90874
91255
  const config = useConfig();
90875
91256
  const settings = useSettings();
90876
91257
  const { vimEnabled, vimMode } = useVimMode();
91258
+ const authType = config.getContentGeneratorConfig()?.authType;
91259
+ const [email, setEmail] = (0, import_react59.useState)();
91260
+ (0, import_react59.useEffect)(() => {
91261
+ if (authType) {
91262
+ const userAccountManager = new UserAccountManager();
91263
+ setEmail(userAccountManager.getCachedGoogleAccount() ?? void 0);
91264
+ } else {
91265
+ setEmail(void 0);
91266
+ }
91267
+ }, [authType]);
91268
+ if (copyModeEnabled) {
91269
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Box_default, { height: 1 });
91270
+ }
90877
91271
  const {
90878
91272
  model,
90879
91273
  targetDir,
@@ -91031,7 +91425,18 @@ var Footer = () => {
91031
91425
  break;
91032
91426
  }
91033
91427
  case "memory-usage": {
91034
- addCol(id, header, () => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(MemoryUsageDisplay, { color: itemColor }), 10);
91428
+ addCol(
91429
+ id,
91430
+ header,
91431
+ () => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
91432
+ MemoryUsageDisplay,
91433
+ {
91434
+ color: itemColor,
91435
+ isActive: !uiState.copyModeEnabled
91436
+ }
91437
+ ),
91438
+ 10
91439
+ );
91035
91440
  break;
91036
91441
  }
91037
91442
  case "session-id": {
@@ -91043,6 +91448,18 @@ var Footer = () => {
91043
91448
  );
91044
91449
  break;
91045
91450
  }
91451
+ case "auth": {
91452
+ if (!settings.merged.ui.showUserIdentity) break;
91453
+ if (!authType) break;
91454
+ const displayStr = authType === "oauth-personal" /* LOGIN_WITH_GOOGLE */ ? email ?? "google" : authType;
91455
+ addCol(
91456
+ id,
91457
+ header,
91458
+ () => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Text, { color: itemColor, wrap: "truncate-end", children: displayStr }),
91459
+ displayStr.length
91460
+ );
91461
+ break;
91462
+ }
91046
91463
  case "code-changes": {
91047
91464
  const added = uiState.sessionStats.metrics.files.totalLinesAdded;
91048
91465
  const removed = uiState.sessionStats.metrics.files.totalLinesRemoved;
@@ -91190,14 +91607,14 @@ var FooterConfigDialog = ({
91190
91607
  const keyMatchers = useKeyMatchers();
91191
91608
  const { settings, setSetting } = useSettingsStore();
91192
91609
  const { constrainHeight, terminalHeight, staticExtraHeight } = useUIState();
91193
- const [state, dispatch] = (0, import_react59.useReducer)(
91610
+ const [state, dispatch] = (0, import_react60.useReducer)(
91194
91611
  footerConfigReducer,
91195
91612
  void 0,
91196
91613
  () => resolveFooterState(settings.merged)
91197
91614
  );
91198
91615
  const { orderedIds, selectedIds } = state;
91199
- const [focusKey, setFocusKey] = (0, import_react59.useState)(orderedIds[0]);
91200
- const listItems = (0, import_react59.useMemo)(() => {
91616
+ const [focusKey, setFocusKey] = (0, import_react60.useState)(orderedIds[0]);
91617
+ const listItems = (0, import_react60.useMemo)(() => {
91201
91618
  const items = orderedIds.map((id) => {
91202
91619
  const item = ALL_ITEMS.find((i) => i.id === id);
91203
91620
  if (!item) return null;
@@ -91232,7 +91649,7 @@ var FooterConfigDialog = ({
91232
91649
  });
91233
91650
  return items;
91234
91651
  }, [orderedIds]);
91235
- const handleSaveAndClose = (0, import_react59.useCallback)(() => {
91652
+ const handleSaveAndClose = (0, import_react60.useCallback)(() => {
91236
91653
  const finalItems = orderedIds.filter((id) => selectedIds.has(id));
91237
91654
  const currentSetting = settings.merged.ui?.footer?.items;
91238
91655
  if (JSON.stringify(finalItems) !== JSON.stringify(currentSetting)) {
@@ -91246,17 +91663,17 @@ var FooterConfigDialog = ({
91246
91663
  settings.merged.ui?.footer?.items,
91247
91664
  onClose
91248
91665
  ]);
91249
- const handleResetToDefaults = (0, import_react59.useCallback)(() => {
91666
+ const handleResetToDefaults = (0, import_react60.useCallback)(() => {
91250
91667
  setSetting("User" /* User */, "ui.footer.items", void 0);
91251
91668
  const newState = resolveFooterState(settings.merged);
91252
91669
  dispatch({ type: "SET_STATE", payload: newState });
91253
91670
  setFocusKey(newState.orderedIds[0]);
91254
91671
  }, [setSetting, settings.merged]);
91255
- const handleToggleLabels = (0, import_react59.useCallback)(() => {
91672
+ const handleToggleLabels = (0, import_react60.useCallback)(() => {
91256
91673
  const current = settings.merged.ui.footer.showLabels !== false;
91257
91674
  setSetting("User" /* User */, "ui.footer.showLabels", !current);
91258
91675
  }, [setSetting, settings.merged.ui.footer.showLabels]);
91259
- const handleSelect = (0, import_react59.useCallback)(
91676
+ const handleSelect = (0, import_react60.useCallback)(
91260
91677
  (item) => {
91261
91678
  if (item.type === "config") {
91262
91679
  dispatch({ type: "TOGGLE_ITEM", id: item.id });
@@ -91268,7 +91685,7 @@ var FooterConfigDialog = ({
91268
91685
  },
91269
91686
  [handleResetToDefaults, handleToggleLabels]
91270
91687
  );
91271
- const handleHighlight = (0, import_react59.useCallback)((item) => {
91688
+ const handleHighlight = (0, import_react60.useCallback)((item) => {
91272
91689
  setFocusKey(item.key);
91273
91690
  }, []);
91274
91691
  useKeypress(
@@ -91294,7 +91711,7 @@ var FooterConfigDialog = ({
91294
91711
  { isActive: true, priority: true }
91295
91712
  );
91296
91713
  const showLabels = settings.merged.ui.footer.showLabels !== false;
91297
- const previewContent = (0, import_react59.useMemo)(() => {
91714
+ const previewContent = (0, import_react60.useMemo)(() => {
91298
91715
  if (focusKey === "reset") {
91299
91716
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text, { color: theme.ui.comment, italic: true, children: "Default footer (uses legacy settings)" });
91300
91717
  }
@@ -91318,6 +91735,7 @@ var FooterConfigDialog = ({
91318
91735
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text, { color: getColor("code-changes"), children: " " }),
91319
91736
  /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text, { color: getColor("code-changes", theme.status.error), children: "-4" })
91320
91737
  ] }),
91738
+ auth: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text, { color: getColor("auth", itemColor), children: "test@example.com" }),
91321
91739
  "token-count": /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text, { color: getColor("token-count", itemColor), children: "1.5k tokens" })
91322
91740
  };
91323
91741
  const rowItems = itemsToPreview.filter((id) => mockData[id]).map((id) => ({
@@ -91475,10 +91893,10 @@ var shortcutsCommand = {
91475
91893
  };
91476
91894
 
91477
91895
  // packages/cli/src/ui/components/RewindViewer.tsx
91478
- var import_react62 = __toESM(require_react(), 1);
91896
+ var import_react63 = __toESM(require_react(), 1);
91479
91897
 
91480
91898
  // packages/cli/src/ui/hooks/useRewind.ts
91481
- var import_react60 = __toESM(require_react(), 1);
91899
+ var import_react61 = __toESM(require_react(), 1);
91482
91900
 
91483
91901
  // packages/cli/src/ui/utils/rewindFileOps.ts
91484
91902
  import fs38 from "node:fs/promises";
@@ -91631,15 +92049,15 @@ async function revertFileChanges(conversation, targetMessageId) {
91631
92049
 
91632
92050
  // packages/cli/src/ui/hooks/useRewind.ts
91633
92051
  function useRewind(conversation) {
91634
- const [selectedMessageId, setSelectedMessageId] = (0, import_react60.useState)(
92052
+ const [selectedMessageId, setSelectedMessageId] = (0, import_react61.useState)(
91635
92053
  null
91636
92054
  );
91637
- const [confirmationStats, setConfirmationStats] = (0, import_react60.useState)(null);
91638
- const getStats = (0, import_react60.useCallback)(
92055
+ const [confirmationStats, setConfirmationStats] = (0, import_react61.useState)(null);
92056
+ const getStats = (0, import_react61.useCallback)(
91639
92057
  (userMessage) => calculateTurnStats(conversation, userMessage),
91640
92058
  [conversation]
91641
92059
  );
91642
- const selectMessage = (0, import_react60.useCallback)(
92060
+ const selectMessage = (0, import_react61.useCallback)(
91643
92061
  (messageId) => {
91644
92062
  const msg = conversation.messages.find((m2) => m2.id === messageId);
91645
92063
  if (msg) {
@@ -91649,7 +92067,7 @@ function useRewind(conversation) {
91649
92067
  },
91650
92068
  [conversation]
91651
92069
  );
91652
- const clearSelection = (0, import_react60.useCallback)(() => {
92070
+ const clearSelection = (0, import_react61.useCallback)(() => {
91653
92071
  setSelectedMessageId(null);
91654
92072
  setConfirmationStats(null);
91655
92073
  }, []);
@@ -91663,7 +92081,7 @@ function useRewind(conversation) {
91663
92081
  }
91664
92082
 
91665
92083
  // packages/cli/src/ui/components/RewindConfirmation.tsx
91666
- var import_react61 = __toESM(require_react(), 1);
92084
+ var import_react62 = __toESM(require_react(), 1);
91667
92085
  var import_jsx_runtime24 = __toESM(require_jsx_runtime(), 1);
91668
92086
  var REWIND_OPTIONS = [
91669
92087
  {
@@ -91708,7 +92126,7 @@ var RewindConfirmation = ({
91708
92126
  const handleSelect = (outcome) => {
91709
92127
  onConfirm(outcome);
91710
92128
  };
91711
- const options = (0, import_react61.useMemo)(() => {
92129
+ const options = (0, import_react62.useMemo)(() => {
91712
92130
  if (stats) {
91713
92131
  return REWIND_OPTIONS;
91714
92132
  }
@@ -91835,7 +92253,7 @@ var RewindViewer = ({
91835
92253
  onRewind
91836
92254
  }) => {
91837
92255
  const keyMatchers = useKeyMatchers();
91838
- const [isRewinding, setIsRewinding] = (0, import_react62.useState)(false);
92256
+ const [isRewinding, setIsRewinding] = (0, import_react63.useState)(false);
91839
92257
  const { terminalWidth, terminalHeight } = useUIState();
91840
92258
  const isScreenReaderEnabled = use_is_screen_reader_enabled_default();
91841
92259
  const {
@@ -91845,15 +92263,15 @@ var RewindViewer = ({
91845
92263
  selectMessage,
91846
92264
  clearSelection
91847
92265
  } = useRewind(conversation);
91848
- const [highlightedMessageId, setHighlightedMessageId] = (0, import_react62.useState)(null);
91849
- const [expandedMessageId, setExpandedMessageId] = (0, import_react62.useState)(
92266
+ const [highlightedMessageId, setHighlightedMessageId] = (0, import_react63.useState)(null);
92267
+ const [expandedMessageId, setExpandedMessageId] = (0, import_react63.useState)(
91850
92268
  null
91851
92269
  );
91852
- const interactions = (0, import_react62.useMemo)(
92270
+ const interactions = (0, import_react63.useMemo)(
91853
92271
  () => conversation.messages.filter((msg) => msg.type === "user"),
91854
92272
  [conversation.messages]
91855
92273
  );
91856
- const items = (0, import_react62.useMemo)(() => {
92274
+ const items = (0, import_react63.useMemo)(() => {
91857
92275
  const interactionItems = interactions.map((msg, idx) => ({
91858
92276
  key: `${msg.id || "msg"}-${idx}`,
91859
92277
  value: msg,
@@ -92209,7 +92627,7 @@ var rewindCommand = {
92209
92627
  };
92210
92628
 
92211
92629
  // packages/cli/src/ui/commands/hooksCommand.ts
92212
- var import_react64 = __toESM(require_react(), 1);
92630
+ var import_react65 = __toESM(require_react(), 1);
92213
92631
 
92214
92632
  // packages/cli/src/utils/hookSettings.ts
92215
92633
  function enableHook(settings, hookName) {
@@ -92347,7 +92765,7 @@ function renderHookActionFeedback(result, formatScope) {
92347
92765
  }
92348
92766
 
92349
92767
  // packages/cli/src/ui/components/HooksDialog.tsx
92350
- var import_react63 = __toESM(require_react(), 1);
92768
+ var import_react64 = __toESM(require_react(), 1);
92351
92769
  var import_jsx_runtime27 = __toESM(require_jsx_runtime(), 1);
92352
92770
  var DEFAULT_MAX_VISIBLE_HOOKS = 8;
92353
92771
  var HooksDialog = ({
@@ -92356,8 +92774,8 @@ var HooksDialog = ({
92356
92774
  maxVisibleHooks = DEFAULT_MAX_VISIBLE_HOOKS
92357
92775
  }) => {
92358
92776
  const keyMatchers = useKeyMatchers();
92359
- const [scrollOffset, setScrollOffset] = (0, import_react63.useState)(0);
92360
- const flattenedHooks = (0, import_react63.useMemo)(() => {
92777
+ const [scrollOffset, setScrollOffset] = (0, import_react64.useState)(0);
92778
+ const flattenedHooks = (0, import_react64.useMemo)(() => {
92361
92779
  const result = [];
92362
92780
  const hooksByEvent = hooks.reduce(
92363
92781
  (acc, hook) => {
@@ -92501,7 +92919,7 @@ function panelAction(context) {
92501
92919
  const allHooks = hookSystem?.getAllHooks() || [];
92502
92920
  return {
92503
92921
  type: "custom_dialog",
92504
- component: (0, import_react64.createElement)(HooksDialog, {
92922
+ component: (0, import_react65.createElement)(HooksDialog, {
92505
92923
  hooks: allHooks,
92506
92924
  onClose: () => context.ui.removeComponent()
92507
92925
  })
@@ -92785,12 +93203,12 @@ import path34 from "node:path";
92785
93203
  function getIdeStatusMessage(ideClient) {
92786
93204
  const connection = ideClient.getConnectionStatus();
92787
93205
  switch (connection.status) {
92788
- case IDEConnectionStatus.Connected:
93206
+ case "connected" /* Connected */:
92789
93207
  return {
92790
93208
  messageType: "info",
92791
93209
  content: `\u{1F7E2} Connected to ${ideClient.getDetectedIdeDisplayName()}`
92792
93210
  };
92793
- case IDEConnectionStatus.Connecting:
93211
+ case "connecting" /* Connecting */:
92794
93212
  return {
92795
93213
  messageType: "info",
92796
93214
  content: `\u{1F7E1} Connecting...`
@@ -92831,7 +93249,7 @@ ${infoMessage}`;
92831
93249
  async function getIdeStatusMessageWithFiles(ideClient) {
92832
93250
  const connection = ideClient.getConnectionStatus();
92833
93251
  switch (connection.status) {
92834
- case IDEConnectionStatus.Connected: {
93252
+ case "connected" /* Connected */: {
92835
93253
  let content = `\u{1F7E2} Connected to ${ideClient.getDetectedIdeDisplayName()}`;
92836
93254
  const context = ideContextStore.get();
92837
93255
  const openFiles = context?.workspaceState?.openFiles;
@@ -92843,7 +93261,7 @@ async function getIdeStatusMessageWithFiles(ideClient) {
92843
93261
  content
92844
93262
  };
92845
93263
  }
92846
- case IDEConnectionStatus.Connecting:
93264
+ case "connecting" /* Connecting */:
92847
93265
  return {
92848
93266
  messageType: "info",
92849
93267
  content: `\u{1F7E1} Connecting...`
@@ -92865,7 +93283,7 @@ async function setIdeModeAndSyncConnection(config, value, options = {}) {
92865
93283
  const ideClient = await IdeClient.getInstance();
92866
93284
  if (value) {
92867
93285
  await ideClient.connect(options);
92868
- logIdeConnection(config, new IdeConnectionEvent(IdeConnectionType.SESSION));
93286
+ logIdeConnection(config, new IdeConnectionEvent("session" /* SESSION */));
92869
93287
  } else {
92870
93288
  await ideClient.disconnect();
92871
93289
  }
@@ -92953,7 +93371,7 @@ var ideCommand = async () => {
92953
93371
  logToConsole: false
92954
93372
  }
92955
93373
  );
92956
- if (ideClient.getConnectionStatus().status === IDEConnectionStatus.Connected) {
93374
+ if (ideClient.getConnectionStatus().status === "connected" /* Connected */) {
92957
93375
  break;
92958
93376
  }
92959
93377
  await new Promise((resolve9) => setTimeout(resolve9, 500));
@@ -93030,7 +93448,7 @@ var ideCommand = async () => {
93030
93448
  }
93031
93449
  };
93032
93450
  const { status } = ideClient.getConnectionStatus();
93033
- const isConnected2 = status === IDEConnectionStatus.Connected;
93451
+ const isConnected2 = status === "connected" /* Connected */;
93034
93452
  if (isConnected2) {
93035
93453
  ideSlashCommand.subCommands = [statusCommand, disableCommand5];
93036
93454
  } else {
@@ -93130,13 +93548,13 @@ Use /mcp auth <server-name> to authenticate.`
93130
93548
  const displayListener = (message) => {
93131
93549
  context.ui.addItem({ type: "info", text: message });
93132
93550
  };
93133
- coreEvents.on(CoreEvent.OauthDisplayMessage, displayListener);
93551
+ coreEvents.on("oauth-display-message" /* OauthDisplayMessage */, displayListener);
93134
93552
  try {
93135
93553
  context.ui.addItem({
93136
93554
  type: "info",
93137
93555
  text: `Starting OAuth authentication for MCP server '${serverName}'...`
93138
93556
  });
93139
- const { MCPOAuthProvider } = await import("./dist-JYY2GAAR.js");
93557
+ const { MCPOAuthProvider } = await import("./core-5OME6LT4.js");
93140
93558
  let oauthConfig = server.oauth;
93141
93559
  if (!oauthConfig) {
93142
93560
  oauthConfig = { enabled: false };
@@ -93173,7 +93591,7 @@ Use /mcp auth <server-name> to authenticate.`
93173
93591
  content: `Failed to authenticate with MCP server '${serverName}': ${getErrorMessage(error)}`
93174
93592
  };
93175
93593
  } finally {
93176
- coreEvents.removeListener(CoreEvent.OauthDisplayMessage, displayListener);
93594
+ coreEvents.removeListener("oauth-display-message" /* OauthDisplayMessage */, displayListener);
93177
93595
  }
93178
93596
  },
93179
93597
  completion: async (context, partialArg) => {
@@ -93186,7 +93604,7 @@ Use /mcp auth <server-name> to authenticate.`
93186
93604
  );
93187
93605
  }
93188
93606
  };
93189
- var listAction3 = async (context, showDescriptions = false, showSchema = false) => {
93607
+ var listAction3 = async (context, showDescriptions = false, showSchema = false, serverNameFilter) => {
93190
93608
  const agentContext = context.services.agentContext;
93191
93609
  const config = agentContext?.config;
93192
93610
  if (!config) {
@@ -93205,14 +93623,24 @@ var listAction3 = async (context, showDescriptions = false, showSchema = false)
93205
93623
  content: "Could not retrieve tool registry."
93206
93624
  };
93207
93625
  }
93208
- const mcpServers = config.getMcpClientManager()?.getMcpServers() || {};
93209
- const serverNames = Object.keys(mcpServers);
93626
+ let mcpServers = config.getMcpClientManager()?.getMcpServers() || {};
93210
93627
  const blockedMcpServers = config.getMcpClientManager()?.getBlockedMcpServers() || [];
93628
+ if (serverNameFilter) {
93629
+ const filter = serverNameFilter.trim().toLowerCase();
93630
+ if (filter) {
93631
+ mcpServers = Object.fromEntries(
93632
+ Object.entries(mcpServers).filter(
93633
+ ([name]) => name.toLowerCase().includes(filter) || normalizeServerId(name).includes(filter)
93634
+ )
93635
+ );
93636
+ }
93637
+ }
93638
+ const serverNames = Object.keys(mcpServers);
93211
93639
  const connectingServers = serverNames.filter(
93212
- (name) => getMCPServerStatus(name) === MCPServerStatus.CONNECTING
93640
+ (name) => getMCPServerStatus(name) === "connecting" /* CONNECTING */
93213
93641
  );
93214
93642
  const discoveryState = getMCPDiscoveryState();
93215
- const discoveryInProgress = discoveryState === MCPDiscoveryState.IN_PROGRESS || connectingServers.length > 0;
93643
+ const discoveryInProgress = discoveryState === "in_progress" /* IN_PROGRESS */ || connectingServers.length > 0;
93216
93644
  const allTools = toolRegistry.getAllTools();
93217
93645
  const mcpTools = allTools.filter((tool) => tool instanceof DiscoveredMCPTool);
93218
93646
  const promptRegistry = config.getPromptRegistry();
@@ -93293,7 +93721,7 @@ var listCommand2 = {
93293
93721
  description: "List configured MCP servers and tools",
93294
93722
  kind: "built-in" /* BUILT_IN */,
93295
93723
  autoExecute: true,
93296
- action: (context) => listAction3(context)
93724
+ action: (context, args) => listAction3(context, false, false, args)
93297
93725
  };
93298
93726
  var descCommand = {
93299
93727
  name: "desc",
@@ -93301,14 +93729,14 @@ var descCommand = {
93301
93729
  description: "List configured MCP servers and tools with descriptions",
93302
93730
  kind: "built-in" /* BUILT_IN */,
93303
93731
  autoExecute: true,
93304
- action: (context) => listAction3(context, true)
93732
+ action: (context, args) => listAction3(context, true, false, args)
93305
93733
  };
93306
93734
  var schemaCommand = {
93307
93735
  name: "schema",
93308
93736
  description: "List configured MCP servers and tools with descriptions and schemas",
93309
93737
  kind: "built-in" /* BUILT_IN */,
93310
93738
  autoExecute: true,
93311
- action: (context) => listAction3(context, true, true)
93739
+ action: (context, args) => listAction3(context, true, true, args)
93312
93740
  };
93313
93741
  var reloadCommand2 = {
93314
93742
  name: "reload",
@@ -93316,6 +93744,7 @@ var reloadCommand2 = {
93316
93744
  description: "Reloads MCP servers",
93317
93745
  kind: "built-in" /* BUILT_IN */,
93318
93746
  autoExecute: true,
93747
+ takesArgs: false,
93319
93748
  action: async (context) => {
93320
93749
  const agentContext = context.services.agentContext;
93321
93750
  const config = agentContext?.config;
@@ -93476,7 +93905,16 @@ var mcpCommand = {
93476
93905
  enableCommand4,
93477
93906
  disableCommand4
93478
93907
  ],
93479
- action: async (context) => listAction3(context)
93908
+ action: async (context, args) => {
93909
+ if (args) {
93910
+ const parsed = parseSlashCommand(`/${args}`, mcpCommand.subCommands);
93911
+ if (parsed.commandToExecute?.action) {
93912
+ return parsed.commandToExecute.action(context, parsed.args);
93913
+ }
93914
+ return listAction3(context, false, false, args);
93915
+ }
93916
+ return listAction3(context);
93917
+ }
93480
93918
  };
93481
93919
 
93482
93920
  // packages/cli/src/ui/commands/memoryCommand.ts
@@ -93636,7 +94074,7 @@ var modelCommand = {
93636
94074
  };
93637
94075
 
93638
94076
  // packages/cli/src/ui/components/triage/TriageDuplicates.tsx
93639
- var import_react65 = __toESM(require_react(), 1);
94077
+ var import_react66 = __toESM(require_react(), 1);
93640
94078
  var import_jsx_runtime28 = __toESM(require_jsx_runtime(), 1);
93641
94079
  var VISIBLE_LINES_COLLAPSED = 6;
93642
94080
  var VISIBLE_LINES_EXPANDED = 20;
@@ -93662,7 +94100,7 @@ var TriageDuplicates = ({
93662
94100
  initialLimit = 50
93663
94101
  }) => {
93664
94102
  const keyMatchers = useKeyMatchers();
93665
- const [state, setState] = (0, import_react65.useState)({
94103
+ const [state, setState] = (0, import_react66.useState)({
93666
94104
  status: "loading",
93667
94105
  issues: [],
93668
94106
  currentIndex: 0,
@@ -93670,18 +94108,18 @@ var TriageDuplicates = ({
93670
94108
  analyzingIds: /* @__PURE__ */ new Set(),
93671
94109
  message: "Fetching issues..."
93672
94110
  });
93673
- const [focusSection, setFocusSection] = (0, import_react65.useState)("target");
93674
- const [selectedCandidateIndex, setSelectedCandidateIndex] = (0, import_react65.useState)(0);
93675
- const [targetExpanded, setTargetExpanded] = (0, import_react65.useState)(false);
93676
- const [targetScrollOffset, setTargetScrollOffset] = (0, import_react65.useState)(0);
93677
- const [candidateScrollOffset, setCandidateScrollOffset] = (0, import_react65.useState)(0);
93678
- const [inputAction, setInputAction] = (0, import_react65.useState)("");
93679
- const [processedHistory, setProcessedHistory] = (0, import_react65.useState)(
94111
+ const [focusSection, setFocusSection] = (0, import_react66.useState)("target");
94112
+ const [selectedCandidateIndex, setSelectedCandidateIndex] = (0, import_react66.useState)(0);
94113
+ const [targetExpanded, setTargetExpanded] = (0, import_react66.useState)(false);
94114
+ const [targetScrollOffset, setTargetScrollOffset] = (0, import_react66.useState)(0);
94115
+ const [candidateScrollOffset, setCandidateScrollOffset] = (0, import_react66.useState)(0);
94116
+ const [inputAction, setInputAction] = (0, import_react66.useState)("");
94117
+ const [processedHistory, setProcessedHistory] = (0, import_react66.useState)(
93680
94118
  []
93681
94119
  );
93682
- const [showHistory, setShowHistory] = (0, import_react65.useState)(false);
93683
- const [candidateListScrollOffset, setCandidateListScrollOffset] = (0, import_react65.useState)(0);
93684
- (0, import_react65.useEffect)(() => {
94120
+ const [showHistory, setShowHistory] = (0, import_react66.useState)(false);
94121
+ const [candidateListScrollOffset, setCandidateListScrollOffset] = (0, import_react66.useState)(0);
94122
+ (0, import_react66.useEffect)(() => {
93685
94123
  if (selectedCandidateIndex < candidateListScrollOffset) {
93686
94124
  setCandidateListScrollOffset(selectedCandidateIndex);
93687
94125
  } else if (selectedCandidateIndex >= candidateListScrollOffset + VISIBLE_CANDIDATES) {
@@ -93708,7 +94146,7 @@ var TriageDuplicates = ({
93708
94146
  return null;
93709
94147
  }
93710
94148
  };
93711
- const analyzeIssue = (0, import_react65.useCallback)(
94149
+ const analyzeIssue = (0, import_react66.useCallback)(
93712
94150
  async (issue) => {
93713
94151
  const dupComment = issue.comments.find(
93714
94152
  (c) => c.body.includes("Found possible duplicate issues:")
@@ -93807,7 +94245,7 @@ Return a JSON object with:
93807
94245
  },
93808
94246
  abortSignal: new AbortController().signal,
93809
94247
  promptId: "triage-duplicates",
93810
- role: LlmRole.UTILITY_TOOL
94248
+ role: "utility_tool" /* UTILITY_TOOL */
93811
94249
  });
93812
94250
  const rec = response;
93813
94251
  let canonical;
@@ -93849,7 +94287,7 @@ Return a JSON object with:
93849
94287
  },
93850
94288
  [config]
93851
94289
  );
93852
- (0, import_react65.useEffect)(() => {
94290
+ (0, import_react66.useEffect)(() => {
93853
94291
  if (state.issues.length === 0) return;
93854
94292
  const analyzeNext = async () => {
93855
94293
  const issuesToAnalyze = state.issues.slice(
@@ -93898,7 +94336,7 @@ Return a JSON object with:
93898
94336
  state.analyzingIds,
93899
94337
  analyzeIssue
93900
94338
  ]);
93901
- (0, import_react65.useEffect)(() => {
94339
+ (0, import_react66.useEffect)(() => {
93902
94340
  const issue = state.issues[state.currentIndex];
93903
94341
  if (!issue) return;
93904
94342
  const analysis = state.analysisCache.get(issue.number);
@@ -93934,7 +94372,7 @@ Return a JSON object with:
93934
94372
  state.analysisCache,
93935
94373
  state.analyzingIds
93936
94374
  ]);
93937
- const fetchIssues = (0, import_react65.useCallback)(async (limit) => {
94375
+ const fetchIssues = (0, import_react66.useCallback)(async (limit) => {
93938
94376
  try {
93939
94377
  const { stdout } = await spawnAsync("gh", [
93940
94378
  "issue",
@@ -93974,10 +94412,10 @@ Return a JSON object with:
93974
94412
  }));
93975
94413
  }
93976
94414
  }, []);
93977
- (0, import_react65.useEffect)(() => {
94415
+ (0, import_react66.useEffect)(() => {
93978
94416
  void fetchIssues(initialLimit);
93979
94417
  }, [fetchIssues, initialLimit]);
93980
- const handleNext = (0, import_react65.useCallback)(() => {
94418
+ const handleNext = (0, import_react66.useCallback)(() => {
93981
94419
  const nextIndex = state.currentIndex + 1;
93982
94420
  if (nextIndex < state.issues.length) {
93983
94421
  setFocusSection("target");
@@ -94485,7 +94923,7 @@ Return a JSON object with:
94485
94923
  };
94486
94924
 
94487
94925
  // packages/cli/src/ui/components/triage/TriageIssues.tsx
94488
- var import_react66 = __toESM(require_react(), 1);
94926
+ var import_react67 = __toESM(require_react(), 1);
94489
94927
  var import_jsx_runtime29 = __toESM(require_jsx_runtime(), 1);
94490
94928
  var VISIBLE_LINES_COLLAPSED2 = 8;
94491
94929
  var VISIBLE_LINES_EXPANDED2 = 20;
@@ -94504,7 +94942,7 @@ var TriageIssues = ({
94504
94942
  until
94505
94943
  }) => {
94506
94944
  const keyMatchers = useKeyMatchers();
94507
- const [state, setState] = (0, import_react66.useState)({
94945
+ const [state, setState] = (0, import_react67.useState)({
94508
94946
  status: "loading",
94509
94947
  issues: [],
94510
94948
  currentIndex: 0,
@@ -94512,15 +94950,15 @@ var TriageIssues = ({
94512
94950
  analyzingIds: /* @__PURE__ */ new Set(),
94513
94951
  message: "Fetching issues..."
94514
94952
  });
94515
- const [targetExpanded, setTargetExpanded] = (0, import_react66.useState)(false);
94516
- const [targetScrollOffset, setTargetScrollOffset] = (0, import_react66.useState)(0);
94517
- const [isEditingComment, setIsEditingComment] = (0, import_react66.useState)(false);
94518
- const [processedHistory, setProcessedHistory] = (0, import_react66.useState)(
94953
+ const [targetExpanded, setTargetExpanded] = (0, import_react67.useState)(false);
94954
+ const [targetScrollOffset, setTargetScrollOffset] = (0, import_react67.useState)(0);
94955
+ const [isEditingComment, setIsEditingComment] = (0, import_react67.useState)(false);
94956
+ const [processedHistory, setProcessedHistory] = (0, import_react67.useState)(
94519
94957
  []
94520
94958
  );
94521
- const [showHistory, setShowHistory] = (0, import_react66.useState)(false);
94522
- const abortControllerRef = (0, import_react66.useRef)(new AbortController());
94523
- (0, import_react66.useEffect)(
94959
+ const [showHistory, setShowHistory] = (0, import_react67.useState)(false);
94960
+ const abortControllerRef = (0, import_react67.useRef)(new AbortController());
94961
+ (0, import_react67.useEffect)(
94524
94962
  () => () => {
94525
94963
  abortControllerRef.current.abort();
94526
94964
  },
@@ -94532,12 +94970,12 @@ var TriageIssues = ({
94532
94970
  });
94533
94971
  const currentIssue = state.issues[state.currentIndex];
94534
94972
  const analysis = currentIssue ? state.analysisCache.get(currentIssue.number) : void 0;
94535
- (0, import_react66.useEffect)(() => {
94973
+ (0, import_react67.useEffect)(() => {
94536
94974
  if (analysis?.suggested_comment && !isEditingComment) {
94537
94975
  commentBuffer.setText(analysis.suggested_comment);
94538
94976
  }
94539
94977
  }, [analysis, commentBuffer, isEditingComment]);
94540
- const fetchIssues = (0, import_react66.useCallback)(
94978
+ const fetchIssues = (0, import_react67.useCallback)(
94541
94979
  async (limit) => {
94542
94980
  try {
94543
94981
  const searchParts = [
@@ -94585,10 +95023,10 @@ var TriageIssues = ({
94585
95023
  },
94586
95024
  [until]
94587
95025
  );
94588
- (0, import_react66.useEffect)(() => {
95026
+ (0, import_react67.useEffect)(() => {
94589
95027
  void fetchIssues(initialLimit);
94590
95028
  }, [fetchIssues, initialLimit]);
94591
- const analyzeIssue = (0, import_react66.useCallback)(
95029
+ const analyzeIssue = (0, import_react67.useCallback)(
94592
95030
  async (issue) => {
94593
95031
  const client = config.getBaseLlmClient();
94594
95032
  const prompt = `
@@ -94641,13 +95079,13 @@ Return a JSON object with:
94641
95079
  },
94642
95080
  abortSignal: abortControllerRef.current.signal,
94643
95081
  promptId: "triage-issues",
94644
- role: LlmRole.UTILITY_TOOL
95082
+ role: "utility_tool" /* UTILITY_TOOL */
94645
95083
  });
94646
95084
  return response;
94647
95085
  },
94648
95086
  [config]
94649
95087
  );
94650
- (0, import_react66.useEffect)(() => {
95088
+ (0, import_react67.useEffect)(() => {
94651
95089
  if (state.issues.length === 0) return;
94652
95090
  const analyzeNext = async () => {
94653
95091
  const issuesToAnalyze = state.issues.slice(
@@ -94694,7 +95132,7 @@ Return a JSON object with:
94694
95132
  state.analyzingIds,
94695
95133
  analyzeIssue
94696
95134
  ]);
94697
- const handleNext = (0, import_react66.useCallback)(() => {
95135
+ const handleNext = (0, import_react67.useCallback)(() => {
94698
95136
  const nextIndex = state.currentIndex + 1;
94699
95137
  if (nextIndex < state.issues.length) {
94700
95138
  setTargetExpanded(false);
@@ -94709,7 +95147,7 @@ Return a JSON object with:
94709
95147
  }));
94710
95148
  }
94711
95149
  }, [state.currentIndex, state.issues.length]);
94712
- (0, import_react66.useEffect)(() => {
95150
+ (0, import_react67.useEffect)(() => {
94713
95151
  if (currentIssue && state.analysisCache.has(currentIssue.number)) {
94714
95152
  const res = state.analysisCache.get(currentIssue.number);
94715
95153
  if (res.recommendation === "keep") {
@@ -95215,10 +95653,16 @@ var planCommand = {
95215
95653
  return;
95216
95654
  }
95217
95655
  const previousApprovalMode = config.getApprovalMode();
95218
- config.setApprovalMode(ApprovalMode.PLAN);
95219
- if (previousApprovalMode !== ApprovalMode.PLAN) {
95656
+ config.setApprovalMode("plan" /* PLAN */);
95657
+ if (previousApprovalMode !== "plan" /* PLAN */) {
95220
95658
  coreEvents.emitFeedback("info", "Switched to Plan Mode.");
95221
95659
  }
95660
+ if (context.invocation?.args) {
95661
+ return {
95662
+ type: "submit_prompt",
95663
+ content: context.invocation.args
95664
+ };
95665
+ }
95222
95666
  const approvedPlanPath = config.getApprovedPlanPath();
95223
95667
  if (!approvedPlanPath) {
95224
95668
  return;
@@ -95235,12 +95679,14 @@ var planCommand = {
95235
95679
  type: "gemini" /* GEMINI */,
95236
95680
  text: partToString(content.llmContent)
95237
95681
  });
95682
+ return;
95238
95683
  } catch (error) {
95239
95684
  coreEvents.emitFeedback(
95240
95685
  "error",
95241
95686
  `Failed to read approved plan at ${approvedPlanPath}: ${error}`,
95242
95687
  error
95243
95688
  );
95689
+ return;
95244
95690
  }
95245
95691
  },
95246
95692
  subCommands: [
@@ -95249,6 +95695,7 @@ var planCommand = {
95249
95695
  description: "Copy the currently approved plan to your clipboard",
95250
95696
  kind: "built-in" /* BUILT_IN */,
95251
95697
  autoExecute: true,
95698
+ takesArgs: false,
95252
95699
  action: copyAction
95253
95700
  }
95254
95701
  ]
@@ -95266,10 +95713,10 @@ var categorizeRulesByMode = (rules) => {
95266
95713
  rules.forEach((rule) => {
95267
95714
  const modes = rule.modes?.length ? rule.modes : ALL_MODES;
95268
95715
  const modeSet = new Set(modes);
95269
- if (modeSet.has(ApprovalMode.DEFAULT)) result.normal.push(rule);
95270
- if (modeSet.has(ApprovalMode.AUTO_EDIT)) result.autoEdit.push(rule);
95271
- if (modeSet.has(ApprovalMode.YOLO)) result.yolo.push(rule);
95272
- if (modeSet.has(ApprovalMode.PLAN)) result.plan.push(rule);
95716
+ if (modeSet.has("default" /* DEFAULT */)) result.normal.push(rule);
95717
+ if (modeSet.has("autoEdit" /* AUTO_EDIT */)) result.autoEdit.push(rule);
95718
+ if (modeSet.has("yolo" /* YOLO */)) result.yolo.push(rule);
95719
+ if (modeSet.has("plan" /* PLAN */)) result.plan.push(rule);
95273
95720
  });
95274
95721
  return result;
95275
95722
  };
@@ -96224,7 +96671,15 @@ var skillsCommand = {
96224
96671
  action: reloadAction2
96225
96672
  }
96226
96673
  ],
96227
- action: listAction4
96674
+ action: async (context, args) => {
96675
+ if (args) {
96676
+ const parsed = parseSlashCommand(`/${args}`, skillsCommand.subCommands);
96677
+ if (parsed.commandToExecute?.action) {
96678
+ return parsed.commandToExecute.action(context, parsed.args);
96679
+ }
96680
+ }
96681
+ return listAction4(context, args);
96682
+ }
96228
96683
  };
96229
96684
 
96230
96685
  // packages/cli/src/ui/commands/settingsCommand.ts
@@ -96240,15 +96695,15 @@ var settingsCommand = {
96240
96695
  })
96241
96696
  };
96242
96697
 
96243
- // packages/cli/src/ui/commands/shellsCommand.ts
96244
- var shellsCommand = {
96245
- name: "shells",
96246
- altNames: ["bashes"],
96698
+ // packages/cli/src/ui/commands/tasksCommand.ts
96699
+ var tasksCommand = {
96700
+ name: "tasks",
96701
+ altNames: ["bg", "background"],
96247
96702
  kind: "built-in" /* BUILT_IN */,
96248
- description: "Toggle background shells view",
96703
+ description: "Toggle background tasks view",
96249
96704
  autoExecute: true,
96250
96705
  action: async (context) => {
96251
- context.ui.toggleBackgroundShell();
96706
+ context.ui.toggleBackgroundTasks();
96252
96707
  }
96253
96708
  };
96254
96709
 
@@ -96606,7 +97061,7 @@ var upgradeCommand = {
96606
97061
  action: async (context) => {
96607
97062
  const config = context.services.agentContext?.config;
96608
97063
  const authType = config?.getContentGeneratorConfig()?.authType;
96609
- if (authType !== AuthType.LOGIN_WITH_GOOGLE) {
97064
+ if (authType !== "oauth-personal" /* LOGIN_WITH_GOOGLE */) {
96610
97065
  return {
96611
97066
  type: "message",
96612
97067
  messageType: "error",
@@ -96772,11 +97227,11 @@ var BuiltinCommandLoader = class {
96772
97227
  }
96773
97228
  ] : [skillsCommand] : [],
96774
97229
  settingsCommand,
96775
- shellsCommand,
97230
+ tasksCommand,
96776
97231
  vimCommand,
96777
97232
  setupGithubCommand,
96778
97233
  terminalSetupCommand,
96779
- ...this.config?.getContentGeneratorConfig()?.authType === AuthType.LOGIN_WITH_GOOGLE ? [upgradeCommand] : []
97234
+ ...this.config?.getContentGeneratorConfig()?.authType === "oauth-personal" /* LOGIN_WITH_GOOGLE */ ? [upgradeCommand] : []
96780
97235
  ];
96781
97236
  handle?.end();
96782
97237
  return allDefinitions.filter((cmd) => cmd !== null);
@@ -96919,11 +97374,11 @@ var ShellProcessor = class {
96919
97374
  },
96920
97375
  void 0
96921
97376
  );
96922
- if (decision === PolicyDecision.DENY) {
97377
+ if (decision === "deny" /* DENY */) {
96923
97378
  throw new Error(
96924
97379
  `${this.commandName} cannot be run. Blocked command: "${command}". Reason: Blocked by policy.`
96925
97380
  );
96926
- } else if (decision === PolicyDecision.ASK_USER) {
97381
+ } else if (decision === "ask_user" /* ASK_USER */) {
96927
97382
  commandsToConfirm.add(command);
96928
97383
  }
96929
97384
  }
@@ -97533,6 +97988,10 @@ export {
97533
97988
  ACTIVE_SHELL_MAX_LINES,
97534
97989
  COMPLETED_SHELL_MAX_LINES,
97535
97990
  SUBAGENT_MAX_LINES,
97991
+ SKILLS_DOCS_URL,
97992
+ COMPACT_TOOL_SUBVIEW_MAX_LINES,
97993
+ MAX_SHELL_OUTPUT_SIZE,
97994
+ SHELL_OUTPUT_TRUNCATION_BUFFER,
97536
97995
  require_tinygradient,
97537
97996
  INK_SUPPORTED_NAMES,
97538
97997
  INK_NAME_TO_HEX_MAP,
@@ -97558,6 +98017,7 @@ export {
97558
98017
  escapeAnsiCtrlCodes,
97559
98018
  require_react,
97560
98019
  mapCoreStatusToDisplayStatus,
98020
+ isTodoList,
97561
98021
  RESUME_LATEST,
97562
98022
  SessionError,
97563
98023
  cleanMessage,
@@ -97663,7 +98123,6 @@ export {
97663
98123
  parseMouseEvent,
97664
98124
  isIncompleteMouseSequence,
97665
98125
  useFocus,
97666
- appEvents,
97667
98126
  SettingsContext,
97668
98127
  useSettings,
97669
98128
  useSettingsStore,