ur-agent 1.81.2 → 1.81.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -55298,7 +55298,9 @@ function getValidModelIdsForProvider(providerId) {
55298
55298
  }
55299
55299
  function formatInvalidProviderModelMessage(providerId, modelId, validModels, suggestedModel) {
55300
55300
  const provider = resolveProviderId(providerId) ?? String(providerId);
55301
- const validList = validModels.length > 0 ? validModels.join(", ") : "(no models discovered)";
55301
+ const visibleModels = validModels.slice(0, 8);
55302
+ const hiddenCount = validModels.length - visibleModels.length;
55303
+ const validList = validModels.length > 0 ? `${visibleModels.join(", ")}${hiddenCount > 0 ? `, \u2026 and ${hiddenCount} more` : ""}` : "(no models discovered)";
55302
55304
  const suggested = suggestedModel ?? validModels[0] ?? "<valid-model>";
55303
55305
  return `Model "${modelId}" is not available for provider "${provider}". Valid models for ${provider}: ${validList}. Run /model and choose a model from ${provider}, or run: ur config set model ${suggested}`;
55304
55306
  }
@@ -91099,12 +91101,18 @@ function normalizeOpenAIChatUsage(usage) {
91099
91101
  const promptTokens = count3(u2.prompt_tokens);
91100
91102
  const cacheRead = count3(promptDetails.cached_tokens);
91101
91103
  const cacheWrite2 = count3(promptDetails.cache_write_tokens);
91102
- return withOptionalFields({
91103
- input_tokens: remainder(promptTokens, cacheRead, cacheWrite2),
91104
- output_tokens: count3(u2.completion_tokens),
91105
- cache_creation_input_tokens: cacheWrite2,
91106
- cache_read_input_tokens: cacheRead
91107
- }, count3(completionDetails.reasoning_tokens), count3(u2.total_tokens));
91104
+ return {
91105
+ ...withOptionalFields({
91106
+ input_tokens: remainder(promptTokens, cacheRead, cacheWrite2),
91107
+ output_tokens: count3(u2.completion_tokens),
91108
+ cache_creation_input_tokens: cacheWrite2,
91109
+ cache_read_input_tokens: cacheRead
91110
+ }, count3(completionDetails.reasoning_tokens), count3(u2.total_tokens)),
91111
+ server_tool_use: {
91112
+ web_search_requests: count3(u2.server_tool_use?.web_search_requests),
91113
+ web_fetch_requests: count3(u2.server_tool_use?.web_fetch_requests)
91114
+ }
91115
+ };
91108
91116
  }
91109
91117
  function normalizeOpenAIResponsesUsage(usage) {
91110
91118
  const u2 = usage ?? {};
@@ -91148,6 +91156,45 @@ function getStoredGeminiThoughtSignature(block) {
91148
91156
  }
91149
91157
  var GEMINI_THOUGHT_SIGNATURE = "gemini_thought_signature";
91150
91158
 
91159
+ // src/services/api/openRouterCitations.ts
91160
+ function collectOpenRouterUrlCitations(annotations) {
91161
+ if (!Array.isArray(annotations))
91162
+ return [];
91163
+ const citations = new Map;
91164
+ for (const annotation of annotations) {
91165
+ if (!annotation || typeof annotation !== "object")
91166
+ continue;
91167
+ const record2 = annotation;
91168
+ if (record2.type !== "url_citation")
91169
+ continue;
91170
+ const citation = record2.url_citation;
91171
+ if (!citation || typeof citation !== "object")
91172
+ continue;
91173
+ const value = citation;
91174
+ if (typeof value.url !== "string" || !/^https?:\/\//i.test(value.url)) {
91175
+ continue;
91176
+ }
91177
+ const rawTitle = typeof value.title === "string" && value.title.trim() ? value.title.trim() : new URL(value.url).hostname;
91178
+ const title = rawTitle.replace(/[\r\n]+/g, " ").replace(/[\[\]]/g, "").trim();
91179
+ if (!citations.has(value.url)) {
91180
+ citations.set(value.url, { url: value.url, title });
91181
+ }
91182
+ }
91183
+ return [...citations.values()];
91184
+ }
91185
+ function formatOpenRouterCitations(citations) {
91186
+ const unique = new Map;
91187
+ for (const citation of citations)
91188
+ unique.set(citation.url, citation);
91189
+ if (unique.size === 0)
91190
+ return "";
91191
+ return `
91192
+
91193
+ Sources:
91194
+ ${[...unique.values()].map((citation) => `- [${citation.title}](${citation.url})`).join(`
91195
+ `)}`;
91196
+ }
91197
+
91151
91198
  // src/services/api/providerHttp.ts
91152
91199
  function parsePositiveInteger(value) {
91153
91200
  if (typeof value !== "string" && typeof value !== "number")
@@ -91572,6 +91619,7 @@ async function* streamOpenAIEvents(body, options) {
91572
91619
  let finishReason;
91573
91620
  let usage = EMPTY_USAGE;
91574
91621
  const emittedToolIds = new Set;
91622
+ const urlCitations = new Map;
91575
91623
  const toolStates = new Map;
91576
91624
  let activeThinkingIndex = null;
91577
91625
  const stopThinking = function* () {
@@ -91664,6 +91712,9 @@ async function* streamOpenAIEvents(body, options) {
91664
91712
  }
91665
91713
  for (const choice of chunk?.choices ?? []) {
91666
91714
  const delta = choice?.delta ?? {};
91715
+ for (const citation of collectOpenRouterUrlCitations(delta.annotations ?? choice?.message?.annotations)) {
91716
+ urlCitations.set(citation.url, citation);
91717
+ }
91667
91718
  const reasoning = typeof delta.reasoning_content === "string" ? delta.reasoning_content : typeof delta.reasoning === "string" ? delta.reasoning : "";
91668
91719
  if (reasoning.length > 0) {
91669
91720
  for (const event of ensureThinking())
@@ -91738,6 +91789,16 @@ async function* streamOpenAIEvents(body, options) {
91738
91789
  }
91739
91790
  }
91740
91791
  }
91792
+ const citationText = formatOpenRouterCitations(urlCitations.values());
91793
+ if (citationText) {
91794
+ for (const event of ensureText())
91795
+ yield event;
91796
+ yield {
91797
+ type: "content_block_delta",
91798
+ index: activeTextIndex,
91799
+ delta: { type: "text_delta", text: citationText }
91800
+ };
91801
+ }
91741
91802
  for (const event of stopText())
91742
91803
  yield event;
91743
91804
  for (const event of stopThinking())
@@ -92671,6 +92732,8 @@ function toOpenAICompatibleRequest(params, providerName = "openai-compatible") {
92671
92732
  effort: toOpenRouterReasoningEffort(String(params.model ?? ""), reasoningEffort)
92672
92733
  } : undefined;
92673
92734
  const compatibleReasoningEffort = reasoningEffort === "max" ? "high" : reasoningEffort;
92735
+ const openRouterServerSearch = providerName === "openrouter" && tools.some((tool) => tool?.type === "openrouter:web_search");
92736
+ const toolChoice = openRouterServerSearch ? undefined : mapOpenAIToolChoice(params.tool_choice);
92674
92737
  return {
92675
92738
  model: params.model,
92676
92739
  messages: toOpenAIMessages(params, providerName),
@@ -92684,7 +92747,7 @@ function toOpenAICompatibleRequest(params, providerName = "openai-compatible") {
92684
92747
  stream: Boolean(params.stream),
92685
92748
  ...params.stream && providerName !== "openrouter" ? { stream_options: { include_usage: true } } : {},
92686
92749
  ...tools.length > 0 ? { tools } : {},
92687
- ...params.tool_choice !== undefined ? { tool_choice: mapOpenAIToolChoice(params.tool_choice) } : {}
92750
+ ...toolChoice !== undefined ? { tool_choice: toolChoice } : {}
92688
92751
  };
92689
92752
  }
92690
92753
  function toOpenAIResponseFormat(format4) {
@@ -92830,7 +92893,7 @@ function toOpenAITools(tools, providerName = "OpenAI") {
92830
92893
  throw new ToolSchemaValidationError(`${providerName} tools must be an array.`);
92831
92894
  }
92832
92895
  const result = tools.map((tool) => toOpenAITool(tool, providerName));
92833
- assertUniqueToolNames(result.map((tool) => tool.function.name), providerName);
92896
+ assertUniqueToolNames(result.filter((tool) => tool?.type === "function").map((tool) => tool.function.name), providerName);
92834
92897
  return result;
92835
92898
  }
92836
92899
  function mapOpenAIToolChoice(toolChoice) {
@@ -92906,6 +92969,16 @@ function isOpenAIToolStopReason2(reason) {
92906
92969
  return reason === "tool_calls" || reason === "function_call" || reason === "tool_use";
92907
92970
  }
92908
92971
  function toOpenAITool(tool, providerName) {
92972
+ if (providerName === "openrouter" && tool?.type === "web_search_20250305") {
92973
+ return {
92974
+ type: "openrouter:web_search",
92975
+ parameters: {
92976
+ ...Number.isInteger(tool.max_uses) && tool.max_uses > 0 ? { max_uses: tool.max_uses } : {},
92977
+ ...Array.isArray(tool.allowed_domains) && tool.allowed_domains.length > 0 ? { allowed_domains: tool.allowed_domains } : {},
92978
+ ...Array.isArray(tool.blocked_domains) && tool.blocked_domains.length > 0 ? { excluded_domains: tool.blocked_domains } : {}
92979
+ }
92980
+ };
92981
+ }
92909
92982
  if (tool?.type === "function" && tool.function) {
92910
92983
  assertValidToolName(tool.function.name, providerName);
92911
92984
  const strict2 = tool.function.strict === true;
@@ -93044,7 +93117,8 @@ function parseOpenAIMessageContent(message, legacyText, providerName) {
93044
93117
  if (reasoning.length > 0) {
93045
93118
  content.push({ type: "thinking", thinking: reasoning });
93046
93119
  }
93047
- const text = openAIMessageText(message?.content, legacyText);
93120
+ const citationText = formatOpenRouterCitations(collectOpenRouterUrlCitations(message?.annotations));
93121
+ const text = openAIMessageText(message?.content, legacyText) + citationText;
93048
93122
  if (text.length > 0) {
93049
93123
  content.push({ type: "text", text });
93050
93124
  }
@@ -95425,7 +95499,10 @@ function formatRuntimeDispatchError({
95425
95499
  suggestedModel
95426
95500
  }) {
95427
95501
  const provider = resolveProviderId(providerId) ?? String(providerId);
95428
- const valid = validModels?.length ? validModels.join(", ") : getValidModelIdsForProvider(provider).join(", ") || "(no models discovered)";
95502
+ const discoveredModels = validModels?.length ? validModels : getValidModelIdsForProvider(provider);
95503
+ const visibleModels = discoveredModels.slice(0, 8);
95504
+ const hiddenCount = discoveredModels.length - visibleModels.length;
95505
+ const valid = discoveredModels.length ? `${visibleModels.join(", ")}${hiddenCount > 0 ? `, \u2026 and ${hiddenCount} more` : ""}` : "(no models discovered)";
95429
95506
  const suggestion = suggestedModel ?? getDefaultModelForProvider(provider) ?? "<valid-model>";
95430
95507
  return `Provider "${provider}" is selected with model "${model}", but runtime dispatch cannot use that provider/model pair. Reason: ${why}. Valid models for ${provider}: ${valid}. Run /model and choose a model from ${provider}, or run: ur config set model ${suggestion}`;
95431
95508
  }
@@ -96627,13 +96704,14 @@ function getDefaultOllamaModel() {
96627
96704
  }
96628
96705
  return DEFAULT_OLLAMA_MODEL2;
96629
96706
  }
96630
- function getSmallFastModel() {
96631
- if (process.env.OLLAMA_MODEL !== undefined && process.env.OLLAMA_SMALL_FAST_MODEL === undefined) {
96707
+ function getSmallFastModel(providerSettings) {
96708
+ const activeProvider = providerSettings?.active ?? getActiveProviderSettings().active;
96709
+ if (activeProvider === "ollama" && process.env.OLLAMA_MODEL !== undefined && process.env.OLLAMA_SMALL_FAST_MODEL === undefined) {
96632
96710
  const mainLoopModel = getMainLoopModel();
96633
96711
  if (mainLoopModel)
96634
96712
  return mainLoopModel;
96635
96713
  }
96636
- if (getAPIProvider() === "ollama") {
96714
+ if (activeProvider === "ollama" || !activeProvider && getAPIProvider() === "ollama") {
96637
96715
  if (process.env.OLLAMA_SMALL_FAST_MODEL) {
96638
96716
  return process.env.OLLAMA_SMALL_FAST_MODEL;
96639
96717
  }
@@ -96651,7 +96729,11 @@ function getSmallFastModel() {
96651
96729
  return sessionModel;
96652
96730
  return getDefaultOllamaModel();
96653
96731
  }
96654
- return process.env.URHQ_SMALL_FAST_MODEL || getDefaultmodelHModel();
96732
+ if (process.env.URHQ_SMALL_FAST_MODEL) {
96733
+ return process.env.URHQ_SMALL_FAST_MODEL;
96734
+ }
96735
+ const selectedModel = providerSettings?.model ?? getMainLoopModel();
96736
+ return selectedModel || getDefaultmodelHModel();
96655
96737
  }
96656
96738
  function isNonCustommodelOModel(model) {
96657
96739
  return model === getModelStrings2().modelO40 || model === getModelStrings2().modelO41 || model === getModelStrings2().modelO45 || model === getModelStrings2().modelO46;
@@ -108154,7 +108236,7 @@ var init_auth = __esm(() => {
108154
108236
 
108155
108237
  // src/utils/userAgent.ts
108156
108238
  function getURCodeUserAgent() {
108157
- return `ur/${"1.81.2"}`;
108239
+ return `ur/${"1.81.3"}`;
108158
108240
  }
108159
108241
 
108160
108242
  // src/utils/workloadContext.ts
@@ -108176,7 +108258,7 @@ function getUserAgent() {
108176
108258
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
108177
108259
  const workload = getWorkload();
108178
108260
  const workloadSuffix = workload ? `, workload/${workload}` : "";
108179
- return `ur-cli/${"1.81.2"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
108261
+ return `ur-cli/${"1.81.3"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
108180
108262
  }
108181
108263
  function getMCPUserAgent() {
108182
108264
  const parts = [];
@@ -108190,7 +108272,7 @@ function getMCPUserAgent() {
108190
108272
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
108191
108273
  }
108192
108274
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
108193
- return `ur/${"1.81.2"}${suffix}`;
108275
+ return `ur/${"1.81.3"}${suffix}`;
108194
108276
  }
108195
108277
  function getWebFetchUserAgent() {
108196
108278
  return `UR-User (${getURCodeUserAgent()})`;
@@ -108328,7 +108410,7 @@ var init_user = __esm(() => {
108328
108410
  deviceId,
108329
108411
  sessionId: getSessionId(),
108330
108412
  email: getEmail(),
108331
- appVersion: "1.81.2",
108413
+ appVersion: "1.81.3",
108332
108414
  platform: getHostPlatformForAnalytics(),
108333
108415
  organizationUuid,
108334
108416
  accountUuid,
@@ -116215,7 +116297,7 @@ var init_metadata = __esm(() => {
116215
116297
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
116216
116298
  WHITESPACE_REGEX = /\s+/;
116217
116299
  getVersionBase = memoize_default(() => {
116218
- const match = "1.81.2".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
116300
+ const match = "1.81.3".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
116219
116301
  return match ? match[0] : undefined;
116220
116302
  });
116221
116303
  buildEnvContext = memoize_default(async () => {
@@ -116255,7 +116337,7 @@ var init_metadata = __esm(() => {
116255
116337
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
116256
116338
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
116257
116339
  isURAiAuth: isURAISubscriber(),
116258
- version: "1.81.2",
116340
+ version: "1.81.3",
116259
116341
  versionBase: getVersionBase(),
116260
116342
  buildTime: "",
116261
116343
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -116925,7 +117007,7 @@ function initialize1PEventLogging() {
116925
117007
  const platform2 = getPlatform();
116926
117008
  const attributes = {
116927
117009
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
116928
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.81.2"
117010
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.81.3"
116929
117011
  };
116930
117012
  if (platform2 === "wsl") {
116931
117013
  const wslVersion = getWslVersion();
@@ -116953,7 +117035,7 @@ function initialize1PEventLogging() {
116953
117035
  })
116954
117036
  ]
116955
117037
  });
116956
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.81.2");
117038
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.81.3");
116957
117039
  }
116958
117040
  async function reinitialize1PEventLoggingIfConfigChanged() {
116959
117041
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -126919,7 +127001,7 @@ function formatA2AAgentCard(options = {}, pretty = true) {
126919
127001
  function formatA2AV1AgentCard(options = {}, pretty = true) {
126920
127002
  return JSON.stringify(buildA2AV1AgentCard(options), null, pretty ? 2 : 0);
126921
127003
  }
126922
- var urVersion = "1.81.2", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
127004
+ var urVersion = "1.81.3", researchSnapshotDate = "2026-08-10", coverage, priorityRoadmap;
126923
127005
  var init_trends = __esm(() => {
126924
127006
  init_a2aCardSignature();
126925
127007
  coverage = [
@@ -129809,7 +129891,7 @@ function getAttributionHeader(fingerprint) {
129809
129891
  if (!isAttributionHeaderEnabled()) {
129810
129892
  return "";
129811
129893
  }
129812
- const version2 = `${"1.81.2"}.${fingerprint}`;
129894
+ const version2 = `${"1.81.3"}.${fingerprint}`;
129813
129895
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
129814
129896
  const cch = "";
129815
129897
  const workload = getWorkload();
@@ -184730,7 +184812,7 @@ var init_projectSafety = __esm(() => {
184730
184812
  function getInstruments() {
184731
184813
  if (instruments)
184732
184814
  return instruments;
184733
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.81.2");
184815
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.81.3");
184734
184816
  instruments = {
184735
184817
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
184736
184818
  description: "GenAI operation duration.",
@@ -184828,7 +184910,7 @@ function genAiAgentAttributes() {
184828
184910
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
184829
184911
  "gen_ai.provider.name": "ur",
184830
184912
  "gen_ai.agent.name": "UR-Nexus",
184831
- "gen_ai.agent.version": "1.81.2"
184913
+ "gen_ai.agent.version": "1.81.3"
184832
184914
  };
184833
184915
  }
184834
184916
  function genAiWorkflowAttributes(workflowName, workflowRunId) {
@@ -184849,7 +184931,7 @@ function genAiWorkflowAttributes(workflowName, workflowRunId) {
184849
184931
  function startGenAiWorkflowSpan(workflowName, workflowRunId) {
184850
184932
  const attributes = genAiWorkflowAttributes(workflowName, workflowRunId);
184851
184933
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
184852
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.2").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184934
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.3").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
184853
184935
  }
184854
184936
  function endGenAiWorkflowSpan(span, options2 = {}) {
184855
184937
  try {
@@ -184887,7 +184969,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
184887
184969
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
184888
184970
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
184889
184971
  }
184890
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.2").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184972
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.81.3").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
184891
184973
  }
184892
184974
  function endGenAiMemorySpan(span, options2 = {}) {
184893
184975
  try {
@@ -278602,7 +278684,7 @@ function getTelemetryAttributes() {
278602
278684
  attributes["session.id"] = sessionId;
278603
278685
  }
278604
278686
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
278605
- attributes["app.version"] = "1.81.2";
278687
+ attributes["app.version"] = "1.81.3";
278606
278688
  }
278607
278689
  const oauthAccount = getOauthAccountInfo();
278608
278690
  if (oauthAccount) {
@@ -320006,7 +320088,7 @@ function getInstallationEnv() {
320006
320088
  return;
320007
320089
  }
320008
320090
  function getURCodeVersion() {
320009
- return "1.81.2";
320091
+ return "1.81.3";
320010
320092
  }
320011
320093
  async function getInstalledVSCodeExtensionVersion(command) {
320012
320094
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -327376,7 +327458,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
327376
327458
  const client2 = new Client({
327377
327459
  name: "ur",
327378
327460
  title: "UR",
327379
- version: "1.81.2",
327461
+ version: "1.81.3",
327380
327462
  description: "UR-Nexus autonomous engineering workflow engine",
327381
327463
  websiteUrl: PRODUCT_URL
327382
327464
  }, {
@@ -327737,7 +327819,7 @@ var init_client5 = __esm(() => {
327737
327819
  const client2 = new Client({
327738
327820
  name: "ur",
327739
327821
  title: "UR",
327740
- version: "1.81.2",
327822
+ version: "1.81.3",
327741
327823
  description: "UR-Nexus autonomous engineering workflow engine",
327742
327824
  websiteUrl: PRODUCT_URL
327743
327825
  }, {
@@ -340510,7 +340592,7 @@ async function createRuntime() {
340510
340592
  bootstrapTelemetry();
340511
340593
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
340512
340594
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
340513
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.81.2"
340595
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.81.3"
340514
340596
  }));
340515
340597
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
340516
340598
  resource,
@@ -340543,11 +340625,11 @@ async function createRuntime() {
340543
340625
  setMeterProvider(meterProvider);
340544
340626
  setLoggerProvider(loggerProvider);
340545
340627
  if (meterProvider) {
340546
- const meter = meterProvider.getMeter("ur-agent", "1.81.2");
340628
+ const meter = meterProvider.getMeter("ur-agent", "1.81.3");
340547
340629
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
340548
340630
  }
340549
340631
  if (loggerProvider) {
340550
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.81.2"));
340632
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.81.3"));
340551
340633
  }
340552
340634
  if (!cleanupRegistered3) {
340553
340635
  cleanupRegistered3 = true;
@@ -341209,9 +341291,9 @@ async function assertMinVersion() {
341209
341291
  if (false) {}
341210
341292
  try {
341211
341293
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
341212
- if (versionConfig.minVersion && lt("1.81.2", versionConfig.minVersion)) {
341294
+ if (versionConfig.minVersion && lt("1.81.3", versionConfig.minVersion)) {
341213
341295
  console.error(`
341214
- It looks like your version of UR (${"1.81.2"}) needs an update.
341296
+ It looks like your version of UR (${"1.81.3"}) needs an update.
341215
341297
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
341216
341298
 
341217
341299
  To update, please run:
@@ -341427,7 +341509,7 @@ async function installGlobalPackage(specificVersion) {
341427
341509
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
341428
341510
  logEvent("tengu_auto_updater_lock_contention", {
341429
341511
  pid: process.pid,
341430
- currentVersion: "1.81.2"
341512
+ currentVersion: "1.81.3"
341431
341513
  });
341432
341514
  return "in_progress";
341433
341515
  }
@@ -341436,7 +341518,7 @@ async function installGlobalPackage(specificVersion) {
341436
341518
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
341437
341519
  logError2(new Error("Windows NPM detected in WSL environment"));
341438
341520
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
341439
- currentVersion: "1.81.2"
341521
+ currentVersion: "1.81.3"
341440
341522
  });
341441
341523
  console.error(`
341442
341524
  Error: Windows NPM detected in WSL
@@ -341971,7 +342053,7 @@ function detectLinuxGlobPatternWarnings() {
341971
342053
  }
341972
342054
  async function getDoctorDiagnostic() {
341973
342055
  const installationType = await getCurrentInstallationType();
341974
- const version2 = typeof MACRO !== "undefined" ? "1.81.2" : "unknown";
342056
+ const version2 = typeof MACRO !== "undefined" ? "1.81.3" : "unknown";
341975
342057
  const installationPath = await getInstallationPath();
341976
342058
  const invokedBinary = getInvokedBinary();
341977
342059
  const multipleInstallations = await detectMultipleInstallations();
@@ -342906,8 +342988,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342906
342988
  const maxVersion = await getMaxVersion();
342907
342989
  if (maxVersion && gt(version2, maxVersion)) {
342908
342990
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
342909
- if (gte("1.81.2", maxVersion)) {
342910
- logForDebugging(`Native installer: current version ${"1.81.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
342991
+ if (gte("1.81.3", maxVersion)) {
342992
+ logForDebugging(`Native installer: current version ${"1.81.3"} is already at or above maxVersion ${maxVersion}, skipping update`);
342911
342993
  logEvent("tengu_native_update_skipped_max_version", {
342912
342994
  latency_ms: Date.now() - startTime,
342913
342995
  max_version: maxVersion,
@@ -342918,7 +343000,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
342918
343000
  version2 = maxVersion;
342919
343001
  }
342920
343002
  }
342921
- if (!forceReinstall && version2 === "1.81.2" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
343003
+ if (!forceReinstall && version2 === "1.81.3" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
342922
343004
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
342923
343005
  logEvent("tengu_native_update_complete", {
342924
343006
  latency_ms: Date.now() - startTime,
@@ -393124,7 +393206,7 @@ async function getURLMarkdownContent(url3, abortController) {
393124
393206
  URL_CACHE.set(url3, entry, { size: Math.max(1, contentBytes) });
393125
393207
  return entry;
393126
393208
  }
393127
- async function applyPromptToMarkdown(prompt, markdownContent, signal, isNonInteractiveSession, isPreapprovedDomain) {
393209
+ async function applyPromptToMarkdown(prompt, markdownContent, signal, isNonInteractiveSession, isPreapprovedDomain, providerSettings) {
393128
393210
  const truncatedContent = markdownContent.length > MAX_MARKDOWN_LENGTH ? markdownContent.slice(0, MAX_MARKDOWN_LENGTH) + `
393129
393211
 
393130
393212
  [Content truncated due to length...]` : markdownContent;
@@ -393138,7 +393220,8 @@ async function applyPromptToMarkdown(prompt, markdownContent, signal, isNonInter
393138
393220
  agents: [],
393139
393221
  isNonInteractiveSession,
393140
393222
  hasAppendSystemPrompt: false,
393141
- mcpTools: []
393223
+ mcpTools: [],
393224
+ providerSettings
393142
393225
  }
393143
393226
  });
393144
393227
  if (signal.aborted) {
@@ -393582,7 +393665,7 @@ To complete your request, I need to fetch content from the redirected URL. Pleas
393582
393665
  if (isPreapproved && contentType2.includes("text/markdown") && content.length < MAX_MARKDOWN_LENGTH) {
393583
393666
  result = content;
393584
393667
  } else {
393585
- result = await applyPromptToMarkdown(prompt, content, abortController.signal, isNonInteractiveSession, isPreapproved);
393668
+ result = await applyPromptToMarkdown(prompt, content, abortController.signal, isNonInteractiveSession, isPreapproved, context5.getAppState().provider);
393586
393669
  }
393587
393670
  if (persistedPath) {
393588
393671
  result += `
@@ -396300,8 +396383,9 @@ function renderToolUseProgressMessage9(progressMessages) {
396300
396383
  }
396301
396384
  function renderToolResultMessage17(output) {
396302
396385
  const {
396303
- searchCount
396386
+ searchCount: inferredSearchCount
396304
396387
  } = getSearchSummary(output.results ?? []);
396388
+ const searchCount = output.searchCount ?? inferredSearchCount;
396305
396389
  const timeDisplay = output.durationSeconds >= 1 ? `${Math.round(output.durationSeconds)}s` : `${Math.round(output.durationSeconds * 1000)}ms`;
396306
396390
  return /* @__PURE__ */ jsx_dev_runtime144.jsxDEV(ThemedBox_default, {
396307
396391
  justifyContent: "space-between",
@@ -396346,7 +396430,7 @@ function makeToolSchema(input, maxUses) {
396346
396430
  max_uses: maxUses
396347
396431
  };
396348
396432
  }
396349
- function makeOutputFromSearchResponse(result, query2, durationSeconds) {
396433
+ function makeOutputFromSearchResponse(result, query2, durationSeconds, searchCount) {
396350
396434
  const results = [];
396351
396435
  let textAcc = "";
396352
396436
  let inText = true;
@@ -396389,7 +396473,8 @@ function makeOutputFromSearchResponse(result, query2, durationSeconds) {
396389
396473
  return {
396390
396474
  query: query2,
396391
396475
  results,
396392
- durationSeconds
396476
+ durationSeconds,
396477
+ ...searchCount !== undefined ? { searchCount } : {}
396393
396478
  };
396394
396479
  }
396395
396480
  var inputSchema28, searchResultSchema, outputSchema24, WebSearchTool;
@@ -396426,7 +396511,8 @@ var init_WebSearchTool = __esm(() => {
396426
396511
  outputSchema24 = lazySchema(() => exports_external.object({
396427
396512
  query: exports_external.string().describe("The search query that was executed"),
396428
396513
  results: exports_external.array(exports_external.union([searchResultSchema(), exports_external.string()])).describe("Search results and/or text commentary from the model"),
396429
- durationSeconds: exports_external.number().describe("Time taken to complete the search operation")
396514
+ durationSeconds: exports_external.number().describe("Time taken to complete the search operation"),
396515
+ searchCount: exports_external.number().int().nonnegative().optional().describe("Provider-reported number of web searches performed")
396430
396516
  }));
396431
396517
  WebSearchTool = buildTool({
396432
396518
  name: WEB_SEARCH_TOOL_NAME,
@@ -396561,7 +396647,7 @@ var init_WebSearchTool = __esm(() => {
396561
396647
  const startTime = performance.now();
396562
396648
  const { query: query2 } = input;
396563
396649
  const userMessage = createUserMessage({
396564
- content: "Perform a web search for the query: " + query2
396650
+ content: "You MUST use the provided web search tool at least once. Perform a web search for the query: " + query2
396565
396651
  });
396566
396652
  const budget = reserveWebSearchBudget(8);
396567
396653
  if (budget.granted === 0) {
@@ -396580,7 +396666,7 @@ var init_WebSearchTool = __esm(() => {
396580
396666
  signal: context5.abortController.signal,
396581
396667
  options: {
396582
396668
  getToolPermissionContext: async () => appState.toolPermissionContext,
396583
- model: usemodelH ? getSmallFastModel() : context5.options.mainLoopModel,
396669
+ model: usemodelH ? getSmallFastModel(appState.provider) : context5.options.mainLoopModel,
396584
396670
  toolChoice: usemodelH ? { type: "tool", name: "web_search" } : undefined,
396585
396671
  isNonInteractiveSession: context5.options.isNonInteractiveSession,
396586
396672
  hasAppendSystemPrompt: !!context5.options.appendSystemPrompt,
@@ -396603,6 +396689,7 @@ var init_WebSearchTool = __esm(() => {
396603
396689
  for await (const event of queryStream) {
396604
396690
  if (event.type === "assistant") {
396605
396691
  allContentBlocks.push(...event.message.content);
396692
+ actualSearches = Math.max(actualSearches, event.message.usage?.server_tool_use?.web_search_requests ?? 0);
396606
396693
  continue;
396607
396694
  }
396608
396695
  if (event.type === "stream_event" && event.event?.type === "content_block_start") {
@@ -396664,7 +396751,10 @@ var init_WebSearchTool = __esm(() => {
396664
396751
  }
396665
396752
  const endTime = performance.now();
396666
396753
  const durationSeconds = (endTime - startTime) / 1000;
396667
- const data = makeOutputFromSearchResponse(allContentBlocks, query2, durationSeconds);
396754
+ const data = makeOutputFromSearchResponse(allContentBlocks, query2, durationSeconds, actualSearches);
396755
+ if (actualSearches === 0) {
396756
+ throw new Error("The selected provider returned text without performing a web search. Retry with a model that supports OpenRouter web search or switch providers.");
396757
+ }
396668
396758
  return { data };
396669
396759
  },
396670
396760
  mapToolResultToToolResultBlockParam(output, toolUseID) {
@@ -413597,7 +413687,7 @@ function isAnyTracingEnabled() {
413597
413687
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
413598
413688
  }
413599
413689
  function getTracer() {
413600
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.81.2");
413690
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.81.3");
413601
413691
  }
413602
413692
  function createSpanAttributes(spanType, customAttributes = {}) {
413603
413693
  const baseAttributes = getTelemetryAttributes();
@@ -443756,7 +443846,7 @@ function Feedback({
443756
443846
  platform: env2.platform,
443757
443847
  gitRepo: envInfo.isGit,
443758
443848
  terminal: env2.terminal,
443759
- version: "1.81.2",
443849
+ version: "1.81.3",
443760
443850
  transcript: normalizeMessagesForAPI(messages),
443761
443851
  errors: sanitizedErrors,
443762
443852
  lastApiRequest: getLastAPIRequest(),
@@ -443948,7 +444038,7 @@ function Feedback({
443948
444038
  ", ",
443949
444039
  env2.terminal,
443950
444040
  ", v",
443951
- "1.81.2"
444041
+ "1.81.3"
443952
444042
  ]
443953
444043
  }, undefined, true, undefined, this)
443954
444044
  ]
@@ -444054,7 +444144,7 @@ ${sanitizedDescription}
444054
444144
  ` + `**Environment Info**
444055
444145
  ` + `- Platform: ${env2.platform}
444056
444146
  ` + `- Terminal: ${env2.terminal}
444057
- ` + `- Version: ${"1.81.2"}
444147
+ ` + `- Version: ${"1.81.3"}
444058
444148
  ` + `- Feedback ID: ${feedbackId}
444059
444149
  ` + `
444060
444150
  **Errors**
@@ -447164,7 +447254,7 @@ function buildPrimarySection() {
447164
447254
  }, undefined, false, undefined, this);
447165
447255
  return [{
447166
447256
  label: "Version",
447167
- value: "1.81.2"
447257
+ value: "1.81.3"
447168
447258
  }, {
447169
447259
  label: "Session name",
447170
447260
  value: nameValue
@@ -450546,7 +450636,7 @@ function Config({
450546
450636
  }
450547
450637
  }, undefined, false, undefined, this)
450548
450638
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
450549
- currentVersion: "1.81.2",
450639
+ currentVersion: "1.81.3",
450550
450640
  onChoice: (choice) => {
450551
450641
  setShowSubmenu(null);
450552
450642
  setTabsHidden(false);
@@ -450558,7 +450648,7 @@ function Config({
450558
450648
  autoUpdatesChannel: "stable"
450559
450649
  };
450560
450650
  if (choice === "stay") {
450561
- newSettings.minimumVersion = "1.81.2";
450651
+ newSettings.minimumVersion = "1.81.3";
450562
450652
  }
450563
450653
  updateSettingsForSource("userSettings", newSettings);
450564
450654
  setSettingsData((prev_27) => ({
@@ -458867,7 +458957,7 @@ function HelpV2(t0) {
458867
458957
  let t6;
458868
458958
  if ($2[31] !== tabs) {
458869
458959
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
458870
- title: `UR v${"1.81.2"}`,
458960
+ title: `UR v${"1.81.3"}`,
458871
458961
  color: "professionalBlue",
458872
458962
  defaultTab: "general",
458873
458963
  children: tabs
@@ -459800,7 +459890,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
459800
459890
  async function handleInitialize(options2) {
459801
459891
  return {
459802
459892
  name: "UR",
459803
- version: "1.81.2",
459893
+ version: "1.81.3",
459804
459894
  protocolVersion: "0.1.0",
459805
459895
  workspaceRoot: options2.cwd,
459806
459896
  capabilities: {
@@ -476908,7 +476998,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
476908
476998
  return [];
476909
476999
  }
476910
477000
  }
476911
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.2") {
477001
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.3") {
476912
477002
  if (process.env.USER_TYPE === "ant") {
476913
477003
  const changelog = "";
476914
477004
  if (changelog) {
@@ -476935,7 +477025,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.81.2")
476935
477025
  releaseNotes
476936
477026
  };
476937
477027
  }
476938
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.81.2") {
477028
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.81.3") {
476939
477029
  if (process.env.USER_TYPE === "ant") {
476940
477030
  const changelog = "";
476941
477031
  if (changelog) {
@@ -479840,7 +479930,7 @@ function getRecentActivitySync() {
479840
479930
  return cachedActivity;
479841
479931
  }
479842
479932
  function getLogoDisplayData() {
479843
- const version2 = process.env.DEMO_VERSION ?? "1.81.2";
479933
+ const version2 = process.env.DEMO_VERSION ?? "1.81.3";
479844
479934
  const serverUrl = getDirectConnectServerUrl();
479845
479935
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
479846
479936
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -479914,6 +480004,14 @@ var init_logoV2Utils = __esm(() => {
479914
480004
  });
479915
480005
 
479916
480006
  // src/components/LogoV2/URBanner.tsx
480007
+ function getURWordmarkGlyphTone(glyph, row, column) {
480008
+ if (glyph === "\u2588") {
480009
+ return SPECULAR_GLYPHS.has(`${row}:${column}`) ? "warningShimmer" : "urShimmer";
480010
+ }
480011
+ if ("\u2557\u2551\u2554\u255D\u255A\u2550".includes(glyph))
480012
+ return "ur";
480013
+ return;
480014
+ }
479917
480015
  function URBanner() {
479918
480016
  if (isScreenReaderMode()) {
479919
480017
  return /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
@@ -479925,18 +480023,21 @@ function URBanner() {
479925
480023
  alignItems: "center",
479926
480024
  children: [
479927
480025
  UR_WORDMARK_ROWS.map((row, i3) => /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479928
- color: "ur",
479929
480026
  bold: true,
479930
- children: row
480027
+ children: [...row].map((glyph, column) => /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
480028
+ color: getURWordmarkGlyphTone(glyph, i3, column),
480029
+ children: glyph
480030
+ }, `${i3}:${column}`, false, undefined, this))
479931
480031
  }, i3, false, undefined, this)),
479932
480032
  /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
480033
+ bold: true,
479933
480034
  children: [
479934
480035
  /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479935
- color: "ur",
479936
- children: "\u25C6"
480036
+ color: "warningShimmer",
480037
+ children: "\u2726"
479937
480038
  }, undefined, false, undefined, this),
479938
480039
  /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479939
- dimColor: true,
480040
+ color: "urShimmer",
479940
480041
  children: [
479941
480042
  " ",
479942
480043
  UR_WORDMARK_TAGLINE,
@@ -479944,15 +480045,15 @@ function URBanner() {
479944
480045
  ]
479945
480046
  }, undefined, true, undefined, this),
479946
480047
  /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479947
- color: "ur",
479948
- children: "\u25C6"
480048
+ color: "warningShimmer",
480049
+ children: "\u2726"
479949
480050
  }, undefined, false, undefined, this)
479950
480051
  ]
479951
480052
  }, undefined, true, undefined, this)
479952
480053
  ]
479953
480054
  }, undefined, true, undefined, this);
479954
480055
  }
479955
- var jsx_dev_runtime233, UR_WORDMARK_ROWS, UR_WORDMARK_TAGLINE = "THE AUTONOMOUS AGENT";
480056
+ var jsx_dev_runtime233, UR_WORDMARK_ROWS, UR_WORDMARK_TAGLINE = "THE AUTONOMOUS AGENT", SPECULAR_GLYPHS;
479956
480057
  var init_URBanner = __esm(() => {
479957
480058
  init_ink2();
479958
480059
  init_screenReader();
@@ -479965,6 +480066,25 @@ var init_URBanner = __esm(() => {
479965
480066
  "\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2551",
479966
480067
  " \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D"
479967
480068
  ];
480069
+ SPECULAR_GLYPHS = new Set([
480070
+ "0:0",
480071
+ "0:1",
480072
+ "0:6",
480073
+ "0:7",
480074
+ "0:11",
480075
+ "0:12",
480076
+ "0:13",
480077
+ "0:14",
480078
+ "0:15",
480079
+ "0:16",
480080
+ "1:0",
480081
+ "1:6",
480082
+ "1:11",
480083
+ "1:15",
480084
+ "2:0",
480085
+ "2:6",
480086
+ "2:11"
480087
+ ]);
479968
480088
  });
479969
480089
 
479970
480090
  // src/components/LogoV2/UrHouse.tsx
@@ -480732,7 +480852,7 @@ function LogoV2() {
480732
480852
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
480733
480853
  t2 = () => {
480734
480854
  const currentConfig = getGlobalConfig();
480735
- if (currentConfig.lastReleaseNotesSeen === "1.81.2") {
480855
+ if (currentConfig.lastReleaseNotesSeen === "1.81.3") {
480736
480856
  return;
480737
480857
  }
480738
480858
  saveGlobalConfig(_temp325);
@@ -481417,12 +481537,12 @@ function LogoV2() {
481417
481537
  return t41;
481418
481538
  }
481419
481539
  function _temp325(current) {
481420
- if (current.lastReleaseNotesSeen === "1.81.2") {
481540
+ if (current.lastReleaseNotesSeen === "1.81.3") {
481421
481541
  return current;
481422
481542
  }
481423
481543
  return {
481424
481544
  ...current,
481425
- lastReleaseNotesSeen: "1.81.2"
481545
+ lastReleaseNotesSeen: "1.81.3"
481426
481546
  };
481427
481547
  }
481428
481548
  function _temp241(s_0) {
@@ -497372,7 +497492,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
497372
497492
  if (spec.name !== specName) {
497373
497493
  throw new Error("Agentic CI workflow spec name does not match");
497374
497494
  }
497375
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.2" : "1.81.2");
497495
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.3" : "1.81.3");
497376
497496
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
497377
497497
  throw new Error("invalid ur-agent package version");
497378
497498
  }
@@ -498365,7 +498485,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
498365
498485
  path: ".github/workflows/ur.yml",
498366
498486
  root: "project",
498367
498487
  content: compileAgenticCiWorkflow("default", {
498368
- packageVersion: typeof MACRO !== "undefined" ? "1.81.2" : "1.81.2"
498488
+ packageVersion: typeof MACRO !== "undefined" ? "1.81.3" : "1.81.3"
498369
498489
  })
498370
498490
  },
498371
498491
  {
@@ -498428,7 +498548,7 @@ function value(tokens, flag) {
498428
498548
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
498429
498549
  }
498430
498550
  function cliVersion() {
498431
- return typeof MACRO !== "undefined" ? "1.81.2" : "1.81.2";
498551
+ return typeof MACRO !== "undefined" ? "1.81.3" : "1.81.3";
498432
498552
  }
498433
498553
  function workflowPath(cwd2) {
498434
498554
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -504284,7 +504404,7 @@ function createAcpStdioApp(deps) {
504284
504404
  }
504285
504405
  },
504286
504406
  authMethods: [],
504287
- agentInfo: { name: "UR-Nexus", version: "1.81.2" }
504407
+ agentInfo: { name: "UR-Nexus", version: "1.81.3" }
504288
504408
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
504289
504409
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
504290
504410
  await runtime2.announce({
@@ -504381,7 +504501,7 @@ function createAcpStdioAgent(deps) {
504381
504501
  }
504382
504502
  },
504383
504503
  authMethods: [],
504384
- agentInfo: { name: "UR-Nexus", version: "1.81.2" }
504504
+ agentInfo: { name: "UR-Nexus", version: "1.81.3" }
504385
504505
  });
504386
504506
  return;
504387
504507
  case "authenticate":
@@ -715633,7 +715753,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715633
715753
  smapsRollup,
715634
715754
  platform: process.platform,
715635
715755
  nodeVersion: process.version,
715636
- ccVersion: "1.81.2"
715756
+ ccVersion: "1.81.3"
715637
715757
  };
715638
715758
  }
715639
715759
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -716222,7 +716342,7 @@ var init_bridge_kick = __esm(() => {
716222
716342
  var call154 = async () => {
716223
716343
  return {
716224
716344
  type: "text",
716225
- value: "1.81.2"
716345
+ value: "1.81.3"
716226
716346
  };
716227
716347
  }, version2, version_default;
716228
716348
  var init_version = __esm(() => {
@@ -719236,9 +719356,10 @@ function ProviderFirstModelPicker({
719236
719356
  const [credentialNotice, setCredentialNotice] = import_react186.useState(null);
719237
719357
  const [modelReloadToken, setModelReloadToken] = import_react186.useState(0);
719238
719358
  const terminalSize = import_react186.useContext(TerminalSizeContext);
719239
- const keyInputColumns = Math.max(20, (terminalSize?.columns ?? 80) - 14);
719359
+ const keyInputColumns = getProviderKeyInputColumns(terminalSize?.columns);
719240
719360
  const effortValue = useAppState(selectEffortValue2);
719241
- const [effort] = import_react186.useState(effortValue !== undefined ? convertEffortValueToLevel(effortValue) : undefined);
719361
+ const [effort, setEffort] = import_react186.useState(effortValue !== undefined ? convertEffortValueToLevel(effortValue) : undefined);
719362
+ const [hasToggledEffort, setHasToggledEffort] = import_react186.useState(false);
719242
719363
  const appThinkingEnabled = useAppState(selectThinkingEnabled2);
719243
719364
  const hasToggledThinking = false;
719244
719365
  const [thinkingEnabled] = import_react186.useState(() => appThinkingEnabled ?? shouldEnableThinkingByDefault());
@@ -719288,7 +719409,11 @@ function ProviderFirstModelPicker({
719288
719409
  const options5 = result.models.map((model) => ({
719289
719410
  value: model.id,
719290
719411
  label: model.displayName,
719291
- description: `${model.description} \xB7 ${result.source}`,
719412
+ description: formatProviderModelDescription(model, result.source, providerId),
719413
+ pricing: model.pricing,
719414
+ contextLength: model.contextLength,
719415
+ supportedParameters: model.supportedParameters,
719416
+ reasoning: model.reasoning,
719292
719417
  ...model.supportedParameters !== undefined && !model.supportedParameters.includes("tools") ? { disabled: true } : {}
719293
719418
  }));
719294
719419
  setModelOptions(options5);
@@ -719333,6 +719458,11 @@ function ProviderFirstModelPicker({
719333
719458
  const modelVisibleCount = Math.max(1, Math.min(modelSelectOptions.length, Math.max(5, (terminalSize?.rows ?? 24) - 14)));
719334
719459
  const focusedProvider = providerOptions.find((p2) => p2.value === focusedProviderValue);
719335
719460
  const focusedModel = modelOptions.find((m) => m.value === focusedModelValue);
719461
+ const focusedResolvedModel = focusedModel ? parseUserSpecifiedModel(focusedModel.value) : undefined;
719462
+ const focusedSupportsEffort = focusedResolvedModel ? modelSupportsEffort(focusedResolvedModel) : false;
719463
+ const focusedSupportsMax = focusedResolvedModel ? modelSupportsMaxEffort(focusedResolvedModel) : false;
719464
+ const focusedDefaultEffort = focusedResolvedModel ? convertEffortValueToLevel(getDefaultEffortForModel(focusedResolvedModel) ?? "high") : "high";
719465
+ const displayedEffort = effort === "max" && !focusedSupportsMax ? "high" : effort ?? focusedDefaultEffort;
719336
719466
  function handleProviderFocus(value2) {
719337
719467
  setFocusedProviderValue(value2);
719338
719468
  setProviderWarning(null);
@@ -719340,6 +719470,20 @@ function ProviderFirstModelPicker({
719340
719470
  function handleModelFocus(value2) {
719341
719471
  setFocusedModelValue(value2);
719342
719472
  }
719473
+ function handleCycleEffort(direction) {
719474
+ if (!focusedSupportsEffort)
719475
+ return;
719476
+ setEffort((previous) => cycleProviderPickerEffort(previous ?? focusedDefaultEffort, direction, focusedSupportsMax));
719477
+ setHasToggledEffort(true);
719478
+ }
719479
+ use_input_default((_input, key, event) => {
719480
+ if (!key.leftArrow && !key.rightArrow)
719481
+ return;
719482
+ handleCycleEffort(key.rightArrow ? "right" : "left");
719483
+ event.stopImmediatePropagation();
719484
+ }, {
719485
+ isActive: step === "model" && !loadingModels && focusedSupportsEffort
719486
+ });
719343
719487
  function handleProviderSelect(value2) {
719344
719488
  const provider = providerOptions.find((p2) => p2.value === value2);
719345
719489
  if (provider) {
@@ -719421,6 +719565,14 @@ function ProviderFirstModelPicker({
719421
719565
  return;
719422
719566
  }
719423
719567
  }
719568
+ if (hasToggledEffort) {
719569
+ const persistable = effort ? toPersistableEffort(effort) : undefined;
719570
+ if (persistable !== undefined) {
719571
+ updateSettingsForSource("userSettings", {
719572
+ effortLevel: persistable
719573
+ });
719574
+ }
719575
+ }
719424
719576
  setAppState((prev) => ({
719425
719577
  ...prev,
719426
719578
  provider: {
@@ -719428,10 +719580,10 @@ function ProviderFirstModelPicker({
719428
719580
  active: selectedProvider?.value,
719429
719581
  model: value2
719430
719582
  },
719431
- effortValue: effort,
719583
+ ...hasToggledEffort ? { effortValue: effort } : {},
719432
719584
  ...hasToggledThinking ? { thinkingEnabled } : {}
719433
719585
  }));
719434
- onSelect(value2, effort, selectedProvider ? {
719586
+ onSelect(value2, hasToggledEffort ? effort : undefined, selectedProvider ? {
719435
719587
  providerId: selectedProvider.value,
719436
719588
  providerName: selectedProvider.label,
719437
719589
  accessType: selectedProvider.accessType,
@@ -719601,22 +719753,33 @@ function ProviderFirstModelPicker({
719601
719753
  ]
719602
719754
  }, undefined, true, undefined, this),
719603
719755
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
719756
+ width: "100%",
719757
+ flexDirection: "row",
719604
719758
  children: [
719605
- /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719606
- children: "API key: "
719759
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
719760
+ width: 12,
719761
+ flexShrink: 0,
719762
+ children: /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719763
+ bold: true,
719764
+ color: "subtle",
719765
+ children: "API key"
719766
+ }, undefined, false, undefined, this)
719607
719767
  }, undefined, false, undefined, this),
719608
- /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(TextInput, {
719609
- value: apiKeyInput,
719610
- onChange: setApiKeyInput,
719611
- onSubmit: handleKeySubmit,
719612
- mask: "*",
719613
- placeholder: "paste key, then Enter",
719614
- focus: true,
719615
- showCursor: true,
719616
- multiline: false,
719617
- columns: keyInputColumns,
719618
- cursorOffset: apiKeyCursorOffset,
719619
- onChangeCursorOffset: setApiKeyCursorOffset
719768
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
719769
+ flexGrow: 1,
719770
+ children: /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(TextInput, {
719771
+ value: apiKeyInput,
719772
+ onChange: setApiKeyInput,
719773
+ onSubmit: handleKeySubmit,
719774
+ mask: "*",
719775
+ placeholder: "paste key, then Enter",
719776
+ focus: true,
719777
+ showCursor: true,
719778
+ multiline: false,
719779
+ columns: keyInputColumns,
719780
+ cursorOffset: apiKeyCursorOffset,
719781
+ onChangeCursorOffset: setApiKeyCursorOffset
719782
+ }, undefined, false, undefined, this)
719620
719783
  }, undefined, false, undefined, this)
719621
719784
  ]
719622
719785
  }, undefined, true, undefined, this),
@@ -719809,34 +719972,31 @@ function ProviderFirstModelPicker({
719809
719972
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719810
719973
  color: "remember",
719811
719974
  bold: true,
719812
- children: "Select model"
719975
+ children: selectedProvider?.value === "openrouter" ? "OpenRouter model catalog" : "Select model"
719813
719976
  }, undefined, false, undefined, this),
719814
719977
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719815
719978
  dimColor: true,
719816
- children: [
719817
- "Showing models for ",
719818
- selectedProvider?.label,
719819
- " (",
719820
- selectedProvider?.accessType,
719821
- ")"
719822
- ]
719823
- }, undefined, true, undefined, this),
719979
+ children: selectedProvider?.value === "openrouter" ? `${modelOptions.length} current models from your OpenRouter account` : `Showing models for ${selectedProvider?.label} (${selectedProvider?.accessType})`
719980
+ }, undefined, false, undefined, this),
719824
719981
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719825
- dimColor: true,
719826
- color: "subtle",
719982
+ color: modelSource === "live" ? "success" : "subtle",
719827
719983
  children: [
719828
- "Model source: ",
719829
- modelSource
719984
+ formatModelSourceLabel(modelSource),
719985
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719986
+ dimColor: true,
719987
+ color: "subtle",
719988
+ children: [
719989
+ " ",
719990
+ "\xB7 agent-capable models can be selected"
719991
+ ]
719992
+ }, undefined, true, undefined, this)
719830
719993
  ]
719831
719994
  }, undefined, true, undefined, this),
719832
719995
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719833
719996
  dimColor: true,
719834
719997
  color: "subtle",
719835
- children: [
719836
- "Esc to change provider \xB7 ctrl+r to refresh from ",
719837
- selectedProvider?.label
719838
- ]
719839
- }, undefined, true, undefined, this)
719998
+ children: "\u2191\u2193 browse \xB7 Enter select \xB7 \u2190\u2192 effort \xB7 Ctrl+R refresh \xB7 Esc providers"
719999
+ }, undefined, false, undefined, this)
719840
720000
  ]
719841
720001
  }, undefined, true, undefined, this),
719842
720002
  loadingModels ? /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
@@ -719868,25 +720028,34 @@ function ProviderFirstModelPicker({
719868
720028
  flexDirection: "column",
719869
720029
  children: [
719870
720030
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719871
- dimColor: true,
719872
- children: [
719873
- focusedModel.label,
719874
- " \xB7 ",
719875
- focusedModel.description
719876
- ]
719877
- }, undefined, true, undefined, this),
720031
+ bold: true,
720032
+ color: "text",
720033
+ children: focusedModel.label
720034
+ }, undefined, false, undefined, this),
719878
720035
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719879
720036
  dimColor: true,
719880
- color: "subtle",
720037
+ children: focusedModel.description
720038
+ }, undefined, false, undefined, this),
720039
+ focusedSupportsEffort && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719881
720040
  children: [
719882
- "Source: ",
719883
- modelSource
720041
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720042
+ color: "ur",
720043
+ children: [
720044
+ effortLevelToSymbol(displayedEffort),
720045
+ " ",
720046
+ displayedEffort.toUpperCase()
720047
+ ]
720048
+ }, undefined, true, undefined, this),
720049
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720050
+ dimColor: true,
720051
+ color: "subtle",
720052
+ children: [
720053
+ " ",
720054
+ "effort \xB7 use \u2190 \u2192 to adjust"
720055
+ ]
720056
+ }, undefined, true, undefined, this)
719884
720057
  ]
719885
- }, undefined, true, undefined, this),
719886
- modelSupportsEffort(parseUserSpecifiedModel(focusedModel.value)) && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719887
- dimColor: true,
719888
- children: "\u2190 \u2192 to adjust effort"
719889
- }, undefined, false, undefined, this)
720058
+ }, undefined, true, undefined, this)
719890
720059
  ]
719891
720060
  }, undefined, true, undefined, this),
719892
720061
  modelWarning && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
@@ -719949,6 +720118,45 @@ function ProviderFirstModelPicker({
719949
720118
  }, undefined, false, undefined, this);
719950
720119
  }
719951
720120
  function noop8() {}
720121
+ function getProviderKeyInputColumns(terminalColumns) {
720122
+ const columns = Number.isFinite(terminalColumns) && terminalColumns > 0 ? Math.floor(terminalColumns) : 80;
720123
+ return Math.max(8, columns - 20);
720124
+ }
720125
+ function cycleProviderPickerEffort(current, direction, includeMax) {
720126
+ const levels = includeMax ? ["low", "medium", "high", "max"] : ["low", "medium", "high"];
720127
+ const index2 = levels.indexOf(current);
720128
+ const currentIndex = index2 >= 0 ? index2 : levels.indexOf("high");
720129
+ const delta = direction === "right" ? 1 : -1;
720130
+ return levels[(currentIndex + delta + levels.length) % levels.length];
720131
+ }
720132
+ function formatModelSourceLabel(source) {
720133
+ if (source === "live")
720134
+ return "\u25CF LIVE CATALOG";
720135
+ if (source === "cache")
720136
+ return "\u25D0 CACHED CATALOG";
720137
+ return "\u25CB BUILT-IN CATALOG";
720138
+ }
720139
+ function formatProviderModelDescription(model, source, providerId) {
720140
+ if (providerId !== "openrouter") {
720141
+ return `${model.description} \xB7 ${source}`;
720142
+ }
720143
+ const details = [];
720144
+ if (model.pricing === "free")
720145
+ details.push("FREE");
720146
+ else if (model.pricing === "paid")
720147
+ details.push("PAID");
720148
+ if (model.contextLength) {
720149
+ details.push(model.contextLength >= 1e6 ? `${Math.round(model.contextLength / 1e6)}M context` : `${Math.round(model.contextLength / 1000)}K context`);
720150
+ }
720151
+ if (model.supportedParameters?.includes("tools"))
720152
+ details.push("tools");
720153
+ else if (model.supportedParameters)
720154
+ details.push("chat only");
720155
+ if (model.reasoning || model.supportedParameters?.some((parameter) => parameter === "reasoning" || parameter === "reasoning_effort")) {
720156
+ details.push("reasoning");
720157
+ }
720158
+ return details.length > 0 ? details.join(" \xB7 ") : model.description;
720159
+ }
719952
720160
  var import_react186, jsx_dev_runtime336, selectCurrentProvider = (s) => s.provider?.active ?? "ollama", selectEffortValue2 = (s) => s.effortValue, selectThinkingEnabled2 = (s) => s.thinkingEnabled;
719953
720161
  var init_ProviderFirstModelPicker = __esm(() => {
719954
720162
  init_analytics();
@@ -719970,6 +720178,7 @@ var init_ProviderFirstModelPicker = __esm(() => {
719970
720178
  init_model();
719971
720179
  init_thinking();
719972
720180
  init_providerClient();
720181
+ init_EffortIndicator();
719973
720182
  import_react186 = __toESM(require_react(), 1);
719974
720183
  jsx_dev_runtime336 = __toESM(require_jsx_dev_runtime(), 1);
719975
720184
  });
@@ -727492,7 +727701,7 @@ function generateHtmlReport(data, insights) {
727492
727701
  </html>`;
727493
727702
  }
727494
727703
  function buildExportData(data, insights, facets, remoteStats) {
727495
- const version3 = typeof MACRO !== "undefined" ? "1.81.2" : "unknown";
727704
+ const version3 = typeof MACRO !== "undefined" ? "1.81.3" : "unknown";
727496
727705
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
727497
727706
  const facets_summary = {
727498
727707
  total: facets.size,
@@ -731805,7 +732014,7 @@ var init_sessionStorage = __esm(() => {
731805
732014
  init_settings2();
731806
732015
  init_slowOperations();
731807
732016
  init_uuid();
731808
- VERSION7 = typeof MACRO !== "undefined" ? "1.81.2" : "unknown";
732017
+ VERSION7 = typeof MACRO !== "undefined" ? "1.81.3" : "unknown";
731809
732018
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
731810
732019
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
731811
732020
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -733020,7 +733229,7 @@ var init_filesystem = __esm(() => {
733020
733229
  });
733021
733230
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
733022
733231
  const nonce = randomBytes24(16).toString("hex");
733023
- return join243(getURTempDir(), "bundled-skills", "1.81.2", nonce);
733232
+ return join243(getURTempDir(), "bundled-skills", "1.81.3", nonce);
733024
733233
  });
733025
733234
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
733026
733235
  });
@@ -739420,7 +739629,7 @@ function computeFingerprint(messageText2, version3) {
739420
739629
  }
739421
739630
  function computeFingerprintFromMessages(messages) {
739422
739631
  const firstMessageText = extractFirstMessageText(messages);
739423
- return computeFingerprint(firstMessageText, "1.81.2");
739632
+ return computeFingerprint(firstMessageText, "1.81.3");
739424
739633
  }
739425
739634
  var FINGERPRINT_SALT = "59cf53e54c78";
739426
739635
  var init_fingerprint = () => {};
@@ -741178,7 +741387,7 @@ async function querymodelH({
741178
741387
  signal,
741179
741388
  options: {
741180
741389
  ...options5,
741181
- model: getSmallFastModel(),
741390
+ model: getSmallFastModel(options5.providerSettings),
741182
741391
  enablePromptCaching: options5.enablePromptCaching ?? false,
741183
741392
  outputFormat,
741184
741393
  async getToolPermissionContext() {
@@ -741355,7 +741564,7 @@ async function sideQuery(opts) {
741355
741564
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
741356
741565
  }
741357
741566
  const messageText2 = extractFirstUserMessageText(messages);
741358
- const fingerprint2 = computeFingerprint(messageText2, "1.81.2");
741567
+ const fingerprint2 = computeFingerprint(messageText2, "1.81.3");
741359
741568
  const attributionHeader = getAttributionHeader(fingerprint2);
741360
741569
  const systemBlocks = [
741361
741570
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -746189,7 +746398,7 @@ function buildSystemInitMessage(inputs) {
746189
746398
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
746190
746399
  apiKeySource: getURHQApiKeyWithSource().source,
746191
746400
  betas: getSdkBetas(),
746192
- ur_version: "1.81.2",
746401
+ ur_version: "1.81.3",
746193
746402
  output_style: outputStyle,
746194
746403
  agents: inputs.agents.map((agent2) => agent2.agentType),
746195
746404
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -760025,7 +760234,7 @@ var init_useVoiceEnabled = __esm(() => {
760025
760234
  function getSemverPart(version3) {
760026
760235
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
760027
760236
  }
760028
- function useUpdateNotification(updatedVersion, initialVersion = "1.81.2") {
760237
+ function useUpdateNotification(updatedVersion, initialVersion = "1.81.3") {
760029
760238
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
760030
760239
  if (!updatedVersion) {
760031
760240
  return null;
@@ -760074,7 +760283,7 @@ function AutoUpdater({
760074
760283
  return;
760075
760284
  }
760076
760285
  if (false) {}
760077
- const currentVersion = "1.81.2";
760286
+ const currentVersion = "1.81.3";
760078
760287
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
760079
760288
  let latestVersion = await getLatestVersion(channel);
760080
760289
  const isDisabled = isAutoUpdaterDisabled();
@@ -760303,12 +760512,12 @@ function NativeAutoUpdater({
760303
760512
  logEvent("tengu_native_auto_updater_start", {});
760304
760513
  try {
760305
760514
  const maxVersion = await getMaxVersion();
760306
- if (maxVersion && gt("1.81.2", maxVersion)) {
760515
+ if (maxVersion && gt("1.81.3", maxVersion)) {
760307
760516
  const msg = await getMaxVersionMessage();
760308
760517
  setMaxVersionIssue(msg ?? "affects your version");
760309
760518
  }
760310
760519
  const result = await installLatest(channel);
760311
- const currentVersion = "1.81.2";
760520
+ const currentVersion = "1.81.3";
760312
760521
  const latencyMs = Date.now() - startTime;
760313
760522
  if (result.lockFailed) {
760314
760523
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -760445,17 +760654,17 @@ function PackageManagerAutoUpdater(t0) {
760445
760654
  const maxVersion = await getMaxVersion();
760446
760655
  if (maxVersion && latest && gt(latest, maxVersion)) {
760447
760656
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
760448
- if (gte("1.81.2", maxVersion)) {
760449
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
760657
+ if (gte("1.81.3", maxVersion)) {
760658
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.3"} is already at or above maxVersion ${maxVersion}, skipping update`);
760450
760659
  setUpdateAvailable(false);
760451
760660
  return;
760452
760661
  }
760453
760662
  latest = maxVersion;
760454
760663
  }
760455
- const hasUpdate = latest && !gte("1.81.2", latest) && !shouldSkipVersion(latest);
760664
+ const hasUpdate = latest && !gte("1.81.3", latest) && !shouldSkipVersion(latest);
760456
760665
  setUpdateAvailable(!!hasUpdate);
760457
760666
  if (hasUpdate) {
760458
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.2"} -> ${latest}`);
760667
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.3"} -> ${latest}`);
760459
760668
  }
760460
760669
  };
760461
760670
  $2[0] = t1;
@@ -760489,7 +760698,7 @@ function PackageManagerAutoUpdater(t0) {
760489
760698
  wrap: "truncate",
760490
760699
  children: [
760491
760700
  "currentVersion: ",
760492
- "1.81.2"
760701
+ "1.81.3"
760493
760702
  ]
760494
760703
  }, undefined, true, undefined, this);
760495
760704
  $2[3] = verbose;
@@ -771342,7 +771551,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
771342
771551
  project_dir: getOriginalCwd(),
771343
771552
  added_dirs: addedDirs
771344
771553
  },
771345
- version: "1.81.2",
771554
+ version: "1.81.3",
771346
771555
  output_style: {
771347
771556
  name: outputStyleName
771348
771557
  },
@@ -771477,7 +771686,7 @@ function StatusLineInner({
771477
771686
  const attention = customStatusError ?? taskAttention;
771478
771687
  const terminalSize = React133.useContext(TerminalSizeContext);
771479
771688
  const defaultStatusLineText = buildDefaultStatusBar({
771480
- version: "1.81.2",
771689
+ version: "1.81.3",
771481
771690
  providerLabel: providerRuntime.providerLabel,
771482
771691
  authMode: providerRuntime.authLabel,
771483
771692
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -783733,7 +783942,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783733
783942
  } catch {}
783734
783943
  const data = {
783735
783944
  trigger: trigger2,
783736
- version: "1.81.2",
783945
+ version: "1.81.3",
783737
783946
  platform: process.platform,
783738
783947
  transcript,
783739
783948
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -796102,7 +796311,7 @@ function WelcomeV2() {
796102
796311
  dimColor: true,
796103
796312
  children: [
796104
796313
  "v",
796105
- "1.81.2"
796314
+ "1.81.3"
796106
796315
  ]
796107
796316
  }, undefined, true, undefined, this)
796108
796317
  ]
@@ -797362,7 +797571,7 @@ function completeOnboarding() {
797362
797571
  saveGlobalConfig((current) => ({
797363
797572
  ...current,
797364
797573
  hasCompletedOnboarding: true,
797365
- lastOnboardingVersion: "1.81.2"
797574
+ lastOnboardingVersion: "1.81.3"
797366
797575
  }));
797367
797576
  }
797368
797577
  function showDialog(root2, renderer) {
@@ -802508,7 +802717,7 @@ function appendToLog(path28, message) {
802508
802717
  cwd: getFsImplementation().cwd(),
802509
802718
  userType: process.env.USER_TYPE,
802510
802719
  sessionId: getSessionId(),
802511
- version: "1.81.2"
802720
+ version: "1.81.3"
802512
802721
  };
802513
802722
  getLogWriter(path28).write(messageWithTimestamp);
802514
802723
  }
@@ -806672,8 +806881,8 @@ async function getEnvLessBridgeConfig() {
806672
806881
  }
806673
806882
  async function checkEnvLessBridgeMinVersion() {
806674
806883
  const cfg = await getEnvLessBridgeConfig();
806675
- if (cfg.min_version && lt("1.81.2", cfg.min_version)) {
806676
- return `Your version of UR (${"1.81.2"}) is too old for Remote Control.
806884
+ if (cfg.min_version && lt("1.81.3", cfg.min_version)) {
806885
+ return `Your version of UR (${"1.81.3"}) is too old for Remote Control.
806677
806886
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806678
806887
  }
806679
806888
  return null;
@@ -807147,7 +807356,7 @@ async function initBridgeCore(params) {
807147
807356
  const rawApi = createBridgeApiClient({
807148
807357
  baseUrl,
807149
807358
  getAccessToken,
807150
- runnerVersion: "1.81.2",
807359
+ runnerVersion: "1.81.3",
807151
807360
  onDebug: logForDebugging,
807152
807361
  onAuth401,
807153
807362
  getTrustedDeviceToken
@@ -816620,7 +816829,7 @@ function getAgUiCapabilities() {
816620
816829
  name: "UR-Nexus",
816621
816830
  type: "ur-nexus",
816622
816831
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816623
- version: "1.81.2",
816832
+ version: "1.81.3",
816624
816833
  provider: "UR",
816625
816834
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816626
816835
  },
@@ -817847,7 +818056,7 @@ function createMCPServer(cwd4, debug2, verbose) {
817847
818056
  };
817848
818057
  const server2 = new Server({
817849
818058
  name: "ur-nexus",
817850
- version: "1.81.2"
818059
+ version: "1.81.3"
817851
818060
  }, {
817852
818061
  capabilities: {
817853
818062
  tools: {}
@@ -819051,7 +819260,7 @@ function thrownResponse(error40) {
819051
819260
  }
819052
819261
  async function createUrMcp2026Runtime(options5) {
819053
819262
  const server2 = createMCPServer(options5.cwd, options5.debug === true, options5.verbose === true);
819054
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.2" }, { capabilities: {} });
819263
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.3" }, { capabilities: {} });
819055
819264
  const [clientTransport, serverTransport] = createLinkedTransportPair();
819056
819265
  try {
819057
819266
  await server2.connect(serverTransport);
@@ -819062,7 +819271,7 @@ async function createUrMcp2026Runtime(options5) {
819062
819271
  }
819063
819272
  const runtime2 = new Mcp2026Runtime({
819064
819273
  cwd: options5.cwd,
819065
- version: "1.81.2",
819274
+ version: "1.81.3",
819066
819275
  backend: {
819067
819276
  listTools: async () => {
819068
819277
  const listed = await client2.listTools();
@@ -821797,7 +822006,7 @@ async function update() {
821797
822006
  logEvent("tengu_update_check", {});
821798
822007
  const diagnostic2 = await getDoctorDiagnostic();
821799
822008
  const result = await checkUpgradeStatus({
821800
- currentVersion: "1.81.2",
822009
+ currentVersion: "1.81.3",
821801
822010
  packageName: UR_AGENT_PACKAGE_NAME,
821802
822011
  installationType: diagnostic2.installationType,
821803
822012
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -823125,7 +823334,7 @@ ${customInstructions}` : customInstructions;
823125
823334
  }
823126
823335
  }
823127
823336
  logForDiagnosticsNoPII("info", "started", {
823128
- version: "1.81.2",
823337
+ version: "1.81.3",
823129
823338
  is_native_binary: isInBundledMode()
823130
823339
  });
823131
823340
  registerCleanup(async () => {
@@ -823912,7 +824121,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
823912
824121
  pendingHookMessages
823913
824122
  }, renderAndRun);
823914
824123
  }
823915
- }).version("1.81.2 (UR-Nexus)", "-v, --version", "Output the version number");
824124
+ }).version("1.81.3 (UR-Nexus)", "-v, --version", "Output the version number");
823916
824125
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
823917
824126
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
823918
824127
  if (canUserConfigureAdvisor()) {
@@ -825039,7 +825248,7 @@ if (false) {}
825039
825248
  async function main2() {
825040
825249
  const args = process.argv.slice(2);
825041
825250
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
825042
- console.log(`${"1.81.2"} (UR-Nexus)`);
825251
+ console.log(`${"1.81.3"} (UR-Nexus)`);
825043
825252
  return;
825044
825253
  }
825045
825254
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {