ur-agent 1.48.0 → 1.49.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/dist/cli.js CHANGED
@@ -75079,7 +75079,7 @@ var init_auth = __esm(() => {
75079
75079
 
75080
75080
  // src/utils/userAgent.ts
75081
75081
  function getURCodeUserAgent() {
75082
- return `ur/${"1.48.0"}`;
75082
+ return `ur/${"1.49.0"}`;
75083
75083
  }
75084
75084
 
75085
75085
  // src/utils/workloadContext.ts
@@ -75101,7 +75101,7 @@ function getUserAgent() {
75101
75101
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
75102
75102
  const workload = getWorkload();
75103
75103
  const workloadSuffix = workload ? `, workload/${workload}` : "";
75104
- return `ur-cli/${"1.48.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75104
+ return `ur-cli/${"1.49.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75105
75105
  }
75106
75106
  function getMCPUserAgent() {
75107
75107
  const parts = [];
@@ -75115,7 +75115,7 @@ function getMCPUserAgent() {
75115
75115
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
75116
75116
  }
75117
75117
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
75118
- return `ur/${"1.48.0"}${suffix}`;
75118
+ return `ur/${"1.49.0"}${suffix}`;
75119
75119
  }
75120
75120
  function getWebFetchUserAgent() {
75121
75121
  return `UR-User (${getURCodeUserAgent()})`;
@@ -75253,7 +75253,7 @@ var init_user = __esm(() => {
75253
75253
  deviceId,
75254
75254
  sessionId: getSessionId(),
75255
75255
  email: getEmail(),
75256
- appVersion: "1.48.0",
75256
+ appVersion: "1.49.0",
75257
75257
  platform: getHostPlatformForAnalytics(),
75258
75258
  organizationUuid,
75259
75259
  accountUuid,
@@ -83453,7 +83453,7 @@ var init_metadata = __esm(() => {
83453
83453
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
83454
83454
  WHITESPACE_REGEX = /\s+/;
83455
83455
  getVersionBase = memoize_default(() => {
83456
- const match = "1.48.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83456
+ const match = "1.49.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83457
83457
  return match ? match[0] : undefined;
83458
83458
  });
83459
83459
  buildEnvContext = memoize_default(async () => {
@@ -83493,7 +83493,7 @@ var init_metadata = __esm(() => {
83493
83493
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
83494
83494
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
83495
83495
  isURAiAuth: isURAISubscriber(),
83496
- version: "1.48.0",
83496
+ version: "1.49.0",
83497
83497
  versionBase: getVersionBase(),
83498
83498
  buildTime: "",
83499
83499
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -84163,7 +84163,7 @@ function initialize1PEventLogging() {
84163
84163
  const platform2 = getPlatform();
84164
84164
  const attributes = {
84165
84165
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
84166
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.48.0"
84166
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.49.0"
84167
84167
  };
84168
84168
  if (platform2 === "wsl") {
84169
84169
  const wslVersion = getWslVersion();
@@ -84191,7 +84191,7 @@ function initialize1PEventLogging() {
84191
84191
  })
84192
84192
  ]
84193
84193
  });
84194
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.48.0");
84194
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.49.0");
84195
84195
  }
84196
84196
  async function reinitialize1PEventLoggingIfConfigChanged() {
84197
84197
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -93709,6 +93709,62 @@ var init_a2aV1 = __esm(() => {
93709
93709
  };
93710
93710
  });
93711
93711
 
93712
+ // src/services/agents/a2aCardSignature.ts
93713
+ import {
93714
+ createHash as createHash8,
93715
+ createPrivateKey,
93716
+ createPublicKey,
93717
+ generateKeyPairSync,
93718
+ sign as cryptoSign,
93719
+ verify as cryptoVerify
93720
+ } from "crypto";
93721
+ function base64url3(value) {
93722
+ return (typeof value === "string" ? Buffer.from(value, "utf8") : value).toString("base64url");
93723
+ }
93724
+ function canonicalizeJson(value) {
93725
+ if (value === null)
93726
+ return "null";
93727
+ if (typeof value === "boolean")
93728
+ return value ? "true" : "false";
93729
+ if (typeof value === "number") {
93730
+ if (!Number.isFinite(value)) {
93731
+ throw new Error("cannot canonicalize a non-finite number");
93732
+ }
93733
+ return JSON.stringify(value);
93734
+ }
93735
+ if (typeof value === "string")
93736
+ return JSON.stringify(value);
93737
+ if (Array.isArray(value)) {
93738
+ return `[${value.map((entry) => canonicalizeJson(entry === undefined ? null : entry)).join(",")}]`;
93739
+ }
93740
+ if (typeof value === "object") {
93741
+ const source = value;
93742
+ const keys2 = Object.keys(source).filter((key) => source[key] !== undefined).sort();
93743
+ const members = keys2.map((key) => `${JSON.stringify(key)}:${canonicalizeJson(source[key])}`);
93744
+ return `{${members.join(",")}}`;
93745
+ }
93746
+ throw new Error(`cannot canonicalize value of type ${typeof value}`);
93747
+ }
93748
+ function signingPayload(card) {
93749
+ const { signatures: _signatures, ...rest } = card;
93750
+ return base64url3(canonicalizeJson(rest));
93751
+ }
93752
+ function signAgentCard(card, key) {
93753
+ const privateKey = createPrivateKey(key.privateKeyPem);
93754
+ if (privateKey.asymmetricKeyType !== "ed25519") {
93755
+ throw new Error("Agent Card signing requires an Ed25519 private key");
93756
+ }
93757
+ const header = { alg: A2A_CARD_SIGNATURE_ALG };
93758
+ if (key.kid)
93759
+ header.kid = key.kid;
93760
+ const protectedHeader = base64url3(canonicalizeJson(header));
93761
+ const signingInput = `${protectedHeader}.${signingPayload(card)}`;
93762
+ const signature = cryptoSign(null, Buffer.from(signingInput, "utf8"), privateKey);
93763
+ return { protected: protectedHeader, signature: signature.toString("base64url") };
93764
+ }
93765
+ var A2A_CARD_SIGNATURE_ALG = "EdDSA";
93766
+ var init_a2aCardSignature = () => {};
93767
+
93712
93768
  // src/services/agents/trends.ts
93713
93769
  var exports_trends = {};
93714
93770
  __export(exports_trends, {
@@ -93853,7 +93909,7 @@ function buildA2AV1AgentCard(options = {}) {
93853
93909
  securityRequirements.push({ schemes: { delegation: [] } });
93854
93910
  }
93855
93911
  const legacy = buildA2AAgentCard(options);
93856
- return {
93912
+ const card = {
93857
93913
  name: legacy.name,
93858
93914
  description: legacy.description,
93859
93915
  supportedInterfaces: [
@@ -93904,6 +93960,9 @@ function buildA2AV1AgentCard(options = {}) {
93904
93960
  })),
93905
93961
  signatures: []
93906
93962
  };
93963
+ if (!options.signingKey)
93964
+ return card;
93965
+ return { ...card, signatures: [signAgentCard(card, options.signingKey)] };
93907
93966
  }
93908
93967
  function buildAgentTrendReport(options = {}) {
93909
93968
  return {
@@ -93948,8 +94007,9 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
93948
94007
  function formatA2AAgentCard(options = {}, pretty = true) {
93949
94008
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
93950
94009
  }
93951
- var urVersion = "1.48.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94010
+ var urVersion = "1.49.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
93952
94011
  var init_trends = __esm(() => {
94012
+ init_a2aCardSignature();
93953
94013
  coverage = [
93954
94014
  {
93955
94015
  id: "local-runtime",
@@ -94357,7 +94417,7 @@ __export(exports_a2aServer, {
94357
94417
  handleA2ARequest: () => handleA2ARequest,
94358
94418
  authorizeRequest: () => authorizeRequest
94359
94419
  });
94360
- import { createHash as createHash8, randomUUID as randomUUID18 } from "crypto";
94420
+ import { createHash as createHash9, randomUUID as randomUUID18 } from "crypto";
94361
94421
  import {
94362
94422
  existsSync as existsSync12,
94363
94423
  mkdirSync as mkdirSync11,
@@ -94420,7 +94480,7 @@ function a2aV1RestResponse(status, body) {
94420
94480
  }
94421
94481
  function agentCardResponse(card, version2, request) {
94422
94482
  const payload = JSON.stringify(card, null, 2);
94423
- const etag = `"${createHash8("sha256").update(payload).digest("base64url")}"`;
94483
+ const etag = `"${createHash9("sha256").update(payload).digest("base64url")}"`;
94424
94484
  const notModified = request?.headers.get("if-none-match") === etag;
94425
94485
  return new Response(notModified ? null : payload, {
94426
94486
  status: notModified ? 304 : 200,
@@ -96464,7 +96524,7 @@ var init_config2 = __esm(() => {
96464
96524
  });
96465
96525
 
96466
96526
  // src/services/analytics/datadog.ts
96467
- import { createHash as createHash9 } from "crypto";
96527
+ import { createHash as createHash10 } from "crypto";
96468
96528
  function camelToSnakeCase(str) {
96469
96529
  return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
96470
96530
  }
@@ -96672,7 +96732,7 @@ var init_datadog = __esm(() => {
96672
96732
  });
96673
96733
  getUserBucket = memoize_default(() => {
96674
96734
  const userId = getOrCreateUserID();
96675
- const hash2 = createHash9("sha256").update(userId).digest("hex");
96735
+ const hash2 = createHash10("sha256").update(userId).digest("hex");
96676
96736
  return parseInt(hash2.slice(0, 8), 16) % NUM_USER_BUCKETS;
96677
96737
  });
96678
96738
  });
@@ -96748,7 +96808,7 @@ function getAttributionHeader(fingerprint) {
96748
96808
  if (!isAttributionHeaderEnabled()) {
96749
96809
  return "";
96750
96810
  }
96751
- const version2 = `${"1.48.0"}.${fingerprint}`;
96811
+ const version2 = `${"1.49.0"}.${fingerprint}`;
96752
96812
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
96753
96813
  const cch = "";
96754
96814
  const workload = getWorkload();
@@ -143035,7 +143095,7 @@ var init_systemDirectories = __esm(() => {
143035
143095
  });
143036
143096
 
143037
143097
  // src/utils/plugins/mcpbHandler.ts
143038
- import { createHash as createHash10 } from "crypto";
143098
+ import { createHash as createHash11 } from "crypto";
143039
143099
  import { chmod, writeFile as writeFile4 } from "fs/promises";
143040
143100
  import { dirname as dirname25, join as join46 } from "path";
143041
143101
  function manifestAuthorName(manifest) {
@@ -143055,13 +143115,13 @@ function isUrl2(source) {
143055
143115
  return source.startsWith("http://") || source.startsWith("https://");
143056
143116
  }
143057
143117
  function generateContentHash(data) {
143058
- return createHash10("sha256").update(data).digest("hex").substring(0, 16);
143118
+ return createHash11("sha256").update(data).digest("hex").substring(0, 16);
143059
143119
  }
143060
143120
  function getMcpbCacheDir(pluginPath) {
143061
143121
  return join46(pluginPath, ".mcpb-cache");
143062
143122
  }
143063
143123
  function getMetadataPath(cacheDir, source) {
143064
- const sourceHash = createHash10("md5").update(source).digest("hex").substring(0, 8);
143124
+ const sourceHash = createHash11("md5").update(source).digest("hex").substring(0, 8);
143065
143125
  return join46(cacheDir, `${sourceHash}.metadata.json`);
143066
143126
  }
143067
143127
  function serverSecretsKey(pluginId, serverName) {
@@ -143409,7 +143469,7 @@ async function loadMcpbFile(source, pluginPath, pluginId, onProgress, providedUs
143409
143469
  let mcpbData;
143410
143470
  let mcpbFilePath;
143411
143471
  if (isUrl2(source)) {
143412
- const sourceHash = createHash10("md5").update(source).digest("hex").substring(0, 8);
143472
+ const sourceHash = createHash11("md5").update(source).digest("hex").substring(0, 8);
143413
143473
  mcpbFilePath = join46(cacheDir, `${sourceHash}.mcpb`);
143414
143474
  mcpbData = await downloadMcpb(source, mcpbFilePath, onProgress);
143415
143475
  } else {
@@ -154433,7 +154493,7 @@ var init_projectSafety = __esm(() => {
154433
154493
  function getInstruments() {
154434
154494
  if (instruments)
154435
154495
  return instruments;
154436
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.48.0");
154496
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.49.0");
154437
154497
  instruments = {
154438
154498
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
154439
154499
  description: "GenAI operation duration.",
@@ -154531,7 +154591,7 @@ function genAiAgentAttributes() {
154531
154591
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
154532
154592
  "gen_ai.provider.name": "ur",
154533
154593
  "gen_ai.agent.name": "UR-Nexus",
154534
- "gen_ai.agent.version": "1.48.0"
154594
+ "gen_ai.agent.version": "1.49.0"
154535
154595
  };
154536
154596
  }
154537
154597
  function genAiWorkflowAttributes(workflowName) {
@@ -154547,7 +154607,7 @@ function genAiWorkflowAttributes(workflowName) {
154547
154607
  function startGenAiWorkflowSpan(workflowName) {
154548
154608
  const attributes = genAiWorkflowAttributes(workflowName);
154549
154609
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
154550
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.48.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154610
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.49.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154551
154611
  }
154552
154612
  function endGenAiWorkflowSpan(span, options2 = {}) {
154553
154613
  try {
@@ -154585,7 +154645,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
154585
154645
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
154586
154646
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
154587
154647
  }
154588
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.48.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154648
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.49.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154589
154649
  }
154590
154650
  function endGenAiMemorySpan(span, options2 = {}) {
154591
154651
  try {
@@ -154701,7 +154761,7 @@ var init_genAiSemantics = __esm(() => {
154701
154761
  });
154702
154762
 
154703
154763
  // src/services/context/memoryCitations.ts
154704
- import { createHash as createHash11 } from "crypto";
154764
+ import { createHash as createHash12 } from "crypto";
154705
154765
  import {
154706
154766
  existsSync as existsSync19,
154707
154767
  lstatSync as lstatSync6,
@@ -154710,7 +154770,7 @@ import {
154710
154770
  } from "fs";
154711
154771
  import { relative as relative10, resolve as resolve23 } from "path";
154712
154772
  function digest(value) {
154713
- return `sha256:${createHash11("sha256").update(value).digest("hex")}`;
154773
+ return `sha256:${createHash12("sha256").update(value).digest("hex")}`;
154714
154774
  }
154715
154775
  function validDate3(value) {
154716
154776
  return typeof value === "string" && Number.isFinite(Date.parse(value));
@@ -155023,7 +155083,7 @@ import {
155023
155083
  writeSync as writeSync4,
155024
155084
  writeFileSync as writeFileSync14
155025
155085
  } from "fs";
155026
- import { createHash as createHash12, randomUUID as randomUUID19 } from "crypto";
155086
+ import { createHash as createHash13, randomUUID as randomUUID19 } from "crypto";
155027
155087
  import { dirname as dirname28, join as join52, relative as relative11 } from "path";
155028
155088
  function contextDir(cwd2) {
155029
155089
  return join52(cwd2, ".ur", "context");
@@ -155184,7 +155244,7 @@ function formatArchitectureSummary(manifest, cwd2) {
155184
155244
  `);
155185
155245
  }
155186
155246
  function hash2(value) {
155187
- return createHash12("sha256").update(value).digest("hex");
155247
+ return createHash13("sha256").update(value).digest("hex");
155188
155248
  }
155189
155249
  function stableJson(value) {
155190
155250
  if (Array.isArray(value))
@@ -155775,7 +155835,7 @@ var init_projectContextManifest = __esm(() => {
155775
155835
  this.verification = verification;
155776
155836
  }
155777
155837
  };
155778
- TASK_MEMORY_GENESIS = createHash12("sha256").update("ur-task-memory-genesis-v2").digest("hex");
155838
+ TASK_MEMORY_GENESIS = createHash13("sha256").update("ur-task-memory-genesis-v2").digest("hex");
155779
155839
  TASK_MEMORY_STATUSES = new Set([
155780
155840
  "proposed",
155781
155841
  "accepted",
@@ -155797,11 +155857,11 @@ var init_projectContextManifest = __esm(() => {
155797
155857
  });
155798
155858
 
155799
155859
  // src/services/api/dumpPrompts.ts
155800
- import { createHash as createHash13 } from "crypto";
155860
+ import { createHash as createHash14 } from "crypto";
155801
155861
  import { promises as fs2 } from "fs";
155802
155862
  import { dirname as dirname29, join as join53 } from "path";
155803
155863
  function hashString3(str) {
155804
- return createHash13("sha256").update(str).digest("hex");
155864
+ return createHash14("sha256").update(str).digest("hex");
155805
155865
  }
155806
155866
  function clearDumpState(agentIdOrSessionId) {
155807
155867
  dumpState.delete(agentIdOrSessionId);
@@ -156251,7 +156311,7 @@ var init_ledger = __esm(() => {
156251
156311
  });
156252
156312
 
156253
156313
  // src/services/verifier/loopDetector.ts
156254
- import { createHash as createHash14 } from "crypto";
156314
+ import { createHash as createHash15 } from "crypto";
156255
156315
 
156256
156316
  class LoopDetector {
156257
156317
  recent = new Map;
@@ -156292,7 +156352,7 @@ class LoopDetector {
156292
156352
  function hashCall(toolName, input) {
156293
156353
  const normalized = normalize8(input);
156294
156354
  const payload = `${toolName}\x00${JSON.stringify(normalized)}`;
156295
- return createHash14("sha1").update(payload).digest("hex");
156355
+ return createHash15("sha1").update(payload).digest("hex");
156296
156356
  }
156297
156357
  function normalize8(value) {
156298
156358
  if (value === null || value === undefined)
@@ -206104,7 +206164,7 @@ function getTelemetryAttributes() {
206104
206164
  attributes["session.id"] = sessionId;
206105
206165
  }
206106
206166
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
206107
- attributes["app.version"] = "1.48.0";
206167
+ attributes["app.version"] = "1.49.0";
206108
206168
  }
206109
206169
  const oauthAccount = getOauthAccountInfo();
206110
206170
  if (oauthAccount) {
@@ -209341,7 +209401,7 @@ __export(exports_commitAttribution, {
209341
209401
  buildSurfaceKey: () => buildSurfaceKey,
209342
209402
  attributionRestoreStateFromLog: () => attributionRestoreStateFromLog
209343
209403
  });
209344
- import { createHash as createHash15, randomUUID as randomUUID20 } from "crypto";
209404
+ import { createHash as createHash16, randomUUID as randomUUID20 } from "crypto";
209345
209405
  import { stat as stat15 } from "fs/promises";
209346
209406
  import { isAbsolute as isAbsolute14, join as join57, relative as relative13, sep as sep12 } from "path";
209347
209407
  function getAttributionRepoRoot() {
@@ -209374,7 +209434,7 @@ function buildSurfaceKey(surface, model) {
209374
209434
  return `${surface}/${getCanonicalName(model)}`;
209375
209435
  }
209376
209436
  function computeContentHash(content) {
209377
- return createHash15("sha256").update(content).digest("hex");
209437
+ return createHash16("sha256").update(content).digest("hex");
209378
209438
  }
209379
209439
  function normalizeFilePath(filePath) {
209380
209440
  const fs3 = getFsImplementation();
@@ -247679,7 +247739,7 @@ var init_config3 = __esm(() => {
247679
247739
  });
247680
247740
 
247681
247741
  // src/services/mcp/utils.ts
247682
- import { createHash as createHash16 } from "crypto";
247742
+ import { createHash as createHash17 } from "crypto";
247683
247743
  import { join as join64 } from "path";
247684
247744
  function filterToolsByServer(tools, serverName) {
247685
247745
  const prefix = `mcp__${normalizeNameForMCP(serverName)}__`;
@@ -247719,7 +247779,7 @@ function hashMcpConfig(config2) {
247719
247779
  }
247720
247780
  return v;
247721
247781
  });
247722
- return createHash16("sha256").update(stable).digest("hex").slice(0, 16);
247782
+ return createHash17("sha256").update(stable).digest("hex").slice(0, 16);
247723
247783
  }
247724
247784
  function excludeStalePluginClients(mcp, configs) {
247725
247785
  const stale = mcp.clients.filter((c4) => {
@@ -248468,7 +248528,7 @@ var init_xaaIdpLogin = __esm(() => {
248468
248528
  });
248469
248529
 
248470
248530
  // src/services/mcp/auth.ts
248471
- import { createHash as createHash17, randomBytes as randomBytes5, randomUUID as randomUUID23 } from "crypto";
248531
+ import { createHash as createHash18, randomBytes as randomBytes5, randomUUID as randomUUID23 } from "crypto";
248472
248532
  import { mkdir as mkdir7 } from "fs/promises";
248473
248533
  import { createServer as createServer3 } from "http";
248474
248534
  import { join as join65 } from "path";
@@ -248582,7 +248642,7 @@ function getServerKey(serverName, serverConfig) {
248582
248642
  url: serverConfig.url,
248583
248643
  headers: serverConfig.headers || {}
248584
248644
  });
248585
- const hash3 = createHash17("sha256").update(configJson).digest("hex").substring(0, 16);
248645
+ const hash3 = createHash18("sha256").update(configJson).digest("hex").substring(0, 16);
248586
248646
  return `${serverName}|${hash3}`;
248587
248647
  }
248588
248648
  function hasMcpDiscoveryButNoToken(serverName, serverConfig) {
@@ -252355,7 +252415,7 @@ function getInstallationEnv() {
252355
252415
  return;
252356
252416
  }
252357
252417
  function getURCodeVersion() {
252358
- return "1.48.0";
252418
+ return "1.49.0";
252359
252419
  }
252360
252420
  async function getInstalledVSCodeExtensionVersion(command) {
252361
252421
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -259686,7 +259746,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
259686
259746
  const client2 = new Client({
259687
259747
  name: "ur",
259688
259748
  title: "UR",
259689
- version: "1.48.0",
259749
+ version: "1.49.0",
259690
259750
  description: "UR-Nexus autonomous engineering workflow engine",
259691
259751
  websiteUrl: PRODUCT_URL
259692
259752
  }, {
@@ -260046,7 +260106,7 @@ var init_client5 = __esm(() => {
260046
260106
  const client2 = new Client({
260047
260107
  name: "ur",
260048
260108
  title: "UR",
260049
- version: "1.48.0",
260109
+ version: "1.49.0",
260050
260110
  description: "UR-Nexus autonomous engineering workflow engine",
260051
260111
  websiteUrl: PRODUCT_URL
260052
260112
  }, {
@@ -264327,7 +264387,7 @@ var init_types6 = __esm(() => {
264327
264387
  });
264328
264388
 
264329
264389
  // src/services/policyLimits/index.ts
264330
- import { createHash as createHash18 } from "crypto";
264390
+ import { createHash as createHash19 } from "crypto";
264331
264391
  import { readFileSync as fsReadFileSync } from "fs";
264332
264392
  import { unlink as unlink7, writeFile as writeFile10 } from "fs/promises";
264333
264393
  import { join as join74 } from "path";
@@ -264373,7 +264433,7 @@ function sortKeysDeep2(obj) {
264373
264433
  function computeChecksum(restrictions) {
264374
264434
  const sorted = sortKeysDeep2(restrictions);
264375
264435
  const normalized = jsonStringify(sorted);
264376
- const hash3 = createHash18("sha256").update(normalized).digest("hex");
264436
+ const hash3 = createHash19("sha256").update(normalized).digest("hex");
264377
264437
  return `sha256:${hash3}`;
264378
264438
  }
264379
264439
  function isPolicyLimitsEligible() {
@@ -266145,7 +266205,7 @@ var init_types7 = __esm(() => {
266145
266205
  });
266146
266206
 
266147
266207
  // src/services/remoteManagedSettings/index.ts
266148
- import { createHash as createHash19 } from "crypto";
266208
+ import { createHash as createHash20 } from "crypto";
266149
266209
  import { open as open7, unlink as unlink8 } from "fs/promises";
266150
266210
  function initializeRemoteManagedSettingsLoadingPromise() {
266151
266211
  if (loadingCompletePromise2) {
@@ -266183,7 +266243,7 @@ function sortKeysDeep3(obj) {
266183
266243
  function computeChecksumFromSettings(settings) {
266184
266244
  const sorted = sortKeysDeep3(settings);
266185
266245
  const normalized = jsonStringify(sorted);
266186
- const hash3 = createHash19("sha256").update(normalized).digest("hex");
266246
+ const hash3 = createHash20("sha256").update(normalized).digest("hex");
266187
266247
  return `sha256:${hash3}`;
266188
266248
  }
266189
266249
  function isEligibleForRemoteManagedSettings() {
@@ -272647,7 +272707,7 @@ async function createRuntime() {
272647
272707
  bootstrapTelemetry();
272648
272708
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
272649
272709
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
272650
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.48.0"
272710
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.49.0"
272651
272711
  }));
272652
272712
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
272653
272713
  resource,
@@ -272680,11 +272740,11 @@ async function createRuntime() {
272680
272740
  setMeterProvider(meterProvider);
272681
272741
  setLoggerProvider(loggerProvider);
272682
272742
  if (meterProvider) {
272683
- const meter = meterProvider.getMeter("ur-agent", "1.48.0");
272743
+ const meter = meterProvider.getMeter("ur-agent", "1.49.0");
272684
272744
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
272685
272745
  }
272686
272746
  if (loggerProvider) {
272687
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.48.0"));
272747
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.49.0"));
272688
272748
  }
272689
272749
  if (!cleanupRegistered2) {
272690
272750
  cleanupRegistered2 = true;
@@ -273014,7 +273074,7 @@ var init_auth_code_listener = __esm(() => {
273014
273074
  });
273015
273075
 
273016
273076
  // src/services/oauth/crypto.ts
273017
- import { createHash as createHash20, randomBytes as randomBytes8 } from "crypto";
273077
+ import { createHash as createHash21, randomBytes as randomBytes8 } from "crypto";
273018
273078
  function base64URLEncode(buffer) {
273019
273079
  return buffer.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
273020
273080
  }
@@ -273022,7 +273082,7 @@ function generateCodeVerifier() {
273022
273082
  return base64URLEncode(randomBytes8(32));
273023
273083
  }
273024
273084
  function generateCodeChallenge(verifier) {
273025
- const hash3 = createHash20("sha256");
273085
+ const hash3 = createHash21("sha256");
273026
273086
  hash3.update(verifier);
273027
273087
  return base64URLEncode(hash3.digest());
273028
273088
  }
@@ -273346,9 +273406,9 @@ async function assertMinVersion() {
273346
273406
  if (false) {}
273347
273407
  try {
273348
273408
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
273349
- if (versionConfig.minVersion && lt("1.48.0", versionConfig.minVersion)) {
273409
+ if (versionConfig.minVersion && lt("1.49.0", versionConfig.minVersion)) {
273350
273410
  console.error(`
273351
- It looks like your version of UR (${"1.48.0"}) needs an update.
273411
+ It looks like your version of UR (${"1.49.0"}) needs an update.
273352
273412
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
273353
273413
 
273354
273414
  To update, please run:
@@ -273564,7 +273624,7 @@ async function installGlobalPackage(specificVersion) {
273564
273624
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
273565
273625
  logEvent("tengu_auto_updater_lock_contention", {
273566
273626
  pid: process.pid,
273567
- currentVersion: "1.48.0"
273627
+ currentVersion: "1.49.0"
273568
273628
  });
273569
273629
  return "in_progress";
273570
273630
  }
@@ -273573,7 +273633,7 @@ async function installGlobalPackage(specificVersion) {
273573
273633
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
273574
273634
  logError2(new Error("Windows NPM detected in WSL environment"));
273575
273635
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
273576
- currentVersion: "1.48.0"
273636
+ currentVersion: "1.49.0"
273577
273637
  });
273578
273638
  console.error(`
273579
273639
  Error: Windows NPM detected in WSL
@@ -274108,7 +274168,7 @@ function detectLinuxGlobPatternWarnings() {
274108
274168
  }
274109
274169
  async function getDoctorDiagnostic() {
274110
274170
  const installationType = await getCurrentInstallationType();
274111
- const version2 = typeof MACRO !== "undefined" ? "1.48.0" : "unknown";
274171
+ const version2 = typeof MACRO !== "undefined" ? "1.49.0" : "unknown";
274112
274172
  const installationPath = await getInstallationPath();
274113
274173
  const invokedBinary = getInvokedBinary();
274114
274174
  const multipleInstallations = await detectMultipleInstallations();
@@ -274226,7 +274286,7 @@ function getUserBinDir(options2) {
274226
274286
  var init_xdg = () => {};
274227
274287
 
274228
274288
  // src/utils/nativeInstaller/download.ts
274229
- import { createHash as createHash21 } from "crypto";
274289
+ import { createHash as createHash22 } from "crypto";
274230
274290
  import { chmod as chmod4, writeFile as writeFile13 } from "fs/promises";
274231
274291
  import { join as join80 } from "path";
274232
274292
  async function getLatestVersionFromArtifactory(tag2 = "latest") {
@@ -274412,7 +274472,7 @@ async function downloadAndVerifyBinary(binaryUrl, expectedChecksum, binaryPath,
274412
274472
  ...requestConfig
274413
274473
  });
274414
274474
  clearStallTimer();
274415
- const hash3 = createHash21("sha256");
274475
+ const hash3 = createHash22("sha256");
274416
274476
  hash3.update(response.data);
274417
274477
  const actualChecksum = hash3.digest("hex");
274418
274478
  if (actualChecksum !== expectedChecksum) {
@@ -275043,8 +275103,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
275043
275103
  const maxVersion = await getMaxVersion();
275044
275104
  if (maxVersion && gt(version2, maxVersion)) {
275045
275105
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
275046
- if (gte("1.48.0", maxVersion)) {
275047
- logForDebugging(`Native installer: current version ${"1.48.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
275106
+ if (gte("1.49.0", maxVersion)) {
275107
+ logForDebugging(`Native installer: current version ${"1.49.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
275048
275108
  logEvent("tengu_native_update_skipped_max_version", {
275049
275109
  latency_ms: Date.now() - startTime,
275050
275110
  max_version: maxVersion,
@@ -275055,7 +275115,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
275055
275115
  version2 = maxVersion;
275056
275116
  }
275057
275117
  }
275058
- if (!forceReinstall && version2 === "1.48.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
275118
+ if (!forceReinstall && version2 === "1.49.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
275059
275119
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
275060
275120
  logEvent("tengu_native_update_complete", {
275061
275121
  latency_ms: Date.now() - startTime,
@@ -295756,11 +295816,11 @@ var init_skillUsageTracking = __esm(() => {
295756
295816
  });
295757
295817
 
295758
295818
  // src/utils/telemetry/pluginTelemetry.ts
295759
- import { createHash as createHash22 } from "crypto";
295819
+ import { createHash as createHash23 } from "crypto";
295760
295820
  import { sep as sep14 } from "path";
295761
295821
  function hashPluginId(name, marketplace) {
295762
295822
  const key = marketplace ? `${name}@${marketplace.toLowerCase()}` : name;
295763
- return createHash22("sha256").update(key + PLUGIN_ID_HASH_SALT).digest("hex").slice(0, 16);
295823
+ return createHash23("sha256").update(key + PLUGIN_ID_HASH_SALT).digest("hex").slice(0, 16);
295764
295824
  }
295765
295825
  function getTelemetryPluginScope(name, marketplace, managedNames) {
295766
295826
  if (marketplace === BUILTIN_MARKETPLACE_NAME2)
@@ -298154,7 +298214,7 @@ var init_sessionIngress = __esm(() => {
298154
298214
  });
298155
298215
 
298156
298216
  // src/utils/fileHistory.ts
298157
- import { createHash as createHash23 } from "crypto";
298217
+ import { createHash as createHash24 } from "crypto";
298158
298218
  import {
298159
298219
  chmod as chmod6,
298160
298220
  copyFile as copyFile3,
@@ -298578,7 +298638,7 @@ async function computeDiffStatsForFile(originalFile, backupFileName) {
298578
298638
  };
298579
298639
  }
298580
298640
  function getBackupFileName(filePath, version2) {
298581
- const fileNameHash = createHash23("sha256").update(filePath).digest("hex").slice(0, 16);
298641
+ const fileNameHash = createHash24("sha256").update(filePath).digest("hex").slice(0, 16);
298582
298642
  return `${fileNameHash}@v${version2}`;
298583
298643
  }
298584
298644
  function resolveBackupPath(backupFileName, sessionId) {
@@ -301184,11 +301244,11 @@ var init_filesApi = __esm(() => {
301184
301244
  });
301185
301245
 
301186
301246
  // src/utils/tempfile.ts
301187
- import { createHash as createHash24, randomUUID as randomUUID29 } from "crypto";
301247
+ import { createHash as createHash25, randomUUID as randomUUID29 } from "crypto";
301188
301248
  import { tmpdir as tmpdir6 } from "os";
301189
301249
  import { join as join91 } from "path";
301190
301250
  function generateTempFilePath(prefix = "ur-prompt", extension = ".md", options2) {
301191
- const id = options2?.contentHash ? createHash24("sha256").update(options2.contentHash).digest("hex").slice(0, 16) : randomUUID29();
301251
+ const id = options2?.contentHash ? createHash25("sha256").update(options2.contentHash).digest("hex").slice(0, 16) : randomUUID29();
301192
301252
  return join91(tmpdir6(), `${prefix}-${id}${extension}`);
301193
301253
  }
301194
301254
  var init_tempfile = () => {};
@@ -317108,16 +317168,16 @@ import {
317108
317168
  writeFileSync as writeFileSync17
317109
317169
  } from "fs";
317110
317170
  import {
317111
- createHash as createHash25,
317112
- createPrivateKey,
317113
- createPublicKey,
317171
+ createHash as createHash26,
317172
+ createPrivateKey as createPrivateKey2,
317173
+ createPublicKey as createPublicKey2,
317114
317174
  randomUUID as randomUUID33,
317115
317175
  sign as sign2,
317116
317176
  verify
317117
317177
  } from "crypto";
317118
317178
  import { basename as basename25, join as join95, relative as relative20, sep as sep18 } from "path";
317119
317179
  function sha256(value) {
317120
- return createHash25("sha256").update(value).digest("hex");
317180
+ return createHash26("sha256").update(value).digest("hex");
317121
317181
  }
317122
317182
  function stableJson2(value) {
317123
317183
  if (Array.isArray(value))
@@ -317288,7 +317348,7 @@ function canonicalSignaturePayload(input) {
317288
317348
  }), "utf8");
317289
317349
  }
317290
317350
  function keyFingerprint(key) {
317291
- const der = createPublicKey(key).export({ type: "spki", format: "der" });
317351
+ const der = createPublicKey2(key).export({ type: "spki", format: "der" });
317292
317352
  return sha256(der);
317293
317353
  }
317294
317354
  function trustedSkillKeysPath() {
@@ -317313,7 +317373,7 @@ function loadTrustedSkillKeys(path13 = trustedSkillKeysPath()) {
317313
317373
  if (!KEY_ID.test(keyId) || typeof value !== "string") {
317314
317374
  throw new Error("Trusted skill key store contains an invalid key entry");
317315
317375
  }
317316
- createPublicKey(value);
317376
+ createPublicKey2(value);
317317
317377
  keys2[keyId] = value;
317318
317378
  }
317319
317379
  return keys2;
@@ -317372,7 +317432,7 @@ function verifyManifest(skillDir, name, tree, permissionDigest, trustedKeys) {
317372
317432
  if (signature.length !== 64) {
317373
317433
  return { status: "invalid", ...base2, reason: "Ed25519 signature length is invalid" };
317374
317434
  }
317375
- const valid = verify(null, canonicalSignaturePayload(manifest), createPublicKey(candidate), signature);
317435
+ const valid = verify(null, canonicalSignaturePayload(manifest), createPublicKey2(candidate), signature);
317376
317436
  if (!valid)
317377
317437
  return { status: "invalid", ...base2, reason: "signature verification failed" };
317378
317438
  return { status: trustedKey ? "verified" : "verified-untrusted", ...base2 };
@@ -317432,11 +317492,11 @@ function signSkillDirectory(options2) {
317432
317492
  if (inspected.tree.hasSymlinks) {
317433
317493
  throw new Error("Cannot sign a skill directory containing symlinks");
317434
317494
  }
317435
- const privateKey = createPrivateKey(options2.privateKey);
317495
+ const privateKey = createPrivateKey2(options2.privateKey);
317436
317496
  if (privateKey.asymmetricKeyType !== "ed25519") {
317437
317497
  throw new Error("Skill signing requires an Ed25519 private key");
317438
317498
  }
317439
- const publicKey = createPublicKey(privateKey).export({
317499
+ const publicKey = createPublicKey2(privateKey).export({
317440
317500
  type: "spki",
317441
317501
  format: "pem"
317442
317502
  });
@@ -318398,12 +318458,12 @@ var init_diff2 = __esm(() => {
318398
318458
  });
318399
318459
 
318400
318460
  // src/utils/fileOperationAnalytics.ts
318401
- import { createHash as createHash26 } from "crypto";
318461
+ import { createHash as createHash27 } from "crypto";
318402
318462
  function hashFilePath(filePath) {
318403
- return createHash26("sha256").update(filePath).digest("hex").slice(0, 16);
318463
+ return createHash27("sha256").update(filePath).digest("hex").slice(0, 16);
318404
318464
  }
318405
318465
  function hashFileContent(content) {
318406
- return createHash26("sha256").update(content).digest("hex");
318466
+ return createHash27("sha256").update(content).digest("hex");
318407
318467
  }
318408
318468
  function logFileOperation(params) {
318409
318469
  const metadata = {
@@ -329149,7 +329209,7 @@ var init_embeddings = __esm(() => {
329149
329209
  });
329150
329210
 
329151
329211
  // src/utils/codeIndex/store.ts
329152
- import { createHash as createHash27 } from "crypto";
329212
+ import { createHash as createHash28 } from "crypto";
329153
329213
  import { mkdir as mkdir22, readFile as readFile26, writeFile as writeFile22 } from "fs/promises";
329154
329214
  import { dirname as dirname44, join as join104 } from "path";
329155
329215
  function codeIndexDir(root2) {
@@ -329159,7 +329219,7 @@ function indexPath(root2) {
329159
329219
  return join104(codeIndexDir(root2), "index.json");
329160
329220
  }
329161
329221
  function sha1(content) {
329162
- return createHash27("sha1").update(content).digest("hex");
329222
+ return createHash28("sha1").update(content).digest("hex");
329163
329223
  }
329164
329224
  function cosineSimilarity(a2, b) {
329165
329225
  if (a2.length === 0 || a2.length !== b.length) {
@@ -329708,11 +329768,11 @@ var init_graph = __esm(() => {
329708
329768
  });
329709
329769
 
329710
329770
  // src/utils/codeIndex/repoIndex.ts
329711
- import { createHash as createHash28 } from "crypto";
329771
+ import { createHash as createHash29 } from "crypto";
329712
329772
  import { existsSync as existsSync26, mkdirSync as mkdirSync18, readFileSync as readFileSync29, writeFileSync as writeFileSync19 } from "fs";
329713
329773
  import { join as join106, posix as posix7 } from "path";
329714
329774
  function sha12(content) {
329715
- return createHash28("sha1").update(content).digest("hex");
329775
+ return createHash29("sha1").update(content).digest("hex");
329716
329776
  }
329717
329777
  function posixExt(file2) {
329718
329778
  const dot = file2.lastIndexOf(".");
@@ -344545,7 +344605,7 @@ var init_stream3 = __esm(() => {
344545
344605
  });
344546
344606
 
344547
344607
  // src/utils/telemetry/betaSessionTracing.ts
344548
- import { createHash as createHash29 } from "crypto";
344608
+ import { createHash as createHash30 } from "crypto";
344549
344609
  function clearBetaTracingState() {
344550
344610
  seenHashes.clear();
344551
344611
  lastReportedMessageHash.clear();
@@ -344572,7 +344632,7 @@ function truncateContent(content, maxSize = MAX_CONTENT_SIZE) {
344572
344632
  };
344573
344633
  }
344574
344634
  function shortHash(content) {
344575
- return createHash29("sha256").update(content).digest("hex").slice(0, 12);
344635
+ return createHash30("sha256").update(content).digest("hex").slice(0, 12);
344576
344636
  }
344577
344637
  function hashSystemPrompt(systemPrompt) {
344578
344638
  return `sp_${shortHash(systemPrompt)}`;
@@ -344848,7 +344908,7 @@ function isAnyTracingEnabled() {
344848
344908
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
344849
344909
  }
344850
344910
  function getTracer() {
344851
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.48.0");
344911
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.49.0");
344852
344912
  }
344853
344913
  function createSpanAttributes(spanType, customAttributes = {}) {
344854
344914
  const baseAttributes = getTelemetryAttributes();
@@ -353440,7 +353500,7 @@ var init_toolSearch = __esm(() => {
353440
353500
  });
353441
353501
 
353442
353502
  // src/services/vcr.ts
353443
- import { createHash as createHash30, randomUUID as randomUUID37 } from "crypto";
353503
+ import { createHash as createHash31, randomUUID as randomUUID37 } from "crypto";
353444
353504
  import { mkdir as mkdir24, readFile as readFile33, writeFile as writeFile24 } from "fs/promises";
353445
353505
  import { dirname as dirname46, join as join111 } from "path";
353446
353506
  function shouldUseVCR() {
@@ -353454,7 +353514,7 @@ async function withFixture(input, fixtureName, f) {
353454
353514
  if (!shouldUseVCR()) {
353455
353515
  return await f();
353456
353516
  }
353457
- const hash3 = createHash30("sha1").update(jsonStringify(input)).digest("hex").slice(0, 12);
353517
+ const hash3 = createHash31("sha1").update(jsonStringify(input)).digest("hex").slice(0, 12);
353458
353518
  const filename = join111(process.env.UR_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${fixtureName}-${hash3}.json`);
353459
353519
  try {
353460
353520
  const cached5 = jsonParse(await readFile33(filename, { encoding: "utf8" }));
@@ -353489,7 +353549,7 @@ async function withVCR(messages, f) {
353489
353549
  return true;
353490
353550
  }));
353491
353551
  const dehydratedInput = mapMessages(messagesForAPI.map((_) => _.message.content), dehydrateValue);
353492
- const filename = join111(process.env.UR_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${dehydratedInput.map((_) => createHash30("sha1").update(jsonStringify(_)).digest("hex").slice(0, 6)).join("-")}.json`);
353552
+ const filename = join111(process.env.UR_CODE_TEST_FIXTURES_ROOT ?? getCwd(), `fixtures/${dehydratedInput.map((_) => createHash31("sha1").update(jsonStringify(_)).digest("hex").slice(0, 6)).join("-")}.json`);
353493
353553
  try {
353494
353554
  const cached5 = jsonParse(await readFile33(filename, { encoding: "utf8" }));
353495
353555
  cached5.output.forEach(addCachedCostToTotalSessionCost);
@@ -360416,7 +360476,7 @@ var init_managedPlugins = __esm(() => {
360416
360476
  });
360417
360477
 
360418
360478
  // src/utils/plugins/pluginVersioning.ts
360419
- import { createHash as createHash31 } from "crypto";
360479
+ import { createHash as createHash32 } from "crypto";
360420
360480
  async function calculatePluginVersion(pluginId, source, manifest, installPath, providedVersion, gitCommitSha) {
360421
360481
  if (manifest?.version) {
360422
360482
  logForDebugging(`Using manifest version for ${pluginId}: ${manifest.version}`);
@@ -360430,7 +360490,7 @@ async function calculatePluginVersion(pluginId, source, manifest, installPath, p
360430
360490
  const shortSha = gitCommitSha.substring(0, 12);
360431
360491
  if (typeof source === "object" && source.source === "git-subdir") {
360432
360492
  const normPath = source.path.replace(/\\/g, "/").replace(/^\.\//, "").replace(/\/+$/, "");
360433
- const pathHash = createHash31("sha256").update(normPath).digest("hex").substring(0, 8);
360493
+ const pathHash = createHash32("sha256").update(normPath).digest("hex").substring(0, 8);
360434
360494
  const v = `${shortSha}-${pathHash}`;
360435
360495
  logForDebugging(`Using git-subdir SHA+path version for ${pluginId}: ${v} (path=${normPath})`);
360436
360496
  return v;
@@ -369650,14 +369710,14 @@ var init_terminalSetup = __esm(() => {
369650
369710
  });
369651
369711
 
369652
369712
  // src/utils/pasteStore.ts
369653
- import { createHash as createHash32 } from "crypto";
369713
+ import { createHash as createHash33 } from "crypto";
369654
369714
  import { mkdir as mkdir28, readdir as readdir22, readFile as readFile39, stat as stat37, unlink as unlink17, writeFile as writeFile30 } from "fs/promises";
369655
369715
  import { join as join126 } from "path";
369656
369716
  function getPasteStoreDir() {
369657
369717
  return join126(getURConfigHomeDir(), PASTE_STORE_DIR);
369658
369718
  }
369659
369719
  function hashPastedText(content) {
369660
- return createHash32("sha256").update(content).digest("hex").slice(0, 16);
369720
+ return createHash33("sha256").update(content).digest("hex").slice(0, 16);
369661
369721
  }
369662
369722
  function getPastePath(hash3) {
369663
369723
  return join126(getPasteStoreDir(), `${hash3}.txt`);
@@ -373290,11 +373350,11 @@ var init_sideQuestion = __esm(() => {
373290
373350
  });
373291
373351
 
373292
373352
  // src/services/sideChats/sideChatStore.ts
373293
- import { createHash as createHash33, randomUUID as randomUUID41 } from "crypto";
373353
+ import { createHash as createHash34, randomUUID as randomUUID41 } from "crypto";
373294
373354
  import { existsSync as existsSync29, lstatSync as lstatSync9, readdirSync as readdirSync6 } from "fs";
373295
373355
  import { join as join129 } from "path";
373296
373356
  function digest2(value) {
373297
- return `sha256:${createHash33("sha256").update(value).digest("hex")}`;
373357
+ return `sha256:${createHash34("sha256").update(value).digest("hex")}`;
373298
373358
  }
373299
373359
  function stableJson3(value) {
373300
373360
  if (Array.isArray(value))
@@ -373511,7 +373571,7 @@ var init_sideChatStore = __esm(() => {
373511
373571
  MAX_CONTENT_BYTES = 64 * 1024;
373512
373572
  ID_RE2 = /^[a-zA-Z0-9._-]{1,200}$/;
373513
373573
  DIGEST_RE2 = /^sha256:[a-f0-9]{64}$/;
373514
- GENESIS = `sha256:${createHash33("sha256").update("ur-side-chat-genesis-v1").digest("hex")}`;
373574
+ GENESIS = `sha256:${createHash34("sha256").update("ur-side-chat-genesis-v1").digest("hex")}`;
373515
373575
  });
373516
373576
 
373517
373577
  // src/commands/btw/btw.tsx
@@ -373942,7 +374002,7 @@ function Feedback({
373942
374002
  platform: env2.platform,
373943
374003
  gitRepo: envInfo.isGit,
373944
374004
  terminal: env2.terminal,
373945
- version: "1.48.0",
374005
+ version: "1.49.0",
373946
374006
  transcript: normalizeMessagesForAPI(messages),
373947
374007
  errors: sanitizedErrors,
373948
374008
  lastApiRequest: getLastAPIRequest(),
@@ -374134,7 +374194,7 @@ function Feedback({
374134
374194
  ", ",
374135
374195
  env2.terminal,
374136
374196
  ", v",
374137
- "1.48.0"
374197
+ "1.49.0"
374138
374198
  ]
374139
374199
  }, undefined, true, undefined, this)
374140
374200
  ]
@@ -374240,7 +374300,7 @@ ${sanitizedDescription}
374240
374300
  ` + `**Environment Info**
374241
374301
  ` + `- Platform: ${env2.platform}
374242
374302
  ` + `- Terminal: ${env2.terminal}
374243
- ` + `- Version: ${"1.48.0"}
374303
+ ` + `- Version: ${"1.49.0"}
374244
374304
  ` + `- Feedback ID: ${feedbackId}
374245
374305
  ` + `
374246
374306
  **Errors**
@@ -377351,7 +377411,7 @@ function buildPrimarySection() {
377351
377411
  }, undefined, false, undefined, this);
377352
377412
  return [{
377353
377413
  label: "Version",
377354
- value: "1.48.0"
377414
+ value: "1.49.0"
377355
377415
  }, {
377356
377416
  label: "Session name",
377357
377417
  value: nameValue
@@ -380681,7 +380741,7 @@ function Config({
380681
380741
  }
380682
380742
  }, undefined, false, undefined, this)
380683
380743
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime178.jsxDEV(ChannelDowngradeDialog, {
380684
- currentVersion: "1.48.0",
380744
+ currentVersion: "1.49.0",
380685
380745
  onChoice: (choice) => {
380686
380746
  setShowSubmenu(null);
380687
380747
  setTabsHidden(false);
@@ -380693,7 +380753,7 @@ function Config({
380693
380753
  autoUpdatesChannel: "stable"
380694
380754
  };
380695
380755
  if (choice === "stay") {
380696
- newSettings.minimumVersion = "1.48.0";
380756
+ newSettings.minimumVersion = "1.49.0";
380697
380757
  }
380698
380758
  updateSettingsForSource("userSettings", newSettings);
380699
380759
  setSettingsData((prev_27) => ({
@@ -388763,7 +388823,7 @@ function HelpV2(t0) {
388763
388823
  let t6;
388764
388824
  if ($2[31] !== tabs) {
388765
388825
  t6 = /* @__PURE__ */ jsx_dev_runtime205.jsxDEV(Tabs, {
388766
- title: `UR v${"1.48.0"}`,
388826
+ title: `UR v${"1.49.0"}`,
388767
388827
  color: "professionalBlue",
388768
388828
  defaultTab: "general",
388769
388829
  children: tabs
@@ -389680,7 +389740,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
389680
389740
  async function handleInitialize(options2) {
389681
389741
  return {
389682
389742
  name: "UR",
389683
- version: "1.48.0",
389743
+ version: "1.49.0",
389684
389744
  protocolVersion: "0.1.0",
389685
389745
  workspaceRoot: options2.cwd,
389686
389746
  capabilities: {
@@ -392383,7 +392443,7 @@ var init_guardrails = __esm(() => {
392383
392443
  });
392384
392444
 
392385
392445
  // src/services/agents/agenticCi.ts
392386
- import { createHash as createHash34, randomUUID as randomUUID44 } from "crypto";
392446
+ import { createHash as createHash35, randomUUID as randomUUID44 } from "crypto";
392387
392447
  import {
392388
392448
  existsSync as existsSync32,
392389
392449
  mkdtempSync,
@@ -392714,7 +392774,7 @@ function boundedTail(text, maxChars = AGENTIC_CI_MAX_LOG_CHARS) {
392714
392774
  return value.length <= maxChars ? value : value.slice(-maxChars);
392715
392775
  }
392716
392776
  function sha2562(value) {
392717
- return createHash34("sha256").update(value).digest("hex");
392777
+ return createHash35("sha256").update(value).digest("hex");
392718
392778
  }
392719
392779
  function containsPath(base2, candidate) {
392720
392780
  const rel = relative35(resolve49(base2), resolve49(candidate));
@@ -393160,7 +393220,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
393160
393220
  if (spec.name !== specName) {
393161
393221
  throw new Error("Agentic CI workflow spec name does not match");
393162
393222
  }
393163
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.48.0" : "1.48.0");
393223
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.49.0" : "1.48.0");
393164
393224
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
393165
393225
  throw new Error("invalid ur-agent package version");
393166
393226
  }
@@ -393356,7 +393416,7 @@ jobs:
393356
393416
  `;
393357
393417
  var init_github_app = __esm(() => {
393358
393418
  init_agenticCi();
393359
- urVersion2 = typeof MACRO !== "undefined" ? "1.48.0" : "1.48.0";
393419
+ urVersion2 = typeof MACRO !== "undefined" ? "1.49.0" : "1.48.0";
393360
393420
  WORKFLOW_CONTENT = compileAgenticCiWorkflow("default", {
393361
393421
  packageVersion: urVersion2
393362
393422
  });
@@ -411347,7 +411407,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
411347
411407
  return [];
411348
411408
  }
411349
411409
  }
411350
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.48.0") {
411410
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.49.0") {
411351
411411
  if (process.env.USER_TYPE === "ant") {
411352
411412
  const changelog = "";
411353
411413
  if (changelog) {
@@ -411374,7 +411434,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.48.0")
411374
411434
  releaseNotes
411375
411435
  };
411376
411436
  }
411377
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.48.0") {
411437
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.49.0") {
411378
411438
  if (process.env.USER_TYPE === "ant") {
411379
411439
  const changelog = "";
411380
411440
  if (changelog) {
@@ -414231,7 +414291,7 @@ function getRecentActivitySync() {
414231
414291
  return cachedActivity;
414232
414292
  }
414233
414293
  function getLogoDisplayData() {
414234
- const version2 = process.env.DEMO_VERSION ?? "1.48.0";
414294
+ const version2 = process.env.DEMO_VERSION ?? "1.49.0";
414235
414295
  const serverUrl = getDirectConnectServerUrl();
414236
414296
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
414237
414297
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -415115,7 +415175,7 @@ function LogoV2() {
415115
415175
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
415116
415176
  t2 = () => {
415117
415177
  const currentConfig2 = getGlobalConfig();
415118
- if (currentConfig2.lastReleaseNotesSeen === "1.48.0") {
415178
+ if (currentConfig2.lastReleaseNotesSeen === "1.49.0") {
415119
415179
  return;
415120
415180
  }
415121
415181
  saveGlobalConfig(_temp327);
@@ -415800,12 +415860,12 @@ function LogoV2() {
415800
415860
  return t41;
415801
415861
  }
415802
415862
  function _temp327(current) {
415803
- if (current.lastReleaseNotesSeen === "1.48.0") {
415863
+ if (current.lastReleaseNotesSeen === "1.49.0") {
415804
415864
  return current;
415805
415865
  }
415806
415866
  return {
415807
415867
  ...current,
415808
- lastReleaseNotesSeen: "1.48.0"
415868
+ lastReleaseNotesSeen: "1.49.0"
415809
415869
  };
415810
415870
  }
415811
415871
  function _temp243(s_0) {
@@ -431301,7 +431361,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
431301
431361
  path: ".github/workflows/ur.yml",
431302
431362
  root: "project",
431303
431363
  content: compileAgenticCiWorkflow("default", {
431304
- packageVersion: typeof MACRO !== "undefined" ? "1.48.0" : "1.48.0"
431364
+ packageVersion: typeof MACRO !== "undefined" ? "1.49.0" : "1.48.0"
431305
431365
  })
431306
431366
  },
431307
431367
  {
@@ -431364,7 +431424,7 @@ function value(tokens, flag) {
431364
431424
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
431365
431425
  }
431366
431426
  function cliVersion() {
431367
- return typeof MACRO !== "undefined" ? "1.48.0" : "1.48.0";
431427
+ return typeof MACRO !== "undefined" ? "1.49.0" : "1.48.0";
431368
431428
  }
431369
431429
  function workflowPath(cwd2) {
431370
431430
  return join155(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -437220,7 +437280,7 @@ function createAcpStdioApp(deps) {
437220
437280
  }
437221
437281
  },
437222
437282
  authMethods: [],
437223
- agentInfo: { name: "UR-Nexus", version: "1.48.0" }
437283
+ agentInfo: { name: "UR-Nexus", version: "1.49.0" }
437224
437284
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
437225
437285
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
437226
437286
  await runtime2.announce({
@@ -437317,7 +437377,7 @@ function createAcpStdioAgent(deps) {
437317
437377
  }
437318
437378
  },
437319
437379
  authMethods: [],
437320
- agentInfo: { name: "UR-Nexus", version: "1.48.0" }
437380
+ agentInfo: { name: "UR-Nexus", version: "1.49.0" }
437321
437381
  });
437322
437382
  return;
437323
437383
  case "authenticate":
@@ -438065,7 +438125,7 @@ var init_connect2 = __esm(() => {
438065
438125
  });
438066
438126
 
438067
438127
  // src/services/agents/scheduler.ts
438068
- import { createHash as createHash35 } from "crypto";
438128
+ import { createHash as createHash36 } from "crypto";
438069
438129
  import { existsSync as existsSync39, mkdirSync as mkdirSync30, unlinkSync as unlinkSync8, writeFileSync as writeFileSync30 } from "fs";
438070
438130
  import { homedir as homedir31 } from "os";
438071
438131
  import { join as join157 } from "path";
@@ -438073,7 +438133,7 @@ function defaultBin() {
438073
438133
  return { file: process.execPath, args: [process.argv[1] ?? ""] };
438074
438134
  }
438075
438135
  function schedulerLabel(cwd2) {
438076
- const hash3 = createHash35("sha1").update(cwd2).digest("hex").slice(0, 8);
438136
+ const hash3 = createHash36("sha1").update(cwd2).digest("hex").slice(0, 8);
438077
438137
  return `com.ur.automation.${hash3}`;
438078
438138
  }
438079
438139
  function detectPlatform() {
@@ -442529,7 +442589,7 @@ var exports_skill = {};
442529
442589
  __export(exports_skill, {
442530
442590
  call: () => call66
442531
442591
  });
442532
- import { generateKeyPairSync, randomUUID as randomUUID47 } from "crypto";
442592
+ import { generateKeyPairSync as generateKeyPairSync2, randomUUID as randomUUID47 } from "crypto";
442533
442593
  import {
442534
442594
  chmodSync as chmodSync8,
442535
442595
  existsSync as existsSync47,
@@ -442697,7 +442757,7 @@ var VALUE_OPTIONS, call66 = async (args) => {
442697
442757
  if (existingKeys[name]) {
442698
442758
  throw new Error(`Trusted key ID already exists: ${name}`);
442699
442759
  }
442700
- const { privateKey, publicKey } = generateKeyPairSync("ed25519");
442760
+ const { privateKey, publicKey } = generateKeyPairSync2("ed25519");
442701
442761
  const privatePem = privateKey.export({ type: "pkcs8", format: "pem" });
442702
442762
  const publicPem = publicKey.export({ type: "spki", format: "pem" }).toString();
442703
442763
  mkdirSync37(dirname68(privatePath), { recursive: true, mode: 448 });
@@ -443069,11 +443129,11 @@ var init_worktree2 = __esm(() => {
443069
443129
  });
443070
443130
 
443071
443131
  // src/services/agents/auditExport.ts
443072
- import { createHash as createHash36 } from "crypto";
443132
+ import { createHash as createHash37 } from "crypto";
443073
443133
  import { existsSync as existsSync48, readFileSync as readFileSync48 } from "fs";
443074
443134
  import { join as join168 } from "path";
443075
443135
  function chainHash(prev, payload) {
443076
- return createHash36("sha256").update(prev).update(JSON.stringify(payload)).digest("hex");
443136
+ return createHash37("sha256").update(prev).update(JSON.stringify(payload)).digest("hex");
443077
443137
  }
443078
443138
  function readActionsLedger(cwd2) {
443079
443139
  const path22 = join168(cwd2, ".ur", "actions.jsonl");
@@ -443540,7 +443600,7 @@ var init_recipe2 = __esm(() => {
443540
443600
  });
443541
443601
 
443542
443602
  // src/services/agents/arena.ts
443543
- import { createHash as createHash37, randomUUID as randomUUID48 } from "crypto";
443603
+ import { createHash as createHash38, randomUUID as randomUUID48 } from "crypto";
443544
443604
  import {
443545
443605
  existsSync as existsSync52,
443546
443606
  mkdirSync as mkdirSync39,
@@ -443989,7 +444049,7 @@ async function removeWorktree(cwd2, worktree2) {
443989
444049
  rmSync12(worktree2, { recursive: true, force: true });
443990
444050
  }
443991
444051
  function sha2563(value2) {
443992
- return createHash37("sha256").update(value2).digest("hex");
444052
+ return createHash38("sha256").update(value2).digest("hex");
443993
444053
  }
443994
444054
  function sanitizeCandidate(candidate, retainWorktree = false) {
443995
444055
  return {
@@ -444401,7 +444461,7 @@ function createDefaultManagedCloudClient() {
444401
444461
  var init_cloudManagedRunner = () => {};
444402
444462
 
444403
444463
  // src/services/agents/cloudTasks.ts
444404
- import { createHash as createHash38, randomUUID as randomUUID50 } from "crypto";
444464
+ import { createHash as createHash39, randomUUID as randomUUID50 } from "crypto";
444405
444465
  import { spawn as spawn14 } from "child_process";
444406
444466
  import {
444407
444467
  appendFileSync as appendFileSync6,
@@ -445065,7 +445125,7 @@ async function steerCloudTask(cwd2, id, message, options2 = {}) {
445065
445125
  reason: "message must be between 1 byte and 64 KiB"
445066
445126
  };
445067
445127
  }
445068
- const messageSha256 = createHash38("sha256").update(trimmed).digest("hex");
445128
+ const messageSha256 = createHash39("sha256").update(trimmed).digest("hex");
445069
445129
  const reservation = withManifestMutation(cwd2, (manifest) => {
445070
445130
  const task = manifest.tasks.find((candidate) => candidate.id === id);
445071
445131
  if (!task)
@@ -449809,7 +449869,7 @@ var init_escalate2 = __esm(() => {
449809
449869
  });
449810
449870
 
449811
449871
  // src/services/agents/learnedPlaybooks.ts
449812
- import { createHash as createHash39 } from "crypto";
449872
+ import { createHash as createHash40 } from "crypto";
449813
449873
  import {
449814
449874
  chmodSync as chmodSync10,
449815
449875
  existsSync as existsSync66,
@@ -449824,7 +449884,7 @@ function storePath(cwd2) {
449824
449884
  return join185(learningDir2(cwd2), "playbooks.json");
449825
449885
  }
449826
449886
  function digest3(value2) {
449827
- return `sha256:${createHash39("sha256").update(JSON.stringify(value2)).digest("hex")}`;
449887
+ return `sha256:${createHash40("sha256").update(JSON.stringify(value2)).digest("hex")}`;
449828
449888
  }
449829
449889
  function emptyStore() {
449830
449890
  return { version: 1, candidates: [] };
@@ -450029,7 +450089,7 @@ function mineLearnedPlaybooks(cwd2, options2 = {}) {
450029
450089
  }));
450030
450090
  generated.push({
450031
450091
  version: 1,
450032
- id: `lp-${createHash39("sha256").update(fingerprint2).digest("hex").slice(0, 16)}`,
450092
+ id: `lp-${createHash40("sha256").update(fingerprint2).digest("hex").slice(0, 16)}`,
450033
450093
  name,
450034
450094
  status: "candidate",
450035
450095
  revision: 1,
@@ -453996,7 +454056,7 @@ var init_sdk2 = __esm(() => {
453996
454056
  });
453997
454057
 
453998
454058
  // src/services/agents/trajectory.ts
453999
- import { createHash as createHash40 } from "crypto";
454059
+ import { createHash as createHash41 } from "crypto";
454000
454060
  function record3(value2) {
454001
454061
  return value2 && typeof value2 === "object" ? value2 : {};
454002
454062
  }
@@ -454009,7 +454069,7 @@ function normalizeTrajectoryTool(value2) {
454009
454069
  function opaqueId(value2) {
454010
454070
  if (typeof value2 !== "string" || !value2)
454011
454071
  return;
454012
- return createHash40("sha256").update(value2).digest("hex").slice(0, 16);
454072
+ return createHash41("sha256").update(value2).digest("hex").slice(0, 16);
454013
454073
  }
454014
454074
  function contentBlocks(message) {
454015
454075
  const content = record3(message).content;
@@ -456950,7 +457010,7 @@ var init_os2 = __esm(() => {
456950
457010
  });
456951
457011
 
456952
457012
  // src/services/agents/workspaceCoordinator.ts
456953
- import { createHash as createHash41, randomUUID as randomUUID53 } from "crypto";
457013
+ import { createHash as createHash42, randomUUID as randomUUID53 } from "crypto";
456954
457014
  import { existsSync as existsSync76, lstatSync as lstatSync18, realpathSync as realpathSync15, rmSync as rmSync17 } from "fs";
456955
457015
  import { tmpdir as tmpdir13 } from "os";
456956
457016
  import { dirname as dirname72, isAbsolute as isAbsolute42, join as join195, relative as relative46, resolve as resolve63 } from "path";
@@ -456970,7 +457030,7 @@ function assertId(value2, label) {
456970
457030
  throw new Error(`Invalid ${label}: ${value2}`);
456971
457031
  }
456972
457032
  function hash3(value2) {
456973
- return `sha256:${createHash41("sha256").update(value2).digest("hex")}`;
457033
+ return `sha256:${createHash42("sha256").update(value2).digest("hex")}`;
456974
457034
  }
456975
457035
  function stableJson4(value2) {
456976
457036
  if (Array.isArray(value2))
@@ -458055,7 +458115,7 @@ var init_project2 = __esm(() => {
458055
458115
  });
458056
458116
 
458057
458117
  // src/ur/notes.ts
458058
- import { createHash as createHash42 } from "crypto";
458118
+ import { createHash as createHash43 } from "crypto";
458059
458119
  import { appendFileSync as appendFileSync7, existsSync as existsSync77, mkdirSync as mkdirSync57, readFileSync as readFileSync72, writeFileSync as writeFileSync58 } from "fs";
458060
458120
  import { dirname as dirname73, join as join196 } from "path";
458061
458121
  function readJsonl(file2) {
@@ -458079,7 +458139,7 @@ function append2(file2, rec) {
458079
458139
  }
458080
458140
  function memorySlug(text) {
458081
458141
  const words = text.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").split("-").filter(Boolean).slice(0, 8).join("-");
458082
- const hash4 = createHash42("sha1").update(text).digest("hex").slice(0, 8);
458142
+ const hash4 = createHash43("sha1").update(text).digest("hex").slice(0, 8);
458083
458143
  return `${words || "remembered-note"}-${hash4}`;
458084
458144
  }
458085
458145
  function yamlSingleQuote(value2) {
@@ -459076,7 +459136,7 @@ var init_code_index2 = __esm(() => {
459076
459136
 
459077
459137
  // node_modules/typescript/lib/typescript.js
459078
459138
  var require_typescript2 = __commonJS((exports, module) => {
459079
- var __dirname = "/Users/maith/Desktop/ur3-dev/UR-1.43.3/node_modules/typescript/lib", __filename = "/Users/maith/Desktop/ur3-dev/UR-1.43.3/node_modules/typescript/lib/typescript.js";
459139
+ var __dirname = "/sessions/practical-focused-tesla/mnt/UR-1.43.3/node_modules/typescript/lib", __filename = "/sessions/practical-focused-tesla/mnt/UR-1.43.3/node_modules/typescript/lib/typescript.js";
459080
459140
  /*! *****************************************************************************
459081
459141
  Copyright (c) Microsoft Corporation. All rights reserved.
459082
459142
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
@@ -644796,7 +644856,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
644796
644856
  smapsRollup,
644797
644857
  platform: process.platform,
644798
644858
  nodeVersion: process.version,
644799
- ccVersion: "1.48.0"
644859
+ ccVersion: "1.49.0"
644800
644860
  };
644801
644861
  }
644802
644862
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -645382,7 +645442,7 @@ var init_bridge_kick = __esm(() => {
645382
645442
  var call145 = async () => {
645383
645443
  return {
645384
645444
  type: "text",
645385
- value: "1.48.0"
645445
+ value: "1.49.0"
645386
645446
  };
645387
645447
  }, version2, version_default;
645388
645448
  var init_version = __esm(() => {
@@ -656500,7 +656560,7 @@ function generateHtmlReport(data, insights) {
656500
656560
  </html>`;
656501
656561
  }
656502
656562
  function buildExportData(data, insights, facets, remoteStats) {
656503
- const version3 = typeof MACRO !== "undefined" ? "1.48.0" : "unknown";
656563
+ const version3 = typeof MACRO !== "undefined" ? "1.49.0" : "unknown";
656504
656564
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
656505
656565
  const facets_summary = {
656506
656566
  total: facets.size,
@@ -660833,7 +660893,7 @@ var init_sessionStorage = __esm(() => {
660833
660893
  init_settings2();
660834
660894
  init_slowOperations();
660835
660895
  init_uuid();
660836
- VERSION7 = typeof MACRO !== "undefined" ? "1.48.0" : "unknown";
660896
+ VERSION7 = typeof MACRO !== "undefined" ? "1.49.0" : "unknown";
660837
660897
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
660838
660898
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
660839
660899
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -662048,7 +662108,7 @@ var init_filesystem = __esm(() => {
662048
662108
  });
662049
662109
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
662050
662110
  const nonce = randomBytes19(16).toString("hex");
662051
- return join224(getURTempDir(), "bundled-skills", "1.48.0", nonce);
662111
+ return join224(getURTempDir(), "bundled-skills", "1.49.0", nonce);
662052
662112
  });
662053
662113
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
662054
662114
  });
@@ -667900,7 +667960,7 @@ var init_prompts4 = __esm(() => {
667900
667960
  });
667901
667961
 
667902
667962
  // src/utils/api.ts
667903
- import { createHash as createHash43 } from "crypto";
667963
+ import { createHash as createHash44 } from "crypto";
667904
667964
  function filterSwarmFieldsFromSchema(toolName, schema) {
667905
667965
  const fieldsToRemove = SWARM_FIELDS_BY_TOOL[toolName];
667906
667966
  if (!fieldsToRemove || fieldsToRemove.length === 0) {
@@ -667990,7 +668050,7 @@ function logAPIPrefix(systemPrompt) {
667990
668050
  logEvent("tengu_sysprompt_block", {
667991
668051
  snippet: firstSystemPrompt?.slice(0, 20),
667992
668052
  length: firstSystemPrompt?.length ?? 0,
667993
- hash: firstSystemPrompt ? createHash43("sha256").update(firstSystemPrompt).digest("hex") : ""
668053
+ hash: firstSystemPrompt ? createHash44("sha256").update(firstSystemPrompt).digest("hex") : ""
667994
668054
  });
667995
668055
  }
667996
668056
  function splitSysPromptPrefix(systemPrompt, options4) {
@@ -668316,7 +668376,7 @@ var init_api3 = __esm(() => {
668316
668376
  });
668317
668377
 
668318
668378
  // src/utils/fingerprint.ts
668319
- import { createHash as createHash44 } from "crypto";
668379
+ import { createHash as createHash45 } from "crypto";
668320
668380
  function extractFirstMessageText(messages) {
668321
668381
  const firstUserMessage = messages.find((msg) => msg.type === "user");
668322
668382
  if (!firstUserMessage) {
@@ -668338,12 +668398,12 @@ function computeFingerprint(messageText2, version3) {
668338
668398
  const indices = [4, 7, 20];
668339
668399
  const chars = indices.map((i3) => messageText2[i3] || "0").join("");
668340
668400
  const fingerprintInput = `${FINGERPRINT_SALT}${chars}${version3}`;
668341
- const hash4 = createHash44("sha256").update(fingerprintInput).digest("hex");
668401
+ const hash4 = createHash45("sha256").update(fingerprintInput).digest("hex");
668342
668402
  return hash4.slice(0, 3);
668343
668403
  }
668344
668404
  function computeFingerprintFromMessages(messages) {
668345
668405
  const firstMessageText = extractFirstMessageText(messages);
668346
- return computeFingerprint(firstMessageText, "1.48.0");
668406
+ return computeFingerprint(firstMessageText, "1.49.0");
668347
668407
  }
668348
668408
  var FINGERPRINT_SALT = "59cf53e54c78";
668349
668409
  var init_fingerprint = () => {};
@@ -670239,7 +670299,7 @@ async function sideQuery(opts) {
670239
670299
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
670240
670300
  }
670241
670301
  const messageText2 = extractFirstUserMessageText(messages);
670242
- const fingerprint2 = computeFingerprint(messageText2, "1.48.0");
670302
+ const fingerprint2 = computeFingerprint(messageText2, "1.49.0");
670243
670303
  const attributionHeader = getAttributionHeader(fingerprint2);
670244
670304
  const systemBlocks = [
670245
670305
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -675010,7 +675070,7 @@ function buildSystemInitMessage(inputs) {
675010
675070
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
675011
675071
  apiKeySource: getURHQApiKeyWithSource().source,
675012
675072
  betas: getSdkBetas(),
675013
- ur_version: "1.48.0",
675073
+ ur_version: "1.49.0",
675014
675074
  output_style: outputStyle2,
675015
675075
  agents: inputs.agents.map((agent2) => agent2.agentType),
675016
675076
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -688870,7 +688930,7 @@ var init_useVoiceEnabled = __esm(() => {
688870
688930
  function getSemverPart(version3) {
688871
688931
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
688872
688932
  }
688873
- function useUpdateNotification(updatedVersion, initialVersion = "1.48.0") {
688933
+ function useUpdateNotification(updatedVersion, initialVersion = "1.49.0") {
688874
688934
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react228.useState(() => getSemverPart(initialVersion));
688875
688935
  if (!updatedVersion) {
688876
688936
  return null;
@@ -688919,7 +688979,7 @@ function AutoUpdater({
688919
688979
  return;
688920
688980
  }
688921
688981
  if (false) {}
688922
- const currentVersion = "1.48.0";
688982
+ const currentVersion = "1.49.0";
688923
688983
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
688924
688984
  let latestVersion = await getLatestVersion(channel);
688925
688985
  const isDisabled = isAutoUpdaterDisabled();
@@ -689148,12 +689208,12 @@ function NativeAutoUpdater({
689148
689208
  logEvent("tengu_native_auto_updater_start", {});
689149
689209
  try {
689150
689210
  const maxVersion = await getMaxVersion();
689151
- if (maxVersion && gt("1.48.0", maxVersion)) {
689211
+ if (maxVersion && gt("1.49.0", maxVersion)) {
689152
689212
  const msg = await getMaxVersionMessage();
689153
689213
  setMaxVersionIssue(msg ?? "affects your version");
689154
689214
  }
689155
689215
  const result = await installLatest(channel);
689156
- const currentVersion = "1.48.0";
689216
+ const currentVersion = "1.49.0";
689157
689217
  const latencyMs = Date.now() - startTime;
689158
689218
  if (result.lockFailed) {
689159
689219
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -689290,17 +689350,17 @@ function PackageManagerAutoUpdater(t0) {
689290
689350
  const maxVersion = await getMaxVersion();
689291
689351
  if (maxVersion && latest && gt(latest, maxVersion)) {
689292
689352
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
689293
- if (gte("1.48.0", maxVersion)) {
689294
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.48.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
689353
+ if (gte("1.49.0", maxVersion)) {
689354
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.49.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
689295
689355
  setUpdateAvailable(false);
689296
689356
  return;
689297
689357
  }
689298
689358
  latest = maxVersion;
689299
689359
  }
689300
- const hasUpdate = latest && !gte("1.48.0", latest) && !shouldSkipVersion(latest);
689360
+ const hasUpdate = latest && !gte("1.49.0", latest) && !shouldSkipVersion(latest);
689301
689361
  setUpdateAvailable(!!hasUpdate);
689302
689362
  if (hasUpdate) {
689303
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.48.0"} -> ${latest}`);
689363
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.49.0"} -> ${latest}`);
689304
689364
  }
689305
689365
  };
689306
689366
  $2[0] = t1;
@@ -689334,7 +689394,7 @@ function PackageManagerAutoUpdater(t0) {
689334
689394
  wrap: "truncate",
689335
689395
  children: [
689336
689396
  "currentVersion: ",
689337
- "1.48.0"
689397
+ "1.49.0"
689338
689398
  ]
689339
689399
  }, undefined, true, undefined, this);
689340
689400
  $2[3] = verbose;
@@ -700031,7 +700091,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
700031
700091
  project_dir: getOriginalCwd(),
700032
700092
  added_dirs: addedDirs
700033
700093
  },
700034
- version: "1.48.0",
700094
+ version: "1.49.0",
700035
700095
  output_style: {
700036
700096
  name: outputStyleName
700037
700097
  },
@@ -700114,7 +700174,7 @@ function StatusLineInner({
700114
700174
  const taskValues = Object.values(tasks2);
700115
700175
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
700116
700176
  const defaultStatusLineText = buildDefaultStatusBar({
700117
- version: "1.48.0",
700177
+ version: "1.49.0",
700118
700178
  providerLabel: providerRuntime.providerLabel,
700119
700179
  authMode: providerRuntime.authLabel,
700120
700180
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -712257,7 +712317,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
712257
712317
  } catch {}
712258
712318
  const data = {
712259
712319
  trigger: trigger2,
712260
- version: "1.48.0",
712320
+ version: "1.49.0",
712261
712321
  platform: process.platform,
712262
712322
  transcript,
712263
712323
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -724543,7 +724603,7 @@ function WelcomeV2() {
724543
724603
  dimColor: true,
724544
724604
  children: [
724545
724605
  "v",
724546
- "1.48.0"
724606
+ "1.49.0"
724547
724607
  ]
724548
724608
  }, undefined, true, undefined, this)
724549
724609
  ]
@@ -725803,7 +725863,7 @@ function completeOnboarding() {
725803
725863
  saveGlobalConfig((current) => ({
725804
725864
  ...current,
725805
725865
  hasCompletedOnboarding: true,
725806
- lastOnboardingVersion: "1.48.0"
725866
+ lastOnboardingVersion: "1.49.0"
725807
725867
  }));
725808
725868
  }
725809
725869
  function showDialog(root2, renderer) {
@@ -730847,7 +730907,7 @@ function appendToLog(path24, message) {
730847
730907
  cwd: getFsImplementation().cwd(),
730848
730908
  userType: process.env.USER_TYPE,
730849
730909
  sessionId: getSessionId(),
730850
- version: "1.48.0"
730910
+ version: "1.49.0"
730851
730911
  };
730852
730912
  getLogWriter(path24).write(messageWithTimestamp);
730853
730913
  }
@@ -735006,8 +735066,8 @@ async function getEnvLessBridgeConfig() {
735006
735066
  }
735007
735067
  async function checkEnvLessBridgeMinVersion() {
735008
735068
  const cfg = await getEnvLessBridgeConfig();
735009
- if (cfg.min_version && lt("1.48.0", cfg.min_version)) {
735010
- return `Your version of UR (${"1.48.0"}) is too old for Remote Control.
735069
+ if (cfg.min_version && lt("1.49.0", cfg.min_version)) {
735070
+ return `Your version of UR (${"1.49.0"}) is too old for Remote Control.
735011
735071
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
735012
735072
  }
735013
735073
  return null;
@@ -735481,7 +735541,7 @@ async function initBridgeCore(params) {
735481
735541
  const rawApi = createBridgeApiClient({
735482
735542
  baseUrl,
735483
735543
  getAccessToken,
735484
- runnerVersion: "1.48.0",
735544
+ runnerVersion: "1.49.0",
735485
735545
  onDebug: logForDebugging,
735486
735546
  onAuth401,
735487
735547
  getTrustedDeviceToken
@@ -744829,7 +744889,7 @@ __export(exports_agUi, {
744829
744889
  getAgUiCapabilities: () => getAgUiCapabilities,
744830
744890
  createAgUiHttpHandler: () => createAgUiHttpHandler
744831
744891
  });
744832
- import { createHash as createHash45 } from "crypto";
744892
+ import { createHash as createHash46 } from "crypto";
744833
744893
  function isLoopback4(host) {
744834
744894
  const normalized = host.toLowerCase();
744835
744895
  return normalized === "127.0.0.1" || normalized === "localhost" || normalized === "::1" || normalized === "0:0:0:0:0:0:0:1";
@@ -744886,7 +744946,7 @@ function authenticate(request, token) {
744886
744946
  }
744887
744947
  return {
744888
744948
  ok: true,
744889
- owner: `bearer:${createHash45("sha256").update(supplied).digest("base64url")}`
744949
+ owner: `bearer:${createHash46("sha256").update(supplied).digest("base64url")}`
744890
744950
  };
744891
744951
  }
744892
744952
  function allowedOrigin(request, allowedOrigins) {
@@ -744950,7 +745010,7 @@ function getAgUiCapabilities() {
744950
745010
  name: "UR-Nexus",
744951
745011
  type: "ur-nexus",
744952
745012
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
744953
- version: "1.48.0",
745013
+ version: "1.49.0",
744954
745014
  provider: "UR",
744955
745015
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
744956
745016
  },
@@ -746090,7 +746150,7 @@ function createMCPServer(cwd4, debug2, verbose) {
746090
746150
  };
746091
746151
  const server2 = new Server({
746092
746152
  name: "ur-nexus",
746093
- version: "1.48.0"
746153
+ version: "1.49.0"
746094
746154
  }, {
746095
746155
  capabilities: {
746096
746156
  tools: {}
@@ -747103,7 +747163,7 @@ __export(exports_mcp2026, {
747103
747163
  createUrMcp2026Runtime: () => createUrMcp2026Runtime,
747104
747164
  createMcp2026HttpHandler: () => createMcp2026HttpHandler
747105
747165
  });
747106
- import { createHash as createHash46 } from "crypto";
747166
+ import { createHash as createHash47 } from "crypto";
747107
747167
  function isRecord7(value2) {
747108
747168
  return Boolean(value2) && typeof value2 === "object" && !Array.isArray(value2);
747109
747169
  }
@@ -747144,7 +747204,7 @@ function authenticate2(request, token) {
747144
747204
  }
747145
747205
  return {
747146
747206
  ok: true,
747147
- owner: `bearer:${createHash46("sha256").update(supplied).digest("base64url")}`
747207
+ owner: `bearer:${createHash47("sha256").update(supplied).digest("base64url")}`
747148
747208
  };
747149
747209
  }
747150
747210
  function response(status2, body, origin2, extraHeaders = {}) {
@@ -747248,7 +747308,7 @@ function thrownResponse(error40) {
747248
747308
  }
747249
747309
  async function createUrMcp2026Runtime(options4) {
747250
747310
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
747251
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.48.0" }, { capabilities: {} });
747311
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.49.0" }, { capabilities: {} });
747252
747312
  const [clientTransport, serverTransport] = createLinkedTransportPair();
747253
747313
  try {
747254
747314
  await server2.connect(serverTransport);
@@ -747259,7 +747319,7 @@ async function createUrMcp2026Runtime(options4) {
747259
747319
  }
747260
747320
  const runtime2 = new Mcp2026Runtime({
747261
747321
  cwd: options4.cwd,
747262
- version: "1.48.0",
747322
+ version: "1.49.0",
747263
747323
  backend: {
747264
747324
  listTools: async () => {
747265
747325
  const listed = await client2.listTools();
@@ -749392,7 +749452,7 @@ async function update() {
749392
749452
  logEvent("tengu_update_check", {});
749393
749453
  const diagnostic2 = await getDoctorDiagnostic();
749394
749454
  const result = await checkUpgradeStatus({
749395
- currentVersion: "1.48.0",
749455
+ currentVersion: "1.49.0",
749396
749456
  packageName: UR_AGENT_PACKAGE_NAME,
749397
749457
  installationType: diagnostic2.installationType,
749398
749458
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -750708,7 +750768,7 @@ ${customInstructions}` : customInstructions;
750708
750768
  }
750709
750769
  }
750710
750770
  logForDiagnosticsNoPII("info", "started", {
750711
- version: "1.48.0",
750771
+ version: "1.49.0",
750712
750772
  is_native_binary: isInBundledMode()
750713
750773
  });
750714
750774
  registerCleanup(async () => {
@@ -751494,7 +751554,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
751494
751554
  pendingHookMessages
751495
751555
  }, renderAndRun);
751496
751556
  }
751497
- }).version("1.48.0 (UR-Nexus)", "-v, --version", "Output the version number");
751557
+ }).version("1.49.0 (UR-Nexus)", "-v, --version", "Output the version number");
751498
751558
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
751499
751559
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
751500
751560
  if (canUserConfigureAdvisor()) {
@@ -752510,7 +752570,7 @@ if (false) {}
752510
752570
  async function main2() {
752511
752571
  const args = process.argv.slice(2);
752512
752572
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
752513
- console.log(`${"1.48.0"} (UR-Nexus)`);
752573
+ console.log(`${"1.49.0"} (UR-Nexus)`);
752514
752574
  return;
752515
752575
  }
752516
752576
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {