ur-agent 1.61.2 → 1.63.0

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,35 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.63.0
4
+
5
+ - Added size-triggered pruning of superseded tool results
6
+ (`context.pruneToolResults`). UR already had the clearing machinery, but
7
+ nothing external could reach it: cached microcompact is internal-only and
8
+ returns unchanged messages in shipped builds, and the time-based trigger
9
+ needs an hour of idling *and* a GrowthBook flag that a local install never
10
+ receives. An active session therefore pruned nothing and ran until autocompact
11
+ replaced the whole history with a summary.
12
+ - Pruning fires only when it would free at least 20k tokens, because clearing
13
+ invalidates the cached prefix and a small cleanup costs more in cache misses
14
+ than it reclaims. Short sessions are untouched; a 40-read session frees ~64k.
15
+ - The most recent 8 compactable results are a protected zone and are never
16
+ cleared, so the model keeps the working set it is reasoning about.
17
+ `keepRecent` is floored at 1: clearing everything would leave no working
18
+ context, and `slice(-0)` would paradoxically keep all of it.
19
+ - Configured through settings rather than GrowthBook, so it can actually be
20
+ turned off or tuned.
21
+
22
+ ## 1.62.0
23
+
24
+ - `ur agent-inspect --costs` now labels each row with what the agent was
25
+ actually doing. A real 62-agent fan-out reported opaque hex ids, so you could
26
+ see that one agent burned 810k input tokens — 14% of the session — without
27
+ being able to tell which of your subagents it was. The description already
28
+ existed in the `agent-{id}.meta.json` sidecar and was simply never read.
29
+ - Agents with missing or malformed metadata still appear, keyed by id.
30
+ Historical sessions predate the description field, and dropping those rows
31
+ would lose spend in order to avoid losing a label.
32
+
3
33
  ## 1.61.2
4
34
 
5
35
  - Fixed `ur agent-inspect --costs` reporting nothing, always. It resolved the
package/dist/cli.js CHANGED
@@ -75207,7 +75207,7 @@ var init_auth = __esm(() => {
75207
75207
 
75208
75208
  // src/utils/userAgent.ts
75209
75209
  function getURCodeUserAgent() {
75210
- return `ur/${"1.61.2"}`;
75210
+ return `ur/${"1.63.0"}`;
75211
75211
  }
75212
75212
 
75213
75213
  // src/utils/workloadContext.ts
@@ -75229,7 +75229,7 @@ function getUserAgent() {
75229
75229
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
75230
75230
  const workload = getWorkload();
75231
75231
  const workloadSuffix = workload ? `, workload/${workload}` : "";
75232
- return `ur-cli/${"1.61.2"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75232
+ return `ur-cli/${"1.63.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75233
75233
  }
75234
75234
  function getMCPUserAgent() {
75235
75235
  const parts = [];
@@ -75243,7 +75243,7 @@ function getMCPUserAgent() {
75243
75243
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
75244
75244
  }
75245
75245
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
75246
- return `ur/${"1.61.2"}${suffix}`;
75246
+ return `ur/${"1.63.0"}${suffix}`;
75247
75247
  }
75248
75248
  function getWebFetchUserAgent() {
75249
75249
  return `UR-User (${getURCodeUserAgent()})`;
@@ -75381,7 +75381,7 @@ var init_user = __esm(() => {
75381
75381
  deviceId,
75382
75382
  sessionId: getSessionId(),
75383
75383
  email: getEmail(),
75384
- appVersion: "1.61.2",
75384
+ appVersion: "1.63.0",
75385
75385
  platform: getHostPlatformForAnalytics(),
75386
75386
  organizationUuid,
75387
75387
  accountUuid,
@@ -83581,7 +83581,7 @@ var init_metadata = __esm(() => {
83581
83581
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
83582
83582
  WHITESPACE_REGEX = /\s+/;
83583
83583
  getVersionBase = memoize_default(() => {
83584
- const match = "1.61.2".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83584
+ const match = "1.63.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83585
83585
  return match ? match[0] : undefined;
83586
83586
  });
83587
83587
  buildEnvContext = memoize_default(async () => {
@@ -83621,7 +83621,7 @@ var init_metadata = __esm(() => {
83621
83621
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
83622
83622
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
83623
83623
  isURAiAuth: isURAISubscriber(),
83624
- version: "1.61.2",
83624
+ version: "1.63.0",
83625
83625
  versionBase: getVersionBase(),
83626
83626
  buildTime: "",
83627
83627
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -84291,7 +84291,7 @@ function initialize1PEventLogging() {
84291
84291
  const platform2 = getPlatform();
84292
84292
  const attributes = {
84293
84293
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
84294
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.61.2"
84294
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.63.0"
84295
84295
  };
84296
84296
  if (platform2 === "wsl") {
84297
84297
  const wslVersion = getWslVersion();
@@ -84319,7 +84319,7 @@ function initialize1PEventLogging() {
84319
84319
  })
84320
84320
  ]
84321
84321
  });
84322
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.61.2");
84322
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.63.0");
84323
84323
  }
84324
84324
  async function reinitialize1PEventLoggingIfConfigChanged() {
84325
84325
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -86838,6 +86838,13 @@ var init_types2 = __esm(() => {
86838
86838
  name: exports_external.string().optional().describe("Synthesiser voice name"),
86839
86839
  rate: exports_external.number().optional().describe("Words per minute")
86840
86840
  }).optional().describe("Spoken output settings"),
86841
+ context: exports_external.object({
86842
+ pruneToolResults: exports_external.object({
86843
+ enabled: exports_external.boolean().optional(),
86844
+ minTokensFreed: exports_external.number().optional(),
86845
+ keepRecent: exports_external.number().optional()
86846
+ }).optional().describe("Size-triggered pruning of superseded tool results (old file reads, greps, shell output). " + "Prunes only when it would free at least minTokensFreed tokens, keeping the most recent " + "keepRecent results untouched. Less destructive than letting context fill until autocompact " + "replaces the whole history with a summary.")
86847
+ }).optional().describe("Context management behaviour."),
86841
86848
  memory: exports_external.object({
86842
86849
  suggest: exports_external.boolean().optional().describe("Propose durable facts after each turn"),
86843
86850
  suggestMinConfidence: exports_external.number().optional().describe("Confidence floor for proposals (0-1, default 0.75)")
@@ -94158,7 +94165,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
94158
94165
  function formatA2AAgentCard(options = {}, pretty = true) {
94159
94166
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
94160
94167
  }
94161
- var urVersion = "1.61.2", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94168
+ var urVersion = "1.63.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94162
94169
  var init_trends = __esm(() => {
94163
94170
  init_a2aCardSignature();
94164
94171
  coverage = [
@@ -96961,7 +96968,7 @@ function getAttributionHeader(fingerprint) {
96961
96968
  if (!isAttributionHeaderEnabled()) {
96962
96969
  return "";
96963
96970
  }
96964
- const version2 = `${"1.61.2"}.${fingerprint}`;
96971
+ const version2 = `${"1.63.0"}.${fingerprint}`;
96965
96972
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
96966
96973
  const cch = "";
96967
96974
  const workload = getWorkload();
@@ -145458,6 +145465,27 @@ var init_prompt7 = __esm(() => {
145458
145465
  init_constants2();
145459
145466
  });
145460
145467
 
145468
+ // src/services/compact/toolResultPruningConfig.ts
145469
+ function getToolResultPruningConfig() {
145470
+ const configured = getInitialSettings()?.context?.pruneToolResults;
145471
+ if (!configured)
145472
+ return TOOL_RESULT_PRUNING_DEFAULTS;
145473
+ return {
145474
+ enabled: typeof configured.enabled === "boolean" ? configured.enabled : TOOL_RESULT_PRUNING_DEFAULTS.enabled,
145475
+ minTokensFreed: typeof configured.minTokensFreed === "number" && Number.isFinite(configured.minTokensFreed) && configured.minTokensFreed >= 0 ? configured.minTokensFreed : TOOL_RESULT_PRUNING_DEFAULTS.minTokensFreed,
145476
+ keepRecent: typeof configured.keepRecent === "number" && Number.isInteger(configured.keepRecent) && configured.keepRecent >= 1 ? configured.keepRecent : TOOL_RESULT_PRUNING_DEFAULTS.keepRecent
145477
+ };
145478
+ }
145479
+ var TOOL_RESULT_PRUNING_DEFAULTS;
145480
+ var init_toolResultPruningConfig = __esm(() => {
145481
+ init_settings2();
145482
+ TOOL_RESULT_PRUNING_DEFAULTS = {
145483
+ enabled: true,
145484
+ minTokensFreed: 20000,
145485
+ keepRecent: 8
145486
+ };
145487
+ });
145488
+
145461
145489
  // src/tools/PowerShellTool/toolName.ts
145462
145490
  var POWERSHELL_TOOL_NAME = "PowerShell";
145463
145491
 
@@ -146338,6 +146366,10 @@ async function microcompactMessages(messages, toolUseContext, querySource) {
146338
146366
  if (timeBasedResult) {
146339
146367
  return timeBasedResult;
146340
146368
  }
146369
+ const sizeBasedResult = maybeSizeBasedMicrocompact(messages, querySource);
146370
+ if (sizeBasedResult) {
146371
+ return sizeBasedResult;
146372
+ }
146341
146373
  return { messages };
146342
146374
  }
146343
146375
  function evaluateTimeBasedTrigger(messages, querySource) {
@@ -146355,6 +146387,56 @@ function evaluateTimeBasedTrigger(messages, querySource) {
146355
146387
  }
146356
146388
  return { gapMinutes, config: config2 };
146357
146389
  }
146390
+ function clearOldToolResults(messages, keepRecent) {
146391
+ const compactableIds = collectCompactableToolIds(messages);
146392
+ const keep = Math.max(1, keepRecent);
146393
+ const keepSet = new Set(compactableIds.slice(-keep));
146394
+ const clearSet = new Set(compactableIds.filter((id) => !keepSet.has(id)));
146395
+ if (clearSet.size === 0)
146396
+ return null;
146397
+ let tokensSaved = 0;
146398
+ const result = messages.map((message) => {
146399
+ if (message.type !== "user" || !Array.isArray(message.message.content)) {
146400
+ return message;
146401
+ }
146402
+ let touched = false;
146403
+ const newContent = message.message.content.map((block) => {
146404
+ if (block.type === "tool_result" && clearSet.has(block.tool_use_id) && block.content !== TIME_BASED_MC_CLEARED_MESSAGE) {
146405
+ tokensSaved += calculateToolResultTokens(block);
146406
+ touched = true;
146407
+ return { ...block, content: TIME_BASED_MC_CLEARED_MESSAGE };
146408
+ }
146409
+ return block;
146410
+ });
146411
+ if (!touched)
146412
+ return message;
146413
+ return { ...message, message: { ...message.message, content: newContent } };
146414
+ });
146415
+ if (tokensSaved === 0)
146416
+ return null;
146417
+ return { messages: result, tokensSaved, cleared: clearSet.size };
146418
+ }
146419
+ function maybeSizeBasedMicrocompact(messages, querySource) {
146420
+ const config2 = getToolResultPruningConfig();
146421
+ if (!config2.enabled || !querySource || !isMainThreadSource(querySource)) {
146422
+ return null;
146423
+ }
146424
+ const cleared = clearOldToolResults(messages, config2.keepRecent);
146425
+ if (!cleared || cleared.tokensSaved < config2.minTokensFreed) {
146426
+ return null;
146427
+ }
146428
+ logEvent("tengu_size_based_microcompact", {
146429
+ toolsCleared: cleared.cleared,
146430
+ keepRecent: config2.keepRecent,
146431
+ minTokensFreed: config2.minTokensFreed,
146432
+ tokensSaved: cleared.tokensSaved
146433
+ });
146434
+ logForDebugging(`[SIZE-BASED MC] cleared ${cleared.cleared} tool results (~${cleared.tokensSaved} tokens >= ${config2.minTokensFreed} threshold), kept last ${config2.keepRecent}`);
146435
+ suppressCompactWarning();
146436
+ resetMicrocompactState();
146437
+ if (false) {}
146438
+ return { messages: cleared.messages };
146439
+ }
146358
146440
  function maybeTimeBasedMicrocompact(messages, querySource) {
146359
146441
  const trigger = evaluateTimeBasedTrigger(messages, querySource);
146360
146442
  if (!trigger) {
@@ -146408,6 +146490,7 @@ function maybeTimeBasedMicrocompact(messages, querySource) {
146408
146490
  }
146409
146491
  var TIME_BASED_MC_CLEARED_MESSAGE = "[Old tool result content cleared]", IMAGE_MAX_TOKEN_SIZE = 2000, COMPACTABLE_TOOLS, cachedMCState = null, pendingCacheEdits = null;
146410
146492
  var init_microCompact = __esm(() => {
146493
+ init_toolResultPruningConfig();
146411
146494
  init_prompt2();
146412
146495
  init_prompt3();
146413
146496
  init_prompt();
@@ -154550,7 +154633,7 @@ var init_projectSafety = __esm(() => {
154550
154633
  function getInstruments() {
154551
154634
  if (instruments)
154552
154635
  return instruments;
154553
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.61.2");
154636
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.63.0");
154554
154637
  instruments = {
154555
154638
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
154556
154639
  description: "GenAI operation duration.",
@@ -154648,7 +154731,7 @@ function genAiAgentAttributes() {
154648
154731
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
154649
154732
  "gen_ai.provider.name": "ur",
154650
154733
  "gen_ai.agent.name": "UR-Nexus",
154651
- "gen_ai.agent.version": "1.61.2"
154734
+ "gen_ai.agent.version": "1.63.0"
154652
154735
  };
154653
154736
  }
154654
154737
  function genAiWorkflowAttributes(workflowName) {
@@ -154664,7 +154747,7 @@ function genAiWorkflowAttributes(workflowName) {
154664
154747
  function startGenAiWorkflowSpan(workflowName) {
154665
154748
  const attributes = genAiWorkflowAttributes(workflowName);
154666
154749
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
154667
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.61.2").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154750
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.63.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154668
154751
  }
154669
154752
  function endGenAiWorkflowSpan(span, options2 = {}) {
154670
154753
  try {
@@ -154702,7 +154785,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
154702
154785
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
154703
154786
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
154704
154787
  }
154705
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.61.2").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154788
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.63.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154706
154789
  }
154707
154790
  function endGenAiMemorySpan(span, options2 = {}) {
154708
154791
  try {
@@ -206221,7 +206304,7 @@ function getTelemetryAttributes() {
206221
206304
  attributes["session.id"] = sessionId;
206222
206305
  }
206223
206306
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
206224
- attributes["app.version"] = "1.61.2";
206307
+ attributes["app.version"] = "1.63.0";
206225
206308
  }
206226
206309
  const oauthAccount = getOauthAccountInfo();
206227
206310
  if (oauthAccount) {
@@ -241995,7 +242078,7 @@ function getInstallationEnv() {
241995
242078
  return;
241996
242079
  }
241997
242080
  function getURCodeVersion() {
241998
- return "1.61.2";
242081
+ return "1.63.0";
241999
242082
  }
242000
242083
  async function getInstalledVSCodeExtensionVersion(command) {
242001
242084
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -249326,7 +249409,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
249326
249409
  const client2 = new Client({
249327
249410
  name: "ur",
249328
249411
  title: "UR",
249329
- version: "1.61.2",
249412
+ version: "1.63.0",
249330
249413
  description: "UR-Nexus autonomous engineering workflow engine",
249331
249414
  websiteUrl: PRODUCT_URL
249332
249415
  }, {
@@ -249686,7 +249769,7 @@ var init_client5 = __esm(() => {
249686
249769
  const client2 = new Client({
249687
249770
  name: "ur",
249688
249771
  title: "UR",
249689
- version: "1.61.2",
249772
+ version: "1.63.0",
249690
249773
  description: "UR-Nexus autonomous engineering workflow engine",
249691
249774
  websiteUrl: PRODUCT_URL
249692
249775
  }, {
@@ -262287,7 +262370,7 @@ async function createRuntime() {
262287
262370
  bootstrapTelemetry();
262288
262371
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
262289
262372
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
262290
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.61.2"
262373
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.63.0"
262291
262374
  }));
262292
262375
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
262293
262376
  resource,
@@ -262320,11 +262403,11 @@ async function createRuntime() {
262320
262403
  setMeterProvider(meterProvider);
262321
262404
  setLoggerProvider(loggerProvider);
262322
262405
  if (meterProvider) {
262323
- const meter = meterProvider.getMeter("ur-agent", "1.61.2");
262406
+ const meter = meterProvider.getMeter("ur-agent", "1.63.0");
262324
262407
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
262325
262408
  }
262326
262409
  if (loggerProvider) {
262327
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.61.2"));
262410
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.63.0"));
262328
262411
  }
262329
262412
  if (!cleanupRegistered2) {
262330
262413
  cleanupRegistered2 = true;
@@ -262986,9 +263069,9 @@ async function assertMinVersion() {
262986
263069
  if (false) {}
262987
263070
  try {
262988
263071
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
262989
- if (versionConfig.minVersion && lt("1.61.2", versionConfig.minVersion)) {
263072
+ if (versionConfig.minVersion && lt("1.63.0", versionConfig.minVersion)) {
262990
263073
  console.error(`
262991
- It looks like your version of UR (${"1.61.2"}) needs an update.
263074
+ It looks like your version of UR (${"1.63.0"}) needs an update.
262992
263075
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
262993
263076
 
262994
263077
  To update, please run:
@@ -263204,7 +263287,7 @@ async function installGlobalPackage(specificVersion) {
263204
263287
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
263205
263288
  logEvent("tengu_auto_updater_lock_contention", {
263206
263289
  pid: process.pid,
263207
- currentVersion: "1.61.2"
263290
+ currentVersion: "1.63.0"
263208
263291
  });
263209
263292
  return "in_progress";
263210
263293
  }
@@ -263213,7 +263296,7 @@ async function installGlobalPackage(specificVersion) {
263213
263296
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
263214
263297
  logError2(new Error("Windows NPM detected in WSL environment"));
263215
263298
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
263216
- currentVersion: "1.61.2"
263299
+ currentVersion: "1.63.0"
263217
263300
  });
263218
263301
  console.error(`
263219
263302
  Error: Windows NPM detected in WSL
@@ -263748,7 +263831,7 @@ function detectLinuxGlobPatternWarnings() {
263748
263831
  }
263749
263832
  async function getDoctorDiagnostic() {
263750
263833
  const installationType = await getCurrentInstallationType();
263751
- const version2 = typeof MACRO !== "undefined" ? "1.61.2" : "unknown";
263834
+ const version2 = typeof MACRO !== "undefined" ? "1.63.0" : "unknown";
263752
263835
  const installationPath = await getInstallationPath();
263753
263836
  const invokedBinary = getInvokedBinary();
263754
263837
  const multipleInstallations = await detectMultipleInstallations();
@@ -264683,8 +264766,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
264683
264766
  const maxVersion = await getMaxVersion();
264684
264767
  if (maxVersion && gt(version2, maxVersion)) {
264685
264768
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
264686
- if (gte("1.61.2", maxVersion)) {
264687
- logForDebugging(`Native installer: current version ${"1.61.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
264769
+ if (gte("1.63.0", maxVersion)) {
264770
+ logForDebugging(`Native installer: current version ${"1.63.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
264688
264771
  logEvent("tengu_native_update_skipped_max_version", {
264689
264772
  latency_ms: Date.now() - startTime,
264690
264773
  max_version: maxVersion,
@@ -264695,7 +264778,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
264695
264778
  version2 = maxVersion;
264696
264779
  }
264697
264780
  }
264698
- if (!forceReinstall && version2 === "1.61.2" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
264781
+ if (!forceReinstall && version2 === "1.63.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
264699
264782
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
264700
264783
  logEvent("tengu_native_update_complete", {
264701
264784
  latency_ms: Date.now() - startTime,
@@ -334894,7 +334977,7 @@ function isAnyTracingEnabled() {
334894
334977
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
334895
334978
  }
334896
334979
  function getTracer() {
334897
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.61.2");
334980
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.63.0");
334898
334981
  }
334899
334982
  function createSpanAttributes(spanType, customAttributes = {}) {
334900
334983
  const baseAttributes = getTelemetryAttributes();
@@ -364397,7 +364480,7 @@ function Feedback({
364397
364480
  platform: env2.platform,
364398
364481
  gitRepo: envInfo.isGit,
364399
364482
  terminal: env2.terminal,
364400
- version: "1.61.2",
364483
+ version: "1.63.0",
364401
364484
  transcript: normalizeMessagesForAPI(messages),
364402
364485
  errors: sanitizedErrors,
364403
364486
  lastApiRequest: getLastAPIRequest(),
@@ -364589,7 +364672,7 @@ function Feedback({
364589
364672
  ", ",
364590
364673
  env2.terminal,
364591
364674
  ", v",
364592
- "1.61.2"
364675
+ "1.63.0"
364593
364676
  ]
364594
364677
  }, undefined, true, undefined, this)
364595
364678
  ]
@@ -364695,7 +364778,7 @@ ${sanitizedDescription}
364695
364778
  ` + `**Environment Info**
364696
364779
  ` + `- Platform: ${env2.platform}
364697
364780
  ` + `- Terminal: ${env2.terminal}
364698
- ` + `- Version: ${"1.61.2"}
364781
+ ` + `- Version: ${"1.63.0"}
364699
364782
  ` + `- Feedback ID: ${feedbackId}
364700
364783
  ` + `
364701
364784
  **Errors**
@@ -367805,7 +367888,7 @@ function buildPrimarySection() {
367805
367888
  }, undefined, false, undefined, this);
367806
367889
  return [{
367807
367890
  label: "Version",
367808
- value: "1.61.2"
367891
+ value: "1.63.0"
367809
367892
  }, {
367810
367893
  label: "Session name",
367811
367894
  value: nameValue
@@ -371135,7 +371218,7 @@ function Config({
371135
371218
  }
371136
371219
  }, undefined, false, undefined, this)
371137
371220
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
371138
- currentVersion: "1.61.2",
371221
+ currentVersion: "1.63.0",
371139
371222
  onChoice: (choice) => {
371140
371223
  setShowSubmenu(null);
371141
371224
  setTabsHidden(false);
@@ -371147,7 +371230,7 @@ function Config({
371147
371230
  autoUpdatesChannel: "stable"
371148
371231
  };
371149
371232
  if (choice === "stay") {
371150
- newSettings.minimumVersion = "1.61.2";
371233
+ newSettings.minimumVersion = "1.63.0";
371151
371234
  }
371152
371235
  updateSettingsForSource("userSettings", newSettings);
371153
371236
  setSettingsData((prev_27) => ({
@@ -379211,7 +379294,7 @@ function HelpV2(t0) {
379211
379294
  let t6;
379212
379295
  if ($2[31] !== tabs) {
379213
379296
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
379214
- title: `UR v${"1.61.2"}`,
379297
+ title: `UR v${"1.63.0"}`,
379215
379298
  color: "professionalBlue",
379216
379299
  defaultTab: "general",
379217
379300
  children: tabs
@@ -380128,7 +380211,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
380128
380211
  async function handleInitialize(options2) {
380129
380212
  return {
380130
380213
  name: "UR",
380131
- version: "1.61.2",
380214
+ version: "1.63.0",
380132
380215
  protocolVersion: "0.1.0",
380133
380216
  workspaceRoot: options2.cwd,
380134
380217
  capabilities: {
@@ -397236,7 +397319,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
397236
397319
  return [];
397237
397320
  }
397238
397321
  }
397239
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.61.2") {
397322
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.63.0") {
397240
397323
  if (process.env.USER_TYPE === "ant") {
397241
397324
  const changelog = "";
397242
397325
  if (changelog) {
@@ -397263,7 +397346,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.61.2")
397263
397346
  releaseNotes
397264
397347
  };
397265
397348
  }
397266
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.61.2") {
397349
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.63.0") {
397267
397350
  if (process.env.USER_TYPE === "ant") {
397268
397351
  const changelog = "";
397269
397352
  if (changelog) {
@@ -400120,7 +400203,7 @@ function getRecentActivitySync() {
400120
400203
  return cachedActivity;
400121
400204
  }
400122
400205
  function getLogoDisplayData() {
400123
- const version2 = process.env.DEMO_VERSION ?? "1.61.2";
400206
+ const version2 = process.env.DEMO_VERSION ?? "1.63.0";
400124
400207
  const serverUrl = getDirectConnectServerUrl();
400125
400208
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
400126
400209
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -401004,7 +401087,7 @@ function LogoV2() {
401004
401087
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
401005
401088
  t2 = () => {
401006
401089
  const currentConfig2 = getGlobalConfig();
401007
- if (currentConfig2.lastReleaseNotesSeen === "1.61.2") {
401090
+ if (currentConfig2.lastReleaseNotesSeen === "1.63.0") {
401008
401091
  return;
401009
401092
  }
401010
401093
  saveGlobalConfig(_temp327);
@@ -401689,12 +401772,12 @@ function LogoV2() {
401689
401772
  return t41;
401690
401773
  }
401691
401774
  function _temp327(current) {
401692
- if (current.lastReleaseNotesSeen === "1.61.2") {
401775
+ if (current.lastReleaseNotesSeen === "1.63.0") {
401693
401776
  return current;
401694
401777
  }
401695
401778
  return {
401696
401779
  ...current,
401697
- lastReleaseNotesSeen: "1.61.2"
401780
+ lastReleaseNotesSeen: "1.63.0"
401698
401781
  };
401699
401782
  }
401700
401783
  function _temp241(s_0) {
@@ -418492,7 +418575,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
418492
418575
  if (spec.name !== specName) {
418493
418576
  throw new Error("Agentic CI workflow spec name does not match");
418494
418577
  }
418495
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.61.2" : "1.61.2");
418578
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.63.0" : "1.63.0");
418496
418579
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
418497
418580
  throw new Error("invalid ur-agent package version");
418498
418581
  }
@@ -419485,7 +419568,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
419485
419568
  path: ".github/workflows/ur.yml",
419486
419569
  root: "project",
419487
419570
  content: compileAgenticCiWorkflow("default", {
419488
- packageVersion: typeof MACRO !== "undefined" ? "1.61.2" : "1.61.2"
419571
+ packageVersion: typeof MACRO !== "undefined" ? "1.63.0" : "1.63.0"
419489
419572
  })
419490
419573
  },
419491
419574
  {
@@ -419548,7 +419631,7 @@ function value(tokens, flag) {
419548
419631
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
419549
419632
  }
419550
419633
  function cliVersion() {
419551
- return typeof MACRO !== "undefined" ? "1.61.2" : "1.61.2";
419634
+ return typeof MACRO !== "undefined" ? "1.63.0" : "1.63.0";
419552
419635
  }
419553
419636
  function workflowPath(cwd2) {
419554
419637
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -425404,7 +425487,7 @@ function createAcpStdioApp(deps) {
425404
425487
  }
425405
425488
  },
425406
425489
  authMethods: [],
425407
- agentInfo: { name: "UR-Nexus", version: "1.61.2" }
425490
+ agentInfo: { name: "UR-Nexus", version: "1.63.0" }
425408
425491
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
425409
425492
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
425410
425493
  await runtime2.announce({
@@ -425501,7 +425584,7 @@ function createAcpStdioAgent(deps) {
425501
425584
  }
425502
425585
  },
425503
425586
  authMethods: [],
425504
- agentInfo: { name: "UR-Nexus", version: "1.61.2" }
425587
+ agentInfo: { name: "UR-Nexus", version: "1.63.0" }
425505
425588
  });
425506
425589
  return;
425507
425590
  case "authenticate":
@@ -434834,8 +434917,11 @@ function summarizeSubagentCosts(subagentsDir) {
434834
434917
  } catch {
434835
434918
  continue;
434836
434919
  }
434920
+ const meta = readAgentMetadata2(join182(subagentsDir, entry));
434837
434921
  const row = {
434838
434922
  agentId: matched[1],
434923
+ agentType: meta.agentType,
434924
+ description: meta.description,
434839
434925
  model: null,
434840
434926
  messages: messages.length,
434841
434927
  inputTokens: 0,
@@ -434867,6 +434953,18 @@ function summarizeSubagentCosts(subagentsDir) {
434867
434953
  }
434868
434954
  return rows.sort((a2, b) => b.costUSD - a2.costUSD);
434869
434955
  }
434956
+ function readAgentMetadata2(transcriptPath) {
434957
+ try {
434958
+ const raw = readFileSync61(transcriptPath.replace(/\.jsonl$/, ".meta.json"), "utf8");
434959
+ const parsed = JSON.parse(raw);
434960
+ return {
434961
+ agentType: typeof parsed.agentType === "string" ? parsed.agentType : null,
434962
+ description: typeof parsed.description === "string" ? parsed.description : null
434963
+ };
434964
+ } catch {
434965
+ return { agentType: null, description: null };
434966
+ }
434967
+ }
434870
434968
  function formatSubagentCosts(rows, json2, searchedDir) {
434871
434969
  if (json2)
434872
434970
  return JSON.stringify({ subagents: rows, searchedDir }, null, 2);
@@ -434875,11 +434973,12 @@ function formatSubagentCosts(rows, json2, searchedDir) {
434875
434973
  Either this session spawned no subagents, or that is not where they were written.` : "No subagent transcripts found for this session.";
434876
434974
  }
434877
434975
  const billed = rows.some((row) => row.costUSD > 0);
434878
- const width = Math.max(...rows.map((row) => row.agentId.length), 5);
434976
+ const label = (row) => row.description || row.agentType || row.agentId;
434977
+ const width = Math.min(Math.max(...rows.map((row) => label(row).length), 5), 44);
434879
434978
  const lines = ["Per-agent usage", ""];
434880
434979
  for (const row of rows) {
434881
434980
  const cost2 = billed ? ` ${formatUSD(row.costUSD).padStart(9)}` : "";
434882
- lines.push(` ${row.agentId.padEnd(width)} ${String(row.inputTokens).padStart(9)} in ` + `${String(row.outputTokens).padStart(8)} out${cost2} ${row.model ?? "unknown model"}`);
434981
+ lines.push(` ${label(row).slice(0, width).padEnd(width)} ${String(row.inputTokens).padStart(9)} in ` + `${String(row.outputTokens).padStart(8)} out${cost2} ${row.model ?? "unknown model"}`);
434883
434982
  }
434884
434983
  const totalIn = rows.reduce((sum, row) => sum + row.inputTokens, 0);
434885
434984
  const totalOut = rows.reduce((sum, row) => sum + row.outputTokens, 0);
@@ -633820,7 +633919,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
633820
633919
  smapsRollup,
633821
633920
  platform: process.platform,
633822
633921
  nodeVersion: process.version,
633823
- ccVersion: "1.61.2"
633922
+ ccVersion: "1.63.0"
633824
633923
  };
633825
633924
  }
633826
633925
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -634400,7 +634499,7 @@ var init_bridge_kick = __esm(() => {
634400
634499
  var call153 = async () => {
634401
634500
  return {
634402
634501
  type: "text",
634403
- value: "1.61.2"
634502
+ value: "1.63.0"
634404
634503
  };
634405
634504
  }, version2, version_default;
634406
634505
  var init_version = __esm(() => {
@@ -645471,7 +645570,7 @@ function generateHtmlReport(data, insights) {
645471
645570
  </html>`;
645472
645571
  }
645473
645572
  function buildExportData(data, insights, facets, remoteStats) {
645474
- const version3 = typeof MACRO !== "undefined" ? "1.61.2" : "unknown";
645573
+ const version3 = typeof MACRO !== "undefined" ? "1.63.0" : "unknown";
645475
645574
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
645476
645575
  const facets_summary = {
645477
645576
  total: facets.size,
@@ -649782,7 +649881,7 @@ var init_sessionStorage = __esm(() => {
649782
649881
  init_settings2();
649783
649882
  init_slowOperations();
649784
649883
  init_uuid();
649785
- VERSION7 = typeof MACRO !== "undefined" ? "1.61.2" : "unknown";
649884
+ VERSION7 = typeof MACRO !== "undefined" ? "1.63.0" : "unknown";
649786
649885
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
649787
649886
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
649788
649887
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -650997,7 +651096,7 @@ var init_filesystem = __esm(() => {
650997
651096
  });
650998
651097
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
650999
651098
  const nonce = randomBytes20(16).toString("hex");
651000
- return join232(getURTempDir(), "bundled-skills", "1.61.2", nonce);
651099
+ return join232(getURTempDir(), "bundled-skills", "1.63.0", nonce);
651001
651100
  });
651002
651101
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
651003
651102
  });
@@ -657292,7 +657391,7 @@ function computeFingerprint(messageText2, version3) {
657292
657391
  }
657293
657392
  function computeFingerprintFromMessages(messages) {
657294
657393
  const firstMessageText = extractFirstMessageText(messages);
657295
- return computeFingerprint(firstMessageText, "1.61.2");
657394
+ return computeFingerprint(firstMessageText, "1.63.0");
657296
657395
  }
657297
657396
  var FINGERPRINT_SALT = "59cf53e54c78";
657298
657397
  var init_fingerprint = () => {};
@@ -659188,7 +659287,7 @@ async function sideQuery(opts) {
659188
659287
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
659189
659288
  }
659190
659289
  const messageText2 = extractFirstUserMessageText(messages);
659191
- const fingerprint2 = computeFingerprint(messageText2, "1.61.2");
659290
+ const fingerprint2 = computeFingerprint(messageText2, "1.63.0");
659192
659291
  const attributionHeader = getAttributionHeader(fingerprint2);
659193
659292
  const systemBlocks = [
659194
659293
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -663959,7 +664058,7 @@ function buildSystemInitMessage(inputs) {
663959
664058
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
663960
664059
  apiKeySource: getURHQApiKeyWithSource().source,
663961
664060
  betas: getSdkBetas(),
663962
- ur_version: "1.61.2",
664061
+ ur_version: "1.63.0",
663963
664062
  output_style: outputStyle2,
663964
664063
  agents: inputs.agents.map((agent2) => agent2.agentType),
663965
664064
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -677819,7 +677918,7 @@ var init_useVoiceEnabled = __esm(() => {
677819
677918
  function getSemverPart(version3) {
677820
677919
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
677821
677920
  }
677822
- function useUpdateNotification(updatedVersion, initialVersion = "1.61.2") {
677921
+ function useUpdateNotification(updatedVersion, initialVersion = "1.63.0") {
677823
677922
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
677824
677923
  if (!updatedVersion) {
677825
677924
  return null;
@@ -677868,7 +677967,7 @@ function AutoUpdater({
677868
677967
  return;
677869
677968
  }
677870
677969
  if (false) {}
677871
- const currentVersion = "1.61.2";
677970
+ const currentVersion = "1.63.0";
677872
677971
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
677873
677972
  let latestVersion = await getLatestVersion(channel);
677874
677973
  const isDisabled = isAutoUpdaterDisabled();
@@ -678097,12 +678196,12 @@ function NativeAutoUpdater({
678097
678196
  logEvent("tengu_native_auto_updater_start", {});
678098
678197
  try {
678099
678198
  const maxVersion = await getMaxVersion();
678100
- if (maxVersion && gt("1.61.2", maxVersion)) {
678199
+ if (maxVersion && gt("1.63.0", maxVersion)) {
678101
678200
  const msg = await getMaxVersionMessage();
678102
678201
  setMaxVersionIssue(msg ?? "affects your version");
678103
678202
  }
678104
678203
  const result = await installLatest(channel);
678105
- const currentVersion = "1.61.2";
678204
+ const currentVersion = "1.63.0";
678106
678205
  const latencyMs = Date.now() - startTime;
678107
678206
  if (result.lockFailed) {
678108
678207
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -678239,17 +678338,17 @@ function PackageManagerAutoUpdater(t0) {
678239
678338
  const maxVersion = await getMaxVersion();
678240
678339
  if (maxVersion && latest && gt(latest, maxVersion)) {
678241
678340
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
678242
- if (gte("1.61.2", maxVersion)) {
678243
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.61.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
678341
+ if (gte("1.63.0", maxVersion)) {
678342
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.63.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
678244
678343
  setUpdateAvailable(false);
678245
678344
  return;
678246
678345
  }
678247
678346
  latest = maxVersion;
678248
678347
  }
678249
- const hasUpdate = latest && !gte("1.61.2", latest) && !shouldSkipVersion(latest);
678348
+ const hasUpdate = latest && !gte("1.63.0", latest) && !shouldSkipVersion(latest);
678250
678349
  setUpdateAvailable(!!hasUpdate);
678251
678350
  if (hasUpdate) {
678252
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.61.2"} -> ${latest}`);
678351
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.63.0"} -> ${latest}`);
678253
678352
  }
678254
678353
  };
678255
678354
  $2[0] = t1;
@@ -678283,7 +678382,7 @@ function PackageManagerAutoUpdater(t0) {
678283
678382
  wrap: "truncate",
678284
678383
  children: [
678285
678384
  "currentVersion: ",
678286
- "1.61.2"
678385
+ "1.63.0"
678287
678386
  ]
678288
678387
  }, undefined, true, undefined, this);
678289
678388
  $2[3] = verbose;
@@ -688980,7 +689079,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
688980
689079
  project_dir: getOriginalCwd(),
688981
689080
  added_dirs: addedDirs
688982
689081
  },
688983
- version: "1.61.2",
689082
+ version: "1.63.0",
688984
689083
  output_style: {
688985
689084
  name: outputStyleName
688986
689085
  },
@@ -689063,7 +689162,7 @@ function StatusLineInner({
689063
689162
  const taskValues = Object.values(tasks2);
689064
689163
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
689065
689164
  const defaultStatusLineText = buildDefaultStatusBar({
689066
- version: "1.61.2",
689165
+ version: "1.63.0",
689067
689166
  providerLabel: providerRuntime.providerLabel,
689068
689167
  authMode: providerRuntime.authLabel,
689069
689168
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -701206,7 +701305,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
701206
701305
  } catch {}
701207
701306
  const data = {
701208
701307
  trigger: trigger2,
701209
- version: "1.61.2",
701308
+ version: "1.63.0",
701210
701309
  platform: process.platform,
701211
701310
  transcript,
701212
701311
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -713486,7 +713585,7 @@ function WelcomeV2() {
713486
713585
  dimColor: true,
713487
713586
  children: [
713488
713587
  "v",
713489
- "1.61.2"
713588
+ "1.63.0"
713490
713589
  ]
713491
713590
  }, undefined, true, undefined, this)
713492
713591
  ]
@@ -714746,7 +714845,7 @@ function completeOnboarding() {
714746
714845
  saveGlobalConfig((current) => ({
714747
714846
  ...current,
714748
714847
  hasCompletedOnboarding: true,
714749
- lastOnboardingVersion: "1.61.2"
714848
+ lastOnboardingVersion: "1.63.0"
714750
714849
  }));
714751
714850
  }
714752
714851
  function showDialog(root2, renderer) {
@@ -719790,7 +719889,7 @@ function appendToLog(path24, message) {
719790
719889
  cwd: getFsImplementation().cwd(),
719791
719890
  userType: process.env.USER_TYPE,
719792
719891
  sessionId: getSessionId(),
719793
- version: "1.61.2"
719892
+ version: "1.63.0"
719794
719893
  };
719795
719894
  getLogWriter(path24).write(messageWithTimestamp);
719796
719895
  }
@@ -723949,8 +724048,8 @@ async function getEnvLessBridgeConfig() {
723949
724048
  }
723950
724049
  async function checkEnvLessBridgeMinVersion() {
723951
724050
  const cfg = await getEnvLessBridgeConfig();
723952
- if (cfg.min_version && lt("1.61.2", cfg.min_version)) {
723953
- return `Your version of UR (${"1.61.2"}) is too old for Remote Control.
724051
+ if (cfg.min_version && lt("1.63.0", cfg.min_version)) {
724052
+ return `Your version of UR (${"1.63.0"}) is too old for Remote Control.
723954
724053
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
723955
724054
  }
723956
724055
  return null;
@@ -724424,7 +724523,7 @@ async function initBridgeCore(params) {
724424
724523
  const rawApi = createBridgeApiClient({
724425
724524
  baseUrl,
724426
724525
  getAccessToken,
724427
- runnerVersion: "1.61.2",
724526
+ runnerVersion: "1.63.0",
724428
724527
  onDebug: logForDebugging,
724429
724528
  onAuth401,
724430
724529
  getTrustedDeviceToken
@@ -733900,7 +733999,7 @@ function getAgUiCapabilities() {
733900
733999
  name: "UR-Nexus",
733901
734000
  type: "ur-nexus",
733902
734001
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
733903
- version: "1.61.2",
734002
+ version: "1.63.0",
733904
734003
  provider: "UR",
733905
734004
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
733906
734005
  },
@@ -735040,7 +735139,7 @@ function createMCPServer(cwd4, debug2, verbose) {
735040
735139
  };
735041
735140
  const server2 = new Server({
735042
735141
  name: "ur-nexus",
735043
- version: "1.61.2"
735142
+ version: "1.63.0"
735044
735143
  }, {
735045
735144
  capabilities: {
735046
735145
  tools: {}
@@ -736198,7 +736297,7 @@ function thrownResponse(error40) {
736198
736297
  }
736199
736298
  async function createUrMcp2026Runtime(options4) {
736200
736299
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
736201
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.61.2" }, { capabilities: {} });
736300
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.63.0" }, { capabilities: {} });
736202
736301
  const [clientTransport, serverTransport] = createLinkedTransportPair();
736203
736302
  try {
736204
736303
  await server2.connect(serverTransport);
@@ -736209,7 +736308,7 @@ async function createUrMcp2026Runtime(options4) {
736209
736308
  }
736210
736309
  const runtime2 = new Mcp2026Runtime({
736211
736310
  cwd: options4.cwd,
736212
- version: "1.61.2",
736311
+ version: "1.63.0",
736213
736312
  backend: {
736214
736313
  listTools: async () => {
736215
736314
  const listed = await client2.listTools();
@@ -738342,7 +738441,7 @@ async function update() {
738342
738441
  logEvent("tengu_update_check", {});
738343
738442
  const diagnostic2 = await getDoctorDiagnostic();
738344
738443
  const result = await checkUpgradeStatus({
738345
- currentVersion: "1.61.2",
738444
+ currentVersion: "1.63.0",
738346
738445
  packageName: UR_AGENT_PACKAGE_NAME,
738347
738446
  installationType: diagnostic2.installationType,
738348
738447
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -739658,7 +739757,7 @@ ${customInstructions}` : customInstructions;
739658
739757
  }
739659
739758
  }
739660
739759
  logForDiagnosticsNoPII("info", "started", {
739661
- version: "1.61.2",
739760
+ version: "1.63.0",
739662
739761
  is_native_binary: isInBundledMode()
739663
739762
  });
739664
739763
  registerCleanup(async () => {
@@ -740444,7 +740543,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
740444
740543
  pendingHookMessages
740445
740544
  }, renderAndRun);
740446
740545
  }
740447
- }).version("1.61.2 (UR-Nexus)", "-v, --version", "Output the version number");
740546
+ }).version("1.63.0 (UR-Nexus)", "-v, --version", "Output the version number");
740448
740547
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
740449
740548
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
740450
740549
  if (canUserConfigureAdvisor()) {
@@ -741496,7 +741595,7 @@ if (false) {}
741496
741595
  async function main2() {
741497
741596
  const args = process.argv.slice(2);
741498
741597
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
741499
- console.log(`${"1.61.2"} (UR-Nexus)`);
741598
+ console.log(`${"1.63.0"} (UR-Nexus)`);
741500
741599
  return;
741501
741600
  }
741502
741601
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -45,7 +45,7 @@
45
45
  <main id="content" class="content">
46
46
  <header class="topbar">
47
47
  <div>
48
- <p class="eyebrow">Version 1.61.2</p>
48
+ <p class="eyebrow">Version 1.63.0</p>
49
49
  <h1>UR-Nexus Documentation</h1>
50
50
  <p class="lead">A practical, tutorial-style reference for installing, configuring, automating, extending, and operating UR-Nexus.</p>
51
51
  </div>
@@ -7,7 +7,7 @@ plugins {
7
7
  }
8
8
 
9
9
  group = "dev.urnexus"
10
- version = "1.61.2"
10
+ version = "1.63.0"
11
11
 
12
12
  repositories {
13
13
  mavenCentral()
@@ -2,7 +2,7 @@
2
2
  "name": "ur-inline-diffs",
3
3
  "displayName": "UR Inline Diffs",
4
4
  "description": "Review, apply, and reject UR inline diff bundles from .ur/ide/diffs inside VS Code.",
5
- "version": "1.61.2",
5
+ "version": "1.63.0",
6
6
  "publisher": "ur-nexus",
7
7
  "engines": {
8
8
  "vscode": "^1.92.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ur-agent",
3
- "version": "1.61.2",
3
+ "version": "1.63.0",
4
4
  "description": "UR-Nexus — autonomous engineering workflow engine (plan, execute, test, verify, document, benchmark, reproduce)",
5
5
  "type": "module",
6
6
  "packageManager": "bun@1.3.14",
@@ -84,7 +84,7 @@
84
84
  "@ag-ui/core": "0.0.57",
85
85
  "@ag-ui/encoder": "0.0.57",
86
86
  "diff2html": "^3.4.56",
87
- "playwright-core": "^1.61.2",
87
+ "playwright-core": "^1.63.0",
88
88
  "sharp": "^0.35.3"
89
89
  },
90
90
  "devDependencies": {