cline 1.0.0-nightly.12 → 1.0.0-nightly.14

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.
package/bin/cline CHANGED
Binary file
Binary file
Binary file
package/bin/cline-host CHANGED
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/bin/cline-test ADDED
Binary file
package/cline-core.js CHANGED
@@ -49527,7 +49527,10 @@ function createBaseSettings() {
49527
49527
  actModeVercelAiGatewayModelId: void 0,
49528
49528
  actModeVercelAiGatewayModelInfo: void 0,
49529
49529
  actModeOcaModelId: void 0,
49530
- actModeOcaModelInfo: void 0
49530
+ actModeOcaModelInfo: void 0,
49531
+ maxConsecutiveMistakes: void 0,
49532
+ subagentsEnabled: void 0,
49533
+ subagentTerminalOutputLineLimit: void 0
49531
49534
  };
49532
49535
  }
49533
49536
  function createBaseDictationSettings() {
@@ -49623,7 +49626,10 @@ function createBaseUpdateSettingsRequest() {
49623
49626
  autoCondenseThreshold: void 0,
49624
49627
  multiRootEnabled: void 0,
49625
49628
  hooksEnabled: void 0,
49626
- vscodeTerminalExecutionMode: void 0
49629
+ vscodeTerminalExecutionMode: void 0,
49630
+ maxConsecutiveMistakes: void 0,
49631
+ subagentsEnabled: void 0,
49632
+ subagentTerminalOutputLineLimit: void 0
49627
49633
  };
49628
49634
  }
49629
49635
  function createBaseApiConfiguration() {
@@ -51039,6 +51045,15 @@ var init_state = __esm({
51039
51045
  if (message.actModeOcaModelInfo !== void 0) {
51040
51046
  OcaModelInfo.encode(message.actModeOcaModelInfo, writer.uint32(986).fork()).join();
51041
51047
  }
51048
+ if (message.maxConsecutiveMistakes !== void 0) {
51049
+ writer.uint32(992).int32(message.maxConsecutiveMistakes);
51050
+ }
51051
+ if (message.subagentsEnabled !== void 0) {
51052
+ writer.uint32(1e3).bool(message.subagentsEnabled);
51053
+ }
51054
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
51055
+ writer.uint32(1008).int32(message.subagentTerminalOutputLineLimit);
51056
+ }
51042
51057
  return writer;
51043
51058
  },
51044
51059
  decode(input, length) {
@@ -51888,6 +51903,27 @@ var init_state = __esm({
51888
51903
  message.actModeOcaModelInfo = OcaModelInfo.decode(reader, reader.uint32());
51889
51904
  continue;
51890
51905
  }
51906
+ case 124: {
51907
+ if (tag !== 992) {
51908
+ break;
51909
+ }
51910
+ message.maxConsecutiveMistakes = reader.int32();
51911
+ continue;
51912
+ }
51913
+ case 125: {
51914
+ if (tag !== 1e3) {
51915
+ break;
51916
+ }
51917
+ message.subagentsEnabled = reader.bool();
51918
+ continue;
51919
+ }
51920
+ case 126: {
51921
+ if (tag !== 1008) {
51922
+ break;
51923
+ }
51924
+ message.subagentTerminalOutputLineLimit = reader.int32();
51925
+ continue;
51926
+ }
51891
51927
  }
51892
51928
  if ((tag & 7) === 4 || tag === 0) {
51893
51929
  break;
@@ -52017,7 +52053,10 @@ var init_state = __esm({
52017
52053
  actModeVercelAiGatewayModelId: isSet13(object2.actModeVercelAiGatewayModelId) ? globalThis.String(object2.actModeVercelAiGatewayModelId) : void 0,
52018
52054
  actModeVercelAiGatewayModelInfo: isSet13(object2.actModeVercelAiGatewayModelInfo) ? OpenRouterModelInfo.fromJSON(object2.actModeVercelAiGatewayModelInfo) : void 0,
52019
52055
  actModeOcaModelId: isSet13(object2.actModeOcaModelId) ? globalThis.String(object2.actModeOcaModelId) : void 0,
52020
- actModeOcaModelInfo: isSet13(object2.actModeOcaModelInfo) ? OcaModelInfo.fromJSON(object2.actModeOcaModelInfo) : void 0
52056
+ actModeOcaModelInfo: isSet13(object2.actModeOcaModelInfo) ? OcaModelInfo.fromJSON(object2.actModeOcaModelInfo) : void 0,
52057
+ maxConsecutiveMistakes: isSet13(object2.maxConsecutiveMistakes) ? globalThis.Number(object2.maxConsecutiveMistakes) : void 0,
52058
+ subagentsEnabled: isSet13(object2.subagentsEnabled) ? globalThis.Boolean(object2.subagentsEnabled) : void 0,
52059
+ subagentTerminalOutputLineLimit: isSet13(object2.subagentTerminalOutputLineLimit) ? globalThis.Number(object2.subagentTerminalOutputLineLimit) : void 0
52021
52060
  };
52022
52061
  },
52023
52062
  toJSON(message) {
@@ -52382,6 +52421,15 @@ var init_state = __esm({
52382
52421
  if (message.actModeOcaModelInfo !== void 0) {
52383
52422
  obj2.actModeOcaModelInfo = OcaModelInfo.toJSON(message.actModeOcaModelInfo);
52384
52423
  }
52424
+ if (message.maxConsecutiveMistakes !== void 0) {
52425
+ obj2.maxConsecutiveMistakes = Math.round(message.maxConsecutiveMistakes);
52426
+ }
52427
+ if (message.subagentsEnabled !== void 0) {
52428
+ obj2.subagentsEnabled = message.subagentsEnabled;
52429
+ }
52430
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
52431
+ obj2.subagentTerminalOutputLineLimit = Math.round(message.subagentTerminalOutputLineLimit);
52432
+ }
52385
52433
  return obj2;
52386
52434
  },
52387
52435
  create(base) {
@@ -52509,6 +52557,9 @@ var init_state = __esm({
52509
52557
  message.actModeVercelAiGatewayModelInfo = object2.actModeVercelAiGatewayModelInfo !== void 0 && object2.actModeVercelAiGatewayModelInfo !== null ? OpenRouterModelInfo.fromPartial(object2.actModeVercelAiGatewayModelInfo) : void 0;
52510
52558
  message.actModeOcaModelId = object2.actModeOcaModelId ?? void 0;
52511
52559
  message.actModeOcaModelInfo = object2.actModeOcaModelInfo !== void 0 && object2.actModeOcaModelInfo !== null ? OcaModelInfo.fromPartial(object2.actModeOcaModelInfo) : void 0;
52560
+ message.maxConsecutiveMistakes = object2.maxConsecutiveMistakes ?? void 0;
52561
+ message.subagentsEnabled = object2.subagentsEnabled ?? void 0;
52562
+ message.subagentTerminalOutputLineLimit = object2.subagentTerminalOutputLineLimit ?? void 0;
52512
52563
  return message;
52513
52564
  }
52514
52565
  };
@@ -53800,6 +53851,15 @@ var init_state = __esm({
53800
53851
  if (message.vscodeTerminalExecutionMode !== void 0) {
53801
53852
  writer.uint32(218).string(message.vscodeTerminalExecutionMode);
53802
53853
  }
53854
+ if (message.maxConsecutiveMistakes !== void 0) {
53855
+ writer.uint32(224).int32(message.maxConsecutiveMistakes);
53856
+ }
53857
+ if (message.subagentsEnabled !== void 0) {
53858
+ writer.uint32(232).bool(message.subagentsEnabled);
53859
+ }
53860
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
53861
+ writer.uint32(240).int32(message.subagentTerminalOutputLineLimit);
53862
+ }
53803
53863
  return writer;
53804
53864
  },
53805
53865
  decode(input, length) {
@@ -53991,6 +54051,27 @@ var init_state = __esm({
53991
54051
  message.vscodeTerminalExecutionMode = reader.string();
53992
54052
  continue;
53993
54053
  }
54054
+ case 28: {
54055
+ if (tag !== 224) {
54056
+ break;
54057
+ }
54058
+ message.maxConsecutiveMistakes = reader.int32();
54059
+ continue;
54060
+ }
54061
+ case 29: {
54062
+ if (tag !== 232) {
54063
+ break;
54064
+ }
54065
+ message.subagentsEnabled = reader.bool();
54066
+ continue;
54067
+ }
54068
+ case 30: {
54069
+ if (tag !== 240) {
54070
+ break;
54071
+ }
54072
+ message.subagentTerminalOutputLineLimit = reader.int32();
54073
+ continue;
54074
+ }
53994
54075
  }
53995
54076
  if ((tag & 7) === 4 || tag === 0) {
53996
54077
  break;
@@ -54026,7 +54107,10 @@ var init_state = __esm({
54026
54107
  autoCondenseThreshold: isSet13(object2.autoCondenseThreshold) ? globalThis.Number(object2.autoCondenseThreshold) : void 0,
54027
54108
  multiRootEnabled: isSet13(object2.multiRootEnabled) ? globalThis.Boolean(object2.multiRootEnabled) : void 0,
54028
54109
  hooksEnabled: isSet13(object2.hooksEnabled) ? globalThis.Boolean(object2.hooksEnabled) : void 0,
54029
- vscodeTerminalExecutionMode: isSet13(object2.vscodeTerminalExecutionMode) ? globalThis.String(object2.vscodeTerminalExecutionMode) : void 0
54110
+ vscodeTerminalExecutionMode: isSet13(object2.vscodeTerminalExecutionMode) ? globalThis.String(object2.vscodeTerminalExecutionMode) : void 0,
54111
+ maxConsecutiveMistakes: isSet13(object2.maxConsecutiveMistakes) ? globalThis.Number(object2.maxConsecutiveMistakes) : void 0,
54112
+ subagentsEnabled: isSet13(object2.subagentsEnabled) ? globalThis.Boolean(object2.subagentsEnabled) : void 0,
54113
+ subagentTerminalOutputLineLimit: isSet13(object2.subagentTerminalOutputLineLimit) ? globalThis.Number(object2.subagentTerminalOutputLineLimit) : void 0
54030
54114
  };
54031
54115
  },
54032
54116
  toJSON(message) {
@@ -54109,6 +54193,15 @@ var init_state = __esm({
54109
54193
  if (message.vscodeTerminalExecutionMode !== void 0) {
54110
54194
  obj2.vscodeTerminalExecutionMode = message.vscodeTerminalExecutionMode;
54111
54195
  }
54196
+ if (message.maxConsecutiveMistakes !== void 0) {
54197
+ obj2.maxConsecutiveMistakes = Math.round(message.maxConsecutiveMistakes);
54198
+ }
54199
+ if (message.subagentsEnabled !== void 0) {
54200
+ obj2.subagentsEnabled = message.subagentsEnabled;
54201
+ }
54202
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
54203
+ obj2.subagentTerminalOutputLineLimit = Math.round(message.subagentTerminalOutputLineLimit);
54204
+ }
54112
54205
  return obj2;
54113
54206
  },
54114
54207
  create(base) {
@@ -54142,6 +54235,9 @@ var init_state = __esm({
54142
54235
  message.multiRootEnabled = object2.multiRootEnabled ?? void 0;
54143
54236
  message.hooksEnabled = object2.hooksEnabled ?? void 0;
54144
54237
  message.vscodeTerminalExecutionMode = object2.vscodeTerminalExecutionMode ?? void 0;
54238
+ message.maxConsecutiveMistakes = object2.maxConsecutiveMistakes ?? void 0;
54239
+ message.subagentsEnabled = object2.subagentsEnabled ?? void 0;
54240
+ message.subagentTerminalOutputLineLimit = object2.subagentTerminalOutputLineLimit ?? void 0;
54145
54241
  return message;
54146
54242
  }
54147
54243
  };
@@ -456475,6 +456571,16 @@ var init_api = __esm({
456475
456571
  cacheReadsPrice: 0.3,
456476
456572
  tiers: CLAUDE_SONNET_1M_TIERS
456477
456573
  },
456574
+ "claude-haiku-4-5-20251001": {
456575
+ maxTokens: 8192,
456576
+ contextWindow: 2e5,
456577
+ supportsImages: true,
456578
+ supportsPromptCache: true,
456579
+ inputPrice: 1,
456580
+ outputPrice: 5,
456581
+ cacheWritesPrice: 1.25,
456582
+ cacheReadsPrice: 0.1
456583
+ },
456478
456584
  "claude-sonnet-4-20250514": {
456479
456585
  maxTokens: 8192,
456480
456586
  contextWindow: 2e5,
@@ -456583,6 +456689,11 @@ var init_api = __esm({
456583
456689
  supportsImages: false,
456584
456690
  supportsPromptCache: false
456585
456691
  },
456692
+ "claude-haiku-4-5-20251001": {
456693
+ ...anthropicModels["claude-haiku-4-5-20251001"],
456694
+ supportsImages: false,
456695
+ supportsPromptCache: false
456696
+ },
456586
456697
  "claude-sonnet-4-5-20250929": {
456587
456698
  ...anthropicModels["claude-sonnet-4-5-20250929"],
456588
456699
  supportsImages: false,
@@ -456639,6 +456750,16 @@ var init_api = __esm({
456639
456750
  cacheReadsPrice: 0.3,
456640
456751
  tiers: CLAUDE_SONNET_1M_TIERS
456641
456752
  },
456753
+ "anthropic.claude-haiku-4-5-20251001-v1:0": {
456754
+ maxTokens: 8192,
456755
+ contextWindow: 2e5,
456756
+ supportsImages: true,
456757
+ supportsPromptCache: true,
456758
+ inputPrice: 1,
456759
+ outputPrice: 5,
456760
+ cacheWritesPrice: 1.25,
456761
+ cacheReadsPrice: 0.1
456762
+ },
456642
456763
  "anthropic.claude-sonnet-4-20250514-v1:0": {
456643
456764
  maxTokens: 8192,
456644
456765
  contextWindow: 2e5,
@@ -456855,6 +456976,16 @@ var init_api = __esm({
456855
456976
  cacheWritesPrice: 3.75,
456856
456977
  cacheReadsPrice: 0.3
456857
456978
  },
456979
+ "claude-haiku-4-5@20251001": {
456980
+ maxTokens: 8192,
456981
+ contextWindow: 2e5,
456982
+ supportsImages: false,
456983
+ supportsPromptCache: true,
456984
+ inputPrice: 1,
456985
+ outputPrice: 5,
456986
+ cacheWritesPrice: 1.25,
456987
+ cacheReadsPrice: 0.1
456988
+ },
456858
456989
  "claude-opus-4-1@20250805": {
456859
456990
  maxTokens: 8192,
456860
456991
  contextWindow: 2e5,
@@ -470122,6 +470253,7 @@ var init_anthropic = __esm({
470122
470253
  const reasoningOn = !!((modelId.includes("3-7") || modelId.includes("4-") || modelId.includes("4-5")) && budget_tokens !== 0);
470123
470254
  switch (modelId) {
470124
470255
  // 'latest' alias does not support cache_control
470256
+ case "claude-haiku-4-5-20251001":
470125
470257
  case "claude-sonnet-4-5-20250929":
470126
470258
  case "claude-sonnet-4-20250514":
470127
470259
  case "claude-3-7-sonnet-20250219":
@@ -507060,7 +507192,7 @@ var name2, version4, publisher;
507060
507192
  var init_package2 = __esm({
507061
507193
  "package.json"() {
507062
507194
  name2 = "claude-dev";
507063
- version4 = "3.32.7";
507195
+ version4 = "3.32.8";
507064
507196
  publisher = "saoudrizwan";
507065
507197
  }
507066
507198
  });
@@ -507681,7 +507813,7 @@ var init_bedrock = __esm({
507681
507813
  * Determines if reasoning should be enabled for Claude models
507682
507814
  */
507683
507815
  shouldEnableReasoning(baseModelId, budgetTokens) {
507684
- return (baseModelId.includes("3-7") || baseModelId.includes("sonnet-4") || baseModelId.includes("opus-4") || baseModelId.includes("sonnet-4-5")) && budgetTokens !== 0;
507816
+ return (baseModelId.includes("3-7") || baseModelId.includes("sonnet-4") || baseModelId.includes("opus-4") || baseModelId.includes("haiku-4-5") || baseModelId.includes("sonnet-4-5")) && budgetTokens !== 0;
507685
507817
  }
507686
507818
  /**
507687
507819
  * Creates a message using Anthropic Claude models through AWS Bedrock Converse API
@@ -510154,7 +510286,7 @@ function isAnthropicModelId(modelId) {
510154
510286
  }
510155
510287
  function isClaude4ModelFamily(id12) {
510156
510288
  const modelId = normalize4(id12);
510157
- return modelId.includes("sonnet-4") || modelId.includes("opus-4") || modelId.includes("4-sonnet") || modelId.includes("4-opus");
510289
+ return modelId.includes("sonnet-4") || modelId.includes("opus-4") || modelId.includes("4-sonnet") || modelId.includes("4-opus") || modelId.includes("haiku-4") || modelId.includes("4-5-haiku") || modelId.includes("4.5-haiku");
510158
510290
  }
510159
510291
  function isGemini2dot5ModelFamily(id12) {
510160
510292
  const modelId = normalize4(id12);
@@ -530145,10 +530277,10 @@ var init_schema2 = __esm({
530145
530277
  });
530146
530278
  OpenAiCompatibleSchema = external_exports.object({
530147
530279
  // A list of the allowed models with their settings
530148
- models: external_exports.array(OpenAiCompatibleModelSchema).default([]),
530280
+ models: external_exports.array(OpenAiCompatibleModelSchema).optional(),
530149
530281
  // OpenAiCompatible specific settings:
530150
530282
  openAiBaseUrl: external_exports.string().optional(),
530151
- openAiHeaders: external_exports.record(external_exports.string(), external_exports.string()).default({}),
530283
+ openAiHeaders: external_exports.record(external_exports.string(), external_exports.string()).optional(),
530152
530284
  azureApiVersion: external_exports.string().optional()
530153
530285
  });
530154
530286
  AwsBedrockModelSchema = external_exports.object({
@@ -530165,7 +530297,7 @@ var init_schema2 = __esm({
530165
530297
  });
530166
530298
  AwsBedrockSettingsSchema = external_exports.object({
530167
530299
  // A list of the allowed models with their settings
530168
- models: external_exports.array(AwsBedrockModelSchema).default([]),
530300
+ models: external_exports.array(AwsBedrockModelSchema).optional(),
530169
530301
  // Custom models
530170
530302
  customModels: external_exports.array(AwsBedrockCustomModelSchema).optional(),
530171
530303
  // AWS Bedrock specific settings:
@@ -530615,6 +530747,8 @@ async function readGlobalStateFromDisk(context3) {
530615
530747
  const terminalReuseEnabled = context3.globalState.get("terminalReuseEnabled");
530616
530748
  const vscodeTerminalExecutionMode = context3.globalState.get("vscodeTerminalExecutionMode");
530617
530749
  const terminalOutputLineLimit = context3.globalState.get("terminalOutputLineLimit");
530750
+ const maxConsecutiveMistakes = context3.globalState.get("maxConsecutiveMistakes");
530751
+ const subagentTerminalOutputLineLimit = context3.globalState.get("subagentTerminalOutputLineLimit");
530618
530752
  const defaultTerminalProfile = context3.globalState.get("defaultTerminalProfile");
530619
530753
  const sapAiCoreBaseUrl = context3.globalState.get("sapAiCoreBaseUrl");
530620
530754
  const sapAiCoreTokenUrl = context3.globalState.get("sapAiCoreTokenUrl");
@@ -530647,6 +530781,7 @@ async function readGlobalStateFromDisk(context3) {
530647
530781
  const openTelemetryLogBatchSize = context3.globalState.get("openTelemetryLogBatchSize");
530648
530782
  const openTelemetryLogBatchTimeout = context3.globalState.get("openTelemetryLogBatchTimeout");
530649
530783
  const openTelemetryLogMaxQueueSize = context3.globalState.get("openTelemetryLogMaxQueueSize");
530784
+ const subagentsEnabled = context3.globalState.get("subagentsEnabled");
530650
530785
  const mode = context3.globalState.get("mode");
530651
530786
  const planModeApiProvider = context3.globalState.get("planModeApiProvider");
530652
530787
  const planModeApiModelId = context3.globalState.get("planModeApiModelId");
@@ -530872,6 +531007,8 @@ async function readGlobalStateFromDisk(context3) {
530872
531007
  terminalReuseEnabled: terminalReuseEnabled ?? true,
530873
531008
  vscodeTerminalExecutionMode: vscodeTerminalExecutionMode ?? "vscodeTerminal",
530874
531009
  terminalOutputLineLimit: terminalOutputLineLimit ?? 500,
531010
+ maxConsecutiveMistakes: maxConsecutiveMistakes ?? 3,
531011
+ subagentTerminalOutputLineLimit: subagentTerminalOutputLineLimit ?? 2e3,
530875
531012
  defaultTerminalProfile: defaultTerminalProfile ?? "default",
530876
531013
  globalWorkflowToggles: globalWorkflowToggles || {},
530877
531014
  qwenCodeOauthPath,
@@ -530880,6 +531017,7 @@ async function readGlobalStateFromDisk(context3) {
530880
531017
  // default to 0.75 if not set
530881
531018
  // Hooks require explicit user opt-in
530882
531019
  hooksEnabled: hooksEnabled ?? false,
531020
+ subagentsEnabled: subagentsEnabled ?? false,
530883
531021
  lastDismissedInfoBannerVersion: lastDismissedInfoBannerVersion ?? 0,
530884
531022
  lastDismissedModelBannerVersion: lastDismissedModelBannerVersion ?? 0,
530885
531023
  // Multi-root workspace support
@@ -531972,6 +532110,16 @@ async function ensureMcpServersDirectoryExists() {
531972
532110
  }
531973
532111
  return mcpServersDir;
531974
532112
  }
532113
+ async function ensureHooksDirectoryExists() {
532114
+ const rulesDir = await ensureRulesDirectoryExists();
532115
+ const clineHooksDir = path17.join(rulesDir, "Hooks");
532116
+ try {
532117
+ await import_promises19.default.mkdir(clineHooksDir, { recursive: true });
532118
+ return clineHooksDir;
532119
+ } catch (_error) {
532120
+ return path17.join(rulesDir, "Hooks");
532121
+ }
532122
+ }
531975
532123
  async function ensureSettingsDirectoryExists() {
531976
532124
  return getGlobalStorageDir("settings");
531977
532125
  }
@@ -532160,6 +532308,20 @@ async function deleteRemoteConfigFromCache(organizationId) {
532160
532308
  console.error("Failed to delete remote config from cache:", error);
532161
532309
  }
532162
532310
  }
532311
+ async function getGlobalHooksDir() {
532312
+ const globalHooksDir = await ensureHooksDirectoryExists();
532313
+ return await isDirectory(globalHooksDir) ? globalHooksDir : void 0;
532314
+ }
532315
+ async function getAllHooksDirs() {
532316
+ const hooksDirs = [];
532317
+ const globalHooksDir = await getGlobalHooksDir();
532318
+ if (globalHooksDir) {
532319
+ hooksDirs.push(globalHooksDir);
532320
+ }
532321
+ const workspaceHooksDirs = await getWorkspaceHooksDirs();
532322
+ hooksDirs.push(...workspaceHooksDirs);
532323
+ return hooksDirs;
532324
+ }
532163
532325
  async function getWorkspaceHooksDirs() {
532164
532326
  const workspaceRootPaths = StateManager.get().getGlobalStateKey("workspaceRoots")?.map((root3) => root3.path) || [];
532165
532327
  return (await Promise.all(
@@ -680105,8 +680267,10 @@ var init_TelemetryService = __esm({
680105
680267
  // Browser telemetry enabled
680106
680268
  ["dictation", true],
680107
680269
  // Dictation telemetry enabled
680108
- ["focus_chain", true]
680270
+ ["focus_chain", true],
680109
680271
  // Focus Chain telemetry enabled
680272
+ ["subagents", true]
680273
+ // CLI Subagents telemetry enabled
680110
680274
  ]);
680111
680275
  // Event constants for tracking user interactions and system events
680112
680276
  static EVENTS = {
@@ -680223,7 +680387,12 @@ var init_TelemetryService = __esm({
680223
680387
  MENTION_FAILED: "task.mention_failed",
680224
680388
  MENTION_SEARCH_RESULTS: "task.mention_search_results",
680225
680389
  // Multi-workspace search pattern tracking
680226
- WORKSPACE_SEARCH_PATTERN: "task.workspace_search_pattern"
680390
+ WORKSPACE_SEARCH_PATTERN: "task.workspace_search_pattern",
680391
+ // CLI Subagents telemetry events
680392
+ SUBAGENT_ENABLED: "task.subagent_enabled",
680393
+ SUBAGENT_DISABLED: "task.subagent_disabled",
680394
+ SUBAGENT_STARTED: "task.subagent_started",
680395
+ SUBAGENT_COMPLETED: "task.subagent_completed"
680227
680396
  },
680228
680397
  // UI interaction events for tracking user engagement
680229
680398
  UI: {
@@ -681321,6 +681490,45 @@ var init_TelemetryService = __esm({
681321
681490
  }
681322
681491
  });
681323
681492
  }
681493
+ // CLI Subagents telemetry methods
681494
+ /**
681495
+ * Records when CLI subagents feature is enabled/disabled by the user
681496
+ * @param enabled Whether subagents was enabled (true) or disabled (false)
681497
+ */
681498
+ captureSubagentToggle(enabled) {
681499
+ if (!this.isCategoryEnabled("subagents")) {
681500
+ return;
681501
+ }
681502
+ this.capture({
681503
+ event: enabled ? _TelemetryService.EVENTS.TASK.SUBAGENT_ENABLED : _TelemetryService.EVENTS.TASK.SUBAGENT_DISABLED,
681504
+ properties: {
681505
+ enabled,
681506
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
681507
+ }
681508
+ });
681509
+ }
681510
+ /**
681511
+ * Records when a CLI subagent is executed
681512
+ * @param ulid Unique identifier for the task
681513
+ * @param durationMs Duration of the subagent execution in milliseconds
681514
+ * @param outputLines Number of lines of output produced by the subagent
681515
+ * @param success Whether the subagent execution was successful
681516
+ */
681517
+ captureSubagentExecution(ulid2, durationMs, outputLines, success) {
681518
+ if (!this.isCategoryEnabled("subagents")) {
681519
+ return;
681520
+ }
681521
+ this.capture({
681522
+ event: success ? _TelemetryService.EVENTS.TASK.SUBAGENT_COMPLETED : _TelemetryService.EVENTS.TASK.SUBAGENT_STARTED,
681523
+ properties: {
681524
+ ulid: ulid2,
681525
+ durationMs,
681526
+ outputLines,
681527
+ success,
681528
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
681529
+ }
681530
+ });
681531
+ }
681324
681532
  /**
681325
681533
  * Clean up resources when the service is disposed
681326
681534
  */
@@ -728864,6 +729072,8 @@ async function refreshOpenRouterModels(controller, _request) {
728864
729072
  modelInfo.cacheWritesPrice = 3.75;
728865
729073
  modelInfo.cacheReadsPrice = 0.3;
728866
729074
  break;
729075
+ case "anthropic/claude-haiku-4.5":
729076
+ case "anthropic/claude-4.5-haiku":
728867
729077
  case "anthropic/claude-3-5-haiku":
728868
729078
  case "anthropic/claude-3-5-haiku:beta":
728869
729079
  case "anthropic/claude-3-5-haiku-20241022":
@@ -731949,6 +732159,15 @@ async function updateSettings(controller, request5) {
731949
732159
  request5.vscodeTerminalExecutionMode === "backgroundExec" ? "backgroundExec" : "vscodeTerminal"
731950
732160
  );
731951
732161
  }
732162
+ if (request5.subagentTerminalOutputLineLimit !== void 0) {
732163
+ controller.stateManager.setGlobalState(
732164
+ "subagentTerminalOutputLineLimit",
732165
+ Number(request5.subagentTerminalOutputLineLimit)
732166
+ );
732167
+ }
732168
+ if (request5.maxConsecutiveMistakes !== void 0) {
732169
+ controller.stateManager.setGlobalState("maxConsecutiveMistakes", Number(request5.maxConsecutiveMistakes));
732170
+ }
731952
732171
  if (request5.strictPlanModeEnabled !== void 0) {
731953
732172
  controller.stateManager.setGlobalState("strictPlanModeEnabled", request5.strictPlanModeEnabled);
731954
732173
  }
@@ -732053,6 +732272,18 @@ async function updateSettings(controller, request5) {
732053
732272
  if (request5.hooksEnabled !== void 0) {
732054
732273
  controller.stateManager.setGlobalState("hooksEnabled", !!request5.hooksEnabled);
732055
732274
  }
732275
+ if (request5.subagentsEnabled !== void 0) {
732276
+ const currentSettings = controller.stateManager.getGlobalSettingsKey("subagentsEnabled");
732277
+ const wasEnabled = currentSettings ?? false;
732278
+ const isEnabled = !!request5.subagentsEnabled;
732279
+ if (isEnabled && process.platform !== "darwin") {
732280
+ throw new Error("CLI subagents are only supported on macOS platforms");
732281
+ }
732282
+ controller.stateManager.setGlobalState("subagentsEnabled", isEnabled);
732283
+ if (wasEnabled !== isEnabled) {
732284
+ telemetryService.captureSubagentToggle(isEnabled);
732285
+ }
732286
+ }
732056
732287
  await controller.postStateToWebview();
732057
732288
  return Empty.create();
732058
732289
  } catch (error) {
@@ -784073,6 +784304,8 @@ async function createOpenRouterStream(client, systemPrompt, messages, model, rea
784073
784304
  model.id = model.id.slice(0, -CLAUDE_SONNET_1M_SUFFIX.length);
784074
784305
  }
784075
784306
  switch (model.id) {
784307
+ case "anthropic/claude-haiku-4.5":
784308
+ case "anthropic/claude-4.5-haiku":
784076
784309
  case "anthropic/claude-sonnet-4.5":
784077
784310
  case "anthropic/claude-4.5-sonnet":
784078
784311
  // OpenRouter accidentally included this in model list for a brief moment, and users may be using this model id. And to support prompt caching, we need to add it here.
@@ -784127,6 +784360,8 @@ async function createOpenRouterStream(client, systemPrompt, messages, model, rea
784127
784360
  }
784128
784361
  let maxTokens;
784129
784362
  switch (model.id) {
784363
+ case "anthropic/claude-haiku-4.5":
784364
+ case "anthropic/claude-4.5-haiku":
784130
784365
  case "anthropic/claude-sonnet-4.5":
784131
784366
  case "anthropic/claude-4.5-sonnet":
784132
784367
  case "anthropic/claude-sonnet-4":
@@ -784157,6 +784392,8 @@ async function createOpenRouterStream(client, systemPrompt, messages, model, rea
784157
784392
  }
784158
784393
  let reasoning;
784159
784394
  switch (model.id) {
784395
+ case "anthropic/claude-haiku-4.5":
784396
+ case "anthropic/claude-4.5-haiku":
784160
784397
  case "anthropic/claude-sonnet-4.5":
784161
784398
  case "anthropic/claude-4.5-sonnet":
784162
784399
  case "anthropic/claude-sonnet-4":
@@ -885377,9 +885614,10 @@ var init_vertex = __esm({
885377
885614
  }
885378
885615
  const clientAnthropic = this.ensureAnthropicClient();
885379
885616
  const budget_tokens = this.options.thinkingBudgetTokens || 0;
885380
- const reasoningOn = !!((modelId.includes("3-7") || modelId.includes("sonnet-4") || modelId.includes("opus-4")) && budget_tokens !== 0);
885617
+ const reasoningOn = !!((modelId.includes("3-7") || modelId.includes("sonnet-4") || modelId.includes("opus-4") || modelId.includes("haiku-4-5")) && budget_tokens !== 0);
885381
885618
  let stream5;
885382
885619
  switch (modelId) {
885620
+ case "claude-haiku-4-5@20251001":
885383
885621
  case "claude-sonnet-4@20250514":
885384
885622
  case "claude-opus-4-1@20250805":
885385
885623
  case "claude-opus-4@20250514":
@@ -910891,6 +911129,7 @@ var init_TerminalManager = __esm({
910891
911129
  shellIntegrationTimeout = 4e3;
910892
911130
  terminalReuseEnabled = true;
910893
911131
  terminalOutputLineLimit = 500;
911132
+ subagentTerminalOutputLineLimit = 2e3;
910894
911133
  defaultTerminalProfile = "default";
910895
911134
  constructor() {
910896
911135
  let disposable;
@@ -911084,9 +911323,13 @@ var init_TerminalManager = __esm({
911084
911323
  setTerminalOutputLineLimit(limit2) {
911085
911324
  this.terminalOutputLineLimit = limit2;
911086
911325
  }
911087
- processOutput(outputLines) {
911088
- if (outputLines.length > this.terminalOutputLineLimit) {
911089
- const halfLimit = Math.floor(this.terminalOutputLineLimit / 2);
911326
+ setSubagentTerminalOutputLineLimit(limit2) {
911327
+ this.subagentTerminalOutputLineLimit = limit2;
911328
+ }
911329
+ processOutput(outputLines, overrideLimit, isSubagentCommand) {
911330
+ const limit2 = isSubagentCommand ? overrideLimit !== void 0 ? overrideLimit : this.subagentTerminalOutputLineLimit : this.terminalOutputLineLimit;
911331
+ if (outputLines.length > limit2) {
911332
+ const halfLimit = Math.floor(limit2 / 2);
911090
911333
  const start2 = outputLines.slice(0, halfLimit);
911091
911334
  const end2 = outputLines.slice(outputLines.length - halfLimit);
911092
911335
  return `${start2.join("\n")}
@@ -944827,10 +945070,12 @@ var init_hook_factory = __esm({
944827
945070
  }
944828
945071
  /**
944829
945072
  * @returns A list of paths to scripts for the given hook name.
945073
+ * Includes both global hooks (from ~/Documents/Cline/Rules/Hooks/) and workspace hooks
945074
+ * (from .clinerules/hooks/ in each workspace root).
944830
945075
  */
944831
945076
  static async findHookScripts(hookName) {
944832
945077
  const hookScripts = [];
944833
- for (const hooksDir of await getWorkspaceHooksDirs()) {
945078
+ for (const hooksDir of await getAllHooksDirs()) {
944834
945079
  hookScripts.push(_HookFactory.findHookInHooksDir(hookName, hooksDir));
944835
945080
  }
944836
945081
  const isDefined = (scriptPath) => Boolean(scriptPath);
@@ -944848,28 +945093,24 @@ var init_hook_factory = __esm({
944848
945093
  return process.platform === "win32" ? _HookFactory.findWindowsHook(hookName, hooksDir) : _HookFactory.findUnixHook(hookName, hooksDir);
944849
945094
  }
944850
945095
  /**
944851
- * Finds a hook on Windows by searching through PATHEXT extensions.
944852
- * Windows doesn't have an executable bit, instead files are handed off
944853
- * to a set of interpreters described in PATHEXT and the Windows registry.
945096
+ * Finds a hook on Windows using git-style hook discovery.
945097
+ * Like git, we look for a file with the hook name (no extension) and execute it
945098
+ * through the shell, which handles shebangs and script interpretation.
944854
945099
  *
944855
945100
  * @param hookName the name of the hook to search for
944856
- * @param hooksDir the .clinerules directory path to search
945101
+ * @param hooksDir the hooks directory path to search
944857
945102
  * @returns the path to the hook to execute, or undefined if none found
944858
945103
  * @throws Error if an unexpected file system error occurs
944859
945104
  */
944860
945105
  static async findWindowsHook(hookName, hooksDir) {
944861
- const pathExts = process.env.PATHEXT?.split(";") || [];
944862
- for (const pathExt of pathExts) {
944863
- const candidate = import_path55.default.join(hooksDir, hookName + pathExt);
944864
- try {
944865
- if ((await import_promises49.default.stat(candidate)).isFile()) {
944866
- return candidate;
944867
- }
944868
- } catch (error) {
944869
- _HookFactory.handleHookDiscoveryError(error, hookName, candidate);
944870
- }
945106
+ const candidate = import_path55.default.join(hooksDir, hookName);
945107
+ try {
945108
+ const stat5 = await import_promises49.default.stat(candidate);
945109
+ return stat5.isFile() ? candidate : void 0;
945110
+ } catch (error) {
945111
+ _HookFactory.handleHookDiscoveryError(error, hookName, candidate);
945112
+ return void 0;
944871
945113
  }
944872
- return void 0;
944873
945114
  }
944874
945115
  /**
944875
945116
  * Finds a hook on Unix-like systems (Linux, macOS) by checking for an executable file.
@@ -951443,6 +951684,7 @@ var init_task3 = __esm({
951443
951684
  shellIntegrationTimeout,
951444
951685
  terminalReuseEnabled,
951445
951686
  terminalOutputLineLimit,
951687
+ subagentTerminalOutputLineLimit,
951446
951688
  defaultTerminalProfile,
951447
951689
  vscodeTerminalExecutionMode,
951448
951690
  cwd,
@@ -951490,6 +951732,7 @@ var init_task3 = __esm({
951490
951732
  this.terminalManager.setShellIntegrationTimeout(shellIntegrationTimeout);
951491
951733
  this.terminalManager.setTerminalReuseEnabled(terminalReuseEnabled ?? true);
951492
951734
  this.terminalManager.setTerminalOutputLineLimit(terminalOutputLineLimit);
951735
+ this.terminalManager.setSubagentTerminalOutputLineLimit(subagentTerminalOutputLineLimit);
951493
951736
  this.terminalManager.setDefaultTerminalProfile(defaultTerminalProfile);
951494
951737
  this.urlContentFetcher = new UrlContentFetcher(controller.context);
951495
951738
  this.browserSession = new BrowserSession(stateManager);
@@ -952679,6 +952922,8 @@ Speak in ${preferredLanguage}.` : "";
952679
952922
  if (content) {
952680
952923
  content = content.replace(/<thinking>\s?/g, "");
952681
952924
  content = content.replace(/\s?<\/thinking>/g, "");
952925
+ content = content.replace(/<function_calls>\s?/g, "");
952926
+ content = content.replace(/\s?<\/function_calls>/g, "");
952682
952927
  const lastOpenBracketIndex = content.lastIndexOf("<");
952683
952928
  if (lastOpenBracketIndex !== -1) {
952684
952929
  const possibleTag = content.slice(lastOpenBracketIndex);
@@ -952744,7 +952989,7 @@ Speak in ${preferredLanguage}.` : "";
952744
952989
  } catch {
952745
952990
  }
952746
952991
  }
952747
- if (this.taskState.consecutiveMistakeCount >= 3) {
952992
+ if (this.taskState.consecutiveMistakeCount >= this.stateManager.getGlobalSettingsKey("maxConsecutiveMistakes")) {
952748
952993
  const autoApprovalSettings2 = this.stateManager.getGlobalSettingsKey("autoApprovalSettings");
952749
952994
  if (autoApprovalSettings2.enabled && autoApprovalSettings2.enableNotifications) {
952750
952995
  showSystemNotification({
@@ -953774,6 +954019,7 @@ var init_controller = __esm({
953774
954019
  const terminalReuseEnabled = this.stateManager.getGlobalStateKey("terminalReuseEnabled");
953775
954020
  const vscodeTerminalExecutionMode = this.stateManager.getGlobalStateKey("vscodeTerminalExecutionMode");
953776
954021
  const terminalOutputLineLimit = this.stateManager.getGlobalSettingsKey("terminalOutputLineLimit");
954022
+ const subagentTerminalOutputLineLimit = this.stateManager.getGlobalSettingsKey("subagentTerminalOutputLineLimit");
953777
954023
  const defaultTerminalProfile = this.stateManager.getGlobalSettingsKey("defaultTerminalProfile");
953778
954024
  const isNewUser = this.stateManager.getGlobalStateKey("isNewUser");
953779
954025
  const taskHistory = this.stateManager.getGlobalStateKey("taskHistory");
@@ -953821,6 +954067,7 @@ var init_controller = __esm({
953821
954067
  shellIntegrationTimeout,
953822
954068
  terminalReuseEnabled: terminalReuseEnabled ?? true,
953823
954069
  terminalOutputLineLimit: terminalOutputLineLimit ?? 500,
954070
+ subagentTerminalOutputLineLimit: subagentTerminalOutputLineLimit ?? 2e3,
953824
954071
  defaultTerminalProfile: defaultTerminalProfile ?? "default",
953825
954072
  vscodeTerminalExecutionMode,
953826
954073
  cwd,
@@ -954226,9 +954473,12 @@ var init_controller = __esm({
954226
954473
  const customPrompt = this.stateManager.getGlobalSettingsKey("customPrompt");
954227
954474
  const mcpResponsesCollapsed = this.stateManager.getGlobalStateKey("mcpResponsesCollapsed");
954228
954475
  const terminalOutputLineLimit = this.stateManager.getGlobalSettingsKey("terminalOutputLineLimit");
954476
+ const maxConsecutiveMistakes = this.stateManager.getGlobalSettingsKey("maxConsecutiveMistakes");
954477
+ const subagentTerminalOutputLineLimit = this.stateManager.getGlobalSettingsKey("subagentTerminalOutputLineLimit");
954229
954478
  const favoritedModelIds = this.stateManager.getGlobalStateKey("favoritedModelIds");
954230
954479
  const lastDismissedInfoBannerVersion = this.stateManager.getGlobalStateKey("lastDismissedInfoBannerVersion") || 0;
954231
954480
  const lastDismissedModelBannerVersion = this.stateManager.getGlobalStateKey("lastDismissedModelBannerVersion") || 0;
954481
+ const subagentsEnabled = this.stateManager.getGlobalSettingsKey("subagentsEnabled");
954232
954482
  const localClineRulesToggles = this.stateManager.getWorkspaceStateKey("localClineRulesToggles");
954233
954483
  const localWindsurfRulesToggles = this.stateManager.getWorkspaceStateKey("localWindsurfRulesToggles");
954234
954484
  const localCursorRulesToggles = this.stateManager.getWorkspaceStateKey("localCursorRulesToggles");
@@ -954290,6 +954540,8 @@ var init_controller = __esm({
954290
954540
  // Can be undefined but is set to either true or false by the migration that runs on extension launch in extension.ts
954291
954541
  mcpResponsesCollapsed,
954292
954542
  terminalOutputLineLimit,
954543
+ maxConsecutiveMistakes,
954544
+ subagentTerminalOutputLineLimit,
954293
954545
  customPrompt,
954294
954546
  taskHistory: processedTaskHistory,
954295
954547
  shouldShowAnnouncement,
@@ -954312,7 +954564,8 @@ var init_controller = __esm({
954312
954564
  },
954313
954565
  lastDismissedInfoBannerVersion,
954314
954566
  lastDismissedModelBannerVersion,
954315
- remoteConfigSettings: this.stateManager.getRemoteConfigSettings()
954567
+ remoteConfigSettings: this.stateManager.getRemoteConfigSettings(),
954568
+ subagentsEnabled
954316
954569
  };
954317
954570
  }
954318
954571
  async clearTask() {
@@ -992025,7 +992278,10 @@ function createBaseSettings2() {
992025
992278
  actModeVercelAiGatewayModelId: void 0,
992026
992279
  actModeVercelAiGatewayModelInfo: void 0,
992027
992280
  actModeOcaModelId: void 0,
992028
- actModeOcaModelInfo: void 0
992281
+ actModeOcaModelInfo: void 0,
992282
+ maxConsecutiveMistakes: void 0,
992283
+ subagentsEnabled: void 0,
992284
+ subagentTerminalOutputLineLimit: void 0
992029
992285
  };
992030
992286
  }
992031
992287
  var Settings3 = {
@@ -992390,6 +992646,15 @@ var Settings3 = {
992390
992646
  if (message.actModeOcaModelInfo !== void 0) {
992391
992647
  OcaModelInfo3.encode(message.actModeOcaModelInfo, writer.uint32(986).fork()).join();
992392
992648
  }
992649
+ if (message.maxConsecutiveMistakes !== void 0) {
992650
+ writer.uint32(992).int32(message.maxConsecutiveMistakes);
992651
+ }
992652
+ if (message.subagentsEnabled !== void 0) {
992653
+ writer.uint32(1e3).bool(message.subagentsEnabled);
992654
+ }
992655
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
992656
+ writer.uint32(1008).int32(message.subagentTerminalOutputLineLimit);
992657
+ }
992393
992658
  return writer;
992394
992659
  },
992395
992660
  decode(input, length) {
@@ -993239,6 +993504,27 @@ var Settings3 = {
993239
993504
  message.actModeOcaModelInfo = OcaModelInfo3.decode(reader, reader.uint32());
993240
993505
  continue;
993241
993506
  }
993507
+ case 124: {
993508
+ if (tag !== 992) {
993509
+ break;
993510
+ }
993511
+ message.maxConsecutiveMistakes = reader.int32();
993512
+ continue;
993513
+ }
993514
+ case 125: {
993515
+ if (tag !== 1e3) {
993516
+ break;
993517
+ }
993518
+ message.subagentsEnabled = reader.bool();
993519
+ continue;
993520
+ }
993521
+ case 126: {
993522
+ if (tag !== 1008) {
993523
+ break;
993524
+ }
993525
+ message.subagentTerminalOutputLineLimit = reader.int32();
993526
+ continue;
993527
+ }
993242
993528
  }
993243
993529
  if ((tag & 7) === 4 || tag === 0) {
993244
993530
  break;
@@ -993368,7 +993654,10 @@ var Settings3 = {
993368
993654
  actModeVercelAiGatewayModelId: isSet37(object2.actModeVercelAiGatewayModelId) ? globalThis.String(object2.actModeVercelAiGatewayModelId) : void 0,
993369
993655
  actModeVercelAiGatewayModelInfo: isSet37(object2.actModeVercelAiGatewayModelInfo) ? OpenRouterModelInfo6.fromJSON(object2.actModeVercelAiGatewayModelInfo) : void 0,
993370
993656
  actModeOcaModelId: isSet37(object2.actModeOcaModelId) ? globalThis.String(object2.actModeOcaModelId) : void 0,
993371
- actModeOcaModelInfo: isSet37(object2.actModeOcaModelInfo) ? OcaModelInfo3.fromJSON(object2.actModeOcaModelInfo) : void 0
993657
+ actModeOcaModelInfo: isSet37(object2.actModeOcaModelInfo) ? OcaModelInfo3.fromJSON(object2.actModeOcaModelInfo) : void 0,
993658
+ maxConsecutiveMistakes: isSet37(object2.maxConsecutiveMistakes) ? globalThis.Number(object2.maxConsecutiveMistakes) : void 0,
993659
+ subagentsEnabled: isSet37(object2.subagentsEnabled) ? globalThis.Boolean(object2.subagentsEnabled) : void 0,
993660
+ subagentTerminalOutputLineLimit: isSet37(object2.subagentTerminalOutputLineLimit) ? globalThis.Number(object2.subagentTerminalOutputLineLimit) : void 0
993372
993661
  };
993373
993662
  },
993374
993663
  toJSON(message) {
@@ -993733,6 +994022,15 @@ var Settings3 = {
993733
994022
  if (message.actModeOcaModelInfo !== void 0) {
993734
994023
  obj2.actModeOcaModelInfo = OcaModelInfo3.toJSON(message.actModeOcaModelInfo);
993735
994024
  }
994025
+ if (message.maxConsecutiveMistakes !== void 0) {
994026
+ obj2.maxConsecutiveMistakes = Math.round(message.maxConsecutiveMistakes);
994027
+ }
994028
+ if (message.subagentsEnabled !== void 0) {
994029
+ obj2.subagentsEnabled = message.subagentsEnabled;
994030
+ }
994031
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
994032
+ obj2.subagentTerminalOutputLineLimit = Math.round(message.subagentTerminalOutputLineLimit);
994033
+ }
993736
994034
  return obj2;
993737
994035
  },
993738
994036
  create(base) {
@@ -993860,6 +994158,9 @@ var Settings3 = {
993860
994158
  message.actModeVercelAiGatewayModelInfo = object2.actModeVercelAiGatewayModelInfo !== void 0 && object2.actModeVercelAiGatewayModelInfo !== null ? OpenRouterModelInfo6.fromPartial(object2.actModeVercelAiGatewayModelInfo) : void 0;
993861
994159
  message.actModeOcaModelId = object2.actModeOcaModelId ?? void 0;
993862
994160
  message.actModeOcaModelInfo = object2.actModeOcaModelInfo !== void 0 && object2.actModeOcaModelInfo !== null ? OcaModelInfo3.fromPartial(object2.actModeOcaModelInfo) : void 0;
994161
+ message.maxConsecutiveMistakes = object2.maxConsecutiveMistakes ?? void 0;
994162
+ message.subagentsEnabled = object2.subagentsEnabled ?? void 0;
994163
+ message.subagentTerminalOutputLineLimit = object2.subagentTerminalOutputLineLimit ?? void 0;
993863
994164
  return message;
993864
994165
  }
993865
994166
  };
@@ -995164,7 +995465,10 @@ function createBaseUpdateSettingsRequest2() {
995164
995465
  autoCondenseThreshold: void 0,
995165
995466
  multiRootEnabled: void 0,
995166
995467
  hooksEnabled: void 0,
995167
- vscodeTerminalExecutionMode: void 0
995468
+ vscodeTerminalExecutionMode: void 0,
995469
+ maxConsecutiveMistakes: void 0,
995470
+ subagentsEnabled: void 0,
995471
+ subagentTerminalOutputLineLimit: void 0
995168
995472
  };
995169
995473
  }
995170
995474
  var UpdateSettingsRequest3 = {
@@ -995247,6 +995551,15 @@ var UpdateSettingsRequest3 = {
995247
995551
  if (message.vscodeTerminalExecutionMode !== void 0) {
995248
995552
  writer.uint32(218).string(message.vscodeTerminalExecutionMode);
995249
995553
  }
995554
+ if (message.maxConsecutiveMistakes !== void 0) {
995555
+ writer.uint32(224).int32(message.maxConsecutiveMistakes);
995556
+ }
995557
+ if (message.subagentsEnabled !== void 0) {
995558
+ writer.uint32(232).bool(message.subagentsEnabled);
995559
+ }
995560
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
995561
+ writer.uint32(240).int32(message.subagentTerminalOutputLineLimit);
995562
+ }
995250
995563
  return writer;
995251
995564
  },
995252
995565
  decode(input, length) {
@@ -995438,6 +995751,27 @@ var UpdateSettingsRequest3 = {
995438
995751
  message.vscodeTerminalExecutionMode = reader.string();
995439
995752
  continue;
995440
995753
  }
995754
+ case 28: {
995755
+ if (tag !== 224) {
995756
+ break;
995757
+ }
995758
+ message.maxConsecutiveMistakes = reader.int32();
995759
+ continue;
995760
+ }
995761
+ case 29: {
995762
+ if (tag !== 232) {
995763
+ break;
995764
+ }
995765
+ message.subagentsEnabled = reader.bool();
995766
+ continue;
995767
+ }
995768
+ case 30: {
995769
+ if (tag !== 240) {
995770
+ break;
995771
+ }
995772
+ message.subagentTerminalOutputLineLimit = reader.int32();
995773
+ continue;
995774
+ }
995441
995775
  }
995442
995776
  if ((tag & 7) === 4 || tag === 0) {
995443
995777
  break;
@@ -995473,7 +995807,10 @@ var UpdateSettingsRequest3 = {
995473
995807
  autoCondenseThreshold: isSet37(object2.autoCondenseThreshold) ? globalThis.Number(object2.autoCondenseThreshold) : void 0,
995474
995808
  multiRootEnabled: isSet37(object2.multiRootEnabled) ? globalThis.Boolean(object2.multiRootEnabled) : void 0,
995475
995809
  hooksEnabled: isSet37(object2.hooksEnabled) ? globalThis.Boolean(object2.hooksEnabled) : void 0,
995476
- vscodeTerminalExecutionMode: isSet37(object2.vscodeTerminalExecutionMode) ? globalThis.String(object2.vscodeTerminalExecutionMode) : void 0
995810
+ vscodeTerminalExecutionMode: isSet37(object2.vscodeTerminalExecutionMode) ? globalThis.String(object2.vscodeTerminalExecutionMode) : void 0,
995811
+ maxConsecutiveMistakes: isSet37(object2.maxConsecutiveMistakes) ? globalThis.Number(object2.maxConsecutiveMistakes) : void 0,
995812
+ subagentsEnabled: isSet37(object2.subagentsEnabled) ? globalThis.Boolean(object2.subagentsEnabled) : void 0,
995813
+ subagentTerminalOutputLineLimit: isSet37(object2.subagentTerminalOutputLineLimit) ? globalThis.Number(object2.subagentTerminalOutputLineLimit) : void 0
995477
995814
  };
995478
995815
  },
995479
995816
  toJSON(message) {
@@ -995556,6 +995893,15 @@ var UpdateSettingsRequest3 = {
995556
995893
  if (message.vscodeTerminalExecutionMode !== void 0) {
995557
995894
  obj2.vscodeTerminalExecutionMode = message.vscodeTerminalExecutionMode;
995558
995895
  }
995896
+ if (message.maxConsecutiveMistakes !== void 0) {
995897
+ obj2.maxConsecutiveMistakes = Math.round(message.maxConsecutiveMistakes);
995898
+ }
995899
+ if (message.subagentsEnabled !== void 0) {
995900
+ obj2.subagentsEnabled = message.subagentsEnabled;
995901
+ }
995902
+ if (message.subagentTerminalOutputLineLimit !== void 0) {
995903
+ obj2.subagentTerminalOutputLineLimit = Math.round(message.subagentTerminalOutputLineLimit);
995904
+ }
995559
995905
  return obj2;
995560
995906
  },
995561
995907
  create(base) {
@@ -995589,6 +995935,9 @@ var UpdateSettingsRequest3 = {
995589
995935
  message.multiRootEnabled = object2.multiRootEnabled ?? void 0;
995590
995936
  message.hooksEnabled = object2.hooksEnabled ?? void 0;
995591
995937
  message.vscodeTerminalExecutionMode = object2.vscodeTerminalExecutionMode ?? void 0;
995938
+ message.maxConsecutiveMistakes = object2.maxConsecutiveMistakes ?? void 0;
995939
+ message.subagentsEnabled = object2.subagentsEnabled ?? void 0;
995940
+ message.subagentTerminalOutputLineLimit = object2.subagentTerminalOutputLineLimit ?? void 0;
995592
995941
  return message;
995593
995942
  }
995594
995943
  };
@@ -1006663,7 +1007012,6 @@ async function main() {
1006663
1007012
  process.env.HOST_BRIDGE_ADDRESS = `127.0.0.1:${args2.hostBridgePort}`;
1006664
1007013
  }
1006665
1007014
  try {
1006666
- log("\n\n\nStarting cline-core service...\n\n\n");
1006667
1007015
  setupGlobalErrorHandlers();
1006668
1007016
  const hostAddress = await waitForHostBridgeReady();
1006669
1007017
  setupHostProvider(extensionContext, EXTENSION_DIR, DATA_DIR);
@@ -1006682,7 +1007030,7 @@ async function main() {
1006682
1007030
  log(`Registered instance in SQLite locks: ${protobusAddress}`);
1006683
1007031
  globalLockManager.cleanupOrphanedFolderLocks();
1006684
1007032
  globalLockManager.touchInstance();
1006685
- log("\u2705 All services started successfully");
1007033
+ log("All services started successfully");
1006686
1007034
  } catch (err2) {
1006687
1007035
  log(`FATAL ERROR during startup: ${err2}`);
1006688
1007036
  log(`Cleaning up and shutting down...`);
@@ -2,7 +2,7 @@
2
2
  "name": "claude-dev",
3
3
  "displayName": "Cline",
4
4
  "description": "Autonomous coding agent right in your IDE, capable of creating/editing files, running commands, using the browser, and more with your permission every step of the way.",
5
- "version": "3.32.7",
5
+ "version": "3.32.8",
6
6
  "icon": "assets/icons/icon.png",
7
7
  "engines": {
8
8
  "vscode": "^1.84.0"
@@ -340,6 +340,7 @@ class StandaloneTerminalManager {
340
340
  this.shellIntegrationTimeout = 4000
341
341
  this.terminalReuseEnabled = true
342
342
  this.terminalOutputLineLimit = 500
343
+ this.subagentTerminalOutputLineLimit = 2000
343
344
  this.defaultTerminalProfile = "default"
344
345
  }
345
346
 
@@ -436,9 +437,10 @@ class StandaloneTerminalManager {
436
437
  return process ? process.isHot : false
437
438
  }
438
439
 
439
- processOutput(outputLines) {
440
- if (outputLines.length > this.terminalOutputLineLimit) {
441
- const halfLimit = Math.floor(this.terminalOutputLineLimit / 2)
440
+ processOutput(outputLines, overrideLimit, isSubagentCommand) {
441
+ const limit = isSubagentCommand && overrideLimit ? overrideLimit : this.terminalOutputLineLimit
442
+ if (outputLines.length > limit) {
443
+ const halfLimit = Math.floor(limit / 2)
442
444
  const start = outputLines.slice(0, halfLimit)
443
445
  const end = outputLines.slice(outputLines.length - halfLimit)
444
446
  return `${start.join("\n")}\n... (output truncated) ...\n${end.join("\n")}`.trim()
@@ -484,6 +486,12 @@ class StandaloneTerminalManager {
484
486
  console.log(`[StandaloneTerminalManager] Set terminal output line limit to ${limit}`)
485
487
  }
486
488
 
489
+ // Set subagent terminal output line limit (compatibility method)
490
+ setSubagentTerminalOutputLineLimit(limit) {
491
+ this.subagentTerminalOutputLineLimit = limit
492
+ console.log(`[StandaloneTerminalManager] Set subagent terminal output line limit to ${limit}`)
493
+ }
494
+
487
495
  // Set default terminal profile (compatibility method)
488
496
  setDefaultTerminalProfile(profile) {
489
497
  this.defaultTerminalProfile = profile
package/package.json CHANGED
@@ -1,68 +1,62 @@
1
1
  {
2
- "name": "cline",
3
- "version": "1.0.0-nightly.12",
4
- "description": "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more",
5
- "main": "cline-core.js",
6
- "bin": {
7
- "cline": "./bin/cline",
8
- "cline-host": "./bin/cline-host"
9
- },
10
- "man": "./man/cline.1",
11
- "scripts": {
12
- "postinstall": "node postinstall.js"
13
- },
14
- "bundleDependencies": [
15
- "@grpc/grpc-js",
16
- "@grpc/reflection",
17
- "better-sqlite3",
18
- "grpc-health-check",
19
- "open",
20
- "vscode-uri"
21
- ],
22
- "engines": {
23
- "node": ">=18.0.0"
24
- },
25
- "keywords": [
26
- "cline",
27
- "claude",
28
- "dev",
29
- "mcp",
30
- "openrouter",
31
- "coding",
32
- "agent",
33
- "autonomous",
34
- "chatgpt",
35
- "sonnet",
36
- "ai",
37
- "llama",
38
- "cli"
39
- ],
40
- "author": {
41
- "name": "Cline Bot Inc."
42
- },
43
- "license": "Apache-2.0",
44
- "repository": {
45
- "type": "git",
46
- "url": "https://github.com/cline/cline"
47
- },
48
- "homepage": "https://cline.bot",
49
- "bugs": {
50
- "url": "https://github.com/cline/cline/issues"
51
- },
52
- "dependencies": {
53
- "@grpc/grpc-js": "^1.13.3",
54
- "@grpc/reflection": "^1.0.4",
55
- "better-sqlite3": "^12.2.0",
56
- "grpc-health-check": "^2.0.2",
57
- "open": "^10.1.2",
58
- "vscode-uri": "^3.1.0"
59
- },
60
- "os": [
61
- "darwin",
62
- "linux"
63
- ],
64
- "cpu": [
65
- "x64",
66
- "arm64"
67
- ]
2
+ "name": "cline",
3
+ "version": "1.0.0-nightly.14",
4
+ "description": "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more",
5
+ "main": "cline-core.js",
6
+ "bin": {
7
+ "cline": "./bin/cline",
8
+ "cline-host": "./bin/cline-host"
9
+ },
10
+ "man": "./man/cline.1",
11
+ "scripts": {
12
+ "postinstall": "node postinstall.js"
13
+ },
14
+ "bundleDependencies": [
15
+ "@grpc/grpc-js",
16
+ "@grpc/reflection",
17
+ "better-sqlite3",
18
+ "grpc-health-check",
19
+ "open",
20
+ "vscode-uri"
21
+ ],
22
+ "engines": {
23
+ "node": ">=18.0.0"
24
+ },
25
+ "keywords": [
26
+ "cline",
27
+ "claude",
28
+ "dev",
29
+ "mcp",
30
+ "openrouter",
31
+ "coding",
32
+ "agent",
33
+ "autonomous",
34
+ "chatgpt",
35
+ "sonnet",
36
+ "ai",
37
+ "llama",
38
+ "cli"
39
+ ],
40
+ "author": {
41
+ "name": "Cline Bot Inc."
42
+ },
43
+ "license": "Apache-2.0",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "https://github.com/cline/cline"
47
+ },
48
+ "homepage": "https://cline.bot",
49
+ "bugs": {
50
+ "url": "https://github.com/cline/cline/issues"
51
+ },
52
+ "dependencies": {
53
+ "@grpc/grpc-js": "^1.13.3",
54
+ "@grpc/reflection": "^1.0.4",
55
+ "better-sqlite3": "^12.2.0",
56
+ "grpc-health-check": "^2.0.2",
57
+ "open": "^10.1.2",
58
+ "vscode-uri": "^3.1.0"
59
+ },
60
+ "os": ["darwin", "linux"],
61
+ "cpu": ["x64", "arm64"]
68
62
  }
@@ -209,6 +209,9 @@ message Settings {
209
209
  optional OpenRouterModelInfo act_mode_vercel_ai_gateway_model_info = 121;
210
210
  optional string act_mode_oca_model_id = 122;
211
211
  optional OcaModelInfo act_mode_oca_model_info = 123;
212
+ optional int32 max_consecutive_mistakes = 124;
213
+ optional bool subagents_enabled = 125;
214
+ optional int32 subagent_terminal_output_line_limit = 126;
212
215
  }
213
216
 
214
217
  message DictationSettings {
@@ -352,6 +355,9 @@ message UpdateSettingsRequest {
352
355
  optional bool multi_root_enabled = 25;
353
356
  optional bool hooks_enabled = 26;
354
357
  optional string vscode_terminal_execution_mode = 27;
358
+ optional int32 max_consecutive_mistakes = 28;
359
+ optional bool subagents_enabled = 29;
360
+ optional int32 subagent_terminal_output_line_limit = 30;
355
361
  }
356
362
 
357
363
  // Complete API Configuration message