ur-agent 1.81.9 → 1.81.10

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/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.81.10
4
+
5
+ - Reduced provider latency and memory pressure without removing the complete
6
+ system prompt or tool set from real agent work. Self-hosted Ollama, vLLM,
7
+ LM Studio, llama.cpp, and OpenAI-compatible requests now reserve a realistic
8
+ 4K output turn, resume automatically if it is exhausted, and keep a stable
9
+ prompt prefix so local/server prefix caches can be reused across sessions.
10
+ - Added a safe lightweight path for exact greetings on every runnable provider.
11
+ These turns send no irrelevant repository tools, use a 1K output budget, and
12
+ use an 8K Ollama context; coding, media, structured-output, custom-prompt,
13
+ and ongoing agent turns retain their full quality-bearing context.
14
+ - Prevented Ollama helper calls from automatically loading a second installed
15
+ model and evicting the warm session model. A separate helper model remains
16
+ available through the explicit `OLLAMA_SMALL_FAST_MODEL` override.
17
+ - Added adaptive recovery for vLLM's OpenAI-compatible context-overflow errors,
18
+ including wrapped/multiline and comma-formatted token counts, and fixed the
19
+ retry calculation so thinking budgets can never produce another oversized
20
+ request.
21
+ - Applied provider-discovered completion limits to request sizing, including
22
+ OpenRouter's live `max_output_tokens`, so defaults and explicit overrides are
23
+ validated against the selected model's real limit.
24
+
3
25
  ## 1.81.9
4
26
 
5
27
  - Restored the previous compact six-row UR wordmark as the primary welcome
package/dist/cli.js CHANGED
@@ -53764,6 +53764,7 @@ __export(exports_providerRegistry, {
53764
53764
  getProviderRuntimeBlockReason: () => getProviderRuntimeBlockReason,
53765
53765
  getProviderRuntimeBackend: () => getProviderRuntimeBackend,
53766
53766
  getProviderReasoningCapabilitiesForModel: () => getProviderReasoningCapabilitiesForModel,
53767
+ getProviderOutputTokenLimitForModel: () => getProviderOutputTokenLimitForModel,
53767
53768
  getProviderFamily: () => getProviderFamily,
53768
53769
  getProviderDefinition: () => getProviderDefinition,
53769
53770
  getProviderContextLengthForModel: () => getProviderContextLengthForModel,
@@ -54913,6 +54914,21 @@ function getProviderContextLengthForModel(model, provider = getInitialSettings()
54913
54914
  const length = match?.contextLength;
54914
54915
  return typeof length === "number" && Number.isFinite(length) && length > 0 ? Math.floor(length) : undefined;
54915
54916
  }
54917
+ function getProviderOutputTokenLimitForModel(model, provider = getRuntimeProviderId(), settings = getInitialSettings()) {
54918
+ const providerId = resolveProviderId(provider);
54919
+ if (!providerId)
54920
+ return;
54921
+ const wanted = model.trim().toLowerCase();
54922
+ if (!wanted)
54923
+ return;
54924
+ const known = [
54925
+ ...getCachedProviderModels(providerId, settings),
54926
+ ...PROVIDER_MODELS[providerId] ?? []
54927
+ ];
54928
+ const match = known.find((entry) => entry.id.toLowerCase() === wanted) ?? known.find((entry) => wanted.includes(entry.id.toLowerCase()));
54929
+ const limit = match?.outputTokenLimit;
54930
+ return typeof limit === "number" && Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : undefined;
54931
+ }
54916
54932
  function getProviderReasoningCapabilitiesForModel(model, provider = getRuntimeProviderId(), settings = getInitialSettings()) {
54917
54933
  const providerId = resolveProviderId(provider);
54918
54934
  if (!providerId)
@@ -57299,9 +57315,19 @@ function getOllamaKeepAlive(env4 = process.env) {
57299
57315
  const asNumber = Number(trimmed);
57300
57316
  return Number.isFinite(asNumber) ? asNumber : trimmed;
57301
57317
  }
57302
- var MIN_AGENT_NUM_CTX = 32768, DEFAULT_OLLAMA_KEEP_ALIVE = "30m", NUM_CTX_BUCKETS, OUTPUT_HEADROOM_TOKENS = 4096;
57318
+ var MIN_AGENT_NUM_CTX = 32768, MIN_CHAT_NUM_CTX = 8192, DEFAULT_OLLAMA_KEEP_ALIVE = "30m", NUM_CTX_BUCKETS, OUTPUT_HEADROOM_TOKENS = 4096;
57303
57319
  var init_ollamaTuning = __esm(() => {
57304
- NUM_CTX_BUCKETS = [32768, 49152, 65536, 98304, 131072, 196608, 262144];
57320
+ NUM_CTX_BUCKETS = [
57321
+ 8192,
57322
+ 16384,
57323
+ 32768,
57324
+ 49152,
57325
+ 65536,
57326
+ 98304,
57327
+ 131072,
57328
+ 196608,
57329
+ 262144
57330
+ ];
57305
57331
  });
57306
57332
 
57307
57333
  // node_modules/react/cjs/react.development.js
@@ -89922,15 +89948,20 @@ function toOllamaChatRequest(params, stream4, capabilities, baseUrl = getEffecti
89922
89948
  if (typeof params.max_tokens === "number") {
89923
89949
  options.num_predict = params.max_tokens;
89924
89950
  }
89951
+ const estimatedPromptTokens = estimateInputTokens(params);
89952
+ const maxTokens = typeof params.max_tokens === "number" ? params.max_tokens : undefined;
89953
+ const isLightweightChat = tools.length === 0 && (maxTokens ?? Number.POSITIVE_INFINITY) <= 1024 && estimatedPromptTokens <= 4096;
89925
89954
  const numCtx = computeOllamaNumCtx({
89926
89955
  modelContextLength: getOllamaContextLengthForModel(params.model, baseUrl),
89927
- estimatedPromptTokens: estimateInputTokens(params),
89928
- maxTokens: typeof params.max_tokens === "number" ? params.max_tokens : undefined,
89929
- override: getOllamaNumCtxOverride()
89956
+ estimatedPromptTokens,
89957
+ maxTokens,
89958
+ override: getOllamaNumCtxOverride(),
89959
+ ...isLightweightChat ? { minCtx: MIN_CHAT_NUM_CTX } : {}
89930
89960
  });
89931
89961
  if (numCtx !== undefined) {
89932
89962
  options.num_ctx = numCtx;
89933
89963
  }
89964
+ logForDebugging(`Ollama request sizing: ~${estimatedPromptTokens} input tokens, ${maxTokens ?? "default"} output tokens, ${tools.length} tools, num_ctx=${numCtx ?? "server-default"}`);
89934
89965
  if (Object.keys(options).length > 0) {
89935
89966
  request.options = options;
89936
89967
  }
@@ -96080,7 +96111,7 @@ function calculateContextPercentages(currentUsage, contextWindowSize) {
96080
96111
  remaining: 100 - clampedUsed
96081
96112
  };
96082
96113
  }
96083
- function getModelMaxOutputTokens(model) {
96114
+ function getModelMaxOutputTokens(model, provider, settings) {
96084
96115
  let defaultTokens = MAX_OUTPUT_TOKENS_DEFAULT;
96085
96116
  let upperLimit = MAX_OUTPUT_TOKENS_UPPER_LIMIT;
96086
96117
  if (process.env.USER_TYPE === "ant") {
@@ -96096,6 +96127,11 @@ function getModelMaxOutputTokens(model) {
96096
96127
  upperLimit = cap.max_tokens;
96097
96128
  defaultTokens = Math.min(defaultTokens, upperLimit);
96098
96129
  }
96130
+ const providerOutputLimit = getProviderOutputTokenLimitForModel(model, provider, settings);
96131
+ if (providerOutputLimit !== undefined) {
96132
+ upperLimit = Math.min(upperLimit, providerOutputLimit);
96133
+ defaultTokens = Math.min(defaultTokens, upperLimit);
96134
+ }
96099
96135
  return { default: defaultTokens, upperLimit };
96100
96136
  }
96101
96137
  function getMaxThinkingTokensForModel(model) {
@@ -96808,7 +96844,6 @@ __export(exports_model, {
96808
96844
  });
96809
96845
  function __resetOllamaRouteMemoForTests() {
96810
96846
  memoizedRoutedDefaultModel = undefined;
96811
- memoizedRoutedFastModel = undefined;
96812
96847
  }
96813
96848
  function getDefaultOllamaModel() {
96814
96849
  const explicitModel = process.env.OLLAMA_MODEL || process.env.UR_MODEL;
@@ -96837,15 +96872,6 @@ function getSmallFastModel(providerSettings) {
96837
96872
  if (process.env.OLLAMA_SMALL_FAST_MODEL) {
96838
96873
  return process.env.OLLAMA_SMALL_FAST_MODEL;
96839
96874
  }
96840
- if (isOllamaAutoRouteEnabled()) {
96841
- if (memoizedRoutedFastModel)
96842
- return memoizedRoutedFastModel;
96843
- const routed = pickSmallFastModel(getCachedOllamaModelNames());
96844
- if (routed) {
96845
- memoizedRoutedFastModel = routed;
96846
- return routed;
96847
- }
96848
- }
96849
96875
  const sessionModel = getMainLoopModel();
96850
96876
  if (sessionModel)
96851
96877
  return sessionModel;
@@ -97166,7 +97192,7 @@ function getMarketingNameForModel(modelId) {
97166
97192
  function normalizeModelStringForAPI(model) {
97167
97193
  return model.replace(/\[(1|2)m\]/gi, "");
97168
97194
  }
97169
- var DEFAULT_OLLAMA_MODEL2 = "qwen2.5-coder:7b", memoizedRoutedDefaultModel, memoizedRoutedFastModel, LEGACY_MODELO_FIRSTPARTY;
97195
+ var DEFAULT_OLLAMA_MODEL2 = "qwen2.5-coder:7b", memoizedRoutedDefaultModel, LEGACY_MODELO_FIRSTPARTY;
97170
97196
  var init_model = __esm(() => {
97171
97197
  init_state();
97172
97198
  init_auth();
@@ -108358,7 +108384,7 @@ var init_auth = __esm(() => {
108358
108384
 
108359
108385
  // src/utils/userAgent.ts
108360
108386
  function getURCodeUserAgent() {
108361
- return `ur/${"1.81.9"}`;
108387
+ return `ur/${"1.81.10"}`;
108362
108388
  }
108363
108389
 
108364
108390
  // src/utils/workloadContext.ts
@@ -108380,7 +108406,7 @@ function getUserAgent() {
108380
108406
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
108381
108407
  const workload = getWorkload();
108382
108408
  const workloadSuffix = workload ? `, workload/${workload}` : "";
108383
- return `ur-cli/${"1.81.9"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
108409
+ return `ur-cli/${"1.81.10"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
108384
108410
  }
108385
108411
  function getMCPUserAgent() {
108386
108412
  const parts = [];
@@ -108394,7 +108420,7 @@ function getMCPUserAgent() {
108394
108420
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
108395
108421
  }
108396
108422
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
108397
- return `ur/${"1.81.9"}${suffix}`;
108423
+ return `ur/${"1.81.10"}${suffix}`;
108398
108424
  }
108399
108425
  function getWebFetchUserAgent() {
108400
108426
  return `UR-User (${getURCodeUserAgent()})`;
@@ -108532,7 +108558,7 @@ var init_user = __esm(() => {
108532
108558
  deviceId,
108533
108559
  sessionId: getSessionId(),
108534
108560
  email: getEmail(),
108535
- appVersion: "1.81.9",
108561
+ appVersion: "1.81.10",
108536
108562
  platform: getHostPlatformForAnalytics(),
108537
108563
  organizationUuid,
108538
108564
  accountUuid,
@@ -116419,7 +116445,7 @@ var init_metadata = __esm(() => {
116419
116445
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
116420
116446
  WHITESPACE_REGEX = /\s+/;
116421
116447
  getVersionBase = memoize_default(() => {
116422
- const match = "1.81.9".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
116448
+ const match = "1.81.10".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
116423
116449
  return match ? match[0] : undefined;
116424
116450
  });
116425
116451
  buildEnvContext = memoize_default(async () => {
@@ -116459,7 +116485,7 @@ var init_metadata = __esm(() => {
116459
116485
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
116460
116486
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
116461
116487
  isURAiAuth: isURAISubscriber(),
116462
- version: "1.81.9",
116488
+ version: "1.81.10",
116463
116489
  versionBase: getVersionBase(),
116464
116490
  buildTime: "",
116465
116491
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -117129,7 +117155,7 @@ function initialize1PEventLogging() {
117129
117155
  const platform2 = getPlatform();
117130
117156
  const attributes = {
117131
117157
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
117132
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.81.9"
117158
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.81.10"
117133
117159
  };
117134
117160
  if (platform2 === "wsl") {
117135
117161
  const wslVersion = getWslVersion();
@@ -117157,7 +117183,7 @@ function initialize1PEventLogging() {
117157
117183
  })
117158
117184
  ]
117159
117185
  });
117160
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.81.9");
117186
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.81.10");
117161
117187
  }
117162
117188
  async function reinitialize1PEventLoggingIfConfigChanged() {
117163
117189
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -127123,7 +127149,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
127123
127149
  function formatA2AV1AgentCard(options = {}, pretty = true) {
127124
127150
  return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
127125
127151
  }
127126
- var urVersion = "1.81.9", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
127152
+ var urVersion = "1.81.10", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
127127
127153
  var init_trends = __esm(() => {
127128
127154
  init_a2aCardSignature();
127129
127155
  coverage = [
@@ -130013,7 +130039,7 @@ function getAttributionHeader(fingerprint) {
130013
130039
  if (!isAttributionHeaderEnabled()) {
130014
130040
  return "";
130015
130041
  }
130016
- const version2 = `${"1.81.9"}.${fingerprint}`;
130042
+ const version2 = `${"1.81.10"}.${fingerprint}`;
130017
130043
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
130018
130044
  const cch = "";
130019
130045
  const workload = getWorkload();
@@ -182998,7 +183024,11 @@ async function* withRetry(getClient, operation, options2) {
182998
183024
  throw error40;
182999
183025
  }
183000
183026
  const minRequired = (retryContext.thinkingConfig.type === "enabled" ? retryContext.thinkingConfig.budgetTokens : 0) + 1;
183001
- const adjustedMaxTokens = Math.max(FLOOR_OUTPUT_TOKENS, availableContext, minRequired);
183027
+ if (minRequired > availableContext) {
183028
+ logError2(new Error(`thinking budget requires ${minRequired} tokens but only ${availableContext} output tokens fit in the context window`));
183029
+ throw error40;
183030
+ }
183031
+ const adjustedMaxTokens = availableContext;
183002
183032
  retryContext.maxTokensOverride = adjustedMaxTokens;
183003
183033
  logEvent("tengu_max_tokens_context_overflow_adjustment", {
183004
183034
  inputTokens,
@@ -183079,21 +183109,18 @@ function parseMaxTokensContextOverflowError(error40) {
183079
183109
  if (error40.status !== 400 || !error40.message) {
183080
183110
  return;
183081
183111
  }
183082
- if (!error40.message.includes("input length and `max_tokens` exceed context limit")) {
183112
+ const arithmeticMatch = error40.message.match(/input length and `max_tokens` exceed context limit:\s*([\d,]+)\s*\+\s*([\d,]+)\s*>\s*([\d,]+)/i);
183113
+ const vllmMatch = error40.message.match(/maximum context length is\s+([\d,]+)\s+tokens[\s\S]*?requested\s+([\d,]+)\s+output tokens[\s\S]*?prompt contains(?:\s+at least)?\s+([\d,]+)\s+input tokens/i);
183114
+ const rawInputTokens = arithmeticMatch?.[1] ?? vllmMatch?.[3];
183115
+ const rawMaxTokens = arithmeticMatch?.[2] ?? vllmMatch?.[2];
183116
+ const rawContextLimit = arithmeticMatch?.[3] ?? vllmMatch?.[1];
183117
+ if (!rawInputTokens || !rawMaxTokens || !rawContextLimit) {
183083
183118
  return;
183084
183119
  }
183085
- const regex2 = /input length and `max_tokens` exceed context limit: (\d+) \+ (\d+) > (\d+)/;
183086
- const match = error40.message.match(regex2);
183087
- if (!match || match.length !== 4) {
183088
- return;
183089
- }
183090
- if (!match[1] || !match[2] || !match[3]) {
183091
- logError2(new Error("Unable to parse max_tokens from max_tokens exceed context limit error message"));
183092
- return;
183093
- }
183094
- const inputTokens = parseInt(match[1], 10);
183095
- const maxTokens = parseInt(match[2], 10);
183096
- const contextLimit = parseInt(match[3], 10);
183120
+ const parseTokenCount = (value) => Number.parseInt(value.replaceAll(",", ""), 10);
183121
+ const inputTokens = parseTokenCount(rawInputTokens);
183122
+ const maxTokens = parseTokenCount(rawMaxTokens);
183123
+ const contextLimit = parseTokenCount(rawContextLimit);
183097
183124
  if (isNaN(inputTokens) || isNaN(maxTokens) || isNaN(contextLimit)) {
183098
183125
  return;
183099
183126
  }
@@ -184934,7 +184961,7 @@ var init_projectSafety = __esm(() => {
184934
184961
  function getInstruments() {
184935
184962
  if (instruments)
184936
184963
  return instruments;
184937
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.81.9");
184964
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.81.10");
184938
184965
  instruments = {
184939
184966
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184940
184967
  description: "GenAI operation duration.",
@@ -185032,7 +185059,7 @@ function genAiAgentAttributes() {
185032
185059
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
185033
185060
  "gen_ai.provider.name": "ur",
185034
185061
  "gen_ai.agent.name": "UR-Nexus",
185035
- "gen_ai.agent.version": "1.81.9"
185062
+ "gen_ai.agent.version": "1.81.10"
185036
185063
  };
185037
185064
  }
185038
185065
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -185053,7 +185080,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
185053
185080
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
185054
185081
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
185055
185082
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
185056
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.9").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
185083
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.10").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
185057
185084
  }
185058
185085
  function endGenAiWorkflowSpan(span, options2 = {}) {
185059
185086
  try {
@@ -185091,7 +185118,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
185091
185118
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
185092
185119
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
185093
185120
  }
185094
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.9").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
185121
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.10").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
185095
185122
  }
185096
185123
  function endGenAiMemorySpan(span, options2 = {}) {
185097
185124
  try {
@@ -278806,7 +278833,7 @@ function getTelemetryAttributes() {
278806
278833
  attributes["session.id"] = sessionId;
278807
278834
  }
278808
278835
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278809
- attributes["app.version"] = "1.81.9";
278836
+ attributes["app.version"] = "1.81.10";
278810
278837
  }
278811
278838
  const oauthAccount = getOauthAccountInfo();
278812
278839
  if (oauthAccount) {
@@ -320210,7 +320237,7 @@ function getInstallationEnv() {
320210
320237
  return;
320211
320238
  }
320212
320239
  function getURCodeVersion() {
320213
- return "1.81.9";
320240
+ return "1.81.10";
320214
320241
  }
320215
320242
  async function getInstalledVSCodeExtensionVersion(command) {
320216
320243
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -327580,7 +327607,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
327580
327607
  const client2 = new Client({
327581
327608
  name: "ur",
327582
327609
  title: "UR",
327583
- version: "1.81.9",
327610
+ version: "1.81.10",
327584
327611
  description: "UR-Nexus autonomous engineering workflow engine",
327585
327612
  websiteUrl: PRODUCT_URL
327586
327613
  }, {
@@ -327941,7 +327968,7 @@ var init_client5 = __esm(() => {
327941
327968
  const client2 = new Client({
327942
327969
  name: "ur",
327943
327970
  title: "UR",
327944
- version: "1.81.9",
327971
+ version: "1.81.10",
327945
327972
  description: "UR-Nexus autonomous engineering workflow engine",
327946
327973
  websiteUrl: PRODUCT_URL
327947
327974
  }, {
@@ -340714,7 +340741,7 @@ async function createRuntime() {
340714
340741
  bootstrapTelemetry();
340715
340742
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
340716
340743
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
340717
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.81.9"
340744
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.81.10"
340718
340745
  }));
340719
340746
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
340720
340747
  resource,
@@ -340747,11 +340774,11 @@ async function createRuntime() {
340747
340774
  setMeterProvider(meterProvider);
340748
340775
  setLoggerProvider(loggerProvider);
340749
340776
  if (meterProvider) {
340750
- const meter = meterProvider.getMeter("ur-agent", "1.81.9");
340777
+ const meter = meterProvider.getMeter("ur-agent", "1.81.10");
340751
340778
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
340752
340779
  }
340753
340780
  if (loggerProvider) {
340754
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.81.9"));
340781
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.81.10"));
340755
340782
  }
340756
340783
  if (!cleanupRegistered3) {
340757
340784
  cleanupRegistered3 = true;
@@ -341413,9 +341440,9 @@ async function assertMinVersion() {
341413
341440
  if (false) {}
341414
341441
  try {
341415
341442
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
341416
- if (versionConfig.minVersion && lt("1.81.9", versionConfig.minVersion)) {
341443
+ if (versionConfig.minVersion && lt("1.81.10", versionConfig.minVersion)) {
341417
341444
  console.error(`
341418
- It looks like your version of UR (${"1.81.9"}) needs an update.
341445
+ It looks like your version of UR (${"1.81.10"}) needs an update.
341419
341446
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
341420
341447
 
341421
341448
  To update, please run:
@@ -341631,7 +341658,7 @@ async function installGlobalPackage(specificVersion) {
341631
341658
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
341632
341659
  logEvent("tengu_auto_updater_lock_contention", {
341633
341660
  pid: process.pid,
341634
- currentVersion: "1.81.9"
341661
+ currentVersion: "1.81.10"
341635
341662
  });
341636
341663
  return "in_progress";
341637
341664
  }
@@ -341640,7 +341667,7 @@ async function installGlobalPackage(specificVersion) {
341640
341667
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
341641
341668
  logError2(new Error("Windows NPM detected in WSL environment"));
341642
341669
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
341643
- currentVersion: "1.81.9"
341670
+ currentVersion: "1.81.10"
341644
341671
  });
341645
341672
  console.error(`
341646
341673
  Error: Windows NPM detected in WSL
@@ -342175,7 +342202,7 @@ function detectLinuxGlobPatternWarnings() {
342175
342202
  }
342176
342203
  async function getDoctorDiagnostic() {
342177
342204
  const installationType = await getCurrentInstallationType();
342178
- const version2 = typeof MACRO !== "undefined" ? "1.81.9" : "unknown";
342205
+ const version2 = typeof MACRO !== "undefined" ? "1.81.10" : "unknown";
342179
342206
  const installationPath = await getInstallationPath();
342180
342207
  const invokedBinary = getInvokedBinary();
342181
342208
  const multipleInstallations = await detectMultipleInstallations();
@@ -343110,8 +343137,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
343110
343137
  const maxVersion = await getMaxVersion();
343111
343138
  if (maxVersion && gt(version2, maxVersion)) {
343112
343139
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
343113
- if (gte("1.81.9", maxVersion)) {
343114
- logForDebugging(`Native installer: current version ${"1.81.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
343140
+ if (gte("1.81.10", maxVersion)) {
343141
+ logForDebugging(`Native installer: current version ${"1.81.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
343115
343142
  logEvent("tengu_native_update_skipped_max_version", {
343116
343143
  latency_ms: Date.now() - startTime,
343117
343144
  max_version: maxVersion,
@@ -343122,7 +343149,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
343122
343149
  version2 = maxVersion;
343123
343150
  }
343124
343151
  }
343125
- if (!forceReinstall && version2 === "1.81.9" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
343152
+ if (!forceReinstall && version2 === "1.81.10" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
343126
343153
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
343127
343154
  logEvent("tengu_native_update_complete", {
343128
343155
  latency_ms: Date.now() - startTime,
@@ -413812,7 +413839,7 @@ function isAnyTracingEnabled() {
413812
413839
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
413813
413840
  }
413814
413841
  function getTracer() {
413815
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.81.9");
413842
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.81.10");
413816
413843
  }
413817
413844
  function createSpanAttributes(spanType, customAttributes = {}) {
413818
413845
  const baseAttributes = getTelemetryAttributes();
@@ -443951,7 +443978,7 @@ function Feedback({
443951
443978
  platform: env2.platform,
443952
443979
  gitRepo: envInfo.isGit,
443953
443980
  terminal: env2.terminal,
443954
- version: "1.81.9",
443981
+ version: "1.81.10",
443955
443982
  transcript: normalizeMessagesForAPI(messages),
443956
443983
  errors: sanitizedErrors,
443957
443984
  lastApiRequest: getLastAPIRequest(),
@@ -444143,7 +444170,7 @@ function Feedback({
444143
444170
  ", ",
444144
444171
  env2.terminal,
444145
444172
  ", v",
444146
- "1.81.9"
444173
+ "1.81.10"
444147
444174
  ]
444148
444175
  }, undefined, true, undefined, this)
444149
444176
  ]
@@ -444249,7 +444276,7 @@ ${sanitizedDescription}
444249
444276
  ` + `**Environment Info**
444250
444277
  ` + `- Platform: ${env2.platform}
444251
444278
  ` + `- Terminal: ${env2.terminal}
444252
- ` + `- Version: ${"1.81.9"}
444279
+ ` + `- Version: ${"1.81.10"}
444253
444280
  ` + `- Feedback ID: ${feedbackId}
444254
444281
  ` + `
444255
444282
  **Errors**
@@ -447359,7 +447386,7 @@ function buildPrimarySection() {
447359
447386
  }, undefined, false, undefined, this);
447360
447387
  return [{
447361
447388
  label: "Version",
447362
- value: "1.81.9"
447389
+ value: "1.81.10"
447363
447390
  }, {
447364
447391
  label: "Session name",
447365
447392
  value: nameValue
@@ -450862,7 +450889,7 @@ function Config({
450862
450889
  }
450863
450890
  }, undefined, false, undefined, this)
450864
450891
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
450865
- currentVersion: "1.81.9",
450892
+ currentVersion: "1.81.10",
450866
450893
  onChoice: (choice) => {
450867
450894
  setShowSubmenu(null);
450868
450895
  setTabsHidden(false);
@@ -450874,7 +450901,7 @@ function Config({
450874
450901
  autoUpdatesChannel: "stable"
450875
450902
  };
450876
450903
  if (choice === "stay") {
450877
- newSettings.minimumVersion = "1.81.9";
450904
+ newSettings.minimumVersion = "1.81.10";
450878
450905
  }
450879
450906
  updateSettingsForSource("userSettings", newSettings);
450880
450907
  setSettingsData((prev_27) => ({
@@ -459183,7 +459210,7 @@ function HelpV2(t0) {
459183
459210
  let t6;
459184
459211
  if ($2[31] !== tabs) {
459185
459212
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
459186
- title: `UR v${"1.81.9"}`,
459213
+ title: `UR v${"1.81.10"}`,
459187
459214
  color: "professionalBlue",
459188
459215
  defaultTab: "general",
459189
459216
  children: tabs
@@ -460116,7 +460143,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
460116
460143
  async function handleInitialize(options2) {
460117
460144
  return {
460118
460145
  name: "UR",
460119
- version: "1.81.9",
460146
+ version: "1.81.10",
460120
460147
  protocolVersion: "0.1.0",
460121
460148
  workspaceRoot: options2.cwd,
460122
460149
  capabilities: {
@@ -477224,7 +477251,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
477224
477251
  return [];
477225
477252
  }
477226
477253
  }
477227
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.9") {
477254
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.10") {
477228
477255
  if (process.env.USER_TYPE === "ant") {
477229
477256
  const changelog = "";
477230
477257
  if (changelog) {
@@ -477251,7 +477278,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.9")
477251
477278
  releaseNotes
477252
477279
  };
477253
477280
  }
477254
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.81.9") {
477281
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.81.10") {
477255
477282
  if (process.env.USER_TYPE === "ant") {
477256
477283
  const changelog = "";
477257
477284
  if (changelog) {
@@ -480159,7 +480186,7 @@ function getRecentActivitySync() {
480159
480186
  return cachedActivity;
480160
480187
  }
480161
480188
  function getLogoDisplayData() {
480162
- const version2 = process.env.DEMO_VERSION ?? "1.81.9";
480189
+ const version2 = process.env.DEMO_VERSION ?? "1.81.10";
480163
480190
  const serverUrl = getDirectConnectServerUrl();
480164
480191
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
480165
480192
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -481047,7 +481074,7 @@ function LogoV2() {
481047
481074
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
481048
481075
  t2 = () => {
481049
481076
  const currentConfig = getGlobalConfig();
481050
- if (currentConfig.lastReleaseNotesSeen === "1.81.9") {
481077
+ if (currentConfig.lastReleaseNotesSeen === "1.81.10") {
481051
481078
  return;
481052
481079
  }
481053
481080
  saveGlobalConfig(_temp325);
@@ -481735,12 +481762,12 @@ function LogoV2() {
481735
481762
  return t41;
481736
481763
  }
481737
481764
  function _temp325(current) {
481738
- if (current.lastReleaseNotesSeen === "1.81.9") {
481765
+ if (current.lastReleaseNotesSeen === "1.81.10") {
481739
481766
  return current;
481740
481767
  }
481741
481768
  return {
481742
481769
  ...current,
481743
- lastReleaseNotesSeen: "1.81.9"
481770
+ lastReleaseNotesSeen: "1.81.10"
481744
481771
  };
481745
481772
  }
481746
481773
  function _temp241(s_0) {
@@ -497690,7 +497717,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
497690
497717
  if (spec.name !== specName) {
497691
497718
  throw new Error("Agentic CI workflow spec name does not match");
497692
497719
  }
497693
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.9" : "1.81.9");
497720
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.10" : "1.81.10");
497694
497721
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
497695
497722
  throw new Error("invalid ur-agent package version");
497696
497723
  }
@@ -498683,7 +498710,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
498683
498710
  path: ".github/workflows/ur.yml",
498684
498711
  root: "project",
498685
498712
  content: compileAgenticCiWorkflow("default", {
498686
- packageVersion: typeof MACRO !== "undefined" ? "1.81.9" : "1.81.9"
498713
+ packageVersion: typeof MACRO !== "undefined" ? "1.81.10" : "1.81.10"
498687
498714
  })
498688
498715
  },
498689
498716
  {
@@ -498746,7 +498773,7 @@ function value(tokens, flag) {
498746
498773
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
498747
498774
  }
498748
498775
  function cliVersion() {
498749
- return typeof MACRO !== "undefined" ? "1.81.9" : "1.81.9";
498776
+ return typeof MACRO !== "undefined" ? "1.81.10" : "1.81.10";
498750
498777
  }
498751
498778
  function workflowPath(cwd2) {
498752
498779
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -504602,7 +504629,7 @@ function createAcpStdioApp(deps) {
504602
504629
  }
504603
504630
  },
504604
504631
  authMethods: [],
504605
- agentInfo: { name: "UR-Nexus", version: "1.81.9" }
504632
+ agentInfo: { name: "UR-Nexus", version: "1.81.10" }
504606
504633
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
504607
504634
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
504608
504635
  await runtime2.announce({
@@ -504699,7 +504726,7 @@ function createAcpStdioAgent(deps) {
504699
504726
  }
504700
504727
  },
504701
504728
  authMethods: [],
504702
- agentInfo: { name: "UR-Nexus", version: "1.81.9" }
504729
+ agentInfo: { name: "UR-Nexus", version: "1.81.10" }
504703
504730
  });
504704
504731
  return;
504705
504732
  case "authenticate":
@@ -715951,7 +715978,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715951
715978
  smapsRollup,
715952
715979
  platform: process.platform,
715953
715980
  nodeVersion: process.version,
715954
- ccVersion: "1.81.9"
715981
+ ccVersion: "1.81.10"
715955
715982
  };
715956
715983
  }
715957
715984
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -716540,7 +716567,7 @@ var init_bridge_kick = __esm(() => {
716540
716567
  var call154 = async () => {
716541
716568
  return {
716542
716569
  type: "text",
716543
- value: "1.81.9"
716570
+ value: "1.81.10"
716544
716571
  };
716545
716572
  }, version2, version_default;
716546
716573
  var init_version = __esm(() => {
@@ -728008,7 +728035,7 @@ function generateHtmlReport(data, insights) {
728008
728035
  </html>`;
728009
728036
  }
728010
728037
  function buildExportData(data, insights, facets, remoteStats) {
728011
- const version3 = typeof MACRO !== "undefined" ? "1.81.9" : "unknown";
728038
+ const version3 = typeof MACRO !== "undefined" ? "1.81.10" : "unknown";
728012
728039
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
728013
728040
  const facets_summary = {
728014
728041
  total: facets.size,
@@ -732321,7 +732348,7 @@ var init_sessionStorage = __esm(() => {
732321
732348
  init_settings2();
732322
732349
  init_slowOperations();
732323
732350
  init_uuid();
732324
- VERSION7 = typeof MACRO !== "undefined" ? "1.81.9" : "unknown";
732351
+ VERSION7 = typeof MACRO !== "undefined" ? "1.81.10" : "unknown";
732325
732352
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
732326
732353
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
732327
732354
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -733536,7 +733563,7 @@ var init_filesystem = __esm(() => {
733536
733563
  });
733537
733564
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
733538
733565
  const nonce = randomBytes24(16).toString("hex");
733539
- return join243(getURTempDir(), "bundled-skills", "1.81.9", nonce);
733566
+ return join243(getURTempDir(), "bundled-skills", "1.81.10", nonce);
733540
733567
  });
733541
733568
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
733542
733569
  });
@@ -739936,11 +739963,81 @@ function computeFingerprint(messageText2, version3) {
739936
739963
  }
739937
739964
  function computeFingerprintFromMessages(messages) {
739938
739965
  const firstMessageText = extractFirstMessageText(messages);
739939
- return computeFingerprint(firstMessageText, "1.81.9");
739966
+ return computeFingerprint(firstMessageText, "1.81.10");
739940
739967
  }
739941
739968
  var FINGERPRINT_SALT = "59cf53e54c78";
739942
739969
  var init_fingerprint = () => {};
739943
739970
 
739971
+ // src/utils/model/providerRequestTuning.ts
739972
+ function usesConservativeOutputReservation(provider) {
739973
+ return CONSERVATIVE_OUTPUT_PROVIDERS.has(provider);
739974
+ }
739975
+ function getProviderRequestProfile(input) {
739976
+ if (!LIGHTWEIGHT_CHAT_PROVIDERS.has(input.provider) || !(input.querySource.startsWith("repl_main_thread") || input.querySource === "sdk")) {
739977
+ return { mode: "agent" };
739978
+ }
739979
+ if (input.messages.some((message) => message.type === "assistant")) {
739980
+ return { mode: "agent" };
739981
+ }
739982
+ const visibleUserMessages = input.messages.filter((message) => message.type === "user" && !message.isMeta && !message.isCompactSummary && !message.toolUseResult);
739983
+ if (visibleUserMessages.length !== 1) {
739984
+ return { mode: "agent" };
739985
+ }
739986
+ const prompt = textOnlyContent(visibleUserMessages[0]);
739987
+ if (prompt === undefined || !isTrivialGreeting(prompt)) {
739988
+ return { mode: "agent" };
739989
+ }
739990
+ return {
739991
+ mode: "lightweight-chat",
739992
+ maxOutputTokens: LIGHTWEIGHT_CHAT_MAX_OUTPUT_TOKENS,
739993
+ minContextTokens: LIGHTWEIGHT_CHAT_MIN_CONTEXT_TOKENS,
739994
+ systemPrompt: LIGHTWEIGHT_CHAT_SYSTEM_PROMPT
739995
+ };
739996
+ }
739997
+ function textOnlyContent(message) {
739998
+ const content = message?.message?.content;
739999
+ if (typeof content === "string")
740000
+ return content.trim();
740001
+ if (!Array.isArray(content) || content.length === 0)
740002
+ return;
740003
+ if (content.some((block2) => !block2 || typeof block2 !== "object" || block2.type !== "text" || typeof block2.text !== "string")) {
740004
+ return;
740005
+ }
740006
+ return content.map((block2) => block2.text).join(`
740007
+ `).trim();
740008
+ }
740009
+ function isTrivialGreeting(prompt) {
740010
+ const normalized = prompt.trim().toLowerCase();
740011
+ return /^(?:hi|hello|hey|hiya|greetings|good (?:morning|afternoon|evening)|thanks|thank you|ok|okay)[!.?,\s]*$/.test(normalized);
740012
+ }
740013
+ var CONSERVATIVE_OUTPUT_PROVIDERS, LIGHTWEIGHT_CHAT_PROVIDERS, LIGHTWEIGHT_CHAT_MAX_OUTPUT_TOKENS = 1024, LIGHTWEIGHT_CHAT_MIN_CONTEXT_TOKENS, SELF_HOSTED_DEFAULT_MAX_OUTPUT_TOKENS = 4096, LIGHTWEIGHT_CHAT_SYSTEM_PROMPT = "You are UR, a precise and professional AI assistant. Respond directly, clearly, and concisely. Do not claim to have inspected files or used tools in this lightweight chat turn.";
740014
+ var init_providerRequestTuning = __esm(() => {
740015
+ init_ollamaTuning();
740016
+ CONSERVATIVE_OUTPUT_PROVIDERS = new Set([
740017
+ "ollama",
740018
+ "lmstudio",
740019
+ "llama.cpp",
740020
+ "vllm",
740021
+ "openai-compatible"
740022
+ ]);
740023
+ LIGHTWEIGHT_CHAT_PROVIDERS = new Set([
740024
+ "ollama",
740025
+ "lmstudio",
740026
+ "llama.cpp",
740027
+ "vllm",
740028
+ "openai-compatible",
740029
+ "openai-api",
740030
+ "anthropic-api",
740031
+ "gemini-api",
740032
+ "openrouter",
740033
+ "codex-cli",
740034
+ "claude-code-cli",
740035
+ "gemini-cli",
740036
+ "antigravity-cli"
740037
+ ]);
740038
+ LIGHTWEIGHT_CHAT_MIN_CONTEXT_TOKENS = MIN_CHAT_NUM_CTX;
740039
+ });
740040
+
739944
740041
  // src/services/compact/apiMicrocompact.ts
739945
740042
  function getAPIContextManagement(options5) {
739946
740043
  const {
@@ -740472,6 +740569,15 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
740472
740569
  }
740473
740570
  const previousRequestId = getPreviousRequestIdFromMessages(messages);
740474
740571
  const resolvedModel = isBedrockRuntime() && options5.model.includes("application-inference-profile") ? await getInferenceProfileBackingModel(options5.model) ?? options5.model : options5.model;
740572
+ const requestProvider = options5.providerSettings?.active ?? getRuntimeProvider();
740573
+ const candidateRequestProfile = getProviderRequestProfile({
740574
+ provider: requestProvider,
740575
+ querySource: options5.querySource,
740576
+ messages
740577
+ });
740578
+ const providerRequestProfile = candidateRequestProfile.mode === "lightweight-chat" && !options5.hasAppendSystemPrompt && !options5.outputFormat && !options5.toolChoice && (options5.extraToolSchemas?.length ?? 0) === 0 ? candidateRequestProfile : { mode: "agent" };
740579
+ const isLightweightChat = providerRequestProfile.mode === "lightweight-chat";
740580
+ logForDebugging(`Provider request profile: ${providerRequestProfile.mode} (${requestProvider}, source=${options5.querySource}, messages=${messages.length})`);
740475
740581
  queryCheckpoint("query_tool_schema_build_start");
740476
740582
  const isAgenticQuery = options5.querySource.startsWith("repl_main_thread") || options5.querySource.startsWith("agent:") || options5.querySource === "sdk" || options5.querySource === "hook_agent" || options5.querySource === "verification_agent";
740477
740583
  const betas = getMergedBetas(options5.model, { isAgenticQuery });
@@ -740479,7 +740585,7 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
740479
740585
  betas.push(ADVISOR_BETA_HEADER);
740480
740586
  }
740481
740587
  let advisorModel;
740482
- if (isAgenticQuery && isAdvisorEnabled()) {
740588
+ if (isAgenticQuery && isAdvisorEnabled() && !isLightweightChat) {
740483
740589
  let advisorOption = options5.advisorModel;
740484
740590
  const advisorExperiment = getExperimentAdvisorModels();
740485
740591
  if (advisorExperiment !== undefined) {
@@ -740499,7 +740605,7 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
740499
740605
  }
740500
740606
  }
740501
740607
  }
740502
- let useToolSearch = await isToolSearchEnabled(options5.model, tools, options5.getToolPermissionContext, options5.agents, "query");
740608
+ let useToolSearch = isLightweightChat ? false : await isToolSearchEnabled(options5.model, tools, options5.getToolPermissionContext, options5.agents, "query");
740503
740609
  const deferredToolNames = new Set;
740504
740610
  if (useToolSearch) {
740505
740611
  for (const t of tools) {
@@ -740512,7 +740618,9 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
740512
740618
  useToolSearch = false;
740513
740619
  }
740514
740620
  let filteredTools;
740515
- if (useToolSearch) {
740621
+ if (isLightweightChat) {
740622
+ filteredTools = [];
740623
+ } else if (useToolSearch) {
740516
740624
  const discoveredToolNames = extractDiscoveredToolNames(messages);
740517
740625
  filteredTools = tools.filter((tool) => {
740518
740626
  if (!deferredToolNames.has(tool.name))
@@ -740556,7 +740664,8 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
740556
740664
  preNormalizedMessageCount: messages.length
740557
740665
  });
740558
740666
  queryCheckpoint("query_message_normalization_start");
740559
- let messagesForAPI = normalizeMessagesForAPI(messages, filteredTools);
740667
+ const requestMessages = isLightweightChat ? messages.filter((message) => message.type === "user" && !message.isMeta && !message.isCompactSummary && !message.toolUseResult) : messages;
740668
+ let messagesForAPI = normalizeMessagesForAPI(requestMessages, filteredTools);
740560
740669
  queryCheckpoint("query_message_normalization_end");
740561
740670
  if (!useToolSearch) {
740562
740671
  messagesForAPI = messagesForAPI.map((msg) => {
@@ -740596,8 +740705,11 @@ ${deferredToolList}
740596
740705
  }
740597
740706
  const hasChromeTools = filteredTools.some((t) => isToolFromMcpServer(t.name, UR_IN_CHROME_MCP_SERVER_NAME));
740598
740707
  const injectChromeHere = useToolSearch && hasChromeTools && !isMcpInstructionsDeltaEnabled();
740708
+ if (providerRequestProfile.mode === "lightweight-chat") {
740709
+ systemPrompt = asSystemPrompt([providerRequestProfile.systemPrompt]);
740710
+ }
740599
740711
  systemPrompt = asSystemPrompt([
740600
- getAttributionHeader(fingerprint2),
740712
+ usesConservativeOutputReservation(requestProvider) ? "" : getAttributionHeader(fingerprint2),
740601
740713
  getCLISyspromptPrefix({
740602
740714
  isNonInteractive: options5.isNonInteractiveSession,
740603
740715
  hasAppendSystemPrompt: options5.hasAppendSystemPrompt
@@ -740613,7 +740725,7 @@ ${deferredToolList}
740613
740725
  querySource: options5.querySource
740614
740726
  });
740615
740727
  const useBetas = betas.length > 0;
740616
- const extraToolSchemas = [...options5.extraToolSchemas ?? []];
740728
+ const extraToolSchemas = isLightweightChat ? [] : [...options5.extraToolSchemas ?? []];
740617
740729
  if (advisorModel) {
740618
740730
  extraToolSchemas.push({
740619
740731
  type: "advisor_20260301",
@@ -740682,7 +740794,9 @@ ${deferredToolList}
740682
740794
  const outputConfig = {
740683
740795
  ...extraBodyParams.output_config ?? {}
740684
740796
  };
740685
- configureEffortParams(effort, outputConfig, extraBodyParams, betasParams, options5.model, options5.providerSettings?.active);
740797
+ if (!isLightweightChat) {
740798
+ configureEffortParams(effort, outputConfig, extraBodyParams, betasParams, options5.model, options5.providerSettings?.active);
740799
+ }
740686
740800
  configureTaskBudgetParams(options5.taskBudget, outputConfig, betasParams);
740687
740801
  if (options5.outputFormat && !("format" in outputConfig)) {
740688
740802
  outputConfig.format = options5.outputFormat;
@@ -740690,8 +740804,9 @@ ${deferredToolList}
740690
740804
  betasParams.push(STRUCTURED_OUTPUTS_BETA_HEADER);
740691
740805
  }
740692
740806
  }
740693
- const maxOutputTokens2 = retryContext?.maxTokensOverride || options5.maxOutputTokensOverride || getMaxOutputTokensForModel(options5.model);
740694
- const hasThinking = thinkingConfig.type !== "disabled" && !isEnvTruthy(process.env.UR_CODE_DISABLE_THINKING);
740807
+ const configuredMaxOutputTokens = retryContext?.maxTokensOverride || options5.maxOutputTokensOverride || getMaxOutputTokensForModel(options5.model, options5.providerSettings?.active ?? getRuntimeProvider());
740808
+ const maxOutputTokens2 = providerRequestProfile.mode === "lightweight-chat" ? Math.min(configuredMaxOutputTokens, providerRequestProfile.maxOutputTokens) : configuredMaxOutputTokens;
740809
+ const hasThinking = !isLightweightChat && thinkingConfig.type !== "disabled" && !isEnvTruthy(process.env.UR_CODE_DISABLE_THINKING);
740695
740810
  let thinking = undefined;
740696
740811
  if (hasThinking && modelSupportsThinking(options5.model)) {
740697
740812
  if (!isEnvTruthy(process.env.UR_CODE_DISABLE_ADAPTIVE_THINKING) && modelSupportsAdaptiveThinking(options5.model)) {
@@ -741762,9 +741877,9 @@ function adjustParamsForNonStreaming(params, maxTokensCap) {
741762
741877
  function isMaxTokensCapEnabled() {
741763
741878
  return getFeatureValue_CACHED_MAY_BE_STALE("tengu_otk_slot_v1", false);
741764
741879
  }
741765
- function getMaxOutputTokensForModel(model) {
741766
- const maxOutputTokens = getModelMaxOutputTokens(model);
741767
- const defaultTokens = isMaxTokensCapEnabled() ? Math.min(maxOutputTokens.default, CAPPED_DEFAULT_MAX_TOKENS) : maxOutputTokens.default;
741880
+ function getMaxOutputTokensForModel(model, provider = getRuntimeProvider()) {
741881
+ const maxOutputTokens = getModelMaxOutputTokens(model, provider);
741882
+ const defaultTokens = usesConservativeOutputReservation(provider) ? Math.min(maxOutputTokens.default, SELF_HOSTED_DEFAULT_MAX_OUTPUT_TOKENS) : isMaxTokensCapEnabled() ? Math.min(maxOutputTokens.default, CAPPED_DEFAULT_MAX_TOKENS) : maxOutputTokens.default;
741768
741883
  const result = validateBoundedIntEnvVar("UR_CODE_MAX_OUTPUT_TOKENS", process.env.UR_CODE_MAX_OUTPUT_TOKENS, defaultTokens, maxOutputTokens.upperLimit);
741769
741884
  return result.effective;
741770
741885
  }
@@ -741785,6 +741900,7 @@ var init_ur2 = __esm(() => {
741785
741900
  init_log2();
741786
741901
  init_messages();
741787
741902
  init_model();
741903
+ init_providerRequestTuning();
741788
741904
  init_tokens();
741789
741905
  init_growthbook();
741790
741906
  init_urAiLimits();
@@ -741871,7 +741987,7 @@ async function sideQuery(opts) {
741871
741987
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
741872
741988
  }
741873
741989
  const messageText2 = extractFirstUserMessageText(messages);
741874
- const fingerprint2 = computeFingerprint(messageText2, "1.81.9");
741990
+ const fingerprint2 = computeFingerprint(messageText2, "1.81.10");
741875
741991
  const attributionHeader = getAttributionHeader(fingerprint2);
741876
741992
  const systemBlocks = [
741877
741993
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -746705,7 +746821,7 @@ function buildSystemInitMessage(inputs) {
746705
746821
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
746706
746822
  apiKeySource: getURHQApiKeyWithSource().source,
746707
746823
  betas: getSdkBetas(),
746708
- ur_version: "1.81.9",
746824
+ ur_version: "1.81.10",
746709
746825
  output_style: outputStyle,
746710
746826
  agents: inputs.agents.map((agent2) => agent2.agentType),
746711
746827
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -760541,7 +760657,7 @@ var init_useVoiceEnabled = __esm(() => {
760541
760657
  function getSemverPart(version3) {
760542
760658
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
760543
760659
  }
760544
- function useUpdateNotification(updatedVersion, initialVersion = "1.81.9") {
760660
+ function useUpdateNotification(updatedVersion, initialVersion = "1.81.10") {
760545
760661
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
760546
760662
  if (!updatedVersion) {
760547
760663
  return null;
@@ -760590,7 +760706,7 @@ function AutoUpdater({
760590
760706
  return;
760591
760707
  }
760592
760708
  if (false) {}
760593
- const currentVersion = "1.81.9";
760709
+ const currentVersion = "1.81.10";
760594
760710
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
760595
760711
  let latestVersion = await getLatestVersion(channel);
760596
760712
  const isDisabled = isAutoUpdaterDisabled();
@@ -760819,12 +760935,12 @@ function NativeAutoUpdater({
760819
760935
  logEvent("tengu_native_auto_updater_start", {});
760820
760936
  try {
760821
760937
  const maxVersion = await getMaxVersion();
760822
- if (maxVersion && gt("1.81.9", maxVersion)) {
760938
+ if (maxVersion && gt("1.81.10", maxVersion)) {
760823
760939
  const msg = await getMaxVersionMessage();
760824
760940
  setMaxVersionIssue(msg ?? "affects your version");
760825
760941
  }
760826
760942
  const result = await installLatest(channel);
760827
- const currentVersion = "1.81.9";
760943
+ const currentVersion = "1.81.10";
760828
760944
  const latencyMs = Date.now() - startTime;
760829
760945
  if (result.lockFailed) {
760830
760946
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -760961,17 +761077,17 @@ function PackageManagerAutoUpdater(t0) {
760961
761077
  const maxVersion = await getMaxVersion();
760962
761078
  if (maxVersion && latest && gt(latest, maxVersion)) {
760963
761079
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
760964
- if (gte("1.81.9", maxVersion)) {
760965
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.9"} is already at or above maxVersion ${maxVersion}, skipping update`);
761080
+ if (gte("1.81.10", maxVersion)) {
761081
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
760966
761082
  setUpdateAvailable(false);
760967
761083
  return;
760968
761084
  }
760969
761085
  latest = maxVersion;
760970
761086
  }
760971
- const hasUpdate = latest && !gte("1.81.9", latest) && !shouldSkipVersion(latest);
761087
+ const hasUpdate = latest && !gte("1.81.10", latest) && !shouldSkipVersion(latest);
760972
761088
  setUpdateAvailable(!!hasUpdate);
760973
761089
  if (hasUpdate) {
760974
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.9"} -> ${latest}`);
761090
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.10"} -> ${latest}`);
760975
761091
  }
760976
761092
  };
760977
761093
  $2[0] = t1;
@@ -761005,7 +761121,7 @@ function PackageManagerAutoUpdater(t0) {
761005
761121
  wrap: "truncate",
761006
761122
  children: [
761007
761123
  "currentVersion: ",
761008
- "1.81.9"
761124
+ "1.81.10"
761009
761125
  ]
761010
761126
  }, undefined, true, undefined, this);
761011
761127
  $2[3] = verbose;
@@ -771858,7 +771974,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
771858
771974
  project_dir: getOriginalCwd(),
771859
771975
  added_dirs: addedDirs
771860
771976
  },
771861
- version: "1.81.9",
771977
+ version: "1.81.10",
771862
771978
  output_style: {
771863
771979
  name: outputStyleName
771864
771980
  },
@@ -771993,7 +772109,7 @@ function StatusLineInner({
771993
772109
  const attention = customStatusError ?? taskAttention;
771994
772110
  const terminalSize = React133.useContext(TerminalSizeContext);
771995
772111
  const defaultStatusLineText = buildDefaultStatusBar({
771996
- version: "1.81.9",
772112
+ version: "1.81.10",
771997
772113
  providerLabel: providerRuntime.providerLabel,
771998
772114
  authMode: providerRuntime.authLabel,
771999
772115
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -784249,7 +784365,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
784249
784365
  } catch {}
784250
784366
  const data = {
784251
784367
  trigger: trigger2,
784252
- version: "1.81.9",
784368
+ version: "1.81.10",
784253
784369
  platform: process.platform,
784254
784370
  transcript,
784255
784371
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -796618,7 +796734,7 @@ function WelcomeV2() {
796618
796734
  dimColor: true,
796619
796735
  children: [
796620
796736
  "v",
796621
- "1.81.9"
796737
+ "1.81.10"
796622
796738
  ]
796623
796739
  }, undefined, true, undefined, this)
796624
796740
  ]
@@ -797878,7 +797994,7 @@ function completeOnboarding() {
797878
797994
  saveGlobalConfig((current) => ({
797879
797995
  ...current,
797880
797996
  hasCompletedOnboarding: true,
797881
- lastOnboardingVersion: "1.81.9"
797997
+ lastOnboardingVersion: "1.81.10"
797882
797998
  }));
797883
797999
  }
797884
798000
  function showDialog(root2, renderer) {
@@ -803024,7 +803140,7 @@ function appendToLog(path28, message) {
803024
803140
  cwd: getFsImplementation().cwd(),
803025
803141
  userType: process.env.USER_TYPE,
803026
803142
  sessionId: getSessionId(),
803027
- version: "1.81.9"
803143
+ version: "1.81.10"
803028
803144
  };
803029
803145
  getLogWriter(path28).write(messageWithTimestamp);
803030
803146
  }
@@ -807188,8 +807304,8 @@ async function getEnvLessBridgeConfig() {
807188
807304
  }
807189
807305
  async function checkEnvLessBridgeMinVersion() {
807190
807306
  const cfg = await getEnvLessBridgeConfig();
807191
- if (cfg.min_version && lt("1.81.9", cfg.min_version)) {
807192
- return `Your version of UR (${"1.81.9"}) is too old for Remote Control.
807307
+ if (cfg.min_version && lt("1.81.10", cfg.min_version)) {
807308
+ return `Your version of UR (${"1.81.10"}) is too old for Remote Control.
807193
807309
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
807194
807310
  }
807195
807311
  return null;
@@ -807663,7 +807779,7 @@ async function initBridgeCore(params) {
807663
807779
  const rawApi = createBridgeApiClient({
807664
807780
  baseUrl,
807665
807781
  getAccessToken,
807666
- runnerVersion: "1.81.9",
807782
+ runnerVersion: "1.81.10",
807667
807783
  onDebug: logForDebugging,
807668
807784
  onAuth401,
807669
807785
  getTrustedDeviceToken
@@ -817139,7 +817255,7 @@ function getAgUiCapabilities() {
817139
817255
  name: "UR-Nexus",
817140
817256
  type: "ur-nexus",
817141
817257
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
817142
- version: "1.81.9",
817258
+ version: "1.81.10",
817143
817259
  provider: "UR",
817144
817260
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
817145
817261
  },
@@ -818366,7 +818482,7 @@ function createMCPServer(cwd4, debug2, verbose) {
818366
818482
  };
818367
818483
  const server2 = new Server({
818368
818484
  name: "ur-nexus",
818369
- version: "1.81.9"
818485
+ version: "1.81.10"
818370
818486
  }, {
818371
818487
  capabilities: {
818372
818488
  tools: {}
@@ -819570,7 +819686,7 @@ function thrownResponse(error40) {
819570
819686
  }
819571
819687
  async function createUrMcp2026Runtime(options5) {
819572
819688
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
819573
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.9" }, { capabilities: {} });
819689
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.10" }, { capabilities: {} });
819574
819690
  const [clientTransport, serverTransport] = createLinkedTransportPair();
819575
819691
  try {
819576
819692
  await server2.connect(serverTransport);
@@ -819581,7 +819697,7 @@ async function createUrMcp2026Runtime(options5) {
819581
819697
  }
819582
819698
  const runtime2 = new Mcp2026Runtime({
819583
819699
  cwd: options5.cwd,
819584
- version: "1.81.9",
819700
+ version: "1.81.10",
819585
819701
  backend: {
819586
819702
  listTools: async () => {
819587
819703
  const listed = await client2.listTools();
@@ -822316,7 +822432,7 @@ async function update() {
822316
822432
  logEvent("tengu_update_check", {});
822317
822433
  const diagnostic2 = await getDoctorDiagnostic();
822318
822434
  const result = await checkUpgradeStatus({
822319
- currentVersion: "1.81.9",
822435
+ currentVersion: "1.81.10",
822320
822436
  packageName: UR_AGENT_PACKAGE_NAME,
822321
822437
  installationType: diagnostic2.installationType,
822322
822438
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -823644,7 +823760,7 @@ ${customInstructions}` : customInstructions;
823644
823760
  }
823645
823761
  }
823646
823762
  logForDiagnosticsNoPII("info", "started", {
823647
- version: "1.81.9",
823763
+ version: "1.81.10",
823648
823764
  is_native_binary: isInBundledMode()
823649
823765
  });
823650
823766
  registerCleanup(async () => {
@@ -824431,7 +824547,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
824431
824547
  pendingHookMessages
824432
824548
  }, renderAndRun);
824433
824549
  }
824434
- }).version("1.81.9 (UR-Nexus)", "-v, --version", "Output the version number");
824550
+ }).version("1.81.10 (UR-Nexus)", "-v, --version", "Output the version number");
824435
824551
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
824436
824552
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
824437
824553
  if (canUserConfigureAdvisor()) {
@@ -825558,7 +825674,7 @@ if (false) {}
825558
825674
  async function main2() {
825559
825675
  const args = process.argv.slice(2);
825560
825676
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
825561
- console.log(`${"1.81.9"} (UR-Nexus)`);
825677
+ console.log(`${"1.81.10"} (UR-Nexus)`);
825562
825678
  return;
825563
825679
  }
825564
825680
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.81.9 (UR-Nexus)"
22
+ # expected for this release: "1.81.10 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ### 0.0 Redteam mode and Reverse Skills (1.81.0)
@@ -45,7 +45,7 @@
45
45
  <main id="content" class="content">
46
46
  <header class="topbar">
47
47
  <div>
48
- <p class="eyebrow">Version 1.81.9</p>
48
+ <p class="eyebrow">Version 1.81.10</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.81.9"
10
+ version = "1.81.10"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.81.9",
5
+ "version": "1.81.10",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.81.9",
3
+ "version": "1.81.10",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",