ur-agent 1.60.0 → 1.60.1

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,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.60.1
4
+
5
+ - `ur memory-integrity verify` no longer reports an empty or missing store as
6
+ verified. It printed "verified — 0 file(s) match the recorded digests" for an
7
+ empty directory, and that identical reassurance would have appeared for a
8
+ mistyped path or a store an attacker had just emptied. Zero files checked is
9
+ not evidence of integrity, so empty and nonexistent stores now say exactly
10
+ that and name the path.
11
+ - The exit code tracks tampering rather than validity, so an empty or
12
+ unbaselined store still exits 0. Failing on it would fire for every fresh
13
+ install and train the user to ignore the exit code.
14
+ - `ur agent-inspect --costs` names the directory it searched. "No subagent
15
+ transcripts found for this session" was indistinguishable from having
16
+ resolved the wrong path.
17
+
3
18
  ## 1.60.0
4
19
 
5
20
  - Added `ur memory-integrity`, tamper-evidence for the file-backed memory
package/dist/cli.js CHANGED
@@ -75204,7 +75204,7 @@ var init_auth = __esm(() => {
75204
75204
 
75205
75205
  // src/utils/userAgent.ts
75206
75206
  function getURCodeUserAgent() {
75207
- return `ur/${"1.60.0"}`;
75207
+ return `ur/${"1.60.1"}`;
75208
75208
  }
75209
75209
 
75210
75210
  // src/utils/workloadContext.ts
@@ -75226,7 +75226,7 @@ function getUserAgent() {
75226
75226
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
75227
75227
  const workload = getWorkload();
75228
75228
  const workloadSuffix = workload ? `, workload/${workload}` : "";
75229
- return `ur-cli/${"1.60.0"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75229
+ return `ur-cli/${"1.60.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
75230
75230
  }
75231
75231
  function getMCPUserAgent() {
75232
75232
  const parts = [];
@@ -75240,7 +75240,7 @@ function getMCPUserAgent() {
75240
75240
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
75241
75241
  }
75242
75242
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
75243
- return `ur/${"1.60.0"}${suffix}`;
75243
+ return `ur/${"1.60.1"}${suffix}`;
75244
75244
  }
75245
75245
  function getWebFetchUserAgent() {
75246
75246
  return `UR-User (${getURCodeUserAgent()})`;
@@ -75378,7 +75378,7 @@ var init_user = __esm(() => {
75378
75378
  deviceId,
75379
75379
  sessionId: getSessionId(),
75380
75380
  email: getEmail(),
75381
- appVersion: "1.60.0",
75381
+ appVersion: "1.60.1",
75382
75382
  platform: getHostPlatformForAnalytics(),
75383
75383
  organizationUuid,
75384
75384
  accountUuid,
@@ -83578,7 +83578,7 @@ var init_metadata = __esm(() => {
83578
83578
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
83579
83579
  WHITESPACE_REGEX = /\s+/;
83580
83580
  getVersionBase = memoize_default(() => {
83581
- const match = "1.60.0".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83581
+ const match = "1.60.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
83582
83582
  return match ? match[0] : undefined;
83583
83583
  });
83584
83584
  buildEnvContext = memoize_default(async () => {
@@ -83618,7 +83618,7 @@ var init_metadata = __esm(() => {
83618
83618
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
83619
83619
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
83620
83620
  isURAiAuth: isURAISubscriber(),
83621
- version: "1.60.0",
83621
+ version: "1.60.1",
83622
83622
  versionBase: getVersionBase(),
83623
83623
  buildTime: "",
83624
83624
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -84288,7 +84288,7 @@ function initialize1PEventLogging() {
84288
84288
  const platform2 = getPlatform();
84289
84289
  const attributes = {
84290
84290
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
84291
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.60.0"
84291
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.60.1"
84292
84292
  };
84293
84293
  if (platform2 === "wsl") {
84294
84294
  const wslVersion = getWslVersion();
@@ -84316,7 +84316,7 @@ function initialize1PEventLogging() {
84316
84316
  })
84317
84317
  ]
84318
84318
  });
84319
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.60.0");
84319
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.60.1");
84320
84320
  }
84321
84321
  async function reinitialize1PEventLoggingIfConfigChanged() {
84322
84322
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -94155,7 +94155,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
94155
94155
  function formatA2AAgentCard(options = {}, pretty = true) {
94156
94156
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
94157
94157
  }
94158
- var urVersion = "1.60.0", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94158
+ var urVersion = "1.60.1", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
94159
94159
  var init_trends = __esm(() => {
94160
94160
  init_a2aCardSignature();
94161
94161
  coverage = [
@@ -96958,7 +96958,7 @@ function getAttributionHeader(fingerprint) {
96958
96958
  if (!isAttributionHeaderEnabled()) {
96959
96959
  return "";
96960
96960
  }
96961
- const version2 = `${"1.60.0"}.${fingerprint}`;
96961
+ const version2 = `${"1.60.1"}.${fingerprint}`;
96962
96962
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
96963
96963
  const cch = "";
96964
96964
  const workload = getWorkload();
@@ -154547,7 +154547,7 @@ var init_projectSafety = __esm(() => {
154547
154547
  function getInstruments() {
154548
154548
  if (instruments)
154549
154549
  return instruments;
154550
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.60.0");
154550
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.60.1");
154551
154551
  instruments = {
154552
154552
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
154553
154553
  description: "GenAI operation duration.",
@@ -154645,7 +154645,7 @@ function genAiAgentAttributes() {
154645
154645
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
154646
154646
  "gen_ai.provider.name": "ur",
154647
154647
  "gen_ai.agent.name": "UR-Nexus",
154648
- "gen_ai.agent.version": "1.60.0"
154648
+ "gen_ai.agent.version": "1.60.1"
154649
154649
  };
154650
154650
  }
154651
154651
  function genAiWorkflowAttributes(workflowName) {
@@ -154661,7 +154661,7 @@ function genAiWorkflowAttributes(workflowName) {
154661
154661
  function startGenAiWorkflowSpan(workflowName) {
154662
154662
  const attributes = genAiWorkflowAttributes(workflowName);
154663
154663
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
154664
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.60.0").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154664
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.60.1").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
154665
154665
  }
154666
154666
  function endGenAiWorkflowSpan(span, options2 = {}) {
154667
154667
  try {
@@ -154699,7 +154699,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
154699
154699
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
154700
154700
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
154701
154701
  }
154702
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.60.0").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154702
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.60.1").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
154703
154703
  }
154704
154704
  function endGenAiMemorySpan(span, options2 = {}) {
154705
154705
  try {
@@ -206218,7 +206218,7 @@ function getTelemetryAttributes() {
206218
206218
  attributes["session.id"] = sessionId;
206219
206219
  }
206220
206220
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
206221
- attributes["app.version"] = "1.60.0";
206221
+ attributes["app.version"] = "1.60.1";
206222
206222
  }
206223
206223
  const oauthAccount = getOauthAccountInfo();
206224
206224
  if (oauthAccount) {
@@ -241992,7 +241992,7 @@ function getInstallationEnv() {
241992
241992
  return;
241993
241993
  }
241994
241994
  function getURCodeVersion() {
241995
- return "1.60.0";
241995
+ return "1.60.1";
241996
241996
  }
241997
241997
  async function getInstalledVSCodeExtensionVersion(command) {
241998
241998
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -249323,7 +249323,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
249323
249323
  const client2 = new Client({
249324
249324
  name: "ur",
249325
249325
  title: "UR",
249326
- version: "1.60.0",
249326
+ version: "1.60.1",
249327
249327
  description: "UR-Nexus autonomous engineering workflow engine",
249328
249328
  websiteUrl: PRODUCT_URL
249329
249329
  }, {
@@ -249683,7 +249683,7 @@ var init_client5 = __esm(() => {
249683
249683
  const client2 = new Client({
249684
249684
  name: "ur",
249685
249685
  title: "UR",
249686
- version: "1.60.0",
249686
+ version: "1.60.1",
249687
249687
  description: "UR-Nexus autonomous engineering workflow engine",
249688
249688
  websiteUrl: PRODUCT_URL
249689
249689
  }, {
@@ -262284,7 +262284,7 @@ async function createRuntime() {
262284
262284
  bootstrapTelemetry();
262285
262285
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
262286
262286
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
262287
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.60.0"
262287
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.60.1"
262288
262288
  }));
262289
262289
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
262290
262290
  resource,
@@ -262317,11 +262317,11 @@ async function createRuntime() {
262317
262317
  setMeterProvider(meterProvider);
262318
262318
  setLoggerProvider(loggerProvider);
262319
262319
  if (meterProvider) {
262320
- const meter = meterProvider.getMeter("ur-agent", "1.60.0");
262320
+ const meter = meterProvider.getMeter("ur-agent", "1.60.1");
262321
262321
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
262322
262322
  }
262323
262323
  if (loggerProvider) {
262324
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.60.0"));
262324
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.60.1"));
262325
262325
  }
262326
262326
  if (!cleanupRegistered2) {
262327
262327
  cleanupRegistered2 = true;
@@ -262983,9 +262983,9 @@ async function assertMinVersion() {
262983
262983
  if (false) {}
262984
262984
  try {
262985
262985
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
262986
- if (versionConfig.minVersion && lt("1.60.0", versionConfig.minVersion)) {
262986
+ if (versionConfig.minVersion && lt("1.60.1", versionConfig.minVersion)) {
262987
262987
  console.error(`
262988
- It looks like your version of UR (${"1.60.0"}) needs an update.
262988
+ It looks like your version of UR (${"1.60.1"}) needs an update.
262989
262989
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
262990
262990
 
262991
262991
  To update, please run:
@@ -263201,7 +263201,7 @@ async function installGlobalPackage(specificVersion) {
263201
263201
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
263202
263202
  logEvent("tengu_auto_updater_lock_contention", {
263203
263203
  pid: process.pid,
263204
- currentVersion: "1.60.0"
263204
+ currentVersion: "1.60.1"
263205
263205
  });
263206
263206
  return "in_progress";
263207
263207
  }
@@ -263210,7 +263210,7 @@ async function installGlobalPackage(specificVersion) {
263210
263210
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
263211
263211
  logError2(new Error("Windows NPM detected in WSL environment"));
263212
263212
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
263213
- currentVersion: "1.60.0"
263213
+ currentVersion: "1.60.1"
263214
263214
  });
263215
263215
  console.error(`
263216
263216
  Error: Windows NPM detected in WSL
@@ -263745,7 +263745,7 @@ function detectLinuxGlobPatternWarnings() {
263745
263745
  }
263746
263746
  async function getDoctorDiagnostic() {
263747
263747
  const installationType = await getCurrentInstallationType();
263748
- const version2 = typeof MACRO !== "undefined" ? "1.60.0" : "unknown";
263748
+ const version2 = typeof MACRO !== "undefined" ? "1.60.1" : "unknown";
263749
263749
  const installationPath = await getInstallationPath();
263750
263750
  const invokedBinary = getInvokedBinary();
263751
263751
  const multipleInstallations = await detectMultipleInstallations();
@@ -264680,8 +264680,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
264680
264680
  const maxVersion = await getMaxVersion();
264681
264681
  if (maxVersion && gt(version2, maxVersion)) {
264682
264682
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
264683
- if (gte("1.60.0", maxVersion)) {
264684
- logForDebugging(`Native installer: current version ${"1.60.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
264683
+ if (gte("1.60.1", maxVersion)) {
264684
+ logForDebugging(`Native installer: current version ${"1.60.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
264685
264685
  logEvent("tengu_native_update_skipped_max_version", {
264686
264686
  latency_ms: Date.now() - startTime,
264687
264687
  max_version: maxVersion,
@@ -264692,7 +264692,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
264692
264692
  version2 = maxVersion;
264693
264693
  }
264694
264694
  }
264695
- if (!forceReinstall && version2 === "1.60.0" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
264695
+ if (!forceReinstall && version2 === "1.60.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
264696
264696
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
264697
264697
  logEvent("tengu_native_update_complete", {
264698
264698
  latency_ms: Date.now() - startTime,
@@ -334887,7 +334887,7 @@ function isAnyTracingEnabled() {
334887
334887
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
334888
334888
  }
334889
334889
  function getTracer() {
334890
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.60.0");
334890
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.60.1");
334891
334891
  }
334892
334892
  function createSpanAttributes(spanType, customAttributes = {}) {
334893
334893
  const baseAttributes = getTelemetryAttributes();
@@ -364390,7 +364390,7 @@ function Feedback({
364390
364390
  platform: env2.platform,
364391
364391
  gitRepo: envInfo.isGit,
364392
364392
  terminal: env2.terminal,
364393
- version: "1.60.0",
364393
+ version: "1.60.1",
364394
364394
  transcript: normalizeMessagesForAPI(messages),
364395
364395
  errors: sanitizedErrors,
364396
364396
  lastApiRequest: getLastAPIRequest(),
@@ -364582,7 +364582,7 @@ function Feedback({
364582
364582
  ", ",
364583
364583
  env2.terminal,
364584
364584
  ", v",
364585
- "1.60.0"
364585
+ "1.60.1"
364586
364586
  ]
364587
364587
  }, undefined, true, undefined, this)
364588
364588
  ]
@@ -364688,7 +364688,7 @@ ${sanitizedDescription}
364688
364688
  ` + `**Environment Info**
364689
364689
  ` + `- Platform: ${env2.platform}
364690
364690
  ` + `- Terminal: ${env2.terminal}
364691
- ` + `- Version: ${"1.60.0"}
364691
+ ` + `- Version: ${"1.60.1"}
364692
364692
  ` + `- Feedback ID: ${feedbackId}
364693
364693
  ` + `
364694
364694
  **Errors**
@@ -367798,7 +367798,7 @@ function buildPrimarySection() {
367798
367798
  }, undefined, false, undefined, this);
367799
367799
  return [{
367800
367800
  label: "Version",
367801
- value: "1.60.0"
367801
+ value: "1.60.1"
367802
367802
  }, {
367803
367803
  label: "Session name",
367804
367804
  value: nameValue
@@ -371128,7 +371128,7 @@ function Config({
371128
371128
  }
371129
371129
  }, undefined, false, undefined, this)
371130
371130
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
371131
- currentVersion: "1.60.0",
371131
+ currentVersion: "1.60.1",
371132
371132
  onChoice: (choice) => {
371133
371133
  setShowSubmenu(null);
371134
371134
  setTabsHidden(false);
@@ -371140,7 +371140,7 @@ function Config({
371140
371140
  autoUpdatesChannel: "stable"
371141
371141
  };
371142
371142
  if (choice === "stay") {
371143
- newSettings.minimumVersion = "1.60.0";
371143
+ newSettings.minimumVersion = "1.60.1";
371144
371144
  }
371145
371145
  updateSettingsForSource("userSettings", newSettings);
371146
371146
  setSettingsData((prev_27) => ({
@@ -379204,7 +379204,7 @@ function HelpV2(t0) {
379204
379204
  let t6;
379205
379205
  if ($2[31] !== tabs) {
379206
379206
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
379207
- title: `UR v${"1.60.0"}`,
379207
+ title: `UR v${"1.60.1"}`,
379208
379208
  color: "professionalBlue",
379209
379209
  defaultTab: "general",
379210
379210
  children: tabs
@@ -380121,7 +380121,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
380121
380121
  async function handleInitialize(options2) {
380122
380122
  return {
380123
380123
  name: "UR",
380124
- version: "1.60.0",
380124
+ version: "1.60.1",
380125
380125
  protocolVersion: "0.1.0",
380126
380126
  workspaceRoot: options2.cwd,
380127
380127
  capabilities: {
@@ -397229,7 +397229,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
397229
397229
  return [];
397230
397230
  }
397231
397231
  }
397232
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.60.0") {
397232
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.60.1") {
397233
397233
  if (process.env.USER_TYPE === "ant") {
397234
397234
  const changelog = "";
397235
397235
  if (changelog) {
@@ -397256,7 +397256,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.60.0")
397256
397256
  releaseNotes
397257
397257
  };
397258
397258
  }
397259
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.60.0") {
397259
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.60.1") {
397260
397260
  if (process.env.USER_TYPE === "ant") {
397261
397261
  const changelog = "";
397262
397262
  if (changelog) {
@@ -400113,7 +400113,7 @@ function getRecentActivitySync() {
400113
400113
  return cachedActivity;
400114
400114
  }
400115
400115
  function getLogoDisplayData() {
400116
- const version2 = process.env.DEMO_VERSION ?? "1.60.0";
400116
+ const version2 = process.env.DEMO_VERSION ?? "1.60.1";
400117
400117
  const serverUrl = getDirectConnectServerUrl();
400118
400118
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
400119
400119
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -400997,7 +400997,7 @@ function LogoV2() {
400997
400997
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
400998
400998
  t2 = () => {
400999
400999
  const currentConfig2 = getGlobalConfig();
401000
- if (currentConfig2.lastReleaseNotesSeen === "1.60.0") {
401000
+ if (currentConfig2.lastReleaseNotesSeen === "1.60.1") {
401001
401001
  return;
401002
401002
  }
401003
401003
  saveGlobalConfig(_temp327);
@@ -401682,12 +401682,12 @@ function LogoV2() {
401682
401682
  return t41;
401683
401683
  }
401684
401684
  function _temp327(current) {
401685
- if (current.lastReleaseNotesSeen === "1.60.0") {
401685
+ if (current.lastReleaseNotesSeen === "1.60.1") {
401686
401686
  return current;
401687
401687
  }
401688
401688
  return {
401689
401689
  ...current,
401690
- lastReleaseNotesSeen: "1.60.0"
401690
+ lastReleaseNotesSeen: "1.60.1"
401691
401691
  };
401692
401692
  }
401693
401693
  function _temp241(s_0) {
@@ -418485,7 +418485,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
418485
418485
  if (spec.name !== specName) {
418486
418486
  throw new Error("Agentic CI workflow spec name does not match");
418487
418487
  }
418488
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.60.0" : "1.60.0");
418488
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.60.1" : "1.60.1");
418489
418489
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
418490
418490
  throw new Error("invalid ur-agent package version");
418491
418491
  }
@@ -419478,7 +419478,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
419478
419478
  path: ".github/workflows/ur.yml",
419479
419479
  root: "project",
419480
419480
  content: compileAgenticCiWorkflow("default", {
419481
- packageVersion: typeof MACRO !== "undefined" ? "1.60.0" : "1.60.0"
419481
+ packageVersion: typeof MACRO !== "undefined" ? "1.60.1" : "1.60.1"
419482
419482
  })
419483
419483
  },
419484
419484
  {
@@ -419541,7 +419541,7 @@ function value(tokens, flag) {
419541
419541
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
419542
419542
  }
419543
419543
  function cliVersion() {
419544
- return typeof MACRO !== "undefined" ? "1.60.0" : "1.60.0";
419544
+ return typeof MACRO !== "undefined" ? "1.60.1" : "1.60.1";
419545
419545
  }
419546
419546
  function workflowPath(cwd2) {
419547
419547
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -425397,7 +425397,7 @@ function createAcpStdioApp(deps) {
425397
425397
  }
425398
425398
  },
425399
425399
  authMethods: [],
425400
- agentInfo: { name: "UR-Nexus", version: "1.60.0" }
425400
+ agentInfo: { name: "UR-Nexus", version: "1.60.1" }
425401
425401
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
425402
425402
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
425403
425403
  await runtime2.announce({
@@ -425494,7 +425494,7 @@ function createAcpStdioAgent(deps) {
425494
425494
  }
425495
425495
  },
425496
425496
  authMethods: [],
425497
- agentInfo: { name: "UR-Nexus", version: "1.60.0" }
425497
+ agentInfo: { name: "UR-Nexus", version: "1.60.1" }
425498
425498
  });
425499
425499
  return;
425500
425500
  case "authenticate":
@@ -434860,11 +434860,12 @@ function summarizeSubagentCosts(subagentsDir) {
434860
434860
  }
434861
434861
  return rows.sort((a2, b) => b.costUSD - a2.costUSD);
434862
434862
  }
434863
- function formatSubagentCosts(rows, json2) {
434863
+ function formatSubagentCosts(rows, json2, searchedDir) {
434864
434864
  if (json2)
434865
- return JSON.stringify({ subagents: rows }, null, 2);
434865
+ return JSON.stringify({ subagents: rows, searchedDir }, null, 2);
434866
434866
  if (rows.length === 0) {
434867
- return "No subagent transcripts found for this session.";
434867
+ return searchedDir ? `No subagent transcripts in ${searchedDir}.
434868
+ Either this session spawned no subagents, or that is not where they were written.` : "No subagent transcripts found for this session.";
434868
434869
  }
434869
434870
  const billed = rows.some((row) => row.costUSD > 0);
434870
434871
  const width = Math.max(...rows.map((row) => row.agentId.length), 5);
@@ -434923,7 +434924,7 @@ var call78 = async (args, context6) => {
434923
434924
  }
434924
434925
  return {
434925
434926
  type: "text",
434926
- value: formatSubagentCosts(summarizeSubagentCosts(dir), json2)
434927
+ value: formatSubagentCosts(summarizeSubagentCosts(dir), json2, dir)
434927
434928
  };
434928
434929
  }
434929
434930
  let messages;
@@ -435120,7 +435121,8 @@ function verifyMemoryStore(dir) {
435120
435121
  return {
435121
435122
  dir,
435122
435123
  manifestPath: manifestPathFor2(dir),
435123
- valid: manifest !== null && counts.modified === 0 && counts.untracked === 0 && counts.missing === 0,
435124
+ exists: existsSync65(dir),
435125
+ valid: manifest !== null && entries.length > 0 && counts.modified === 0 && counts.untracked === 0 && counts.missing === 0,
435124
435126
  entries,
435125
435127
  counts
435126
435128
  };
@@ -435148,8 +435150,16 @@ function quarantineMemoryStore(dir, now8 = new Date) {
435148
435150
  function formatMemoryIntegrity(report, json2) {
435149
435151
  if (json2)
435150
435152
  return JSON.stringify(report, null, 2);
435151
- if (!existsSync65(report.dir)) {
435152
- return `No memory store at ${report.dir}.`;
435153
+ if (!report.exists) {
435154
+ return `${report.dir}
435155
+ ` + ` no such directory \u2014 nothing was checked. If you expected memory here,
435156
+ ` + ` the path is wrong; verifying a path that does not exist proves nothing.`;
435157
+ }
435158
+ if (report.entries.length === 0) {
435159
+ return `${report.dir}
435160
+ ` + ` empty \u2014 no memory files, so nothing was checked.
435161
+ ` + ` This is not a pass: an empty store and a correctly verified one are
435162
+ ` + ` different claims, and only the second is evidence of integrity.`;
435153
435163
  }
435154
435164
  const lines = [
435155
435165
  `${report.dir}`,
@@ -435234,7 +435244,8 @@ var call80 = async (args) => {
435234
435244
  };
435235
435245
  }
435236
435246
  const reports = stores.map((dir) => verifyMemoryStore(dir));
435237
- if (reports.some((report) => !report.valid))
435247
+ const tampered = reports.some((report) => report.counts.modified > 0 || report.counts.missing > 0 || report.counts.untracked > 0);
435248
+ if (tampered)
435238
435249
  process.exitCode = 1;
435239
435250
  return {
435240
435251
  type: "text",
@@ -633511,7 +633522,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
633511
633522
  smapsRollup,
633512
633523
  platform: process.platform,
633513
633524
  nodeVersion: process.version,
633514
- ccVersion: "1.60.0"
633525
+ ccVersion: "1.60.1"
633515
633526
  };
633516
633527
  }
633517
633528
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -634091,7 +634102,7 @@ var init_bridge_kick = __esm(() => {
634091
634102
  var call152 = async () => {
634092
634103
  return {
634093
634104
  type: "text",
634094
- value: "1.60.0"
634105
+ value: "1.60.1"
634095
634106
  };
634096
634107
  }, version2, version_default;
634097
634108
  var init_version = __esm(() => {
@@ -645162,7 +645173,7 @@ function generateHtmlReport(data, insights) {
645162
645173
  </html>`;
645163
645174
  }
645164
645175
  function buildExportData(data, insights, facets, remoteStats) {
645165
- const version3 = typeof MACRO !== "undefined" ? "1.60.0" : "unknown";
645176
+ const version3 = typeof MACRO !== "undefined" ? "1.60.1" : "unknown";
645166
645177
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
645167
645178
  const facets_summary = {
645168
645179
  total: facets.size,
@@ -649471,7 +649482,7 @@ var init_sessionStorage = __esm(() => {
649471
649482
  init_settings2();
649472
649483
  init_slowOperations();
649473
649484
  init_uuid();
649474
- VERSION7 = typeof MACRO !== "undefined" ? "1.60.0" : "unknown";
649485
+ VERSION7 = typeof MACRO !== "undefined" ? "1.60.1" : "unknown";
649475
649486
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
649476
649487
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
649477
649488
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -650686,7 +650697,7 @@ var init_filesystem = __esm(() => {
650686
650697
  });
650687
650698
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
650688
650699
  const nonce = randomBytes20(16).toString("hex");
650689
- return join230(getURTempDir(), "bundled-skills", "1.60.0", nonce);
650700
+ return join230(getURTempDir(), "bundled-skills", "1.60.1", nonce);
650690
650701
  });
650691
650702
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
650692
650703
  });
@@ -656981,7 +656992,7 @@ function computeFingerprint(messageText2, version3) {
656981
656992
  }
656982
656993
  function computeFingerprintFromMessages(messages) {
656983
656994
  const firstMessageText = extractFirstMessageText(messages);
656984
- return computeFingerprint(firstMessageText, "1.60.0");
656995
+ return computeFingerprint(firstMessageText, "1.60.1");
656985
656996
  }
656986
656997
  var FINGERPRINT_SALT = "59cf53e54c78";
656987
656998
  var init_fingerprint = () => {};
@@ -658877,7 +658888,7 @@ async function sideQuery(opts) {
658877
658888
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
658878
658889
  }
658879
658890
  const messageText2 = extractFirstUserMessageText(messages);
658880
- const fingerprint2 = computeFingerprint(messageText2, "1.60.0");
658891
+ const fingerprint2 = computeFingerprint(messageText2, "1.60.1");
658881
658892
  const attributionHeader = getAttributionHeader(fingerprint2);
658882
658893
  const systemBlocks = [
658883
658894
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -663648,7 +663659,7 @@ function buildSystemInitMessage(inputs) {
663648
663659
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
663649
663660
  apiKeySource: getURHQApiKeyWithSource().source,
663650
663661
  betas: getSdkBetas(),
663651
- ur_version: "1.60.0",
663662
+ ur_version: "1.60.1",
663652
663663
  output_style: outputStyle2,
663653
663664
  agents: inputs.agents.map((agent2) => agent2.agentType),
663654
663665
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -677508,7 +677519,7 @@ var init_useVoiceEnabled = __esm(() => {
677508
677519
  function getSemverPart(version3) {
677509
677520
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
677510
677521
  }
677511
- function useUpdateNotification(updatedVersion, initialVersion = "1.60.0") {
677522
+ function useUpdateNotification(updatedVersion, initialVersion = "1.60.1") {
677512
677523
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react222.useState(() => getSemverPart(initialVersion));
677513
677524
  if (!updatedVersion) {
677514
677525
  return null;
@@ -677557,7 +677568,7 @@ function AutoUpdater({
677557
677568
  return;
677558
677569
  }
677559
677570
  if (false) {}
677560
- const currentVersion = "1.60.0";
677571
+ const currentVersion = "1.60.1";
677561
677572
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
677562
677573
  let latestVersion = await getLatestVersion(channel);
677563
677574
  const isDisabled = isAutoUpdaterDisabled();
@@ -677786,12 +677797,12 @@ function NativeAutoUpdater({
677786
677797
  logEvent("tengu_native_auto_updater_start", {});
677787
677798
  try {
677788
677799
  const maxVersion = await getMaxVersion();
677789
- if (maxVersion && gt("1.60.0", maxVersion)) {
677800
+ if (maxVersion && gt("1.60.1", maxVersion)) {
677790
677801
  const msg = await getMaxVersionMessage();
677791
677802
  setMaxVersionIssue(msg ?? "affects your version");
677792
677803
  }
677793
677804
  const result = await installLatest(channel);
677794
- const currentVersion = "1.60.0";
677805
+ const currentVersion = "1.60.1";
677795
677806
  const latencyMs = Date.now() - startTime;
677796
677807
  if (result.lockFailed) {
677797
677808
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -677928,17 +677939,17 @@ function PackageManagerAutoUpdater(t0) {
677928
677939
  const maxVersion = await getMaxVersion();
677929
677940
  if (maxVersion && latest && gt(latest, maxVersion)) {
677930
677941
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
677931
- if (gte("1.60.0", maxVersion)) {
677932
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.60.0"} is already at or above maxVersion ${maxVersion}, skipping update`);
677942
+ if (gte("1.60.1", maxVersion)) {
677943
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.60.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
677933
677944
  setUpdateAvailable(false);
677934
677945
  return;
677935
677946
  }
677936
677947
  latest = maxVersion;
677937
677948
  }
677938
- const hasUpdate = latest && !gte("1.60.0", latest) && !shouldSkipVersion(latest);
677949
+ const hasUpdate = latest && !gte("1.60.1", latest) && !shouldSkipVersion(latest);
677939
677950
  setUpdateAvailable(!!hasUpdate);
677940
677951
  if (hasUpdate) {
677941
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.60.0"} -> ${latest}`);
677952
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.60.1"} -> ${latest}`);
677942
677953
  }
677943
677954
  };
677944
677955
  $2[0] = t1;
@@ -677972,7 +677983,7 @@ function PackageManagerAutoUpdater(t0) {
677972
677983
  wrap: "truncate",
677973
677984
  children: [
677974
677985
  "currentVersion: ",
677975
- "1.60.0"
677986
+ "1.60.1"
677976
677987
  ]
677977
677988
  }, undefined, true, undefined, this);
677978
677989
  $2[3] = verbose;
@@ -688669,7 +688680,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
688669
688680
  project_dir: getOriginalCwd(),
688670
688681
  added_dirs: addedDirs
688671
688682
  },
688672
- version: "1.60.0",
688683
+ version: "1.60.1",
688673
688684
  output_style: {
688674
688685
  name: outputStyleName
688675
688686
  },
@@ -688752,7 +688763,7 @@ function StatusLineInner({
688752
688763
  const taskValues = Object.values(tasks2);
688753
688764
  const taskRunningCount = taskValues.filter((task2) => task2.status === "running" || task2.status === "pending").length;
688754
688765
  const defaultStatusLineText = buildDefaultStatusBar({
688755
- version: "1.60.0",
688766
+ version: "1.60.1",
688756
688767
  providerLabel: providerRuntime.providerLabel,
688757
688768
  authMode: providerRuntime.authLabel,
688758
688769
  model: providerRuntime.model ?? renderModelName(mainLoopModel),
@@ -700895,7 +700906,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
700895
700906
  } catch {}
700896
700907
  const data = {
700897
700908
  trigger: trigger2,
700898
- version: "1.60.0",
700909
+ version: "1.60.1",
700899
700910
  platform: process.platform,
700900
700911
  transcript,
700901
700912
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -713175,7 +713186,7 @@ function WelcomeV2() {
713175
713186
  dimColor: true,
713176
713187
  children: [
713177
713188
  "v",
713178
- "1.60.0"
713189
+ "1.60.1"
713179
713190
  ]
713180
713191
  }, undefined, true, undefined, this)
713181
713192
  ]
@@ -714435,7 +714446,7 @@ function completeOnboarding() {
714435
714446
  saveGlobalConfig((current) => ({
714436
714447
  ...current,
714437
714448
  hasCompletedOnboarding: true,
714438
- lastOnboardingVersion: "1.60.0"
714449
+ lastOnboardingVersion: "1.60.1"
714439
714450
  }));
714440
714451
  }
714441
714452
  function showDialog(root2, renderer) {
@@ -719479,7 +719490,7 @@ function appendToLog(path24, message) {
719479
719490
  cwd: getFsImplementation().cwd(),
719480
719491
  userType: process.env.USER_TYPE,
719481
719492
  sessionId: getSessionId(),
719482
- version: "1.60.0"
719493
+ version: "1.60.1"
719483
719494
  };
719484
719495
  getLogWriter(path24).write(messageWithTimestamp);
719485
719496
  }
@@ -723638,8 +723649,8 @@ async function getEnvLessBridgeConfig() {
723638
723649
  }
723639
723650
  async function checkEnvLessBridgeMinVersion() {
723640
723651
  const cfg = await getEnvLessBridgeConfig();
723641
- if (cfg.min_version && lt("1.60.0", cfg.min_version)) {
723642
- return `Your version of UR (${"1.60.0"}) is too old for Remote Control.
723652
+ if (cfg.min_version && lt("1.60.1", cfg.min_version)) {
723653
+ return `Your version of UR (${"1.60.1"}) is too old for Remote Control.
723643
723654
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
723644
723655
  }
723645
723656
  return null;
@@ -724113,7 +724124,7 @@ async function initBridgeCore(params) {
724113
724124
  const rawApi = createBridgeApiClient({
724114
724125
  baseUrl,
724115
724126
  getAccessToken,
724116
- runnerVersion: "1.60.0",
724127
+ runnerVersion: "1.60.1",
724117
724128
  onDebug: logForDebugging,
724118
724129
  onAuth401,
724119
724130
  getTrustedDeviceToken
@@ -733589,7 +733600,7 @@ function getAgUiCapabilities() {
733589
733600
  name: "UR-Nexus",
733590
733601
  type: "ur-nexus",
733591
733602
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
733592
- version: "1.60.0",
733603
+ version: "1.60.1",
733593
733604
  provider: "UR",
733594
733605
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
733595
733606
  },
@@ -734729,7 +734740,7 @@ function createMCPServer(cwd4, debug2, verbose) {
734729
734740
  };
734730
734741
  const server2 = new Server({
734731
734742
  name: "ur-nexus",
734732
- version: "1.60.0"
734743
+ version: "1.60.1"
734733
734744
  }, {
734734
734745
  capabilities: {
734735
734746
  tools: {}
@@ -735887,7 +735898,7 @@ function thrownResponse(error40) {
735887
735898
  }
735888
735899
  async function createUrMcp2026Runtime(options4) {
735889
735900
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
735890
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.60.0" }, { capabilities: {} });
735901
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.60.1" }, { capabilities: {} });
735891
735902
  const [clientTransport, serverTransport] = createLinkedTransportPair();
735892
735903
  try {
735893
735904
  await server2.connect(serverTransport);
@@ -735898,7 +735909,7 @@ async function createUrMcp2026Runtime(options4) {
735898
735909
  }
735899
735910
  const runtime2 = new Mcp2026Runtime({
735900
735911
  cwd: options4.cwd,
735901
- version: "1.60.0",
735912
+ version: "1.60.1",
735902
735913
  backend: {
735903
735914
  listTools: async () => {
735904
735915
  const listed = await client2.listTools();
@@ -738031,7 +738042,7 @@ async function update() {
738031
738042
  logEvent("tengu_update_check", {});
738032
738043
  const diagnostic2 = await getDoctorDiagnostic();
738033
738044
  const result = await checkUpgradeStatus({
738034
- currentVersion: "1.60.0",
738045
+ currentVersion: "1.60.1",
738035
738046
  packageName: UR_AGENT_PACKAGE_NAME,
738036
738047
  installationType: diagnostic2.installationType,
738037
738048
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -739347,7 +739358,7 @@ ${customInstructions}` : customInstructions;
739347
739358
  }
739348
739359
  }
739349
739360
  logForDiagnosticsNoPII("info", "started", {
739350
- version: "1.60.0",
739361
+ version: "1.60.1",
739351
739362
  is_native_binary: isInBundledMode()
739352
739363
  });
739353
739364
  registerCleanup(async () => {
@@ -740133,7 +740144,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
740133
740144
  pendingHookMessages
740134
740145
  }, renderAndRun);
740135
740146
  }
740136
- }).version("1.60.0 (UR-Nexus)", "-v, --version", "Output the version number");
740147
+ }).version("1.60.1 (UR-Nexus)", "-v, --version", "Output the version number");
740137
740148
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
740138
740149
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
740139
740150
  if (canUserConfigureAdvisor()) {
@@ -741181,7 +741192,7 @@ if (false) {}
741181
741192
  async function main2() {
741182
741193
  const args = process.argv.slice(2);
741183
741194
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
741184
- console.log(`${"1.60.0"} (UR-Nexus)`);
741195
+ console.log(`${"1.60.1"} (UR-Nexus)`);
741185
741196
  return;
741186
741197
  }
741187
741198
  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.60.0</p>
48
+ <p class="eyebrow">Version 1.60.1</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.60.0"
10
+ version = "1.60.1"
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.60.0",
5
+ "version": "1.60.1",
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.60.0",
3
+ "version": "1.60.1",
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",