ur-agent 1.76.4 → 1.76.6

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,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.76.6
4
+
5
+ - Fixed malformed `Write` tool input handling so missing required `content` now stays
6
+ as plain text during normalization and surfaces clear validation when repair is
7
+ impossible.
8
+ - Hardened `AskUserQuestion` transport and execution normalization to reject malformed
9
+ question/option payloads before schema enforcement, reducing repeated
10
+ `InputValidationError` loops for missing `question`/`options`.
11
+ - Restored `Grep` schema compatibility checks and ensured provider schema generation
12
+ keeps unsupported type regressions from reaching the provider.
13
+ - Fixed task dependency validation for missing task IDs and cyclic/self-edge
14
+ requests so callers receive actionable diagnostics instead of opaque task graph
15
+ errors.
16
+
17
+ ## 1.76.5
18
+
19
+ - Hardened Kimi tool-call parsing for `Write` and `AskUserQuestion` so malformed
20
+ payloads fail normalisation and remain plain text instead of throwing input
21
+ validation at render time; valid payloads still parse correctly.
22
+ - Fixed `AskUserQuestion` question-schema validation to reject one-question/open-ended
23
+ malformed shapes with distinct-label enforcement before tool execution, preventing
24
+ `InputValidationError` loops for missing `question`/`options`.
25
+ - Fixed Grep tool-schema regression coverage and restored the task dependency
26
+ validation path to ignore self-edges before reporting missing-task errors.
27
+ - Version bump and release metadata were synchronized after parser fixes.
28
+
3
29
  ## 1.76.4
4
30
 
5
31
  - AskUserQuestion normalizer now strips malformed question entries instead of
package/dist/cli.js CHANGED
@@ -87761,6 +87761,15 @@ function normalizeQuestionInput(value, index2) {
87761
87761
  };
87762
87762
  }
87763
87763
  function normalizeAskUserQuestionInput(value) {
87764
+ if (Array.isArray(value)) {
87765
+ const normalized = value.map((entry, index2) => normalizeQuestionInput(entry, index2)).filter((entry) => entry !== null && typeof entry === "object");
87766
+ if (normalized.length > 0) {
87767
+ return {
87768
+ questions: dedupeQuestions(normalized)
87769
+ };
87770
+ }
87771
+ return null;
87772
+ }
87764
87773
  const input = objectValue(value);
87765
87774
  if (!input)
87766
87775
  return value;
@@ -88191,6 +88200,9 @@ function normalizeKimiAskUserQuestionInput(input) {
88191
88200
  if (!Array.isArray(questions) || questions.length === 0) {
88192
88201
  return null;
88193
88202
  }
88203
+ if (describeQuestionPayloadProblems(normalized).length > 0) {
88204
+ return null;
88205
+ }
88194
88206
  return {
88195
88207
  ...normalized,
88196
88208
  questions: questions.slice(0, 4)
@@ -88198,10 +88210,10 @@ function normalizeKimiAskUserQuestionInput(input) {
88198
88210
  }
88199
88211
  function normalizeInlineToolInput(name, input) {
88200
88212
  if (name === "Write") {
88201
- return normalizeKimiWriteInput(input) ?? input;
88213
+ return normalizeKimiWriteInput(input);
88202
88214
  }
88203
88215
  if (name === "AskUserQuestion") {
88204
- return normalizeKimiAskUserQuestionInput(input) ?? input;
88216
+ return normalizeKimiAskUserQuestionInput(input);
88205
88217
  }
88206
88218
  return input;
88207
88219
  }
@@ -88219,19 +88231,25 @@ function parseKimiToolCalls(text) {
88219
88231
  throw new KimiToolCallParseError("Kimi tool call markup is incomplete or malformed");
88220
88232
  }
88221
88233
  CALL_RE.lastIndex = 0;
88234
+ let matchedCalls = 0;
88222
88235
  let cleaned = text.replace(CALL_RE, (_full, rawName, rawArgs) => {
88223
88236
  const name = (rawName ?? "").trim().replace(/^functions\./, "").replace(/[:.]\d+\s*$/, "").trim();
88224
88237
  if (!name) {
88225
88238
  throw new KimiToolCallParseError("Kimi tool call is missing a function name");
88226
88239
  }
88240
+ matchedCalls += 1;
88241
+ const normalizedInput = normalizeInlineToolInput(name, parseArgs(rawArgs ?? ""));
88242
+ if (normalizedInput === null) {
88243
+ return rawArgs ?? "";
88244
+ }
88227
88245
  toolCalls.push({
88228
88246
  id: parsedToolCallId("kimi", i2++),
88229
88247
  name,
88230
- input: normalizeInlineToolInput(name, parseArgs(rawArgs ?? ""))
88248
+ input: normalizedInput
88231
88249
  });
88232
88250
  return "";
88233
88251
  });
88234
- if (toolCalls.length !== callBegins) {
88252
+ if (matchedCalls !== callBegins) {
88235
88253
  throw new KimiToolCallParseError("Kimi tool call markup is incomplete or malformed");
88236
88254
  }
88237
88255
  cleaned = cleaned.replace(SECTION_RE, "").replace(STRAY_RE, "").replace(/\n{3,}/g, `
@@ -88499,6 +88517,8 @@ function maybeBareJsonToolCall(text, availableToolNames, index2) {
88499
88517
  return null;
88500
88518
  }
88501
88519
  const normalizedInput = name === "Write" || name === "AskUserQuestion" ? normalizeInlineToolInput(name, input.input) : input.input;
88520
+ if (normalizedInput === null)
88521
+ return null;
88502
88522
  return {
88503
88523
  id: parsedToolCallId("bare", index2),
88504
88524
  name,
@@ -88514,11 +88534,13 @@ function maybeBareJsonToolCall(text, availableToolNames, index2) {
88514
88534
  }
88515
88535
  if (hasTool(availableToolNames, "Write") && normalizeKimiWriteInput(input) !== null) {
88516
88536
  const normalized = normalizeKimiWriteInput(input);
88517
- return {
88518
- id: parsedToolCallId("bare", index2),
88519
- name: "Write",
88520
- input: normalized ?? input
88521
- };
88537
+ if (normalized !== null) {
88538
+ return {
88539
+ id: parsedToolCallId("bare", index2),
88540
+ name: "Write",
88541
+ input: normalized
88542
+ };
88543
+ }
88522
88544
  }
88523
88545
  if (hasTool(availableToolNames, "Edit") && hasRequiredKeys(input, ["file_path", "old_string", "new_string"], ["replace_all"]) && typeof input.file_path === "string" && typeof input.old_string === "string" && typeof input.new_string === "string" && (input.replace_all === undefined || typeof input.replace_all === "boolean")) {
88524
88546
  return {
@@ -107465,7 +107487,7 @@ var init_auth = __esm(() => {
107465
107487
 
107466
107488
  // src/utils/userAgent.ts
107467
107489
  function getURCodeUserAgent() {
107468
- return `ur/${"1.76.4"}`;
107490
+ return `ur/${"1.76.6"}`;
107469
107491
  }
107470
107492
 
107471
107493
  // src/utils/workloadContext.ts
@@ -107487,7 +107509,7 @@ function getUserAgent() {
107487
107509
  const clientApp = process.env.UR_AGENT_SDK_CLIENT_APP ? `, client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}` : "";
107488
107510
  const workload = getWorkload();
107489
107511
  const workloadSuffix = workload ? `, workload/${workload}` : "";
107490
- return `ur-cli/${"1.76.4"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107512
+ return `ur-cli/${"1.76.6"} (${process.env.USER_TYPE}, ${process.env.UR_CODE_ENTRYPOINT ?? "cli"}${agentSdkVersion}${clientApp}${workloadSuffix})`;
107491
107513
  }
107492
107514
  function getMCPUserAgent() {
107493
107515
  const parts = [];
@@ -107501,7 +107523,7 @@ function getMCPUserAgent() {
107501
107523
  parts.push(`client-app/${process.env.UR_AGENT_SDK_CLIENT_APP}`);
107502
107524
  }
107503
107525
  const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
107504
- return `ur/${"1.76.4"}${suffix}`;
107526
+ return `ur/${"1.76.6"}${suffix}`;
107505
107527
  }
107506
107528
  function getWebFetchUserAgent() {
107507
107529
  return `UR-User (${getURCodeUserAgent()})`;
@@ -107639,7 +107661,7 @@ var init_user = __esm(() => {
107639
107661
  deviceId,
107640
107662
  sessionId: getSessionId(),
107641
107663
  email: getEmail(),
107642
- appVersion: "1.76.4",
107664
+ appVersion: "1.76.6",
107643
107665
  platform: getHostPlatformForAnalytics(),
107644
107666
  organizationUuid,
107645
107667
  accountUuid,
@@ -115526,7 +115548,7 @@ var init_metadata = __esm(() => {
115526
115548
  COMPOUND_OPERATOR_REGEX = /\s*(?:&&|\|\||[;|])\s*/;
115527
115549
  WHITESPACE_REGEX = /\s+/;
115528
115550
  getVersionBase = memoize_default(() => {
115529
- const match = "1.76.4".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115551
+ const match = "1.76.6".match(/^\d+\.\d+\.\d+(?:-[a-z]+)?/);
115530
115552
  return match ? match[0] : undefined;
115531
115553
  });
115532
115554
  buildEnvContext = memoize_default(async () => {
@@ -115566,7 +115588,7 @@ var init_metadata = __esm(() => {
115566
115588
  isGithubAction: isEnvTruthy(process.env.GITHUB_ACTIONS),
115567
115589
  isURCodeAction: isEnvTruthy(process.env.UR_CODE_ACTION),
115568
115590
  isURAiAuth: isURAISubscriber(),
115569
- version: "1.76.4",
115591
+ version: "1.76.6",
115570
115592
  versionBase: getVersionBase(),
115571
115593
  buildTime: "",
115572
115594
  deploymentEnvironment: env2.detectDeploymentEnvironment(),
@@ -116236,7 +116258,7 @@ function initialize1PEventLogging() {
116236
116258
  const platform2 = getPlatform();
116237
116259
  const attributes = {
116238
116260
  [import_semantic_conventions4.ATTR_SERVICE_NAME]: "ur",
116239
- [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.76.4"
116261
+ [import_semantic_conventions4.ATTR_SERVICE_VERSION]: "1.76.6"
116240
116262
  };
116241
116263
  if (platform2 === "wsl") {
116242
116264
  const wslVersion = getWslVersion();
@@ -116264,7 +116286,7 @@ function initialize1PEventLogging() {
116264
116286
  })
116265
116287
  ]
116266
116288
  });
116267
- firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.76.4");
116289
+ firstPartyEventLogger = firstPartyEventLoggerProvider.getLogger("com.urhq.ur.events", "1.76.6");
116268
116290
  }
116269
116291
  async function reinitialize1PEventLoggingIfConfigChanged() {
116270
116292
  if (!is1PEventLoggingEnabled() || !firstPartyEventLoggerProvider) {
@@ -126045,7 +126067,7 @@ function formatAgentTrendReport(report = buildAgentTrendReport()) {
126045
126067
  function formatA2AAgentCard(options = {}, pretty = true) {
126046
126068
  return JSON.stringify(buildA2AAgentCard(options), null, pretty ? 2 : 0);
126047
126069
  }
126048
- var urVersion = "1.76.4", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
126070
+ var urVersion = "1.76.6", researchSnapshotDate = "2026-07-15", coverage, priorityRoadmap;
126049
126071
  var init_trends = __esm(() => {
126050
126072
  init_a2aCardSignature();
126051
126073
  coverage = [
@@ -128848,7 +128870,7 @@ function getAttributionHeader(fingerprint) {
128848
128870
  if (!isAttributionHeaderEnabled()) {
128849
128871
  return "";
128850
128872
  }
128851
- const version2 = `${"1.76.4"}.${fingerprint}`;
128873
+ const version2 = `${"1.76.6"}.${fingerprint}`;
128852
128874
  const entrypoint = process.env.UR_CODE_ENTRYPOINT ?? "unknown";
128853
128875
  const cch = "";
128854
128876
  const workload = getWorkload();
@@ -156847,7 +156869,7 @@ var init_projectSafety = __esm(() => {
156847
156869
  function getInstruments() {
156848
156870
  if (instruments)
156849
156871
  return instruments;
156850
- const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.76.4");
156872
+ const meter = import_api10.metrics.getMeter("ur-agent.gen_ai", "1.76.6");
156851
156873
  instruments = {
156852
156874
  operationDuration: meter.createHistogram("gen_ai.client.operation.duration", {
156853
156875
  description: "GenAI operation duration.",
@@ -156945,7 +156967,7 @@ function genAiAgentAttributes() {
156945
156967
  "gen_ai.operation.name": GEN_AI_OPERATION_INVOKE_AGENT,
156946
156968
  "gen_ai.provider.name": "ur",
156947
156969
  "gen_ai.agent.name": "UR-Nexus",
156948
- "gen_ai.agent.version": "1.76.4"
156970
+ "gen_ai.agent.version": "1.76.6"
156949
156971
  };
156950
156972
  }
156951
156973
  function genAiWorkflowAttributes(workflowName) {
@@ -156961,7 +156983,7 @@ function genAiWorkflowAttributes(workflowName) {
156961
156983
  function startGenAiWorkflowSpan(workflowName) {
156962
156984
  const attributes = genAiWorkflowAttributes(workflowName);
156963
156985
  const name = typeof attributes["gen_ai.workflow.name"] === "string" ? `invoke_workflow ${attributes["gen_ai.workflow.name"]}` : GEN_AI_OPERATION_INVOKE_WORKFLOW;
156964
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.4").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
156986
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.6").startSpan(name, { kind: import_api10.SpanKind.INTERNAL, attributes });
156965
156987
  }
156966
156988
  function endGenAiWorkflowSpan(span, options2 = {}) {
156967
156989
  try {
@@ -156999,7 +157021,7 @@ function startGenAiMemorySpan(operation, options2 = {}) {
156999
157021
  if (options2.recordCount !== undefined && Number.isInteger(options2.recordCount) && options2.recordCount >= 0) {
157000
157022
  attributes["gen_ai.memory.record.count"] = options2.recordCount;
157001
157023
  }
157002
- return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.4").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
157024
+ return import_api10.trace.getTracer("ur-agent.gen_ai", "1.76.6").startSpan(operation, { kind: import_api10.SpanKind.INTERNAL, attributes });
157003
157025
  }
157004
157026
  function endGenAiMemorySpan(span, options2 = {}) {
157005
157027
  try {
@@ -250647,7 +250669,7 @@ function getTelemetryAttributes() {
250647
250669
  attributes["session.id"] = sessionId;
250648
250670
  }
250649
250671
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
250650
- attributes["app.version"] = "1.76.4";
250672
+ attributes["app.version"] = "1.76.6";
250651
250673
  }
250652
250674
  const oauthAccount = getOauthAccountInfo();
250653
250675
  if (oauthAccount) {
@@ -297131,7 +297153,7 @@ function getInstallationEnv() {
297131
297153
  return;
297132
297154
  }
297133
297155
  function getURCodeVersion() {
297134
- return "1.76.4";
297156
+ return "1.76.6";
297135
297157
  }
297136
297158
  async function getInstalledVSCodeExtensionVersion(command) {
297137
297159
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -304462,7 +304484,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
304462
304484
  const client2 = new Client({
304463
304485
  name: "ur",
304464
304486
  title: "UR",
304465
- version: "1.76.4",
304487
+ version: "1.76.6",
304466
304488
  description: "UR-Nexus autonomous engineering workflow engine",
304467
304489
  websiteUrl: PRODUCT_URL
304468
304490
  }, {
@@ -304822,7 +304844,7 @@ var init_client5 = __esm(() => {
304822
304844
  const client2 = new Client({
304823
304845
  name: "ur",
304824
304846
  title: "UR",
304825
- version: "1.76.4",
304847
+ version: "1.76.6",
304826
304848
  description: "UR-Nexus autonomous engineering workflow engine",
304827
304849
  websiteUrl: PRODUCT_URL
304828
304850
  }, {
@@ -317375,7 +317397,7 @@ async function createRuntime() {
317375
317397
  bootstrapTelemetry();
317376
317398
  const resource = defaultResource().merge(detectResources({ detectors: [envDetector] })).merge(resourceFromAttributes({
317377
317399
  [import_semantic_conventions7.ATTR_SERVICE_NAME]: "ur-agent",
317378
- [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.76.4"
317400
+ [import_semantic_conventions7.ATTR_SERVICE_VERSION]: "1.76.6"
317379
317401
  }));
317380
317402
  const tracerProvider = exporters.traces.length > 0 ? new BasicTracerProvider({
317381
317403
  resource,
@@ -317408,11 +317430,11 @@ async function createRuntime() {
317408
317430
  setMeterProvider(meterProvider);
317409
317431
  setLoggerProvider(loggerProvider);
317410
317432
  if (meterProvider) {
317411
- const meter = meterProvider.getMeter("ur-agent", "1.76.4");
317433
+ const meter = meterProvider.getMeter("ur-agent", "1.76.6");
317412
317434
  setMeter(meter, (name, options2) => meter.createCounter(name, options2));
317413
317435
  }
317414
317436
  if (loggerProvider) {
317415
- setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.76.4"));
317437
+ setEventLogger(loggerProvider.getLogger("ur-agent.events", "1.76.6"));
317416
317438
  }
317417
317439
  if (!cleanupRegistered2) {
317418
317440
  cleanupRegistered2 = true;
@@ -318074,9 +318096,9 @@ async function assertMinVersion() {
318074
318096
  if (false) {}
318075
318097
  try {
318076
318098
  const versionConfig = await getDynamicConfig_BLOCKS_ON_INIT("tengu_version_config", { minVersion: "0.0.0" });
318077
- if (versionConfig.minVersion && lt("1.76.4", versionConfig.minVersion)) {
318099
+ if (versionConfig.minVersion && lt("1.76.6", versionConfig.minVersion)) {
318078
318100
  console.error(`
318079
- It looks like your version of UR (${"1.76.4"}) needs an update.
318101
+ It looks like your version of UR (${"1.76.6"}) needs an update.
318080
318102
  A newer version (${versionConfig.minVersion} or higher) is required to continue.
318081
318103
 
318082
318104
  To update, please run:
@@ -318292,7 +318314,7 @@ async function installGlobalPackage(specificVersion) {
318292
318314
  logError2(new AutoUpdaterError("Another process is currently installing an update"));
318293
318315
  logEvent("tengu_auto_updater_lock_contention", {
318294
318316
  pid: process.pid,
318295
- currentVersion: "1.76.4"
318317
+ currentVersion: "1.76.6"
318296
318318
  });
318297
318319
  return "in_progress";
318298
318320
  }
@@ -318301,7 +318323,7 @@ async function installGlobalPackage(specificVersion) {
318301
318323
  if (!env2.isRunningWithBun() && env2.isNpmFromWindowsPath()) {
318302
318324
  logError2(new Error("Windows NPM detected in WSL environment"));
318303
318325
  logEvent("tengu_auto_updater_windows_npm_in_wsl", {
318304
- currentVersion: "1.76.4"
318326
+ currentVersion: "1.76.6"
318305
318327
  });
318306
318328
  console.error(`
318307
318329
  Error: Windows NPM detected in WSL
@@ -318836,7 +318858,7 @@ function detectLinuxGlobPatternWarnings() {
318836
318858
  }
318837
318859
  async function getDoctorDiagnostic() {
318838
318860
  const installationType = await getCurrentInstallationType();
318839
- const version2 = typeof MACRO !== "undefined" ? "1.76.4" : "unknown";
318861
+ const version2 = typeof MACRO !== "undefined" ? "1.76.6" : "unknown";
318840
318862
  const installationPath = await getInstallationPath();
318841
318863
  const invokedBinary = getInvokedBinary();
318842
318864
  const multipleInstallations = await detectMultipleInstallations();
@@ -319771,8 +319793,8 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
319771
319793
  const maxVersion = await getMaxVersion();
319772
319794
  if (maxVersion && gt(version2, maxVersion)) {
319773
319795
  logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version2} to ${maxVersion}`);
319774
- if (gte("1.76.4", maxVersion)) {
319775
- logForDebugging(`Native installer: current version ${"1.76.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
319796
+ if (gte("1.76.6", maxVersion)) {
319797
+ logForDebugging(`Native installer: current version ${"1.76.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
319776
319798
  logEvent("tengu_native_update_skipped_max_version", {
319777
319799
  latency_ms: Date.now() - startTime,
319778
319800
  max_version: maxVersion,
@@ -319783,7 +319805,7 @@ async function updateLatest(channelOrVersion, forceReinstall = false) {
319783
319805
  version2 = maxVersion;
319784
319806
  }
319785
319807
  }
319786
- if (!forceReinstall && version2 === "1.76.4" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
319808
+ if (!forceReinstall && version2 === "1.76.6" && await versionIsAvailable(version2) && await isPossibleURBinary(executablePath)) {
319787
319809
  logForDebugging(`Found ${version2} at ${executablePath}, skipping install`);
319788
319810
  logEvent("tengu_native_update_complete", {
319789
319811
  latency_ms: Date.now() - startTime,
@@ -379197,6 +379219,9 @@ var init_prompt19 = __esm(() => {
379197
379219
  });
379198
379220
 
379199
379221
  // src/tools/TaskCreateTool/TaskCreateTool.ts
379222
+ function normalizeTaskId(candidate) {
379223
+ return candidate.trim().replace(/^#/gu, "");
379224
+ }
379200
379225
  var inputSchema38, outputSchema33, TaskCreateTool;
379201
379226
  var init_TaskCreateTool = __esm(() => {
379202
379227
  init_v4();
@@ -379266,10 +379291,11 @@ var init_TaskCreateTool = __esm(() => {
379266
379291
  addBlockedBy,
379267
379292
  addToCurrentList
379268
379293
  }, context5) {
379269
- const initialBlocks = [...new Set([...blocks ?? [], ...addBlocks ?? []])];
379270
- const initialBlockedBy = [
379294
+ const normalize13 = (raw) => [...new Set(raw.map(normalizeTaskId).filter(Boolean))];
379295
+ const initialBlocks = normalize13([...new Set([...blocks ?? [], ...addBlocks ?? []])]);
379296
+ const initialBlockedBy = normalize13([
379271
379297
  ...new Set([...blockedBy ?? [], ...addBlockedBy ?? []])
379272
- ];
379298
+ ]);
379273
379299
  const taskListId = getTaskListId();
379274
379300
  const run2 = getTaskListRunContext() ?? (context5.agentId ? undefined : getTaskListRunFromMessages(context5.messages ?? []));
379275
379301
  const taskData = {
@@ -379285,27 +379311,36 @@ var init_TaskCreateTool = __esm(() => {
379285
379311
  const taskId = run2 ? await createTaskForRun(taskListId, run2.generationId, taskData, {
379286
379312
  appendToCurrent: run2.appendToCurrent || addToCurrentList === true
379287
379313
  }) : await createTask(taskListId, taskData);
379288
- const dependencies = [
379289
- ...initialBlocks.map((targetId) => ({
379290
- fromTaskId: taskId,
379291
- toTaskId: targetId,
379292
- field: "blocks"
379293
- })),
379294
- ...initialBlockedBy.map((blockerId) => ({
379295
- fromTaskId: blockerId,
379296
- toTaskId: taskId,
379297
- field: "blockedBy"
379298
- }))
379299
- ];
379300
- const dependencyResult = await updateTaskWithDependencies(taskListId, taskId, {}, dependencies);
379301
- if (dependencyResult.success === false) {
379302
- const dependency = dependencyResult.dependency;
379303
- await deleteTask(taskListId, taskId);
379304
- if (dependency) {
379305
- const field = dependencies.find((candidate) => candidate.fromTaskId === dependency.fromTaskId && candidate.toTaskId === dependency.toTaskId)?.field ?? "dependency";
379306
- throw new Error(`Invalid ${field} dependency ` + `#${dependency.fromTaskId} -> #${dependency.toTaskId}: ` + dependencyResult.reason);
379314
+ const candidateDependencies = [];
379315
+ const seenEdges = new Set;
379316
+ const addCandidate = (fromTaskId, toTaskId, field) => {
379317
+ const from = normalizeTaskId(fromTaskId);
379318
+ const to = normalizeTaskId(toTaskId);
379319
+ if (!from || !to || from === to)
379320
+ return;
379321
+ const key = `${from}->${to}`;
379322
+ if (seenEdges.has(key))
379323
+ return;
379324
+ seenEdges.add(key);
379325
+ candidateDependencies.push({ fromTaskId: from, toTaskId: to, field });
379326
+ };
379327
+ for (const targetId of initialBlocks) {
379328
+ addCandidate(taskId, targetId, "blocks");
379329
+ }
379330
+ for (const blockerId of initialBlockedBy) {
379331
+ addCandidate(blockerId, taskId, "blockedBy");
379332
+ }
379333
+ if (candidateDependencies.length > 0) {
379334
+ const dependencyResult = await updateTaskWithDependencies(taskListId, taskId, {}, candidateDependencies);
379335
+ if (dependencyResult.success === false) {
379336
+ const dependency = dependencyResult.dependency;
379337
+ await deleteTask(taskListId, taskId);
379338
+ if (dependency) {
379339
+ const field = candidateDependencies.find((candidate) => candidate.fromTaskId === dependency.fromTaskId && candidate.toTaskId === dependency.toTaskId)?.field ?? "dependency";
379340
+ throw new Error(`Invalid ${field} dependency ` + `#${dependency.fromTaskId} -> #${dependency.toTaskId}: ` + dependencyResult.reason);
379341
+ }
379342
+ throw new Error(`Failed to create task dependencies: ${dependencyResult.reason}`);
379307
379343
  }
379308
- throw new Error(`Failed to create task dependencies: ${dependencyResult.reason}`);
379309
379344
  }
379310
379345
  const blockingErrors = [];
379311
379346
  const generator = executeTaskCreatedHooks(taskId, subject, description, getAgentName(), getTeamName(), undefined, context5?.abortController?.signal, undefined, context5);
@@ -379555,6 +379590,9 @@ Set up task dependencies:
379555
379590
  `;
379556
379591
 
379557
379592
  // src/tools/TaskUpdateTool/TaskUpdateTool.ts
379593
+ function normalizeTaskId2(candidate) {
379594
+ return candidate.trim().replace(/^#/gu, "");
379595
+ }
379558
379596
  var inputSchema40, outputSchema35, TaskUpdateTool;
379559
379597
  var init_TaskUpdateTool = __esm(() => {
379560
379598
  init_v4();
@@ -379656,13 +379694,16 @@ var init_TaskUpdateTool = __esm(() => {
379656
379694
  }
379657
379695
  };
379658
379696
  }
379697
+ const normalize13 = (raw) => [...new Set(raw.map(normalizeTaskId2).filter(Boolean))];
379698
+ const addBlockIds = normalize13(addBlocks ?? []);
379699
+ const addBlockedByIds = normalize13(addBlockedBy ?? []);
379659
379700
  const requestedDependencies = [
379660
- ...(addBlocks ?? []).map((targetId) => ({
379701
+ ...addBlockIds.map((targetId) => ({
379661
379702
  fromTaskId: taskId,
379662
379703
  toTaskId: targetId,
379663
379704
  field: "addBlocks"
379664
379705
  })),
379665
- ...(addBlockedBy ?? []).map((blockerId) => ({
379706
+ ...addBlockedByIds.map((blockerId) => ({
379666
379707
  fromTaskId: blockerId,
379667
379708
  toTaskId: taskId,
379668
379709
  field: "addBlockedBy"
@@ -389358,7 +389399,7 @@ function isAnyTracingEnabled() {
389358
389399
  return isTelemetryEnabled() || isEnhancedTelemetryEnabled() || isBetaTracingEnabled();
389359
389400
  }
389360
389401
  function getTracer() {
389361
- return import_api39.trace.getTracer("ur-agent.gen_ai", "1.76.4");
389402
+ return import_api39.trace.getTracer("ur-agent.gen_ai", "1.76.6");
389362
389403
  }
389363
389404
  function createSpanAttributes(spanType, customAttributes = {}) {
389364
389405
  const baseAttributes = getTelemetryAttributes();
@@ -391472,7 +391513,56 @@ function buildSchemaNotSentHint(tool, messages, tools) {
391472
391513
 
391473
391514
  This tool's schema was not sent to the API \u2014 it was not in the discovered-tool set derived from message history. ` + `Without the schema in your prompt, typed parameters (arrays, numbers, booleans) get emitted as strings and the client-side parser rejects them. Load the tool first: call ${TOOL_SEARCH_TOOL_NAME} with query "select:${tool.name}", then retry this call.`;
391474
391515
  }
391516
+ function isObjectValue(value) {
391517
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
391518
+ }
391519
+ function normalizeExecutionToolInput(tool, input) {
391520
+ if (tool.name === ASK_USER_QUESTION_TOOL_NAME) {
391521
+ const normalized = normalizeAskUserQuestionInput(input);
391522
+ if (!isObjectValue(normalized)) {
391523
+ const problemsInput = Array.isArray(normalized) ? { questions: normalized } : isObjectValue(normalized) ? normalized : isObjectValue(input) ? input : undefined;
391524
+ const problems2 = problemsInput ? describeQuestionPayloadProblems(problemsInput) : ["Input must be an object with a `questions` array."];
391525
+ return {
391526
+ input,
391527
+ validationHint: `AskUserQuestion input cannot be rendered: ${problems2.join(" ")}`
391528
+ };
391529
+ }
391530
+ const problems = describeQuestionPayloadProblems(normalized);
391531
+ if (problems.length > 0) {
391532
+ return {
391533
+ input: normalized,
391534
+ validationHint: `AskUserQuestion input cannot be rendered: ${problems.join(" ")}`
391535
+ };
391536
+ }
391537
+ return { input: normalized };
391538
+ }
391539
+ if (tool.name === FILE_WRITE_TOOL_NAME && tool === FileWriteTool) {
391540
+ const parsed = FileWriteTool.inputSchema.safeParse(input);
391541
+ if (parsed.success) {
391542
+ return { input: parsed.data };
391543
+ }
391544
+ return {
391545
+ input,
391546
+ validationHint: parsed.error.issues.map((issue2) => issue2.message).join(". ")
391547
+ };
391548
+ }
391549
+ return { input };
391550
+ }
391551
+ function formatToolInputError(toolName, reason) {
391552
+ if (toolName === ASK_USER_QUESTION_TOOL_NAME || toolName === FILE_WRITE_TOOL_NAME) {
391553
+ return {
391554
+ toolUseError: reason,
391555
+ toolUseResult: reason
391556
+ };
391557
+ }
391558
+ return {
391559
+ toolUseError: `InputValidationError: ${reason}`,
391560
+ toolUseResult: `InputValidationError: ${reason}`
391561
+ };
391562
+ }
391475
391563
  async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContext, canUseTool, assistantMessage, messageId, requestId, mcpServerType, mcpServerBaseUrl, onToolProgress) {
391564
+ const normalized = normalizeExecutionToolInput(tool, input);
391565
+ input = normalized.input;
391476
391566
  let parsedInput = tool.inputSchema.safeParse(input);
391477
391567
  if (!parsedInput.success && parsedInput.error.issues.length > 0 && parsedInput.error.issues.every((issue2) => issue2.code === "unrecognized_keys")) {
391478
391568
  const { input: cleaned, stripped } = stripUnrecognizedKeys(input, parsedInput.error.issues);
@@ -391514,9 +391604,17 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
391514
391604
  ];
391515
391605
  }
391516
391606
  if (!parsedInput.success) {
391607
+ const normalizedHint = normalized.validationHint;
391517
391608
  recordCallFailure(callSig);
391518
- const questionProblems = tool.name === ASK_USER_QUESTION_TOOL_NAME ? describeQuestionPayloadProblems(normalizeAskUserQuestionInput(input)) : [];
391519
- let errorContent = questionProblems.length > 0 ? `${tool.name} input cannot be rendered: ${questionProblems.join(" ")}` : formatZodValidationError(tool.name, parsedInput.error);
391609
+ let errorContent = normalizedHint;
391610
+ if (errorContent === undefined) {
391611
+ const questionProblems = tool.name === ASK_USER_QUESTION_TOOL_NAME ? describeQuestionPayloadProblems(normalizeAskUserQuestionInput(input)) : [];
391612
+ if (questionProblems.length > 0) {
391613
+ errorContent = `${tool.name} input cannot be rendered: ${questionProblems.join(" ")}`;
391614
+ } else {
391615
+ errorContent = formatZodValidationError(tool.name, parsedInput.error);
391616
+ }
391617
+ }
391520
391618
  const schemaHint = buildSchemaNotSentHint(tool, toolUseContext.messages, toolUseContext.options.tools);
391521
391619
  if (schemaHint) {
391522
391620
  logEvent("tengu_deferred_tool_schema_not_sent", {
@@ -391545,18 +391643,19 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
391545
391643
  },
391546
391644
  ...mcpToolDetailsForAnalytics(tool.name, mcpServerType, mcpServerBaseUrl)
391547
391645
  });
391646
+ const { toolUseError, toolUseResult } = formatToolInputError(tool.name, errorContent);
391548
391647
  return [
391549
391648
  {
391550
391649
  message: createUserMessage({
391551
391650
  content: [
391552
391651
  {
391553
391652
  type: "tool_result",
391554
- content: `<tool_use_error>InputValidationError: ${errorContent}</tool_use_error>`,
391653
+ content: `<tool_use_error>${toolUseError}</tool_use_error>`,
391555
391654
  is_error: true,
391556
391655
  tool_use_id: toolUseID
391557
391656
  }
391558
391657
  ],
391559
- toolUseResult: `InputValidationError: ${parsedInput.error.message}`,
391658
+ toolUseResult,
391560
391659
  sourceToolAssistantUUID: assistantMessage.uuid
391561
391660
  })
391562
391661
  }
@@ -391867,6 +391966,8 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
391867
391966
  endToolSpan();
391868
391967
  toolUseContext.toolDecisions?.delete(toolUseID);
391869
391968
  };
391969
+ const finalNormalized = normalizeExecutionToolInput(tool, callInput);
391970
+ callInput = finalNormalized.input;
391870
391971
  const finalParsedInput = tool.inputSchema.safeParse(callInput);
391871
391972
  if (!finalParsedInput.success) {
391872
391973
  callSig = callSignature(tool.name, callInput, repeatedFailureScope(toolUseContext, messageId));
@@ -391895,18 +391996,21 @@ async function checkPermissionsAndCallTool(tool, toolUseID, input, toolUseContex
391895
391996
  }
391896
391997
  recordCallFailure(callSig);
391897
391998
  const finalInputError = formatZodValidationError(tool.name, finalParsedInput.error);
391999
+ const finalInputContent = finalNormalized.validationHint ?? finalInputError;
391898
392000
  finishPreExecutionRejection();
392001
+ const finalInputContentWithContext = tool.name === ASK_USER_QUESTION_TOOL_NAME || tool.name === FILE_WRITE_TOOL_NAME ? finalInputContent : `InputValidationError after input update: ${finalInputContent}`;
392002
+ const { toolUseError, toolUseResult } = formatToolInputError(tool.name, finalInputContentWithContext);
391899
392003
  resultingMessages.push({
391900
392004
  message: createUserMessage({
391901
392005
  content: [
391902
392006
  {
391903
392007
  type: "tool_result",
391904
- content: `<tool_use_error>InputValidationError after input update: ${finalInputError}</tool_use_error>`,
392008
+ content: `<tool_use_error>${toolUseError}</tool_use_error>`,
391905
392009
  is_error: true,
391906
392010
  tool_use_id: toolUseID
391907
392011
  }
391908
392012
  ],
391909
- toolUseResult: `InputValidationError: ${finalParsedInput.error.message}`,
392013
+ toolUseResult,
391910
392014
  sourceToolAssistantUUID: assistantMessage.uuid
391911
392015
  })
391912
392016
  });
@@ -392374,6 +392478,7 @@ var init_toolExecution = __esm(() => {
392374
392478
  init_bashPermissions();
392375
392479
  init_prompt3();
392376
392480
  init_prompt4();
392481
+ init_FileWriteTool();
392377
392482
  init_gitOperationTracking();
392378
392483
  init_prompt8();
392379
392484
  init_tools2();
@@ -409457,6 +409562,40 @@ function joinTextAtSeam(a2, b) {
409457
409562
  }
409458
409563
  return [...a2, ...b];
409459
409564
  }
409565
+ function safeJsonDebugValue(value) {
409566
+ try {
409567
+ return JSON.stringify(value, null, 2);
409568
+ } catch {
409569
+ return String(value);
409570
+ }
409571
+ }
409572
+ function normalizeIncomingWriteInputForAPI(input) {
409573
+ if (!isObject_default(input)) {
409574
+ return null;
409575
+ }
409576
+ const parsed = FileWriteTool.inputSchema.safeParse(input);
409577
+ if (!parsed.success) {
409578
+ return null;
409579
+ }
409580
+ return parsed.data;
409581
+ }
409582
+ function normalizeIncomingAskUserQuestionInputForAPI(input) {
409583
+ const normalized = normalizeAskUserQuestionInput(input);
409584
+ if (!isObject_default(normalized)) {
409585
+ return null;
409586
+ }
409587
+ if (describeQuestionPayloadProblems(normalized).length > 0) {
409588
+ return null;
409589
+ }
409590
+ return normalized;
409591
+ }
409592
+ function toolUseFallbackText(toolName, reason, input) {
409593
+ const safeInput = safeJsonDebugValue(input).slice(0, MAX_TOOL_USE_REPAIR_TEXT_CHARS);
409594
+ return {
409595
+ type: "text",
409596
+ text: `Tool ${toolName} call was not renderable (${reason}). Raw input: ${safeInput}`
409597
+ };
409598
+ }
409460
409599
  function smooshIntoToolResult(tr, blocks) {
409461
409600
  if (blocks.length === 0)
409462
409601
  return tr;
@@ -409564,6 +409703,20 @@ function normalizeContentFromAPI(contentBlocks, tools, agentId) {
409564
409703
  if (typeof normalizedInput !== "object" || normalizedInput === null || Array.isArray(normalizedInput)) {
409565
409704
  throw new Error(`Tool use input for ${String(contentBlock.name)} must be a JSON object`);
409566
409705
  }
409706
+ if (contentBlock.name === FILE_WRITE_TOOL_NAME) {
409707
+ const repaired = normalizeIncomingWriteInputForAPI(normalizedInput);
409708
+ if (repaired === null) {
409709
+ return toolUseFallbackText(String(contentBlock.name ?? FILE_WRITE_TOOL_NAME), "invalid Write arguments", contentBlock.input);
409710
+ }
409711
+ normalizedInput = repaired;
409712
+ }
409713
+ if (contentBlock.name === ASK_USER_QUESTION_TOOL_NAME) {
409714
+ const repaired = normalizeIncomingAskUserQuestionInputForAPI(normalizedInput);
409715
+ if (repaired === null) {
409716
+ return toolUseFallbackText(String(contentBlock.name ?? ASK_USER_QUESTION_TOOL_NAME), "invalid AskUserQuestion arguments", contentBlock.input);
409717
+ }
409718
+ normalizedInput = repaired;
409719
+ }
409567
409720
  const sanitized = stripEmptyParameterNames(normalizedInput);
409568
409721
  if (sanitized.stripped) {
409569
409722
  normalizedInput = sanitized.input;
@@ -411416,7 +411569,7 @@ Note: The user's next message may contain a correction or preference. Pay close
411416
411569
  `, PLAN_REJECTION_PREFIX = `The agent proposed a plan that was rejected by the user. The user chose to stay in plan mode rather than proceed with implementation.
411417
411570
 
411418
411571
  Rejected plan:
411419
- `, DENIAL_WORKAROUND_GUIDANCE, NO_RESPONSE_REQUESTED = "No response requested.", SYNTHETIC_TOOL_RESULT_PLACEHOLDER = "[Tool result missing due to internal error]", SYNTHETIC_MODEL = "<synthetic>", SYNTHETIC_MESSAGES, EMPTY_LOOKUPS, EMPTY_STRING_SET, STRIPPED_TAGS_RE, PLAN_PHASE4_CONTROL = `### Phase 4: Final Plan
411572
+ `, DENIAL_WORKAROUND_GUIDANCE, NO_RESPONSE_REQUESTED = "No response requested.", SYNTHETIC_TOOL_RESULT_PLACEHOLDER = "[Tool result missing due to internal error]", SYNTHETIC_MODEL = "<synthetic>", SYNTHETIC_MESSAGES, EMPTY_LOOKUPS, EMPTY_STRING_SET, MAX_TOOL_USE_REPAIR_TEXT_CHARS = 1200, STRIPPED_TAGS_RE, PLAN_PHASE4_CONTROL = `### Phase 4: Final Plan
411420
411573
  Goal: Write your final plan to the plan file (the only file you can edit).
411421
411574
  - Begin with a **Context** section: explain why this change is being made \u2014 the problem or need it addresses, what prompted it, and the intended outcome
411422
411575
  - Include only your recommended approach, not all alternatives
@@ -411469,6 +411622,7 @@ var init_messages = __esm(() => {
411469
411622
  init_ExitPlanModeV2Tool();
411470
411623
  init_FileEditTool();
411471
411624
  init_prompt3();
411625
+ init_prompt4();
411472
411626
  init_FileWriteTool();
411473
411627
  init_prompt2();
411474
411628
  init_state();
@@ -411481,6 +411635,7 @@ var init_messages = __esm(() => {
411481
411635
  init_debug();
411482
411636
  init_displayTags();
411483
411637
  init_embeddedTools();
411638
+ init_AskUserQuestionTool();
411484
411639
  init_format2();
411485
411640
  init_imageValidation();
411486
411641
  init_json();
@@ -419527,7 +419682,7 @@ function Feedback({
419527
419682
  platform: env2.platform,
419528
419683
  gitRepo: envInfo.isGit,
419529
419684
  terminal: env2.terminal,
419530
- version: "1.76.4",
419685
+ version: "1.76.6",
419531
419686
  transcript: normalizeMessagesForAPI(messages),
419532
419687
  errors: sanitizedErrors,
419533
419688
  lastApiRequest: getLastAPIRequest(),
@@ -419719,7 +419874,7 @@ function Feedback({
419719
419874
  ", ",
419720
419875
  env2.terminal,
419721
419876
  ", v",
419722
- "1.76.4"
419877
+ "1.76.6"
419723
419878
  ]
419724
419879
  }, undefined, true, undefined, this)
419725
419880
  ]
@@ -419825,7 +419980,7 @@ ${sanitizedDescription}
419825
419980
  ` + `**Environment Info**
419826
419981
  ` + `- Platform: ${env2.platform}
419827
419982
  ` + `- Terminal: ${env2.terminal}
419828
- ` + `- Version: ${"1.76.4"}
419983
+ ` + `- Version: ${"1.76.6"}
419829
419984
  ` + `- Feedback ID: ${feedbackId}
419830
419985
  ` + `
419831
419986
  **Errors**
@@ -422935,7 +423090,7 @@ function buildPrimarySection() {
422935
423090
  }, undefined, false, undefined, this);
422936
423091
  return [{
422937
423092
  label: "Version",
422938
- value: "1.76.4"
423093
+ value: "1.76.6"
422939
423094
  }, {
422940
423095
  label: "Session name",
422941
423096
  value: nameValue
@@ -426317,7 +426472,7 @@ function Config({
426317
426472
  }
426318
426473
  }, undefined, false, undefined, this)
426319
426474
  }, undefined, false, undefined, this) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_dev_runtime179.jsxDEV(ChannelDowngradeDialog, {
426320
- currentVersion: "1.76.4",
426475
+ currentVersion: "1.76.6",
426321
426476
  onChoice: (choice) => {
426322
426477
  setShowSubmenu(null);
426323
426478
  setTabsHidden(false);
@@ -426329,7 +426484,7 @@ function Config({
426329
426484
  autoUpdatesChannel: "stable"
426330
426485
  };
426331
426486
  if (choice === "stay") {
426332
- newSettings.minimumVersion = "1.76.4";
426487
+ newSettings.minimumVersion = "1.76.6";
426333
426488
  }
426334
426489
  updateSettingsForSource("userSettings", newSettings);
426335
426490
  setSettingsData((prev_27) => ({
@@ -434393,7 +434548,7 @@ function HelpV2(t0) {
434393
434548
  let t6;
434394
434549
  if ($2[31] !== tabs) {
434395
434550
  t6 = /* @__PURE__ */ jsx_dev_runtime206.jsxDEV(Tabs, {
434396
- title: `UR v${"1.76.4"}`,
434551
+ title: `UR v${"1.76.6"}`,
434397
434552
  color: "professionalBlue",
434398
434553
  defaultTab: "general",
434399
434554
  children: tabs
@@ -435326,7 +435481,7 @@ function buildToolUseContext(tools, readFileStateCache, toolPermissionContext, a
435326
435481
  async function handleInitialize(options2) {
435327
435482
  return {
435328
435483
  name: "UR",
435329
- version: "1.76.4",
435484
+ version: "1.76.6",
435330
435485
  protocolVersion: "0.1.0",
435331
435486
  workspaceRoot: options2.cwd,
435332
435487
  capabilities: {
@@ -452434,7 +452589,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
452434
452589
  return [];
452435
452590
  }
452436
452591
  }
452437
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.4") {
452592
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.6") {
452438
452593
  if (process.env.USER_TYPE === "ant") {
452439
452594
  const changelog = "";
452440
452595
  if (changelog) {
@@ -452461,7 +452616,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.76.4")
452461
452616
  releaseNotes
452462
452617
  };
452463
452618
  }
452464
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.76.4") {
452619
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.76.6") {
452465
452620
  if (process.env.USER_TYPE === "ant") {
452466
452621
  const changelog = "";
452467
452622
  if (changelog) {
@@ -455327,7 +455482,7 @@ function getRecentActivitySync() {
455327
455482
  return cachedActivity;
455328
455483
  }
455329
455484
  function getLogoDisplayData() {
455330
- const version2 = process.env.DEMO_VERSION ?? "1.76.4";
455485
+ const version2 = process.env.DEMO_VERSION ?? "1.76.6";
455331
455486
  const serverUrl = getDirectConnectServerUrl();
455332
455487
  const displayPath = process.env.DEMO_VERSION ? "/code/ur" : getDisplayPath(getCwd());
455333
455488
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -456194,7 +456349,7 @@ function LogoV2() {
456194
456349
  if ($2[2] === Symbol.for("react.memo_cache_sentinel")) {
456195
456350
  t2 = () => {
456196
456351
  const currentConfig2 = getGlobalConfig();
456197
- if (currentConfig2.lastReleaseNotesSeen === "1.76.4") {
456352
+ if (currentConfig2.lastReleaseNotesSeen === "1.76.6") {
456198
456353
  return;
456199
456354
  }
456200
456355
  saveGlobalConfig(_temp325);
@@ -456879,12 +457034,12 @@ function LogoV2() {
456879
457034
  return t41;
456880
457035
  }
456881
457036
  function _temp325(current) {
456882
- if (current.lastReleaseNotesSeen === "1.76.4") {
457037
+ if (current.lastReleaseNotesSeen === "1.76.6") {
456883
457038
  return current;
456884
457039
  }
456885
457040
  return {
456886
457041
  ...current,
456887
- lastReleaseNotesSeen: "1.76.4"
457042
+ lastReleaseNotesSeen: "1.76.6"
456888
457043
  };
456889
457044
  }
456890
457045
  function _temp241(s_0) {
@@ -473698,7 +473853,7 @@ function compileAgenticCiWorkflow(specName = "default", options2 = {}) {
473698
473853
  if (spec.name !== specName) {
473699
473854
  throw new Error("Agentic CI workflow spec name does not match");
473700
473855
  }
473701
- const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.76.4" : "1.76.4");
473856
+ const packageVersion = options2.packageVersion ?? (typeof MACRO !== "undefined" ? "1.76.6" : "1.76.6");
473702
473857
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(packageVersion)) {
473703
473858
  throw new Error("invalid ur-agent package version");
473704
473859
  }
@@ -474691,7 +474846,7 @@ runner; \`ur trigger\` is the inbound parser that decides what to run.
474691
474846
  path: ".github/workflows/ur.yml",
474692
474847
  root: "project",
474693
474848
  content: compileAgenticCiWorkflow("default", {
474694
- packageVersion: typeof MACRO !== "undefined" ? "1.76.4" : "1.76.4"
474849
+ packageVersion: typeof MACRO !== "undefined" ? "1.76.6" : "1.76.6"
474695
474850
  })
474696
474851
  },
474697
474852
  {
@@ -474754,7 +474909,7 @@ function value(tokens, flag) {
474754
474909
  return index2 >= 0 ? tokens[index2 + 1] : undefined;
474755
474910
  }
474756
474911
  function cliVersion() {
474757
- return typeof MACRO !== "undefined" ? "1.76.4" : "1.76.4";
474912
+ return typeof MACRO !== "undefined" ? "1.76.6" : "1.76.6";
474758
474913
  }
474759
474914
  function workflowPath(cwd2) {
474760
474915
  return join159(cwd2, ".github", "workflows", "ur-agentic-ci.yml");
@@ -480610,7 +480765,7 @@ function createAcpStdioApp(deps) {
480610
480765
  }
480611
480766
  },
480612
480767
  authMethods: [],
480613
- agentInfo: { name: "UR-Nexus", version: "1.76.4" }
480768
+ agentInfo: { name: "UR-Nexus", version: "1.76.6" }
480614
480769
  })).onRequest("authenticate", () => ({})).onRequest("session/new", async (context6) => {
480615
480770
  const result = runtime2.newSession(context6.params.cwd, context6.params.mcpServers, context6.params.additionalDirectories);
480616
480771
  await runtime2.announce({
@@ -480707,7 +480862,7 @@ function createAcpStdioAgent(deps) {
480707
480862
  }
480708
480863
  },
480709
480864
  authMethods: [],
480710
- agentInfo: { name: "UR-Nexus", version: "1.76.4" }
480865
+ agentInfo: { name: "UR-Nexus", version: "1.76.6" }
480711
480866
  });
480712
480867
  return;
480713
480868
  case "authenticate":
@@ -690159,7 +690314,7 @@ async function captureMemoryDiagnostics(trigger2, dumpNumber = 0) {
690159
690314
  smapsRollup,
690160
690315
  platform: process.platform,
690161
690316
  nodeVersion: process.version,
690162
- ccVersion: "1.76.4"
690317
+ ccVersion: "1.76.6"
690163
690318
  };
690164
690319
  }
690165
690320
  async function performHeapDump(trigger2 = "manual", dumpNumber = 0) {
@@ -690739,7 +690894,7 @@ var init_bridge_kick = __esm(() => {
690739
690894
  var call154 = async () => {
690740
690895
  return {
690741
690896
  type: "text",
690742
- value: "1.76.4"
690897
+ value: "1.76.6"
690743
690898
  };
690744
690899
  }, version2, version_default;
690745
690900
  var init_version = __esm(() => {
@@ -702006,7 +702161,7 @@ function generateHtmlReport(data, insights) {
702006
702161
  </html>`;
702007
702162
  }
702008
702163
  function buildExportData(data, insights, facets, remoteStats) {
702009
- const version3 = typeof MACRO !== "undefined" ? "1.76.4" : "unknown";
702164
+ const version3 = typeof MACRO !== "undefined" ? "1.76.6" : "unknown";
702010
702165
  const remote_hosts_collected = remoteStats?.hosts.filter((h2) => h2.sessionCount > 0).map((h2) => h2.name);
702011
702166
  const facets_summary = {
702012
702167
  total: facets.size,
@@ -706320,7 +706475,7 @@ var init_sessionStorage = __esm(() => {
706320
706475
  init_settings2();
706321
706476
  init_slowOperations();
706322
706477
  init_uuid();
706323
- VERSION7 = typeof MACRO !== "undefined" ? "1.76.4" : "unknown";
706478
+ VERSION7 = typeof MACRO !== "undefined" ? "1.76.6" : "unknown";
706324
706479
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
706325
706480
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
706326
706481
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -707535,7 +707690,7 @@ var init_filesystem = __esm(() => {
707535
707690
  });
707536
707691
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
707537
707692
  const nonce = randomBytes20(16).toString("hex");
707538
- return join232(getURTempDir(), "bundled-skills", "1.76.4", nonce);
707693
+ return join232(getURTempDir(), "bundled-skills", "1.76.6", nonce);
707539
707694
  });
707540
707695
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
707541
707696
  });
@@ -713884,7 +714039,7 @@ function computeFingerprint(messageText2, version3) {
713884
714039
  }
713885
714040
  function computeFingerprintFromMessages(messages) {
713886
714041
  const firstMessageText = extractFirstMessageText(messages);
713887
- return computeFingerprint(firstMessageText, "1.76.4");
714042
+ return computeFingerprint(firstMessageText, "1.76.6");
713888
714043
  }
713889
714044
  var FINGERPRINT_SALT = "59cf53e54c78";
713890
714045
  var init_fingerprint = () => {};
@@ -715803,7 +715958,7 @@ async function sideQuery(opts) {
715803
715958
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
715804
715959
  }
715805
715960
  const messageText2 = extractFirstUserMessageText(messages);
715806
- const fingerprint2 = computeFingerprint(messageText2, "1.76.4");
715961
+ const fingerprint2 = computeFingerprint(messageText2, "1.76.6");
715807
715962
  const attributionHeader = getAttributionHeader(fingerprint2);
715808
715963
  const systemBlocks = [
715809
715964
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -720640,7 +720795,7 @@ function buildSystemInitMessage(inputs) {
720640
720795
  slash_commands: inputs.commands.filter((c4) => c4.userInvocable !== false).map((c4) => c4.name),
720641
720796
  apiKeySource: getURHQApiKeyWithSource().source,
720642
720797
  betas: getSdkBetas(),
720643
- ur_version: "1.76.4",
720798
+ ur_version: "1.76.6",
720644
720799
  output_style: outputStyle2,
720645
720800
  agents: inputs.agents.map((agent2) => agent2.agentType),
720646
720801
  skills: inputs.skills.filter((s) => s.userInvocable !== false).map((skill2) => skill2.name),
@@ -734512,7 +734667,7 @@ var init_useVoiceEnabled = __esm(() => {
734512
734667
  function getSemverPart(version3) {
734513
734668
  return `${import_semver13.major(version3, { loose: true })}.${import_semver13.minor(version3, { loose: true })}.${import_semver13.patch(version3, { loose: true })}`;
734514
734669
  }
734515
- function useUpdateNotification(updatedVersion, initialVersion = "1.76.4") {
734670
+ function useUpdateNotification(updatedVersion, initialVersion = "1.76.6") {
734516
734671
  const [lastNotifiedSemver, setLastNotifiedSemver] = import_react223.useState(() => getSemverPart(initialVersion));
734517
734672
  if (!updatedVersion) {
734518
734673
  return null;
@@ -734561,7 +734716,7 @@ function AutoUpdater({
734561
734716
  return;
734562
734717
  }
734563
734718
  if (false) {}
734564
- const currentVersion = "1.76.4";
734719
+ const currentVersion = "1.76.6";
734565
734720
  const channel = getInitialSettings()?.autoUpdatesChannel ?? "latest";
734566
734721
  let latestVersion = await getLatestVersion(channel);
734567
734722
  const isDisabled = isAutoUpdaterDisabled();
@@ -734790,12 +734945,12 @@ function NativeAutoUpdater({
734790
734945
  logEvent("tengu_native_auto_updater_start", {});
734791
734946
  try {
734792
734947
  const maxVersion = await getMaxVersion();
734793
- if (maxVersion && gt("1.76.4", maxVersion)) {
734948
+ if (maxVersion && gt("1.76.6", maxVersion)) {
734794
734949
  const msg = await getMaxVersionMessage();
734795
734950
  setMaxVersionIssue(msg ?? "affects your version");
734796
734951
  }
734797
734952
  const result = await installLatest(channel);
734798
- const currentVersion = "1.76.4";
734953
+ const currentVersion = "1.76.6";
734799
734954
  const latencyMs = Date.now() - startTime;
734800
734955
  if (result.lockFailed) {
734801
734956
  logEvent("tengu_native_auto_updater_lock_contention", {
@@ -734932,17 +735087,17 @@ function PackageManagerAutoUpdater(t0) {
734932
735087
  const maxVersion = await getMaxVersion();
734933
735088
  if (maxVersion && latest && gt(latest, maxVersion)) {
734934
735089
  logForDebugging(`PackageManagerAutoUpdater: maxVersion ${maxVersion} is set, capping update from ${latest} to ${maxVersion}`);
734935
- if (gte("1.76.4", maxVersion)) {
734936
- logForDebugging(`PackageManagerAutoUpdater: current version ${"1.76.4"} is already at or above maxVersion ${maxVersion}, skipping update`);
735090
+ if (gte("1.76.6", maxVersion)) {
735091
+ logForDebugging(`PackageManagerAutoUpdater: current version ${"1.76.6"} is already at or above maxVersion ${maxVersion}, skipping update`);
734937
735092
  setUpdateAvailable(false);
734938
735093
  return;
734939
735094
  }
734940
735095
  latest = maxVersion;
734941
735096
  }
734942
- const hasUpdate = latest && !gte("1.76.4", latest) && !shouldSkipVersion(latest);
735097
+ const hasUpdate = latest && !gte("1.76.6", latest) && !shouldSkipVersion(latest);
734943
735098
  setUpdateAvailable(!!hasUpdate);
734944
735099
  if (hasUpdate) {
734945
- logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.76.4"} -> ${latest}`);
735100
+ logForDebugging(`PackageManagerAutoUpdater: Update available ${"1.76.6"} -> ${latest}`);
734946
735101
  }
734947
735102
  };
734948
735103
  $2[0] = t1;
@@ -734976,7 +735131,7 @@ function PackageManagerAutoUpdater(t0) {
734976
735131
  wrap: "truncate",
734977
735132
  children: [
734978
735133
  "currentVersion: ",
734979
- "1.76.4"
735134
+ "1.76.6"
734980
735135
  ]
734981
735136
  }, undefined, true, undefined, this);
734982
735137
  $2[3] = verbose;
@@ -745776,7 +745931,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
745776
745931
  project_dir: getOriginalCwd(),
745777
745932
  added_dirs: addedDirs
745778
745933
  },
745779
- version: "1.76.4",
745934
+ version: "1.76.6",
745780
745935
  output_style: {
745781
745936
  name: outputStyleName
745782
745937
  },
@@ -745911,7 +746066,7 @@ function StatusLineInner({
745911
746066
  const attention = customStatusError ?? taskAttention;
745912
746067
  const terminalSize = React132.useContext(TerminalSizeContext);
745913
746068
  const defaultStatusLineText = buildDefaultStatusBar({
745914
- version: "1.76.4",
746069
+ version: "1.76.6",
745915
746070
  providerLabel: providerRuntime.providerLabel,
745916
746071
  authMode: providerRuntime.authLabel,
745917
746072
  model: renderModelName(mainLoopModel) || providerRuntime.model || "",
@@ -758196,7 +758351,7 @@ async function submitTranscriptShare(messages, trigger2, appearanceId) {
758196
758351
  } catch {}
758197
758352
  const data = {
758198
758353
  trigger: trigger2,
758199
- version: "1.76.4",
758354
+ version: "1.76.6",
758200
758355
  platform: process.platform,
758201
758356
  transcript,
758202
758357
  subagentTranscripts: Object.keys(subagentTranscripts).length > 0 ? subagentTranscripts : undefined,
@@ -770570,7 +770725,7 @@ function WelcomeV2() {
770570
770725
  dimColor: true,
770571
770726
  children: [
770572
770727
  "v",
770573
- "1.76.4"
770728
+ "1.76.6"
770574
770729
  ]
770575
770730
  }, undefined, true, undefined, this)
770576
770731
  ]
@@ -771830,7 +771985,7 @@ function completeOnboarding() {
771830
771985
  saveGlobalConfig((current) => ({
771831
771986
  ...current,
771832
771987
  hasCompletedOnboarding: true,
771833
- lastOnboardingVersion: "1.76.4"
771988
+ lastOnboardingVersion: "1.76.6"
771834
771989
  }));
771835
771990
  }
771836
771991
  function showDialog(root2, renderer) {
@@ -776874,7 +777029,7 @@ function appendToLog(path24, message) {
776874
777029
  cwd: getFsImplementation().cwd(),
776875
777030
  userType: process.env.USER_TYPE,
776876
777031
  sessionId: getSessionId(),
776877
- version: "1.76.4"
777032
+ version: "1.76.6"
776878
777033
  };
776879
777034
  getLogWriter(path24).write(messageWithTimestamp);
776880
777035
  }
@@ -781033,8 +781188,8 @@ async function getEnvLessBridgeConfig() {
781033
781188
  }
781034
781189
  async function checkEnvLessBridgeMinVersion() {
781035
781190
  const cfg = await getEnvLessBridgeConfig();
781036
- if (cfg.min_version && lt("1.76.4", cfg.min_version)) {
781037
- return `Your version of UR (${"1.76.4"}) is too old for Remote Control.
781191
+ if (cfg.min_version && lt("1.76.6", cfg.min_version)) {
781192
+ return `Your version of UR (${"1.76.6"}) is too old for Remote Control.
781038
781193
  Version ${cfg.min_version} or higher is required. Run \`ur update\` to update.`;
781039
781194
  }
781040
781195
  return null;
@@ -781508,7 +781663,7 @@ async function initBridgeCore(params) {
781508
781663
  const rawApi = createBridgeApiClient({
781509
781664
  baseUrl,
781510
781665
  getAccessToken,
781511
- runnerVersion: "1.76.4",
781666
+ runnerVersion: "1.76.6",
781512
781667
  onDebug: logForDebugging,
781513
781668
  onAuth401,
781514
781669
  getTrustedDeviceToken
@@ -790981,7 +791136,7 @@ function getAgUiCapabilities() {
790981
791136
  name: "UR-Nexus",
790982
791137
  type: "ur-nexus",
790983
791138
  description: "Provider-flexible, local-first autonomous engineering workflow agent.",
790984
- version: "1.76.4",
791139
+ version: "1.76.6",
790985
791140
  provider: "UR",
790986
791141
  documentationUrl: "https://github.com/Maitham16/UR/blob/master/docs/AG_UI.md"
790987
791142
  },
@@ -792121,7 +792276,7 @@ function createMCPServer(cwd4, debug2, verbose) {
792121
792276
  };
792122
792277
  const server2 = new Server({
792123
792278
  name: "ur-nexus",
792124
- version: "1.76.4"
792279
+ version: "1.76.6"
792125
792280
  }, {
792126
792281
  capabilities: {
792127
792282
  tools: {}
@@ -793279,7 +793434,7 @@ function thrownResponse(error40) {
793279
793434
  }
793280
793435
  async function createUrMcp2026Runtime(options4) {
793281
793436
  const server2 = createMCPServer(options4.cwd, options4.debug === true, options4.verbose === true);
793282
- const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.76.4" }, { capabilities: {} });
793437
+ const client2 = new Client({ name: "ur-mcp-2026-adapter", version: "1.76.6" }, { capabilities: {} });
793283
793438
  const [clientTransport, serverTransport] = createLinkedTransportPair();
793284
793439
  try {
793285
793440
  await server2.connect(serverTransport);
@@ -793290,7 +793445,7 @@ async function createUrMcp2026Runtime(options4) {
793290
793445
  }
793291
793446
  const runtime2 = new Mcp2026Runtime({
793292
793447
  cwd: options4.cwd,
793293
- version: "1.76.4",
793448
+ version: "1.76.6",
793294
793449
  backend: {
793295
793450
  listTools: async () => {
793296
793451
  const listed = await client2.listTools();
@@ -795431,7 +795586,7 @@ async function update() {
795431
795586
  logEvent("tengu_update_check", {});
795432
795587
  const diagnostic2 = await getDoctorDiagnostic();
795433
795588
  const result = await checkUpgradeStatus({
795434
- currentVersion: "1.76.4",
795589
+ currentVersion: "1.76.6",
795435
795590
  packageName: UR_AGENT_PACKAGE_NAME,
795436
795591
  installationType: diagnostic2.installationType,
795437
795592
  latestVersion: () => getLatestNpmPackageVersion(UR_AGENT_PACKAGE_NAME)
@@ -796747,7 +796902,7 @@ ${customInstructions}` : customInstructions;
796747
796902
  }
796748
796903
  }
796749
796904
  logForDiagnosticsNoPII("info", "started", {
796750
- version: "1.76.4",
796905
+ version: "1.76.6",
796751
796906
  is_native_binary: isInBundledMode()
796752
796907
  });
796753
796908
  registerCleanup(async () => {
@@ -797533,7 +797688,7 @@ Usage: ur --remote "your task description"`, () => gracefulShutdown(1));
797533
797688
  pendingHookMessages
797534
797689
  }, renderAndRun);
797535
797690
  }
797536
- }).version("1.76.4 (UR-Nexus)", "-v, --version", "Output the version number");
797691
+ }).version("1.76.6 (UR-Nexus)", "-v, --version", "Output the version number");
797537
797692
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
797538
797693
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
797539
797694
  if (canUserConfigureAdvisor()) {
@@ -798585,7 +798740,7 @@ if (false) {}
798585
798740
  async function main2() {
798586
798741
  const args = process.argv.slice(2);
798587
798742
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
798588
- console.log(`${"1.76.4"} (UR-Nexus)`);
798743
+ console.log(`${"1.76.6"} (UR-Nexus)`);
798589
798744
  return;
798590
798745
  }
798591
798746
  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.4 (UR-Nexus)"
22
+ # expected for this release: "1.76.6 (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.4</p>
48
+ <p class="eyebrow">Version 1.76.6</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.4"
10
+ version = "1.76.6"
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.4",
5
+ "version": "1.76.6",
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.4",
3
+ "version": "1.76.6",
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",