ur-agent 1.58.0 → 1.58.1

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.58.1
4
+
5
+ - Unified vision-capability detection behind
6
+ `src/utils/model/visionCapability.ts`. Three implementations disagreed: the
7
+ Ollama adapter's `modelCapabilityEnabled` returned `has(x) ?? true`, so a
8
+ model advertising nothing was assumed capable; `ur model-doctor` matched
9
+ names privately; the router read a precomputed flag. The binary shape was the
10
+ defect — absence of evidence was reported as evidence, in opposite directions.
11
+ - Vision support is now tri-state. A capability list is authoritative both ways;
12
+ a recognised name can confirm support but never rule it out; anything else is
13
+ `unknown`. Images are withheld only on a confirmed no, so servers without a
14
+ capabilities endpoint keep working, and the note distinguishes "this model
15
+ cannot see" from "support could not be confirmed" — advice that had been
16
+ backwards for models like `kimi-k2.7-code:cloud`.
17
+
18
+ - Fixed choice menus where all three fields said the same thing. Neither the
19
+ schema nor the tool prompt stated that `header`, `label` and `description`
20
+ must carry different information, so the header restated the question and the
21
+ description paraphrased the label — leaving the one field with room to be
22
+ informative saying nothing. Each field now has a defined job, and the prompt
23
+ carries a contrasted bad/good example rather than an abstract instruction.
24
+
3
25
  ## 1.58.0
4
26
 
5
27
  - Added per-agent cost and token attribution: `ur agent-inspect --costs`.
package/dist/cli.js CHANGED
@@ -16738,6 +16738,48 @@ var init_git = __esm(() => {
16738
16738
  });
16739
16739
  });
16740
16740
 
16741
+ // src/utils/model/visionCapability.ts
16742
+ function nameSuggestsVision(model) {
16743
+ const lowered = model.toLowerCase();
16744
+ return VISION_NAME_HINTS.some((hint) => lowered.includes(hint));
16745
+ }
16746
+ function resolveVisionSupport(model, capabilities) {
16747
+ if (capabilities && capabilities.size > 0) {
16748
+ return capabilities.has("vision") ? "supported" : "unsupported";
16749
+ }
16750
+ return nameSuggestsVision(model) ? "supported" : "unknown";
16751
+ }
16752
+ function shouldSendImages(support) {
16753
+ return support !== "unsupported";
16754
+ }
16755
+ function describeVisionSupport(support, model, imageCount) {
16756
+ if (imageCount === 0 || support === "supported")
16757
+ return null;
16758
+ const plural = imageCount === 1 ? "1 image" : `${imageCount} images`;
16759
+ const named = model ? `"${model}"` : "the selected model";
16760
+ if (support === "unsupported") {
16761
+ return `[${plural} could not be sent: ${named} advertises its capabilities and ` + `vision is not among them, so it cannot see images. Tell the user this ` + `directly and suggest switching to a vision model with /model.]`;
16762
+ }
16763
+ return `[${plural} sent, but ${named} does not advertise its capabilities, so ` + `vision support could not be confirmed. If you cannot see the image, say ` + `so plainly rather than guessing at its contents.]`;
16764
+ }
16765
+ var VISION_NAME_HINTS;
16766
+ var init_visionCapability = __esm(() => {
16767
+ VISION_NAME_HINTS = [
16768
+ "vision",
16769
+ "llava",
16770
+ "moondream",
16771
+ "minicpm-v",
16772
+ "bakllava",
16773
+ "llama3.2-vision",
16774
+ "qwen2-vl",
16775
+ "qwen2.5vl",
16776
+ "gemma3",
16777
+ "pixtral",
16778
+ "internvl",
16779
+ "cogvlm"
16780
+ ];
16781
+ });
16782
+
16741
16783
  // node_modules/shell-quote/quote.js
16742
16784
  var require_quote = __commonJS((exports, module) => {
16743
16785
  var OPS = [
@@ -57512,7 +57554,7 @@ function toOllamaChatRequest(params, stream4, capabilities) {
57512
57554
  model: params.model,
57513
57555
  messages: [
57514
57556
  systemMessage,
57515
- ...messagesToOllama(params.messages, modelCapabilityEnabled(capabilities, "vision"), params.model)
57557
+ ...messagesToOllama(params.messages, resolveVisionSupport(params.model, capabilities), params.model)
57516
57558
  ].filter((message) => message.role === "tool" || message.content.trim() !== "" || (message.images?.length ?? 0) > 0 || (message.tool_calls?.length ?? 0) > 0),
57517
57559
  stream: stream4,
57518
57560
  ...tools.length > 0 ? { tools } : {},
@@ -57558,7 +57600,8 @@ function systemToText(system) {
57558
57600
 
57559
57601
  `);
57560
57602
  }
57561
- function messagesToOllama(messages, supportsVision, model = "") {
57603
+ function messagesToOllama(messages, visionSupport, model = "") {
57604
+ const supportsVision = shouldSendImages(visionSupport);
57562
57605
  const result = [];
57563
57606
  const toolNamesById = new Map;
57564
57607
  for (const message of messages) {
@@ -57608,7 +57651,7 @@ function messagesToOllama(messages, supportsVision, model = "") {
57608
57651
  case "tool_result": {
57609
57652
  const toolName = toolNamesById.get(block.tool_use_id) ?? block.tool_use_id;
57610
57653
  const split = splitToolResultContent(block.content);
57611
- const note = describeToolResultImages(split.images.length, toolName, supportsVision, model);
57654
+ const note = describeToolResultImages(split.images.length, toolName, visionSupport, model);
57612
57655
  toolMessages.push({
57613
57656
  role: "tool",
57614
57657
  content: [split.text, note].filter(Boolean).join(`
@@ -57626,7 +57669,7 @@ function messagesToOllama(messages, supportsVision, model = "") {
57626
57669
  if (supportsVision && block.source.type === "base64") {
57627
57670
  images.push(block.source.data);
57628
57671
  } else if (!supportsVision) {
57629
- textParts.push("[Image input omitted: selected Ollama model does not advertise vision support]");
57672
+ textParts.push(describeVisionSupport(visionSupport, model, 1) ?? "[Image input omitted]");
57630
57673
  } else {
57631
57674
  textParts.push("[Image input omitted: unsupported image source]");
57632
57675
  }
@@ -58299,15 +58342,15 @@ function splitToolResultContent(content) {
58299
58342
  return { text: textParts.filter(Boolean).join(`
58300
58343
  `), images };
58301
58344
  }
58302
- function describeToolResultImages(count3, toolName, supportsVision, model) {
58345
+ function describeToolResultImages(count3, toolName, visionSupport, model) {
58303
58346
  if (count3 === 0)
58304
58347
  return "";
58305
58348
  const plural = count3 === 1 ? "image" : `${count3} images`;
58306
- if (supportsVision) {
58349
+ if (visionSupport === "supported") {
58307
58350
  return `[${plural} from ${toolName} attached to the following message]`;
58308
58351
  }
58309
- const named = model ? `"${model}"` : "the selected Ollama model";
58310
- return `[${plural} from ${toolName} could not be sent: ${named} does not advertise ` + `vision support, so it cannot see images. Tell the user this directly and ` + `suggest switching to a vision model with /model.]`;
58352
+ const detail = describeVisionSupport(visionSupport, model, count3);
58353
+ return detail ? `[from ${toolName}] ${detail}` : "";
58311
58354
  }
58312
58355
  function contentBlockToText(content) {
58313
58356
  if (typeof content === "string") {
@@ -58387,6 +58430,7 @@ var init_ollama = __esm(() => {
58387
58430
  init_ollamaTuning();
58388
58431
  init_kimiToolCalls();
58389
58432
  init_json();
58433
+ init_visionCapability();
58390
58434
  init_debug();
58391
58435
  ollamaModelCapabilitiesCache = new Map;
58392
58436
  warnedToolsUnsupportedModels = new Set;
@@ -75160,7 +75204,7 @@ var init_auth = __esm(() => {
75160
75204
 
75161
75205
  // src/utils/userAgent.ts
75162
75206
  function getURCodeUserAgent() {
75163
- return `ur/${"1.58.0"}`;
75207
+ return `ur/${"1.58.1"}`;
75164
75208
  }
75165
75209
 
75166
75210
  // src/utils/workloadContext.ts
@@ -75182,7 +75226,7 @@ function getUserAgent() {
75182
75226
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
75183
75227
  const workload = getWorkload();
75184
75228
  const workloadSuffix = workload ? `, workload/${workload}` : "";
75185
- return `ur-cli/${"1.58.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75229
+ return `ur-cli/${"1.58.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75186
75230
  }
75187
75231
  function getMCPUserAgent() {
75188
75232
  const parts = [];
@@ -75196,7 +75240,7 @@ function getMCPUserAgent() {
75196
75240
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
75197
75241
  }
75198
75242
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
75199
- return `ur/${"1.58.0"}${suffix}`;
75243
+ return `ur/${"1.58.1"}${suffix}`;
75200
75244
  }
75201
75245
  function getWebFetchUserAgent() {
75202
75246
  return `UR-User (${getURCodeUserAgent()})`;
@@ -75334,7 +75378,7 @@ var init_user = __esm(() => {
75334
75378
  deviceId,
75335
75379
  sessionId: getSessionId(),
75336
75380
  email: getEmail(),
75337
- appVersion: "1.58.0",
75381
+ appVersion: "1.58.1",
75338
75382
  platform: getHostPlatformForAnalytics(),
75339
75383
  organizationUuid,
75340
75384
  accountUuid,
@@ -83534,7 +83578,7 @@ var init_metadata = __esm(() => {
83534
83578
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
83535
83579
  WHITESPACE_REGEX = /\s+/;
83536
83580
  getVersionBase = memoize_default(() => {
83537
- const match = "1.58.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83581
+ const match = "1.58.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83538
83582
  return match ? match[0] : undefined;
83539
83583
  });
83540
83584
  buildEnvContext = memoize_default(async () => {
@@ -83574,7 +83618,7 @@ var init_metadata = __esm(() => {
83574
83618
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
83575
83619
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
83576
83620
  isURAiAuth: isURAISubscriber(),
83577
- version: "1.58.0",
83621
+ version: "1.58.1",
83578
83622
  versionBase: getVersionBase(),
83579
83623
  buildTime: "",
83580
83624
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -84244,7 +84288,7 @@ function initialize1PEventLogging() {
84244
84288
  const platform2 = getPlatform();
84245
84289
  const attributes = {
84246
84290
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
84247
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.58.0"
84291
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.58.1"
84248
84292
  };
84249
84293
  if (platform2 === "wsl") {
84250
84294
  const wslVersion = getWslVersion();
@@ -84272,7 +84316,7 @@ function initialize1PEventLogging() {
84272
84316
  })
84273
84317
  ]
84274
84318
  });
84275
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.58.0");
84319
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.58.1");
84276
84320
  }
84277
84321
  async function reinitialize1PEventLoggingIfConfigChanged() {
84278
84322
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -88101,8 +88145,7 @@ function buildOllamaShowRequestBody(name) {
88101
88145
  return JSON.stringify({ model: name });
88102
88146
  }
88103
88147
  function inferVision(name, capabilities) {
88104
- const lowered = name.toLowerCase();
88105
- return capabilities.includes("vision") || lowered.includes("vision") || lowered.includes("llava") || lowered.includes("moondream") || lowered.includes("minicpm-v");
88148
+ return resolveVisionSupport(name, capabilities.length > 0 ? new Set(capabilities) : null) === "supported";
88106
88149
  }
88107
88150
  function inferCode(name, family) {
88108
88151
  const lowered = `${name} ${family ?? ""}`.toLowerCase();
@@ -88173,6 +88216,7 @@ var call = async (args) => {
88173
88216
  };
88174
88217
  };
88175
88218
  var init_model_doctor = __esm(() => {
88219
+ init_visionCapability();
88176
88220
  init_argumentSubstitution();
88177
88221
  init_ollamaConfig();
88178
88222
  });
@@ -94111,7 +94155,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
94111
94155
  function formatA2AAgentCard(options = {}, pretty = true) {
94112
94156
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
94113
94157
  }
94114
- var urVersion = "1.58.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94158
+ var urVersion = "1.58.1", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94115
94159
  var init_trends = __esm(() => {
94116
94160
  init_a2aCardSignature();
94117
94161
  coverage = [
@@ -96912,7 +96956,7 @@ function getAttributionHeader(fingerprint) {
96912
96956
  if (!isAttributionHeaderEnabled()) {
96913
96957
  return "";
96914
96958
  }
96915
- const version2 = `${"1.58.0"}.${fingerprint}`;
96959
+ const version2 = `${"1.58.1"}.${fingerprint}`;
96916
96960
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
96917
96961
  const cch = "";
96918
96962
  const workload = getWorkload();
@@ -154501,7 +154545,7 @@ var init_projectSafety = __esm(() => {
154501
154545
  function getInstruments() {
154502
154546
  if (instruments)
154503
154547
  return instruments;
154504
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.58.0");
154548
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.58.1");
154505
154549
  instruments = {
154506
154550
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
154507
154551
  description: "GenAI operation duration.",
@@ -154599,7 +154643,7 @@ function genAiAgentAttributes() {
154599
154643
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
154600
154644
  "gen_ai.provider.name": "ur",
154601
154645
  "gen_ai.agent.name": "UR-Nexus",
154602
- "gen_ai.agent.version": "1.58.0"
154646
+ "gen_ai.agent.version": "1.58.1"
154603
154647
  };
154604
154648
  }
154605
154649
  function genAiWorkflowAttributes(workflowName) {
@@ -154615,7 +154659,7 @@ function genAiWorkflowAttributes(workflowName) {
154615
154659
  function startGenAiWorkflowSpan(workflowName) {
154616
154660
  const attributes = genAiWorkflowAttributes(workflowName);
154617
154661
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
154618
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.58.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154662
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.58.1").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154619
154663
  }
154620
154664
  function endGenAiWorkflowSpan(span, options2 = {}) {
154621
154665
  try {
@@ -154653,7 +154697,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
154653
154697
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
154654
154698
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
154655
154699
  }
154656
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.58.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154700
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.58.1").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154657
154701
  }
154658
154702
  function endGenAiMemorySpan(span, options2 = {}) {
154659
154703
  try {
@@ -206172,7 +206216,7 @@ function getTelemetryAttributes() {
206172
206216
  attributes["session.id"] = sessionId;
206173
206217
  }
206174
206218
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
206175
- attributes["app.version"] = "1.58.0";
206219
+ attributes["app.version"] = "1.58.1";
206176
206220
  }
206177
206221
  const oauthAccount = getOauthAccountInfo();
206178
206222
  if (oauthAccount) {
@@ -222363,6 +222407,24 @@ Usage notes:
222363
222407
  - Use multiSelect: true to allow multiple answers to be selected for a question
222364
222408
  - If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
222365
222409
 
222410
+ Writing the three fields \u2014 they must each carry DIFFERENT information:
222411
+ - \`header\` names the dimension being decided ("Database", "Auth method"). It is not a shortened copy of the question.
222412
+ - \`label\` names the choice ("PostgreSQL"). It is not a restatement of the question.
222413
+ - \`description\` says what happens if this is picked and what it costs \u2014 the trade-off, limitation or consequence the label does not already convey. It is the only field with room to be genuinely informative, so it must not paraphrase the label back to the user.
222414
+
222415
+ A description that can be derived from reading the label is wasted space and makes the menu harder to use, not easier. Before writing one, ask: does this tell the user something they could not already see? If not, replace it with the thing that actually distinguishes this option from its neighbours.
222416
+
222417
+ Bad \u2014 description restates the label:
222418
+ question: "Which database should we use?"
222419
+ header: "Which DB" (repeats the question)
222420
+ label: "Use PostgreSQL" description: "Use PostgreSQL as the database."
222421
+
222422
+ Good \u2014 each field adds something:
222423
+ question: "Which database should we use?"
222424
+ header: "Database"
222425
+ label: "PostgreSQL" description: "Relational with strong consistency; needs a running server and a migration step."
222426
+ label: "SQLite" description: "Zero setup, single file; no concurrent writers, so it will not survive multiple workers."
222427
+
222366
222428
  Plan mode note: In plan mode, use this tool to clarify requirements or choose between approaches BEFORE finalizing your plan. Do NOT use this tool to ask "Is my plan ready?" or "Should I proceed?" - use ${EXIT_PLAN_MODE_TOOL_NAME} for plan approval. IMPORTANT: Do not reference "the plan" in your questions (e.g., "Do you have feedback about the plan?", "Does the plan look good?") because the user cannot see the plan in the UI until you call ${EXIT_PLAN_MODE_TOOL_NAME}. If you need plan approval, use ${EXIT_PLAN_MODE_TOOL_NAME} instead.
222367
222429
  `;
222368
222430
  });
@@ -241846,7 +241908,7 @@ function getInstallationEnv() {
241846
241908
  return;
241847
241909
  }
241848
241910
  function getURCodeVersion() {
241849
- return "1.58.0";
241911
+ return "1.58.1";
241850
241912
  }
241851
241913
  async function getInstalledVSCodeExtensionVersion(command) {
241852
241914
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -249177,7 +249239,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
249177
249239
  const client2 = new Client({
249178
249240
  name: "ur",
249179
249241
  title: "UR",
249180
- version: "1.58.0",
249242
+ version: "1.58.1",
249181
249243
  description: "UR-Nexus autonomous engineering workflow engine",
249182
249244
  websiteUrl: PRODUCT_URL
249183
249245
  }, {
@@ -249537,7 +249599,7 @@ var init_client5 = __esm(() => {
249537
249599
  const client2 = new Client({
249538
249600
  name: "ur",
249539
249601
  title: "UR",
249540
- version: "1.58.0",
249602
+ version: "1.58.1",
249541
249603
  description: "UR-Nexus autonomous engineering workflow engine",
249542
249604
  websiteUrl: PRODUCT_URL
249543
249605
  }, {
@@ -262138,7 +262200,7 @@ async function createRuntime() {
262138
262200
  bootstrapTelemetry();
262139
262201
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
262140
262202
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
262141
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.58.0"
262203
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.58.1"
262142
262204
  }));
262143
262205
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
262144
262206
  resource,
@@ -262171,11 +262233,11 @@ async function createRuntime() {
262171
262233
  setMeterProvider(meterProvider);
262172
262234
  setLoggerProvider(loggerProvider);
262173
262235
  if (meterProvider) {
262174
- const meter = meterProvider.getMeter("ur-agent", "1.58.0");
262236
+ const meter = meterProvider.getMeter("ur-agent", "1.58.1");
262175
262237
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
262176
262238
  }
262177
262239
  if (loggerProvider) {
262178
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.58.0"));
262240
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.58.1"));
262179
262241
  }
262180
262242
  if (!cleanupRegistered2) {
262181
262243
  cleanupRegistered2 = true;
@@ -262837,9 +262899,9 @@ async function assertMinVersion() {
262837
262899
  if (false) {}
262838
262900
  try {
262839
262901
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
262840
- if (versionConfig.minVersion && lt("1.58.0", versionConfig.minVersion)) {
262902
+ if (versionConfig.minVersion && lt("1.58.1", versionConfig.minVersion)) {
262841
262903
  console.error(`
262842
- It looks like your version of UR (${"1.58.0"}) needs an update.
262904
+ It looks like your version of UR (${"1.58.1"}) needs an update.
262843
262905
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
262844
262906
 
262845
262907
  To update, please run:
@@ -263055,7 +263117,7 @@ async function installGlobalPackage(specificVersion) {
263055
263117
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
263056
263118
  logEvent("tengu_auto_updater_lock_contention", {
263057
263119
  pid: process.pid,
263058
- currentVersion: "1.58.0"
263120
+ currentVersion: "1.58.1"
263059
263121
  });
263060
263122
  return "in_progress";
263061
263123
  }
@@ -263064,7 +263126,7 @@ async function installGlobalPackage(specificVersion) {
263064
263126
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
263065
263127
  logError2(new Error("Windows NPM detected in WSL environment"));
263066
263128
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
263067
- currentVersion: "1.58.0"
263129
+ currentVersion: "1.58.1"
263068
263130
  });
263069
263131
  console.error(`
263070
263132
  Error: Windows NPM detected in WSL
@@ -263599,7 +263661,7 @@ function detectLinuxGlobPatternWarnings() {
263599
263661
  }
263600
263662
  async function getDoctorDiagnostic() {
263601
263663
  const installationType = await getCurrentInstallationType();
263602
- const version2 = typeof MACRO !== "undefined" ? "1.58.0" : "unknown";
263664
+ const version2 = typeof MACRO !== "undefined" ? "1.58.1" : "unknown";
263603
263665
  const installationPath = await getInstallationPath();
263604
263666
  const invokedBinary = getInvokedBinary();
263605
263667
  const multipleInstallations = await detectMultipleInstallations();
@@ -264534,8 +264596,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
264534
264596
  const maxVersion = await getMaxVersion();
264535
264597
  if (maxVersion && gt(version2, maxVersion)) {
264536
264598
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
264537
- if (gte("1.58.0", maxVersion)) {
264538
- logForDebugging(`Native installer: current version ${"1.58.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
264599
+ if (gte("1.58.1", maxVersion)) {
264600
+ logForDebugging(`Native installer: current version ${"1.58.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
264539
264601
  logEvent("tengu_native_update_skipped_max_version", {
264540
264602
  latency_ms: Date.now() - startTime,
264541
264603
  max_version: maxVersion,
@@ -264546,7 +264608,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
264546
264608
  version2 = maxVersion;
264547
264609
  }
264548
264610
  }
264549
- if (!forceReinstall && version2 === "1.58.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
264611
+ if (!forceReinstall && version2 === "1.58.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
264550
264612
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
264551
264613
  logEvent("tengu_native_update_complete", {
264552
264614
  latency_ms: Date.now() - startTime,
@@ -320508,13 +320570,13 @@ var init_AskUserQuestionTool = __esm(() => {
320508
320570
  import_compiler_runtime117 = __toESM(require_compiler_runtime(), 1);
320509
320571
  jsx_dev_runtime145 = __toESM(require_jsx_dev_runtime(), 1);
320510
320572
  questionOptionSchema = lazySchema(() => exports_external.object({
320511
- label: exports_external.string().describe("The display text for this option that the user will see and select. Should be concise (1-5 words) and clearly describe the choice."),
320512
- description: exports_external.string().describe("Explanation of what this option means or what will happen if chosen. Useful for providing context about trade-offs or implications."),
320573
+ label: exports_external.string().describe('The choice itself, 1-5 words. Name the option, do not restate the question: for "Which database?" use "PostgreSQL", not "Use PostgreSQL for the database".'),
320574
+ description: exports_external.string().describe('What actually happens if this is chosen, and the cost of choosing it \u2014 the information the user needs that the label does not already give them. Must NOT restate the label in a full sentence. Bad: label "PostgreSQL" / description "Use PostgreSQL." Good: label "PostgreSQL" / description "Relational, strong consistency; needs a running server and a migration step." Include the trade-off, limitation, or consequence that makes this choice different from the others.'),
320513
320575
  preview: exports_external.string().optional().describe("Optional preview content rendered when this option is focused. Use for mockups, code snippets, or visual comparisons that help users compare options. See the tool description for the expected content format.")
320514
320576
  }));
320515
320577
  questionSchema = lazySchema(() => exports_external.object({
320516
320578
  question: exports_external.string().describe('The complete question to ask the user. Should be clear, specific, and end with a question mark. Example: "Which library should we use for date formatting?" If multiSelect is true, phrase it accordingly, e.g. "Which features do you want to enable?"'),
320517
- header: exports_external.string().describe(`Very short label displayed as a chip/tag (max ${ASK_USER_QUESTION_TOOL_CHIP_WIDTH} chars). Examples: "Auth method", "Library", "Approach".`),
320579
+ header: exports_external.string().describe(`The category being decided, as a chip/tag (max ${ASK_USER_QUESTION_TOOL_CHIP_WIDTH} chars). Name the dimension, not the question: for "Which database should we use?" the header is "Database", not "Which DB". Examples: "Auth method", "Library", "Approach".`),
320518
320580
  options: exports_external.array(questionOptionSchema()).min(2).max(8).describe(`The available choices for this question. Must have 2-8 options. Keep options concise and distinct; there should be no 'Other' option, that will be provided automatically.`),
320519
320581
  multiSelect: exports_external.boolean().default(false).describe("Set to true to allow the user to select multiple options instead of just one. Use when choices are not mutually exclusive.")
320520
320582
  }));
@@ -334741,7 +334803,7 @@ function isAnyTracingEnabled() {
334741
334803
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
334742
334804
  }
334743
334805
  function getTracer() {
334744
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.58.0");
334806
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.58.1");
334745
334807
  }
334746
334808
  function createSpanAttributes(spanType, customAttributes = {}) {
334747
334809
  const baseAttributes = getTelemetryAttributes();
@@ -364244,7 +364306,7 @@ function Feedback({
364244
364306
  platform: env2.platform,
364245
364307
  gitRepo: envInfo.isGit,
364246
364308
  terminal: env2.terminal,
364247
- version: "1.58.0",
364309
+ version: "1.58.1",
364248
364310
  transcript: normalizeMessagesForAPI(messages),
364249
364311
  errors: sanitizedErrors,
364250
364312
  lastApiRequest: getLastAPIRequest(),
@@ -364436,7 +364498,7 @@ function Feedback({
364436
364498
  ", ",
364437
364499
  env2.terminal,
364438
364500
  ", v",
364439
- "1.58.0"
364501
+ "1.58.1"
364440
364502
  ]
364441
364503
  }, undefined, true, undefined, this)
364442
364504
  ]
@@ -364542,7 +364604,7 @@ ${sanitizedDescription}
364542
364604
  ` + `**Environment Info**
364543
364605
  ` + `- Platform: ${env2.platform}
364544
364606
  ` + `- Terminal: ${env2.terminal}
364545
- ` + `- Version: ${"1.58.0"}
364607
+ ` + `- Version: ${"1.58.1"}
364546
364608
  ` + `- Feedback ID: ${feedbackId}
364547
364609
  ` + `
364548
364610
  **Errors**
@@ -367652,7 +367714,7 @@ function buildPrimarySection() {
367652
367714
  }, undefined, false, undefined, this);
367653
367715
  return [{
367654
367716
  label: "Version",
367655
- value: "1.58.0"
367717
+ value: "1.58.1"
367656
367718
  }, {
367657
367719
  label: "Session name",
367658
367720
  value: nameValue
@@ -370982,7 +371044,7 @@ function Config({
370982
371044
  }
370983
371045
  }, undefined, false, undefined, this)
370984
371046
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
370985
- currentVersion: "1.58.0",
371047
+ currentVersion: "1.58.1",
370986
371048
  onChoice: (choice) => {
370987
371049
  setShowSubmenu(null);
370988
371050
  setTabsHidden(false);
@@ -370994,7 +371056,7 @@ function Config({
370994
371056
  autoUpdatesChannel: "stable"
370995
371057
  };
370996
371058
  if (choice === "stay") {
370997
- newSettings.minimumVersion = "1.58.0";
371059
+ newSettings.minimumVersion = "1.58.1";
370998
371060
  }
370999
371061
  updateSettingsForSource("userSettings", newSettings);
371000
371062
  setSettingsData((prev_27) => ({
@@ -379058,7 +379120,7 @@ function HelpV2(t0) {
379058
379120
  let t6;
379059
379121
  if ($2[31] !== tabs) {
379060
379122
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
379061
- title: `UR v${"1.58.0"}`,
379123
+ title: `UR v${"1.58.1"}`,
379062
379124
  color: "professionalBlue",
379063
379125
  defaultTab: "general",
379064
379126
  children: tabs
@@ -379975,7 +380037,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
379975
380037
  async function handleInitialize(options2) {
379976
380038
  return {
379977
380039
  name: "UR",
379978
- version: "1.58.0",
380040
+ version: "1.58.1",
379979
380041
  protocolVersion: "0.1.0",
379980
380042
  workspaceRoot: options2.cwd,
379981
380043
  capabilities: {
@@ -397083,7 +397145,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
397083
397145
  return [];
397084
397146
  }
397085
397147
  }
397086
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.58.0") {
397148
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.58.1") {
397087
397149
  if (process.env.USER_TYPE === "ant") {
397088
397150
  const changelog = "";
397089
397151
  if (changelog) {
@@ -397110,7 +397172,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.58.0")
397110
397172
  releaseNotes
397111
397173
  };
397112
397174
  }
397113
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.58.0") {
397175
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.58.1") {
397114
397176
  if (process.env.USER_TYPE === "ant") {
397115
397177
  const changelog = "";
397116
397178
  if (changelog) {
@@ -399967,7 +400029,7 @@ function getRecentActivitySync() {
399967
400029
  return cachedActivity;
399968
400030
  }
399969
400031
  function getLogoDisplayData() {
399970
- const version2 = process.env.DEMO_VERSION ?? "1.58.0";
400032
+ const version2 = process.env.DEMO_VERSION ?? "1.58.1";
399971
400033
  const serverUrl = getDirectConnectServerUrl();
399972
400034
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
399973
400035
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -400851,7 +400913,7 @@ function LogoV2() {
400851
400913
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
400852
400914
  t2 = () => {
400853
400915
  const currentConfig2 = getGlobalConfig();
400854
- if (currentConfig2.lastReleaseNotesSeen === "1.58.0") {
400916
+ if (currentConfig2.lastReleaseNotesSeen === "1.58.1") {
400855
400917
  return;
400856
400918
  }
400857
400919
  saveGlobalConfig(_temp327);
@@ -401536,12 +401598,12 @@ function LogoV2() {
401536
401598
  return t41;
401537
401599
  }
401538
401600
  function _temp327(current) {
401539
- if (current.lastReleaseNotesSeen === "1.58.0") {
401601
+ if (current.lastReleaseNotesSeen === "1.58.1") {
401540
401602
  return current;
401541
401603
  }
401542
401604
  return {
401543
401605
  ...current,
401544
- lastReleaseNotesSeen: "1.58.0"
401606
+ lastReleaseNotesSeen: "1.58.1"
401545
401607
  };
401546
401608
  }
401547
401609
  function _temp241(s_0) {
@@ -418339,7 +418401,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
418339
418401
  if (spec.name !== specName) {
418340
418402
  throw new Error("Agentic CI workflow spec name does not match");
418341
418403
  }
418342
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.58.0" : "1.58.0");
418404
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.58.1" : "1.58.1");
418343
418405
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
418344
418406
  throw new Error("invalid ur-agent package version");
418345
418407
  }
@@ -419332,7 +419394,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
419332
419394
  path: ".github/workflows/ur.yml",
419333
419395
  root: "project",
419334
419396
  content: compileAgenticCiWorkflow("default", {
419335
- packageVersion: typeof MACRO !== "undefined" ? "1.58.0" : "1.58.0"
419397
+ packageVersion: typeof MACRO !== "undefined" ? "1.58.1" : "1.58.1"
419336
419398
  })
419337
419399
  },
419338
419400
  {
@@ -419395,7 +419457,7 @@ function value(tokens, flag) {
419395
419457
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
419396
419458
  }
419397
419459
  function cliVersion() {
419398
- return typeof MACRO !== "undefined" ? "1.58.0" : "1.58.0";
419460
+ return typeof MACRO !== "undefined" ? "1.58.1" : "1.58.1";
419399
419461
  }
419400
419462
  function workflowPath(cwd2) {
419401
419463
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -425251,7 +425313,7 @@ function createAcpStdioApp(deps) {
425251
425313
  }
425252
425314
  },
425253
425315
  authMethods: [],
425254
- agentInfo: { name: "UR-Nexus", version: "1.58.0" }
425316
+ agentInfo: { name: "UR-Nexus", version: "1.58.1" }
425255
425317
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
425256
425318
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
425257
425319
  await runtime2.announce({
@@ -425348,7 +425410,7 @@ function createAcpStdioAgent(deps) {
425348
425410
  }
425349
425411
  },
425350
425412
  authMethods: [],
425351
- agentInfo: { name: "UR-Nexus", version: "1.58.0" }
425413
+ agentInfo: { name: "UR-Nexus", version: "1.58.1" }
425352
425414
  });
425353
425415
  return;
425354
425416
  case "authenticate":
@@ -632851,7 +632913,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
632851
632913
  smapsRollup,
632852
632914
  platform: process.platform,
632853
632915
  nodeVersion: process.version,
632854
- ccVersion: "1.58.0"
632916
+ ccVersion: "1.58.1"
632855
632917
  };
632856
632918
  }
632857
632919
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -633431,7 +633493,7 @@ var init_bridge_kick = __esm(() => {
633431
633493
  var call149 = async () => {
633432
633494
  return {
633433
633495
  type: "text",
633434
- value: "1.58.0"
633496
+ value: "1.58.1"
633435
633497
  };
633436
633498
  }, version2, version_default;
633437
633499
  var init_version = __esm(() => {
@@ -644502,7 +644564,7 @@ function generateHtmlReport(data, insights) {
644502
644564
  </html>`;
644503
644565
  }
644504
644566
  function buildExportData(data, insights, facets, remoteStats) {
644505
- const version3 = typeof MACRO !== "undefined" ? "1.58.0" : "unknown";
644567
+ const version3 = typeof MACRO !== "undefined" ? "1.58.1" : "unknown";
644506
644568
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
644507
644569
  const facets_summary = {
644508
644570
  total: facets.size,
@@ -648805,7 +648867,7 @@ var init_sessionStorage = __esm(() => {
648805
648867
  init_settings2();
648806
648868
  init_slowOperations();
648807
648869
  init_uuid();
648808
- VERSION7 = typeof MACRO !== "undefined" ? "1.58.0" : "unknown";
648870
+ VERSION7 = typeof MACRO !== "undefined" ? "1.58.1" : "unknown";
648809
648871
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
648810
648872
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
648811
648873
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -650020,7 +650082,7 @@ var init_filesystem = __esm(() => {
650020
650082
  });
650021
650083
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
650022
650084
  const nonce = randomBytes20(16).toString("hex");
650023
- return join228(getURTempDir(), "bundled-skills", "1.58.0", nonce);
650085
+ return join228(getURTempDir(), "bundled-skills", "1.58.1", nonce);
650024
650086
  });
650025
650087
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
650026
650088
  });
@@ -656315,7 +656377,7 @@ function computeFingerprint(messageText2, version3) {
656315
656377
  }
656316
656378
  function computeFingerprintFromMessages(messages) {
656317
656379
  const firstMessageText = extractFirstMessageText(messages);
656318
- return computeFingerprint(firstMessageText, "1.58.0");
656380
+ return computeFingerprint(firstMessageText, "1.58.1");
656319
656381
  }
656320
656382
  var FINGERPRINT_SALT = "59cf53e54c78";
656321
656383
  var init_fingerprint = () => {};
@@ -658211,7 +658273,7 @@ async function sideQuery(opts) {
658211
658273
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
658212
658274
  }
658213
658275
  const messageText2 = extractFirstUserMessageText(messages);
658214
- const fingerprint2 = computeFingerprint(messageText2, "1.58.0");
658276
+ const fingerprint2 = computeFingerprint(messageText2, "1.58.1");
658215
658277
  const attributionHeader = getAttributionHeader(fingerprint2);
658216
658278
  const systemBlocks = [
658217
658279
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -662982,7 +663044,7 @@ function buildSystemInitMessage(inputs) {
662982
663044
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
662983
663045
  apiKeySource: getURHQApiKeyWithSource().source,
662984
663046
  betas: getSdkBetas(),
662985
- ur_version: "1.58.0",
663047
+ ur_version: "1.58.1",
662986
663048
  output_style: outputStyle2,
662987
663049
  agents: inputs.agents.map((agent2) => agent2.agentType),
662988
663050
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -676842,7 +676904,7 @@ var init_useVoiceEnabled = __esm(() => {
676842
676904
  function getSemverPart(version3) {
676843
676905
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
676844
676906
  }
676845
- function useUpdateNotification(updatedVersion, initialVersion = "1.58.0") {
676907
+ function useUpdateNotification(updatedVersion, initialVersion = "1.58.1") {
676846
676908
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
676847
676909
  if (!updatedVersion) {
676848
676910
  return null;
@@ -676891,7 +676953,7 @@ function AutoUpdater({
676891
676953
  return;
676892
676954
  }
676893
676955
  if (false) {}
676894
- const currentVersion = "1.58.0";
676956
+ const currentVersion = "1.58.1";
676895
676957
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
676896
676958
  let latestVersion = await getLatestVersion(channel);
676897
676959
  const isDisabled = isAutoUpdaterDisabled();
@@ -677120,12 +677182,12 @@ function NativeAutoUpdater({
677120
677182
  logEvent("tengu_native_auto_updater_start", {});
677121
677183
  try {
677122
677184
  const maxVersion = await getMaxVersion();
677123
- if (maxVersion && gt("1.58.0", maxVersion)) {
677185
+ if (maxVersion && gt("1.58.1", maxVersion)) {
677124
677186
  const msg = await getMaxVersionMessage();
677125
677187
  setMaxVersionIssue(msg ?? "affects your version");
677126
677188
  }
677127
677189
  const result = await installLatest(channel);
677128
- const currentVersion = "1.58.0";
677190
+ const currentVersion = "1.58.1";
677129
677191
  const latencyMs = Date.now() - startTime;
677130
677192
  if (result.lockFailed) {
677131
677193
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -677262,17 +677324,17 @@ function PackageManagerAutoUpdater(t0) {
677262
677324
  const maxVersion = await getMaxVersion();
677263
677325
  if (maxVersion && latest && gt(latest, maxVersion)) {
677264
677326
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
677265
- if (gte("1.58.0", maxVersion)) {
677266
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.58.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
677327
+ if (gte("1.58.1", maxVersion)) {
677328
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.58.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
677267
677329
  setUpdateAvailable(false);
677268
677330
  return;
677269
677331
  }
677270
677332
  latest = maxVersion;
677271
677333
  }
677272
- const hasUpdate = latest && !gte("1.58.0", latest) && !shouldSkipVersion(latest);
677334
+ const hasUpdate = latest && !gte("1.58.1", latest) && !shouldSkipVersion(latest);
677273
677335
  setUpdateAvailable(!!hasUpdate);
677274
677336
  if (hasUpdate) {
677275
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.58.0"} -> ${latest}`);
677337
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.58.1"} -> ${latest}`);
677276
677338
  }
677277
677339
  };
677278
677340
  $2[0] = t1;
@@ -677306,7 +677368,7 @@ function PackageManagerAutoUpdater(t0) {
677306
677368
  wrap: "truncate",
677307
677369
  children: [
677308
677370
  "currentVersion: ",
677309
- "1.58.0"
677371
+ "1.58.1"
677310
677372
  ]
677311
677373
  }, undefined, true, undefined, this);
677312
677374
  $2[3] = verbose;
@@ -688003,7 +688065,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
688003
688065
  project_dir: getOriginalCwd(),
688004
688066
  added_dirs: addedDirs
688005
688067
  },
688006
- version: "1.58.0",
688068
+ version: "1.58.1",
688007
688069
  output_style: {
688008
688070
  name: outputStyleName
688009
688071
  },
@@ -688086,7 +688148,7 @@ function StatusLineInner({
688086
688148
  const taskValues = Object.values(tasks2);
688087
688149
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
688088
688150
  const defaultStatusLineText = buildDefaultStatusBar({
688089
- version: "1.58.0",
688151
+ version: "1.58.1",
688090
688152
  providerLabel: providerRuntime.providerLabel,
688091
688153
  authMode: providerRuntime.authLabel,
688092
688154
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -700229,7 +700291,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
700229
700291
  } catch {}
700230
700292
  const data = {
700231
700293
  trigger: trigger2,
700232
- version: "1.58.0",
700294
+ version: "1.58.1",
700233
700295
  platform: process.platform,
700234
700296
  transcript,
700235
700297
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -712509,7 +712571,7 @@ function WelcomeV2() {
712509
712571
  dimColor: true,
712510
712572
  children: [
712511
712573
  "v",
712512
- "1.58.0"
712574
+ "1.58.1"
712513
712575
  ]
712514
712576
  }, undefined, true, undefined, this)
712515
712577
  ]
@@ -713769,7 +713831,7 @@ function completeOnboarding() {
713769
713831
  saveGlobalConfig((current) => ({
713770
713832
  ...current,
713771
713833
  hasCompletedOnboarding: true,
713772
- lastOnboardingVersion: "1.58.0"
713834
+ lastOnboardingVersion: "1.58.1"
713773
713835
  }));
713774
713836
  }
713775
713837
  function showDialog(root2, renderer) {
@@ -718813,7 +718875,7 @@ function appendToLog(path24, message) {
718813
718875
  cwd: getFsImplementation().cwd(),
718814
718876
  userType: process.env.USER_TYPE,
718815
718877
  sessionId: getSessionId(),
718816
- version: "1.58.0"
718878
+ version: "1.58.1"
718817
718879
  };
718818
718880
  getLogWriter(path24).write(messageWithTimestamp);
718819
718881
  }
@@ -722972,8 +723034,8 @@ async function getEnvLessBridgeConfig() {
722972
723034
  }
722973
723035
  async function checkEnvLessBridgeMinVersion() {
722974
723036
  const cfg = await getEnvLessBridgeConfig();
722975
- if (cfg.min_version && lt("1.58.0", cfg.min_version)) {
722976
- return `Your version of UR (${"1.58.0"}) is too old for Remote Control.
723037
+ if (cfg.min_version && lt("1.58.1", cfg.min_version)) {
723038
+ return `Your version of UR (${"1.58.1"}) is too old for Remote Control.
722977
723039
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
722978
723040
  }
722979
723041
  return null;
@@ -723447,7 +723509,7 @@ async function initBridgeCore(params) {
723447
723509
  const rawApi = createBridgeApiClient({
723448
723510
  baseUrl,
723449
723511
  getAccessToken,
723450
- runnerVersion: "1.58.0",
723512
+ runnerVersion: "1.58.1",
723451
723513
  onDebug: logForDebugging,
723452
723514
  onAuth401,
723453
723515
  getTrustedDeviceToken
@@ -732923,7 +732985,7 @@ function getAgUiCapabilities() {
732923
732985
  name: "UR-Nexus",
732924
732986
  type: "ur-nexus",
732925
732987
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
732926
- version: "1.58.0",
732988
+ version: "1.58.1",
732927
732989
  provider: "UR",
732928
732990
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
732929
732991
  },
@@ -734063,7 +734125,7 @@ function createMCPServer(cwd4, debug2, verbose) {
734063
734125
  };
734064
734126
  const server2 = new Server({
734065
734127
  name: "ur-nexus",
734066
- version: "1.58.0"
734128
+ version: "1.58.1"
734067
734129
  }, {
734068
734130
  capabilities: {
734069
734131
  tools: {}
@@ -735221,7 +735283,7 @@ function thrownResponse(error40) {
735221
735283
  }
735222
735284
  async function createUrMcp2026Runtime(options4) {
735223
735285
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
735224
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.58.0" }, { capabilities: {} });
735286
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.58.1" }, { capabilities: {} });
735225
735287
  const [clientTransport, serverTransport] = createLinkedTransportPair();
735226
735288
  try {
735227
735289
  await server2.connect(serverTransport);
@@ -735232,7 +735294,7 @@ async function createUrMcp2026Runtime(options4) {
735232
735294
  }
735233
735295
  const runtime2 = new Mcp2026Runtime({
735234
735296
  cwd: options4.cwd,
735235
- version: "1.58.0",
735297
+ version: "1.58.1",
735236
735298
  backend: {
735237
735299
  listTools: async () => {
735238
735300
  const listed = await client2.listTools();
@@ -737365,7 +737427,7 @@ async function update() {
737365
737427
  logEvent("tengu_update_check", {});
737366
737428
  const diagnostic2 = await getDoctorDiagnostic();
737367
737429
  const result = await checkUpgradeStatus({
737368
- currentVersion: "1.58.0",
737430
+ currentVersion: "1.58.1",
737369
737431
  packageName: UR_AGENT_PACKAGE_NAME,
737370
737432
  installationType: diagnostic2.installationType,
737371
737433
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -738681,7 +738743,7 @@ ${customInstructions}` : customInstructions;
738681
738743
  }
738682
738744
  }
738683
738745
  logForDiagnosticsNoPII("info", "started", {
738684
- version: "1.58.0",
738746
+ version: "1.58.1",
738685
738747
  is_native_binary: isInBundledMode()
738686
738748
  });
738687
738749
  registerCleanup(async () => {
@@ -739467,7 +739529,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
739467
739529
  pendingHookMessages
739468
739530
  }, renderAndRun);
739469
739531
  }
739470
- }).version("1.58.0 (UR-Nexus)", "-v, --version", "Output the version number");
739532
+ }).version("1.58.1 (UR-Nexus)", "-v, --version", "Output the version number");
739471
739533
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
739472
739534
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
739473
739535
  if (canUserConfigureAdvisor()) {
@@ -740503,7 +740565,7 @@ if (false) {}
740503
740565
  async function main2() {
740504
740566
  const args = process.argv.slice(2);
740505
740567
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
740506
- console.log(`${"1.58.0"} (UR-Nexus)`);
740568
+ console.log(`${"1.58.1"} (UR-Nexus)`);
740507
740569
  return;
740508
740570
  }
740509
740571
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
package/docs/providers.md CHANGED
@@ -47,7 +47,14 @@ multimodal input, external CLI boundary, and sandbox scope:
47
47
  | Antigravity | subscription | subscription-cli | yes | no | no | no† | UR-run tools/output only† | `subscription-cli:antigravity` | official Antigravity CLI login, where supported |
48
48
 
49
49
  \* Ollama forwards images only to models that advertise vision support;
50
- unsupported models get a text placeholder instead of the image. This applies to
50
+ a model whose advertised capabilities omit `vision` gets a text placeholder
51
+ instead. A model that advertises nothing at all is treated as *unknown*, not
52
+ unsupported: the image is still sent, and the note says support could not be
53
+ confirmed rather than asserting the model is blind. That distinction matters —
54
+ `/api/show` returns no capabilities for several cloud-suffixed models, and
55
+ reporting that as "no vision support" sends you to change models for no
56
+ reason. Resolution lives in `src/utils/model/visionCapability.ts` and is shared
57
+ by the adapter, `ur model-doctor` and the model router. This applies to
51
58
  images returned by tools as well as images you paste: a `Computer` screenshot or
52
59
  any other image-bearing tool result is extracted from the tool message and sent
53
60
  as `images` on the following user message, because Ollama renders `images`
@@ -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.58.0</p>
48
+ <p class="eyebrow">Version 1.58.1</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.58.0"
10
+ version = "1.58.1"
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.58.0",
5
+ "version": "1.58.1",
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.58.0",
3
+ "version": "1.58.1",
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",