ur-agent 1.76.10 → 1.77.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.77.2
4
+
5
+ - Git commit and pull-request guidance is no longer sent outside a git
6
+ repository. `shouldIncludeGitInstructions` consulted only the environment
7
+ variable and the setting, so roughly 9KB rode in the system prompt on every
8
+ turn even in workspaces with no `.git` — instructions the model could not act
9
+ on. The repository check uses the memoized synchronous `findGitRoot` already
10
+ relied on for permission checks and prompt building, so it costs nothing. The
11
+ environment variable and setting still win when either is set explicitly.
12
+
13
+ ## 1.77.1
14
+
15
+ - Finishing a task no longer produces a long write-up. Both output-efficiency
16
+ sections said "be concise" but neither addressed what actually ran long, so
17
+ the rules are now specific: never paste code or file contents already written
18
+ to disk (cite `file_path:line`), report an audit or review as its findings
19
+ one line each, no closing recap of the conversation, and long explanations
20
+ only when the user asks for one. Subagent reports carry the same rule, since
21
+ their output is relayed verbatim.
22
+
23
+ ## 1.77.0
24
+
25
+ - Edit no longer demands a prior Read. A matching `old_string` is checked
26
+ against the bytes on disk, which is exactly what "has this been read?" and
27
+ "has it changed since?" were asking — and stronger, since a stale snapshot
28
+ cannot survive a match against fresh content. The verified content is
29
+ recorded so the write path and later staleness checks work from it. This
30
+ removes a full model round trip from the most common mutating call. A
31
+ genuinely absent `old_string` is still refused, and now says the file has not
32
+ been read so the model knows to read it.
33
+ - Write no longer refuses an unread existing file. It reads and records the
34
+ file itself — one local read instead of a round trip spent asking for content
35
+ nobody needed to see — and the "modified since read" check is unchanged, now
36
+ working from that recorded baseline.
37
+ - Bash no longer issues a `mkdir` syscall on the critical path of every
38
+ command. The task output directory is process-wide and cannot change after
39
+ the first one, so it is created once; a failure is not cached, so the next
40
+ command retries.
41
+
42
+ ## 1.76.11
43
+
44
+ - AskUserQuestion recovers the payload shape where a model flattens one
45
+ question's choices straight into `questions`, so six options arrived as six
46
+ question objects carrying a label and a description and no question text.
47
+ Every entry reported "question must be a non-empty string" and "options must
48
+ be an array". The array is folded back into the options of a single question
49
+ using the question text the payload already carries. A genuine
50
+ multi-question payload is never retargeted, and with no question text
51
+ anywhere the payload is still reported rather than given an invented
52
+ question.
53
+
3
54
  ## 1.76.10
4
55
 
5
56
  - `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.2"}`;
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.2"} (${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.2"}${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.2",
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.2".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.2",
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.2"
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.2");
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.2", 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.2"}.${fingerprint}`;
128888
128930
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
128889
128931
  const cch = "";
128890
128932
  const workload = getWorkload();
@@ -153272,10 +153314,15 @@ function shouldIncludeGitInstructions() {
153272
153314
  return false;
153273
153315
  if (isEnvDefinedFalsy(envVal))
153274
153316
  return true;
153275
- return getInitialSettings().includeGitInstructions ?? true;
153317
+ if ((getInitialSettings().includeGitInstructions ?? true) === false) {
153318
+ return false;
153319
+ }
153320
+ return findGitRoot(getCwd()) !== null;
153276
153321
  }
153277
153322
  var init_gitSettings = __esm(() => {
153323
+ init_cwd2();
153278
153324
  init_envUtils();
153325
+ init_git();
153279
153326
  init_settings2();
153280
153327
  });
153281
153328
 
@@ -156883,7 +156930,7 @@ var init_projectSafety = __esm(() => {
156883
156930
  function getInstruments() {
156884
156931
  if (instruments)
156885
156932
  return instruments;
156886
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.76.10");
156933
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.77.2");
156887
156934
  instruments = {
156888
156935
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
156889
156936
  description: "GenAI operation duration.",
@@ -156981,7 +157028,7 @@ function genAiAgentAttributes() {
156981
157028
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
156982
157029
  "gen_ai.provider.name": "ur",
156983
157030
  "gen_ai.agent.name": "UR-Nexus",
156984
- "gen_ai.agent.version": "1.76.10"
157031
+ "gen_ai.agent.version": "1.77.2"
156985
157032
  };
156986
157033
  }
156987
157034
  function genAiWorkflowAttributes(workflowName) {
@@ -156997,7 +157044,7 @@ function genAiWorkflowAttributes(workflowName) {
156997
157044
  function startGenAiWorkflowSpan(workflowName) {
156998
157045
  const attributes = genAiWorkflowAttributes(workflowName);
156999
157046
  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 });
157047
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.77.2").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
157001
157048
  }
157002
157049
  function endGenAiWorkflowSpan(span, options2 = {}) {
157003
157050
  try {
@@ -157035,7 +157082,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
157035
157082
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
157036
157083
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
157037
157084
  }
157038
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.10").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
157085
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.77.2").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
157039
157086
  }
157040
157087
  function endGenAiMemorySpan(span, options2 = {}) {
157041
157088
  try {
@@ -250683,7 +250730,7 @@ function getTelemetryAttributes() {
250683
250730
  attributes["session.id"] = sessionId;
250684
250731
  }
250685
250732
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
250686
- attributes["app.version"] = "1.76.10";
250733
+ attributes["app.version"] = "1.77.2";
250687
250734
  }
250688
250735
  const oauthAccount = getOauthAccountInfo();
250689
250736
  if (oauthAccount) {
@@ -297190,7 +297237,7 @@ function getInstallationEnv() {
297190
297237
  return;
297191
297238
  }
297192
297239
  function getURCodeVersion() {
297193
- return "1.76.10";
297240
+ return "1.77.2";
297194
297241
  }
297195
297242
  async function getInstalledVSCodeExtensionVersion(command) {
297196
297243
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -304521,7 +304568,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
304521
304568
  const client2 = new Client({
304522
304569
  name: "ur",
304523
304570
  title: "UR",
304524
- version: "1.76.10",
304571
+ version: "1.77.2",
304525
304572
  description: "UR-Nexus autonomous engineering workflow engine",
304526
304573
  websiteUrl: PRODUCT_URL
304527
304574
  }, {
@@ -304881,7 +304928,7 @@ var init_client5 = __esm(() => {
304881
304928
  const client2 = new Client({
304882
304929
  name: "ur",
304883
304930
  title: "UR",
304884
- version: "1.76.10",
304931
+ version: "1.77.2",
304885
304932
  description: "UR-Nexus autonomous engineering workflow engine",
304886
304933
  websiteUrl: PRODUCT_URL
304887
304934
  }, {
@@ -317434,7 +317481,7 @@ async function createRuntime() {
317434
317481
  bootstrapTelemetry();
317435
317482
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
317436
317483
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
317437
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.76.10"
317484
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.77.2"
317438
317485
  }));
317439
317486
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
317440
317487
  resource,
@@ -317467,11 +317514,11 @@ async function createRuntime() {
317467
317514
  setMeterProvider(meterProvider);
317468
317515
  setLoggerProvider(loggerProvider);
317469
317516
  if (meterProvider) {
317470
- const meter = meterProvider.getMeter("ur-agent", "1.76.10");
317517
+ const meter = meterProvider.getMeter("ur-agent", "1.77.2");
317471
317518
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
317472
317519
  }
317473
317520
  if (loggerProvider) {
317474
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.76.10"));
317521
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.77.2"));
317475
317522
  }
317476
317523
  if (!cleanupRegistered2) {
317477
317524
  cleanupRegistered2 = true;
@@ -318133,9 +318180,9 @@ async function assertMinVersion() {
318133
318180
  if (false) {}
318134
318181
  try {
318135
318182
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
318136
- if (versionConfig.minVersion && lt("1.76.10", versionConfig.minVersion)) {
318183
+ if (versionConfig.minVersion && lt("1.77.2", versionConfig.minVersion)) {
318137
318184
  console.error(`
318138
- It looks like your version of UR (${"1.76.10"}) needs an update.
318185
+ It looks like your version of UR (${"1.77.2"}) needs an update.
318139
318186
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
318140
318187
 
318141
318188
  To update, please run:
@@ -318351,7 +318398,7 @@ async function installGlobalPackage(specificVersion) {
318351
318398
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
318352
318399
  logEvent("tengu_auto_updater_lock_contention", {
318353
318400
  pid: process.pid,
318354
- currentVersion: "1.76.10"
318401
+ currentVersion: "1.77.2"
318355
318402
  });
318356
318403
  return "in_progress";
318357
318404
  }
@@ -318360,7 +318407,7 @@ async function installGlobalPackage(specificVersion) {
318360
318407
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
318361
318408
  logError2(new Error("Windows NPM detected in WSL environment"));
318362
318409
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
318363
- currentVersion: "1.76.10"
318410
+ currentVersion: "1.77.2"
318364
318411
  });
318365
318412
  console.error(`
318366
318413
  Error: Windows NPM detected in WSL
@@ -318895,7 +318942,7 @@ function detectLinuxGlobPatternWarnings() {
318895
318942
  }
318896
318943
  async function getDoctorDiagnostic() {
318897
318944
  const installationType = await getCurrentInstallationType();
318898
- const version2 = typeof MACRO !== "undefined" ? "1.76.10" : "unknown";
318945
+ const version2 = typeof MACRO !== "undefined" ? "1.77.2" : "unknown";
318899
318946
  const installationPath = await getInstallationPath();
318900
318947
  const invokedBinary = getInvokedBinary();
318901
318948
  const multipleInstallations = await detectMultipleInstallations();
@@ -319830,8 +319877,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
319830
319877
  const maxVersion = await getMaxVersion();
319831
319878
  if (maxVersion && gt(version2, maxVersion)) {
319832
319879
  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`);
319880
+ if (gte("1.77.2", maxVersion)) {
319881
+ logForDebugging(`Native installer: current version ${"1.77.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
319835
319882
  logEvent("tengu_native_update_skipped_max_version", {
319836
319883
  latency_ms: Date.now() - startTime,
319837
319884
  max_version: maxVersion,
@@ -319842,7 +319889,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
319842
319889
  version2 = maxVersion;
319843
319890
  }
319844
319891
  }
319845
- if (!forceReinstall && version2 === "1.76.10" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
319892
+ if (!forceReinstall && version2 === "1.77.2" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
319846
319893
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
319847
319894
  logEvent("tengu_native_update_complete", {
319848
319895
  latency_ms: Date.now() - startTime,
@@ -354013,6 +354060,15 @@ async function getShellConfigImpl() {
354013
354060
  const provider = await createBashShellProvider(binShell);
354014
354061
  return { provider };
354015
354062
  }
354063
+ function ensureTaskOutputDir() {
354064
+ taskOutputDirReady ??= mkdir20(getTaskOutputDir(), { recursive: true }).then(() => {
354065
+ return;
354066
+ }, (error40) => {
354067
+ taskOutputDirReady = undefined;
354068
+ throw error40;
354069
+ });
354070
+ return taskOutputDirReady;
354071
+ }
354016
354072
  async function exec3(command, abortSignal, shellType, options2) {
354017
354073
  const {
354018
354074
  timeout,
@@ -354069,7 +354125,7 @@ async function exec3(command, abortSignal, shellType, options2) {
354069
354125
  const usePipeMode = !!onStdout;
354070
354126
  const taskId = generateTaskId("local_bash");
354071
354127
  const taskOutput = new TaskOutput(taskId, onProgress ?? null, !usePipeMode);
354072
- await mkdir20(getTaskOutputDir(), { recursive: true });
354128
+ await ensureTaskOutputDir();
354073
354129
  let outputHandle;
354074
354130
  let stderrHandle;
354075
354131
  if (!usePipeMode) {
@@ -354175,7 +354231,7 @@ function setCwd(path13, relativeTo) {
354175
354231
  } catch (_error) {}
354176
354232
  }
354177
354233
  }
354178
- var DEFAULT_TIMEOUT, getShellConfig, getPsProvider, resolveProvider;
354234
+ var DEFAULT_TIMEOUT, getShellConfig, getPsProvider, resolveProvider, taskOutputDirReady;
354179
354235
  var init_Shell = __esm(() => {
354180
354236
  init_memoize();
354181
354237
  init_analytics();
@@ -366406,28 +366462,6 @@ var init_FileEditTool = __esm(() => {
366406
366462
  };
366407
366463
  }
366408
366464
  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
366465
  const file2 = fileContent;
366432
366466
  const editTarget = findEditTarget(file2, old_string);
366433
366467
  const actualOldString = editTarget?.actual ?? null;
@@ -366435,13 +366469,21 @@ var init_FileEditTool = __esm(() => {
366435
366469
  return {
366436
366470
  result: false,
366437
366471
  behavior: "ask",
366438
- message: describeEditMatchFailure(file2, old_string),
366472
+ 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
366473
  meta: {
366440
366474
  isFilePathAbsolute: String(isAbsolute24(file_path))
366441
366475
  },
366442
366476
  errorCode: 8
366443
366477
  };
366444
366478
  }
366479
+ if (readTimestamp === undefined || readTimestamp.isPartialView || !fileStateMatchesContent(file2, readTimestamp)) {
366480
+ toolUseContext.readFileState.set(fullFilePath, {
366481
+ content: file2,
366482
+ timestamp: getFileModificationTime(fullFilePath),
366483
+ offset: undefined,
366484
+ limit: undefined
366485
+ });
366486
+ }
366445
366487
  const matches = file2.split(actualOldString).length - 1;
366446
366488
  if (matches > 1 && !replace_all) {
366447
366489
  return {
@@ -366521,7 +366563,7 @@ String: ${old_string}`,
366521
366563
  if (fileExists) {
366522
366564
  const lastWriteTime = getFileModificationTime(absoluteFilePath);
366523
366565
  const lastRead = readFileState.get(absoluteFilePath);
366524
- if (!lastRead || lastWriteTime > lastRead.timestamp || !fileStateMatchesContent(originalFileContents, lastRead)) {
366566
+ if (lastRead && (lastWriteTime > lastRead.timestamp || !fileStateMatchesContent(originalFileContents, lastRead))) {
366525
366567
  throw new Error(FILE_UNEXPECTEDLY_MODIFIED_ERROR);
366526
366568
  }
366527
366569
  }
@@ -367236,14 +367278,16 @@ var init_FileWriteTool = __esm(() => {
367236
367278
  throw e;
367237
367279
  }
367238
367280
  const readTimestamp = toolUseContext.readFileState.get(fullFilePath);
367281
+ const lastWriteTime = Math.floor(fileMtimeMs);
367239
367282
  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
- };
367283
+ toolUseContext.readFileState.set(fullFilePath, {
367284
+ content: readFileSyncCached(fullFilePath),
367285
+ timestamp: lastWriteTime,
367286
+ offset: undefined,
367287
+ limit: undefined
367288
+ });
367289
+ return { result: true };
367245
367290
  }
367246
- const lastWriteTime = Math.floor(fileMtimeMs);
367247
367291
  if (lastWriteTime > readTimestamp.timestamp) {
367248
367292
  return {
367249
367293
  result: false,
@@ -389549,7 +389593,7 @@ function isAnyTracingEnabled() {
389549
389593
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
389550
389594
  }
389551
389595
  function getTracer() {
389552
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.76.10");
389596
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.77.2");
389553
389597
  }
389554
389598
  function createSpanAttributes(spanType, customAttributes = {}) {
389555
389599
  const baseAttributes = getTelemetryAttributes();
@@ -419716,7 +419760,7 @@ function Feedback({
419716
419760
  platform: env2.platform,
419717
419761
  gitRepo: envInfo.isGit,
419718
419762
  terminal: env2.terminal,
419719
- version: "1.76.10",
419763
+ version: "1.77.2",
419720
419764
  transcript: normalizeMessagesForAPI(messages),
419721
419765
  errors: sanitizedErrors,
419722
419766
  lastApiRequest: getLastAPIRequest(),
@@ -419908,7 +419952,7 @@ function Feedback({
419908
419952
  ", ",
419909
419953
  env2.terminal,
419910
419954
  ", v",
419911
- "1.76.10"
419955
+ "1.77.2"
419912
419956
  ]
419913
419957
  }, undefined, true, undefined, this)
419914
419958
  ]
@@ -420014,7 +420058,7 @@ ${sanitizedDescription}
420014
420058
  ` + `**Environment Info**
420015
420059
  ` + `- Platform: ${env2.platform}
420016
420060
  ` + `- Terminal: ${env2.terminal}
420017
- ` + `- Version: ${"1.76.10"}
420061
+ ` + `- Version: ${"1.77.2"}
420018
420062
  ` + `- Feedback ID: ${feedbackId}
420019
420063
  ` + `
420020
420064
  **Errors**
@@ -423124,7 +423168,7 @@ function buildPrimarySection() {
423124
423168
  }, undefined, false, undefined, this);
423125
423169
  return [{
423126
423170
  label: "Version",
423127
- value: "1.76.10"
423171
+ value: "1.77.2"
423128
423172
  }, {
423129
423173
  label: "Session name",
423130
423174
  value: nameValue
@@ -426506,7 +426550,7 @@ function Config({
426506
426550
  }
426507
426551
  }, undefined, false, undefined, this)
426508
426552
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
426509
- currentVersion: "1.76.10",
426553
+ currentVersion: "1.77.2",
426510
426554
  onChoice: (choice) => {
426511
426555
  setShowSubmenu(null);
426512
426556
  setTabsHidden(false);
@@ -426518,7 +426562,7 @@ function Config({
426518
426562
  autoUpdatesChannel: "stable"
426519
426563
  };
426520
426564
  if (choice === "stay") {
426521
- newSettings.minimumVersion = "1.76.10";
426565
+ newSettings.minimumVersion = "1.77.2";
426522
426566
  }
426523
426567
  updateSettingsForSource("userSettings", newSettings);
426524
426568
  setSettingsData((prev_27) => ({
@@ -434582,7 +434626,7 @@ function HelpV2(t0) {
434582
434626
  let t6;
434583
434627
  if ($2[31] !== tabs) {
434584
434628
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
434585
- title: `UR v${"1.76.10"}`,
434629
+ title: `UR v${"1.77.2"}`,
434586
434630
  color: "professionalBlue",
434587
434631
  defaultTab: "general",
434588
434632
  children: tabs
@@ -435515,7 +435559,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
435515
435559
  async function handleInitialize(options2) {
435516
435560
  return {
435517
435561
  name: "UR",
435518
- version: "1.76.10",
435562
+ version: "1.77.2",
435519
435563
  protocolVersion: "0.1.0",
435520
435564
  workspaceRoot: options2.cwd,
435521
435565
  capabilities: {
@@ -452623,7 +452667,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
452623
452667
  return [];
452624
452668
  }
452625
452669
  }
452626
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.10") {
452670
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.77.2") {
452627
452671
  if (process.env.USER_TYPE === "ant") {
452628
452672
  const changelog = "";
452629
452673
  if (changelog) {
@@ -452650,7 +452694,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.10")
452650
452694
  releaseNotes
452651
452695
  };
452652
452696
  }
452653
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.76.10") {
452697
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.77.2") {
452654
452698
  if (process.env.USER_TYPE === "ant") {
452655
452699
  const changelog = "";
452656
452700
  if (changelog) {
@@ -455516,7 +455560,7 @@ function getRecentActivitySync() {
455516
455560
  return cachedActivity;
455517
455561
  }
455518
455562
  function getLogoDisplayData() {
455519
- const version2 = process.env.DEMO_VERSION ?? "1.76.10";
455563
+ const version2 = process.env.DEMO_VERSION ?? "1.77.2";
455520
455564
  const serverUrl = getDirectConnectServerUrl();
455521
455565
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
455522
455566
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -456383,7 +456427,7 @@ function LogoV2() {
456383
456427
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
456384
456428
  t2 = () => {
456385
456429
  const currentConfig2 = getGlobalConfig();
456386
- if (currentConfig2.lastReleaseNotesSeen === "1.76.10") {
456430
+ if (currentConfig2.lastReleaseNotesSeen === "1.77.2") {
456387
456431
  return;
456388
456432
  }
456389
456433
  saveGlobalConfig(_temp325);
@@ -457068,12 +457112,12 @@ function LogoV2() {
457068
457112
  return t41;
457069
457113
  }
457070
457114
  function _temp325(current) {
457071
- if (current.lastReleaseNotesSeen === "1.76.10") {
457115
+ if (current.lastReleaseNotesSeen === "1.77.2") {
457072
457116
  return current;
457073
457117
  }
457074
457118
  return {
457075
457119
  ...current,
457076
- lastReleaseNotesSeen: "1.76.10"
457120
+ lastReleaseNotesSeen: "1.77.2"
457077
457121
  };
457078
457122
  }
457079
457123
  function _temp241(s_0) {
@@ -473887,7 +473931,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
473887
473931
  if (spec.name !== specName) {
473888
473932
  throw new Error("Agentic CI workflow spec name does not match");
473889
473933
  }
473890
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.76.10" : "1.76.10");
473934
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.77.2" : "1.77.2");
473891
473935
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
473892
473936
  throw new Error("invalid ur-agent package version");
473893
473937
  }
@@ -474880,7 +474924,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
474880
474924
  path: ".github/workflows/ur.yml",
474881
474925
  root: "project",
474882
474926
  content: compileAgenticCiWorkflow("default", {
474883
- packageVersion: typeof MACRO !== "undefined" ? "1.76.10" : "1.76.10"
474927
+ packageVersion: typeof MACRO !== "undefined" ? "1.77.2" : "1.77.2"
474884
474928
  })
474885
474929
  },
474886
474930
  {
@@ -474943,7 +474987,7 @@ function value(tokens, flag) {
474943
474987
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
474944
474988
  }
474945
474989
  function cliVersion() {
474946
- return typeof MACRO !== "undefined" ? "1.76.10" : "1.76.10";
474990
+ return typeof MACRO !== "undefined" ? "1.77.2" : "1.77.2";
474947
474991
  }
474948
474992
  function workflowPath(cwd2) {
474949
474993
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -480799,7 +480843,7 @@ function createAcpStdioApp(deps) {
480799
480843
  }
480800
480844
  },
480801
480845
  authMethods: [],
480802
- agentInfo: { name: "UR-Nexus", version: "1.76.10" }
480846
+ agentInfo: { name: "UR-Nexus", version: "1.77.2" }
480803
480847
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
480804
480848
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
480805
480849
  await runtime2.announce({
@@ -480896,7 +480940,7 @@ function createAcpStdioAgent(deps) {
480896
480940
  }
480897
480941
  },
480898
480942
  authMethods: [],
480899
- agentInfo: { name: "UR-Nexus", version: "1.76.10" }
480943
+ agentInfo: { name: "UR-Nexus", version: "1.77.2" }
480900
480944
  });
480901
480945
  return;
480902
480946
  case "authenticate":
@@ -690356,7 +690400,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
690356
690400
  smapsRollup,
690357
690401
  platform: process.platform,
690358
690402
  nodeVersion: process.version,
690359
- ccVersion: "1.76.10"
690403
+ ccVersion: "1.77.2"
690360
690404
  };
690361
690405
  }
690362
690406
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -690936,7 +690980,7 @@ var init_bridge_kick = __esm(() => {
690936
690980
  var call154 = async () => {
690937
690981
  return {
690938
690982
  type: "text",
690939
- value: "1.76.10"
690983
+ value: "1.77.2"
690940
690984
  };
690941
690985
  }, version2, version_default;
690942
690986
  var init_version = __esm(() => {
@@ -702203,7 +702247,7 @@ function generateHtmlReport(data, insights) {
702203
702247
  </html>`;
702204
702248
  }
702205
702249
  function buildExportData(data, insights, facets, remoteStats) {
702206
- const version3 = typeof MACRO !== "undefined" ? "1.76.10" : "unknown";
702250
+ const version3 = typeof MACRO !== "undefined" ? "1.77.2" : "unknown";
702207
702251
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
702208
702252
  const facets_summary = {
702209
702253
  total: facets.size,
@@ -706517,7 +706561,7 @@ var init_sessionStorage = __esm(() => {
706517
706561
  init_settings2();
706518
706562
  init_slowOperations();
706519
706563
  init_uuid();
706520
- VERSION7 = typeof MACRO !== "undefined" ? "1.76.10" : "unknown";
706564
+ VERSION7 = typeof MACRO !== "undefined" ? "1.77.2" : "unknown";
706521
706565
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
706522
706566
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
706523
706567
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -707732,7 +707776,7 @@ var init_filesystem = __esm(() => {
707732
707776
  });
707733
707777
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
707734
707778
  const nonce = randomBytes20(16).toString("hex");
707735
- return join232(getURTempDir(), "bundled-skills", "1.76.10", nonce);
707779
+ return join232(getURTempDir(), "bundled-skills", "1.77.2", nonce);
707736
707780
  });
707737
707781
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
707738
707782
  });
@@ -713371,6 +713415,12 @@ Focus text output on:
713371
713415
  - High-level status updates at natural milestones
713372
713416
  - Errors or blockers that change the plan
713373
713417
 
713418
+ 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:
713419
+ - Never paste code, file contents, or diffs you already wrote to disk. Cite \`file_path:line\` instead. The user can open the file.
713420
+ - 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.
713421
+ - Do not re-explain a change you already described, list every file touched, or add a closing recap of the conversation.
713422
+ - Write a long explanation only when the user asks for one.
713423
+
713374
713424
  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
713425
  }
713376
713426
  function getSimpleToneAndStyleSection() {
@@ -713593,7 +713643,7 @@ function getFunctionResultClearingSection(model) {
713593
713643
 
713594
713644
  Old tool results will be automatically cleared from context to free up space. The ${config3.keepRecent} most recent results are always kept.`;
713595
713645
  }
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.`;
713646
+ 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
713647
  var init_prompts4 = __esm(() => {
713598
713648
  init_env();
713599
713649
  init_git();
@@ -714081,7 +714131,7 @@ function computeFingerprint(messageText2, version3) {
714081
714131
  }
714082
714132
  function computeFingerprintFromMessages(messages) {
714083
714133
  const firstMessageText = extractFirstMessageText(messages);
714084
- return computeFingerprint(firstMessageText, "1.76.10");
714134
+ return computeFingerprint(firstMessageText, "1.77.2");
714085
714135
  }
714086
714136
  var FINGERPRINT_SALT = "59cf53e54c78";
714087
714137
  var init_fingerprint = () => {};
@@ -716003,7 +716053,7 @@ async function sideQuery(opts) {
716003
716053
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
716004
716054
  }
716005
716055
  const messageText2 = extractFirstUserMessageText(messages);
716006
- const fingerprint2 = computeFingerprint(messageText2, "1.76.10");
716056
+ const fingerprint2 = computeFingerprint(messageText2, "1.77.2");
716007
716057
  const attributionHeader = getAttributionHeader(fingerprint2);
716008
716058
  const systemBlocks = [
716009
716059
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -720840,7 +720890,7 @@ function buildSystemInitMessage(inputs) {
720840
720890
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
720841
720891
  apiKeySource: getURHQApiKeyWithSource().source,
720842
720892
  betas: getSdkBetas(),
720843
- ur_version: "1.76.10",
720893
+ ur_version: "1.77.2",
720844
720894
  output_style: outputStyle2,
720845
720895
  agents: inputs.agents.map((agent2) => agent2.agentType),
720846
720896
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -734712,7 +734762,7 @@ var init_useVoiceEnabled = __esm(() => {
734712
734762
  function getSemverPart(version3) {
734713
734763
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
734714
734764
  }
734715
- function useUpdateNotification(updatedVersion, initialVersion = "1.76.10") {
734765
+ function useUpdateNotification(updatedVersion, initialVersion = "1.77.2") {
734716
734766
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react223.useState(() => getSemverPart(initialVersion));
734717
734767
  if (!updatedVersion) {
734718
734768
  return null;
@@ -734761,7 +734811,7 @@ function AutoUpdater({
734761
734811
  return;
734762
734812
  }
734763
734813
  if (false) {}
734764
- const currentVersion = "1.76.10";
734814
+ const currentVersion = "1.77.2";
734765
734815
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
734766
734816
  let latestVersion = await getLatestVersion(channel);
734767
734817
  const isDisabled = isAutoUpdaterDisabled();
@@ -734990,12 +735040,12 @@ function NativeAutoUpdater({
734990
735040
  logEvent("tengu_native_auto_updater_start", {});
734991
735041
  try {
734992
735042
  const maxVersion = await getMaxVersion();
734993
- if (maxVersion && gt("1.76.10", maxVersion)) {
735043
+ if (maxVersion && gt("1.77.2", maxVersion)) {
734994
735044
  const msg = await getMaxVersionMessage();
734995
735045
  setMaxVersionIssue(msg ?? "affects your version");
734996
735046
  }
734997
735047
  const result = await installLatest(channel);
734998
- const currentVersion = "1.76.10";
735048
+ const currentVersion = "1.77.2";
734999
735049
  const latencyMs = Date.now() - startTime;
735000
735050
  if (result.lockFailed) {
735001
735051
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -735132,17 +735182,17 @@ function PackageManagerAutoUpdater(t0) {
735132
735182
  const maxVersion = await getMaxVersion();
735133
735183
  if (maxVersion && latest && gt(latest, maxVersion)) {
735134
735184
  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`);
735185
+ if (gte("1.77.2", maxVersion)) {
735186
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.77.2"} is already at or above maxVersion ${maxVersion}, skipping update`);
735137
735187
  setUpdateAvailable(false);
735138
735188
  return;
735139
735189
  }
735140
735190
  latest = maxVersion;
735141
735191
  }
735142
- const hasUpdate = latest && !gte("1.76.10", latest) && !shouldSkipVersion(latest);
735192
+ const hasUpdate = latest && !gte("1.77.2", latest) && !shouldSkipVersion(latest);
735143
735193
  setUpdateAvailable(!!hasUpdate);
735144
735194
  if (hasUpdate) {
735145
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.76.10"} -> ${latest}`);
735195
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.77.2"} -> ${latest}`);
735146
735196
  }
735147
735197
  };
735148
735198
  $2[0] = t1;
@@ -735176,7 +735226,7 @@ function PackageManagerAutoUpdater(t0) {
735176
735226
  wrap: "truncate",
735177
735227
  children: [
735178
735228
  "currentVersion: ",
735179
- "1.76.10"
735229
+ "1.77.2"
735180
735230
  ]
735181
735231
  }, undefined, true, undefined, this);
735182
735232
  $2[3] = verbose;
@@ -745976,7 +746026,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
745976
746026
  project_dir: getOriginalCwd(),
745977
746027
  added_dirs: addedDirs
745978
746028
  },
745979
- version: "1.76.10",
746029
+ version: "1.77.2",
745980
746030
  output_style: {
745981
746031
  name: outputStyleName
745982
746032
  },
@@ -746111,7 +746161,7 @@ function StatusLineInner({
746111
746161
  const attention = customStatusError ?? taskAttention;
746112
746162
  const terminalSize = React132.useContext(TerminalSizeContext);
746113
746163
  const defaultStatusLineText = buildDefaultStatusBar({
746114
- version: "1.76.10",
746164
+ version: "1.77.2",
746115
746165
  providerLabel: providerRuntime.providerLabel,
746116
746166
  authMode: providerRuntime.authLabel,
746117
746167
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -758396,7 +758446,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
758396
758446
  } catch {}
758397
758447
  const data = {
758398
758448
  trigger: trigger2,
758399
- version: "1.76.10",
758449
+ version: "1.77.2",
758400
758450
  platform: process.platform,
758401
758451
  transcript,
758402
758452
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -770770,7 +770820,7 @@ function WelcomeV2() {
770770
770820
  dimColor: true,
770771
770821
  children: [
770772
770822
  "v",
770773
- "1.76.10"
770823
+ "1.77.2"
770774
770824
  ]
770775
770825
  }, undefined, true, undefined, this)
770776
770826
  ]
@@ -772030,7 +772080,7 @@ function completeOnboarding() {
772030
772080
  saveGlobalConfig((current) => ({
772031
772081
  ...current,
772032
772082
  hasCompletedOnboarding: true,
772033
- lastOnboardingVersion: "1.76.10"
772083
+ lastOnboardingVersion: "1.77.2"
772034
772084
  }));
772035
772085
  }
772036
772086
  function showDialog(root2, renderer) {
@@ -777074,7 +777124,7 @@ function appendToLog(path24, message) {
777074
777124
  cwd: getFsImplementation().cwd(),
777075
777125
  userType: process.env.USER_TYPE,
777076
777126
  sessionId: getSessionId(),
777077
- version: "1.76.10"
777127
+ version: "1.77.2"
777078
777128
  };
777079
777129
  getLogWriter(path24).write(messageWithTimestamp);
777080
777130
  }
@@ -781233,8 +781283,8 @@ async function getEnvLessBridgeConfig() {
781233
781283
  }
781234
781284
  async function checkEnvLessBridgeMinVersion() {
781235
781285
  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.
781286
+ if (cfg.min_version && lt("1.77.2", cfg.min_version)) {
781287
+ return `Your version of UR (${"1.77.2"}) is too old for Remote Control.
781238
781288
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
781239
781289
  }
781240
781290
  return null;
@@ -781708,7 +781758,7 @@ async function initBridgeCore(params) {
781708
781758
  const rawApi = createBridgeApiClient({
781709
781759
  baseUrl,
781710
781760
  getAccessToken,
781711
- runnerVersion: "1.76.10",
781761
+ runnerVersion: "1.77.2",
781712
781762
  onDebug: logForDebugging,
781713
781763
  onAuth401,
781714
781764
  getTrustedDeviceToken
@@ -791181,7 +791231,7 @@ function getAgUiCapabilities() {
791181
791231
  name: "UR-Nexus",
791182
791232
  type: "ur-nexus",
791183
791233
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
791184
- version: "1.76.10",
791234
+ version: "1.77.2",
791185
791235
  provider: "UR",
791186
791236
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
791187
791237
  },
@@ -792321,7 +792371,7 @@ function createMCPServer(cwd4, debug2, verbose) {
792321
792371
  };
792322
792372
  const server2 = new Server({
792323
792373
  name: "ur-nexus",
792324
- version: "1.76.10"
792374
+ version: "1.77.2"
792325
792375
  }, {
792326
792376
  capabilities: {
792327
792377
  tools: {}
@@ -793479,7 +793529,7 @@ function thrownResponse(error40) {
793479
793529
  }
793480
793530
  async function createUrMcp2026Runtime(options4) {
793481
793531
  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: {} });
793532
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.77.2" }, { capabilities: {} });
793483
793533
  const [clientTransport, serverTransport] = createLinkedTransportPair();
793484
793534
  try {
793485
793535
  await server2.connect(serverTransport);
@@ -793490,7 +793540,7 @@ async function createUrMcp2026Runtime(options4) {
793490
793540
  }
793491
793541
  const runtime2 = new Mcp2026Runtime({
793492
793542
  cwd: options4.cwd,
793493
- version: "1.76.10",
793543
+ version: "1.77.2",
793494
793544
  backend: {
793495
793545
  listTools: async () => {
793496
793546
  const listed = await client2.listTools();
@@ -795631,7 +795681,7 @@ async function update() {
795631
795681
  logEvent("tengu_update_check", {});
795632
795682
  const diagnostic2 = await getDoctorDiagnostic();
795633
795683
  const result = await checkUpgradeStatus({
795634
- currentVersion: "1.76.10",
795684
+ currentVersion: "1.77.2",
795635
795685
  packageName: UR_AGENT_PACKAGE_NAME,
795636
795686
  installationType: diagnostic2.installationType,
795637
795687
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -796947,7 +796997,7 @@ ${customInstructions}` : customInstructions;
796947
796997
  }
796948
796998
  }
796949
796999
  logForDiagnosticsNoPII("info", "started", {
796950
- version: "1.76.10",
797000
+ version: "1.77.2",
796951
797001
  is_native_binary: isInBundledMode()
796952
797002
  });
796953
797003
  registerCleanup(async () => {
@@ -797733,7 +797783,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
797733
797783
  pendingHookMessages
797734
797784
  }, renderAndRun);
797735
797785
  }
797736
- }).version("1.76.10 (UR-Nexus)", "-v, --version", "Output the version number");
797786
+ }).version("1.77.2 (UR-Nexus)", "-v, --version", "Output the version number");
797737
797787
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
797738
797788
  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
797789
  if (canUserConfigureAdvisor()) {
@@ -798785,7 +798835,7 @@ if (false) {}
798785
798835
  async function main2() {
798786
798836
  const args = process.argv.slice(2);
798787
798837
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
798788
- console.log(`${"1.76.10"} (UR-Nexus)`);
798838
+ console.log(`${"1.77.2"} (UR-Nexus)`);
798789
798839
  return;
798790
798840
  }
798791
798841
  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.2 (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.2</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.2"
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.2",
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.2",
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",