ur-agent 1.44.0 → 1.44.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.44.2
4
+
5
+ - Fix Ollama streamed tool-call accumulation: Ollama streams each completed
6
+ tool call in its own chunk, but the merge logic overwrote call N-1 with
7
+ call N, collapsing multi-call turns (e.g. several `Write` calls scaffolding
8
+ a test suite) into just the last call. Calls now append; string argument
9
+ fragments concatenate; empty argument resends no longer clobber good
10
+ arguments; cumulative resends stay idempotent.
11
+ - Repair almost-JSON tool-call arguments instead of silently emptying them.
12
+ Local models routinely emit raw newlines inside JSON string values,
13
+ markdown fences, and trailing commas; strict parsing collapsed the whole
14
+ input to `{}`, which surfaced as `InputValidationError: required parameter
15
+ \`file_path\` is missing` and trapped the model in a retry loop. A lenient
16
+ parser (`parseToolInputJsonLenient`) now repairs these across the Kimi
17
+ marker parser, the bare-JSON text parser, the Ollama input parser, and
18
+ streamed tool-input normalization. Repairs are tracked via the
19
+ `tengu_tool_input_json_repaired` event; only genuinely hopeless input still
20
+ falls back to `{}`.
21
+ - Warn (once per model, in debug logs) when an Ollama model does not
22
+ advertise the `tools` capability, since tool definitions are then silently
23
+ dropped. In that mode the system prompt now includes a concise instruction
24
+ telling the model to emit single-line bare-JSON tool arguments — the exact
25
+ format the text parser recovers — instead of leaving it to guess.
26
+
27
+ ## 1.44.1
28
+
29
+ - Fix task board rendering: finished, failed, and skipped tasks now render as
30
+ checked instead of unchecked.
31
+ - Deduplicate consecutive task board emissions and keep final boards clean
32
+ (single header, single progress summary).
33
+
3
34
  ## 1.44.0
4
35
 
5
36
  - Add `verifier.askBeforeGates` setting (default `false`). When enabled, UR asks
package/dist/cli.js CHANGED
@@ -14537,6 +14537,71 @@ function addItemToJSONCArray(content, newItem) {
14537
14537
  return jsonStringify([newItem], null, 4);
14538
14538
  }
14539
14539
  }
14540
+ function escapeControlCharsInJsonStrings(text) {
14541
+ let out = "";
14542
+ let inString = false;
14543
+ let escaped = false;
14544
+ for (let i2 = 0;i2 < text.length; i2++) {
14545
+ const ch = text[i2];
14546
+ if (!inString) {
14547
+ if (ch === '"')
14548
+ inString = true;
14549
+ out += ch;
14550
+ continue;
14551
+ }
14552
+ if (escaped) {
14553
+ escaped = false;
14554
+ out += ch;
14555
+ continue;
14556
+ }
14557
+ if (ch === "\\") {
14558
+ escaped = true;
14559
+ out += ch;
14560
+ continue;
14561
+ }
14562
+ if (ch === '"') {
14563
+ inString = false;
14564
+ out += ch;
14565
+ continue;
14566
+ }
14567
+ const code = ch.charCodeAt(0);
14568
+ if (code < 32) {
14569
+ switch (ch) {
14570
+ case `
14571
+ `:
14572
+ out += "\\n";
14573
+ break;
14574
+ case "\r":
14575
+ out += "\\r";
14576
+ break;
14577
+ case "\t":
14578
+ out += "\\t";
14579
+ break;
14580
+ default:
14581
+ out += `\\u${code.toString(16).padStart(4, "0")}`;
14582
+ }
14583
+ continue;
14584
+ }
14585
+ out += ch;
14586
+ }
14587
+ return out;
14588
+ }
14589
+ function parseToolInputJsonLenient(raw) {
14590
+ if (!raw)
14591
+ return null;
14592
+ try {
14593
+ return JSON.parse(raw);
14594
+ } catch {}
14595
+ let s = raw.trim();
14596
+ s = s.replace(/^```(?:json)?\s*\n?/i, "").replace(/\n?```\s*$/, "");
14597
+ s = escapeControlCharsInJsonStrings(s);
14598
+ s = s.replace(/,\s*([}\]])/g, "$1");
14599
+ try {
14600
+ return JSON.parse(s);
14601
+ } catch {
14602
+ return null;
14603
+ }
14604
+ }
14540
14605
  var PARSE_CACHE_MAX_KEY_BYTES, parseJSONCached, safeParseJSON, bunJSONLParse, MAX_JSONL_READ_BYTES;
14541
14606
  var init_json = __esm(() => {
14542
14607
  init_main2();
@@ -51805,7 +51870,7 @@ function isProviderRuntimeSelectable(providerId, env4 = process.env) {
51805
51870
  return getProviderRuntimeBlockReason(providerId, env4) === null;
51806
51871
  }
51807
51872
  function listProviders(_options = {}) {
51808
- return PROVIDER_IDS.map((id) => PROVIDERS[id]).filter((provider) => provider.id !== "subscription");
51873
+ return PROVIDER_IDS.map((id) => PROVIDERS[id]).filter((provider) => provider.id !== "subscription" && !provider.disabled);
51809
51874
  }
51810
51875
  function hasSecretLikeValue(value) {
51811
51876
  const trimmed = value.trim();
@@ -53025,7 +53090,8 @@ var init_providerRegistry = __esm(() => {
53025
53090
  versionArgs: ["--version"],
53026
53091
  statusArgs: ["login", "status"],
53027
53092
  loginArgs: ["login"],
53028
- deviceLoginArgs: ["login", "--device-auth"]
53093
+ deviceLoginArgs: ["login", "--device-auth"],
53094
+ disabled: true
53029
53095
  },
53030
53096
  "claude-code-cli": {
53031
53097
  id: "claude-code-cli",
@@ -53045,7 +53111,8 @@ var init_providerRegistry = __esm(() => {
53045
53111
  commandCandidates: ["claude"],
53046
53112
  versionArgs: ["--version"],
53047
53113
  statusArgs: ["auth", "status"],
53048
- loginArgs: ["auth", "login"]
53114
+ loginArgs: ["auth", "login"],
53115
+ disabled: true
53049
53116
  },
53050
53117
  "gemini-cli": {
53051
53118
  id: "gemini-cli",
@@ -53065,7 +53132,8 @@ var init_providerRegistry = __esm(() => {
53065
53132
  commandCandidates: ["gemini"],
53066
53133
  versionArgs: ["--version"],
53067
53134
  loginArgs: [],
53068
- unsupportedPersonalAccountMessage: "Personal Google account login is not enabled by UR-Nexus. Use an official Gemini Code Assist Standard/Enterprise path if your Gemini CLI supports it."
53135
+ unsupportedPersonalAccountMessage: "Personal Google account login is not enabled by UR-Nexus. Use an official Gemini Code Assist Standard/Enterprise path if your Gemini CLI supports it.",
53136
+ disabled: true
53069
53137
  },
53070
53138
  "antigravity-cli": {
53071
53139
  id: "antigravity-cli",
@@ -53084,7 +53152,8 @@ var init_providerRegistry = __esm(() => {
53084
53152
  accessPathLabel: "subscription login via official Antigravity CLI",
53085
53153
  commandCandidates: ["agy", "antigravity", "google-antigravity", "ag"],
53086
53154
  versionArgs: ["--version"],
53087
- loginArgs: []
53155
+ loginArgs: [],
53156
+ disabled: true
53088
53157
  },
53089
53158
  "openai-api": {
53090
53159
  id: "openai-api",
@@ -53203,11 +53272,12 @@ var init_providerRegistry = __esm(() => {
53203
53272
  listModels: "openai-compatible-models",
53204
53273
  validateModel: "discovered-list",
53205
53274
  runtimeKind: "ur-native",
53206
- ...UR_NATIVE_CAPABILITIES,
53275
+ ...SUBSCRIPTION_CLI_CAPABILITIES,
53207
53276
  authMode: "local",
53208
53277
  legalPath: "local OpenAI-compatible server",
53209
53278
  accessPathLabel: "local OpenAI-compatible endpoint",
53210
53279
  defaultBaseUrl: "http://localhost:1234/v1",
53280
+ disabled: true,
53211
53281
  endpointKind: "openai-compatible"
53212
53282
  },
53213
53283
  "llama.cpp": {
@@ -54581,11 +54651,8 @@ function parseArgs(raw) {
54581
54651
  const v = JSON.parse(s);
54582
54652
  return v && typeof v === "object" ? v : {};
54583
54653
  } catch {
54584
- try {
54585
- return JSON.parse(s.replace(/,\s*([}\]])/g, "$1"));
54586
- } catch {
54587
- return {};
54588
- }
54654
+ const repaired = parseToolInputJsonLenient(s);
54655
+ return repaired && typeof repaired === "object" && !Array.isArray(repaired) ? repaired : {};
54589
54656
  }
54590
54657
  }
54591
54658
  function parseKimiToolCalls(text) {
@@ -54705,6 +54772,10 @@ function parseJsonObject(text) {
54705
54772
  const end = findJsonObjectEnd(trimmed, 0);
54706
54773
  if (end !== null && trimmed.slice(end).trim())
54707
54774
  return null;
54775
+ const repaired = parseToolInputJsonLenient(trimmed);
54776
+ if (repaired && typeof repaired === "object" && !Array.isArray(repaired)) {
54777
+ return repaired;
54778
+ }
54708
54779
  return parseLooseWriteObject(trimmed) ?? parseLooseEditObject(trimmed);
54709
54780
  }
54710
54781
  }
@@ -55230,6 +55301,7 @@ function parseClarifyingQuestions(text, options = {}) {
55230
55301
  }
55231
55302
  var SECTION_RE, CALL_RE, STRAY_RE, CLARIFY_MAX_LEN = 2000, OPTION_LEADIN_RE, OPTION_QUESTION_LEADIN_RE, OPTION_CATCHALL_RE, OPTION_TRAILING_QUALIFIER_RE, CLARIFY_HEADER_STOP_WORDS;
55232
55303
  var init_kimiToolCalls = __esm(() => {
55304
+ init_json();
55233
55305
  SECTION_RE = /<\|tool_calls_section_begin\|>([\s\S]*?)<\|tool_calls_section_end\|>/g;
55234
55306
  CALL_RE = /<\|tool_call_begin\|>([\s\S]*?)<\|tool_call_argument_begin\|>([\s\S]*?)<\|tool_call_end\|>/g;
55235
55307
  STRAY_RE = /<\|tool_calls?_section_(?:begin|end)\|>|<\|tool_call_(?:begin|end|argument_begin)\|>/g;
@@ -55273,6 +55345,7 @@ var init_kimiToolCalls = __esm(() => {
55273
55345
  // src/services/api/ollama.ts
55274
55346
  var exports_ollama = {};
55275
55347
  __export(exports_ollama, {
55348
+ mergeToolCalls: () => mergeToolCalls,
55276
55349
  getOllamaRequestTimeoutMs: () => getOllamaRequestTimeoutMs,
55277
55350
  getEffectiveOllamaBaseUrl: () => getEffectiveOllamaBaseUrl,
55278
55351
  createOllamaURHQClient: () => createOllamaURHQClient
@@ -55425,9 +55498,15 @@ function isTruthyEnv(value) {
55425
55498
  function toOllamaChatRequest(params, stream4, capabilities) {
55426
55499
  const supportsTools = modelCapabilityEnabled(capabilities, "tools");
55427
55500
  const tools = supportsTools ? toOllamaTools(params.tools) : [];
55501
+ const toolsRequested = (params.tools?.length ?? 0) > 0;
55502
+ const toolsDropped = toolsRequested && !supportsTools;
55503
+ if (toolsDropped && !warnedToolsUnsupportedModels.has(params.model)) {
55504
+ warnedToolsUnsupportedModels.add(params.model);
55505
+ logForDebugging(`Ollama model "${params.model}" does not advertise the 'tools' capability; ` + "tool definitions are not sent and tool calls fall back to text parsing. " + "Expect degraded agent behavior \u2014 prefer a tools-capable model (check with: ollama show <model>).", { level: "warn" });
55506
+ }
55428
55507
  const systemMessage = {
55429
55508
  role: "system",
55430
- content: systemToText(params.system)
55509
+ content: systemToText(params.system) + (toolsDropped ? TEXT_TOOL_CALL_HINT : "")
55431
55510
  };
55432
55511
  const think = getOllamaThink(params, capabilities);
55433
55512
  const request = {
@@ -56078,18 +56157,63 @@ function ollamaResponseToURHQMessage(response, params) {
56078
56157
  usage: usageFromOllama(response, text + thinking)
56079
56158
  };
56080
56159
  }
56160
+ function isPlainObject5(value) {
56161
+ return typeof value === "object" && value !== null && !Array.isArray(value);
56162
+ }
56163
+ function isEmptyToolArgs(value) {
56164
+ if (value === undefined || value === null)
56165
+ return true;
56166
+ if (typeof value === "string")
56167
+ return value.trim() === "";
56168
+ if (isPlainObject5(value))
56169
+ return Object.keys(value).length === 0;
56170
+ return false;
56171
+ }
56172
+ function toolArgsKey(value) {
56173
+ if (typeof value === "string")
56174
+ return value;
56175
+ try {
56176
+ return JSON.stringify(value ?? {});
56177
+ } catch {
56178
+ return String(value);
56179
+ }
56180
+ }
56081
56181
  function mergeToolCalls(target, incoming) {
56082
- for (let i2 = 0;i2 < incoming.length; i2++) {
56083
- const current = incoming[i2];
56084
- if (!current) {
56182
+ for (const current of incoming) {
56183
+ const fn = current?.function;
56184
+ if (!fn) {
56085
56185
  continue;
56086
56186
  }
56087
- target[i2] = {
56088
- function: {
56089
- name: current.function?.name ?? target[i2]?.function?.name,
56090
- arguments: current.function?.arguments ?? target[i2]?.function?.arguments ?? {}
56187
+ const name = fn.name;
56188
+ const args = fn.arguments;
56189
+ const last = target[target.length - 1];
56190
+ if (!name) {
56191
+ if (!last?.function) {
56192
+ continue;
56091
56193
  }
56092
- };
56194
+ const prev = last.function.arguments;
56195
+ if (typeof prev === "string" && typeof args === "string") {
56196
+ last.function.arguments = prev + args;
56197
+ } else if (isPlainObject5(prev) && isPlainObject5(args)) {
56198
+ last.function.arguments = { ...prev, ...args };
56199
+ } else if (isEmptyToolArgs(prev) && !isEmptyToolArgs(args)) {
56200
+ last.function.arguments = args;
56201
+ }
56202
+ continue;
56203
+ }
56204
+ if (last?.function?.name === name && typeof args === "string" && typeof last.function.arguments === "string") {
56205
+ last.function.arguments = last.function.arguments + args;
56206
+ continue;
56207
+ }
56208
+ const key = toolArgsKey(args);
56209
+ const duplicate = target.some((t) => t.function?.name === name && toolArgsKey(t.function?.arguments) === key);
56210
+ if (duplicate) {
56211
+ continue;
56212
+ }
56213
+ if (isEmptyToolArgs(args) && last?.function?.name === name && !isEmptyToolArgs(last.function.arguments)) {
56214
+ continue;
56215
+ }
56216
+ target.push({ function: { name, arguments: args ?? {} } });
56093
56217
  }
56094
56218
  }
56095
56219
  function getStopReason(response, toolCalls) {
@@ -56182,20 +56306,33 @@ function parseToolInput(input) {
56182
56306
  if (typeof input !== "string") {
56183
56307
  return input ?? {};
56184
56308
  }
56185
- try {
56186
- return JSON.parse(input);
56187
- } catch {
56188
- return {};
56309
+ const parsed = parseToolInputJsonLenient(input);
56310
+ if (parsed === null && input.trim().length > 0) {
56311
+ logForDebugging(`Ollama tool call arguments failed to parse even after repair: ${input.slice(0, 200)}`, { level: "warn" });
56189
56312
  }
56313
+ return parsed ?? {};
56190
56314
  }
56191
- var DEFAULT_OLLAMA_REQUEST_TIMEOUT_MS = 300000, REMOTE_OLLAMA_REQUEST_TIMEOUT_MS = 120000, OLLAMA_GATEWAY_TIMEOUT_MESSAGE = "Ollama gateway timed out while waiting for the model to respond. Check the selected Ollama endpoint or increase API_TIMEOUT_MS if the model needs more time.", ollamaModelCapabilitiesCache, ollamaBaseUrlOverride;
56315
+ var DEFAULT_OLLAMA_REQUEST_TIMEOUT_MS = 300000, REMOTE_OLLAMA_REQUEST_TIMEOUT_MS = 120000, OLLAMA_GATEWAY_TIMEOUT_MESSAGE = "Ollama gateway timed out while waiting for the model to respond. Check the selected Ollama endpoint or increase API_TIMEOUT_MS if the model needs more time.", ollamaModelCapabilitiesCache, ollamaBaseUrlOverride, warnedToolsUnsupportedModels, TEXT_TOOL_CALL_HINT;
56192
56316
  var init_ollama = __esm(() => {
56193
56317
  init_urhq_sdk();
56194
56318
  init_ollamaModels();
56195
56319
  init_ollamaConfig();
56196
56320
  init_ollamaTuning();
56197
56321
  init_kimiToolCalls();
56322
+ init_json();
56323
+ init_debug();
56198
56324
  ollamaModelCapabilitiesCache = new Map;
56325
+ warnedToolsUnsupportedModels = new Set;
56326
+ TEXT_TOOL_CALL_HINT = [
56327
+ "",
56328
+ "IMPORTANT: This runtime could not register native tool-calling for the current model.",
56329
+ "To invoke a tool, output ONLY a single-line JSON object with that tool\u2019s arguments, e.g.:",
56330
+ '{"file_path": "/abs/path/file.py", "content": "full file content"} (Write)',
56331
+ '{"file_path": "/abs/path/file.py", "old_string": "before", "new_string": "after"} (Edit)',
56332
+ '{"command": "ls -la"} (Bash)',
56333
+ "Escape newlines inside JSON strings as \\n. Do not wrap the JSON in prose or code fences."
56334
+ ].join(`
56335
+ `);
56199
56336
  });
56200
56337
 
56201
56338
  // src/services/api/providerHttp.ts
@@ -60377,7 +60514,7 @@ var require_extend = __commonJS((exports, module) => {
60377
60514
  }
60378
60515
  return toStr.call(arr) === "[object Array]";
60379
60516
  };
60380
- var isPlainObject5 = function isPlainObject6(obj) {
60517
+ var isPlainObject6 = function isPlainObject7(obj) {
60381
60518
  if (!obj || toStr.call(obj) !== "[object Object]") {
60382
60519
  return false;
60383
60520
  }
@@ -60433,12 +60570,12 @@ var require_extend = __commonJS((exports, module) => {
60433
60570
  src = getProperty(target, name);
60434
60571
  copy = getProperty(options, name);
60435
60572
  if (target !== copy) {
60436
- if (deep && copy && (isPlainObject5(copy) || (copyIsArray = isArray3(copy)))) {
60573
+ if (deep && copy && (isPlainObject6(copy) || (copyIsArray = isArray3(copy)))) {
60437
60574
  if (copyIsArray) {
60438
60575
  copyIsArray = false;
60439
60576
  clone3 = src && isArray3(src) ? src : [];
60440
60577
  } else {
60441
- clone3 = src && isPlainObject5(src) ? src : {};
60578
+ clone3 = src && isPlainObject6(src) ? src : {};
60442
60579
  }
60443
60580
  setProperty2(target, { name, newValue: extend3(deep, clone3, copy) });
60444
60581
  } else if (typeof copy !== "undefined") {
@@ -71253,7 +71390,7 @@ var init_auth = __esm(() => {
71253
71390
 
71254
71391
  // src/utils/userAgent.ts
71255
71392
  function getURCodeUserAgent() {
71256
- return `ur/${"1.44.0"}`;
71393
+ return `ur/${"1.44.2"}`;
71257
71394
  }
71258
71395
 
71259
71396
  // src/utils/workloadContext.ts
@@ -71275,7 +71412,7 @@ function getUserAgent() {
71275
71412
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
71276
71413
  const workload = getWorkload();
71277
71414
  const workloadSuffix = workload ? `, workload/${workload}` : "";
71278
- return `ur-cli/${"1.44.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71415
+ return `ur-cli/${"1.44.2"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
71279
71416
  }
71280
71417
  function getMCPUserAgent() {
71281
71418
  const parts = [];
@@ -71289,7 +71426,7 @@ function getMCPUserAgent() {
71289
71426
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
71290
71427
  }
71291
71428
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
71292
- return `ur/${"1.44.0"}${suffix}`;
71429
+ return `ur/${"1.44.2"}${suffix}`;
71293
71430
  }
71294
71431
  function getWebFetchUserAgent() {
71295
71432
  return `UR-User (${getURCodeUserAgent()})`;
@@ -71427,7 +71564,7 @@ var init_user = __esm(() => {
71427
71564
  deviceId,
71428
71565
  sessionId: getSessionId(),
71429
71566
  email: getEmail(),
71430
- appVersion: "1.44.0",
71567
+ appVersion: "1.44.2",
71431
71568
  platform: getHostPlatformForAnalytics(),
71432
71569
  organizationUuid,
71433
71570
  accountUuid,
@@ -77944,7 +78081,7 @@ var init_metadata = __esm(() => {
77944
78081
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
77945
78082
  WHITESPACE_REGEX = /\s+/;
77946
78083
  getVersionBase = memoize_default(() => {
77947
- const match = "1.44.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
78084
+ const match = "1.44.2".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
77948
78085
  return match ? match[0] : undefined;
77949
78086
  });
77950
78087
  buildEnvContext = memoize_default(async () => {
@@ -77984,7 +78121,7 @@ var init_metadata = __esm(() => {
77984
78121
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
77985
78122
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
77986
78123
  isURAiAuth: isURAISubscriber(),
77987
- version: "1.44.0",
78124
+ version: "1.44.2",
77988
78125
  versionBase: getVersionBase(),
77989
78126
  buildTime: "",
77990
78127
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -78654,7 +78791,7 @@ function initialize1PEventLogging() {
78654
78791
  const platform2 = getPlatform();
78655
78792
  const attributes = {
78656
78793
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
78657
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.0"
78794
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.44.2"
78658
78795
  };
78659
78796
  if (platform2 === "wsl") {
78660
78797
  const wslVersion = getWslVersion();
@@ -78681,7 +78818,7 @@ function initialize1PEventLogging() {
78681
78818
  })
78682
78819
  ]
78683
78820
  });
78684
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.0");
78821
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.44.2");
78685
78822
  }
78686
78823
  async function reinitialize1PEventLoggingIfConfigChanged() {
78687
78824
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -83983,7 +84120,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
83983
84120
  function formatA2AAgentCard(options = {}, pretty = true) {
83984
84121
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
83985
84122
  }
83986
- var urVersion = "1.44.0", coverage, priorityRoadmap;
84123
+ var urVersion = "1.44.2", coverage, priorityRoadmap;
83987
84124
  var init_trends = __esm(() => {
83988
84125
  coverage = [
83989
84126
  {
@@ -85978,7 +86115,7 @@ function getAttributionHeader(fingerprint) {
85978
86115
  if (!isAttributionHeaderEnabled()) {
85979
86116
  return "";
85980
86117
  }
85981
- const version2 = `${"1.44.0"}.${fingerprint}`;
86118
+ const version2 = `${"1.44.2"}.${fingerprint}`;
85982
86119
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
85983
86120
  const cch = "";
85984
86121
  const workload = getWorkload();
@@ -193948,7 +194085,7 @@ function getTelemetryAttributes() {
193948
194085
  attributes["session.id"] = sessionId;
193949
194086
  }
193950
194087
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
193951
- attributes["app.version"] = "1.44.0";
194088
+ attributes["app.version"] = "1.44.2";
193952
194089
  }
193953
194090
  const oauthAccount = getOauthAccountInfo();
193954
194091
  if (oauthAccount) {
@@ -215503,7 +215640,7 @@ class Protocol {
215503
215640
  };
215504
215641
  }
215505
215642
  }
215506
- function isPlainObject5(value) {
215643
+ function isPlainObject6(value) {
215507
215644
  return value !== null && typeof value === "object" && !Array.isArray(value);
215508
215645
  }
215509
215646
  function mergeCapabilities(base2, additional) {
@@ -215514,7 +215651,7 @@ function mergeCapabilities(base2, additional) {
215514
215651
  if (addValue === undefined)
215515
215652
  continue;
215516
215653
  const baseValue = result[k];
215517
- if (isPlainObject5(baseValue) && isPlainObject5(addValue)) {
215654
+ if (isPlainObject6(baseValue) && isPlainObject6(addValue)) {
215518
215655
  result[k] = { ...baseValue, ...addValue };
215519
215656
  } else {
215520
215657
  result[k] = addValue;
@@ -229336,7 +229473,7 @@ function getInstallationEnv() {
229336
229473
  return;
229337
229474
  }
229338
229475
  function getURCodeVersion() {
229339
- return "1.44.0";
229476
+ return "1.44.2";
229340
229477
  }
229341
229478
  async function getInstalledVSCodeExtensionVersion(command) {
229342
229479
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -232175,7 +232312,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
232175
232312
  const client2 = new Client({
232176
232313
  name: "ur",
232177
232314
  title: "UR",
232178
- version: "1.44.0",
232315
+ version: "1.44.2",
232179
232316
  description: "UR-Nexus autonomous engineering workflow engine",
232180
232317
  websiteUrl: PRODUCT_URL
232181
232318
  }, {
@@ -232529,7 +232666,7 @@ var init_client5 = __esm(() => {
232529
232666
  const client2 = new Client({
232530
232667
  name: "ur",
232531
232668
  title: "UR",
232532
- version: "1.44.0",
232669
+ version: "1.44.2",
232533
232670
  description: "UR-Nexus autonomous engineering workflow engine",
232534
232671
  websiteUrl: PRODUCT_URL
232535
232672
  }, {
@@ -242343,9 +242480,9 @@ async function assertMinVersion() {
242343
242480
  if (false) {}
242344
242481
  try {
242345
242482
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
242346
- if (versionConfig.minVersion && lt("1.44.0", versionConfig.minVersion)) {
242483
+ if (versionConfig.minVersion && lt("1.44.2", versionConfig.minVersion)) {
242347
242484
  console.error(`
242348
- It looks like your version of UR (${"1.44.0"}) needs an update.
242485
+ It looks like your version of UR (${"1.44.2"}) needs an update.
242349
242486
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
242350
242487
 
242351
242488
  To update, please run:
@@ -242561,7 +242698,7 @@ async function installGlobalPackage(specificVersion) {
242561
242698
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
242562
242699
  logEvent("tengu_auto_updater_lock_contention", {
242563
242700
  pid: process.pid,
242564
- currentVersion: "1.44.0"
242701
+ currentVersion: "1.44.2"
242565
242702
  });
242566
242703
  return "in_progress";
242567
242704
  }
@@ -242570,7 +242707,7 @@ async function installGlobalPackage(specificVersion) {
242570
242707
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
242571
242708
  logError2(new Error("Windows NPM detected in WSL environment"));
242572
242709
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
242573
- currentVersion: "1.44.0"
242710
+ currentVersion: "1.44.2"
242574
242711
  });
242575
242712
  console.error(`
242576
242713
  Error: Windows NPM detected in WSL
@@ -243105,7 +243242,7 @@ function detectLinuxGlobPatternWarnings() {
243105
243242
  }
243106
243243
  async function getDoctorDiagnostic() {
243107
243244
  const installationType = await getCurrentInstallationType();
243108
- const version2 = typeof MACRO !== "undefined" ? "1.44.0" : "unknown";
243245
+ const version2 = typeof MACRO !== "undefined" ? "1.44.2" : "unknown";
243109
243246
  const installationPath = await getInstallationPath();
243110
243247
  const invokedBinary = getInvokedBinary();
243111
243248
  const multipleInstallations = await detectMultipleInstallations();
@@ -244040,8 +244177,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244040
244177
  const maxVersion = await getMaxVersion();
244041
244178
  if (maxVersion && gt(version2, maxVersion)) {
244042
244179
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
244043
- if (gte("1.44.0", maxVersion)) {
244044
- logForDebugging(`Native installer: current version ${"1.44.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
244180
+ if (gte("1.44.2", maxVersion)) {
244181
+ logForDebugging(`Native installer: current version ${"1.44.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
244045
244182
  logEvent("tengu_native_update_skipped_max_version", {
244046
244183
  latency_ms: Date.now() - startTime,
244047
244184
  max_version: maxVersion,
@@ -244052,7 +244189,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
244052
244189
  version2 = maxVersion;
244053
244190
  }
244054
244191
  }
244055
- if (!forceReinstall && version2 === "1.44.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244192
+ if (!forceReinstall && version2 === "1.44.2" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
244056
244193
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
244057
244194
  logEvent("tengu_native_update_complete", {
244058
244195
  latency_ms: Date.now() - startTime,
@@ -246583,6 +246720,16 @@ function getTaskIcon(status) {
246583
246720
  icon: figures_default.squareSmall,
246584
246721
  color: undefined
246585
246722
  };
246723
+ case "failed":
246724
+ return {
246725
+ icon: figures_default.cross,
246726
+ color: "error"
246727
+ };
246728
+ case "skipped":
246729
+ return {
246730
+ icon: figures_default.warning,
246731
+ color: "warning"
246732
+ };
246586
246733
  }
246587
246734
  }
246588
246735
  function TaskItem(t0) {
@@ -331365,14 +331512,22 @@ function normalizeContentFromAPI(contentBlocks, tools, agentId) {
331365
331512
  }
331366
331513
  let normalizedInput;
331367
331514
  if (typeof contentBlock.input === "string") {
331368
- const parsed = safeParseJSON(contentBlock.input);
331515
+ let parsed = safeParseJSON(contentBlock.input, false);
331369
331516
  if (parsed === null && contentBlock.input.length > 0) {
331370
- logEvent("tengu_tool_input_json_parse_fail", {
331371
- toolName: sanitizeToolNameForAnalytics(contentBlock.name),
331372
- inputLen: contentBlock.input.length
331373
- });
331374
- if (process.env.USER_TYPE === "ant") {
331375
- logForDebugging(`tool input JSON parse fail: ${contentBlock.input.slice(0, 200)}`, { level: "warn" });
331517
+ parsed = parseToolInputJsonLenient(contentBlock.input);
331518
+ if (parsed !== null) {
331519
+ logEvent("tengu_tool_input_json_repaired", {
331520
+ toolName: sanitizeToolNameForAnalytics(contentBlock.name),
331521
+ inputLen: contentBlock.input.length
331522
+ });
331523
+ } else {
331524
+ logEvent("tengu_tool_input_json_parse_fail", {
331525
+ toolName: sanitizeToolNameForAnalytics(contentBlock.name),
331526
+ inputLen: contentBlock.input.length
331527
+ });
331528
+ if (process.env.USER_TYPE === "ant") {
331529
+ logForDebugging(`tool input JSON parse fail: ${contentBlock.input.slice(0, 200)}`, { level: "warn" });
331530
+ }
331376
331531
  }
331377
331532
  }
331378
331533
  normalizedInput = parsed ?? {};
@@ -341049,7 +341204,7 @@ function Feedback({
341049
341204
  platform: env2.platform,
341050
341205
  gitRepo: envInfo.isGit,
341051
341206
  terminal: env2.terminal,
341052
- version: "1.44.0",
341207
+ version: "1.44.2",
341053
341208
  transcript: normalizeMessagesForAPI(messages),
341054
341209
  errors: sanitizedErrors,
341055
341210
  lastApiRequest: getLastAPIRequest(),
@@ -341241,7 +341396,7 @@ function Feedback({
341241
341396
  ", ",
341242
341397
  env2.terminal,
341243
341398
  ", v",
341244
- "1.44.0"
341399
+ "1.44.2"
341245
341400
  ]
341246
341401
  }, undefined, true, undefined, this)
341247
341402
  ]
@@ -341347,7 +341502,7 @@ ${sanitizedDescription}
341347
341502
  ` + `**Environment Info**
341348
341503
  ` + `- Platform: ${env2.platform}
341349
341504
  ` + `- Terminal: ${env2.terminal}
341350
- ` + `- Version: ${"1.44.0"}
341505
+ ` + `- Version: ${"1.44.2"}
341351
341506
  ` + `- Feedback ID: ${feedbackId}
341352
341507
  ` + `
341353
341508
  **Errors**
@@ -344458,7 +344613,7 @@ function buildPrimarySection() {
344458
344613
  }, undefined, false, undefined, this);
344459
344614
  return [{
344460
344615
  label: "Version",
344461
- value: "1.44.0"
344616
+ value: "1.44.2"
344462
344617
  }, {
344463
344618
  label: "Session name",
344464
344619
  value: nameValue
@@ -347788,7 +347943,7 @@ function Config({
347788
347943
  }
347789
347944
  }, undefined, false, undefined, this)
347790
347945
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime177.jsxDEV(ChannelDowngradeDialog, {
347791
- currentVersion: "1.44.0",
347946
+ currentVersion: "1.44.2",
347792
347947
  onChoice: (choice) => {
347793
347948
  setShowSubmenu(null);
347794
347949
  setTabsHidden(false);
@@ -347800,7 +347955,7 @@ function Config({
347800
347955
  autoUpdatesChannel: "stable"
347801
347956
  };
347802
347957
  if (choice === "stay") {
347803
- newSettings.minimumVersion = "1.44.0";
347958
+ newSettings.minimumVersion = "1.44.2";
347804
347959
  }
347805
347960
  updateSettingsForSource("userSettings", newSettings);
347806
347961
  setSettingsData((prev_27) => ({
@@ -355870,7 +356025,7 @@ function HelpV2(t0) {
355870
356025
  let t6;
355871
356026
  if ($3[31] !== tabs) {
355872
356027
  t6 = /* @__PURE__ */ jsx_dev_runtime204.jsxDEV(Tabs, {
355873
- title: `UR v${"1.44.0"}`,
356028
+ title: `UR v${"1.44.2"}`,
355874
356029
  color: "professionalBlue",
355875
356030
  defaultTab: "general",
355876
356031
  children: tabs
@@ -356616,7 +356771,7 @@ function buildToolUseContext(tools, readFileStateCache) {
356616
356771
  async function handleInitialize(options2) {
356617
356772
  return {
356618
356773
  name: "UR",
356619
- version: "1.44.0",
356774
+ version: "1.44.2",
356620
356775
  protocolVersion: "0.1.0",
356621
356776
  workspaceRoot: options2.cwd,
356622
356777
  capabilities: {
@@ -376758,7 +376913,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
376758
376913
  return [];
376759
376914
  }
376760
376915
  }
376761
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.0") {
376916
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.2") {
376762
376917
  if (process.env.USER_TYPE === "ant") {
376763
376918
  const changelog = "";
376764
376919
  if (changelog) {
@@ -376785,7 +376940,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.44.0")
376785
376940
  releaseNotes
376786
376941
  };
376787
376942
  }
376788
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.0") {
376943
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.44.2") {
376789
376944
  if (process.env.USER_TYPE === "ant") {
376790
376945
  const changelog = "";
376791
376946
  if (changelog) {
@@ -377964,7 +378119,7 @@ function getRecentActivitySync() {
377964
378119
  return cachedActivity;
377965
378120
  }
377966
378121
  function getLogoDisplayData() {
377967
- const version2 = process.env.DEMO_VERSION ?? "1.44.0";
378122
+ const version2 = process.env.DEMO_VERSION ?? "1.44.2";
377968
378123
  const serverUrl = getDirectConnectServerUrl();
377969
378124
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
377970
378125
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -378753,7 +378908,7 @@ function LogoV2() {
378753
378908
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
378754
378909
  t2 = () => {
378755
378910
  const currentConfig2 = getGlobalConfig();
378756
- if (currentConfig2.lastReleaseNotesSeen === "1.44.0") {
378911
+ if (currentConfig2.lastReleaseNotesSeen === "1.44.2") {
378757
378912
  return;
378758
378913
  }
378759
378914
  saveGlobalConfig(_temp326);
@@ -379438,12 +379593,12 @@ function LogoV2() {
379438
379593
  return t41;
379439
379594
  }
379440
379595
  function _temp326(current) {
379441
- if (current.lastReleaseNotesSeen === "1.44.0") {
379596
+ if (current.lastReleaseNotesSeen === "1.44.2") {
379442
379597
  return current;
379443
379598
  }
379444
379599
  return {
379445
379600
  ...current,
379446
- lastReleaseNotesSeen: "1.44.0"
379601
+ lastReleaseNotesSeen: "1.44.2"
379447
379602
  };
379448
379603
  }
379449
379604
  function _temp243(s_0) {
@@ -397519,7 +397674,11 @@ function publicStatus(task) {
397519
397674
  if (task.status === "paused-review")
397520
397675
  return "paused for review";
397521
397676
  if (task.status === "skipped")
397522
- return "skipped by policy";
397677
+ return "skipped";
397678
+ if (task.status === "failed")
397679
+ return "failed";
397680
+ if (task.status === "finished")
397681
+ return "completed";
397523
397682
  return task.status;
397524
397683
  }
397525
397684
  function isWaiting(task) {
@@ -397540,6 +397699,9 @@ function progressSummary(tasks2) {
397540
397699
  const skipped = tasks2.filter((task) => task.status === "skipped").length;
397541
397700
  return `Progress: ${finished7}/${tasks2.length} finished, ${running} running, ${queued} queued, ${waiting} waiting, ${failed} failed, ${skipped} skipped`;
397542
397701
  }
397702
+ function isFinished(task) {
397703
+ return task.status === "finished" || task.status === "failed" || task.status === "skipped";
397704
+ }
397543
397705
  function renderTaskBoard(planOrTasks, options2 = {}) {
397544
397706
  const tasks2 = Array.isArray(planOrTasks) ? planOrTasks : planOrTasks.tasks;
397545
397707
  const activeAgents = options2.activeAgents ?? tasks2.filter((task) => task.status === "running").length;
@@ -397548,7 +397710,8 @@ function renderTaskBoard(planOrTasks, options2 = {}) {
397548
397710
  const rows = orderedTasks.map((task) => {
397549
397711
  const status2 = pad(publicStatus(task), 18);
397550
397712
  const agent = pad(String(task.assignedAgent), 8);
397551
- return `${task.order}. ${status2} | ${agent} | ${task.title}`;
397713
+ const check3 = isFinished(task) ? "[\u2713]" : "[ ]";
397714
+ return `${check3} ${task.order}. ${status2} | ${agent} | ${task.title}`;
397552
397715
  });
397553
397716
  return [
397554
397717
  "[UR-Nexus Task Board]",
@@ -397823,13 +397986,18 @@ function emitBoard(options2, tasks2, maxAgents2) {
397823
397986
  ...DEFAULT_PROMPT_PLANNING_CONFIG,
397824
397987
  ...resolvePromptPlanningConfig(options2.config)
397825
397988
  };
397826
- if (config3.showTaskBoard) {
397827
- options2.onEvent?.({
397828
- type: "board",
397829
- board: renderTaskBoard(tasks2, { maxAgents: maxAgents2 }),
397830
- tasks: tasks2
397831
- });
397832
- }
397989
+ if (!config3.showTaskBoard)
397990
+ return;
397991
+ const board = renderTaskBoard(tasks2, { maxAgents: maxAgents2 });
397992
+ const lastBoard = lastBoardByRun.get(options2);
397993
+ if (lastBoard === board)
397994
+ return;
397995
+ lastBoardByRun.set(options2, board);
397996
+ options2.onEvent?.({
397997
+ type: "board",
397998
+ board,
397999
+ tasks: tasks2
398000
+ });
397833
398001
  }
397834
398002
  function emitStatus(options2, task, tasks2, lastStatuses, maxAgents2) {
397835
398003
  if (lastStatuses.get(task.id) === task.status)
@@ -398044,10 +398212,12 @@ async function runPromptPlan(plan, options2) {
398044
398212
  await Promise.race(running);
398045
398213
  }
398046
398214
  }
398215
+ var lastBoardByRun;
398047
398216
  var init_executor = __esm(() => {
398048
398217
  init_config9();
398049
398218
  init_evidence3();
398050
398219
  init_validation4();
398220
+ lastBoardByRun = new WeakMap;
398051
398221
  });
398052
398222
 
398053
398223
  // src/services/promptPlanning/planner.ts
@@ -596858,7 +597028,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
596858
597028
  smapsRollup,
596859
597029
  platform: process.platform,
596860
597030
  nodeVersion: process.version,
596861
- ccVersion: "1.44.0"
597031
+ ccVersion: "1.44.2"
596862
597032
  };
596863
597033
  }
596864
597034
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -597444,7 +597614,7 @@ var init_bridge_kick = __esm(() => {
597444
597614
  var call137 = async () => {
597445
597615
  return {
597446
597616
  type: "text",
597447
- value: "1.44.0"
597617
+ value: "1.44.2"
597448
597618
  };
597449
597619
  }, version2, version_default;
597450
597620
  var init_version = __esm(() => {
@@ -607537,7 +607707,7 @@ function generateHtmlReport(data, insights) {
607537
607707
  </html>`;
607538
607708
  }
607539
607709
  function buildExportData(data, insights, facets, remoteStats) {
607540
- const version3 = typeof MACRO !== "undefined" ? "1.44.0" : "unknown";
607710
+ const version3 = typeof MACRO !== "undefined" ? "1.44.2" : "unknown";
607541
607711
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
607542
607712
  const facets_summary = {
607543
607713
  total: facets.size,
@@ -611817,7 +611987,7 @@ var init_sessionStorage = __esm(() => {
611817
611987
  init_settings2();
611818
611988
  init_slowOperations();
611819
611989
  init_uuid();
611820
- VERSION5 = typeof MACRO !== "undefined" ? "1.44.0" : "unknown";
611990
+ VERSION5 = typeof MACRO !== "undefined" ? "1.44.2" : "unknown";
611821
611991
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
611822
611992
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
611823
611993
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -613022,7 +613192,7 @@ var init_filesystem = __esm(() => {
613022
613192
  });
613023
613193
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
613024
613194
  const nonce = randomBytes18(16).toString("hex");
613025
- return join202(getURTempDir(), "bundled-skills", "1.44.0", nonce);
613195
+ return join202(getURTempDir(), "bundled-skills", "1.44.2", nonce);
613026
613196
  });
613027
613197
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
613028
613198
  });
@@ -619313,7 +619483,7 @@ function computeFingerprint(messageText2, version3) {
619313
619483
  }
619314
619484
  function computeFingerprintFromMessages(messages) {
619315
619485
  const firstMessageText = extractFirstMessageText(messages);
619316
- return computeFingerprint(firstMessageText, "1.44.0");
619486
+ return computeFingerprint(firstMessageText, "1.44.2");
619317
619487
  }
619318
619488
  var FINGERPRINT_SALT = "59cf53e54c78";
619319
619489
  var init_fingerprint = () => {};
@@ -621187,7 +621357,7 @@ async function sideQuery(opts) {
621187
621357
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
621188
621358
  }
621189
621359
  const messageText2 = extractFirstUserMessageText(messages);
621190
- const fingerprint2 = computeFingerprint(messageText2, "1.44.0");
621360
+ const fingerprint2 = computeFingerprint(messageText2, "1.44.2");
621191
621361
  const attributionHeader = getAttributionHeader(fingerprint2);
621192
621362
  const systemBlocks = [
621193
621363
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -625924,7 +626094,7 @@ function buildSystemInitMessage(inputs) {
625924
626094
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
625925
626095
  apiKeySource: getURHQApiKeyWithSource().source,
625926
626096
  betas: getSdkBetas(),
625927
- ur_version: "1.44.0",
626097
+ ur_version: "1.44.2",
625928
626098
  output_style: outputStyle2,
625929
626099
  agents: inputs.agents.map((agent) => agent.agentType),
625930
626100
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -640552,7 +640722,7 @@ var init_useVoiceEnabled = __esm(() => {
640552
640722
  function getSemverPart(version3) {
640553
640723
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
640554
640724
  }
640555
- function useUpdateNotification(updatedVersion, initialVersion = "1.44.0") {
640725
+ function useUpdateNotification(updatedVersion, initialVersion = "1.44.2") {
640556
640726
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react226.useState(() => getSemverPart(initialVersion));
640557
640727
  if (!updatedVersion) {
640558
640728
  return null;
@@ -640601,7 +640771,7 @@ function AutoUpdater({
640601
640771
  return;
640602
640772
  }
640603
640773
  if (false) {}
640604
- const currentVersion = "1.44.0";
640774
+ const currentVersion = "1.44.2";
640605
640775
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
640606
640776
  let latestVersion = await getLatestVersion(channel);
640607
640777
  const isDisabled = isAutoUpdaterDisabled();
@@ -640830,12 +641000,12 @@ function NativeAutoUpdater({
640830
641000
  logEvent("tengu_native_auto_updater_start", {});
640831
641001
  try {
640832
641002
  const maxVersion = await getMaxVersion();
640833
- if (maxVersion && gt("1.44.0", maxVersion)) {
641003
+ if (maxVersion && gt("1.44.2", maxVersion)) {
640834
641004
  const msg = await getMaxVersionMessage();
640835
641005
  setMaxVersionIssue(msg ?? "affects your version");
640836
641006
  }
640837
641007
  const result = await installLatest(channel);
640838
- const currentVersion = "1.44.0";
641008
+ const currentVersion = "1.44.2";
640839
641009
  const latencyMs = Date.now() - startTime;
640840
641010
  if (result.lockFailed) {
640841
641011
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -640972,17 +641142,17 @@ function PackageManagerAutoUpdater(t0) {
640972
641142
  const maxVersion = await getMaxVersion();
640973
641143
  if (maxVersion && latest && gt(latest, maxVersion)) {
640974
641144
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
640975
- if (gte("1.44.0", maxVersion)) {
640976
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
641145
+ if (gte("1.44.2", maxVersion)) {
641146
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.44.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
640977
641147
  setUpdateAvailable(false);
640978
641148
  return;
640979
641149
  }
640980
641150
  latest = maxVersion;
640981
641151
  }
640982
- const hasUpdate = latest && !gte("1.44.0", latest) && !shouldSkipVersion(latest);
641152
+ const hasUpdate = latest && !gte("1.44.2", latest) && !shouldSkipVersion(latest);
640983
641153
  setUpdateAvailable(!!hasUpdate);
640984
641154
  if (hasUpdate) {
640985
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.0"} -> ${latest}`);
641155
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.44.2"} -> ${latest}`);
640986
641156
  }
640987
641157
  };
640988
641158
  $3[0] = t1;
@@ -641016,7 +641186,7 @@ function PackageManagerAutoUpdater(t0) {
641016
641186
  wrap: "truncate",
641017
641187
  children: [
641018
641188
  "currentVersion: ",
641019
- "1.44.0"
641189
+ "1.44.2"
641020
641190
  ]
641021
641191
  }, undefined, true, undefined, this);
641022
641192
  $3[3] = verbose;
@@ -653468,7 +653638,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
653468
653638
  project_dir: getOriginalCwd(),
653469
653639
  added_dirs: addedDirs
653470
653640
  },
653471
- version: "1.44.0",
653641
+ version: "1.44.2",
653472
653642
  output_style: {
653473
653643
  name: outputStyleName
653474
653644
  },
@@ -653551,7 +653721,7 @@ function StatusLineInner({
653551
653721
  const taskValues = Object.values(tasks2);
653552
653722
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
653553
653723
  const defaultStatusLineText = buildDefaultStatusBar({
653554
- version: "1.44.0",
653724
+ version: "1.44.2",
653555
653725
  providerLabel: providerRuntime.providerLabel,
653556
653726
  authMode: providerRuntime.authLabel,
653557
653727
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -665039,7 +665209,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
665039
665209
  } catch {}
665040
665210
  const data = {
665041
665211
  trigger: trigger2,
665042
- version: "1.44.0",
665212
+ version: "1.44.2",
665043
665213
  platform: process.platform,
665044
665214
  transcript,
665045
665215
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -676924,7 +677094,7 @@ function WelcomeV2() {
676924
677094
  dimColor: true,
676925
677095
  children: [
676926
677096
  "v",
676927
- "1.44.0"
677097
+ "1.44.2"
676928
677098
  ]
676929
677099
  }, undefined, true, undefined, this)
676930
677100
  ]
@@ -678184,7 +678354,7 @@ function completeOnboarding() {
678184
678354
  saveGlobalConfig((current) => ({
678185
678355
  ...current,
678186
678356
  hasCompletedOnboarding: true,
678187
- lastOnboardingVersion: "1.44.0"
678357
+ lastOnboardingVersion: "1.44.2"
678188
678358
  }));
678189
678359
  }
678190
678360
  function showDialog(root2, renderer) {
@@ -683221,7 +683391,7 @@ function appendToLog(path24, message) {
683221
683391
  cwd: getFsImplementation().cwd(),
683222
683392
  userType: process.env.USER_TYPE,
683223
683393
  sessionId: getSessionId(),
683224
- version: "1.44.0"
683394
+ version: "1.44.2"
683225
683395
  };
683226
683396
  getLogWriter(path24).write(messageWithTimestamp);
683227
683397
  }
@@ -687315,8 +687485,8 @@ async function getEnvLessBridgeConfig() {
687315
687485
  }
687316
687486
  async function checkEnvLessBridgeMinVersion() {
687317
687487
  const cfg = await getEnvLessBridgeConfig();
687318
- if (cfg.min_version && lt("1.44.0", cfg.min_version)) {
687319
- return `Your version of UR (${"1.44.0"}) is too old for Remote Control.
687488
+ if (cfg.min_version && lt("1.44.2", cfg.min_version)) {
687489
+ return `Your version of UR (${"1.44.2"}) is too old for Remote Control.
687320
687490
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
687321
687491
  }
687322
687492
  return null;
@@ -687790,7 +687960,7 @@ async function initBridgeCore(params) {
687790
687960
  const rawApi = createBridgeApiClient({
687791
687961
  baseUrl,
687792
687962
  getAccessToken,
687793
- runnerVersion: "1.44.0",
687963
+ runnerVersion: "1.44.2",
687794
687964
  onDebug: logForDebugging,
687795
687965
  onAuth401,
687796
687966
  getTrustedDeviceToken
@@ -693472,7 +693642,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
693472
693642
  setCwd(cwd3);
693473
693643
  const server2 = new Server({
693474
693644
  name: "ur/tengu",
693475
- version: "1.44.0"
693645
+ version: "1.44.2"
693476
693646
  }, {
693477
693647
  capabilities: {
693478
693648
  tools: {}
@@ -695514,7 +695684,7 @@ async function update() {
695514
695684
  logEvent("tengu_update_check", {});
695515
695685
  const diagnostic = await getDoctorDiagnostic();
695516
695686
  const result = await checkUpgradeStatus({
695517
- currentVersion: "1.44.0",
695687
+ currentVersion: "1.44.2",
695518
695688
  packageName: UR_AGENT_PACKAGE_NAME,
695519
695689
  installationType: diagnostic.installationType,
695520
695690
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -696760,7 +696930,7 @@ ${customInstructions}` : customInstructions;
696760
696930
  }
696761
696931
  }
696762
696932
  logForDiagnosticsNoPII("info", "started", {
696763
- version: "1.44.0",
696933
+ version: "1.44.2",
696764
696934
  is_native_binary: isInBundledMode()
696765
696935
  });
696766
696936
  registerCleanup(async () => {
@@ -697546,7 +697716,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
697546
697716
  pendingHookMessages
697547
697717
  }, renderAndRun);
697548
697718
  }
697549
- }).version("1.44.0 (UR-Nexus)", "-v, --version", "Output the version number");
697719
+ }).version("1.44.2 (UR-Nexus)", "-v, --version", "Output the version number");
697550
697720
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
697551
697721
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
697552
697722
  if (canUserConfigureAdvisor()) {
@@ -698461,7 +698631,7 @@ if (false) {}
698461
698631
  async function main2() {
698462
698632
  const args = process.argv.slice(2);
698463
698633
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
698464
- console.log(`${"1.44.0"} (UR-Nexus)`);
698634
+ console.log(`${"1.44.2"} (UR-Nexus)`);
698465
698635
  return;
698466
698636
  }
698467
698637
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -44,7 +44,7 @@
44
44
  <main id="content" class="content">
45
45
  <header class="topbar">
46
46
  <div>
47
- <p class="eyebrow">Version 1.44.0</p>
47
+ <p class="eyebrow">Version 1.44.2</p>
48
48
  <h1>UR-Nexus Documentation</h1>
49
49
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
50
50
  </div>
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.44.0",
5
+ "version": "1.44.2",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.44.0",
4
- "description": "UR-Nexus \u2014 autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
3
+ "version": "1.44.2",
4
+ "description": "UR-Nexus autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",
7
7
  "engines": {