ur-agent 1.81.2 → 1.81.4

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.4"}`;
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.4"} (${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.4"}${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.4",
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.4".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.4",
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.4"
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.4");
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.4", 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.4"}.${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.4");
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.4"
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.4").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.4").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.4";
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.4";
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.4",
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.4",
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.4"
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.4");
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.4"));
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.4", 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.4"}) 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.4"
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.4"
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.4" : "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.4", maxVersion)) {
342992
+ logForDebugging(`Native installer: current version ${"1.81.4"} 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.4" && 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.4");
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.4",
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.4"
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.4"}
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.4"
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.4",
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.4";
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.4"}`,
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.4",
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.4") {
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.4") {
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.4";
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,9 @@ var init_logoV2Utils = __esm(() => {
479914
480004
  });
479915
480005
 
479916
480006
  // src/components/LogoV2/URBanner.tsx
480007
+ function getURWordmarkGlyphTone(glyph, _row, _column) {
480008
+ return glyph === " " ? undefined : "ur";
480009
+ }
479917
480010
  function URBanner() {
479918
480011
  if (isScreenReaderMode()) {
479919
480012
  return /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
@@ -479925,30 +480018,23 @@ function URBanner() {
479925
480018
  alignItems: "center",
479926
480019
  children: [
479927
480020
  UR_WORDMARK_ROWS.map((row, i3) => /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479928
- color: "ur",
479929
480021
  bold: true,
479930
- children: row
480022
+ children: [...row].map((glyph, column) => /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
480023
+ color: getURWordmarkGlyphTone(glyph, i3, column),
480024
+ children: glyph
480025
+ }, `${i3}:${column}`, false, undefined, this))
479931
480026
  }, i3, false, undefined, this)),
479932
480027
  /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479933
- children: [
479934
- /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479935
- color: "ur",
479936
- children: "\u25C6"
479937
- }, undefined, false, undefined, this),
479938
- /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479939
- dimColor: true,
479940
- children: [
479941
- " ",
479942
- UR_WORDMARK_TAGLINE,
479943
- " "
479944
- ]
479945
- }, undefined, true, undefined, this),
479946
- /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
479947
- color: "ur",
479948
- children: "\u25C6"
479949
- }, undefined, false, undefined, this)
479950
- ]
479951
- }, undefined, true, undefined, this)
480028
+ bold: true,
480029
+ children: /* @__PURE__ */ jsx_dev_runtime233.jsxDEV(ThemedText, {
480030
+ color: "ur",
480031
+ children: [
480032
+ "\u2726 ",
480033
+ UR_WORDMARK_TAGLINE,
480034
+ " \u2726"
480035
+ ]
480036
+ }, undefined, true, undefined, this)
480037
+ }, undefined, false, undefined, this)
479952
480038
  ]
479953
480039
  }, undefined, true, undefined, this);
479954
480040
  }
@@ -480732,7 +480818,7 @@ function LogoV2() {
480732
480818
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
480733
480819
  t2 = () => {
480734
480820
  const currentConfig = getGlobalConfig();
480735
- if (currentConfig.lastReleaseNotesSeen === "1.81.2") {
480821
+ if (currentConfig.lastReleaseNotesSeen === "1.81.4") {
480736
480822
  return;
480737
480823
  }
480738
480824
  saveGlobalConfig(_temp325);
@@ -481417,12 +481503,12 @@ function LogoV2() {
481417
481503
  return t41;
481418
481504
  }
481419
481505
  function _temp325(current) {
481420
- if (current.lastReleaseNotesSeen === "1.81.2") {
481506
+ if (current.lastReleaseNotesSeen === "1.81.4") {
481421
481507
  return current;
481422
481508
  }
481423
481509
  return {
481424
481510
  ...current,
481425
- lastReleaseNotesSeen: "1.81.2"
481511
+ lastReleaseNotesSeen: "1.81.4"
481426
481512
  };
481427
481513
  }
481428
481514
  function _temp241(s_0) {
@@ -497372,7 +497458,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
497372
497458
  if (spec.name !== specName) {
497373
497459
  throw new Error("Agentic CI workflow spec name does not match");
497374
497460
  }
497375
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.2" : "1.81.2");
497461
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.81.4" : "1.81.4");
497376
497462
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
497377
497463
  throw new Error("invalid ur-agent package version");
497378
497464
  }
@@ -498365,7 +498451,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
498365
498451
  path: ".github/workflows/ur.yml",
498366
498452
  root: "project",
498367
498453
  content: compileAgenticCiWorkflow("default", {
498368
- packageVersion: typeof MACRO !== "undefined" ? "1.81.2" : "1.81.2"
498454
+ packageVersion: typeof MACRO !== "undefined" ? "1.81.4" : "1.81.4"
498369
498455
  })
498370
498456
  },
498371
498457
  {
@@ -498428,7 +498514,7 @@ function value(tokens, flag) {
498428
498514
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
498429
498515
  }
498430
498516
  function cliVersion() {
498431
- return typeof MACRO !== "undefined" ? "1.81.2" : "1.81.2";
498517
+ return typeof MACRO !== "undefined" ? "1.81.4" : "1.81.4";
498432
498518
  }
498433
498519
  function workflowPath(cwd2) {
498434
498520
  return join168(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -504284,7 +504370,7 @@ function createAcpStdioApp(deps) {
504284
504370
  }
504285
504371
  },
504286
504372
  authMethods: [],
504287
- agentInfo: { name: "UR-Nexus", version: "1.81.2" }
504373
+ agentInfo: { name: "UR-Nexus", version: "1.81.4" }
504288
504374
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
504289
504375
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
504290
504376
  await runtime2.announce({
@@ -504381,7 +504467,7 @@ function createAcpStdioAgent(deps) {
504381
504467
  }
504382
504468
  },
504383
504469
  authMethods: [],
504384
- agentInfo: { name: "UR-Nexus", version: "1.81.2" }
504470
+ agentInfo: { name: "UR-Nexus", version: "1.81.4" }
504385
504471
  });
504386
504472
  return;
504387
504473
  case "authenticate":
@@ -715633,7 +715719,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
715633
715719
  smapsRollup,
715634
715720
  platform: process.platform,
715635
715721
  nodeVersion: process.version,
715636
- ccVersion: "1.81.2"
715722
+ ccVersion: "1.81.4"
715637
715723
  };
715638
715724
  }
715639
715725
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -716222,7 +716308,7 @@ var init_bridge_kick = __esm(() => {
716222
716308
  var call154 = async () => {
716223
716309
  return {
716224
716310
  type: "text",
716225
- value: "1.81.2"
716311
+ value: "1.81.4"
716226
716312
  };
716227
716313
  }, version2, version_default;
716228
716314
  var init_version = __esm(() => {
@@ -719236,9 +719322,10 @@ function ProviderFirstModelPicker({
719236
719322
  const [credentialNotice, setCredentialNotice] = import_react186.useState(null);
719237
719323
  const [modelReloadToken, setModelReloadToken] = import_react186.useState(0);
719238
719324
  const terminalSize = import_react186.useContext(TerminalSizeContext);
719239
- const keyInputColumns = Math.max(20, (terminalSize?.columns ?? 80) - 14);
719325
+ const keyInputColumns = getProviderKeyInputColumns(terminalSize?.columns);
719240
719326
  const effortValue = useAppState(selectEffortValue2);
719241
- const [effort] = import_react186.useState(effortValue !== undefined ? convertEffortValueToLevel(effortValue) : undefined);
719327
+ const [effort, setEffort] = import_react186.useState(effortValue !== undefined ? convertEffortValueToLevel(effortValue) : undefined);
719328
+ const [hasToggledEffort, setHasToggledEffort] = import_react186.useState(false);
719242
719329
  const appThinkingEnabled = useAppState(selectThinkingEnabled2);
719243
719330
  const hasToggledThinking = false;
719244
719331
  const [thinkingEnabled] = import_react186.useState(() => appThinkingEnabled ?? shouldEnableThinkingByDefault());
@@ -719288,7 +719375,11 @@ function ProviderFirstModelPicker({
719288
719375
  const options5 = result.models.map((model) => ({
719289
719376
  value: model.id,
719290
719377
  label: model.displayName,
719291
- description: `${model.description} \xB7 ${result.source}`,
719378
+ description: formatProviderModelDescription(model, result.source, providerId),
719379
+ pricing: model.pricing,
719380
+ contextLength: model.contextLength,
719381
+ supportedParameters: model.supportedParameters,
719382
+ reasoning: model.reasoning,
719292
719383
  ...model.supportedParameters !== undefined && !model.supportedParameters.includes("tools") ? { disabled: true } : {}
719293
719384
  }));
719294
719385
  setModelOptions(options5);
@@ -719333,6 +719424,11 @@ function ProviderFirstModelPicker({
719333
719424
  const modelVisibleCount = Math.max(1, Math.min(modelSelectOptions.length, Math.max(5, (terminalSize?.rows ?? 24) - 14)));
719334
719425
  const focusedProvider = providerOptions.find((p2) => p2.value === focusedProviderValue);
719335
719426
  const focusedModel = modelOptions.find((m) => m.value === focusedModelValue);
719427
+ const focusedResolvedModel = focusedModel ? parseUserSpecifiedModel(focusedModel.value) : undefined;
719428
+ const focusedSupportsEffort = focusedResolvedModel ? modelSupportsEffort(focusedResolvedModel) : false;
719429
+ const focusedSupportsMax = focusedResolvedModel ? modelSupportsMaxEffort(focusedResolvedModel) : false;
719430
+ const focusedDefaultEffort = focusedResolvedModel ? convertEffortValueToLevel(getDefaultEffortForModel(focusedResolvedModel) ?? "high") : "high";
719431
+ const displayedEffort = effort === "max" && !focusedSupportsMax ? "high" : effort ?? focusedDefaultEffort;
719336
719432
  function handleProviderFocus(value2) {
719337
719433
  setFocusedProviderValue(value2);
719338
719434
  setProviderWarning(null);
@@ -719340,6 +719436,20 @@ function ProviderFirstModelPicker({
719340
719436
  function handleModelFocus(value2) {
719341
719437
  setFocusedModelValue(value2);
719342
719438
  }
719439
+ function handleCycleEffort(direction) {
719440
+ if (!focusedSupportsEffort)
719441
+ return;
719442
+ setEffort((previous) => cycleProviderPickerEffort(previous ?? focusedDefaultEffort, direction, focusedSupportsMax));
719443
+ setHasToggledEffort(true);
719444
+ }
719445
+ use_input_default((_input, key, event) => {
719446
+ if (!key.leftArrow && !key.rightArrow)
719447
+ return;
719448
+ handleCycleEffort(key.rightArrow ? "right" : "left");
719449
+ event.stopImmediatePropagation();
719450
+ }, {
719451
+ isActive: step === "model" && !loadingModels && focusedSupportsEffort
719452
+ });
719343
719453
  function handleProviderSelect(value2) {
719344
719454
  const provider = providerOptions.find((p2) => p2.value === value2);
719345
719455
  if (provider) {
@@ -719421,6 +719531,14 @@ function ProviderFirstModelPicker({
719421
719531
  return;
719422
719532
  }
719423
719533
  }
719534
+ if (hasToggledEffort) {
719535
+ const persistable = effort ? toPersistableEffort(effort) : undefined;
719536
+ if (persistable !== undefined) {
719537
+ updateSettingsForSource("userSettings", {
719538
+ effortLevel: persistable
719539
+ });
719540
+ }
719541
+ }
719424
719542
  setAppState((prev) => ({
719425
719543
  ...prev,
719426
719544
  provider: {
@@ -719428,10 +719546,10 @@ function ProviderFirstModelPicker({
719428
719546
  active: selectedProvider?.value,
719429
719547
  model: value2
719430
719548
  },
719431
- effortValue: effort,
719549
+ ...hasToggledEffort ? { effortValue: effort } : {},
719432
719550
  ...hasToggledThinking ? { thinkingEnabled } : {}
719433
719551
  }));
719434
- onSelect(value2, effort, selectedProvider ? {
719552
+ onSelect(value2, hasToggledEffort ? effort : undefined, selectedProvider ? {
719435
719553
  providerId: selectedProvider.value,
719436
719554
  providerName: selectedProvider.label,
719437
719555
  accessType: selectedProvider.accessType,
@@ -719601,22 +719719,33 @@ function ProviderFirstModelPicker({
719601
719719
  ]
719602
719720
  }, undefined, true, undefined, this),
719603
719721
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
719722
+ width: "100%",
719723
+ flexDirection: "row",
719604
719724
  children: [
719605
- /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719606
- children: "API key: "
719725
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
719726
+ width: 12,
719727
+ flexShrink: 0,
719728
+ children: /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719729
+ bold: true,
719730
+ color: "subtle",
719731
+ children: "API key"
719732
+ }, undefined, false, undefined, this)
719607
719733
  }, 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
719734
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
719735
+ flexGrow: 1,
719736
+ children: /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(TextInput, {
719737
+ value: apiKeyInput,
719738
+ onChange: setApiKeyInput,
719739
+ onSubmit: handleKeySubmit,
719740
+ mask: "*",
719741
+ placeholder: "paste key, then Enter",
719742
+ focus: true,
719743
+ showCursor: true,
719744
+ multiline: false,
719745
+ columns: keyInputColumns,
719746
+ cursorOffset: apiKeyCursorOffset,
719747
+ onChangeCursorOffset: setApiKeyCursorOffset
719748
+ }, undefined, false, undefined, this)
719620
719749
  }, undefined, false, undefined, this)
719621
719750
  ]
719622
719751
  }, undefined, true, undefined, this),
@@ -719809,34 +719938,31 @@ function ProviderFirstModelPicker({
719809
719938
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719810
719939
  color: "remember",
719811
719940
  bold: true,
719812
- children: "Select model"
719941
+ children: selectedProvider?.value === "openrouter" ? "OpenRouter model catalog" : "Select model"
719813
719942
  }, undefined, false, undefined, this),
719814
719943
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719815
719944
  dimColor: true,
719816
- children: [
719817
- "Showing models for ",
719818
- selectedProvider?.label,
719819
- " (",
719820
- selectedProvider?.accessType,
719821
- ")"
719822
- ]
719823
- }, undefined, true, undefined, this),
719945
+ children: selectedProvider?.value === "openrouter" ? `${modelOptions.length} current models from your OpenRouter account` : `Showing models for ${selectedProvider?.label} (${selectedProvider?.accessType})`
719946
+ }, undefined, false, undefined, this),
719824
719947
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719825
- dimColor: true,
719826
- color: "subtle",
719948
+ color: modelSource === "live" ? "success" : "subtle",
719827
719949
  children: [
719828
- "Model source: ",
719829
- modelSource
719950
+ formatModelSourceLabel(modelSource),
719951
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719952
+ dimColor: true,
719953
+ color: "subtle",
719954
+ children: [
719955
+ " ",
719956
+ "\xB7 agent-capable models can be selected"
719957
+ ]
719958
+ }, undefined, true, undefined, this)
719830
719959
  ]
719831
719960
  }, undefined, true, undefined, this),
719832
719961
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719833
719962
  dimColor: true,
719834
719963
  color: "subtle",
719835
- children: [
719836
- "Esc to change provider \xB7 ctrl+r to refresh from ",
719837
- selectedProvider?.label
719838
- ]
719839
- }, undefined, true, undefined, this)
719964
+ children: "\u2191\u2193 browse \xB7 Enter select \xB7 \u2190\u2192 effort \xB7 Ctrl+R refresh \xB7 Esc providers"
719965
+ }, undefined, false, undefined, this)
719840
719966
  ]
719841
719967
  }, undefined, true, undefined, this),
719842
719968
  loadingModels ? /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
@@ -719868,25 +719994,34 @@ function ProviderFirstModelPicker({
719868
719994
  flexDirection: "column",
719869
719995
  children: [
719870
719996
  /* @__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),
719997
+ bold: true,
719998
+ color: "text",
719999
+ children: focusedModel.label
720000
+ }, undefined, false, undefined, this),
719878
720001
  /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719879
720002
  dimColor: true,
719880
- color: "subtle",
720003
+ children: focusedModel.description
720004
+ }, undefined, false, undefined, this),
720005
+ focusedSupportsEffort && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
719881
720006
  children: [
719882
- "Source: ",
719883
- modelSource
720007
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720008
+ color: "ur",
720009
+ children: [
720010
+ effortLevelToSymbol(displayedEffort),
720011
+ " ",
720012
+ displayedEffort.toUpperCase()
720013
+ ]
720014
+ }, undefined, true, undefined, this),
720015
+ /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedText, {
720016
+ dimColor: true,
720017
+ color: "subtle",
720018
+ children: [
720019
+ " ",
720020
+ "effort \xB7 use \u2190 \u2192 to adjust"
720021
+ ]
720022
+ }, undefined, true, undefined, this)
719884
720023
  ]
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)
720024
+ }, undefined, true, undefined, this)
719890
720025
  ]
719891
720026
  }, undefined, true, undefined, this),
719892
720027
  modelWarning && /* @__PURE__ */ jsx_dev_runtime336.jsxDEV(ThemedBox_default, {
@@ -719949,6 +720084,45 @@ function ProviderFirstModelPicker({
719949
720084
  }, undefined, false, undefined, this);
719950
720085
  }
719951
720086
  function noop8() {}
720087
+ function getProviderKeyInputColumns(terminalColumns) {
720088
+ const columns = Number.isFinite(terminalColumns) && terminalColumns > 0 ? Math.floor(terminalColumns) : 80;
720089
+ return Math.max(8, columns - 20);
720090
+ }
720091
+ function cycleProviderPickerEffort(current, direction, includeMax) {
720092
+ const levels = includeMax ? ["low", "medium", "high", "max"] : ["low", "medium", "high"];
720093
+ const index2 = levels.indexOf(current);
720094
+ const currentIndex = index2 >= 0 ? index2 : levels.indexOf("high");
720095
+ const delta = direction === "right" ? 1 : -1;
720096
+ return levels[(currentIndex + delta + levels.length) % levels.length];
720097
+ }
720098
+ function formatModelSourceLabel(source) {
720099
+ if (source === "live")
720100
+ return "\u25CF LIVE CATALOG";
720101
+ if (source === "cache")
720102
+ return "\u25D0 CACHED CATALOG";
720103
+ return "\u25CB BUILT-IN CATALOG";
720104
+ }
720105
+ function formatProviderModelDescription(model, source, providerId) {
720106
+ if (providerId !== "openrouter") {
720107
+ return `${model.description} \xB7 ${source}`;
720108
+ }
720109
+ const details = [];
720110
+ if (model.pricing === "free")
720111
+ details.push("FREE");
720112
+ else if (model.pricing === "paid")
720113
+ details.push("PAID");
720114
+ if (model.contextLength) {
720115
+ details.push(model.contextLength >= 1e6 ? `${Math.round(model.contextLength / 1e6)}M context` : `${Math.round(model.contextLength / 1000)}K context`);
720116
+ }
720117
+ if (model.supportedParameters?.includes("tools"))
720118
+ details.push("tools");
720119
+ else if (model.supportedParameters)
720120
+ details.push("chat only");
720121
+ if (model.reasoning || model.supportedParameters?.some((parameter) => parameter === "reasoning" || parameter === "reasoning_effort")) {
720122
+ details.push("reasoning");
720123
+ }
720124
+ return details.length > 0 ? details.join(" \xB7 ") : model.description;
720125
+ }
719952
720126
  var import_react186, jsx_dev_runtime336, selectCurrentProvider = (s) => s.provider?.active ?? "ollama", selectEffortValue2 = (s) => s.effortValue, selectThinkingEnabled2 = (s) => s.thinkingEnabled;
719953
720127
  var init_ProviderFirstModelPicker = __esm(() => {
719954
720128
  init_analytics();
@@ -719970,6 +720144,7 @@ var init_ProviderFirstModelPicker = __esm(() => {
719970
720144
  init_model();
719971
720145
  init_thinking();
719972
720146
  init_providerClient();
720147
+ init_EffortIndicator();
719973
720148
  import_react186 = __toESM(require_react(), 1);
719974
720149
  jsx_dev_runtime336 = __toESM(require_jsx_dev_runtime(), 1);
719975
720150
  });
@@ -727492,7 +727667,7 @@ function generateHtmlReport(data, insights) {
727492
727667
  </html>`;
727493
727668
  }
727494
727669
  function buildExportData(data, insights, facets, remoteStats) {
727495
- const version3 = typeof MACRO !== "undefined" ? "1.81.2" : "unknown";
727670
+ const version3 = typeof MACRO !== "undefined" ? "1.81.4" : "unknown";
727496
727671
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
727497
727672
  const facets_summary = {
727498
727673
  total: facets.size,
@@ -731805,7 +731980,7 @@ var init_sessionStorage = __esm(() => {
731805
731980
  init_settings2();
731806
731981
  init_slowOperations();
731807
731982
  init_uuid();
731808
- VERSION7 = typeof MACRO !== "undefined" ? "1.81.2" : "unknown";
731983
+ VERSION7 = typeof MACRO !== "undefined" ? "1.81.4" : "unknown";
731809
731984
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
731810
731985
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
731811
731986
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -733020,7 +733195,7 @@ var init_filesystem = __esm(() => {
733020
733195
  });
733021
733196
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
733022
733197
  const nonce = randomBytes24(16).toString("hex");
733023
- return join243(getURTempDir(), "bundled-skills", "1.81.2", nonce);
733198
+ return join243(getURTempDir(), "bundled-skills", "1.81.4", nonce);
733024
733199
  });
733025
733200
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
733026
733201
  });
@@ -739420,7 +739595,7 @@ function computeFingerprint(messageText2, version3) {
739420
739595
  }
739421
739596
  function computeFingerprintFromMessages(messages) {
739422
739597
  const firstMessageText = extractFirstMessageText(messages);
739423
- return computeFingerprint(firstMessageText, "1.81.2");
739598
+ return computeFingerprint(firstMessageText, "1.81.4");
739424
739599
  }
739425
739600
  var FINGERPRINT_SALT = "59cf53e54c78";
739426
739601
  var init_fingerprint = () => {};
@@ -741178,7 +741353,7 @@ async function querymodelH({
741178
741353
  signal,
741179
741354
  options: {
741180
741355
  ...options5,
741181
- model: getSmallFastModel(),
741356
+ model: getSmallFastModel(options5.providerSettings),
741182
741357
  enablePromptCaching: options5.enablePromptCaching ?? false,
741183
741358
  outputFormat,
741184
741359
  async getToolPermissionContext() {
@@ -741355,7 +741530,7 @@ async function sideQuery(opts) {
741355
741530
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
741356
741531
  }
741357
741532
  const messageText2 = extractFirstUserMessageText(messages);
741358
- const fingerprint2 = computeFingerprint(messageText2, "1.81.2");
741533
+ const fingerprint2 = computeFingerprint(messageText2, "1.81.4");
741359
741534
  const attributionHeader = getAttributionHeader(fingerprint2);
741360
741535
  const systemBlocks = [
741361
741536
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -746189,7 +746364,7 @@ function buildSystemInitMessage(inputs) {
746189
746364
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
746190
746365
  apiKeySource: getURHQApiKeyWithSource().source,
746191
746366
  betas: getSdkBetas(),
746192
- ur_version: "1.81.2",
746367
+ ur_version: "1.81.4",
746193
746368
  output_style: outputStyle,
746194
746369
  agents: inputs.agents.map((agent2) => agent2.agentType),
746195
746370
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -760025,7 +760200,7 @@ var init_useVoiceEnabled = __esm(() => {
760025
760200
  function getSemverPart(version3) {
760026
760201
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
760027
760202
  }
760028
- function useUpdateNotification(updatedVersion, initialVersion = "1.81.2") {
760203
+ function useUpdateNotification(updatedVersion, initialVersion = "1.81.4") {
760029
760204
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react225.useState(() => getSemverPart(initialVersion));
760030
760205
  if (!updatedVersion) {
760031
760206
  return null;
@@ -760074,7 +760249,7 @@ function AutoUpdater({
760074
760249
  return;
760075
760250
  }
760076
760251
  if (false) {}
760077
- const currentVersion = "1.81.2";
760252
+ const currentVersion = "1.81.4";
760078
760253
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
760079
760254
  let latestVersion = await getLatestVersion(channel);
760080
760255
  const isDisabled = isAutoUpdaterDisabled();
@@ -760303,12 +760478,12 @@ function NativeAutoUpdater({
760303
760478
  logEvent("tengu_native_auto_updater_start", {});
760304
760479
  try {
760305
760480
  const maxVersion = await getMaxVersion();
760306
- if (maxVersion && gt("1.81.2", maxVersion)) {
760481
+ if (maxVersion && gt("1.81.4", maxVersion)) {
760307
760482
  const msg = await getMaxVersionMessage();
760308
760483
  setMaxVersionIssue(msg ?? "affects your version");
760309
760484
  }
760310
760485
  const result = await installLatest(channel);
760311
- const currentVersion = "1.81.2";
760486
+ const currentVersion = "1.81.4";
760312
760487
  const latencyMs = Date.now() - startTime;
760313
760488
  if (result.lockFailed) {
760314
760489
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -760445,17 +760620,17 @@ function PackageManagerAutoUpdater(t0) {
760445
760620
  const maxVersion = await getMaxVersion();
760446
760621
  if (maxVersion && latest && gt(latest, maxVersion)) {
760447
760622
  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`);
760623
+ if (gte("1.81.4", maxVersion)) {
760624
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.81.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
760450
760625
  setUpdateAvailable(false);
760451
760626
  return;
760452
760627
  }
760453
760628
  latest = maxVersion;
760454
760629
  }
760455
- const hasUpdate = latest && !gte("1.81.2", latest) && !shouldSkipVersion(latest);
760630
+ const hasUpdate = latest && !gte("1.81.4", latest) && !shouldSkipVersion(latest);
760456
760631
  setUpdateAvailable(!!hasUpdate);
760457
760632
  if (hasUpdate) {
760458
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.2"} -> ${latest}`);
760633
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.81.4"} -> ${latest}`);
760459
760634
  }
760460
760635
  };
760461
760636
  $2[0] = t1;
@@ -760489,7 +760664,7 @@ function PackageManagerAutoUpdater(t0) {
760489
760664
  wrap: "truncate",
760490
760665
  children: [
760491
760666
  "currentVersion: ",
760492
- "1.81.2"
760667
+ "1.81.4"
760493
760668
  ]
760494
760669
  }, undefined, true, undefined, this);
760495
760670
  $2[3] = verbose;
@@ -771342,7 +771517,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
771342
771517
  project_dir: getOriginalCwd(),
771343
771518
  added_dirs: addedDirs
771344
771519
  },
771345
- version: "1.81.2",
771520
+ version: "1.81.4",
771346
771521
  output_style: {
771347
771522
  name: outputStyleName
771348
771523
  },
@@ -771477,7 +771652,7 @@ function StatusLineInner({
771477
771652
  const attention = customStatusError ?? taskAttention;
771478
771653
  const terminalSize = React133.useContext(TerminalSizeContext);
771479
771654
  const defaultStatusLineText = buildDefaultStatusBar({
771480
- version: "1.81.2",
771655
+ version: "1.81.4",
771481
771656
  providerLabel: providerRuntime.providerLabel,
771482
771657
  authMode: providerRuntime.authLabel,
771483
771658
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -783733,7 +783908,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
783733
783908
  } catch {}
783734
783909
  const data = {
783735
783910
  trigger: trigger2,
783736
- version: "1.81.2",
783911
+ version: "1.81.4",
783737
783912
  platform: process.platform,
783738
783913
  transcript,
783739
783914
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -796102,7 +796277,7 @@ function WelcomeV2() {
796102
796277
  dimColor: true,
796103
796278
  children: [
796104
796279
  "v",
796105
- "1.81.2"
796280
+ "1.81.4"
796106
796281
  ]
796107
796282
  }, undefined, true, undefined, this)
796108
796283
  ]
@@ -797362,7 +797537,7 @@ function completeOnboarding() {
797362
797537
  saveGlobalConfig((current) => ({
797363
797538
  ...current,
797364
797539
  hasCompletedOnboarding: true,
797365
- lastOnboardingVersion: "1.81.2"
797540
+ lastOnboardingVersion: "1.81.4"
797366
797541
  }));
797367
797542
  }
797368
797543
  function showDialog(root2, renderer) {
@@ -802508,7 +802683,7 @@ function appendToLog(path28, message) {
802508
802683
  cwd: getFsImplementation().cwd(),
802509
802684
  userType: process.env.USER_TYPE,
802510
802685
  sessionId: getSessionId(),
802511
- version: "1.81.2"
802686
+ version: "1.81.4"
802512
802687
  };
802513
802688
  getLogWriter(path28).write(messageWithTimestamp);
802514
802689
  }
@@ -806672,8 +806847,8 @@ async function getEnvLessBridgeConfig() {
806672
806847
  }
806673
806848
  async function checkEnvLessBridgeMinVersion() {
806674
806849
  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.
806850
+ if (cfg.min_version && lt("1.81.4", cfg.min_version)) {
806851
+ return `Your version of UR (${"1.81.4"}) is too old for Remote Control.
806677
806852
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
806678
806853
  }
806679
806854
  return null;
@@ -807147,7 +807322,7 @@ async function initBridgeCore(params) {
807147
807322
  const rawApi = createBridgeApiClient({
807148
807323
  baseUrl,
807149
807324
  getAccessToken,
807150
- runnerVersion: "1.81.2",
807325
+ runnerVersion: "1.81.4",
807151
807326
  onDebug: logForDebugging,
807152
807327
  onAuth401,
807153
807328
  getTrustedDeviceToken
@@ -816620,7 +816795,7 @@ function getAgUiCapabilities() {
816620
816795
  name: "UR-Nexus",
816621
816796
  type: "ur-nexus",
816622
816797
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
816623
- version: "1.81.2",
816798
+ version: "1.81.4",
816624
816799
  provider: "UR",
816625
816800
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
816626
816801
  },
@@ -817847,7 +818022,7 @@ function createMCPServer(cwd4, debug2, verbose) {
817847
818022
  };
817848
818023
  const server2 = new Server({
817849
818024
  name: "ur-nexus",
817850
- version: "1.81.2"
818025
+ version: "1.81.4"
817851
818026
  }, {
817852
818027
  capabilities: {
817853
818028
  tools: {}
@@ -819051,7 +819226,7 @@ function thrownResponse(error40) {
819051
819226
  }
819052
819227
  async function createUrMcp2026Runtime(options5) {
819053
819228
  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: {} });
819229
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.81.4" }, { capabilities: {} });
819055
819230
  const [clientTransport, serverTransport] = createLinkedTransportPair();
819056
819231
  try {
819057
819232
  await server2.connect(serverTransport);
@@ -819062,7 +819237,7 @@ async function createUrMcp2026Runtime(options5) {
819062
819237
  }
819063
819238
  const runtime2 = new Mcp2026Runtime({
819064
819239
  cwd: options5.cwd,
819065
- version: "1.81.2",
819240
+ version: "1.81.4",
819066
819241
  backend: {
819067
819242
  listTools: async () => {
819068
819243
  const listed = await client2.listTools();
@@ -821797,7 +821972,7 @@ async function update() {
821797
821972
  logEvent("tengu_update_check", {});
821798
821973
  const diagnostic2 = await getDoctorDiagnostic();
821799
821974
  const result = await checkUpgradeStatus({
821800
- currentVersion: "1.81.2",
821975
+ currentVersion: "1.81.4",
821801
821976
  packageName: UR_AGENT_PACKAGE_NAME,
821802
821977
  installationType: diagnostic2.installationType,
821803
821978
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -823125,7 +823300,7 @@ ${customInstructions}` : customInstructions;
823125
823300
  }
823126
823301
  }
823127
823302
  logForDiagnosticsNoPII("info", "started", {
823128
- version: "1.81.2",
823303
+ version: "1.81.4",
823129
823304
  is_native_binary: isInBundledMode()
823130
823305
  });
823131
823306
  registerCleanup(async () => {
@@ -823912,7 +824087,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
823912
824087
  pendingHookMessages
823913
824088
  }, renderAndRun);
823914
824089
  }
823915
- }).version("1.81.2 (UR-Nexus)", "-v, --version", "Output the version number");
824090
+ }).version("1.81.4 (UR-Nexus)", "-v, --version", "Output the version number");
823916
824091
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
823917
824092
  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
824093
  if (canUserConfigureAdvisor()) {
@@ -825039,7 +825214,7 @@ if (false) {}
825039
825214
  async function main2() {
825040
825215
  const args = process.argv.slice(2);
825041
825216
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
825042
- console.log(`${"1.81.2"} (UR-Nexus)`);
825217
+ console.log(`${"1.81.4"} (UR-Nexus)`);
825043
825218
  return;
825044
825219
  }
825045
825220
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {