ur-agent 1.81.6 → 1.81.8

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/dist/cli.js CHANGED
@@ -53776,6 +53776,7 @@ __export(exports_providerRegistry, {
53776
53776
  formatProviderList: () => formatProviderList,
53777
53777
  formatProviderDoctor: () => formatProviderDoctor,
53778
53778
  formatInvalidProviderModelMessage: () => formatInvalidProviderModelMessage,
53779
+ ensureProviderReasoningCapabilitiesForModel: () => ensureProviderReasoningCapabilitiesForModel,
53779
53780
  ensureProviderModelsFresh: () => ensureProviderModelsFresh,
53780
53781
  doctorProvider: () => doctorProvider,
53781
53782
  doctorActiveProvider: () => doctorActiveProvider,
@@ -54858,6 +54859,21 @@ function modelDefinitionsFromNames(provider, names, source) {
54858
54859
  description: source === "cache" ? `Cached ${providerName} model` : `Discovered from ${providerName}`
54859
54860
  }));
54860
54861
  }
54862
+ function modelDefinitionsFromDiscovered(models) {
54863
+ return models.map((model) => ({
54864
+ id: model.id,
54865
+ displayName: model.displayName,
54866
+ description: model.description,
54867
+ pricing: model.pricing,
54868
+ ...model.contextLength ? { contextLength: model.contextLength } : {},
54869
+ ...model.outputTokenLimit ? { outputTokenLimit: model.outputTokenLimit } : {},
54870
+ ...model.supportedParameters ? { supportedParameters: model.supportedParameters } : {},
54871
+ ...model.capabilities ? { capabilities: model.capabilities } : {},
54872
+ ...model.reasoning ? { reasoning: model.reasoning } : {},
54873
+ ...model.expirationDate ? { expirationDate: model.expirationDate } : {},
54874
+ ...model.deprecated ? { deprecated: true } : {}
54875
+ }));
54876
+ }
54861
54877
  function providerModelCacheKey(provider, settings = getInitialSettings()) {
54862
54878
  const definition = getProviderDefinition(provider);
54863
54879
  let endpoint = providerBaseUrl(provider, definition, settings);
@@ -54911,6 +54927,97 @@ function getProviderReasoningCapabilitiesForModel(model, provider = getRuntimePr
54911
54927
  const match = known.find((entry) => entry.id.toLowerCase() === wanted) ?? known.find((entry) => wanted.includes(entry.id.toLowerCase()));
54912
54928
  return match?.reasoning;
54913
54929
  }
54930
+ function providerPropsUrl(baseUrl, model) {
54931
+ const url3 = new URL(normalizeBaseUrl(baseUrl));
54932
+ url3.hash = "";
54933
+ url3.search = "";
54934
+ let path8 = url3.pathname.replace(/\/+$/, "");
54935
+ path8 = path8.replace(/\/(?:v\d+(?:beta)?|api\/v\d+)$/i, "");
54936
+ path8 = path8.replace(/\/(?:chat\/completions|models|props)$/i, "");
54937
+ url3.pathname = `${path8}/props`;
54938
+ url3.searchParams.set("model", model);
54939
+ return url3.toString();
54940
+ }
54941
+ function reasoningCapabilitiesFromProps(value) {
54942
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
54943
+ return;
54944
+ }
54945
+ const root2 = value;
54946
+ const explicit = parseModelReasoningCapabilities(root2.reasoning) ?? parseModelReasoningCapabilities(root2.meta && typeof root2.meta === "object" ? root2.meta.reasoning : undefined) ?? parseModelReasoningCapabilities({
54947
+ supported_efforts: root2.supported_efforts,
54948
+ default_effort: root2.default_effort
54949
+ });
54950
+ if (explicit)
54951
+ return explicit;
54952
+ const caps = root2.chat_template_caps && typeof root2.chat_template_caps === "object" ? root2.chat_template_caps : undefined;
54953
+ if (caps?.supports_reasoning_effort === true) {
54954
+ return { supportedEfforts: null };
54955
+ }
54956
+ if (caps?.supports_reasoning_effort === false) {
54957
+ return { supportedEfforts: [] };
54958
+ }
54959
+ return;
54960
+ }
54961
+ function rememberProviderModelReasoning(provider, model, reasoning, settings) {
54962
+ const key = providerModelCacheKey(provider, settings);
54963
+ const existing = cachedModelsByProvider.get(key) ?? [];
54964
+ const wanted = model.trim().toLowerCase();
54965
+ let found = false;
54966
+ const updated = existing.map((entry) => {
54967
+ if (entry.id.toLowerCase() !== wanted)
54968
+ return entry;
54969
+ found = true;
54970
+ return { ...entry, reasoning };
54971
+ });
54972
+ if (!found) {
54973
+ updated.push({
54974
+ id: model,
54975
+ displayName: model,
54976
+ description: `Discovered from ${getProviderDefinition(provider).displayName}`,
54977
+ reasoning
54978
+ });
54979
+ }
54980
+ rememberModels(key, updated);
54981
+ }
54982
+ async function ensureProviderReasoningCapabilitiesForModel(providerId, model, options = {}) {
54983
+ const provider = resolveProviderId(providerId);
54984
+ if (!provider)
54985
+ return;
54986
+ const settings = options.settings ?? getInitialSettings();
54987
+ const cached2 = getProviderReasoningCapabilitiesForModel(model, provider, settings);
54988
+ if (cached2 !== undefined)
54989
+ return cached2;
54990
+ if (provider !== "llama.cpp") {
54991
+ await ensureProviderModelsFresh(provider, options);
54992
+ return getProviderReasoningCapabilitiesForModel(model, provider, settings);
54993
+ }
54994
+ const definition = getProviderDefinition(provider);
54995
+ const baseUrl = providerBaseUrl(provider, definition, settings);
54996
+ if (!baseUrl)
54997
+ return;
54998
+ const env4 = options.adapters?.env ?? process.env;
54999
+ const fetchImpl = options.adapters?.fetch ?? fetch;
55000
+ let apiKey = definition.envKey ? env4[definition.envKey] : undefined;
55001
+ if (!apiKey) {
55002
+ try {
55003
+ const credentials = await Promise.resolve().then(() => (init_providerCredentials(), exports_providerCredentials));
55004
+ apiKey = credentials.getProviderApiKey(provider, { env: env4 });
55005
+ } catch {}
55006
+ }
55007
+ const response = await fetchImpl(providerPropsUrl(baseUrl, model), {
55008
+ method: "GET",
55009
+ signal: options.signal,
55010
+ ...apiKey ? { headers: { Authorization: `Bearer ${apiKey}` } } : {}
55011
+ });
55012
+ if (!response.ok) {
55013
+ throw new Error(`llama.cpp /props returned HTTP ${response.status}.`);
55014
+ }
55015
+ const reasoning = reasoningCapabilitiesFromProps(await response.json().catch(() => null));
55016
+ if (reasoning) {
55017
+ rememberProviderModelReasoning(provider, model, reasoning, settings);
55018
+ }
55019
+ return reasoning;
55020
+ }
54914
55021
  function cacheProviderModelsForProvider(providerId, models, settings = getInitialSettings()) {
54915
55022
  const provider = resolveProviderId(providerId);
54916
55023
  if (!provider) {
@@ -55015,9 +55122,9 @@ async function discoverLiveModelsForProvider(provider, options = {}) {
55015
55122
  }
55016
55123
  reachedOk = true;
55017
55124
  const body = await response.json().catch(() => null);
55018
- const names = parseOpenAICompatibleModelNames(body);
55019
- if (names.length > 0) {
55020
- return modelDefinitionsFromNames(provider, names, "live");
55125
+ const discovered = parseDiscoveredModels(body, getProviderDefinition(provider).displayName);
55126
+ if (discovered.length > 0) {
55127
+ return modelDefinitionsFromDiscovered(discovered);
55021
55128
  }
55022
55129
  }
55023
55130
  if (!reachedOk && lastError) {
@@ -55152,20 +55259,7 @@ async function discoverApiProviderModels(provider, definition, options) {
55152
55259
  }
55153
55260
  } while (next);
55154
55261
  const providerLabel = getProviderDefinition(provider).displayName;
55155
- const discovered = parseDiscoveredModels({ data: entries }, providerLabel);
55156
- return discovered.map((model) => ({
55157
- id: model.id,
55158
- displayName: model.displayName,
55159
- description: model.description,
55160
- pricing: model.pricing,
55161
- ...model.contextLength ? { contextLength: model.contextLength } : {},
55162
- ...model.outputTokenLimit ? { outputTokenLimit: model.outputTokenLimit } : {},
55163
- ...model.supportedParameters ? { supportedParameters: model.supportedParameters } : {},
55164
- ...model.capabilities ? { capabilities: model.capabilities } : {},
55165
- ...model.reasoning ? { reasoning: model.reasoning } : {},
55166
- ...model.expirationDate ? { expirationDate: model.expirationDate } : {},
55167
- ...model.deprecated ? { deprecated: true } : {}
55168
- }));
55262
+ return modelDefinitionsFromDiscovered(parseDiscoveredModels({ data: entries }, providerLabel));
55169
55263
  }
55170
55264
  async function listModelsForProviderWithSource(providerId, options = {}) {
55171
55265
  const provider = resolveProviderId(providerId);
@@ -90880,55 +90974,57 @@ var init_thinking = __esm(() => {
90880
90974
  });
90881
90975
 
90882
90976
  // src/utils/effort.ts
90883
- function modelSupportsEffort(model, provider = getRuntimeProvider()) {
90977
+ function normalizeEffortLevels(values) {
90978
+ const advertised = new Set(values.map((value) => value.trim().toLowerCase()).filter(isEffortLevel));
90979
+ return EFFORT_LEVELS.filter((level) => advertised.has(level));
90980
+ }
90981
+ function getSupportedEffortLevelsForModel(model, provider = getRuntimeProvider()) {
90884
90982
  if (isEnvTruthy(process.env.UR_CODE_ALWAYS_ENABLE_EFFORT)) {
90885
- return true;
90983
+ return [...EFFORT_LEVELS];
90886
90984
  }
90887
90985
  const supported3P = get3PModelCapabilityOverride(model, "effort");
90888
- if (supported3P !== undefined) {
90889
- return supported3P;
90890
- }
90986
+ if (supported3P === false)
90987
+ return [];
90988
+ const supportsExtendedEffort = get3PModelCapabilityOverride(model, "max_effort") !== false;
90989
+ const applyOverrides = (levels) => supportsExtendedEffort ? [...levels] : levels.filter((level) => level !== "xhigh" && level !== "max");
90891
90990
  const discovered = getRuntimeModelReasoningCapabilities(model, provider);
90892
- if (discovered?.supportedEfforts === null)
90893
- return true;
90991
+ if (discovered?.supportedEfforts === null) {
90992
+ return applyOverrides(EFFORT_LEVELS);
90993
+ }
90894
90994
  if (discovered?.supportedEfforts !== undefined) {
90895
- return discovered.supportedEfforts.some((effort) => effort !== "none");
90995
+ return applyOverrides(normalizeEffortLevels(discovered.supportedEfforts));
90896
90996
  }
90897
90997
  if (discovered && provider === "openrouter") {
90898
- return true;
90998
+ return applyOverrides(EFFORT_LEVELS);
90899
90999
  }
90900
- return getAPIProvider() === "ollama";
90901
- }
90902
- function modelSupportsMaxEffort(model, provider = getRuntimeProvider()) {
90903
- const supported3P = get3PModelCapabilityOverride(model, "max_effort");
90904
- if (supported3P !== undefined) {
90905
- return supported3P;
90906
- }
90907
- const discovered = getRuntimeModelReasoningCapabilities(model, provider);
90908
- if (discovered?.supportedEfforts === null)
90909
- return true;
90910
- if (discovered?.supportedEfforts !== undefined) {
90911
- return provider === "openrouter" || discovered.supportedEfforts.some((effort) => effort === "max" || effort === "xhigh");
91000
+ if (provider === "ollama" && OLLAMA_GRADED_THINK_MODEL_RE.test(model)) {
91001
+ return ["low", "medium", "high"];
90912
91002
  }
90913
- if (discovered && provider === "openrouter") {
90914
- return true;
91003
+ if (supported3P === true) {
91004
+ return get3PModelCapabilityOverride(model, "max_effort") === true ? [...EFFORT_LEVELS] : ["low", "medium", "high"];
90915
91005
  }
90916
91006
  if (process.env.USER_TYPE === "ant" && resolveAntModel(model)) {
90917
- return true;
91007
+ return applyOverrides(EFFORT_LEVELS);
90918
91008
  }
90919
- return false;
91009
+ return [];
91010
+ }
91011
+ function resolveProviderEffortLevel(model, requested, provider = getRuntimeProvider()) {
91012
+ const supported = getSupportedEffortLevelsForModel(model, provider);
91013
+ if (supported.length === 0)
91014
+ return;
91015
+ if (requested === "max")
91016
+ return supported.at(-1);
91017
+ if (supported.includes(requested))
91018
+ return requested;
91019
+ const requestedIndex = EFFORT_LEVELS.indexOf(requested);
91020
+ const notHigher = supported.filter((level) => EFFORT_LEVELS.indexOf(level) <= requestedIndex);
91021
+ return notHigher.at(-1) ?? supported[0];
91022
+ }
91023
+ function modelSupportsEffort(model, provider = getRuntimeProvider()) {
91024
+ return getSupportedEffortLevelsForModel(model, provider).length > 0;
90920
91025
  }
90921
91026
  function toOpenRouterReasoningEffort(model, effort) {
90922
- const supported = getRuntimeModelReasoningCapabilities(model, "openrouter")?.supportedEfforts;
90923
- if (effort !== "max")
90924
- return effort;
90925
- if (supported === null || supported === undefined)
90926
- return "max";
90927
- if (supported.includes("max"))
90928
- return "max";
90929
- if (supported.includes("xhigh"))
90930
- return "xhigh";
90931
- return "high";
91027
+ return resolveProviderEffortLevel(model, effort, "openrouter") ?? (effort === "max" ? "high" : effort);
90932
91028
  }
90933
91029
  function isEffortLevel(value) {
90934
91030
  return EFFORT_LEVELS.includes(value);
@@ -90951,7 +91047,7 @@ function parseEffortValue(value) {
90951
91047
  return;
90952
91048
  }
90953
91049
  function toPersistableEffort(value) {
90954
- if (value === "low" || value === "medium" || value === "high") {
91050
+ if (value === "minimal" || value === "low" || value === "medium" || value === "high" || value === "xhigh") {
90955
91051
  return value;
90956
91052
  }
90957
91053
  if (value === "max" && process.env.USER_TYPE === "ant") {
@@ -90975,11 +91071,10 @@ function resolveAppliedEffort(model, appStateEffortValue, provider = getRuntimeP
90975
91071
  if (envOverride === null) {
90976
91072
  return;
90977
91073
  }
90978
- const resolved = envOverride ?? appStateEffortValue ?? getDefaultEffortForModel(model);
90979
- if (resolved === "max" && !modelSupportsMaxEffort(model, provider)) {
90980
- return "high";
90981
- }
90982
- return resolved;
91074
+ const resolved = envOverride ?? appStateEffortValue ?? getDefaultEffortForModel(model, provider);
91075
+ if (resolved === undefined || typeof resolved === "number")
91076
+ return resolved;
91077
+ return resolveProviderEffortLevel(model, resolved, provider);
90983
91078
  }
90984
91079
  function getDisplayedEffortLevel(model, appStateEffort, provider = getRuntimeProvider()) {
90985
91080
  const resolved = resolveAppliedEffort(model, appStateEffort, provider) ?? "high";
@@ -91013,12 +91108,16 @@ function convertEffortValueToLevel(value) {
91013
91108
  }
91014
91109
  function getEffortLevelDescription(level) {
91015
91110
  switch (level) {
91111
+ case "minimal":
91112
+ return "Minimal reasoning for the lowest latency and cost";
91016
91113
  case "low":
91017
91114
  return "Quick, straightforward implementation with minimal overhead";
91018
91115
  case "medium":
91019
91116
  return "Balanced approach with standard implementation and testing";
91020
91117
  case "high":
91021
91118
  return "Comprehensive implementation with extensive testing and documentation";
91119
+ case "xhigh":
91120
+ return "Extended reasoning above high where the provider supports it";
91022
91121
  case "max":
91023
91122
  return "Maximum capability with deepest reasoning";
91024
91123
  }
@@ -91039,7 +91138,11 @@ function getmodelODefaultEffortConfig() {
91039
91138
  ...config2
91040
91139
  };
91041
91140
  }
91042
- function getDefaultEffortForModel(model) {
91141
+ function getDefaultEffortForModel(model, provider = getRuntimeProvider()) {
91142
+ const providerDefault = getRuntimeModelReasoningCapabilities(model, provider)?.defaultEffort;
91143
+ if (providerDefault && isEffortLevel(providerDefault)) {
91144
+ return resolveProviderEffortLevel(model, providerDefault, provider);
91145
+ }
91043
91146
  if (process.env.USER_TYPE === "ant") {
91044
91147
  const config2 = getAntModelOverrideConfig();
91045
91148
  const isDefaultModel = config2?.defaultModel !== undefined && model.toLowerCase() === config2.defaultModel.toLowerCase();
@@ -91057,7 +91160,7 @@ function getDefaultEffortForModel(model) {
91057
91160
  }
91058
91161
  return;
91059
91162
  }
91060
- if (modelSupportsEffort(model)) {
91163
+ if (modelSupportsEffort(model, provider)) {
91061
91164
  if (isProSubscriber()) {
91062
91165
  return "medium";
91063
91166
  }
@@ -91065,12 +91168,12 @@ function getDefaultEffortForModel(model) {
91065
91168
  return "medium";
91066
91169
  }
91067
91170
  }
91068
- if (isUltrathinkEnabled() && modelSupportsEffort(model)) {
91171
+ if (isUltrathinkEnabled() && modelSupportsEffort(model, provider)) {
91069
91172
  return "medium";
91070
91173
  }
91071
91174
  return;
91072
91175
  }
91073
- var EFFORT_LEVELS, MODELO_DEFAULT_EFFORT_CONFIG_DEFAULT;
91176
+ var EFFORT_LEVELS, OLLAMA_GRADED_THINK_MODEL_RE, MODELO_DEFAULT_EFFORT_CONFIG_DEFAULT;
91074
91177
  var init_effort = __esm(() => {
91075
91178
  init_thinking();
91076
91179
  init_settings2();
@@ -91081,11 +91184,14 @@ var init_effort = __esm(() => {
91081
91184
  init_envUtils();
91082
91185
  init_antModels();
91083
91186
  EFFORT_LEVELS = [
91187
+ "minimal",
91084
91188
  "low",
91085
91189
  "medium",
91086
91190
  "high",
91191
+ "xhigh",
91087
91192
  "max"
91088
91193
  ];
91194
+ OLLAMA_GRADED_THINK_MODEL_RE = /gpt-oss/i;
91089
91195
  MODELO_DEFAULT_EFFORT_CONFIG_DEFAULT = {
91090
91196
  enabled: true,
91091
91197
  dialogTitle: "We recommend medium effort for modelO",
@@ -92658,6 +92764,7 @@ import { randomUUID as randomUUID5 } from "crypto";
92658
92764
  async function createOpenAICompatibleClient(options) {
92659
92765
  const endpoint = normalizeOpenAICompatibleBaseUrl(options.baseUrl);
92660
92766
  const maxRetries = options.maxRetries;
92767
+ const providerId = options.providerId ?? "openai-compatible";
92661
92768
  async function doRequest(params, requestOptions) {
92662
92769
  const response = await fetchWithProviderReliability(endpoint, {
92663
92770
  method: "POST",
@@ -92666,7 +92773,7 @@ async function createOpenAICompatibleClient(options) {
92666
92773
  ...options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {},
92667
92774
  ...requestOptions?.headers ?? {}
92668
92775
  },
92669
- body: JSON.stringify(toOpenAICompatibleRequest(params))
92776
+ body: JSON.stringify(toOpenAICompatibleRequest(params, providerId))
92670
92777
  }, {
92671
92778
  maxRetries,
92672
92779
  timeoutMs: requestOptions?.timeoutMs,
@@ -92689,7 +92796,7 @@ async function createOpenAICompatibleClient(options) {
92689
92796
  ...options.apiKey ? { Authorization: `Bearer ${options.apiKey}` } : {},
92690
92797
  ...requestOptions?.headers ?? {}
92691
92798
  },
92692
- body: JSON.stringify(toOpenAICompatibleRequest({ ...params, stream: true }))
92799
+ body: JSON.stringify(toOpenAICompatibleRequest({ ...params, stream: true }, providerId))
92693
92800
  }, {
92694
92801
  maxRetries,
92695
92802
  timeoutMs: requestOptions?.timeoutMs,
@@ -92747,7 +92854,7 @@ function toOpenAICompatibleRequest(params, providerName = "openai-compatible") {
92747
92854
  const openRouterReasoning = providerName === "openrouter" && reasoningEffort ? {
92748
92855
  effort: toOpenRouterReasoningEffort(String(params.model ?? ""), reasoningEffort)
92749
92856
  } : undefined;
92750
- const compatibleReasoningEffort = reasoningEffort === "max" ? "high" : reasoningEffort;
92857
+ const compatibleReasoningEffort = reasoningEffort;
92751
92858
  const openRouterServerSearch = providerName === "openrouter" && tools.some((tool) => tool?.type === "openrouter:web_search");
92752
92859
  const toolChoice = openRouterServerSearch ? undefined : mapOpenAIToolChoice(params.tool_choice);
92753
92860
  return {
@@ -92780,7 +92887,7 @@ function toOpenAIResponseFormat(format4) {
92780
92887
  }
92781
92888
  function toOpenAIReasoningEffort(params) {
92782
92889
  const requested = params.output_config?.effort;
92783
- if (requested === "low" || requested === "medium" || requested === "high" || requested === "max") {
92890
+ if (requested === "minimal" || requested === "low" || requested === "medium" || requested === "high" || requested === "xhigh" || requested === "max") {
92784
92891
  return requested;
92785
92892
  }
92786
92893
  if (params.thinking?.type === "adaptive")
@@ -93736,11 +93843,9 @@ function structuredTextConfig(outputConfig) {
93736
93843
  }
93737
93844
  function reasoningConfig(params) {
93738
93845
  const requested = params.output_config?.effort;
93739
- if (requested === "low" || requested === "medium" || requested === "high") {
93846
+ if (requested === "minimal" || requested === "low" || requested === "medium" || requested === "high" || requested === "xhigh" || requested === "max") {
93740
93847
  return { effort: requested };
93741
93848
  }
93742
- if (requested === "max")
93743
- return { effort: "high" };
93744
93849
  if (params.thinking?.type === "adaptive")
93745
93850
  return { effort: "medium" };
93746
93851
  if (params.thinking?.type !== "enabled")
@@ -95655,7 +95760,8 @@ async function createOpenAICompatibleProviderClient(providerId, options = {}) {
95655
95760
  return await createOpenAICompatibleClient2({
95656
95761
  baseUrl,
95657
95762
  apiKey,
95658
- maxRetries: options.maxRetries ?? 3
95763
+ maxRetries: options.maxRetries ?? 3,
95764
+ providerId
95659
95765
  });
95660
95766
  }
95661
95767
  async function createSubscriptionClient(providerId, options = {}) {
@@ -108252,7 +108358,7 @@ var init_auth = __esm(() => {
108252
108358
 
108253
108359
  // src/utils/userAgent.ts
108254
108360
  function getURCodeUserAgent() {
108255
- return `ur/${"1.81.6"}`;
108361
+ return `ur/${"1.81.8"}`;
108256
108362
  }
108257
108363
 
108258
108364
  // src/utils/workloadContext.ts
@@ -108274,7 +108380,7 @@ function getUserAgent() {
108274
108380
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
108275
108381
  const workload = getWorkload();
108276
108382
  const workloadSuffix = workload ? `, workload/${workload}` : "";
108277
- return `ur-cli/${"1.81.6"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
108383
+ return `ur-cli/${"1.81.8"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
108278
108384
  }
108279
108385
  function getMCPUserAgent() {
108280
108386
  const parts = [];
@@ -108288,7 +108394,7 @@ function getMCPUserAgent() {
108288
108394
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
108289
108395
  }
108290
108396
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
108291
- return `ur/${"1.81.6"}${suffix}`;
108397
+ return `ur/${"1.81.8"}${suffix}`;
108292
108398
  }
108293
108399
  function getWebFetchUserAgent() {
108294
108400
  return `UR-User (${getURCodeUserAgent()})`;
@@ -108426,7 +108532,7 @@ var init_user = __esm(() => {
108426
108532
  deviceId,
108427
108533
  sessionId: getSessionId(),
108428
108534
  email: getEmail(),
108429
- appVersion: "1.81.6",
108535
+ appVersion: "1.81.8",
108430
108536
  platform: getHostPlatformForAnalytics(),
108431
108537
  organizationUuid,
108432
108538
  accountUuid,
@@ -116313,7 +116419,7 @@ var init_metadata = __esm(() => {
116313
116419
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
116314
116420
  WHITESPACE_REGEX = /\s+/;
116315
116421
  getVersionBase = memoize_default(() => {
116316
- const match = "1.81.6".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
116422
+ const match = "1.81.8".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
116317
116423
  return match ? match[0] : undefined;
116318
116424
  });
116319
116425
  buildEnvContext = memoize_default(async () => {
@@ -116353,7 +116459,7 @@ var init_metadata = __esm(() => {
116353
116459
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
116354
116460
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
116355
116461
  isURAiAuth: isURAISubscriber(),
116356
- version: "1.81.6",
116462
+ version: "1.81.8",
116357
116463
  versionBase: getVersionBase(),
116358
116464
  buildTime: "",
116359
116465
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -117023,7 +117129,7 @@ function initialize1PEventLogging() {
117023
117129
  const platform2 = getPlatform();
117024
117130
  const attributes = {
117025
117131
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
117026
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.81.6"
117132
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.81.8"
117027
117133
  };
117028
117134
  if (platform2 === "wsl") {
117029
117135
  const wslVersion = getWslVersion();
@@ -117051,7 +117157,7 @@ function initialize1PEventLogging() {
117051
117157
  })
117052
117158
  ]
117053
117159
  });
117054
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.81.6");
117160
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.81.8");
117055
117161
  }
117056
117162
  async function reinitialize1PEventLoggingIfConfigChanged() {
117057
117163
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -119632,7 +119738,7 @@ var init_types2 = __esm(() => {
119632
119738
  syntaxHighlightingDisabled: exports_external.boolean().optional().describe("Whether to disable syntax highlighting in diffs"),
119633
119739
  terminalTitleFromRename: exports_external.boolean().optional().describe("Whether /rename updates the terminal tab title (defaults to true). Set to false to keep auto-generated topic titles."),
119634
119740
  alwaysThinkingEnabled: exports_external.boolean().optional().describe("When false, thinking is disabled. When absent or true, thinking is " + "enabled automatically for supported models."),
119635
- effortLevel: exports_external.enum(process.env.USER_TYPE === "ant" ? ["low", "medium", "high", "max"] : ["low", "medium", "high"]).optional().catch(undefined).describe("Persisted effort level for supported models."),
119741
+ effortLevel: exports_external.enum(process.env.USER_TYPE === "ant" ? ["minimal", "low", "medium", "high", "xhigh", "max"] : ["minimal", "low", "medium", "high", "xhigh"]).optional().catch(undefined).describe("Persisted effort level for supported models."),
119636
119742
  advisorModel: exports_external.string().optional().describe("Advisor model for the server-side advisor tool."),
119637
119743
  fastMode: exports_external.boolean().optional().describe("When true, fast mode is enabled. When absent or false, fast mode is off."),
119638
119744
  fastModePerSessionOptIn: exports_external.boolean().optional().describe("When true, fast mode does not persist across sessions. Each session starts with fast mode off."),
@@ -127017,7 +127123,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
127017
127123
  function formatA2AV1AgentCard(options = {}, pretty = true) {
127018
127124
  return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
127019
127125
  }
127020
- var urVersion = "1.81.6", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
127126
+ var urVersion = "1.81.8", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
127021
127127
  var init_trends = __esm(() => {
127022
127128
  init_a2aCardSignature();
127023
127129
  coverage = [
@@ -129907,7 +130013,7 @@ function getAttributionHeader(fingerprint) {
129907
130013
  if (!isAttributionHeaderEnabled()) {
129908
130014
  return "";
129909
130015
  }
129910
- const version2 = `${"1.81.6"}.${fingerprint}`;
130016
+ const version2 = `${"1.81.8"}.${fingerprint}`;
129911
130017
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
129912
130018
  const cch = "";
129913
130019
  const workload = getWorkload();
@@ -184828,7 +184934,7 @@ var init_projectSafety = __esm(() => {
184828
184934
  function getInstruments() {
184829
184935
  if (instruments)
184830
184936
  return instruments;
184831
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.81.6");
184937
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.81.8");
184832
184938
  instruments = {
184833
184939
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184834
184940
  description: "GenAI operation duration.",
@@ -184926,7 +185032,7 @@ function genAiAgentAttributes() {
184926
185032
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
184927
185033
  "gen_ai.provider.name": "ur",
184928
185034
  "gen_ai.agent.name": "UR-Nexus",
184929
- "gen_ai.agent.version": "1.81.6"
185035
+ "gen_ai.agent.version": "1.81.8"
184930
185036
  };
184931
185037
  }
184932
185038
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -184947,7 +185053,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
184947
185053
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
184948
185054
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
184949
185055
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
184950
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.6").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
185056
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.8").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184951
185057
  }
184952
185058
  function endGenAiWorkflowSpan(span, options2 = {}) {
184953
185059
  try {
@@ -184985,7 +185091,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
184985
185091
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
184986
185092
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
184987
185093
  }
184988
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.6").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
185094
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.8").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184989
185095
  }
184990
185096
  function endGenAiMemorySpan(span, options2 = {}) {
184991
185097
  try {
@@ -278700,7 +278806,7 @@ function getTelemetryAttributes() {
278700
278806
  attributes["session.id"] = sessionId;
278701
278807
  }
278702
278808
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278703
- attributes["app.version"] = "1.81.6";
278809
+ attributes["app.version"] = "1.81.8";
278704
278810
  }
278705
278811
  const oauthAccount = getOauthAccountInfo();
278706
278812
  if (oauthAccount) {
@@ -320104,7 +320210,7 @@ function getInstallationEnv() {
320104
320210
  return;
320105
320211
  }
320106
320212
  function getURCodeVersion() {
320107
- return "1.81.6";
320213
+ return "1.81.8";
320108
320214
  }
320109
320215
  async function getInstalledVSCodeExtensionVersion(command) {
320110
320216
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -327474,7 +327580,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
327474
327580
  const client2 = new Client({
327475
327581
  name: "ur",
327476
327582
  title: "UR",
327477
- version: "1.81.6",
327583
+ version: "1.81.8",
327478
327584
  description: "UR-Nexus autonomous engineering workflow engine",
327479
327585
  websiteUrl: PRODUCT_URL
327480
327586
  }, {
@@ -327835,7 +327941,7 @@ var init_client5 = __esm(() => {
327835
327941
  const client2 = new Client({
327836
327942
  name: "ur",
327837
327943
  title: "UR",
327838
- version: "1.81.6",
327944
+ version: "1.81.8",
327839
327945
  description: "UR-Nexus autonomous engineering workflow engine",
327840
327946
  websiteUrl: PRODUCT_URL
327841
327947
  }, {
@@ -340608,7 +340714,7 @@ async function createRuntime() {
340608
340714
  bootstrapTelemetry();
340609
340715
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
340610
340716
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
340611
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.81.6"
340717
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.81.8"
340612
340718
  }));
340613
340719
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
340614
340720
  resource,
@@ -340641,11 +340747,11 @@ async function createRuntime() {
340641
340747
  setMeterProvider(meterProvider);
340642
340748
  setLoggerProvider(loggerProvider);
340643
340749
  if (meterProvider) {
340644
- const meter = meterProvider.getMeter("ur-agent", "1.81.6");
340750
+ const meter = meterProvider.getMeter("ur-agent", "1.81.8");
340645
340751
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
340646
340752
  }
340647
340753
  if (loggerProvider) {
340648
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.81.6"));
340754
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.81.8"));
340649
340755
  }
340650
340756
  if (!cleanupRegistered3) {
340651
340757
  cleanupRegistered3 = true;
@@ -341307,9 +341413,9 @@ async function assertMinVersion() {
341307
341413
  if (false) {}
341308
341414
  try {
341309
341415
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
341310
- if (versionConfig.minVersion && lt("1.81.6", versionConfig.minVersion)) {
341416
+ if (versionConfig.minVersion && lt("1.81.8", versionConfig.minVersion)) {
341311
341417
  console.error(`
341312
- It looks like your version of UR (${"1.81.6"}) needs an update.
341418
+ It looks like your version of UR (${"1.81.8"}) needs an update.
341313
341419
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
341314
341420
 
341315
341421
  To update, please run:
@@ -341525,7 +341631,7 @@ async function installGlobalPackage(specificVersion) {
341525
341631
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
341526
341632
  logEvent("tengu_auto_updater_lock_contention", {
341527
341633
  pid: process.pid,
341528
- currentVersion: "1.81.6"
341634
+ currentVersion: "1.81.8"
341529
341635
  });
341530
341636
  return "in_progress";
341531
341637
  }
@@ -341534,7 +341640,7 @@ async function installGlobalPackage(specificVersion) {
341534
341640
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
341535
341641
  logError2(new Error("Windows NPM detected in WSL environment"));
341536
341642
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
341537
- currentVersion: "1.81.6"
341643
+ currentVersion: "1.81.8"
341538
341644
  });
341539
341645
  console.error(`
341540
341646
  Error: Windows NPM detected in WSL
@@ -342069,7 +342175,7 @@ function detectLinuxGlobPatternWarnings() {
342069
342175
  }
342070
342176
  async function getDoctorDiagnostic() {
342071
342177
  const installationType = await getCurrentInstallationType();
342072
- const version2 = typeof MACRO !== "undefined" ? "1.81.6" : "unknown";
342178
+ const version2 = typeof MACRO !== "undefined" ? "1.81.8" : "unknown";
342073
342179
  const installationPath = await getInstallationPath();
342074
342180
  const invokedBinary = getInvokedBinary();
342075
342181
  const multipleInstallations = await detectMultipleInstallations();
@@ -343004,8 +343110,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
343004
343110
  const maxVersion = await getMaxVersion();
343005
343111
  if (maxVersion && gt(version2, maxVersion)) {
343006
343112
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
343007
- if (gte("1.81.6", maxVersion)) {
343008
- logForDebugging(`Native installer: current version ${"1.81.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
343113
+ if (gte("1.81.8", maxVersion)) {
343114
+ logForDebugging(`Native installer: current version ${"1.81.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
343009
343115
  logEvent("tengu_native_update_skipped_max_version", {
343010
343116
  latency_ms: Date.now() - startTime,
343011
343117
  max_version: maxVersion,
@@ -343016,7 +343122,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
343016
343122
  version2 = maxVersion;
343017
343123
  }
343018
343124
  }
343019
- if (!forceReinstall && version2 === "1.81.6" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
343125
+ if (!forceReinstall && version2 === "1.81.8" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
343020
343126
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
343021
343127
  logEvent("tengu_native_update_complete", {
343022
343128
  latency_ms: Date.now() - startTime,
@@ -346817,7 +346923,7 @@ var init_coreSchemas = __esm(() => {
346817
346923
  displayName: exports_external.string().describe("Human-readable display name"),
346818
346924
  description: exports_external.string().describe("Description of the model's capabilities"),
346819
346925
  supportsEffort: exports_external.boolean().optional().describe("Whether this model supports effort levels"),
346820
- supportedEffortLevels: exports_external.array(exports_external.enum(["low", "medium", "high", "max"])).optional().describe("Available effort levels for this model"),
346926
+ supportedEffortLevels: exports_external.array(exports_external.enum(["minimal", "low", "medium", "high", "xhigh", "max"])).optional().describe("Available effort levels for this model"),
346821
346927
  supportsAdaptiveThinking: exports_external.boolean().optional().describe("Whether this model supports adaptive thinking (UR decides when and how much to think)"),
346822
346928
  supportsFastMode: exports_external.boolean().optional().describe("Whether this model supports fast mode"),
346823
346929
  supportsAutoMode: exports_external.boolean().optional().describe("Whether this model supports auto mode")
@@ -346847,7 +346953,10 @@ var init_coreSchemas = __esm(() => {
346847
346953
  maxTurns: exports_external.number().int().positive().optional().describe("Maximum number of agentic turns (API round-trips) before stopping"),
346848
346954
  background: exports_external.boolean().optional().describe("Run this agent as a background task (non-blocking, fire-and-forget) when invoked"),
346849
346955
  memory: exports_external.enum(["user", "project", "local"]).optional().describe("Scope for auto-loading agent memory files. 'user' - ~/.ur/agent-memory/<agentType>/, 'project' - .ur/agent-memory/<agentType>/, 'local' - .ur/agent-memory-local/<agentType>/"),
346850
- effort: exports_external.union([exports_external.enum(["low", "medium", "high", "max"]), exports_external.number().int()]).optional().describe("Reasoning effort level for this agent. Either a named level or an integer"),
346956
+ effort: exports_external.union([
346957
+ exports_external.enum(["minimal", "low", "medium", "high", "xhigh", "max"]),
346958
+ exports_external.number().int()
346959
+ ]).optional().describe("Reasoning effort level for this agent. Either a named level or an integer"),
346851
346960
  permissionMode: PermissionModeSchema().optional().describe("Permission mode controlling how tool executions are handled")
346852
346961
  }).describe("Definition for a custom subagent that can be invoked via the Agent tool."));
346853
346962
  SettingSourceSchema = lazySchema(() => exports_external.enum(["user", "project", "local"]).describe("Source for loading filesystem-based settings. " + "'user' - Global user settings (~/.ur/settings.json). " + "'project' - Project settings (.ur/settings.json). " + "'local' - Local settings (.ur/settings.local.json)."));
@@ -413703,7 +413812,7 @@ function isAnyTracingEnabled() {
413703
413812
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
413704
413813
  }
413705
413814
  function getTracer() {
413706
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.81.6");
413815
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.81.8");
413707
413816
  }
413708
413817
  function createSpanAttributes(spanType, customAttributes = {}) {
413709
413818
  const baseAttributes = getTelemetryAttributes();
@@ -443842,7 +443951,7 @@ function Feedback({
443842
443951
  platform: env2.platform,
443843
443952
  gitRepo: envInfo.isGit,
443844
443953
  terminal: env2.terminal,
443845
- version: "1.81.6",
443954
+ version: "1.81.8",
443846
443955
  transcript: normalizeMessagesForAPI(messages),
443847
443956
  errors: sanitizedErrors,
443848
443957
  lastApiRequest: getLastAPIRequest(),
@@ -444034,7 +444143,7 @@ function Feedback({
444034
444143
  ", ",
444035
444144
  env2.terminal,
444036
444145
  ", v",
444037
- "1.81.6"
444146
+ "1.81.8"
444038
444147
  ]
444039
444148
  }, undefined, true, undefined, this)
444040
444149
  ]
@@ -444140,7 +444249,7 @@ ${sanitizedDescription}
444140
444249
  ` + `**Environment Info**
444141
444250
  ` + `- Platform: ${env2.platform}
444142
444251
  ` + `- Terminal: ${env2.terminal}
444143
- ` + `- Version: ${"1.81.6"}
444252
+ ` + `- Version: ${"1.81.8"}
444144
444253
  ` + `- Feedback ID: ${feedbackId}
444145
444254
  ` + `
444146
444255
  **Errors**
@@ -447250,7 +447359,7 @@ function buildPrimarySection() {
447250
447359
  }, undefined, false, undefined, this);
447251
447360
  return [{
447252
447361
  label: "Version",
447253
- value: "1.81.6"
447362
+ value: "1.81.8"
447254
447363
  }, {
447255
447364
  label: "Session name",
447256
447365
  value: nameValue
@@ -448025,12 +448134,14 @@ function getEffortNotificationText(effortValue, model, provider) {
448025
448134
  }
448026
448135
  function effortLevelToSymbol(level) {
448027
448136
  switch (level) {
448137
+ case "minimal":
448028
448138
  case "low":
448029
448139
  return EFFORT_LOW;
448030
448140
  case "medium":
448031
448141
  return EFFORT_MEDIUM;
448032
448142
  case "high":
448033
448143
  return EFFORT_HIGH;
448144
+ case "xhigh":
448034
448145
  case "max":
448035
448146
  return EFFORT_MAX;
448036
448147
  default:
@@ -448102,6 +448213,8 @@ function ModelPicker({
448102
448213
  const [pickerError, setPickerError] = import_react102.useState(null);
448103
448214
  const [loadingModels, setLoadingModels] = import_react102.useState(true);
448104
448215
  const [modelReloadToken, setModelReloadToken] = import_react102.useState(0);
448216
+ const [effortCapabilityLoading, setEffortCapabilityLoading] = import_react102.useState(false);
448217
+ const [effortCapabilityWarning, setEffortCapabilityWarning] = import_react102.useState(null);
448105
448218
  const effectiveSettings = getInitialSettings();
448106
448219
  const currentProvider = getActiveProviderSettings(effectiveSettings).active ?? "ollama";
448107
448220
  import_react102.useEffect(() => {
@@ -448120,6 +448233,7 @@ function ModelPicker({
448120
448233
  value: model.id,
448121
448234
  label: modelLabels.get(model.id) ?? model.displayName,
448122
448235
  description: `${model.description} \xB7 ${result.source}`,
448236
+ reasoning: model.reasoning,
448123
448237
  ...model.supportedParameters !== undefined && !model.supportedParameters.includes("tools") ? { disabled: true } : {}
448124
448238
  })));
448125
448239
  setPickerError(result.warning ?? null);
@@ -448134,6 +448248,45 @@ function ModelPicker({
448134
448248
  });
448135
448249
  return () => controller.abort();
448136
448250
  }, [currentProvider, modelReloadToken]);
448251
+ import_react102.useEffect(() => {
448252
+ if (currentProvider !== "llama.cpp" || !focusedValue) {
448253
+ setEffortCapabilityLoading(false);
448254
+ setEffortCapabilityWarning(null);
448255
+ return;
448256
+ }
448257
+ const focused = providerModelOptions.find((model) => model.value === focusedValue);
448258
+ if (!focused || focused.reasoning !== undefined) {
448259
+ setEffortCapabilityLoading(false);
448260
+ setEffortCapabilityWarning(null);
448261
+ return;
448262
+ }
448263
+ const controller = new AbortController;
448264
+ let cancelled = false;
448265
+ const timer = setTimeout(() => {
448266
+ setEffortCapabilityLoading(true);
448267
+ setEffortCapabilityWarning(null);
448268
+ ensureProviderReasoningCapabilitiesForModel(currentProvider, focusedValue, {
448269
+ settings: effectiveSettings,
448270
+ signal: controller.signal
448271
+ }).then((reasoning) => {
448272
+ if (cancelled)
448273
+ return;
448274
+ setProviderModelOptions((previous) => previous.map((model) => model.value === focusedValue ? { ...model, reasoning: reasoning ?? { supportedEfforts: [] } } : model));
448275
+ }).catch((error40) => {
448276
+ if (cancelled || controller.signal.aborted)
448277
+ return;
448278
+ setEffortCapabilityWarning(`Could not verify effort levels: ${error40 instanceof Error ? error40.message : String(error40)}`);
448279
+ }).finally(() => {
448280
+ if (!cancelled)
448281
+ setEffortCapabilityLoading(false);
448282
+ });
448283
+ }, 180);
448284
+ return () => {
448285
+ cancelled = true;
448286
+ clearTimeout(timer);
448287
+ controller.abort();
448288
+ };
448289
+ }, [currentProvider, focusedValue, providerModelOptions]);
448137
448290
  use_input_default((input, key) => {
448138
448291
  if (key.ctrl && (input === "r" || input === "R")) {
448139
448292
  setModelReloadToken((token) => token + 1);
@@ -448160,22 +448313,22 @@ function ModelPicker({
448160
448313
  const focusedModelName = selectOptions.find((opt) => opt.value === focusedValue)?.label;
448161
448314
  const focusedModelOption = selectOptions.find((opt) => opt.value === focusedValue);
448162
448315
  const focusedModel = resolveOptionModel(focusedValue);
448163
- const focusedSupportsEffort = focusedModel ? modelSupportsEffort(focusedModel) : false;
448164
- const focusedSupportsMax = focusedModel ? modelSupportsMaxEffort(focusedModel) : false;
448316
+ const focusedEffortLevels = focusedModel ? getSupportedEffortLevelsForModel(focusedModel, currentProvider) : [];
448317
+ const focusedSupportsEffort = focusedModel ? modelSupportsEffort(focusedModel, currentProvider) : false;
448165
448318
  const focusedSupportsThinking = focusedModel ? modelSupportsThinking(focusedModel) : false;
448166
- const focusedDefaultEffort = getDefaultEffortLevelForOption(focusedValue);
448167
- const displayEffort = effort === "max" && !focusedSupportsMax ? "high" : effort;
448319
+ const focusedDefaultEffort = getDefaultEffortLevelForOption(focusedValue, currentProvider);
448320
+ const displayEffort = focusedModel ? resolveProviderEffortLevel(focusedModel, effort ?? focusedDefaultEffort, currentProvider) ?? focusedDefaultEffort : focusedDefaultEffort;
448168
448321
  const handleFocus = (value) => {
448169
448322
  setFocusedValue(value);
448170
448323
  if (!hasToggledEffort && effortValue === undefined) {
448171
- setEffort(getDefaultEffortLevelForOption(value));
448324
+ setEffort(getDefaultEffortLevelForOption(value, currentProvider));
448172
448325
  }
448173
448326
  };
448174
448327
  const handleCycleEffort = (direction) => {
448175
448328
  if (!focusedSupportsEffort) {
448176
448329
  return;
448177
448330
  }
448178
- setEffort((prev) => cycleEffortLevel(prev ?? focusedDefaultEffort, direction, focusedSupportsMax));
448331
+ setEffort((prev) => cycleEffortLevel((focusedModel ? resolveProviderEffortLevel(focusedModel, prev ?? focusedDefaultEffort, currentProvider) : undefined) ?? focusedDefaultEffort, direction, focusedEffortLevels));
448179
448332
  setHasToggledEffort(true);
448180
448333
  };
448181
448334
  const handleToggleThinking = () => {
@@ -448191,8 +448344,10 @@ function ModelPicker({
448191
448344
  "modelPicker:toggleThinking": handleToggleThinking
448192
448345
  }, { context: "ModelPicker" });
448193
448346
  function handleSelect(value) {
448347
+ const selectedModel = resolveOptionModel(value);
448348
+ const selectedEffort = hasToggledEffort && selectedModel && effort ? resolveProviderEffortLevel(selectedModel, effort, currentProvider) : undefined;
448194
448349
  logEvent("tengu_model_command_menu_effort", {
448195
- effort
448350
+ effort: selectedEffort
448196
448351
  });
448197
448352
  if (value !== NO_PREFERENCE) {
448198
448353
  const validation = validateProviderModelPair(currentProvider, value, {
@@ -448204,7 +448359,7 @@ function ModelPicker({
448204
448359
  }
448205
448360
  }
448206
448361
  if (!skipSettingsWrite) {
448207
- const effortLevel = resolvePickerEffortPersistence(effort, getDefaultEffortLevelForOption(value), getSettingsForSource("userSettings")?.effortLevel, hasToggledEffort);
448362
+ const effortLevel = resolvePickerEffortPersistence(hasToggledEffort ? selectedEffort : effort, getDefaultEffortLevelForOption(value, currentProvider), getSettingsForSource("userSettings")?.effortLevel, hasToggledEffort);
448208
448363
  const persistable = toPersistableEffort(effortLevel);
448209
448364
  if (persistable !== undefined) {
448210
448365
  updateSettingsForSource("userSettings", {
@@ -448222,8 +448377,6 @@ function ModelPicker({
448222
448377
  ...hasToggledThinking ? { thinkingEnabled } : {}
448223
448378
  }));
448224
448379
  }
448225
- const selectedModel = resolveOptionModel(value);
448226
- const selectedEffort = hasToggledEffort && selectedModel && modelSupportsEffort(selectedModel) ? effort : undefined;
448227
448380
  if (value === NO_PREFERENCE) {
448228
448381
  onSelect(null, selectedEffort);
448229
448382
  return;
@@ -448375,21 +448528,33 @@ function ModelPicker({
448375
448528
  marginBottom: 1,
448376
448529
  flexDirection: "column",
448377
448530
  children: [
448378
- focusedSupportsEffort ? /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448379
- dimColor: true,
448531
+ focusedSupportsEffort ? /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(jsx_dev_runtime174.Fragment, {
448380
448532
  children: [
448381
- /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(EffortLevelIndicator, {
448382
- effort: displayEffort
448383
- }, undefined, false, undefined, this),
448384
- " ",
448385
- capitalize_default(displayEffort),
448386
- " effort",
448387
- displayEffort === focusedDefaultEffort ? " (default)" : "",
448388
- " ",
448389
448533
  /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448534
+ dimColor: true,
448535
+ children: [
448536
+ /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(EffortLevelIndicator, {
448537
+ effort: displayEffort
448538
+ }, undefined, false, undefined, this),
448539
+ " ",
448540
+ capitalize_default(displayEffort),
448541
+ " effort",
448542
+ displayEffort === focusedDefaultEffort ? " (default)" : "",
448543
+ " ",
448544
+ /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448545
+ color: "subtle",
448546
+ children: "\u2190 \u2192 to adjust"
448547
+ }, undefined, false, undefined, this)
448548
+ ]
448549
+ }, undefined, true, undefined, this),
448550
+ /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448551
+ dimColor: true,
448390
448552
  color: "subtle",
448391
- children: "\u2190 \u2192 to adjust"
448392
- }, undefined, false, undefined, this)
448553
+ children: [
448554
+ "Provider levels: ",
448555
+ focusedEffortLevels.join(" \xB7 ")
448556
+ ]
448557
+ }, undefined, true, undefined, this)
448393
448558
  ]
448394
448559
  }, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448395
448560
  color: "subtle",
@@ -448398,9 +448563,14 @@ function ModelPicker({
448398
448563
  effort: undefined
448399
448564
  }, undefined, false, undefined, this),
448400
448565
  " Effort not supported",
448401
- focusedModelName ? ` for ${focusedModelName}` : ""
448566
+ focusedModelName ? ` for ${focusedModelName}` : "",
448567
+ effortCapabilityLoading ? " \xB7 checking provider\u2026" : ""
448402
448568
  ]
448403
448569
  }, undefined, true, undefined, this),
448570
+ effortCapabilityWarning && /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448571
+ color: "warning",
448572
+ children: effortCapabilityWarning
448573
+ }, undefined, false, undefined, this),
448404
448574
  focusedSupportsThinking ? /* @__PURE__ */ jsx_dev_runtime174.jsxDEV(ThemedText, {
448405
448575
  dimColor: true,
448406
448576
  children: [
@@ -448491,8 +448661,8 @@ function EffortLevelIndicator({
448491
448661
  children: effortLevelToSymbol(effort ?? "low")
448492
448662
  }, undefined, false, undefined, this);
448493
448663
  }
448494
- function cycleEffortLevel(current, direction, includeMax) {
448495
- const levels = includeMax ? ["low", "medium", "high", "max"] : ["low", "medium", "high"];
448664
+ function cycleEffortLevel(current, direction, supportedLevels) {
448665
+ const levels = supportedLevels.length > 0 ? [...supportedLevels] : [current];
448496
448666
  const idx = levels.indexOf(current);
448497
448667
  const currentIndex = idx !== -1 ? idx : levels.indexOf("high");
448498
448668
  if (direction === "right") {
@@ -448500,10 +448670,14 @@ function cycleEffortLevel(current, direction, includeMax) {
448500
448670
  }
448501
448671
  return levels[(currentIndex - 1 + levels.length) % levels.length];
448502
448672
  }
448503
- function getDefaultEffortLevelForOption(value) {
448673
+ function getDefaultEffortLevelForOption(value, provider = getActiveProviderSettings(getInitialSettings()).active ?? "ollama") {
448504
448674
  const resolved = resolveOptionModel(value) ?? getDefaultMainLoopModel();
448505
- const defaultValue = getDefaultEffortForModel(resolved);
448506
- return defaultValue !== undefined ? convertEffortValueToLevel(defaultValue) : "high";
448675
+ const levels = getSupportedEffortLevelsForModel(resolved, provider);
448676
+ const defaultValue = getDefaultEffortForModel(resolved, provider);
448677
+ if (defaultValue !== undefined) {
448678
+ return resolveProviderEffortLevel(resolved, convertEffortValueToLevel(defaultValue), provider) ?? "high";
448679
+ }
448680
+ return levels.includes("high") ? "high" : levels.at(-1) ?? "high";
448507
448681
  }
448508
448682
  var import_react102, jsx_dev_runtime174, NO_PREFERENCE = "__NO_PREFERENCE__", selectEffortValue = (s) => s.effortValue, selectFastMode = (s) => isFastModeEnabled() ? s.fastMode : false, selectThinkingEnabled = (s) => s.thinkingEnabled;
448509
448683
  var init_ModelPicker = __esm(() => {
@@ -450688,7 +450862,7 @@ function Config({
450688
450862
  }
450689
450863
  }, undefined, false, undefined, this)
450690
450864
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
450691
- currentVersion: "1.81.6",
450865
+ currentVersion: "1.81.8",
450692
450866
  onChoice: (choice) => {
450693
450867
  setShowSubmenu(null);
450694
450868
  setTabsHidden(false);
@@ -450700,7 +450874,7 @@ function Config({
450700
450874
  autoUpdatesChannel: "stable"
450701
450875
  };
450702
450876
  if (choice === "stay") {
450703
- newSettings.minimumVersion = "1.81.6";
450877
+ newSettings.minimumVersion = "1.81.8";
450704
450878
  }
450705
450879
  updateSettingsForSource("userSettings", newSettings);
450706
450880
  setSettingsData((prev_27) => ({
@@ -459009,7 +459183,7 @@ function HelpV2(t0) {
459009
459183
  let t6;
459010
459184
  if ($2[31] !== tabs) {
459011
459185
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
459012
- title: `UR v${"1.81.6"}`,
459186
+ title: `UR v${"1.81.8"}`,
459013
459187
  color: "professionalBlue",
459014
459188
  defaultTab: "general",
459015
459189
  children: tabs
@@ -459942,7 +460116,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
459942
460116
  async function handleInitialize(options2) {
459943
460117
  return {
459944
460118
  name: "UR",
459945
- version: "1.81.6",
460119
+ version: "1.81.8",
459946
460120
  protocolVersion: "0.1.0",
459947
460121
  workspaceRoot: options2.cwd,
459948
460122
  capabilities: {
@@ -477050,7 +477224,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
477050
477224
  return [];
477051
477225
  }
477052
477226
  }
477053
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.6") {
477227
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.8") {
477054
477228
  if (process.env.USER_TYPE === "ant") {
477055
477229
  const changelog = "";
477056
477230
  if (changelog) {
@@ -477077,7 +477251,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.6")
477077
477251
  releaseNotes
477078
477252
  };
477079
477253
  }
477080
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.81.6") {
477254
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.81.8") {
477081
477255
  if (process.env.USER_TYPE === "ant") {
477082
477256
  const changelog = "";
477083
477257
  if (changelog) {
@@ -479985,7 +480159,7 @@ function getRecentActivitySync() {
479985
480159
  return cachedActivity;
479986
480160
  }
479987
480161
  function getLogoDisplayData() {
479988
- const version2 = process.env.DEMO_VERSION ?? "1.81.6";
480162
+ const version2 = process.env.DEMO_VERSION ?? "1.81.8";
479989
480163
  const serverUrl = getDirectConnectServerUrl();
479990
480164
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
479991
480165
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -480893,7 +481067,7 @@ function LogoV2() {
480893
481067
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
480894
481068
  t2 = () => {
480895
481069
  const currentConfig = getGlobalConfig();
480896
- if (currentConfig.lastReleaseNotesSeen === "1.81.6") {
481070
+ if (currentConfig.lastReleaseNotesSeen === "1.81.8") {
480897
481071
  return;
480898
481072
  }
480899
481073
  saveGlobalConfig(_temp325);
@@ -481581,12 +481755,12 @@ function LogoV2() {
481581
481755
  return t41;
481582
481756
  }
481583
481757
  function _temp325(current) {
481584
- if (current.lastReleaseNotesSeen === "1.81.6") {
481758
+ if (current.lastReleaseNotesSeen === "1.81.8") {
481585
481759
  return current;
481586
481760
  }
481587
481761
  return {
481588
481762
  ...current,
481589
- lastReleaseNotesSeen: "1.81.6"
481763
+ lastReleaseNotesSeen: "1.81.8"
481590
481764
  };
481591
481765
  }
481592
481766
  function _temp241(s_0) {
@@ -497536,7 +497710,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
497536
497710
  if (spec.name !== specName) {
497537
497711
  throw new Error("Agentic CI workflow spec name does not match");
497538
497712
  }
497539
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.6" : "1.81.6");
497713
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.8" : "1.81.8");
497540
497714
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
497541
497715
  throw new Error("invalid ur-agent package version");
497542
497716
  }
@@ -498529,7 +498703,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
498529
498703
  path: ".github/workflows/ur.yml",
498530
498704
  root: "project",
498531
498705
  content: compileAgenticCiWorkflow("default", {
498532
- packageVersion: typeof MACRO !== "undefined" ? "1.81.6" : "1.81.6"
498706
+ packageVersion: typeof MACRO !== "undefined" ? "1.81.8" : "1.81.8"
498533
498707
  })
498534
498708
  },
498535
498709
  {
@@ -498592,7 +498766,7 @@ function value(tokens, flag) {
498592
498766
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
498593
498767
  }
498594
498768
  function cliVersion() {
498595
- return typeof MACRO !== "undefined" ? "1.81.6" : "1.81.6";
498769
+ return typeof MACRO !== "undefined" ? "1.81.8" : "1.81.8";
498596
498770
  }
498597
498771
  function workflowPath(cwd2) {
498598
498772
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -504448,7 +504622,7 @@ function createAcpStdioApp(deps) {
504448
504622
  }
504449
504623
  },
504450
504624
  authMethods: [],
504451
- agentInfo: { name: "UR-Nexus", version: "1.81.6" }
504625
+ agentInfo: { name: "UR-Nexus", version: "1.81.8" }
504452
504626
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
504453
504627
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
504454
504628
  await runtime2.announce({
@@ -504545,7 +504719,7 @@ function createAcpStdioAgent(deps) {
504545
504719
  }
504546
504720
  },
504547
504721
  authMethods: [],
504548
- agentInfo: { name: "UR-Nexus", version: "1.81.6" }
504722
+ agentInfo: { name: "UR-Nexus", version: "1.81.8" }
504549
504723
  });
504550
504724
  return;
504551
504725
  case "authenticate":
@@ -715797,7 +715971,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715797
715971
  smapsRollup,
715798
715972
  platform: process.platform,
715799
715973
  nodeVersion: process.version,
715800
- ccVersion: "1.81.6"
715974
+ ccVersion: "1.81.8"
715801
715975
  };
715802
715976
  }
715803
715977
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -716386,7 +716560,7 @@ var init_bridge_kick = __esm(() => {
716386
716560
  var call154 = async () => {
716387
716561
  return {
716388
716562
  type: "text",
716389
- value: "1.81.6"
716563
+ value: "1.81.8"
716390
716564
  };
716391
716565
  }, version2, version_default;
716392
716566
  var init_version = __esm(() => {
@@ -719398,6 +719572,8 @@ function ProviderFirstModelPicker({
719398
719572
  const [apiKeyCursorOffset, setApiKeyCursorOffset] = import_react186.useState(0);
719399
719573
  const [connectError, setConnectError] = import_react186.useState(null);
719400
719574
  const [credentialNotice, setCredentialNotice] = import_react186.useState(null);
719575
+ const [effortCapabilityLoading, setEffortCapabilityLoading] = import_react186.useState(false);
719576
+ const [effortCapabilityWarning, setEffortCapabilityWarning] = import_react186.useState(null);
719401
719577
  const [modelReloadToken, setModelReloadToken] = import_react186.useState(0);
719402
719578
  const terminalSize = import_react186.useContext(TerminalSizeContext);
719403
719579
  const keyInputColumns = getProviderKeyInputColumns(terminalSize?.columns);
@@ -719411,10 +719587,10 @@ function ProviderFirstModelPicker({
719411
719587
  async function loadProviderStatus() {
719412
719588
  setLoadingProviders(true);
719413
719589
  const providers = listProviders({ includeExternalAppBridges: true });
719414
- const settings = getSettingsForSource("userSettings");
719590
+ const settings = getInitialSettings();
719415
719591
  const options5 = await Promise.all(providers.map(async (provider) => {
719416
719592
  const status2 = await getProviderStatus(provider.id, {
719417
- settings: settings ?? undefined
719593
+ settings
719418
719594
  });
719419
719595
  const accessType = getProviderAccessTypeLabel(provider);
719420
719596
  return {
@@ -719445,7 +719621,7 @@ function ProviderFirstModelPicker({
719445
719621
  const providerId = selectedProvider.value;
719446
719622
  try {
719447
719623
  const result = await listModelsForProviderWithSource(providerId, {
719448
- settings: getSettingsForSource("userSettings") ?? undefined,
719624
+ settings: getInitialSettings(),
719449
719625
  signal: controller.signal,
719450
719626
  freshOnly: providerId === "openrouter"
719451
719627
  });
@@ -719481,6 +719657,45 @@ function ProviderFirstModelPicker({
719481
719657
  controller.abort();
719482
719658
  };
719483
719659
  }, [selectedProvider, modelReloadToken]);
719660
+ import_react186.useEffect(() => {
719661
+ if (selectedProvider?.value !== "llama.cpp" || !focusedModelValue) {
719662
+ setEffortCapabilityLoading(false);
719663
+ setEffortCapabilityWarning(null);
719664
+ return;
719665
+ }
719666
+ const focused = modelOptions.find((model) => model.value === focusedModelValue);
719667
+ if (!focused || focused.reasoning !== undefined) {
719668
+ setEffortCapabilityLoading(false);
719669
+ setEffortCapabilityWarning(null);
719670
+ return;
719671
+ }
719672
+ const controller = new AbortController;
719673
+ let cancelled = false;
719674
+ const timer = setTimeout(() => {
719675
+ setEffortCapabilityLoading(true);
719676
+ setEffortCapabilityWarning(null);
719677
+ ensureProviderReasoningCapabilitiesForModel("llama.cpp", focusedModelValue, {
719678
+ settings: getInitialSettings(),
719679
+ signal: controller.signal
719680
+ }).then((reasoning) => {
719681
+ if (cancelled)
719682
+ return;
719683
+ setModelOptions((previous) => previous.map((model) => model.value === focusedModelValue ? { ...model, reasoning: reasoning ?? { supportedEfforts: [] } } : model));
719684
+ }).catch((error40) => {
719685
+ if (cancelled || controller.signal.aborted)
719686
+ return;
719687
+ setEffortCapabilityWarning(`Could not verify effort levels: ${error40 instanceof Error ? error40.message : String(error40)}`);
719688
+ }).finally(() => {
719689
+ if (!cancelled)
719690
+ setEffortCapabilityLoading(false);
719691
+ });
719692
+ }, 180);
719693
+ return () => {
719694
+ cancelled = true;
719695
+ clearTimeout(timer);
719696
+ controller.abort();
719697
+ };
719698
+ }, [selectedProvider?.value, focusedModelValue, modelOptions]);
719484
719699
  use_input_default((_input, key) => {
719485
719700
  if (key.escape) {
719486
719701
  handleKeyCancel();
@@ -719505,10 +719720,11 @@ function ProviderFirstModelPicker({
719505
719720
  const focusedProvider = providerOptions.find((p2) => p2.value === focusedProviderValue);
719506
719721
  const focusedModel = modelOptions.find((m) => m.value === focusedModelValue);
719507
719722
  const focusedResolvedModel = focusedModel ? parseUserSpecifiedModel(focusedModel.value) : undefined;
719508
- const focusedSupportsEffort = focusedResolvedModel ? modelSupportsEffort(focusedResolvedModel) : false;
719509
- const focusedSupportsMax = focusedResolvedModel ? modelSupportsMaxEffort(focusedResolvedModel) : false;
719510
- const focusedDefaultEffort = focusedResolvedModel ? convertEffortValueToLevel(getDefaultEffortForModel(focusedResolvedModel) ?? "high") : "high";
719511
- const displayedEffort = effort === "max" && !focusedSupportsMax ? "high" : effort ?? focusedDefaultEffort;
719723
+ const focusedProviderId = selectedProvider?.value;
719724
+ const focusedEffortLevels = focusedResolvedModel && focusedProviderId ? getSupportedEffortLevelsForModel(focusedResolvedModel, focusedProviderId) : [];
719725
+ const focusedSupportsEffort = focusedResolvedModel ? modelSupportsEffort(focusedResolvedModel, focusedProviderId) : false;
719726
+ const focusedDefaultEffort = focusedResolvedModel ? convertEffortValueToLevel(getDefaultEffortForModel(focusedResolvedModel, focusedProviderId) ?? (focusedEffortLevels.includes("high") ? "high" : focusedEffortLevels.at(-1)) ?? "high") : "high";
719727
+ const displayedEffort = focusedResolvedModel ? resolveProviderEffortLevel(focusedResolvedModel, effort ?? focusedDefaultEffort, focusedProviderId) ?? focusedDefaultEffort : focusedDefaultEffort;
719512
719728
  function handleProviderFocus(value2) {
719513
719729
  setFocusedProviderValue(value2);
719514
719730
  setProviderWarning(null);
@@ -719519,7 +719735,7 @@ function ProviderFirstModelPicker({
719519
719735
  function handleCycleEffort(direction) {
719520
719736
  if (!focusedSupportsEffort)
719521
719737
  return;
719522
- setEffort((previous) => cycleProviderPickerEffort(previous ?? focusedDefaultEffort, direction, focusedSupportsMax));
719738
+ setEffort((previous) => cycleProviderPickerEffort(resolveProviderEffortLevel(focusedResolvedModel, previous ?? focusedDefaultEffort, focusedProviderId) ?? focusedDefaultEffort, direction, focusedEffortLevels));
719523
719739
  setHasToggledEffort(true);
719524
719740
  }
719525
719741
  use_input_default((_input, key, event) => {
@@ -719568,8 +719784,11 @@ function ProviderFirstModelPicker({
719568
719784
  }
719569
719785
  }
719570
719786
  function handleModelSelect(value2) {
719787
+ const selectedProviderId = selectedProvider?.value;
719788
+ const selectedResolvedModel = parseUserSpecifiedModel(value2);
719789
+ const selectedEffort = hasToggledEffort && selectedProviderId && effort ? resolveProviderEffortLevel(selectedResolvedModel, effort, selectedProviderId) : undefined;
719571
719790
  logEvent("tengu_model_command_menu_effort", {
719572
- effort,
719791
+ effort: selectedEffort,
719573
719792
  provider: selectedProvider?.value,
719574
719793
  model: value2,
719575
719794
  source: modelSource
@@ -719612,7 +719831,7 @@ function ProviderFirstModelPicker({
719612
719831
  }
719613
719832
  }
719614
719833
  if (hasToggledEffort) {
719615
- const persistable = effort ? toPersistableEffort(effort) : undefined;
719834
+ const persistable = selectedEffort ? toPersistableEffort(selectedEffort) : undefined;
719616
719835
  if (persistable !== undefined) {
719617
719836
  updateSettingsForSource("userSettings", {
719618
719837
  effortLevel: persistable
@@ -719626,10 +719845,10 @@ function ProviderFirstModelPicker({
719626
719845
  active: selectedProvider?.value,
719627
719846
  model: value2
719628
719847
  },
719629
- ...hasToggledEffort ? { effortValue: effort } : {},
719848
+ ...hasToggledEffort ? { effortValue: selectedEffort } : {},
719630
719849
  ...hasToggledThinking ? { thinkingEnabled } : {}
719631
719850
  }));
719632
- onSelect(value2, hasToggledEffort ? effort : undefined, selectedProvider ? {
719851
+ onSelect(value2, selectedEffort, selectedProvider ? {
719633
719852
  providerId: selectedProvider.value,
719634
719853
  providerName: selectedProvider.label,
719635
719854
  accessType: selectedProvider.accessType,
@@ -720090,26 +720309,54 @@ function ProviderFirstModelPicker({
720090
720309
  dimColor: true,
720091
720310
  children: focusedModel.description
720092
720311
  }, undefined, false, undefined, this),
720093
- focusedSupportsEffort && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720312
+ focusedSupportsEffort && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
720313
+ flexDirection: "column",
720094
720314
  children: [
720095
720315
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720096
- color: "ur",
720097
720316
  children: [
720098
- effortLevelToSymbol(displayedEffort),
720099
- " ",
720100
- displayedEffort.toUpperCase()
720317
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720318
+ color: "ur",
720319
+ children: [
720320
+ effortLevelToSymbol(displayedEffort),
720321
+ " ",
720322
+ displayedEffort.toUpperCase()
720323
+ ]
720324
+ }, undefined, true, undefined, this),
720325
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720326
+ dimColor: true,
720327
+ color: "subtle",
720328
+ children: [
720329
+ " ",
720330
+ "provider effort \xB7 use \u2190 \u2192 to adjust"
720331
+ ]
720332
+ }, undefined, true, undefined, this)
720101
720333
  ]
720102
720334
  }, undefined, true, undefined, this),
720103
720335
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720104
720336
  dimColor: true,
720105
720337
  color: "subtle",
720106
720338
  children: [
720107
- " ",
720108
- "effort \xB7 use \u2190 \u2192 to adjust"
720339
+ "Provider levels: ",
720340
+ focusedEffortLevels.join(" \xB7 ")
720109
720341
  ]
720110
720342
  }, undefined, true, undefined, this)
720111
720343
  ]
720112
- }, undefined, true, undefined, this)
720344
+ }, undefined, true, undefined, this),
720345
+ !focusedSupportsEffort && effortCapabilityLoading && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720346
+ dimColor: true,
720347
+ color: "subtle",
720348
+ children: "Checking this model's provider effort levels\u2026"
720349
+ }, undefined, false, undefined, this),
720350
+ !focusedSupportsEffort && !effortCapabilityLoading && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720351
+ dimColor: true,
720352
+ color: "subtle",
720353
+ children: "Graded effort not advertised for this model."
720354
+ }, undefined, false, undefined, this),
720355
+ effortCapabilityWarning && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720356
+ dimColor: true,
720357
+ color: "error",
720358
+ children: effortCapabilityWarning
720359
+ }, undefined, false, undefined, this)
720113
720360
  ]
720114
720361
  }, undefined, true, undefined, this),
720115
720362
  modelWarning && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
@@ -720176,8 +720423,8 @@ function getProviderKeyInputColumns(terminalColumns) {
720176
720423
  const columns = Number.isFinite(terminalColumns) && terminalColumns > 0 ? Math.floor(terminalColumns) : 80;
720177
720424
  return Math.max(8, columns - 20);
720178
720425
  }
720179
- function cycleProviderPickerEffort(current, direction, includeMax) {
720180
- const levels = includeMax ? ["low", "medium", "high", "max"] : ["low", "medium", "high"];
720426
+ function cycleProviderPickerEffort(current, direction, supportedLevels) {
720427
+ const levels = supportedLevels.length > 0 ? [...supportedLevels] : [current];
720181
720428
  const index2 = levels.indexOf(current);
720182
720429
  const currentIndex = index2 >= 0 ? index2 : levels.indexOf("high");
720183
720430
  const delta = direction === "right" ? 1 : -1;
@@ -722161,7 +722408,12 @@ __export(exports_effort, {
722161
722408
  executeEffort: () => executeEffort,
722162
722409
  call: () => call168
722163
722410
  });
722164
- function setEffortValue(effortValue, model) {
722411
+ function setEffortValue(effortValue, model, provider = getRuntimeProvider()) {
722412
+ if (model && !modelSupportsEffort(model, provider)) {
722413
+ return {
722414
+ message: `Not applied: ${model} on ${provider} does not advertise graded reasoning-effort levels.`
722415
+ };
722416
+ }
722165
722417
  const persistable = toPersistableEffort(effortValue);
722166
722418
  if (persistable !== undefined) {
722167
722419
  const result = updateSettingsForSource("userSettings", {
@@ -722196,40 +722448,56 @@ function setEffortValue(effortValue, model) {
722196
722448
  }
722197
722449
  const description = getEffortValueDescription(effortValue);
722198
722450
  const suffix = persistable !== undefined ? "" : " (this session only)";
722199
- const appliedLevel = model ? getDisplayedEffortLevel(model, effortValue) : effortValue;
722451
+ const appliedLevel = model && typeof effortValue === "string" ? resolveProviderEffortLevel(model, effortValue, provider) : effortValue;
722200
722452
  if (typeof effortValue === "string" && appliedLevel !== effortValue) {
722201
722453
  return {
722202
- message: `Requested effort level ${effortValue}${suffix}, but ${model} advertises up to ${appliedLevel}; applied ${appliedLevel}: ${getEffortValueDescription(appliedLevel)}`,
722454
+ message: `Requested ${effortValue}${suffix}; applied ${appliedLevel} for ${model} on ${provider}: ${getEffortValueDescription(appliedLevel)}`,
722203
722455
  effortUpdate: {
722204
722456
  value: effortValue
722205
722457
  }
722206
722458
  };
722207
722459
  }
722208
722460
  return {
722209
- message: `Set effort level to ${effortValue}${suffix}: ${description}`,
722461
+ message: `Set effort level to ${effortValue}${suffix} for ${model ?? "the active model"} on ${provider}: ${description}`,
722210
722462
  effortUpdate: {
722211
722463
  value: effortValue
722212
722464
  }
722213
722465
  };
722214
722466
  }
722215
- function showCurrentEffort(appStateEffort, model) {
722467
+ function showCurrentEffort(appStateEffort, model, provider = getRuntimeProvider()) {
722216
722468
  const envOverride = getEffortEnvOverride();
722217
722469
  const effectiveValue = envOverride === null ? undefined : envOverride ?? appStateEffort;
722218
722470
  if (effectiveValue === undefined) {
722219
- const level = getDisplayedEffortLevel(model, appStateEffort);
722471
+ if (!modelSupportsEffort(model, provider)) {
722472
+ return {
722473
+ message: `Effort: unavailable \u2014 ${model} on ${provider} does not advertise graded reasoning-effort levels.`
722474
+ };
722475
+ }
722476
+ const applied = resolveAppliedEffort(model, appStateEffort, provider);
722477
+ if (applied === undefined) {
722478
+ return {
722479
+ message: `Effort: auto for ${model} on ${provider}; UR sends no explicit effort and the provider chooses its default. Provider levels: ${getSupportedEffortLevelsForModel(model, provider).join(", ")}`
722480
+ };
722481
+ }
722482
+ const level = getDisplayedEffortLevel(model, appStateEffort, provider);
722483
+ return {
722484
+ message: `Effort: auto; applied ${level} for ${model} on ${provider}. Provider levels: ${getSupportedEffortLevelsForModel(model, provider).join(", ")}`
722485
+ };
722486
+ }
722487
+ if (!modelSupportsEffort(model, provider)) {
722220
722488
  return {
722221
- message: `Effort level: auto (currently ${level})`
722489
+ message: `Effort: unavailable \u2014 ${model} on ${provider} does not advertise graded reasoning-effort levels.`
722222
722490
  };
722223
722491
  }
722224
- const appliedLevel = getDisplayedEffortLevel(model, appStateEffort);
722492
+ const appliedLevel = getDisplayedEffortLevel(model, appStateEffort, provider);
722225
722493
  if (typeof effectiveValue === "string" && appliedLevel !== effectiveValue) {
722226
722494
  return {
722227
- message: `Requested effort: ${effectiveValue}; applied effort for ${model}: ${appliedLevel} (${getEffortValueDescription(appliedLevel)})`
722495
+ message: `Requested effort: ${effectiveValue}; applied effort for ${model} on ${provider}: ${appliedLevel} (${getEffortValueDescription(appliedLevel)}). Provider levels: ${getSupportedEffortLevelsForModel(model, provider).join(", ")}`
722228
722496
  };
722229
722497
  }
722230
722498
  const description = getEffortValueDescription(effectiveValue);
722231
722499
  return {
722232
- message: `Current effort level: ${effectiveValue} (${description})`
722500
+ message: `Current effort: ${effectiveValue}; applied ${appliedLevel} for ${model} on ${provider} (${description}). Provider levels: ${getSupportedEffortLevelsForModel(model, provider).join(", ")}`
722233
722501
  };
722234
722502
  }
722235
722503
  function unsetEffortLevel() {
@@ -722261,17 +722529,17 @@ function unsetEffortLevel() {
722261
722529
  }
722262
722530
  };
722263
722531
  }
722264
- function executeEffort(args, model) {
722532
+ function executeEffort(args, model, provider = getRuntimeProvider()) {
722265
722533
  const normalized = args.toLowerCase();
722266
722534
  if (normalized === "auto" || normalized === "unset") {
722267
722535
  return unsetEffortLevel();
722268
722536
  }
722269
722537
  if (!isEffortLevel(normalized)) {
722270
722538
  return {
722271
- message: `Invalid argument: ${args}. Valid options are: low, medium, high, max, auto`
722539
+ message: `Invalid argument: ${args}. Valid options are: minimal, low, medium, high, xhigh, max, auto`
722272
722540
  };
722273
722541
  }
722274
- return setEffortValue(normalized, model);
722542
+ return setEffortValue(normalized, model, provider);
722275
722543
  }
722276
722544
  function ShowCurrentEffort(t0) {
722277
722545
  const {
@@ -722279,9 +722547,10 @@ function ShowCurrentEffort(t0) {
722279
722547
  } = t0;
722280
722548
  const effortValue = useAppState(_temp156);
722281
722549
  const model = useMainLoopModel();
722550
+ const provider = getRuntimeProvider();
722282
722551
  const {
722283
722552
  message
722284
- } = showCurrentEffort(effortValue, model);
722553
+ } = showCurrentEffort(effortValue, model, provider);
722285
722554
  onDone(message);
722286
722555
  return null;
722287
722556
  }
@@ -722328,29 +722597,33 @@ function ApplyEffortAndClose(t0) {
722328
722597
  async function call168(onDone, _context, args) {
722329
722598
  args = args?.trim() || "";
722330
722599
  if (COMMON_HELP_ARGS2.includes(args)) {
722331
- onDone(`Usage: /effort [low|medium|high|max|auto]
722600
+ onDone(`Usage: /effort [minimal|low|medium|high|xhigh|max|auto]
722601
+
722602
+ UR reads the selected model's exact provider-advertised levels. \`max\` means that model's real ceiling, so it resolves to max, xhigh, or high as appropriate.
722332
722603
 
722333
722604
  Effort levels:
722605
+ - minimal: Lowest latency and cost
722334
722606
  - low: Quick, straightforward implementation
722335
722607
  - medium: Balanced approach with standard testing
722336
722608
  - high: Comprehensive implementation with extensive testing
722337
- - max: Maximum capability with deepest reasoning
722338
- - auto: Use the default effort level for your model`);
722609
+ - xhigh: Extended reasoning above high
722610
+ - max: The selected model's highest advertised level
722611
+ - auto: Use the model/provider default`);
722339
722612
  return;
722340
722613
  }
722341
- if (!args || args === "current" || args === "status") {
722342
- return /* @__PURE__ */ jsx_dev_runtime345.jsxDEV(ShowCurrentEffort, {
722343
- onDone
722344
- }, undefined, false, undefined, this);
722345
- }
722346
722614
  const model = getMainLoopModel();
722347
722615
  const runtimeProvider = getRuntimeProvider();
722348
- if (args.toLowerCase() === "max" && runtimeProvider === "openrouter" && !getProviderReasoningCapabilitiesForModel(model, runtimeProvider)) {
722349
- await ensureProviderModelsFresh(runtimeProvider).catch(() => {
722616
+ if (!getSupportedEffortLevelsForModel(model, runtimeProvider).length) {
722617
+ await ensureProviderReasoningCapabilitiesForModel(runtimeProvider, model).catch(() => {
722350
722618
  return;
722351
722619
  });
722352
722620
  }
722353
- const result = executeEffort(args, model);
722621
+ if (!args || args === "current" || args === "status") {
722622
+ return /* @__PURE__ */ jsx_dev_runtime345.jsxDEV(ShowCurrentEffort, {
722623
+ onDone
722624
+ }, undefined, false, undefined, this);
722625
+ }
722626
+ const result = executeEffort(args, model, runtimeProvider);
722354
722627
  return /* @__PURE__ */ jsx_dev_runtime345.jsxDEV(ApplyEffortAndClose, {
722355
722628
  result,
722356
722629
  onDone
@@ -722380,7 +722653,7 @@ var init_effort3 = __esm(() => {
722380
722653
  type: "local-jsx",
722381
722654
  name: "effort",
722382
722655
  description: "Set effort level for model usage",
722383
- argumentHint: "[low|medium|high|max|auto]",
722656
+ argumentHint: "[minimal|low|medium|high|xhigh|max|auto]",
722384
722657
  get immediate() {
722385
722658
  return shouldInferenceConfigCommandBeImmediate();
722386
722659
  },
@@ -727755,7 +728028,7 @@ function generateHtmlReport(data, insights) {
727755
728028
  </html>`;
727756
728029
  }
727757
728030
  function buildExportData(data, insights, facets, remoteStats) {
727758
- const version3 = typeof MACRO !== "undefined" ? "1.81.6" : "unknown";
728031
+ const version3 = typeof MACRO !== "undefined" ? "1.81.8" : "unknown";
727759
728032
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
727760
728033
  const facets_summary = {
727761
728034
  total: facets.size,
@@ -732068,7 +732341,7 @@ var init_sessionStorage = __esm(() => {
732068
732341
  init_settings2();
732069
732342
  init_slowOperations();
732070
732343
  init_uuid();
732071
- VERSION7 = typeof MACRO !== "undefined" ? "1.81.6" : "unknown";
732344
+ VERSION7 = typeof MACRO !== "undefined" ? "1.81.8" : "unknown";
732072
732345
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
732073
732346
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
732074
732347
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -733283,7 +733556,7 @@ var init_filesystem = __esm(() => {
733283
733556
  });
733284
733557
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
733285
733558
  const nonce = randomBytes24(16).toString("hex");
733286
- return join243(getURTempDir(), "bundled-skills", "1.81.6", nonce);
733559
+ return join243(getURTempDir(), "bundled-skills", "1.81.8", nonce);
733287
733560
  });
733288
733561
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
733289
733562
  });
@@ -739683,7 +739956,7 @@ function computeFingerprint(messageText2, version3) {
739683
739956
  }
739684
739957
  function computeFingerprintFromMessages(messages) {
739685
739958
  const firstMessageText = extractFirstMessageText(messages);
739686
- return computeFingerprint(firstMessageText, "1.81.6");
739959
+ return computeFingerprint(firstMessageText, "1.81.8");
739687
739960
  }
739688
739961
  var FINGERPRINT_SALT = "59cf53e54c78";
739689
739962
  var init_fingerprint = () => {};
@@ -739876,8 +740149,8 @@ function should1hCacheTTL(querySource) {
739876
740149
  }
739877
740150
  return querySource !== undefined && allowlist.some((pattern2) => pattern2.endsWith("*") ? querySource.startsWith(pattern2.slice(0, -1)) : querySource === pattern2);
739878
740151
  }
739879
- function configureEffortParams(effortValue, outputConfig, extraBodyParams, betas, model) {
739880
- if (!modelSupportsEffort(model) || "effort" in outputConfig) {
740152
+ function configureEffortParams(effortValue, outputConfig, extraBodyParams, betas, model, provider = getRuntimeProvider()) {
740153
+ if (!modelSupportsEffort(model, provider) || "effort" in outputConfig) {
739881
740154
  return;
739882
740155
  }
739883
740156
  if (effortValue === undefined) {
@@ -740429,7 +740702,7 @@ ${deferredToolList}
740429
740702
  const outputConfig = {
740430
740703
  ...extraBodyParams.output_config ?? {}
740431
740704
  };
740432
- configureEffortParams(effort, outputConfig, extraBodyParams, betasParams, options5.model);
740705
+ configureEffortParams(effort, outputConfig, extraBodyParams, betasParams, options5.model, options5.providerSettings?.active);
740433
740706
  configureTaskBudgetParams(options5.taskBudget, outputConfig, betasParams);
740434
740707
  if (options5.outputFormat && !("format" in outputConfig)) {
740435
740708
  outputConfig.format = options5.outputFormat;
@@ -741618,7 +741891,7 @@ async function sideQuery(opts) {
741618
741891
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
741619
741892
  }
741620
741893
  const messageText2 = extractFirstUserMessageText(messages);
741621
- const fingerprint2 = computeFingerprint(messageText2, "1.81.6");
741894
+ const fingerprint2 = computeFingerprint(messageText2, "1.81.8");
741622
741895
  const attributionHeader = getAttributionHeader(fingerprint2);
741623
741896
  const systemBlocks = [
741624
741897
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -746452,7 +746725,7 @@ function buildSystemInitMessage(inputs) {
746452
746725
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
746453
746726
  apiKeySource: getURHQApiKeyWithSource().source,
746454
746727
  betas: getSdkBetas(),
746455
- ur_version: "1.81.6",
746728
+ ur_version: "1.81.8",
746456
746729
  output_style: outputStyle,
746457
746730
  agents: inputs.agents.map((agent2) => agent2.agentType),
746458
746731
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -760288,7 +760561,7 @@ var init_useVoiceEnabled = __esm(() => {
760288
760561
  function getSemverPart(version3) {
760289
760562
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
760290
760563
  }
760291
- function useUpdateNotification(updatedVersion, initialVersion = "1.81.6") {
760564
+ function useUpdateNotification(updatedVersion, initialVersion = "1.81.8") {
760292
760565
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
760293
760566
  if (!updatedVersion) {
760294
760567
  return null;
@@ -760337,7 +760610,7 @@ function AutoUpdater({
760337
760610
  return;
760338
760611
  }
760339
760612
  if (false) {}
760340
- const currentVersion = "1.81.6";
760613
+ const currentVersion = "1.81.8";
760341
760614
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
760342
760615
  let latestVersion = await getLatestVersion(channel);
760343
760616
  const isDisabled = isAutoUpdaterDisabled();
@@ -760566,12 +760839,12 @@ function NativeAutoUpdater({
760566
760839
  logEvent("tengu_native_auto_updater_start", {});
760567
760840
  try {
760568
760841
  const maxVersion = await getMaxVersion();
760569
- if (maxVersion && gt("1.81.6", maxVersion)) {
760842
+ if (maxVersion && gt("1.81.8", maxVersion)) {
760570
760843
  const msg = await getMaxVersionMessage();
760571
760844
  setMaxVersionIssue(msg ?? "affects your version");
760572
760845
  }
760573
760846
  const result = await installLatest(channel);
760574
- const currentVersion = "1.81.6";
760847
+ const currentVersion = "1.81.8";
760575
760848
  const latencyMs = Date.now() - startTime;
760576
760849
  if (result.lockFailed) {
760577
760850
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -760708,17 +760981,17 @@ function PackageManagerAutoUpdater(t0) {
760708
760981
  const maxVersion = await getMaxVersion();
760709
760982
  if (maxVersion && latest && gt(latest, maxVersion)) {
760710
760983
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
760711
- if (gte("1.81.6", maxVersion)) {
760712
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
760984
+ if (gte("1.81.8", maxVersion)) {
760985
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.8"} is already at or above maxVersion ${maxVersion}, skipping update`);
760713
760986
  setUpdateAvailable(false);
760714
760987
  return;
760715
760988
  }
760716
760989
  latest = maxVersion;
760717
760990
  }
760718
- const hasUpdate = latest && !gte("1.81.6", latest) && !shouldSkipVersion(latest);
760991
+ const hasUpdate = latest && !gte("1.81.8", latest) && !shouldSkipVersion(latest);
760719
760992
  setUpdateAvailable(!!hasUpdate);
760720
760993
  if (hasUpdate) {
760721
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.6"} -> ${latest}`);
760994
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.8"} -> ${latest}`);
760722
760995
  }
760723
760996
  };
760724
760997
  $2[0] = t1;
@@ -760752,7 +761025,7 @@ function PackageManagerAutoUpdater(t0) {
760752
761025
  wrap: "truncate",
760753
761026
  children: [
760754
761027
  "currentVersion: ",
760755
- "1.81.6"
761028
+ "1.81.8"
760756
761029
  ]
760757
761030
  }, undefined, true, undefined, this);
760758
761031
  $2[3] = verbose;
@@ -771605,7 +771878,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
771605
771878
  project_dir: getOriginalCwd(),
771606
771879
  added_dirs: addedDirs
771607
771880
  },
771608
- version: "1.81.6",
771881
+ version: "1.81.8",
771609
771882
  output_style: {
771610
771883
  name: outputStyleName
771611
771884
  },
@@ -771740,7 +772013,7 @@ function StatusLineInner({
771740
772013
  const attention = customStatusError ?? taskAttention;
771741
772014
  const terminalSize = React133.useContext(TerminalSizeContext);
771742
772015
  const defaultStatusLineText = buildDefaultStatusBar({
771743
- version: "1.81.6",
772016
+ version: "1.81.8",
771744
772017
  providerLabel: providerRuntime.providerLabel,
771745
772018
  authMode: providerRuntime.authLabel,
771746
772019
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -783996,7 +784269,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783996
784269
  } catch {}
783997
784270
  const data = {
783998
784271
  trigger: trigger2,
783999
- version: "1.81.6",
784272
+ version: "1.81.8",
784000
784273
  platform: process.platform,
784001
784274
  transcript,
784002
784275
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -786770,7 +787043,7 @@ var init_controlSchemas = __esm(() => {
786770
787043
  })).describe("Ordered low-to-high priority \u2014 later entries override earlier ones."),
786771
787044
  applied: exports_external.object({
786772
787045
  model: exports_external.string(),
786773
- effort: exports_external.enum(["low", "medium", "high", "max"]).nullable()
787046
+ effort: exports_external.enum(["minimal", "low", "medium", "high", "xhigh", "max"]).nullable()
786774
787047
  }).optional().describe("Runtime-resolved values after env overrides, session state, and model-specific defaults are applied. Unlike `effective` (disk merge), these reflect what will actually be sent to the API.")
786775
787048
  }).describe("Effective merged settings plus raw per-source settings in merge order."));
786776
787049
  SDKControlElicitationRequestSchema = lazySchema(() => exports_external.object({
@@ -796365,7 +796638,7 @@ function WelcomeV2() {
796365
796638
  dimColor: true,
796366
796639
  children: [
796367
796640
  "v",
796368
- "1.81.6"
796641
+ "1.81.8"
796369
796642
  ]
796370
796643
  }, undefined, true, undefined, this)
796371
796644
  ]
@@ -797625,7 +797898,7 @@ function completeOnboarding() {
797625
797898
  saveGlobalConfig((current) => ({
797626
797899
  ...current,
797627
797900
  hasCompletedOnboarding: true,
797628
- lastOnboardingVersion: "1.81.6"
797901
+ lastOnboardingVersion: "1.81.8"
797629
797902
  }));
797630
797903
  }
797631
797904
  function showDialog(root2, renderer) {
@@ -802771,7 +803044,7 @@ function appendToLog(path28, message) {
802771
803044
  cwd: getFsImplementation().cwd(),
802772
803045
  userType: process.env.USER_TYPE,
802773
803046
  sessionId: getSessionId(),
802774
- version: "1.81.6"
803047
+ version: "1.81.8"
802775
803048
  };
802776
803049
  getLogWriter(path28).write(messageWithTimestamp);
802777
803050
  }
@@ -806935,8 +807208,8 @@ async function getEnvLessBridgeConfig() {
806935
807208
  }
806936
807209
  async function checkEnvLessBridgeMinVersion() {
806937
807210
  const cfg = await getEnvLessBridgeConfig();
806938
- if (cfg.min_version && lt("1.81.6", cfg.min_version)) {
806939
- return `Your version of UR (${"1.81.6"}) is too old for Remote Control.
807211
+ if (cfg.min_version && lt("1.81.8", cfg.min_version)) {
807212
+ return `Your version of UR (${"1.81.8"}) is too old for Remote Control.
806940
807213
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806941
807214
  }
806942
807215
  return null;
@@ -807410,7 +807683,7 @@ async function initBridgeCore(params) {
807410
807683
  const rawApi = createBridgeApiClient({
807411
807684
  baseUrl,
807412
807685
  getAccessToken,
807413
- runnerVersion: "1.81.6",
807686
+ runnerVersion: "1.81.8",
807414
807687
  onDebug: logForDebugging,
807415
807688
  onAuth401,
807416
807689
  getTrustedDeviceToken
@@ -809692,10 +809965,12 @@ function runHeadlessStreaming(structuredIO, mcpClients, commands, tools, initial
809692
809965
  });
809693
809966
  }
809694
809967
  const modelOptions = getModelOptions();
809968
+ const runtimeProvider = getRuntimeProvider();
809695
809969
  const modelInfos = modelOptions.map((option29) => {
809696
809970
  const modelId = option29.value === null ? "default" : option29.value;
809697
809971
  const resolvedModel = modelId === "default" ? getDefaultMainLoopModel() : parseUserSpecifiedModel(modelId);
809698
- const hasEffort = modelSupportsEffort(resolvedModel);
809972
+ const supportedEffortLevels = getSupportedEffortLevelsForModel(resolvedModel, runtimeProvider);
809973
+ const hasEffort = supportedEffortLevels.length > 0;
809699
809974
  const hasAdaptiveThinking = modelSupportsAdaptiveThinking(resolvedModel);
809700
809975
  const hasFastMode = isFastModeSupportedByModel(option29.value);
809701
809976
  const hasAutoMode = modelSupportsAutoMode(resolvedModel);
@@ -809705,7 +809980,7 @@ function runHeadlessStreaming(structuredIO, mcpClients, commands, tools, initial
809705
809980
  description: option29.description,
809706
809981
  ...hasEffort && {
809707
809982
  supportsEffort: true,
809708
- supportedEffortLevels: modelSupportsMaxEffort(resolvedModel) ? [...EFFORT_LEVELS] : EFFORT_LEVELS.filter((l) => l !== "max")
809983
+ supportedEffortLevels
809709
809984
  },
809710
809985
  ...hasAdaptiveThinking && { supportsAdaptiveThinking: true },
809711
809986
  ...hasFastMode && { supportsFastMode: true },
@@ -811073,7 +811348,8 @@ ${m.text}
811073
811348
  } else if (message.request.subtype === "get_settings") {
811074
811349
  const currentAppState = getAppState();
811075
811350
  const model = getMainLoopModel();
811076
- const effort = modelSupportsEffort(model) ? resolveAppliedEffort(model, currentAppState.effortValue) : undefined;
811351
+ const provider = getRuntimeProvider();
811352
+ const effort = modelSupportsEffort(model, provider) ? resolveAppliedEffort(model, currentAppState.effortValue, provider) : undefined;
811077
811353
  sendControlResponseSuccess(message, {
811078
811354
  ...getSettingsWithSources(),
811079
811355
  applied: {
@@ -816883,7 +817159,7 @@ function getAgUiCapabilities() {
816883
817159
  name: "UR-Nexus",
816884
817160
  type: "ur-nexus",
816885
817161
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816886
- version: "1.81.6",
817162
+ version: "1.81.8",
816887
817163
  provider: "UR",
816888
817164
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816889
817165
  },
@@ -818110,7 +818386,7 @@ function createMCPServer(cwd4, debug2, verbose) {
818110
818386
  };
818111
818387
  const server2 = new Server({
818112
818388
  name: "ur-nexus",
818113
- version: "1.81.6"
818389
+ version: "1.81.8"
818114
818390
  }, {
818115
818391
  capabilities: {
818116
818392
  tools: {}
@@ -819314,7 +819590,7 @@ function thrownResponse(error40) {
819314
819590
  }
819315
819591
  async function createUrMcp2026Runtime(options5) {
819316
819592
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
819317
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.6" }, { capabilities: {} });
819593
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.8" }, { capabilities: {} });
819318
819594
  const [clientTransport, serverTransport] = createLinkedTransportPair();
819319
819595
  try {
819320
819596
  await server2.connect(serverTransport);
@@ -819325,7 +819601,7 @@ async function createUrMcp2026Runtime(options5) {
819325
819601
  }
819326
819602
  const runtime2 = new Mcp2026Runtime({
819327
819603
  cwd: options5.cwd,
819328
- version: "1.81.6",
819604
+ version: "1.81.8",
819329
819605
  backend: {
819330
819606
  listTools: async () => {
819331
819607
  const listed = await client2.listTools();
@@ -822060,7 +822336,7 @@ async function update() {
822060
822336
  logEvent("tengu_update_check", {});
822061
822337
  const diagnostic2 = await getDoctorDiagnostic();
822062
822338
  const result = await checkUpgradeStatus({
822063
- currentVersion: "1.81.6",
822339
+ currentVersion: "1.81.8",
822064
822340
  packageName: UR_AGENT_PACKAGE_NAME,
822065
822341
  installationType: diagnostic2.installationType,
822066
822342
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -822457,9 +822733,9 @@ async function run3() {
822457
822733
  }).hideHelp()).option("--replay-user-messages", "Re-emit user messages from stdin back on stdout for acknowledgment (only works with --input-format=stream-json and --output-format=stream-json)", () => true).addOption(new Option("--enable-auth-status", "Enable auth status messages in SDK mode").default(false).hideHelp()).option("--allowedTools, --allowed-tools <tools...>", 'Comma or space-separated list of tool names to allow (e.g. "Bash(git:*) Edit")').option("--tools <tools...>", 'Specify the list of available tools from the built-in set. Use "" to disable all tools, "default" to use all tools, or specify tool names (e.g. "Bash,Edit,Read").').option("--disallowedTools, --disallowed-tools <tools...>", 'Comma or space-separated list of tool names to deny (e.g. "Bash(git:*) Edit")').option("--mcp-config <configs...>", "Load MCP servers from JSON files or strings (space-separated)").addOption(new Option("--permission-prompt-tool <tool>", "MCP tool to use for permission prompts (only works with --print)").argParser(String).hideHelp()).addOption(new Option("--system-prompt <prompt>", "System prompt to use for the session").argParser(String)).addOption(new Option("--system-prompt-file <file>", "Read system prompt from a file").argParser(String).hideHelp()).addOption(new Option("--append-system-prompt <prompt>", "Append a system prompt to the default system prompt").argParser(String)).addOption(new Option("--append-system-prompt-file <file>", "Read system prompt from a file and append to the default system prompt").argParser(String).hideHelp()).addOption(new Option("--permission-mode <mode>", "Permission mode to use for the session").argParser(String).choices(PERMISSION_MODES)).option("-c, --continue", "Continue the most recent conversation in the current directory", () => true).option("-r, --resume [value]", "Resume a conversation by session ID, or open interactive picker with optional search term", (value2) => value2 || true).option("--fork-session", "When resuming, create a new session ID instead of reusing the original (use with --resume or --continue)", () => true).addOption(new Option("--prefill <text>", "Pre-fill the prompt input with text without submitting it").hideHelp()).addOption(new Option("--deep-link-origin", "Signal that this session was launched from a deep link").hideHelp()).addOption(new Option("--deep-link-repo <slug>", "Repo slug the deep link ?repo= parameter resolved to the current cwd").hideHelp()).addOption(new Option("--deep-link-last-fetch <ms>", "FETCH_HEAD mtime in epoch ms, precomputed by the deep link trampoline").argParser((v) => {
822458
822734
  const n3 = Number(v);
822459
822735
  return Number.isFinite(n3) ? n3 : undefined;
822460
- }).hideHelp()).option("--from-pr [value]", "Resume a session linked to a PR by PR number/URL, or open interactive picker with optional search term", (value2) => value2 || true).option("--no-session-persistence", "Disable session persistence - sessions will not be saved to disk and cannot be resumed (only works with --print)").addOption(new Option("--resume-session-at <message id>", "When resuming, only messages up to and including the assistant message with <message.id> (use with --resume in print mode)").argParser(String).hideHelp()).addOption(new Option("--rewind-files <user-message-id>", "Restore files to state at the specified user message and exit (requires --resume)").hideHelp()).option("--model <model>", `Local Ollama app model for the current session (for example, 'qwen3-coder:480b-cloud' or 'qwen2.5-coder:latest').`).addOption(new Option("--effort <level>", `Effort level for the current session (low, medium, high, max)`).argParser((rawValue) => {
822736
+ }).hideHelp()).option("--from-pr [value]", "Resume a session linked to a PR by PR number/URL, or open interactive picker with optional search term", (value2) => value2 || true).option("--no-session-persistence", "Disable session persistence - sessions will not be saved to disk and cannot be resumed (only works with --print)").addOption(new Option("--resume-session-at <message id>", "When resuming, only messages up to and including the assistant message with <message.id> (use with --resume in print mode)").argParser(String).hideHelp()).addOption(new Option("--rewind-files <user-message-id>", "Restore files to state at the specified user message and exit (requires --resume)").hideHelp()).option("--model <model>", `Local Ollama app model for the current session (for example, 'qwen3-coder:480b-cloud' or 'qwen2.5-coder:latest').`).addOption(new Option("--effort <level>", `Effort level for the current session (minimal, low, medium, high, xhigh, max)`).argParser((rawValue) => {
822461
822737
  const value2 = rawValue.toLowerCase();
822462
- const allowed = ["low", "medium", "high", "max"];
822738
+ const allowed = ["minimal", "low", "medium", "high", "xhigh", "max"];
822463
822739
  if (!allowed.includes(value2)) {
822464
822740
  throw new InvalidArgumentError(`It must be one of: ${allowed.join(", ")}`);
822465
822741
  }
@@ -823388,7 +823664,7 @@ ${customInstructions}` : customInstructions;
823388
823664
  }
823389
823665
  }
823390
823666
  logForDiagnosticsNoPII("info", "started", {
823391
- version: "1.81.6",
823667
+ version: "1.81.8",
823392
823668
  is_native_binary: isInBundledMode()
823393
823669
  });
823394
823670
  registerCleanup(async () => {
@@ -824175,7 +824451,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
824175
824451
  pendingHookMessages
824176
824452
  }, renderAndRun);
824177
824453
  }
824178
- }).version("1.81.6 (UR-Nexus)", "-v, --version", "Output the version number");
824454
+ }).version("1.81.8 (UR-Nexus)", "-v, --version", "Output the version number");
824179
824455
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
824180
824456
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
824181
824457
  if (canUserConfigureAdvisor()) {
@@ -825302,7 +825578,7 @@ if (false) {}
825302
825578
  async function main2() {
825303
825579
  const args = process.argv.slice(2);
825304
825580
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
825305
- console.log(`${"1.81.6"} (UR-Nexus)`);
825581
+ console.log(`${"1.81.8"} (UR-Nexus)`);
825306
825582
  return;
825307
825583
  }
825308
825584
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {