ur-agent 1.76.10 → 1.77.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,46 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.77.1
4
+
5
+ - Finishing a task no longer produces a long write-up. Both output-efficiency
6
+ sections said "be concise" but neither addressed what actually ran long, so
7
+ the rules are now specific: never paste code or file contents already written
8
+ to disk (cite `file_path:line`), report an audit or review as its findings
9
+ one line each, no closing recap of the conversation, and long explanations
10
+ only when the user asks for one. Subagent reports carry the same rule, since
11
+ their output is relayed verbatim.
12
+
13
+ ## 1.77.0
14
+
15
+ - Edit no longer demands a prior Read. A matching `old_string` is checked
16
+ against the bytes on disk, which is exactly what "has this been read?" and
17
+ "has it changed since?" were asking — and stronger, since a stale snapshot
18
+ cannot survive a match against fresh content. The verified content is
19
+ recorded so the write path and later staleness checks work from it. This
20
+ removes a full model round trip from the most common mutating call. A
21
+ genuinely absent `old_string` is still refused, and now says the file has not
22
+ been read so the model knows to read it.
23
+ - Write no longer refuses an unread existing file. It reads and records the
24
+ file itself — one local read instead of a round trip spent asking for content
25
+ nobody needed to see — and the "modified since read" check is unchanged, now
26
+ working from that recorded baseline.
27
+ - Bash no longer issues a `mkdir` syscall on the critical path of every
28
+ command. The task output directory is process-wide and cannot change after
29
+ the first one, so it is created once; a failure is not cached, so the next
30
+ command retries.
31
+
32
+ ## 1.76.11
33
+
34
+ - AskUserQuestion recovers the payload shape where a model flattens one
35
+ question's choices straight into `questions`, so six options arrived as six
36
+ question objects carrying a label and a description and no question text.
37
+ Every entry reported "question must be a non-empty string" and "options must
38
+ be an array". The array is folded back into the options of a single question
39
+ using the question text the payload already carries. A genuine
40
+ multi-question payload is never retargeted, and with no question text
41
+ anywhere the payload is still reported rather than given an invented
42
+ question.
43
+
3
44
  ## 1.76.10
4
45
 
5
46
  - `npm publish` builds before it validates. `prepack` ran `release:check`
package/dist/cli.js CHANGED
@@ -87722,6 +87722,41 @@ function coerceQuestionValueToOptions(question) {
87722
87722
  }
87723
87723
  return null;
87724
87724
  }
87725
+ function looksLikeOptionEntry(value) {
87726
+ if (typeof value === "string")
87727
+ return value.trim().length > 0;
87728
+ const entry = objectValue(value);
87729
+ if (!entry)
87730
+ return false;
87731
+ for (const key of Object.keys(entry)) {
87732
+ if (RESERVED_QUESTION_KEYS.has(key))
87733
+ return false;
87734
+ if (RESERVED_QUESTION_OPTION_KEYS.has(key.toLowerCase()))
87735
+ return false;
87736
+ }
87737
+ return typeof entry.label === "string" || typeof entry.value === "string" || typeof entry.description === "string";
87738
+ }
87739
+ function recoverFlattenedOptions(input, entries) {
87740
+ if (entries.length < 2 || !entries.every(looksLikeOptionEntry))
87741
+ return null;
87742
+ const questionText = stringField(input, [
87743
+ "question",
87744
+ "questionText",
87745
+ "question_text",
87746
+ "q",
87747
+ "query",
87748
+ "prompt",
87749
+ "text",
87750
+ "title",
87751
+ "message",
87752
+ "body",
87753
+ "goal",
87754
+ "header"
87755
+ ]);
87756
+ if (!questionText)
87757
+ return null;
87758
+ return normalizeQuestionInput({ ...input, question: questionText, options: entries }, 0);
87759
+ }
87725
87760
  function normalizeQuestionInput(value, index2) {
87726
87761
  const question = objectValue(value);
87727
87762
  if (!question)
@@ -87810,6 +87845,13 @@ function normalizeAskUserQuestionInput(value) {
87810
87845
  ...commonFields
87811
87846
  };
87812
87847
  }
87848
+ const recovered = recoverFlattenedOptions(input, input.questions);
87849
+ if (recovered && typeof recovered === "object") {
87850
+ return {
87851
+ questions: dedupeQuestions([recovered]),
87852
+ ...commonFields
87853
+ };
87854
+ }
87813
87855
  return input;
87814
87856
  }
87815
87857
  if (optionsField(input) !== null) {
@@ -107500,7 +107542,7 @@ var init_auth = __esm(() => {
107500
107542
 
107501
107543
  // src/utils/userAgent.ts
107502
107544
  function getURCodeUserAgent() {
107503
- return `ur/${"1.76.10"}`;
107545
+ return `ur/${"1.77.1"}`;
107504
107546
  }
107505
107547
 
107506
107548
  // src/utils/workloadContext.ts
@@ -107522,7 +107564,7 @@ function getUserAgent() {
107522
107564
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
107523
107565
  const workload = getWorkload();
107524
107566
  const workloadSuffix = workload ? `, workload/${workload}` : "";
107525
- return `ur-cli/${"1.76.10"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107567
+ return `ur-cli/${"1.77.1"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107526
107568
  }
107527
107569
  function getMCPUserAgent() {
107528
107570
  const parts = [];
@@ -107536,7 +107578,7 @@ function getMCPUserAgent() {
107536
107578
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
107537
107579
  }
107538
107580
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
107539
- return `ur/${"1.76.10"}${suffix}`;
107581
+ return `ur/${"1.77.1"}${suffix}`;
107540
107582
  }
107541
107583
  function getWebFetchUserAgent() {
107542
107584
  return `UR-User (${getURCodeUserAgent()})`;
@@ -107674,7 +107716,7 @@ var init_user = __esm(() => {
107674
107716
  deviceId,
107675
107717
  sessionId: getSessionId(),
107676
107718
  email: getEmail(),
107677
- appVersion: "1.76.10",
107719
+ appVersion: "1.77.1",
107678
107720
  platform: getHostPlatformForAnalytics(),
107679
107721
  organizationUuid,
107680
107722
  accountUuid,
@@ -115561,7 +115603,7 @@ var init_metadata = __esm(() => {
115561
115603
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
115562
115604
  WHITESPACE_REGEX = /\s+/;
115563
115605
  getVersionBase = memoize_default(() => {
115564
- const match = "1.76.10".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115606
+ const match = "1.77.1".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115565
115607
  return match ? match[0] : undefined;
115566
115608
  });
115567
115609
  buildEnvContext = memoize_default(async () => {
@@ -115601,7 +115643,7 @@ var init_metadata = __esm(() => {
115601
115643
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
115602
115644
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
115603
115645
  isURAiAuth: isURAISubscriber(),
115604
- version: "1.76.10",
115646
+ version: "1.77.1",
115605
115647
  versionBase: getVersionBase(),
115606
115648
  buildTime: "",
115607
115649
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -116271,7 +116313,7 @@ function initialize1PEventLogging() {
116271
116313
  const platform2 = getPlatform();
116272
116314
  const attributes = {
116273
116315
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
116274
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.76.10"
116316
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.77.1"
116275
116317
  };
116276
116318
  if (platform2 === "wsl") {
116277
116319
  const wslVersion = getWslVersion();
@@ -116299,7 +116341,7 @@ function initialize1PEventLogging() {
116299
116341
  })
116300
116342
  ]
116301
116343
  });
116302
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.76.10");
116344
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.77.1");
116303
116345
  }
116304
116346
  async function reinitialize1PEventLoggingIfConfigChanged() {
116305
116347
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -126081,7 +126123,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
126081
126123
  function formatA2AAgentCard(options = {}, pretty = true) {
126082
126124
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
126083
126125
  }
126084
- var urVersion = "1.76.10", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
126126
+ var urVersion = "1.77.1", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
126085
126127
  var init_trends = __esm(() => {
126086
126128
  init_a2aCardSignature();
126087
126129
  coverage = [
@@ -128884,7 +128926,7 @@ function getAttributionHeader(fingerprint) {
128884
128926
  if (!isAttributionHeaderEnabled()) {
128885
128927
  return "";
128886
128928
  }
128887
- const version2 = `${"1.76.10"}.${fingerprint}`;
128929
+ const version2 = `${"1.77.1"}.${fingerprint}`;
128888
128930
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
128889
128931
  const cch = "";
128890
128932
  const workload = getWorkload();
@@ -156883,7 +156925,7 @@ var init_projectSafety = __esm(() => {
156883
156925
  function getInstruments() {
156884
156926
  if (instruments)
156885
156927
  return instruments;
156886
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.76.10");
156928
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.77.1");
156887
156929
  instruments = {
156888
156930
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
156889
156931
  description: "GenAI operation duration.",
@@ -156981,7 +157023,7 @@ function genAiAgentAttributes() {
156981
157023
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
156982
157024
  "gen_ai.provider.name": "ur",
156983
157025
  "gen_ai.agent.name": "UR-Nexus",
156984
- "gen_ai.agent.version": "1.76.10"
157026
+ "gen_ai.agent.version": "1.77.1"
156985
157027
  };
156986
157028
  }
156987
157029
  function genAiWorkflowAttributes(workflowName) {
@@ -156997,7 +157039,7 @@ function genAiWorkflowAttributes(workflowName) {
156997
157039
  function startGenAiWorkflowSpan(workflowName) {
156998
157040
  const attributes = genAiWorkflowAttributes(workflowName);
156999
157041
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
157000
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.10").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
157042
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.77.1").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
157001
157043
  }
157002
157044
  function endGenAiWorkflowSpan(span, options2 = {}) {
157003
157045
  try {
@@ -157035,7 +157077,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
157035
157077
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
157036
157078
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
157037
157079
  }
157038
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.10").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
157080
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.77.1").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
157039
157081
  }
157040
157082
  function endGenAiMemorySpan(span, options2 = {}) {
157041
157083
  try {
@@ -250683,7 +250725,7 @@ function getTelemetryAttributes() {
250683
250725
  attributes["session.id"] = sessionId;
250684
250726
  }
250685
250727
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
250686
- attributes["app.version"] = "1.76.10";
250728
+ attributes["app.version"] = "1.77.1";
250687
250729
  }
250688
250730
  const oauthAccount = getOauthAccountInfo();
250689
250731
  if (oauthAccount) {
@@ -297190,7 +297232,7 @@ function getInstallationEnv() {
297190
297232
  return;
297191
297233
  }
297192
297234
  function getURCodeVersion() {
297193
- return "1.76.10";
297235
+ return "1.77.1";
297194
297236
  }
297195
297237
  async function getInstalledVSCodeExtensionVersion(command) {
297196
297238
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -304521,7 +304563,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
304521
304563
  const client2 = new Client({
304522
304564
  name: "ur",
304523
304565
  title: "UR",
304524
- version: "1.76.10",
304566
+ version: "1.77.1",
304525
304567
  description: "UR-Nexus autonomous engineering workflow engine",
304526
304568
  websiteUrl: PRODUCT_URL
304527
304569
  }, {
@@ -304881,7 +304923,7 @@ var init_client5 = __esm(() => {
304881
304923
  const client2 = new Client({
304882
304924
  name: "ur",
304883
304925
  title: "UR",
304884
- version: "1.76.10",
304926
+ version: "1.77.1",
304885
304927
  description: "UR-Nexus autonomous engineering workflow engine",
304886
304928
  websiteUrl: PRODUCT_URL
304887
304929
  }, {
@@ -317434,7 +317476,7 @@ async function createRuntime() {
317434
317476
  bootstrapTelemetry();
317435
317477
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
317436
317478
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
317437
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.76.10"
317479
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.77.1"
317438
317480
  }));
317439
317481
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
317440
317482
  resource,
@@ -317467,11 +317509,11 @@ async function createRuntime() {
317467
317509
  setMeterProvider(meterProvider);
317468
317510
  setLoggerProvider(loggerProvider);
317469
317511
  if (meterProvider) {
317470
- const meter = meterProvider.getMeter("ur-agent", "1.76.10");
317512
+ const meter = meterProvider.getMeter("ur-agent", "1.77.1");
317471
317513
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
317472
317514
  }
317473
317515
  if (loggerProvider) {
317474
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.76.10"));
317516
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.77.1"));
317475
317517
  }
317476
317518
  if (!cleanupRegistered2) {
317477
317519
  cleanupRegistered2 = true;
@@ -318133,9 +318175,9 @@ async function assertMinVersion() {
318133
318175
  if (false) {}
318134
318176
  try {
318135
318177
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
318136
- if (versionConfig.minVersion && lt("1.76.10", versionConfig.minVersion)) {
318178
+ if (versionConfig.minVersion && lt("1.77.1", versionConfig.minVersion)) {
318137
318179
  console.error(`
318138
- It looks like your version of UR (${"1.76.10"}) needs an update.
318180
+ It looks like your version of UR (${"1.77.1"}) needs an update.
318139
318181
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
318140
318182
 
318141
318183
  To update, please run:
@@ -318351,7 +318393,7 @@ async function installGlobalPackage(specificVersion) {
318351
318393
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
318352
318394
  logEvent("tengu_auto_updater_lock_contention", {
318353
318395
  pid: process.pid,
318354
- currentVersion: "1.76.10"
318396
+ currentVersion: "1.77.1"
318355
318397
  });
318356
318398
  return "in_progress";
318357
318399
  }
@@ -318360,7 +318402,7 @@ async function installGlobalPackage(specificVersion) {
318360
318402
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
318361
318403
  logError2(new Error("Windows NPM detected in WSL environment"));
318362
318404
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
318363
- currentVersion: "1.76.10"
318405
+ currentVersion: "1.77.1"
318364
318406
  });
318365
318407
  console.error(`
318366
318408
  Error: Windows NPM detected in WSL
@@ -318895,7 +318937,7 @@ function detectLinuxGlobPatternWarnings() {
318895
318937
  }
318896
318938
  async function getDoctorDiagnostic() {
318897
318939
  const installationType = await getCurrentInstallationType();
318898
- const version2 = typeof MACRO !== "undefined" ? "1.76.10" : "unknown";
318940
+ const version2 = typeof MACRO !== "undefined" ? "1.77.1" : "unknown";
318899
318941
  const installationPath = await getInstallationPath();
318900
318942
  const invokedBinary = getInvokedBinary();
318901
318943
  const multipleInstallations = await detectMultipleInstallations();
@@ -319830,8 +319872,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
319830
319872
  const maxVersion = await getMaxVersion();
319831
319873
  if (maxVersion && gt(version2, maxVersion)) {
319832
319874
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
319833
- if (gte("1.76.10", maxVersion)) {
319834
- logForDebugging(`Native installer: current version ${"1.76.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
319875
+ if (gte("1.77.1", maxVersion)) {
319876
+ logForDebugging(`Native installer: current version ${"1.77.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
319835
319877
  logEvent("tengu_native_update_skipped_max_version", {
319836
319878
  latency_ms: Date.now() - startTime,
319837
319879
  max_version: maxVersion,
@@ -319842,7 +319884,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
319842
319884
  version2 = maxVersion;
319843
319885
  }
319844
319886
  }
319845
- if (!forceReinstall && version2 === "1.76.10" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
319887
+ if (!forceReinstall && version2 === "1.77.1" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
319846
319888
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
319847
319889
  logEvent("tengu_native_update_complete", {
319848
319890
  latency_ms: Date.now() - startTime,
@@ -354013,6 +354055,15 @@ async function getShellConfigImpl() {
354013
354055
  const provider = await createBashShellProvider(binShell);
354014
354056
  return { provider };
354015
354057
  }
354058
+ function ensureTaskOutputDir() {
354059
+ taskOutputDirReady ??= mkdir20(getTaskOutputDir(), { recursive: true }).then(() => {
354060
+ return;
354061
+ }, (error40) => {
354062
+ taskOutputDirReady = undefined;
354063
+ throw error40;
354064
+ });
354065
+ return taskOutputDirReady;
354066
+ }
354016
354067
  async function exec3(command, abortSignal, shellType, options2) {
354017
354068
  const {
354018
354069
  timeout,
@@ -354069,7 +354120,7 @@ async function exec3(command, abortSignal, shellType, options2) {
354069
354120
  const usePipeMode = !!onStdout;
354070
354121
  const taskId = generateTaskId("local_bash");
354071
354122
  const taskOutput = new TaskOutput(taskId, onProgress ?? null, !usePipeMode);
354072
- await mkdir20(getTaskOutputDir(), { recursive: true });
354123
+ await ensureTaskOutputDir();
354073
354124
  let outputHandle;
354074
354125
  let stderrHandle;
354075
354126
  if (!usePipeMode) {
@@ -354175,7 +354226,7 @@ function setCwd(path13, relativeTo) {
354175
354226
  } catch (_error) {}
354176
354227
  }
354177
354228
  }
354178
- var DEFAULT_TIMEOUT, getShellConfig, getPsProvider, resolveProvider;
354229
+ var DEFAULT_TIMEOUT, getShellConfig, getPsProvider, resolveProvider, taskOutputDirReady;
354179
354230
  var init_Shell = __esm(() => {
354180
354231
  init_memoize();
354181
354232
  init_analytics();
@@ -366406,28 +366457,6 @@ var init_FileEditTool = __esm(() => {
366406
366457
  };
366407
366458
  }
366408
366459
  const readTimestamp = toolUseContext.readFileState.get(fullFilePath);
366409
- if (!readTimestamp || readTimestamp.isPartialView) {
366410
- return {
366411
- result: false,
366412
- behavior: "ask",
366413
- message: "File has not been read yet. Read it first before writing to it.",
366414
- meta: {
366415
- isFilePathAbsolute: String(isAbsolute24(file_path))
366416
- },
366417
- errorCode: 6
366418
- };
366419
- }
366420
- if (readTimestamp) {
366421
- const lastWriteTime = getFileModificationTime(fullFilePath);
366422
- if (lastWriteTime > readTimestamp.timestamp || !fileStateMatchesContent(fileContent, readTimestamp)) {
366423
- return {
366424
- result: false,
366425
- behavior: "ask",
366426
- message: "File has been modified since read, either by the user or by a linter. Read it again before attempting to write it.",
366427
- errorCode: 7
366428
- };
366429
- }
366430
- }
366431
366460
  const file2 = fileContent;
366432
366461
  const editTarget = findEditTarget(file2, old_string);
366433
366462
  const actualOldString = editTarget?.actual ?? null;
@@ -366435,13 +366464,21 @@ var init_FileEditTool = __esm(() => {
366435
366464
  return {
366436
366465
  result: false,
366437
366466
  behavior: "ask",
366438
- message: describeEditMatchFailure(file2, old_string),
366467
+ message: readTimestamp === undefined ? `${describeEditMatchFailure(file2, old_string)} This file has not been read in this session \u2014 read it and copy the target text from the result.` : describeEditMatchFailure(file2, old_string),
366439
366468
  meta: {
366440
366469
  isFilePathAbsolute: String(isAbsolute24(file_path))
366441
366470
  },
366442
366471
  errorCode: 8
366443
366472
  };
366444
366473
  }
366474
+ if (readTimestamp === undefined || readTimestamp.isPartialView || !fileStateMatchesContent(file2, readTimestamp)) {
366475
+ toolUseContext.readFileState.set(fullFilePath, {
366476
+ content: file2,
366477
+ timestamp: getFileModificationTime(fullFilePath),
366478
+ offset: undefined,
366479
+ limit: undefined
366480
+ });
366481
+ }
366445
366482
  const matches = file2.split(actualOldString).length - 1;
366446
366483
  if (matches > 1 && !replace_all) {
366447
366484
  return {
@@ -366521,7 +366558,7 @@ String: ${old_string}`,
366521
366558
  if (fileExists) {
366522
366559
  const lastWriteTime = getFileModificationTime(absoluteFilePath);
366523
366560
  const lastRead = readFileState.get(absoluteFilePath);
366524
- if (!lastRead || lastWriteTime > lastRead.timestamp || !fileStateMatchesContent(originalFileContents, lastRead)) {
366561
+ if (lastRead && (lastWriteTime > lastRead.timestamp || !fileStateMatchesContent(originalFileContents, lastRead))) {
366525
366562
  throw new Error(FILE_UNEXPECTEDLY_MODIFIED_ERROR);
366526
366563
  }
366527
366564
  }
@@ -367236,14 +367273,16 @@ var init_FileWriteTool = __esm(() => {
367236
367273
  throw e;
367237
367274
  }
367238
367275
  const readTimestamp = toolUseContext.readFileState.get(fullFilePath);
367276
+ const lastWriteTime = Math.floor(fileMtimeMs);
367239
367277
  if (!readTimestamp || readTimestamp.isPartialView) {
367240
- return {
367241
- result: false,
367242
- message: "File has not been read yet. Read it first before writing to it.",
367243
- errorCode: 2
367244
- };
367278
+ toolUseContext.readFileState.set(fullFilePath, {
367279
+ content: readFileSyncCached(fullFilePath),
367280
+ timestamp: lastWriteTime,
367281
+ offset: undefined,
367282
+ limit: undefined
367283
+ });
367284
+ return { result: true };
367245
367285
  }
367246
- const lastWriteTime = Math.floor(fileMtimeMs);
367247
367286
  if (lastWriteTime > readTimestamp.timestamp) {
367248
367287
  return {
367249
367288
  result: false,
@@ -389549,7 +389588,7 @@ function isAnyTracingEnabled() {
389549
389588
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
389550
389589
  }
389551
389590
  function getTracer() {
389552
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.76.10");
389591
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.77.1");
389553
389592
  }
389554
389593
  function createSpanAttributes(spanType, customAttributes = {}) {
389555
389594
  const baseAttributes = getTelemetryAttributes();
@@ -419716,7 +419755,7 @@ function Feedback({
419716
419755
  platform: env2.platform,
419717
419756
  gitRepo: envInfo.isGit,
419718
419757
  terminal: env2.terminal,
419719
- version: "1.76.10",
419758
+ version: "1.77.1",
419720
419759
  transcript: normalizeMessagesForAPI(messages),
419721
419760
  errors: sanitizedErrors,
419722
419761
  lastApiRequest: getLastAPIRequest(),
@@ -419908,7 +419947,7 @@ function Feedback({
419908
419947
  ", ",
419909
419948
  env2.terminal,
419910
419949
  ", v",
419911
- "1.76.10"
419950
+ "1.77.1"
419912
419951
  ]
419913
419952
  }, undefined, true, undefined, this)
419914
419953
  ]
@@ -420014,7 +420053,7 @@ ${sanitizedDescription}
420014
420053
  ` + `**Environment Info**
420015
420054
  ` + `- Platform: ${env2.platform}
420016
420055
  ` + `- Terminal: ${env2.terminal}
420017
- ` + `- Version: ${"1.76.10"}
420056
+ ` + `- Version: ${"1.77.1"}
420018
420057
  ` + `- Feedback ID: ${feedbackId}
420019
420058
  ` + `
420020
420059
  **Errors**
@@ -423124,7 +423163,7 @@ function buildPrimarySection() {
423124
423163
  }, undefined, false, undefined, this);
423125
423164
  return [{
423126
423165
  label: "Version",
423127
- value: "1.76.10"
423166
+ value: "1.77.1"
423128
423167
  }, {
423129
423168
  label: "Session name",
423130
423169
  value: nameValue
@@ -426506,7 +426545,7 @@ function Config({
426506
426545
  }
426507
426546
  }, undefined, false, undefined, this)
426508
426547
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
426509
- currentVersion: "1.76.10",
426548
+ currentVersion: "1.77.1",
426510
426549
  onChoice: (choice) => {
426511
426550
  setShowSubmenu(null);
426512
426551
  setTabsHidden(false);
@@ -426518,7 +426557,7 @@ function Config({
426518
426557
  autoUpdatesChannel: "stable"
426519
426558
  };
426520
426559
  if (choice === "stay") {
426521
- newSettings.minimumVersion = "1.76.10";
426560
+ newSettings.minimumVersion = "1.77.1";
426522
426561
  }
426523
426562
  updateSettingsForSource("userSettings", newSettings);
426524
426563
  setSettingsData((prev_27) => ({
@@ -434582,7 +434621,7 @@ function HelpV2(t0) {
434582
434621
  let t6;
434583
434622
  if ($2[31] !== tabs) {
434584
434623
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
434585
- title: `UR v${"1.76.10"}`,
434624
+ title: `UR v${"1.77.1"}`,
434586
434625
  color: "professionalBlue",
434587
434626
  defaultTab: "general",
434588
434627
  children: tabs
@@ -435515,7 +435554,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
435515
435554
  async function handleInitialize(options2) {
435516
435555
  return {
435517
435556
  name: "UR",
435518
- version: "1.76.10",
435557
+ version: "1.77.1",
435519
435558
  protocolVersion: "0.1.0",
435520
435559
  workspaceRoot: options2.cwd,
435521
435560
  capabilities: {
@@ -452623,7 +452662,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
452623
452662
  return [];
452624
452663
  }
452625
452664
  }
452626
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.10") {
452665
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.77.1") {
452627
452666
  if (process.env.USER_TYPE === "ant") {
452628
452667
  const changelog = "";
452629
452668
  if (changelog) {
@@ -452650,7 +452689,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.10")
452650
452689
  releaseNotes
452651
452690
  };
452652
452691
  }
452653
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.76.10") {
452692
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.77.1") {
452654
452693
  if (process.env.USER_TYPE === "ant") {
452655
452694
  const changelog = "";
452656
452695
  if (changelog) {
@@ -455516,7 +455555,7 @@ function getRecentActivitySync() {
455516
455555
  return cachedActivity;
455517
455556
  }
455518
455557
  function getLogoDisplayData() {
455519
- const version2 = process.env.DEMO_VERSION ?? "1.76.10";
455558
+ const version2 = process.env.DEMO_VERSION ?? "1.77.1";
455520
455559
  const serverUrl = getDirectConnectServerUrl();
455521
455560
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
455522
455561
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -456383,7 +456422,7 @@ function LogoV2() {
456383
456422
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
456384
456423
  t2 = () => {
456385
456424
  const currentConfig2 = getGlobalConfig();
456386
- if (currentConfig2.lastReleaseNotesSeen === "1.76.10") {
456425
+ if (currentConfig2.lastReleaseNotesSeen === "1.77.1") {
456387
456426
  return;
456388
456427
  }
456389
456428
  saveGlobalConfig(_temp325);
@@ -457068,12 +457107,12 @@ function LogoV2() {
457068
457107
  return t41;
457069
457108
  }
457070
457109
  function _temp325(current) {
457071
- if (current.lastReleaseNotesSeen === "1.76.10") {
457110
+ if (current.lastReleaseNotesSeen === "1.77.1") {
457072
457111
  return current;
457073
457112
  }
457074
457113
  return {
457075
457114
  ...current,
457076
- lastReleaseNotesSeen: "1.76.10"
457115
+ lastReleaseNotesSeen: "1.77.1"
457077
457116
  };
457078
457117
  }
457079
457118
  function _temp241(s_0) {
@@ -473887,7 +473926,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
473887
473926
  if (spec.name !== specName) {
473888
473927
  throw new Error("Agentic CI workflow spec name does not match");
473889
473928
  }
473890
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.76.10" : "1.76.10");
473929
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.77.1" : "1.77.1");
473891
473930
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
473892
473931
  throw new Error("invalid ur-agent package version");
473893
473932
  }
@@ -474880,7 +474919,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
474880
474919
  path: ".github/workflows/ur.yml",
474881
474920
  root: "project",
474882
474921
  content: compileAgenticCiWorkflow("default", {
474883
- packageVersion: typeof MACRO !== "undefined" ? "1.76.10" : "1.76.10"
474922
+ packageVersion: typeof MACRO !== "undefined" ? "1.77.1" : "1.77.1"
474884
474923
  })
474885
474924
  },
474886
474925
  {
@@ -474943,7 +474982,7 @@ function value(tokens, flag) {
474943
474982
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
474944
474983
  }
474945
474984
  function cliVersion() {
474946
- return typeof MACRO !== "undefined" ? "1.76.10" : "1.76.10";
474985
+ return typeof MACRO !== "undefined" ? "1.77.1" : "1.77.1";
474947
474986
  }
474948
474987
  function workflowPath(cwd2) {
474949
474988
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -480799,7 +480838,7 @@ function createAcpStdioApp(deps) {
480799
480838
  }
480800
480839
  },
480801
480840
  authMethods: [],
480802
- agentInfo: { name: "UR-Nexus", version: "1.76.10" }
480841
+ agentInfo: { name: "UR-Nexus", version: "1.77.1" }
480803
480842
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
480804
480843
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
480805
480844
  await runtime2.announce({
@@ -480896,7 +480935,7 @@ function createAcpStdioAgent(deps) {
480896
480935
  }
480897
480936
  },
480898
480937
  authMethods: [],
480899
- agentInfo: { name: "UR-Nexus", version: "1.76.10" }
480938
+ agentInfo: { name: "UR-Nexus", version: "1.77.1" }
480900
480939
  });
480901
480940
  return;
480902
480941
  case "authenticate":
@@ -690356,7 +690395,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
690356
690395
  smapsRollup,
690357
690396
  platform: process.platform,
690358
690397
  nodeVersion: process.version,
690359
- ccVersion: "1.76.10"
690398
+ ccVersion: "1.77.1"
690360
690399
  };
690361
690400
  }
690362
690401
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -690936,7 +690975,7 @@ var init_bridge_kick = __esm(() => {
690936
690975
  var call154 = async () => {
690937
690976
  return {
690938
690977
  type: "text",
690939
- value: "1.76.10"
690978
+ value: "1.77.1"
690940
690979
  };
690941
690980
  }, version2, version_default;
690942
690981
  var init_version = __esm(() => {
@@ -702203,7 +702242,7 @@ function generateHtmlReport(data, insights) {
702203
702242
  </html>`;
702204
702243
  }
702205
702244
  function buildExportData(data, insights, facets, remoteStats) {
702206
- const version3 = typeof MACRO !== "undefined" ? "1.76.10" : "unknown";
702245
+ const version3 = typeof MACRO !== "undefined" ? "1.77.1" : "unknown";
702207
702246
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
702208
702247
  const facets_summary = {
702209
702248
  total: facets.size,
@@ -706517,7 +706556,7 @@ var init_sessionStorage = __esm(() => {
706517
706556
  init_settings2();
706518
706557
  init_slowOperations();
706519
706558
  init_uuid();
706520
- VERSION7 = typeof MACRO !== "undefined" ? "1.76.10" : "unknown";
706559
+ VERSION7 = typeof MACRO !== "undefined" ? "1.77.1" : "unknown";
706521
706560
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
706522
706561
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
706523
706562
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -707732,7 +707771,7 @@ var init_filesystem = __esm(() => {
707732
707771
  });
707733
707772
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
707734
707773
  const nonce = randomBytes20(16).toString("hex");
707735
- return join232(getURTempDir(), "bundled-skills", "1.76.10", nonce);
707774
+ return join232(getURTempDir(), "bundled-skills", "1.77.1", nonce);
707736
707775
  });
707737
707776
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
707738
707777
  });
@@ -713371,6 +713410,12 @@ Focus text output on:
713371
713410
  - High-level status updates at natural milestones
713372
713411
  - Errors or blockers that change the plan
713373
713412
 
713413
+ Finishing a task is not an invitation to write at length. The work is in the files and the tool calls; the final message only says what changed and anything the user must act on. Specifically:
713414
+ - Never paste code, file contents, or diffs you already wrote to disk. Cite \`file_path:line\` instead. The user can open the file.
713415
+ - Report an audit, review, or investigation as its findings \u2014 one line each, and only the ones that matter. Do not narrate how you searched or restate what you read.
713416
+ - Do not re-explain a change you already described, list every file touched, or add a closing recap of the conversation.
713417
+ - Write a long explanation only when the user asks for one.
713418
+
713374
713419
  If you can say it in one sentence, don't use three. Prefer short, direct sentences over long explanations. This does not apply to code or tool calls.`;
713375
713420
  }
713376
713421
  function getSimpleToneAndStyleSection() {
@@ -713593,7 +713638,7 @@ function getFunctionResultClearingSection(model) {
713593
713638
 
713594
713639
  Old tool results will be automatically cleared from context to free up space. The ${config3.keepRecent} most recent results are always kept.`;
713595
713640
  }
713596
- var getCachedMCConfigForFRC = null, DISCOVER_SKILLS_TOOL_NAME = null, SYSTEM_PROMPT_DYNAMIC_BOUNDARY = "__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__", DEFAULT_AGENT_PROMPT = `You are an agent for Ur. Given the user's message, you should use the tools available to complete the task. Complete the task fully\u2014don't gold-plate, but don't leave it half-done. When you complete the task, respond with a concise report covering what was done and any key findings \u2014 the caller will relay this to the user, so it only needs the essentials.`, SUMMARIZE_TOOL_RESULTS_SECTION = `When working with tool results, write down any important information you might need later in your response, as the original tool result may be cleared later.`;
713641
+ var getCachedMCConfigForFRC = null, DISCOVER_SKILLS_TOOL_NAME = null, SYSTEM_PROMPT_DYNAMIC_BOUNDARY = "__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__", DEFAULT_AGENT_PROMPT = `You are an agent for Ur. Given the user's message, you should use the tools available to complete the task. Complete the task fully\u2014don't gold-plate, but don't leave it half-done. When you complete the task, respond with a concise report covering what was done and any key findings \u2014 the caller will relay this to the user, so it only needs the essentials. Do not include code or file contents you already wrote; cite \`file_path:line\`.`, SUMMARIZE_TOOL_RESULTS_SECTION = `When working with tool results, write down any important information you might need later in your response, as the original tool result may be cleared later.`;
713597
713642
  var init_prompts4 = __esm(() => {
713598
713643
  init_env();
713599
713644
  init_git();
@@ -714081,7 +714126,7 @@ function computeFingerprint(messageText2, version3) {
714081
714126
  }
714082
714127
  function computeFingerprintFromMessages(messages) {
714083
714128
  const firstMessageText = extractFirstMessageText(messages);
714084
- return computeFingerprint(firstMessageText, "1.76.10");
714129
+ return computeFingerprint(firstMessageText, "1.77.1");
714085
714130
  }
714086
714131
  var FINGERPRINT_SALT = "59cf53e54c78";
714087
714132
  var init_fingerprint = () => {};
@@ -716003,7 +716048,7 @@ async function sideQuery(opts) {
716003
716048
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
716004
716049
  }
716005
716050
  const messageText2 = extractFirstUserMessageText(messages);
716006
- const fingerprint2 = computeFingerprint(messageText2, "1.76.10");
716051
+ const fingerprint2 = computeFingerprint(messageText2, "1.77.1");
716007
716052
  const attributionHeader = getAttributionHeader(fingerprint2);
716008
716053
  const systemBlocks = [
716009
716054
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -720840,7 +720885,7 @@ function buildSystemInitMessage(inputs) {
720840
720885
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
720841
720886
  apiKeySource: getURHQApiKeyWithSource().source,
720842
720887
  betas: getSdkBetas(),
720843
- ur_version: "1.76.10",
720888
+ ur_version: "1.77.1",
720844
720889
  output_style: outputStyle2,
720845
720890
  agents: inputs.agents.map((agent2) => agent2.agentType),
720846
720891
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -734712,7 +734757,7 @@ var init_useVoiceEnabled = __esm(() => {
734712
734757
  function getSemverPart(version3) {
734713
734758
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
734714
734759
  }
734715
- function useUpdateNotification(updatedVersion, initialVersion = "1.76.10") {
734760
+ function useUpdateNotification(updatedVersion, initialVersion = "1.77.1") {
734716
734761
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react223.useState(() => getSemverPart(initialVersion));
734717
734762
  if (!updatedVersion) {
734718
734763
  return null;
@@ -734761,7 +734806,7 @@ function AutoUpdater({
734761
734806
  return;
734762
734807
  }
734763
734808
  if (false) {}
734764
- const currentVersion = "1.76.10";
734809
+ const currentVersion = "1.77.1";
734765
734810
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
734766
734811
  let latestVersion = await getLatestVersion(channel);
734767
734812
  const isDisabled = isAutoUpdaterDisabled();
@@ -734990,12 +735035,12 @@ function NativeAutoUpdater({
734990
735035
  logEvent("tengu_native_auto_updater_start", {});
734991
735036
  try {
734992
735037
  const maxVersion = await getMaxVersion();
734993
- if (maxVersion && gt("1.76.10", maxVersion)) {
735038
+ if (maxVersion && gt("1.77.1", maxVersion)) {
734994
735039
  const msg = await getMaxVersionMessage();
734995
735040
  setMaxVersionIssue(msg ?? "affects your version");
734996
735041
  }
734997
735042
  const result = await installLatest(channel);
734998
- const currentVersion = "1.76.10";
735043
+ const currentVersion = "1.77.1";
734999
735044
  const latencyMs = Date.now() - startTime;
735000
735045
  if (result.lockFailed) {
735001
735046
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -735132,17 +735177,17 @@ function PackageManagerAutoUpdater(t0) {
735132
735177
  const maxVersion = await getMaxVersion();
735133
735178
  if (maxVersion && latest && gt(latest, maxVersion)) {
735134
735179
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
735135
- if (gte("1.76.10", maxVersion)) {
735136
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.76.10"} is already at or above maxVersion ${maxVersion}, skipping update`);
735180
+ if (gte("1.77.1", maxVersion)) {
735181
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.77.1"} is already at or above maxVersion ${maxVersion}, skipping update`);
735137
735182
  setUpdateAvailable(false);
735138
735183
  return;
735139
735184
  }
735140
735185
  latest = maxVersion;
735141
735186
  }
735142
- const hasUpdate = latest && !gte("1.76.10", latest) && !shouldSkipVersion(latest);
735187
+ const hasUpdate = latest && !gte("1.77.1", latest) && !shouldSkipVersion(latest);
735143
735188
  setUpdateAvailable(!!hasUpdate);
735144
735189
  if (hasUpdate) {
735145
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.76.10"} -> ${latest}`);
735190
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.77.1"} -> ${latest}`);
735146
735191
  }
735147
735192
  };
735148
735193
  $2[0] = t1;
@@ -735176,7 +735221,7 @@ function PackageManagerAutoUpdater(t0) {
735176
735221
  wrap: "truncate",
735177
735222
  children: [
735178
735223
  "currentVersion: ",
735179
- "1.76.10"
735224
+ "1.77.1"
735180
735225
  ]
735181
735226
  }, undefined, true, undefined, this);
735182
735227
  $2[3] = verbose;
@@ -745976,7 +746021,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
745976
746021
  project_dir: getOriginalCwd(),
745977
746022
  added_dirs: addedDirs
745978
746023
  },
745979
- version: "1.76.10",
746024
+ version: "1.77.1",
745980
746025
  output_style: {
745981
746026
  name: outputStyleName
745982
746027
  },
@@ -746111,7 +746156,7 @@ function StatusLineInner({
746111
746156
  const attention = customStatusError ?? taskAttention;
746112
746157
  const terminalSize = React132.useContext(TerminalSizeContext);
746113
746158
  const defaultStatusLineText = buildDefaultStatusBar({
746114
- version: "1.76.10",
746159
+ version: "1.77.1",
746115
746160
  providerLabel: providerRuntime.providerLabel,
746116
746161
  authMode: providerRuntime.authLabel,
746117
746162
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -758396,7 +758441,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
758396
758441
  } catch {}
758397
758442
  const data = {
758398
758443
  trigger: trigger2,
758399
- version: "1.76.10",
758444
+ version: "1.77.1",
758400
758445
  platform: process.platform,
758401
758446
  transcript,
758402
758447
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -770770,7 +770815,7 @@ function WelcomeV2() {
770770
770815
  dimColor: true,
770771
770816
  children: [
770772
770817
  "v",
770773
- "1.76.10"
770818
+ "1.77.1"
770774
770819
  ]
770775
770820
  }, undefined, true, undefined, this)
770776
770821
  ]
@@ -772030,7 +772075,7 @@ function completeOnboarding() {
772030
772075
  saveGlobalConfig((current) => ({
772031
772076
  ...current,
772032
772077
  hasCompletedOnboarding: true,
772033
- lastOnboardingVersion: "1.76.10"
772078
+ lastOnboardingVersion: "1.77.1"
772034
772079
  }));
772035
772080
  }
772036
772081
  function showDialog(root2, renderer) {
@@ -777074,7 +777119,7 @@ function appendToLog(path24, message) {
777074
777119
  cwd: getFsImplementation().cwd(),
777075
777120
  userType: process.env.USER_TYPE,
777076
777121
  sessionId: getSessionId(),
777077
- version: "1.76.10"
777122
+ version: "1.77.1"
777078
777123
  };
777079
777124
  getLogWriter(path24).write(messageWithTimestamp);
777080
777125
  }
@@ -781233,8 +781278,8 @@ async function getEnvLessBridgeConfig() {
781233
781278
  }
781234
781279
  async function checkEnvLessBridgeMinVersion() {
781235
781280
  const cfg = await getEnvLessBridgeConfig();
781236
- if (cfg.min_version && lt("1.76.10", cfg.min_version)) {
781237
- return `Your version of UR (${"1.76.10"}) is too old for Remote Control.
781281
+ if (cfg.min_version && lt("1.77.1", cfg.min_version)) {
781282
+ return `Your version of UR (${"1.77.1"}) is too old for Remote Control.
781238
781283
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
781239
781284
  }
781240
781285
  return null;
@@ -781708,7 +781753,7 @@ async function initBridgeCore(params) {
781708
781753
  const rawApi = createBridgeApiClient({
781709
781754
  baseUrl,
781710
781755
  getAccessToken,
781711
- runnerVersion: "1.76.10",
781756
+ runnerVersion: "1.77.1",
781712
781757
  onDebug: logForDebugging,
781713
781758
  onAuth401,
781714
781759
  getTrustedDeviceToken
@@ -791181,7 +791226,7 @@ function getAgUiCapabilities() {
791181
791226
  name: "UR-Nexus",
791182
791227
  type: "ur-nexus",
791183
791228
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
791184
- version: "1.76.10",
791229
+ version: "1.77.1",
791185
791230
  provider: "UR",
791186
791231
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
791187
791232
  },
@@ -792321,7 +792366,7 @@ function createMCPServer(cwd4, debug2, verbose) {
792321
792366
  };
792322
792367
  const server2 = new Server({
792323
792368
  name: "ur-nexus",
792324
- version: "1.76.10"
792369
+ version: "1.77.1"
792325
792370
  }, {
792326
792371
  capabilities: {
792327
792372
  tools: {}
@@ -793479,7 +793524,7 @@ function thrownResponse(error40) {
793479
793524
  }
793480
793525
  async function createUrMcp2026Runtime(options4) {
793481
793526
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
793482
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.76.10" }, { capabilities: {} });
793527
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.77.1" }, { capabilities: {} });
793483
793528
  const [clientTransport, serverTransport] = createLinkedTransportPair();
793484
793529
  try {
793485
793530
  await server2.connect(serverTransport);
@@ -793490,7 +793535,7 @@ async function createUrMcp2026Runtime(options4) {
793490
793535
  }
793491
793536
  const runtime2 = new Mcp2026Runtime({
793492
793537
  cwd: options4.cwd,
793493
- version: "1.76.10",
793538
+ version: "1.77.1",
793494
793539
  backend: {
793495
793540
  listTools: async () => {
793496
793541
  const listed = await client2.listTools();
@@ -795631,7 +795676,7 @@ async function update() {
795631
795676
  logEvent("tengu_update_check", {});
795632
795677
  const diagnostic2 = await getDoctorDiagnostic();
795633
795678
  const result = await checkUpgradeStatus({
795634
- currentVersion: "1.76.10",
795679
+ currentVersion: "1.77.1",
795635
795680
  packageName: UR_AGENT_PACKAGE_NAME,
795636
795681
  installationType: diagnostic2.installationType,
795637
795682
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -796947,7 +796992,7 @@ ${customInstructions}` : customInstructions;
796947
796992
  }
796948
796993
  }
796949
796994
  logForDiagnosticsNoPII("info", "started", {
796950
- version: "1.76.10",
796995
+ version: "1.77.1",
796951
796996
  is_native_binary: isInBundledMode()
796952
796997
  });
796953
796998
  registerCleanup(async () => {
@@ -797733,7 +797778,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
797733
797778
  pendingHookMessages
797734
797779
  }, renderAndRun);
797735
797780
  }
797736
- }).version("1.76.10 (UR-Nexus)", "-v, --version", "Output the version number");
797781
+ }).version("1.77.1 (UR-Nexus)", "-v, --version", "Output the version number");
797737
797782
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
797738
797783
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
797739
797784
  if (canUserConfigureAdvisor()) {
@@ -798785,7 +798830,7 @@ if (false) {}
798785
798830
  async function main2() {
798786
798831
  const args = process.argv.slice(2);
798787
798832
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
798788
- console.log(`${"1.76.10"} (UR-Nexus)`);
798833
+ console.log(`${"1.77.1"} (UR-Nexus)`);
798789
798834
  return;
798790
798835
  }
798791
798836
  if (args[0] === "a2a" && args[1] === "serve" && !args.includes("--help") && !args.includes("-h")) {
@@ -19,7 +19,7 @@ You need:
19
19
 
20
20
  ```sh
21
21
  ur --version
22
- # expected for this release: "1.76.10 (UR-Nexus)"
22
+ # expected for this release: "1.77.1 (UR-Nexus)"
23
23
  ```
24
24
 
25
25
  ## 0.1 First-workspace model selection (1.45.4)
@@ -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.76.10</p>
48
+ <p class="eyebrow">Version 1.77.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.76.10"
10
+ version = "1.77.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.76.10",
5
+ "version": "1.77.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.76.10",
3
+ "version": "1.77.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",